# HG changeset patch # User Jacob Dawid # Date 1338311285 -7200 # Node ID 7623bece76df9e48296c38fb99c645424d341005 # Parent 0bab96aeb9951a266deb3709cd040136a92aa716 Implemented logic for current directory bar. * MainWindow: Changed current working directory line edit to combo box. Added various signals and slots. * OctaveLink: Added signal that will be emitted whenever a current directory change occurs. diff -r 0bab96aeb995 -r 7623bece76df gui/src/MainWindow.cpp --- a/gui/src/MainWindow.cpp Tue May 29 14:31:21 2012 +0200 +++ b/gui/src/MainWindow.cpp Tue May 29 19:08:05 2012 +0200 @@ -131,7 +131,6 @@ // Set terminal font: QSettings *settings = ResourceManager::instance ()->settings (); QFont font = QFont(); - //font.setStyleHint(QFont::TypeWriter); font.setFamily(settings->value("terminal/fontName").toString()); font.setPointSize(settings->value("terminal/fontSize").toInt ()); m_terminal->setTerminalFont(font); @@ -144,6 +143,54 @@ } void +MainWindow::resetWindows () +{ + // TODO: Implement. +} + +void +MainWindow::updateCurrentWorkingDirectory (QString directory) +{ + if(m_currentDirectoryComboBox->findText (directory) < 0) + { + if (m_currentDirectoryComboBox->count () > 31) + { + m_currentDirectoryComboBox->removeItem (0); + } + m_currentDirectoryComboBox->addItem (directory); + int index = m_currentDirectoryComboBox->findText (directory); + m_currentDirectoryComboBox->setCurrentIndex (index); + } +} + +void +MainWindow::changeCurrentWorkingDirectory () +{ + QString selectedDirectory = + QFileDialog::getExistingDirectory(this, tr ("Set working direcotry")); + + if (!selectedDirectory.isEmpty ()) + { + m_terminal->sendText (QString ("cd \'%1\'\n").arg (selectedDirectory)); + m_terminal->setFocus (); + } +} + +void +MainWindow::changeCurrentWorkingDirectory (QString directory) +{ + m_terminal->sendText (QString ("cd \'%1\'\n").arg (directory)); + m_terminal->setFocus (); +} + +void +MainWindow::currentWorkingDirectoryUp () +{ + m_terminal->sendText ("cd ..\n"); + m_terminal->setFocus (); +} + +void MainWindow::showAboutOctave () { QString message = @@ -213,8 +260,11 @@ m_filesDockWidget->setStatusTip (tr ("Browse your files.")); m_statusBar = new QStatusBar (this); - m_currentDirectoryLineEdit = new QLineEdit (QDir::currentPath (), this); - m_currentDirectoryLineEdit->setFixedWidth (300); + m_currentDirectoryComboBox = new QComboBox (this); + m_currentDirectoryComboBox->setFixedWidth (300); + m_currentDirectoryComboBox->setEditable (true); + m_currentDirectoryComboBox->setInsertPolicy (QComboBox::InsertAtTop); + m_currentDirectoryComboBox->setMaxVisibleItems (14); m_currentDirectoryToolButton = new QToolButton (this); m_currentDirectoryToolButton->setIcon (style->standardIcon (QStyle::SP_DirOpenIcon)); @@ -223,7 +273,7 @@ m_currentDirectoryUpToolButton->setIcon (style->standardIcon (QStyle::SP_FileDialogToParent)); // Octave Terminal subwindow. - m_terminal = new QTerminal(this); + m_terminal = new QTerminal (this); m_terminal->setObjectName ("OctaveTerminal"); m_terminalDockWidget = new TerminalDockWidget (m_terminal, this); @@ -296,6 +346,9 @@ QAction *showEditorAction = windowMenu->addAction (tr ("Editor")); showEditorAction->setCheckable (true); + windowMenu->addSeparator (); + QAction *resetWindowsAction = windowMenu->addAction (tr ("Reset Windows")); + // Help menu QMenu *helpMenu = menuBar ()->addMenu (tr ("&Help")); QAction *reportBugAction = helpMenu->addAction (tr ("Report Bug")); @@ -316,7 +369,7 @@ mainToolBar->addAction (redoAction); mainToolBar->addSeparator (); mainToolBar->addWidget (new QLabel (tr ("Current Directory:"))); - mainToolBar->addWidget (m_currentDirectoryLineEdit); + mainToolBar->addWidget (m_currentDirectoryComboBox); mainToolBar->addWidget (m_currentDirectoryToolButton); mainToolBar->addWidget (m_currentDirectoryUpToolButton); @@ -341,7 +394,7 @@ connect (m_filesDockWidget, SIGNAL (activeChanged (bool)), showFileBrowserAction, SLOT (setChecked (bool))); connect (showEditorAction, SIGNAL (toggled (bool)), m_fileEditor, SLOT (setShown (bool))); connect (m_fileEditor, SIGNAL (activeChanged (bool)), showEditorAction, SLOT (setChecked (bool))); - + connect (resetWindowsAction, SIGNAL (triggered ()), this, SLOT (resetWindows ())); //connect (this, SIGNAL (settingsChanged ()), m_workspaceView, SLOT (noticeSettings ())); //connect (this, SIGNAL (settingsChanged ()), m_historyDockWidget, SLOT (noticeSettings ())); connect (this, SIGNAL (settingsChanged ()), m_filesDockWidget, SLOT (noticeSettings ())); @@ -354,8 +407,18 @@ connect (loadWorkspaceAction, SIGNAL (triggered ()), this, SLOT (handleLoadWorkspaceRequest ())); connect (clearWorkspaceAction, SIGNAL (triggered ()), this, SLOT (handleClearWorkspaceRequest ())); + connect (m_currentDirectoryToolButton, SIGNAL (clicked ()), + this, SLOT (changeCurrentWorkingDirectory ())); + connect (m_currentDirectoryUpToolButton, SIGNAL (clicked ()), + this, SLOT(currentWorkingDirectoryUp())); connect (copyAction, SIGNAL (triggered()), m_terminal, SLOT(copyClipboard ())); connect (pasteAction, SIGNAL (triggered()), m_terminal, SLOT(pasteClipboard ())); + + connect (OctaveLink::instance (), SIGNAL (workingDirectoryChanged (QString)), + this, SLOT (updateCurrentWorkingDirectory (QString))); + connect (m_currentDirectoryComboBox, SIGNAL (activated (QString)), + this, SLOT (changeCurrentWorkingDirectory (QString))); + setWindowTitle ("Octave"); setDockOptions(QMainWindow::AnimatedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AllowTabbedDocks); diff -r 0bab96aeb995 -r 7623bece76df gui/src/MainWindow.h --- a/gui/src/MainWindow.h Tue May 29 14:31:21 2012 +0200 +++ b/gui/src/MainWindow.h Tue May 29 19:08:05 2012 +0200 @@ -29,6 +29,7 @@ #include #include #include +#include // Editor includes #include "FileEditorInterface.h" @@ -91,6 +92,11 @@ void showAboutOctave (); void noticeSettings (); void prepareForQuit (); + void resetWindows (); + void updateCurrentWorkingDirectory (QString directory); + void changeCurrentWorkingDirectory (); + void changeCurrentWorkingDirectory (QString directory); + void currentWorkingDirectoryUp (); protected: void closeEvent (QCloseEvent * closeEvent); @@ -113,7 +119,7 @@ // Toolbars. QStatusBar *m_statusBar; - QLineEdit *m_currentDirectoryLineEdit; + QComboBox *m_currentDirectoryComboBox; QToolButton *m_currentDirectoryToolButton; QToolButton *m_currentDirectoryUpToolButton; diff -r 0bab96aeb995 -r 7623bece76df gui/src/backend/OctaveLink.cpp --- a/gui/src/backend/OctaveLink.cpp Tue May 29 14:31:21 2012 +0200 +++ b/gui/src/backend/OctaveLink.cpp Tue May 29 19:08:05 2012 +0200 @@ -17,6 +17,7 @@ #include "OctaveLink.h" #include "load-path.h" +#include "oct-env.h" #include #include @@ -24,7 +25,7 @@ { OctaveLink::instance ()->triggerUpdateHistoryModel (); OctaveLink::instance ()->buildSymbolInformation (); - QDir::setCurrent (load_path::get_command_line_path ().c_str ()); + OctaveLink::instance ()->updateCurrentWorkingDirectory (); return 0; } @@ -52,6 +53,7 @@ m_workspaceModel, SLOT (updateFromSymbolTable ())); _symbolInformationSemaphore = new QSemaphore (1); + _currentWorkingDirectory = ""; } OctaveLink::~OctaveLink () @@ -96,6 +98,18 @@ } void +OctaveLink::updateCurrentWorkingDirectory () +{ + QString _queriedWorkingDirectory = octave_env::get_current_directory ().c_str(); + if (_currentWorkingDirectory != _queriedWorkingDirectory) + { + _currentWorkingDirectory = _queriedWorkingDirectory; + QDir::setCurrent (_currentWorkingDirectory); + emit workingDirectoryChanged (_currentWorkingDirectory); + } +} + +void OctaveLink::acquireSymbolInformation () { _symbolInformationSemaphore->acquire (1); diff -r 0bab96aeb995 -r 7623bece76df gui/src/backend/OctaveLink.h --- a/gui/src/backend/OctaveLink.h Tue May 29 14:31:21 2012 +0200 +++ b/gui/src/backend/OctaveLink.h Tue May 29 19:08:05 2012 +0200 @@ -97,12 +97,16 @@ WorkspaceModel *workspaceModel (); void triggerUpdateHistoryModel (); + void updateCurrentWorkingDirectory (); void acquireSymbolInformation (); void releaseSymbolInformation (); void buildSymbolInformation (); const QList & symbolInformation () const; +signals: + void workingDirectoryChanged (QString directory); + private: OctaveLink (); ~OctaveLink (); @@ -117,6 +121,7 @@ QSemaphore *_symbolInformationSemaphore; QList _symbolInformation; + QString _currentWorkingDirectory; static OctaveLink m_singleton; }; #endif // OCTAVELINK_H diff -r 0bab96aeb995 -r 7623bece76df gui/src/backend/OctaveMainThread.cpp --- a/gui/src/backend/OctaveMainThread.cpp Tue May 29 14:31:21 2012 +0200 +++ b/gui/src/backend/OctaveMainThread.cpp Tue May 29 19:08:05 2012 +0200 @@ -27,7 +27,7 @@ { setlocale(LC_ALL, "en_US.UTF-8"); int argc = 1; - const char *argv[] = { "octave" }; + const char *argv[] = { "" }; emit ready(); octave_main (argc, (char **) argv, 0); }