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 ) )
71 //myDesktop->addViewWindow( aView );
72 //it is done automatically during creation of view
74 aView->setViewManager(this);
75 emit viewCreated(aView);
79 //***************************************************************
80 void SUIT_ViewManager::createView()
85 //***************************************************************
86 bool SUIT_ViewManager::insertView(SUIT_ViewWindow* theView)
88 unsigned int aSize = myViews.size();
89 unsigned int aNbItems = myViews.count()+1;
90 if (aNbItems > aSize) {
91 if (!myViews.resize(aNbItems)) {
92 QMessageBox::critical(myDesktop, tr("Critical error"), tr("There is no memory for the new view!!!"));
95 aSize = myViews.size();
98 connect(theView, SIGNAL(closing(SUIT_ViewWindow*)),
99 this, SLOT(onDeleteView(SUIT_ViewWindow*)));
101 connect(theView, SIGNAL(mousePressed(SUIT_ViewWindow*, QMouseEvent*)),
102 this, SLOT(onMousePressed(SUIT_ViewWindow*, QMouseEvent*)));
104 connect(theView, SIGNAL(mouseReleased(SUIT_ViewWindow*, QMouseEvent*)),
105 this, SIGNAL(mouseRelease(SUIT_ViewWindow*, QMouseEvent*)));
107 connect(theView, SIGNAL(mouseDoubleClicked(SUIT_ViewWindow*, QMouseEvent*)),
108 this, SIGNAL(mouseDoubleClick(SUIT_ViewWindow*, QMouseEvent*)));
110 connect(theView, SIGNAL(mouseMoving(SUIT_ViewWindow*, QMouseEvent*)),
111 this, SIGNAL(mouseMove(SUIT_ViewWindow*, QMouseEvent*)));
113 connect(theView, SIGNAL(wheeling(SUIT_ViewWindow*, QWheelEvent*)),
114 this, SIGNAL(wheel(SUIT_ViewWindow*, QWheelEvent*)));
116 connect(theView, SIGNAL(keyPressed(SUIT_ViewWindow*, QKeyEvent*)),
117 this, SIGNAL(keyPress(SUIT_ViewWindow*, QKeyEvent*)));
119 connect(theView, SIGNAL(keyReleased(SUIT_ViewWindow*, QKeyEvent*)),
120 this, SIGNAL(keyRelease(SUIT_ViewWindow*, QKeyEvent*)));
122 connect(theView, SIGNAL(contextMenuRequested( QContextMenuEvent * )),
123 this, SLOT (onContextMenuRequested( QContextMenuEvent * )));
125 for (uint i = 0; i < aSize; i++) {
127 myViews.insert(i, theView);
135 //***************************************************************
136 void SUIT_ViewManager::onDeleteView(SUIT_ViewWindow* theView)
138 emit deleteView(theView);
142 //***************************************************************
143 void SUIT_ViewManager::removeView(SUIT_ViewWindow* theView)
145 theView->disconnect(this);
146 myViews.remove(myViews.find(theView));
147 if (myActiveView == theView)
149 int aNumItems = myViews.count();
151 emit lastViewClosed(this);
154 //***************************************************************
155 void SUIT_ViewManager::onMousePressed(SUIT_ViewWindow* theView, QMouseEvent* theEvent)
157 emit mousePress(theView, theEvent);
160 //***************************************************************
161 void SUIT_ViewManager::onWindowActivated(SUIT_ViewWindow* view)
164 unsigned int aSize = myViews.size();
165 for (uint i = 0; i < aSize; i++) {
166 if (myViews[i] && myViews[i] == view) {
168 emit activated( this );
175 //***************************************************************
176 void SUIT_ViewManager::closeAllViews()
178 unsigned int aSize = myViews.size();
179 for (uint i = 0; i < aSize; i++) {
186 //***************************************************************
187 QString SUIT_ViewManager::getType() const
189 return (!myViewModel)? "": myViewModel->getType();
192 //***************************************************************
193 SUIT_Study* SUIT_ViewManager::study() const
198 //***************************************************************
199 void SUIT_ViewManager::onDeleteStudy()
204 //***************************************************************
205 void SUIT_ViewManager::onContextMenuRequested( QContextMenuEvent* e )
207 // invoke method of SUIT_PopupClient, which notifies about popup
208 contextMenuRequest( e );
211 //***************************************************************
212 void SUIT_ViewManager::contextMenuPopup( QPopupMenu* popup )
214 SUIT_ViewModel* vm = getViewModel();
216 vm->contextMenuPopup( popup );