00001
00002
00003 #include "Iguana/Studio/interface/IgPage.h"
00004 #include "Iguana/Studio/interface/IgDocument.h"
00005 #include "Iguana/Studio/interface/IgView.h"
00006 #include "Iguana/Studio/interface/IgViewDB.h"
00007 #include "Iguana/Studio/interface/IgViewCreator.h"
00008 #include "Iguana/Studio/interface/IgQtFocusManager.h"
00009 #include "Iguana/Studio/interface/IgQDockAreaSite.h"
00010 #include "Iguana/Studio/interface/IgQDockWindowSite.h"
00011 #include "Iguana/Studio/interface/IgQVSplitterSite.h"
00012 #include "Iguana/Studio/interface/IgQWorkspaceSite.h"
00013 #include "Iguana/Studio/interface/IgQWidgetSite.h"
00014 #include "Iguana/Studio/interface/IgQWidgetStackSite.h"
00015 #include "Iguana/Studio/interface/IgQtAppMenuService.h"
00016 #include "Iguana/Studio/interface/IgQtAppToolBarService.h"
00017 #include "Iguana/Studio/interface/IgQtAppWindowService.h"
00018 #include "Iguana/Studio/interface/IgQtSite.h"
00019 #include "Iguana/Studio/interface/IgQtSiteStack.h"
00020 #include <qaccel.h>
00021 #include <qwidget.h>
00022 #include <qlayout.h>
00023 #include <qpopupmenu.h>
00024 #include <qmenubar.h>
00025 #include <qtoolbar.h>
00026 #include <classlib/utils/DebugAids.h>
00027 #include <iostream>
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 IgQtSiteStack *
00041 createWorkspace (IgState *state, IgSite *site)
00042 {
00043 return new IgQWorkspaceSite (state, site);
00044 }
00045
00046
00047 IgPage::IgPage (IgDocument *doc)
00048 : IgQHSplitterSite (doc->state (), doc->window ()),
00049 m_document (doc),
00050 m_leftDockArea (new IgQDockAreaSite (doc->state (), this)),
00051 m_stackArea (new IgQWidgetStackSite (doc->state (), new IgQDockWindowSite (doc->state (), m_leftDockArea))),
00052 m_centralSplitter (new IgQVSplitterSite (doc->state (), this)),
00053 m_workspace (createWorkspace (doc->state (), m_centralSplitter)),
00054 m_bottomDockArea (new IgQDockAreaSite (doc->state (), m_centralSplitter)),
00055 m_rightDockArea (new IgQDockAreaSite (doc->state (), this)),
00056 m_numRegisteredWindows (0)
00057 {
00058
00059
00060
00061
00062
00063
00064 ASSERT (doc);
00065 doc->addPage (this);
00066
00067 IgQtAppMenuService *service = IgQtAppMenuService::get (doc->state ());
00068
00069 QMenuBar *bar = service->menuBar ();
00070 QAccel *a = new QAccel (IgQtSite::selfFrom (m_workspace));
00071 a->connectItem (a->insertItem (Qt::Key_Escape),
00072 this,
00073 SLOT (showFullScreen ()));
00074
00075
00076
00077 QPopupMenu *fileMenu = service->subMenu (IgQtAppMenuService::MENU_ID_FILE);
00078
00079 ASSERT (fileMenu);
00080
00081 QPopupMenu *newViewMenu = new QPopupMenu (bar);
00082 newViewMenu->setCaption ("New");
00083 fileMenu->insertItem ("&New", newViewMenu, MENU_ID_FILE_NEW,
00084 IgQtAppMenuService::index (fileMenu, MENU_ID_FILE_NEW));
00085 fileMenu->insertSeparator (IgQtAppMenuService::index (fileMenu, MENU_ID_FILE_NEW) + 1 );
00086 newViewMenu->insertTearOffHandle ();
00087
00088 IgViewDB *viewDB = IgViewDB::get ();
00089 ASSERT (viewDB);
00090
00091
00092
00093
00094 for (IgViewDB::Iterator i = viewDB->begin ();
00095 i != viewDB->end ();
00096 i++)
00097 {
00098 IgViewCreator *viewCreator = new IgViewCreator (i, this);
00099 newViewMenu->insertItem ((*i)->name (),
00100 viewCreator,
00101 SLOT (createView ()),
00102 0,
00103 IgQtAppMenuService::index (newViewMenu,
00104 MENU_ID_FILE_NEW));
00105 }
00106
00107
00108
00109
00110
00111
00112
00113
00114 QPopupMenu *windowMenu = new QPopupMenu (bar);
00115 windowMenu->setCaption ("Window");
00116 bar->insertItem ("&Window", windowMenu, MENU_ID_WINDOW,
00117 IgQtAppMenuService::index (bar, MENU_ID_WINDOW));
00118
00119 windowMenu->insertTearOffHandle ();
00120 windowMenu->insertItem ("&Tile",
00121 IgQtSite::selfFrom (m_workspace),
00122 SLOT (tile ()),
00123 0,
00124 MENU_ID_WINDOW_TILE,
00125 IgQtAppMenuService::index (bar, MENU_ID_WINDOW));
00126 windowMenu->insertItem ("&Cascade",
00127 IgQtSite::selfFrom (m_workspace),
00128 SLOT (cascade ()),
00129 0,
00130 MENU_ID_WINDOW_CASCADE,
00131 IgQtAppMenuService::index (bar, MENU_ID_WINDOW));
00132
00133 windowMenu->insertItem ("Show &Maximized",
00134 this,
00135 SLOT (showMaximized ()),
00136 0,
00137 MENU_ID_WINDOW_MAXIMIZE,
00138 IgQtAppMenuService::index (bar, MENU_ID_WINDOW));
00139
00140 windowMenu->insertItem ("&Full screen",
00141 this,
00142 SLOT (showFullScreen ()),
00143 Qt::CTRL+Qt::Key_F,
00144 MENU_ID_WINDOW_FULLSCREEN,
00145 IgQtAppMenuService::index (bar, MENU_ID_WINDOW));
00146
00147 windowMenu->insertSeparator ();
00148
00149
00150
00151 IgQtFocusManager *focusManager = new IgQtFocusManager (state (), &m_views);
00152
00153 QObject::connect (IgQtSite::selfFrom (m_workspace),
00154 SIGNAL (windowActivated (QWidget *)),
00155 focusManager,
00156 SLOT (windowActivated (QWidget *)));
00157
00158 self ()->show ();
00159 }
00160
00164 IgState *
00165 IgPage::state (void) const
00166 { return m_document->state (); }
00167
00171 IgQtSiteStack *
00172 IgPage::workspace (void)
00173 {
00174 return m_workspace;
00175 }
00176
00177 IgQtSite *
00178 IgPage::leftDockArea (void)
00179 {
00180 return m_leftDockArea;
00181 }
00182
00183 IgQtSite *
00184 IgPage::rightDockArea (void)
00185 {
00186 return m_rightDockArea;
00187 }
00188
00189 IgQtSite *
00190 IgPage::bottomDockArea (void)
00191 {
00192 return m_bottomDockArea;
00193 }
00194
00195 IgQtSiteStack *
00196 IgPage::stackArea (void)
00197 {
00198 return m_stackArea;
00199 }
00200
00201 void
00202 IgPage::registerView (IgView *view, QWidget *selectableWidget)
00203 {
00204 ASSERT (m_views[selectableWidget] == 0);
00205 m_views[selectableWidget] = view;
00206
00207
00208
00209
00210 if (view->title () != "")
00211 {
00212 IgQtAppMenuService *ms = IgQtAppMenuService::get (state ());
00213
00214 QPopupMenu *menu = ms->subMenu (MENU_ID_WINDOW);
00215 int itemID = MENU_ID_WINDOW_LIST_OFFSET + m_numRegisteredWindows++;
00216
00217 menu->insertItem (view->title (),
00218 selectableWidget,
00219 SLOT (show ()),
00220 0,
00221 itemID,
00222 IgQtAppMenuService::index (menu,
00223 MENU_ID_WINDOW_LIST_OFFSET));
00224 menu->connectItem (itemID, selectableWidget, SLOT (setFocus()));
00225 }
00226 }
00227
00228 void
00229 IgPage::showMaximized (void)
00230 {
00231 QMenuBar *menu = IgQtAppMenuService::get (m_document->state ())->menuBar ();
00232 ASSERT (menu);
00233 QWidget *mainWindow = IgQtAppWindowService::get (m_document->state ())->mainWindow ();
00234 if (mainWindow->isMaximized ())
00235 {
00236 menu->changeItem (MENU_ID_WINDOW_MAXIMIZE, "Show &Maximized");
00237 menu->setItemEnabled (MENU_ID_WINDOW_FULLSCREEN, true);
00238 mainWindow->showNormal ();
00239 }
00240 else
00241 {
00242 menu->changeItem (MENU_ID_WINDOW_MAXIMIZE, "Show &Normal");
00243 menu->setItemEnabled (MENU_ID_WINDOW_FULLSCREEN, false);
00244 mainWindow->showMaximized ();
00245 }
00246 }
00247
00248 void
00249 IgPage::showFullScreen (void)
00250 {
00251 QMenuBar *menu = IgQtAppMenuService::get (m_document->state ())->menuBar ();
00252 ASSERT (menu);
00253 QToolBar *toolBar = IgQtAppToolBarService::get (m_document->state ())->toolBar (3000, "General graphics ops");
00254 ASSERT (toolBar);
00255 QWidget *mainWindow = IgQtAppWindowService::get (m_document->state ())->mainWindow ();
00256 if (mainWindow->isFullScreen ())
00257 {
00258 menu->setItemEnabled (MENU_ID_WINDOW_MAXIMIZE, true);
00259 menu->show ();
00260 toolBar->show ();
00261 IgQtSite::selfFrom (leftDockArea ())->show ();
00262 IgQtSite::selfFrom (bottomDockArea ())->show ();
00263 mainWindow->showNormal ();
00264 }
00265 else
00266 {
00267 menu->hide ();
00268 toolBar->hide ();
00269 IgQtSite::selfFrom (leftDockArea ())->hide ();
00270 IgQtSite::selfFrom (rightDockArea ())->hide ();
00271 IgQtSite::selfFrom (bottomDockArea ())->hide ();
00272 menu->setItemEnabled (MENU_ID_WINDOW_MAXIMIZE, false);
00273 mainWindow->showFullScreen ();
00274 }
00275 }
00276
00277 void
00278 IgPage::printViews (const QString &text)
00279 {
00280 emit autoPrint (text);
00281 }