16 #include <matrix/vlVector.h>
18 #include <QtCore/QAbstractItemModel>
19 #include <QtWidgets/QAction>
21 #include <boost/shared_ptr.hpp>
22 #include <boost/enable_shared_from_this.hpp>
23 #include <boost/ptr_container/ptr_vector.hpp>
25 #include <tbb/mutex.h>
26 #include <tbb/atomic.h>
33 class DtDynamicTerrainPageInterface;
39 ,
public boost::enable_shared_from_this<DtDynamicTerrainPageLogic>
44 friend class QueryCallback;
53 static boost::shared_ptr<DtDynamicTerrainPageLogic> create(
60 virtual void setupContextMenu(
QMenu* menu,
const QModelIndex&);
63 virtual void clickedOnMap(
const DtVector& point);
67 virtual QVariant headerData(
int column, Qt::Orientation,
int role)
const;
68 virtual QModelIndex index(
int row,
int column,
const QModelIndex& parent)
const;
69 virtual QModelIndex parent(
const QModelIndex&)
const;
70 virtual int rowCount(
const QModelIndex& index)
const;
71 virtual int columnCount(
const QModelIndex& index)
const;
72 virtual QVariant data(
const QModelIndex& index,
int role)
const;
77 virtual void runQuery();
80 virtual void shutdown();
83 void indexSelected(QModelIndex);
86 void rowChanged(
int i);
87 void rowRemoved(
int i);
90 virtual void addRow(
int i);
91 virtual void changeRow(
int i);
92 virtual void removeRow(
int i);
101 virtual void updateFeature(
104 virtual void pagedOut(
105 std::list< boost::shared_ptr<FeatureRecord> >::iterator i);
107 void ensureValidVector();
125 :
public boost::enable_shared_from_this<DtDynamicTerrainPageLogic::FeatureRecord>
130 explicit FeatureRecord(
133 const boost::shared_ptr<const DtDynamicTerrainFeature>& feature);
135 virtual ~FeatureRecord();
137 boost::shared_ptr<const DtDynamicTerrainFeature>
feature()
const {
return myFeature.lock(); }
139 int index()
const {
return myIndex; }
143 QVariant getData(
unsigned col)
const;
147 void setupContextMenu(
QMenu* menu);
151 void addDisconnector(
const boost::signals2::connection& conn);
154 void clearRequests();
159 void setData(
unsigned col,
const QVariant& value);
163 const boost::weak_ptr<const DtDynamicTerrainFeature>
myFeature;
168 mutable Mutex myMutex;
173 typedef boost::ptr_vector<DtDynamicTerrainChange>
Changes;
190 const boost::shared_ptr<FeatureRecord>& featureRecord,
194 void insertChangeRequest();
195 void clearRequests();
200 boost::scoped_ptr<DtDynamicTerrainChange>
myChange;