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 //***************************************************************
15 SUIT_ViewManager::SUIT_ViewManager( SUIT_Study* theStudy,
16 SUIT_Desktop* theDesktop,
17 SUIT_ViewModel* theViewModel )
19 myDesktop( theDesktop ),
20 myTitle( "Default viewer" ),
25 setViewModel(theViewModel);
26 connect(theDesktop, SIGNAL(windowActivated(SUIT_ViewWindow*)),
27 this, SLOT(onWindowActivated(SUIT_ViewWindow*)));
31 connect( myStudy, SIGNAL( destroyed() ), this, SLOT( onDeleteStudy() ) );
34 //***************************************************************
35 SUIT_ViewManager::~SUIT_ViewManager()
38 myViewModel->setViewManager(0);
43 //***************************************************************
44 void SUIT_ViewManager::setViewModel(SUIT_ViewModel* theViewModel)
46 if (myViewModel && myViewModel != theViewModel) {
47 myViewModel->setViewManager(0);
50 myViewModel = theViewModel;
52 myViewModel->setViewManager(this);
55 //***************************************************************
56 void SUIT_ViewManager::setViewName(SUIT_ViewWindow* theView)
58 int aPos = myViews.find(theView);
59 theView->setCaption(myTitle + QString(":%1").arg(aPos+1));
62 //***************************************************************
63 SUIT_ViewWindow* SUIT_ViewManager::createViewWindow()
65 SUIT_ViewWindow* aView = myViewModel->createView(myDesktop);
67 if ( !insertView( aView ) ){
73 //myDesktop->addViewWindow( aView );
74 //it is done automatically during creation of view
76 aView->setViewManager(this);
78 emit viewCreated(aView);
80 // Special treatment for the case when <aView> is the first one in this view manager
81 // -> call onWindowActivated() directly, because somebody may always want
82 // to use getActiveView()
84 onWindowActivated( aView );
89 //***************************************************************
90 void SUIT_ViewManager::createView()
95 //***************************************************************
96 bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView)
98 unsigned int aSize = myViews.size();
99 unsigned int aNbItems = myViews.count()+1;
100 if (aNbItems > aSize) {
101 if (!myViews.resize(aNbItems)) {
102 QMessageBox::critical(myDesktop, tr("Critical error"), tr("There is no memory for the new view!!!"));
105 aSize = myViews.size();
108 connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
109 this, SLOT(onDeleteView(SUIT_ViewWindow*)));
111 connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
112 this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
114 connect(theView, SIGNAL(mouseReleased(SUIT_ViewWindow*, QMouseEvent*)),
115 this, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
117 connect(theView, SIGNAL(mouseDoubleClicked(SUIT_ViewWindow*, QMouseEvent*)),
118 this, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)));
120 connect(theView, SIGNAL(mouseMoving(SUIT_ViewWindow*, QMouseEvent*)),
121 this, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)));
123 connect(theView, SIGNAL(wheeling(SUIT_ViewWindow*, QWheelEvent*)),
124 this, SIGNAL(wheel(SUIT_ViewWindow*, QWheelEvent*)));
126 connect(theView, SIGNAL(keyPressed(SUIT_ViewWindow*, QKeyEvent*)),
127 this, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)));
129 connect(theView, SIGNAL(keyReleased(SUIT_ViewWindow*, QKeyEvent*)),
130 this, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)));
132 connect(theView, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
133 this, SLOT (onContextMenuRequested( QContextMenuEvent * )));
135 for (uint i = 0; i < aSize; i++) {
137 myViews.insert(i, theView);
145 //***************************************************************
146 void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView)
148 emit deleteView(theView);
152 //***************************************************************
153 void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView)
155 theView->disconnect(this);
156 myViews.remove(myViews.find(theView));
157 if (myActiveView == theView)
159 int aNumItems = myViews.count();
161 emit lastViewClosed(this);
164 //***************************************************************
165 void SUIT_ViewManager::onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent)
167 emit mousePress(theView, theEvent);
170 //***************************************************************
171 void SUIT_ViewManager::onWindowActivated(SUIT_ViewWindow* view)
173 if (view && myActiveView != view) {
174 unsigned int aSize = myViews.size();
175 for (uint i = 0; i < aSize; i++) {
176 if (myViews[i] && myViews[i] == view) {
178 emit activated( this );
185 //***************************************************************
186 void SUIT_ViewManager::closeAllViews()
188 unsigned int aSize = myViews.size();
189 for (uint i = 0; i < aSize; i++) {
196 //***************************************************************
197 QString SUIT_ViewManager::getType() const
199 return (!myViewModel)? "": myViewModel->getType();
202 //***************************************************************
203 SUIT_Study* SUIT_ViewManager::study() const
208 //***************************************************************
209 void SUIT_ViewManager::onDeleteStudy()
214 //***************************************************************
215 void SUIT_ViewManager::onContextMenuRequested( QContextMenuEvent* e )
217 // invoke method of SUIT_PopupClient, which notifies about popup
218 contextMenuRequest( e );
221 //***************************************************************
222 void SUIT_ViewManager::contextMenuPopup( QPopupMenu* popup )
224 SUIT_ViewModel* vm = getViewModel();
226 vm->contextMenuPopup( popup );