00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_GUI_SCENE_WIN_SCENE_WIN_MODEL_HH
00020 #define OST_GUI_SCENE_WIN_SCENE_WIN_MODEL_HH
00021
00022
00023
00024
00025
00026
00027 #include <ost/mol/view_type_fw.hh>
00028 #include <ost/mol/query_view_wrapper.hh>
00029
00030 #include <ost/gfx/gfx_node_fw.hh>
00031 #include <ost/gfx/scene_observer.hh>
00032
00033 #include <ost/gui/module_config.hh>
00034 #include <ost/gui/scene_win/scene_node.hh>
00035 #include <ost/gui/scene_win/render_modes_node.hh>
00036
00037 #include <QStringList>
00038 #include <QMimeData>
00039 #include <QMap>
00040 #include <QAbstractItemModel>
00041 namespace ost { namespace gui {
00042
00043
00044
00045
00047 class DLLEXPORT_OST_GUI SceneWinModel : public QAbstractItemModel,
00048 public gfx::SceneObserver {
00049 Q_OBJECT
00050 public:
00051 SceneWinModel(QObject* parent=NULL);
00052 ~SceneWinModel();
00053
00054 gfx::NodePtrList GetGfxNodes(QModelIndexList indexes);
00055 mol::QueryViewWrapperList GetQueryViewsList(QModelIndexList indexes);
00056 gfx::EntityP GetEntityOfViews(QModelIndexList indexes);
00057
00058 virtual void Update();
00059
00060 SceneNode* GetItem(const QModelIndex &index) const;
00061
00062 SceneNode* FindGfxNode(gfx::GfxNodeP node);
00063
00064
00065 bool AddNode(SceneNode* parent, SceneNode* child);
00066 bool RemoveNode(SceneNode* node);
00067
00068 void AttachRenderModeObserver(RenderModesNode* node);
00069 void DetachRenderModeObserver(RenderModesNode* node);
00070
00071 QModelIndex GetIndexOf(SceneNode* node, int column=0);
00072
00073
00074 QModelIndex index(int row, int col, const QModelIndex& parent = QModelIndex()) const;
00075
00076 QModelIndex parent(const QModelIndex& index) const;
00077
00078 int rowCount(const QModelIndex& parent=QModelIndex()) const;
00079
00080 int columnCount(const QModelIndex& parent=QModelIndex()) const;
00081
00082 QVariant data(const QModelIndex& index, int role=Qt::DisplayRole) const;
00083
00084 QVariant headerData(int section, Qt::Orientation orientation,
00085 int role=Qt::DisplayRole) const;
00086
00087 virtual Qt::ItemFlags flags(const QModelIndex& index=QModelIndex()) const;
00088
00089 virtual bool setData(const QModelIndex& index=QModelIndex(),
00090 const QVariant& value=QVariant(),
00091 int role=Qt::DisplayRole);
00092
00093 virtual QStringList mimeTypes() const;
00094 Qt::DropActions supportedDragActions() const;
00095 virtual QMimeData* mimeData(const QModelIndexList& indexes) const;
00096
00097
00098 virtual void NodeAdded(const gfx::GfxNodeP& node);
00099 virtual void NodeRemoved(const gfx::GfxNodeP& node);
00100 virtual void SelectionChanged(const gfx::GfxObjP& obj, const mol::EntityView& sel);
00101 virtual void RenderModeChanged(const gfx::GfxNodeP& node);
00102
00103 private:
00104 QModelIndex GetIndex(SceneNode* node, QModelIndex index,int column);
00105
00106 SceneNode* root_node_;
00107 SceneNode* scene_node_;
00108
00109 QMap<gfx::GfxNode*, RenderModesNode*> render_observers_;
00110 QMap<gfx::GfxNode*, SceneNode*> node_map_;
00111 };
00112
00113 }}
00114
00115 #endif