Mercurial > hg > octave-lyh
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 } |