comparison gui/src/MainWindow.cpp @ 13506:c70511cf64ee

Reformatted to GNU Style.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Sun, 17 Jul 2011 22:59:28 +0200
parents 13e3d60aff2d
children 9accc22fd9b0
comparison
equal deleted inserted replaced
13505:3a26a0ad2df9 13506:c70511cf64ee
25 #include "MainWindow.h" 25 #include "MainWindow.h"
26 #include "FileEditorMdiSubWindow.h" 26 #include "FileEditorMdiSubWindow.h"
27 #include "ImageViewerMdiSubWindow.h" 27 #include "ImageViewerMdiSubWindow.h"
28 #include "SettingsDialog.h" 28 #include "SettingsDialog.h"
29 29
30 MainWindow::MainWindow(QWidget *parent) 30 MainWindow::MainWindow (QWidget * parent):QMainWindow (parent),
31 : QMainWindow(parent), 31 m_isRunning (true)
32 m_isRunning(true) { 32 {
33 QDesktopServices desktopServices; 33 QDesktopServices
34 m_settingsFile = desktopServices.storageLocation(QDesktopServices::HomeLocation) + "/.quint/settings.ini"; 34 desktopServices;
35 construct(); 35 m_settingsFile =
36 establishOctaveLink(); 36 desktopServices.storageLocation (QDesktopServices::HomeLocation) +
37 } 37 "/.quint/settings.ini";
38 38 construct ();
39 MainWindow::~MainWindow() { 39 establishOctaveLink ();
40 } 40 }
41 41
42 void MainWindow::handleOpenFileRequest(QString fileName) { 42 MainWindow::~MainWindow ()
43 reportStatusMessage(tr("Opening file.")); 43 {
44 QPixmap pixmap; 44 }
45 if(pixmap.load(fileName)) { 45
46 void
47 MainWindow::handleOpenFileRequest (QString fileName)
48 {
49 reportStatusMessage (tr ("Opening file."));
50 QPixmap pixmap;
51 if (pixmap.load (fileName))
52 {
46 // ImageViewerMdiSubWindow *subWindow = new ImageViewerMdiSubWindow(pixmap, this); 53 // ImageViewerMdiSubWindow *subWindow = new ImageViewerMdiSubWindow(pixmap, this);
47 // subWindow->setAttribute(Qt::WA_DeleteOnClose); 54 // subWindow->setAttribute(Qt::WA_DeleteOnClose);
48 // m_centralMdiArea->addSubWindow(subWindow); 55 // m_centralMdiArea->addSubWindow(subWindow);
49 // subWindow->setWindowTitle(fileName); 56 // subWindow->setWindowTitle(fileName);
50 } else { 57 }
51 FileEditorMdiSubWindow *subWindow = new FileEditorMdiSubWindow(m_centralMdiArea); 58 else
52 subWindow->setAttribute(Qt::WA_DeleteOnClose); 59 {
60 FileEditorMdiSubWindow *subWindow =
61 new FileEditorMdiSubWindow (m_centralMdiArea);
62 subWindow->setAttribute (Qt::WA_DeleteOnClose);
53 // addSubWindow uncommented to avoid "QMdiArea::addSubWindow: window is already added" 63 // addSubWindow uncommented to avoid "QMdiArea::addSubWindow: window is already added"
54 // m_centralMdiArea->addSubWindow(subWindow); 64 // m_centralMdiArea->addSubWindow(subWindow);
55 subWindow->loadFile(fileName); 65 subWindow->loadFile (fileName);
56 } 66 }
57 } 67 }
58 68
59 void MainWindow::reportStatusMessage(QString statusMessage) { 69 void
60 m_statusBar->showMessage(statusMessage, 1000); 70 MainWindow::reportStatusMessage (QString statusMessage)
61 } 71 {
62 72 m_statusBar->showMessage (statusMessage, 1000);
63 void MainWindow::openWebPage(QString url) { 73 }
64 m_documentationWidget->load(QUrl(url)); 74
65 } 75 void
66 76 MainWindow::openWebPage (QString url)
67 void MainWindow::handleSaveWorkspaceRequest() { 77 {
68 QDesktopServices desktopServices; 78 m_documentationWidget->load (QUrl (url));
69 QString selectedFile = QFileDialog::getSaveFileName(this, tr("Save Workspace"), 79 }
70 desktopServices.storageLocation(QDesktopServices::HomeLocation) + "/.quint/workspace"); 80
71 m_octaveTerminal->sendText(QString("save \'%1\'\n").arg(selectedFile)); 81 void
72 m_octaveTerminal->setFocus(); 82 MainWindow::handleSaveWorkspaceRequest ()
73 } 83 {
74 84 QDesktopServices desktopServices;
75 void MainWindow::handleLoadWorkspaceRequest() { 85 QString selectedFile =
76 QDesktopServices desktopServices; 86 QFileDialog::getSaveFileName (this, tr ("Save Workspace"),
77 QString selectedFile = QFileDialog::getOpenFileName(this, tr("Load Workspace"), 87 desktopServices.
78 desktopServices.storageLocation(QDesktopServices::HomeLocation) + "/.quint/workspace"); 88 storageLocation (QDesktopServices::
79 m_octaveTerminal->sendText(QString("load \'%1\'\n").arg(selectedFile)); 89 HomeLocation) +
80 m_octaveTerminal->setFocus(); 90 "/.quint/workspace");
81 } 91 m_octaveTerminal->sendText (QString ("save \'%1\'\n").arg (selectedFile));
82 92 m_octaveTerminal->setFocus ();
83 void MainWindow::handleClearWorkspaceRequest() { 93 }
84 m_octaveTerminal->sendText("clear\n"); 94
85 m_octaveTerminal->setFocus(); 95 void
86 } 96 MainWindow::handleLoadWorkspaceRequest ()
87 97 {
88 void MainWindow::handleCommandDoubleClicked(QString command) { 98 QDesktopServices desktopServices;
89 m_octaveTerminal->sendText(command); 99 QString selectedFile =
90 m_octaveTerminal->setFocus(); 100 QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
91 } 101 desktopServices.
92 102 storageLocation (QDesktopServices::
93 void MainWindow::alignMdiWindows() { 103 HomeLocation) +
94 m_centralMdiArea->tileSubWindows(); 104 "/.quint/workspace");
95 } 105 m_octaveTerminal->sendText (QString ("load \'%1\'\n").arg (selectedFile));
96 106 m_octaveTerminal->setFocus ();
97 void MainWindow::openBugTrackerPage() { 107 }
98 QDesktopServices::openUrl(QUrl("http://savannah.gnu.org/bugs/?group=octave")); 108
99 } 109 void
100 110 MainWindow::handleClearWorkspaceRequest ()
101 void MainWindow::processSettingsDialogRequest() { 111 {
102 SettingsDialog settingsDialog(this, m_settingsFile); 112 m_octaveTerminal->sendText ("clear\n");
103 settingsDialog.exec(); 113 m_octaveTerminal->setFocus ();
104 } 114 }
105 115
106 void MainWindow::closeEvent(QCloseEvent *closeEvent) { 116 void
107 m_isRunning = false; 117 MainWindow::handleCommandDoubleClicked (QString command)
108 reportStatusMessage(tr("Saving data and shutting down.")); 118 {
109 writeSettings(); 119 m_octaveTerminal->sendText (command);
110 120 m_octaveTerminal->setFocus ();
111 m_octaveCallbackThread->terminate(); 121 }
112 m_octaveCallbackThread->wait(); 122
113 123 void
114 m_octaveMainThread->terminate(); 124 MainWindow::alignMdiWindows ()
115 QMainWindow::closeEvent(closeEvent); 125 {
116 } 126 m_centralMdiArea->tileSubWindows ();
117 127 }
118 void MainWindow::readSettings() { 128
119 QSettings settings(m_settingsFile, QSettings::IniFormat); 129 void
120 restoreGeometry(settings.value("MainWindow/geometry").toByteArray()); 130 MainWindow::openBugTrackerPage ()
121 restoreState(settings.value("MainWindow/windowState").toByteArray()); 131 {
122 } 132 QDesktopServices::
123 133 openUrl (QUrl ("http://savannah.gnu.org/bugs/?group=octave"));
124 void MainWindow::writeSettings() { 134 }
125 QSettings settings(m_settingsFile, QSettings::IniFormat); 135
126 settings.setValue("MainWindow/geometry", saveGeometry()); 136 void
127 settings.setValue("MainWindow/windowState", saveState()); 137 MainWindow::processSettingsDialogRequest ()
128 } 138 {
129 139 SettingsDialog settingsDialog (this, m_settingsFile);
130 void MainWindow::construct() { 140 settingsDialog.exec ();
131 141 }
132 if(QFile::exists("../media/logo.png")) 142
133 setWindowIcon(QIcon("../media/logo.png")); 143 void
134 else 144 MainWindow::closeEvent (QCloseEvent * closeEvent)
135 setWindowIcon(QIcon("/usr/share/octave/quint/media/logo.png")); 145 {
136 146 m_isRunning = false;
137 // Initialize MDI area. 147 reportStatusMessage (tr ("Saving data and shutting down."));
138 m_centralMdiArea = new QMdiArea(this); 148 writeSettings ();
139 m_centralMdiArea->setObjectName("CentralMdiArea"); 149
140 m_centralMdiArea->setViewMode(QMdiArea::TabbedView); 150 m_octaveCallbackThread->terminate ();
141 151 m_octaveCallbackThread->wait ();
142 // Setup dockable widgets and the status bar. 152
143 m_variablesDockWidget = new VariablesDockWidget(this); 153 m_octaveMainThread->terminate ();
144 m_historyDockWidget = new HistoryDockWidget(this); 154 QMainWindow::closeEvent (closeEvent);
145 m_filesDockWidget = new FilesDockWidget(this); 155 }
146 m_statusBar = new QStatusBar(this); 156
147 157 void
148 // Setup essential MDI Windows. 158 MainWindow::readSettings ()
149 m_octaveTerminal = new OctaveTerminal(this); 159 {
150 m_documentationWidget = new BrowserWidget(this); 160 QSettings settings (m_settingsFile, QSettings::IniFormat);
151 m_ircWidget = new IRCWidget(this, m_settingsFile); 161 restoreGeometry (settings.value ("MainWindow/geometry").toByteArray ());
152 162 restoreState (settings.value ("MainWindow/windowState").toByteArray ());
153 m_documentationWidgetSubWindow = m_centralMdiArea->addSubWindow(m_documentationWidget, 163 }
154 Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint); 164
155 m_documentationWidgetSubWindow->setObjectName("DocumentationWidgetSubWindow"); 165 void
156 m_documentationWidgetSubWindow->setWindowTitle(tr("Documentation")); 166 MainWindow::writeSettings ()
157 m_documentationWidgetSubWindow->setWindowIcon(QIcon("../media/help_index.png")); 167 {
158 168 QSettings settings (m_settingsFile, QSettings::IniFormat);
159 m_octaveTerminalSubWindow = m_centralMdiArea->addSubWindow(m_octaveTerminal, 169 settings.setValue ("MainWindow/geometry", saveGeometry ());
160 Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint); 170 settings.setValue ("MainWindow/windowState", saveState ());
161 m_octaveTerminalSubWindow->setObjectName("OctaveTerminalSubWindow"); 171 }
162 m_octaveTerminalSubWindow->setWindowTitle(tr("Terminal")); 172
163 m_octaveTerminalSubWindow->setWindowIcon(QIcon("../media/terminal.png")); 173 void
164 174 MainWindow::construct ()
165 m_ircWidgetSubWindow = m_centralMdiArea->addSubWindow(m_ircWidget, 175 {
166 Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint); 176
167 m_ircWidgetSubWindow->setObjectName("ChatWidgetSubWindow"); 177 if (QFile::exists ("../media/logo.png"))
168 m_ircWidgetSubWindow->setWindowTitle(tr("Chat")); 178 setWindowIcon (QIcon ("../media/logo.png"));
169 m_ircWidgetSubWindow->setWindowIcon(QIcon("../media/chat.png")); 179 else
170 180 setWindowIcon (QIcon ("/usr/share/octave/quint/media/logo.png"));
171 QMenu *controlMenu = menuBar()->addMenu(tr("Octave")); 181
172 QAction *settingsAction = controlMenu->addAction(tr("Settings")); 182 // Initialize MDI area.
173 controlMenu->addSeparator(); 183 m_centralMdiArea = new QMdiArea (this);
174 QAction *exitAction = controlMenu->addAction(tr("Exit")); 184 m_centralMdiArea->setObjectName ("CentralMdiArea");
175 185 m_centralMdiArea->setViewMode (QMdiArea::TabbedView);
176 QMenu *interfaceMenu = menuBar()->addMenu(tr("Interface")); 186
177 QAction *alignWindowsAction = interfaceMenu->addAction(tr("Align Windows")); 187 // Setup dockable widgets and the status bar.
178 188 m_variablesDockWidget = new VariablesDockWidget (this);
179 QMenu *communityMenu = menuBar()->addMenu(tr("Community")); 189 m_historyDockWidget = new HistoryDockWidget (this);
180 QAction *reportBugAction = communityMenu->addAction(tr("Report Bug")); 190 m_filesDockWidget = new FilesDockWidget (this);
181 191 m_statusBar = new QStatusBar (this);
182 connect(settingsAction, SIGNAL(triggered()), this, SLOT(processSettingsDialogRequest())); 192
183 connect(exitAction, SIGNAL(triggered()), this, SLOT(close())); 193 // Setup essential MDI Windows.
184 connect(alignWindowsAction, SIGNAL(triggered()), this, SLOT(alignMdiWindows())); 194 m_octaveTerminal = new OctaveTerminal (this);
185 connect(reportBugAction, SIGNAL(triggered()), this, SLOT(openBugTrackerPage())); 195 m_documentationWidget = new BrowserWidget (this);
186 196 m_ircWidget = new IRCWidget (this, m_settingsFile);
187 setWindowTitle("Octave"); 197
188 setCentralWidget(m_centralMdiArea); 198 m_documentationWidgetSubWindow =
189 addDockWidget(Qt::LeftDockWidgetArea, m_variablesDockWidget); 199 m_centralMdiArea->addSubWindow (m_documentationWidget,
190 addDockWidget(Qt::LeftDockWidgetArea, m_historyDockWidget); 200 Qt::WindowTitleHint | Qt::
191 addDockWidget(Qt::RightDockWidgetArea, m_filesDockWidget); 201 WindowMinMaxButtonsHint);
192 setStatusBar(m_statusBar); 202 m_documentationWidgetSubWindow->
193 203 setObjectName ("DocumentationWidgetSubWindow");
194 readSettings(); 204 m_documentationWidgetSubWindow->setWindowTitle (tr ("Documentation"));
195 205 m_documentationWidgetSubWindow->
196 connect(m_filesDockWidget, SIGNAL(openFile(QString)), this, SLOT(handleOpenFileRequest(QString))); 206 setWindowIcon (QIcon ("../media/help_index.png"));
197 connect(m_historyDockWidget, SIGNAL(information(QString)), this, SLOT(reportStatusMessage(QString))); 207
198 connect(m_historyDockWidget, SIGNAL(commandDoubleClicked(QString)), this, SLOT(handleCommandDoubleClicked(QString))); 208 m_octaveTerminalSubWindow =
199 connect(m_variablesDockWidget, SIGNAL(saveWorkspace()), this, SLOT(handleSaveWorkspaceRequest())); 209 m_centralMdiArea->addSubWindow (m_octaveTerminal,
200 connect(m_variablesDockWidget, SIGNAL(loadWorkspace()), this, SLOT(handleLoadWorkspaceRequest())); 210 Qt::WindowTitleHint | Qt::
201 connect(m_variablesDockWidget, SIGNAL(clearWorkspace()), this, SLOT(handleClearWorkspaceRequest())); 211 WindowMinMaxButtonsHint);
202 212 m_octaveTerminalSubWindow->setObjectName ("OctaveTerminalSubWindow");
203 openWebPage("http://www.gnu.org/software/octave/doc/interpreter/"); 213 m_octaveTerminalSubWindow->setWindowTitle (tr ("Terminal"));
204 } 214 m_octaveTerminalSubWindow->setWindowIcon (QIcon ("../media/terminal.png"));
205 215
206 void MainWindow::establishOctaveLink() { 216 m_ircWidgetSubWindow = m_centralMdiArea->addSubWindow (m_ircWidget,
207 m_octaveMainThread = new OctaveMainThread(this); 217 Qt::
208 m_octaveMainThread->start(); 218 WindowTitleHint |
209 219 Qt::
210 m_octaveCallbackThread = new OctaveCallbackThread(this, this); 220 WindowMinMaxButtonsHint);
211 m_octaveCallbackThread->start(); 221 m_ircWidgetSubWindow->setObjectName ("ChatWidgetSubWindow");
212 222 m_ircWidgetSubWindow->setWindowTitle (tr ("Chat"));
213 command_editor::add_event_hook(OctaveLink::readlineEventHook); 223 m_ircWidgetSubWindow->setWindowIcon (QIcon ("../media/chat.png"));
214 224
215 int fdm, fds; 225 QMenu *controlMenu = menuBar ()->addMenu (tr ("Octave"));
216 if(openpty(&fdm, &fds, 0, 0, 0) < 0) { 226 QAction *settingsAction = controlMenu->addAction (tr ("Settings"));
217 assert(0); 227 controlMenu->addSeparator ();
228 QAction *exitAction = controlMenu->addAction (tr ("Exit"));
229
230 QMenu *interfaceMenu = menuBar ()->addMenu (tr ("Interface"));
231 QAction *alignWindowsAction =
232 interfaceMenu->addAction (tr ("Align Windows"));
233
234 QMenu *communityMenu = menuBar ()->addMenu (tr ("Community"));
235 QAction *reportBugAction = communityMenu->addAction (tr ("Report Bug"));
236
237 connect (settingsAction, SIGNAL (triggered ()), this,
238 SLOT (processSettingsDialogRequest ()));
239 connect (exitAction, SIGNAL (triggered ()), this, SLOT (close ()));
240 connect (alignWindowsAction, SIGNAL (triggered ()), this,
241 SLOT (alignMdiWindows ()));
242 connect (reportBugAction, SIGNAL (triggered ()), this,
243 SLOT (openBugTrackerPage ()));
244
245 setWindowTitle ("Octave");
246 setCentralWidget (m_centralMdiArea);
247 addDockWidget (Qt::LeftDockWidgetArea, m_variablesDockWidget);
248 addDockWidget (Qt::LeftDockWidgetArea, m_historyDockWidget);
249 addDockWidget (Qt::RightDockWidgetArea, m_filesDockWidget);
250 setStatusBar (m_statusBar);
251
252 readSettings ();
253
254 connect (m_filesDockWidget, SIGNAL (openFile (QString)), this,
255 SLOT (handleOpenFileRequest (QString)));
256 connect (m_historyDockWidget, SIGNAL (information (QString)), this,
257 SLOT (reportStatusMessage (QString)));
258 connect (m_historyDockWidget, SIGNAL (commandDoubleClicked (QString)), this,
259 SLOT (handleCommandDoubleClicked (QString)));
260 connect (m_variablesDockWidget, SIGNAL (saveWorkspace ()), this,
261 SLOT (handleSaveWorkspaceRequest ()));
262 connect (m_variablesDockWidget, SIGNAL (loadWorkspace ()), this,
263 SLOT (handleLoadWorkspaceRequest ()));
264 connect (m_variablesDockWidget, SIGNAL (clearWorkspace ()), this,
265 SLOT (handleClearWorkspaceRequest ()));
266
267 openWebPage ("http://www.gnu.org/software/octave/doc/interpreter/");
268 }
269
270 void
271 MainWindow::establishOctaveLink ()
272 {
273 m_octaveMainThread = new OctaveMainThread (this);
274 m_octaveMainThread->start ();
275
276 m_octaveCallbackThread = new OctaveCallbackThread (this, this);
277 m_octaveCallbackThread->start ();
278
279 command_editor::add_event_hook (OctaveLink::readlineEventHook);
280
281 int fdm, fds;
282 if (openpty (&fdm, &fds, 0, 0, 0) < 0)
283 {
284 assert (0);
218 } 285 }
219 dup2 (fds, 0); 286 dup2 (fds, 0);
220 dup2 (fds, 1); 287 dup2 (fds, 1);
221 dup2 (fds, 2); 288 dup2 (fds, 2);
222 m_octaveTerminal->openTeletype(fdm); 289 m_octaveTerminal->openTeletype (fdm);
223 reportStatusMessage(tr("Established link to Octave.")); 290 reportStatusMessage (tr ("Established link to Octave."));
224 } 291 }