1 #include "SUIT_ViewManager.h"
3 #include "SUIT_Desktop.h"
4 #include "SUIT_ViewModel.h"
5 #include "SUIT_Study.h"
8 #include <qmessagebox.h>
14 /*!\class SUIT_ViewManager.
15 * Class provide manipulation with view windows.
19 SUIT_ViewManager::SUIT_ViewManager( SUIT_Study* theStudy,
20 SUIT_Desktop* theDesktop,
21 SUIT_ViewModel* theViewModel )
23 myDesktop( theDesktop ),
24 myTitle( "Default viewer" ),
29 setViewModel(theViewModel);
30 connect(theDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)),
31 this, SLOT(onWindowActivated(SUIT_ViewWindow*)));
35 connect( myStudy, SIGNAL( destroyed() ), this, SLOT( onDeleteStudy() ) );
39 SUIT_ViewManager::~SUIT_ViewManager()
43 myViewModel->setViewManager( 0 );
48 /*!Sets view model \a theViewModel to view manager.*/
49 void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel)
51 if (myViewModel && myViewModel != theViewModel) {
52 myViewModel->setViewManager(0);
55 myViewModel = theViewModel;
57 myViewModel->setViewManager(this);
60 /*!Sets view name for view window \a theView.*/
61 void SUIT_ViewManager::setViewName(SUIT_ViewWindow* theView)
63 int aPos = myViews.find(theView);
64 theView->setCaption(myTitle + QString(":%1").arg(aPos+1));
67 /*! Creates View, adds it into list of views and returns just created view window*/
68 SUIT_ViewWindow* SUIT_ViewManager::createViewWindow()
70 SUIT_ViewWindow* aView = myViewModel->createView(myDesktop);
72 if ( !insertView( aView ) ){
78 //myDesktop->addViewWindow( aView );
79 //it is done automatically during creation of view
81 aView->setViewManager(this);
83 emit viewCreated(aView);
85 // Special treatment for the case when <aView> is the first one in this view manager
86 // -> call onWindowActivated() directly, because somebody may always want
87 // to use getActiveView()
89 onWindowActivated( aView );
94 /*!Create view window.*/
95 void SUIT_ViewManager::createView()
100 /*!Insert view window to view manager.
101 *\retval false - if something wrong, else true.
103 bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView)
105 unsigned int aSize = myViews.size();
106 unsigned int aNbItems = myViews.count()+1;
107 if (aNbItems > aSize) {
108 if (!myViews.resize(aNbItems)) {
109 QMessageBox::critical(myDesktop, tr("Critical error"), tr("There is no memory for the new view!!!"));
112 aSize = myViews.size();
115 connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
116 this, SLOT(onDeleteView(SUIT_ViewWindow*)));
118 connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
119 this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
121 connect(theView, SIGNAL(mouseReleased(SUIT_ViewWindow*, QMouseEvent*)),
122 this, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
124 connect(theView, SIGNAL(mouseDoubleClicked(SUIT_ViewWindow*, QMouseEvent*)),
125 this, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)));
127 connect(theView, SIGNAL(mouseMoving(SUIT_ViewWindow*, QMouseEvent*)),
128 this, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)));
130 connect(theView, SIGNAL(wheeling(SUIT_ViewWindow*, QWheelEvent*)),
131 this, SIGNAL(wheel(SUIT_ViewWindow*, QWheelEvent*)));
133 connect(theView, SIGNAL(keyPressed(SUIT_ViewWindow*, QKeyEvent*)),
134 this, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)));
136 connect(theView, SIGNAL(keyReleased(SUIT_ViewWindow*, QKeyEvent*)),
137 this, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)));
139 connect(theView, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
140 this, SLOT (onContextMenuRequested( QContextMenuEvent * )));
142 for (uint i = 0; i < aSize; i++) {
144 myViews.insert(i, theView);
151 /*!Emit delete view. Remove view window \a theView from view manager.
153 void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView)
155 emit deleteView(theView);
159 /*!Remove view window \a theView from view manager.
160 *And close the last view, if it has \a theView.
162 void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView)
164 theView->disconnect(this);
165 myViews.remove(myViews.find(theView));
166 if (myActiveView == theView)
168 int aNumItems = myViews.count();
170 emit lastViewClosed(this);
174 Show or hide all views (view windows)
176 void SUIT_ViewManager::setShown( const bool on )
178 for ( uint i = 0; i < myViews.count(); i++ )
179 myViews.at( i )->setShown( on );
182 /*!Emit on \a theEvent mouse pressed in \a theView.*/
183 void SUIT_ViewManager::onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent)
185 emit mousePress(theView, theEvent);
188 /*!Emit activated for view \a view.
190 void SUIT_ViewManager::onWindowActivated(SUIT_ViewWindow* view)
193 unsigned int aSize = myViews.size();
194 for (uint i = 0; i < aSize; i++) {
195 if (myViews[i] && myViews[i] == view) {
197 emit activated( this );
206 void SUIT_ViewManager::closeAllViews()
208 unsigned int aSize = myViews.size();
209 for (uint i = 0; i < aSize; i++) {
216 *\retval QString - type of view model.
218 QString SUIT_ViewManager::getType() const
220 return (!myViewModel)? "": myViewModel->getType();
224 *\retval SUIT_Study* - current study.
226 SUIT_Study* SUIT_ViewManager::study() const
232 * Sets stydy to NULL.
234 void SUIT_ViewManager::onDeleteStudy()
239 void SUIT_ViewManager::onContextMenuRequested( QContextMenuEvent* e )
241 /*! invoke method of SUIT_PopupClient, which notifies about popup*/
242 contextMenuRequest( e );
245 /*!Context menu popup for \a popup.*/
246 void SUIT_ViewManager::contextMenuPopup( QPopupMenu* popup )
248 SUIT_ViewModel* vm = getViewModel();
250 vm->contextMenuPopup( popup );