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
-
-
-
-
-
-
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