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()
42 myViewModel->setViewManager(0);
47 /*!Sets view model \a theViewModel to view manager.*/
48 void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel)
50 if (myViewModel && myViewModel != theViewModel) {
51 myViewModel->setViewManager(0);
54 myViewModel = theViewModel;
56 myViewModel->setViewManager(this);
59 /*!Sets view name for view window \a theView.*/
60 void SUIT_ViewManager::setViewName(SUIT_ViewWindow* theView)
62 int aPos = myViews.find(theView);
63 theView->setCaption(myTitle + QString(":%1").arg(aPos+1));
66 /*! Creates View, adds it into list of views and returns just created view window*/
67 SUIT_ViewWindow* SUIT_ViewManager::createViewWindow()
69 SUIT_ViewWindow* aView = myViewModel->createView(myDesktop);
71 if ( !insertView( aView ) ){
77 //myDesktop->addViewWindow( aView );
78 //it is done automatically during creation of view
80 aView->setViewManager(this);
82 emit viewCreated(aView);
84 // Special treatment for the case when <aView> is the first one in this view manager
85 // -> call onWindowActivated() directly, because somebody may always want
86 // to use getActiveView()
88 onWindowActivated( aView );
93 /*!Create view window.*/
94 void SUIT_ViewManager::createView()
99 /*!Insert view window to view manager.
100 *\retval false - if something wrong, else true.
102 bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView)
104 unsigned int aSize = myViews.size();
105 unsigned int aNbItems = myViews.count()+1;
106 if (aNbItems > aSize) {
107 if (!myViews.resize(aNbItems)) {
108 QMessageBox::critical(myDesktop, tr("Critical error"), tr("There is no memory for the new view!!!"));
111 aSize = myViews.size();
114 connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
115 this, SLOT(onDeleteView(SUIT_ViewWindow*)));
117 connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
118 this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
120 connect(theView, SIGNAL(mouseReleased(SUIT_ViewWindow*, QMouseEvent*)),
121 this, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
123 connect(theView, SIGNAL(mouseDoubleClicked(SUIT_ViewWindow*, QMouseEvent*)),
124 this, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)));
126 connect(theView, SIGNAL(mouseMoving(SUIT_ViewWindow*, QMouseEvent*)),
127 this, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)));
129 connect(theView, SIGNAL(wheeling(SUIT_ViewWindow*, QWheelEvent*)),
130 this, SIGNAL(wheel(SUIT_ViewWindow*, QWheelEvent*)));
132 connect(theView, SIGNAL(keyPressed(SUIT_ViewWindow*, QKeyEvent*)),
133 this, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)));
135 connect(theView, SIGNAL(keyReleased(SUIT_ViewWindow*, QKeyEvent*)),
136 this, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)));
138 connect(theView, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
139 this, SLOT (onContextMenuRequested( QContextMenuEvent * )));
141 for (uint i = 0; i < aSize; i++) {
143 myViews.insert(i, theView);
150 /*!Emit delete view. Remove view window \a theView from view manager.
152 void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView)
154 emit deleteView(theView);
158 /*!Remove view window \a theView from view manager.
159 *And close the last view, if it has \a theView.
161 void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView)
163 theView->disconnect(this);
164 myViews.remove(myViews.find(theView));
165 if (myActiveView == theView)
167 int aNumItems = myViews.count();
169 emit lastViewClosed(this);
172 /*!Emit on \a theEvent mouse pressed in \a theView.*/
173 void SUIT_ViewManager::onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent)
175 emit mousePress(theView, theEvent);
178 /*!Emit activated for view \a view.
180 void SUIT_ViewManager::onWindowActivated(SUIT_ViewWindow* view)
183 unsigned int aSize = myViews.size();
184 for (uint i = 0; i < aSize; i++) {
185 if (myViews[i] && myViews[i] == view) {
187 emit activated( this );
196 void SUIT_ViewManager::closeAllViews()
198 unsigned int aSize = myViews.size();
199 for (uint i = 0; i < aSize; i++) {
206 *\retval QString - type of view model.
208 QString SUIT_ViewManager::getType() const
210 return (!myViewModel)? "": myViewModel->getType();
214 *\retval SUIT_Study* - current study.
216 SUIT_Study* SUIT_ViewManager::study() const
222 * Sets stydy to NULL.
224 void SUIT_ViewManager::onDeleteStudy()
229 void SUIT_ViewManager::onContextMenuRequested( QContextMenuEvent* e )
231 /*! invoke method of SUIT_PopupClient, which notifies about popup*/
232 contextMenuRequest( e );
235 /*!Context menu popup for \a popup.*/
236 void SUIT_ViewManager::contextMenuPopup( QPopupMenu* popup )
238 SUIT_ViewModel* vm = getViewModel();
240 vm->contextMenuPopup( popup );