Mercurial > hg > octave-avbm
changeset 13683:25dc40d24a44
Renamed VariablesDockWidget to WorkspaceView and optimized memory footprint for 30%.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Fri, 30 Sep 2011 12:34:37 +0200 |
parents | c0e0625ffd13 |
children | 4eb1247acf8f |
files | gui/octave-gui.pro gui/src/MainWindow.cpp gui/src/MainWindow.h gui/src/VariablesDockWidget.cpp gui/src/VariablesDockWidget.h gui/src/WorkspaceView.cpp gui/src/WorkspaceView.h gui/src/backend/OctaveCallbackThread.cpp gui/src/backend/OctaveLink.cpp gui/src/backend/OctaveLink.h |
diffstat | 8 files changed, 61 insertions(+), 89 deletions(-) [+] |
line wrap: on
line diff
--- a/gui/octave-gui.pro +++ b/gui/octave-gui.pro @@ -67,7 +67,7 @@ SOURCES +=\ src/lexer/lexeroctavegui.cpp \ src/MainWindow.cpp \ - src/VariablesDockWidget.cpp \ + src/WorkspaceView.cpp \ src/HistoryDockWidget.cpp \ src/FilesDockWidget.cpp \ src/FileEditorMdiSubWindow.cpp \ @@ -98,7 +98,7 @@ HEADERS += \ src/lexer/lexeroctavegui.h \ src/MainWindow.h \ - src/VariablesDockWidget.h \ + src/WorkspaceView.h \ src/HistoryDockWidget.h \ src/FilesDockWidget.h \ src/FileEditorMdiSubWindow.h \
--- a/gui/src/MainWindow.cpp +++ b/gui/src/MainWindow.cpp @@ -26,9 +26,8 @@ #include "FileEditorMdiSubWindow.h" #include "ImageViewerMdiSubWindow.h" #include "SettingsDialog.h" -#include "cmd-edit.h" -#define VERSION_STRING "Octave GUI (0.8.4)" +#define VERSION_STRING "Octave GUI (0.8.5)" MainWindow::MainWindow (QWidget * parent):QMainWindow (parent) { @@ -278,8 +277,8 @@ m_centralMdiArea->setViewMode (QMdiArea::TabbedView); // Setup dockable widgets and the status bar. - m_variablesDockWidget = new VariablesDockWidget (this); - m_variablesDockWidget->setStatusTip (tr ("View the variables in the active workspace.")); + m_workspaceView = new WorkspaceView (this); + m_workspaceView->setStatusTip (tr ("View the variables in the active workspace.")); m_historyDockWidget = new HistoryDockWidget (this); m_historyDockWidget->setStatusTip (tr ("Browse and search the command history.")); m_filesDockWidget = new FilesDockWidget (this); @@ -378,14 +377,14 @@ connect (aboutOctaveAction, SIGNAL (triggered ()), this, SLOT (showAboutOctave ())); connect (aboutQt, SIGNAL (triggered ()), this, SLOT (showAboutQt ())); - connect (showWorkspaceAction, SIGNAL (toggled (bool)), m_variablesDockWidget, SLOT (setShown (bool))); - connect (m_variablesDockWidget, SIGNAL (activeChanged (bool)), showWorkspaceAction, SLOT (setChecked (bool))); + connect (showWorkspaceAction, SIGNAL (toggled (bool)), m_workspaceView, SLOT (setShown (bool))); + connect (m_workspaceView, SIGNAL (activeChanged (bool)), showWorkspaceAction, SLOT (setChecked (bool))); connect (showHistoryAction, SIGNAL (toggled (bool)), m_historyDockWidget, SLOT (setShown (bool))); connect (m_historyDockWidget, SIGNAL (activeChanged (bool)), showHistoryAction, SLOT (setChecked (bool))); connect (showFileBrowserAction, SIGNAL (toggled (bool)), m_filesDockWidget, SLOT (setShown (bool))); connect (m_filesDockWidget, SIGNAL (activeChanged (bool)), showFileBrowserAction, SLOT (setChecked (bool))); - connect (this, SIGNAL (settingsChanged ()), m_variablesDockWidget, SLOT (noticeSettings ())); + connect (this, SIGNAL (settingsChanged ()), m_workspaceView, SLOT (noticeSettings ())); connect (this, SIGNAL (settingsChanged ()), m_historyDockWidget, SLOT (noticeSettings ())); connect (this, SIGNAL (settingsChanged ()), m_filesDockWidget, SLOT (noticeSettings ())); @@ -399,7 +398,7 @@ setWindowTitle (QString (VERSION_STRING)); setCentralWidget (m_centralMdiArea); - addDockWidget (Qt::LeftDockWidgetArea, m_variablesDockWidget); + addDockWidget (Qt::LeftDockWidgetArea, m_workspaceView); addDockWidget (Qt::LeftDockWidgetArea, m_historyDockWidget); addDockWidget (Qt::RightDockWidgetArea, m_filesDockWidget); setStatusBar (m_statusBar);
--- a/gui/src/MainWindow.h +++ b/gui/src/MainWindow.h @@ -30,7 +30,7 @@ #include "ResourceManager.h" #include "TerminalView.h" #include "OctaveLink.h" -#include "VariablesDockWidget.h" +#include "WorkspaceView.h" #include "HistoryDockWidget.h" #include "FilesDockWidget.h" #include "BrowserWidget.h" @@ -66,10 +66,7 @@ { return m_terminalView; } - VariablesDockWidget *variablesDockWidget () - { - return m_variablesDockWidget; - } + HistoryDockWidget *historyDockWidget () { return m_historyDockWidget; @@ -125,7 +122,7 @@ NonClosableMdiSubWindow *m_ircWidgetSubWindow; // Dock widgets. - VariablesDockWidget *m_variablesDockWidget; + WorkspaceView *m_workspaceView; HistoryDockWidget *m_historyDockWidget; FilesDockWidget *m_filesDockWidget;
rename from gui/src/VariablesDockWidget.cpp rename to gui/src/WorkspaceView.cpp --- a/gui/src/VariablesDockWidget.cpp +++ b/gui/src/WorkspaceView.cpp @@ -15,23 +15,15 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "VariablesDockWidget.h" +#include "WorkspaceView.h" #include <QHBoxLayout> #include <QVBoxLayout> #include <QPushButton> -VariablesDockWidget::VariablesDockWidget (QWidget * parent):QDockWidget +WorkspaceView::WorkspaceView (QWidget * parent) : QDockWidget (parent) { - setObjectName ("VariablesDockWidget"); - construct (); - - connect (OctaveLink::instance(), SIGNAL (symbolTableChanged()), this, SLOT (fetchSymbolTable())); -} - -void -VariablesDockWidget::construct () -{ + setObjectName ("WorkspaceView"); setWindowTitle (tr ("Workspace")); m_updateSemaphore = new QSemaphore (1); @@ -79,11 +71,12 @@ " stop:0.780424 rgba(255, 215, 215, 255)); " " } " ); + + connect (OctaveLink::instance(), SIGNAL (symbolTableChanged()), this, SLOT (fetchSymbolTable())); } void -VariablesDockWidget::updateTreeEntry (QTreeWidgetItem * treeItem, - SymbolRecord symbolRecord) +WorkspaceView::updateTreeEntry (QTreeWidgetItem * treeItem, SymbolRecord symbolRecord) { treeItem->setData (0, 0, QString (symbolRecord.name ().c_str ())); treeItem->setData (1, 0, @@ -94,7 +87,7 @@ } void -VariablesDockWidget::setVariablesList (QList < SymbolRecord > symbolTable) +WorkspaceView::updateFromSymbolTable (QList < SymbolRecord > symbolTable) { m_updateSemaphore->acquire (); // Split the symbol table into its different scopes. @@ -108,24 +101,24 @@ // It's true that being global or hidden includes it's can mean it's also locally visible, // but we want to distinguish that here. if (symbolRecord.is_local () && !symbolRecord.is_global () - && !symbolRecord.is_hidden ()) + && !symbolRecord.is_hidden ()) { - localSymbolTable.append (symbolRecord); + localSymbolTable.append (symbolRecord); } if (symbolRecord.is_global ()) { - globalSymbolTable.append (symbolRecord); + globalSymbolTable.append (symbolRecord); } if (symbolRecord.is_persistent ()) { - persistentSymbolTable.append (symbolRecord); + persistentSymbolTable.append (symbolRecord); } if (symbolRecord.is_hidden ()) { - hiddenSymbolTable.append (symbolRecord); + hiddenSymbolTable.append (symbolRecord); } } @@ -137,8 +130,7 @@ } void -VariablesDockWidget::updateScope (int topLevelItemIndex, - QList < SymbolRecord > symbolTable) +WorkspaceView::updateScope (int topLevelItemIndex, QList < SymbolRecord > symbolTable) { // This method may be a little bit confusing; variablesList is a complete list of all // variables that are in the workspace currently. @@ -204,21 +196,23 @@ } void -VariablesDockWidget::fetchSymbolTable () +WorkspaceView::fetchSymbolTable () { - QList < SymbolRecord > symbolTable = OctaveLink::instance ()->copyCurrentSymbolTable (); - setVariablesList (symbolTable); + OctaveLink::instance ()->acquireSymbolTable(); + QList < SymbolRecord > symbolTable = OctaveLink::instance ()->symbolTable(); + updateFromSymbolTable (symbolTable); + OctaveLink::instance ()->releaseSymbolTable(); } void -VariablesDockWidget::handleVisibilityChanged (bool visible) +WorkspaceView::handleVisibilityChanged (bool visible) { if (visible) - emit activeChanged (true); + emit activeChanged (true); } void -VariablesDockWidget::closeEvent (QCloseEvent *event) +WorkspaceView::closeEvent (QCloseEvent *event) { emit activeChanged (false); QDockWidget::closeEvent (event);
rename from gui/src/VariablesDockWidget.h rename to gui/src/WorkspaceView.h --- a/gui/src/VariablesDockWidget.h +++ b/gui/src/WorkspaceView.h @@ -15,37 +15,38 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef VARIABLESDOCKWIDGET_H -#define VARIABLESDOCKWIDGET_H +#ifndef WORKSPACEVIEW_H +#define WORKSPACEVIEW_H #include <QDockWidget> #include <QTreeWidget> #include <QSemaphore> #include "OctaveLink.h" -class VariablesDockWidget:public QDockWidget +class WorkspaceView:public QDockWidget { Q_OBJECT public: - VariablesDockWidget (QWidget * parent = 0); - void setVariablesList (QList < SymbolRecord > symbolTable); + WorkspaceView (QWidget * parent = 0); public slots: void fetchSymbolTable (); void handleVisibilityChanged (bool visible); + signals: /** Custom signal that tells if a user has clicke away that dock widget. */ void activeChanged (bool active); + protected: void closeEvent (QCloseEvent *event); + private: - void construct (); - void updateTreeEntry (QTreeWidgetItem * treeItem, - SymbolRecord symbolRecord); - void updateScope (int topLevelItemIndex, - QList < SymbolRecord > symbolTable); + void updateFromSymbolTable (QList < SymbolRecord > symbolTable); + void updateTreeEntry (QTreeWidgetItem * treeItem, SymbolRecord symbolRecord); + void updateScope (int topLevelItemIndex, QList < SymbolRecord > symbolTable); + QTreeWidget *m_variablesTreeWidget; QSemaphore *m_updateSemaphore; }; -#endif // VARIABLESDOCKWIDGET_H +#endif // WORKSPACEVIEW_H
--- a/gui/src/backend/OctaveCallbackThread.cpp +++ b/gui/src/backend/OctaveCallbackThread.cpp @@ -39,7 +39,7 @@ bool running = true; while (running) { - OctaveLink::instance ()->fetchSymbolTable (); + OctaveLink::instance ()->emitSymbolTableChanged(); OctaveLink::instance ()->updateHistoryModel (); usleep (500000);
--- a/gui/src/backend/OctaveLink.cpp +++ b/gui/src/backend/OctaveLink.cpp @@ -114,34 +114,17 @@ //m_octaveMainThread->wait(); } -void -OctaveLink::fetchSymbolTable () +QList < SymbolRecord > OctaveLink::symbolTable () { - m_symbolTableSemaphore->acquire (); m_symbolTableBuffer.clear (); std::list < SymbolRecord > allVariables = symbol_table::all_variables (); std::list < SymbolRecord >::iterator iterator; for (iterator = allVariables.begin (); iterator != allVariables.end (); iterator++) - m_symbolTableBuffer.append (iterator->dup ()); - m_symbolTableSemaphore->release (); - emit symbolTableChanged (); + m_symbolTableBuffer.append (iterator->dup()); + return m_symbolTableBuffer; } -QList < SymbolRecord > OctaveLink::copyCurrentSymbolTable () -{ - QList < SymbolRecord > m_symbolTableCopy; - - // Generate a deep copy of the current symbol table. - m_symbolTableSemaphore->acquire (); - foreach (SymbolRecord symbolRecord, m_symbolTableBuffer) - m_symbolTableCopy.append (symbolRecord.dup ()); - m_symbolTableSemaphore->release (); - - return m_symbolTableCopy; -} - - void OctaveLink::updateHistoryModel () {
--- a/gui/src/backend/OctaveLink.h +++ b/gui/src/backend/OctaveLink.h @@ -96,6 +96,14 @@ void launchOctave (); void terminateOctave (); + void acquireSymbolTable () { m_symbolTableSemaphore->acquire (); } + void releaseSymbolTable () { m_symbolTableSemaphore->release (); } + + /** + * For performance reasons this is not thread safe. Before you use this, + * acquire a lock with acquireSymbolTable and releaseSymbolTable. + */ + QList < SymbolRecord > symbolTable (); /** * Returns a copy of the current symbol table buffer. @@ -103,22 +111,12 @@ */ QList < SymbolRecord > copyCurrentSymbolTable (); - void - updateHistoryModel (); - - QStringListModel * - historyModel (); - - /** - * Updates the current symbol table with new data - * from octave. - */ - void - fetchSymbolTable (); + void updateHistoryModel (); + QStringListModel *historyModel (); + void emitSymbolTableChanged() { emit symbolTableChanged(); } signals: - void - symbolTableChanged (); + void symbolTableChanged (); private: OctaveLink ();