OpenStructure
Loading...
Searching...
No Matches
scene_win_model.hh
Go to the documentation of this file.
1//------------------------------------------------------------------------------
2// This file is part of the OpenStructure project <www.openstructure.org>
3//
4// Copyright (C) 2008-2020 by the OpenStructure authors
5//
6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License as published by the Free
8// Software Foundation; either version 3.0 of the License, or (at your option)
9// any later version.
10// This library is distributed in the hope that it will be useful, but WITHOUT
11// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13// details.
14//
15// You should have received a copy of the GNU Lesser General Public License
16// along with this library; if not, write to the Free Software Foundation, Inc.,
17// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18//------------------------------------------------------------------------------
19#ifndef OST_GUI_SCENE_WIN_SCENE_WIN_MODEL_HH
20#define OST_GUI_SCENE_WIN_SCENE_WIN_MODEL_HH
21
22/*
23 Author: Stefan Scheuber, Marco Biasini, Ansgar Philippsen
24 */
25
26
29
32
36
37#include <QStringList>
38#include <QMimeData>
39#include <QMap>
40#include <QAbstractItemModel>
41namespace ost { namespace gui {
42
43
44
45
47class DLLEXPORT_OST_GUI SceneWinModel : public QAbstractItemModel,
48 public gfx::SceneObserver {
49 Q_OBJECT
50public:
51 SceneWinModel(QObject* parent=NULL);
53
54 gfx::NodePtrList GetGfxNodes(QModelIndexList indexes);
56 gfx::EntityP GetEntityOfViews(QModelIndexList indexes);
57
58 virtual void Update();
59
60 SceneNode* GetItem(const QModelIndex &index) const;
61
63
64
65 bool AddNode(SceneNode* parent, SceneNode* child);
66 bool RemoveNode(SceneNode* node);
67
70
71 QModelIndex GetIndexOf(SceneNode* node, int column=0);
72
73 // abstract item model interface
74 QModelIndex index(int row, int col, const QModelIndex& parent = QModelIndex()) const;
75
76 QModelIndex parent(const QModelIndex& index) const;
77
78 int rowCount(const QModelIndex& parent=QModelIndex()) const;
79
80 int columnCount(const QModelIndex& parent=QModelIndex()) const;
81
82 QVariant data(const QModelIndex& index, int role=Qt::DisplayRole) const;
83
84 QVariant headerData(int section, Qt::Orientation orientation,
85 int role=Qt::DisplayRole) const;
86
87 virtual Qt::ItemFlags flags(const QModelIndex& index=QModelIndex()) const;
88
89 virtual bool setData(const QModelIndex& index=QModelIndex(),
90 const QVariant& value=QVariant(),
91 int role=Qt::DisplayRole);
92
93 virtual QStringList mimeTypes() const;
94 Qt::DropActions supportedDragActions() const;
95 virtual QMimeData* mimeData(const QModelIndexList& indexes) const;
96
97 // scene observer interface
98 virtual void NodeAdded(const gfx::GfxNodeP& node);
99 virtual void NodeRemoved(const gfx::GfxNodeP& node);
100 virtual void SelectionChanged(const gfx::GfxObjP& obj, const mol::EntityView& sel);
101 virtual void RenderModeChanged(const gfx::GfxNodeP& node);
102
103private:
104 QModelIndex GetIndex(SceneNode* node, QModelIndex index,int column);
105
106 SceneNode* root_node_;
107 SceneNode* scene_node_;
108
109 QMap<gfx::GfxNode*, RenderModesNode*> render_observers_;
110 QMap<gfx::GfxNode*, SceneNode*> node_map_;
111};
112
113}}
114
115#endif
Interface for observing graphical objects.
data model for scene win
QModelIndex GetIndexOf(SceneNode *node, int column=0)
bool RemoveNode(SceneNode *node)
virtual Qt::ItemFlags flags(const QModelIndex &index=QModelIndex()) const
virtual void RenderModeChanged(const gfx::GfxNodeP &node)
Called when the render mode of a node changed.
virtual bool setData(const QModelIndex &index=QModelIndex(), const QVariant &value=QVariant(), int role=Qt::DisplayRole)
SceneNode * FindGfxNode(gfx::GfxNodeP node)
QModelIndex index(int row, int col, const QModelIndex &parent=QModelIndex()) const
int columnCount(const QModelIndex &parent=QModelIndex()) const
gfx::EntityP GetEntityOfViews(QModelIndexList indexes)
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
QModelIndex parent(const QModelIndex &index) const
mol::QueryViewWrapperList GetQueryViewsList(QModelIndexList indexes)
virtual void NodeAdded(const gfx::GfxNodeP &node)
Called when a new node has been added to the scene.
virtual void NodeRemoved(const gfx::GfxNodeP &node)
Called when an object is removed from the scene.
virtual void SelectionChanged(const gfx::GfxObjP &obj, const mol::EntityView &sel)
Called when selection of an object changed.
Qt::DropActions supportedDragActions() const
virtual QMimeData * mimeData(const QModelIndexList &indexes) const
void DetachRenderModeObserver(RenderModesNode *node)
int rowCount(const QModelIndex &parent=QModelIndex()) const
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
void AttachRenderModeObserver(RenderModesNode *node)
virtual QStringList mimeTypes() const
bool AddNode(SceneNode *parent, SceneNode *child)
SceneNode * GetItem(const QModelIndex &index) const
gfx::NodePtrList GetGfxNodes(QModelIndexList indexes)
SceneWinModel(QObject *parent=NULL)
virtual void Update()
definition of EntityView
#define DLLEXPORT_OST_GUI
std::vector< GfxNodeP > NodePtrList
boost::shared_ptr< GfxNode > GfxNodeP
boost::shared_ptr< Entity > EntityP
Definition entity_fw.hh:28
boost::shared_ptr< GfxObj > GfxObjP
std::vector< QueryViewWrapper > QueryViewWrapperList
Definition base.dox:1