From 35792c6fa348213676f38f8a2242a36145ccf3ff Mon Sep 17 00:00:00 2001 From: Robert Knight Date: Fri, 11 May 2007 01:32:01 +0000 Subject: [PATCH] Use inline editing for the tab title formats. svn path=/trunk/KDE/kdebase/apps/konsole/; revision=663372 --- src/CMakeLists.txt | 5 +- src/EditProfileDialog.cpp | 49 ++++----- src/EditProfileDialog.h | 4 +- src/EditProfileDialog.ui | 4 +- src/EditTabTitleFormatDialog.cpp | 103 ------------------ src/EditTabTitleFormatDialog.ui | 75 ------------- src/TabTitleFormatAction.cpp | 101 +++++++++++++++++ ...eFormatDialog.h => TabTitleFormatAction.h} | 36 +++--- 8 files changed, 145 insertions(+), 232 deletions(-) delete mode 100644 src/EditTabTitleFormatDialog.cpp delete mode 100644 src/EditTabTitleFormatDialog.ui create mode 100644 src/TabTitleFormatAction.cpp rename src/{EditTabTitleFormatDialog.h => TabTitleFormatAction.h} (71%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23bf8f8fc..4bd972ea9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,7 +59,6 @@ set(konsole_KDEINIT_SRCS ColorScheme.cpp ColorSchemeEditor.cpp EditProfileDialog.cpp - EditTabTitleFormatDialog.cpp Filter.cpp HistorySizeDialog.cpp IncrementalSearchBar.cpp @@ -81,6 +80,7 @@ set(konsole_KDEINIT_SRCS Pty.cpp Screen.cpp Session.cpp + TabTitleFormatAction.cpp TerminalDisplay.cpp Vt102Emulation.cpp Emulation.cpp @@ -100,7 +100,6 @@ set(konsole_KDEINIT_SRCS kde4_add_ui_files(konsole_KDEINIT_SRCS ColorSchemeEditor.ui EditProfileDialog.ui - EditTabTitleFormatDialog.ui KeyBindingEditor.ui ManageProfilesDialog.ui RemoteConnectionDialog.ui @@ -135,7 +134,6 @@ set(konsolepart_PART_SRCS ColorScheme.cpp ColorSchemeEditor.cpp EditProfileDialog.cpp - EditTabTitleFormatDialog.cpp Emulation.cpp Filter.cpp History.cpp @@ -158,6 +156,7 @@ set(konsolepart_PART_SRCS ProfileListWidget.cpp SessionManager.cpp ManageProfilesDialog.cpp + TabTitleFormatAction.cpp TerminalCharacterDecoder.cpp TerminalDisplay.cpp ViewContainer.cpp diff --git a/src/EditProfileDialog.cpp b/src/EditProfileDialog.cpp index d1e1d597a..d74e35e9f 100644 --- a/src/EditProfileDialog.cpp +++ b/src/EditProfileDialog.cpp @@ -38,11 +38,11 @@ #include "ColorScheme.h" #include "ColorSchemeEditor.h" #include "ui_EditProfileDialog.h" -#include "EditTabTitleFormatDialog.h" #include "KeyBindingEditor.h" #include "KeyboardTranslator.h" #include "SessionManager.h" #include "ShellCommand.h" +#include "TabTitleFormatAction.h" using namespace Konsole; @@ -168,14 +168,31 @@ void EditProfileDialog::setupGeneralPage(const Profile* info) SLOT(tabTitleFormatChanged(const QString&)) ); connect(_ui->remoteTabTitleEdit , SIGNAL(textChanged(const QString&)) , this , SLOT(remoteTabTitleFormatChanged(const QString&))); - connect(_ui->tabTitleEditButton , SIGNAL(clicked()) , this , - SLOT(editTabTitle()) ); - connect(_ui->remoteTabTitleEditButton , SIGNAL(clicked()) , this , - SLOT(editRemoteTabTitle()) ); + + // menus for local and remote tab title dynamic elements + TabTitleFormatAction* localTabTitleAction = new TabTitleFormatAction(this); + localTabTitleAction->setContext(Session::LocalTabTitle); + _ui->tabTitleEditButton->setMenu(localTabTitleAction->menu()); + connect( localTabTitleAction , SIGNAL(dynamicElementSelected(const QString&)) , + this , SLOT(insertTabTitleText(const QString&)) ); + + TabTitleFormatAction* remoteTabTitleAction = new TabTitleFormatAction(this); + remoteTabTitleAction->setContext(Session::RemoteTabTitle); + _ui->remoteTabTitleEditButton->setMenu(remoteTabTitleAction->menu()); + connect( remoteTabTitleAction , SIGNAL(dynamicElementSelected(const QString&)) , + this , SLOT(insertRemoteTabTitleText(const QString&)) ); connect(_ui->showMenuBarButton , SIGNAL(toggled(bool)) , this , SLOT(showMenuBar(bool)) ); } +void EditProfileDialog::insertTabTitleText(const QString& text) +{ + _ui->tabTitleEdit->insert(text); +} +void EditProfileDialog::insertRemoteTabTitleText(const QString& text) +{ + _ui->remoteTabTitleEdit->insert(text); +} void EditProfileDialog::showMenuBar(bool show) { _tempProfile->setProperty(Profile::ShowMenuBar,show); @@ -192,28 +209,6 @@ void EditProfileDialog::showTabBarAsNeeded() { _tempProfile->setProperty(Profile::TabBarMode,Profile::ShowTabBarAsNeeded); } -void EditProfileDialog::editTabTitle() -{ - EditTabTitleFormatDialog dialog(this); - dialog.setContext(Session::LocalTabTitle); - dialog.setTabTitleFormat(_ui->tabTitleEdit->text()); - - if ( dialog.exec() == QDialog::Accepted ) - { - _ui->tabTitleEdit->setText(dialog.tabTitleFormat()); - } -} -void EditProfileDialog::editRemoteTabTitle() -{ - EditTabTitleFormatDialog dialog(this); - dialog.setContext(Session::RemoteTabTitle); - dialog.setTabTitleFormat(_ui->remoteTabTitleEdit->text()); - - if ( dialog.exec() == QDialog::Accepted ) - { - _ui->remoteTabTitleEdit->setText(dialog.tabTitleFormat()); - } -} void EditProfileDialog::tabTitleFormatChanged(const QString& format) { _tempProfile->setProperty(Profile::LocalTabTitleFormat,format); diff --git a/src/EditProfileDialog.h b/src/EditProfileDialog.h index f7022421f..139ac9ba8 100644 --- a/src/EditProfileDialog.h +++ b/src/EditProfileDialog.h @@ -99,8 +99,8 @@ private slots: void tabTitleFormatChanged(const QString& text); void remoteTabTitleFormatChanged(const QString& text); - void editTabTitle(); - void editRemoteTabTitle(); + void insertTabTitleText(const QString& text); + void insertRemoteTabTitleText(const QString& text); void showMenuBar(bool); void alwaysHideTabBar(); diff --git a/src/EditProfileDialog.ui b/src/EditProfileDialog.ui index 1d19b3232..583c2d747 100644 --- a/src/EditProfileDialog.ui +++ b/src/EditProfileDialog.ui @@ -188,7 +188,7 @@ Edit normal tab title format - Edit... + Insert @@ -215,7 +215,7 @@ Edit tab title format used when executing remote commands - Edit.. + Insert diff --git a/src/EditTabTitleFormatDialog.cpp b/src/EditTabTitleFormatDialog.cpp deleted file mode 100644 index 2ff4e2e82..000000000 --- a/src/EditTabTitleFormatDialog.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright (C) 2007 by Robert Knight - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA. -*/ - -// Own -#include "EditTabTitleFormatDialog.h" - -// KDE -#include - -// Konsole -#include "ui_EditTabTitleFormatDialog.h" - -using namespace Konsole; - -const EditTabTitleFormatDialog::Element EditTabTitleFormatDialog::_localElements[] = -{ - { "%n" , i18n("Program Name") }, - { "%p" , i18n("Profile Name") }, - { "%d" , i18n("Current Directory (Short)") }, - { "%D" , i18n("Current Directory (Long)") } -}; -const int EditTabTitleFormatDialog::_localElementCount = 4; -const EditTabTitleFormatDialog::Element EditTabTitleFormatDialog::_remoteElements[] = -{ - { "%p" , i18n("Profile Name") }, - { "%u" , i18n("User Name") }, - { "%h" , i18n("Remote Host (Short)") }, - { "%H" , i18n("Remote Host (Long)") } -}; -const int EditTabTitleFormatDialog::_remoteElementCount = 4; - -EditTabTitleFormatDialog::EditTabTitleFormatDialog(QWidget* parent) - : KDialog(parent) - , _context(Session::LocalTabTitle) -{ - setCaption(i18n("Edit Tab Title Format")); - - _ui = new Ui::EditTabTitleFormatDialog(); - _ui->setupUi(mainWidget()); - - _ui->tabTitleFormatEdit->setClearButtonShown(true); - - connect( _ui->elementComboBox , SIGNAL(activated(int)) , this , SLOT(insertElement(int)) ); -} -EditTabTitleFormatDialog::~EditTabTitleFormatDialog() -{ - delete _ui; -} -void EditTabTitleFormatDialog::insertElement(int index) -{ - if ( _context == Session::LocalTabTitle ) - _ui->tabTitleFormatEdit->insert( _localElements[index].element ); - else if ( _context == Session::RemoteTabTitle ) - _ui->tabTitleFormatEdit->insert( _remoteElements[index].element ); -} -void EditTabTitleFormatDialog::setTabTitleFormat(const QString& format) -{ - _ui->tabTitleFormatEdit->setText(format); - _ui->tabTitleFormatEdit->selectAll(); -} -QString EditTabTitleFormatDialog::tabTitleFormat() const -{ - return _ui->tabTitleFormatEdit->text(); -} -void EditTabTitleFormatDialog::setContext(Session::TabTitleContext context) -{ - _context = context; - - _ui->elementComboBox->clear(); - - QStringList list; - - if ( context == Session::LocalTabTitle ) - { - for ( int i = 0 ; i < _localElementCount ; i++ ) - list << _localElements[i].description; - } - else if ( context == Session::RemoteTabTitle ) - { - for ( int i = 0 ; i < _remoteElementCount ; i++ ) - list << _remoteElements[i].description; - } - - _ui->elementComboBox->addItems( list ); -} - -#include "EditTabTitleFormatDialog.moc" diff --git a/src/EditTabTitleFormatDialog.ui b/src/EditTabTitleFormatDialog.ui deleted file mode 100644 index 74d76ab25..000000000 --- a/src/EditTabTitleFormatDialog.ui +++ /dev/null @@ -1,75 +0,0 @@ - - EditTabTitleFormatDialog - - - - 0 - 0 - 400 - 138 - - - - Edit Tab Format - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Insert element: - - - - - - - - - - Tab title format: - - - - - - - - - - - 380 - 0 - - - - Tab titles can contain a mixture of plain text and dynamic elements which update automatically as the programs running in the terminal change. - - - true - - - - - - - - KLineEdit - QLineEdit -
klineedit.h
-
-
- - -
diff --git a/src/TabTitleFormatAction.cpp b/src/TabTitleFormatAction.cpp new file mode 100644 index 000000000..8f5642451 --- /dev/null +++ b/src/TabTitleFormatAction.cpp @@ -0,0 +1,101 @@ +/* + Copyright (C) 2007 by Robert Knight + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. +*/ + +// Own +#include "TabTitleFormatAction.h" + +// Qt +#include +#include + +// KDE +#include + +using namespace Konsole; + +const TabTitleFormatAction::Element TabTitleFormatAction::_localElements[] = +{ + { "%n" , i18n("Program Name") }, + { "%p" , i18n("Profile Name") }, + { "%d" , i18n("Current Directory (Short)") }, + { "%D" , i18n("Current Directory (Long)") } +}; +const int TabTitleFormatAction::_localElementCount = 4; +const TabTitleFormatAction::Element TabTitleFormatAction::_remoteElements[] = +{ + { "%p" , i18n("Profile Name") }, + { "%u" , i18n("User Name") }, + { "%h" , i18n("Remote Host (Short)") }, + { "%H" , i18n("Remote Host (Long)") } +}; +const int TabTitleFormatAction::_remoteElementCount = 4; + +TabTitleFormatAction::TabTitleFormatAction(QObject* parent) + : QAction(parent) + , _context(Session::LocalTabTitle) +{ + setMenu( new QMenu() ); + connect( menu() , SIGNAL(triggered(QAction*)) , this , SLOT(fireElementSelected(QAction*)) ); +} +TabTitleFormatAction::~TabTitleFormatAction() +{ + menu()->deleteLater(); +} +void TabTitleFormatAction::fireElementSelected(QAction* action) +{ + emit dynamicElementSelected(action->data().value()); +} +void TabTitleFormatAction::setContext(Session::TabTitleContext context) +{ + _context = context; + + menu()->clear(); + + QList list; + + int count = 0; + const Element* array = 0; + + if ( context == Session::LocalTabTitle ) + { + count = _localElementCount; + array = _localElements; + } + else if ( context == Session::RemoteTabTitle ) + { + count = _remoteElementCount; + array = _remoteElements; + } + + for ( int i = 0 ; i < count ; i++ ) + { + QAction* action = new QAction(array[i].description,this); + action->setData(array[i].element); + list << action; + } + + menu()->addActions(list); +} +Session::TabTitleContext TabTitleFormatAction::context() const +{ + return _context; +} + +#include "TabTitleFormatAction.moc" + diff --git a/src/EditTabTitleFormatDialog.h b/src/TabTitleFormatAction.h similarity index 71% rename from src/EditTabTitleFormatDialog.h rename to src/TabTitleFormatAction.h index d6099874c..3259b4173 100644 --- a/src/EditTabTitleFormatDialog.h +++ b/src/TabTitleFormatAction.h @@ -17,43 +17,38 @@ 02110-1301 USA. */ -#ifndef EDITTABTITLEFORMATDIALOG_H -#define EDITTABTITLEFORMATDIALOG_H +#ifndef TABTITLEFORMATACTION_H +#define TABTITLEFORMATACTION_H -// KDE -#include +// Qt +#include // Konsole #include "Session.h" -namespace Ui -{ - class EditTabTitleFormatDialog; -} - namespace Konsole { -class EditTabTitleFormatDialog : public KDialog +class TabTitleFormatAction : public QAction { Q_OBJECT - + public: - EditTabTitleFormatDialog(QWidget* parent = 0); - virtual ~EditTabTitleFormatDialog(); + TabTitleFormatAction(QObject* parent); + ~TabTitleFormatAction(); void setContext(Session::TabTitleContext context); + Session::TabTitleContext context() const; - void setTabTitleFormat(const QString& format); - QString tabTitleFormat() const; - +signals: + void dynamicElementSelected(const QString&); + private slots: - void insertElement(int index); + void fireElementSelected(QAction*); private: - Ui::EditTabTitleFormatDialog* _ui; Session::TabTitleContext _context; - + struct Element { QString element; @@ -63,8 +58,9 @@ private: static const int _localElementCount; static const Element _remoteElements[]; static const int _remoteElementCount; + }; } -#endif // EDITTABTITLEFORMATDIALOG_H +#endif // TABTITLEFORMATACTION_H