-rw-r--r-- | noncore/net/opieirc/ircmisc.cpp | 44 | ||||
-rw-r--r-- | noncore/net/opieirc/ircmisc.h | 14 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsettings.cpp | 20 | ||||
-rw-r--r-- | noncore/net/opieirc/ircsettings.h | 4 | ||||
-rw-r--r-- | noncore/net/opieirc/irctab.cpp | 9 | ||||
-rw-r--r-- | noncore/net/opieirc/mainwindow.cpp | 1 |
6 files changed, 84 insertions, 8 deletions
diff --git a/noncore/net/opieirc/ircmisc.cpp b/noncore/net/opieirc/ircmisc.cpp index df6f874..9b9bff8 100644 --- a/noncore/net/opieirc/ircmisc.cpp +++ b/noncore/net/opieirc/ircmisc.cpp @@ -1,14 +1,17 @@ #include "ircmisc.h" /* OPIE */ #include <opie2/odebug.h> +#include <opie2/oconfig.h> +#include <opie2/okeyconfigmanager.h> using namespace Opie::Core; + IRCTabBar::IRCTabBar(QWidget *parent, const char *name) : QTabBar(parent, name) { } int IRCTabBar::insertTab(QTab *tab, int index) { /* FIXME: find some nicer way to do this */ QExtTab *ext = new QExtTab(); ext->color = black; ext->label = tab->text(); @@ -37,16 +40,45 @@ IRCTabWidget::IRCTabWidget(QWidget *parent, const char *name) : QTabWidget(paren setTabBar(new IRCTabBar(this, "tab control")); } void IRCTabWidget::setTabColor(int index, QColor color) { ((IRCTabBar *)tabBar())->setTabColor(index, color); } + +static OKeyConfigManager* s_manager = 0; +OKeyConfigManager* IRCHistoryLineEdit::keyConfigInstance() { + if ( !s_manager ) { + /* + * black list with the DeviceButtons as default + * because we do not grab the keyboard and they + * wouldn't work + */ + OKeyPair::List blackList = OKeyPair::hardwareKeys(); + blackList.append( OKeyPair::returnKey() ); + blackList.append( OKeyPair::leftArrowKey() ); + blackList.append( OKeyPair::upArrowKey() ); + blackList.append( OKeyPair::downArrowKey() ); + + s_manager = new OKeyConfigManager(new OConfig("opieirc-keys"), + "keys", blackList, + false, 0, "irc_history_line_keyconfigm" ); + s_manager->addKeyConfig( OKeyConfigItem( tr("Next Tab"), "next_tab", QPixmap(), + KeyNextTab, OKeyPair(Qt::Key_N, Qt::ControlButton) )); + s_manager->addKeyConfig( OKeyConfigItem( tr("Previous Tab"), "prev_tab", QPixmap(), + KeyPrevTab, OKeyPair(Qt::Key_P, Qt::ControlButton) )); + s_manager->load(); + } + + return s_manager; +} + + IRCHistoryLineEdit::IRCHistoryLineEdit(QWidget *parent, const char *name) : QLineEdit(parent, name) { m_index = -1; installEventFilter(this); } void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) { int key = event->key(); if (key == Key_Up) { @@ -61,25 +93,27 @@ void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) { } if (m_index == 0) { m_index = -1; setText(""); } } else if (key == Key_Return) { m_history.prepend(text()); m_index = -1; - } else if (key == Key_N && event->state() == Qt::ControlButton) { + } + + switch( keyConfigInstance()->handleKeyEventId( event ) ) { + case KeyNextTab: emit nextTab(); return; - } else if ( ( key == Key_Y || key == Key_Z ) && event->state() == Qt::ControlButton) { - emit closeTab(); - return; - } else if (key == Key_P && event->state() == Qt::ControlButton) { + case KeyPrevTab: emit prevTab(); return; + default: + break; } QLineEdit::keyPressEvent(event); } bool IRCHistoryLineEdit::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *k = (QKeyEvent *) event; diff --git a/noncore/net/opieirc/ircmisc.h b/noncore/net/opieirc/ircmisc.h index c42dcbd..37eed28 100644 --- a/noncore/net/opieirc/ircmisc.h +++ b/noncore/net/opieirc/ircmisc.h @@ -23,16 +23,23 @@ #include <qtabwidget.h> #include <qlineedit.h> #include <qtabbar.h> #include <qlabel.h> #include <qcolor.h> #include <qarray.h> +namespace Opie { +namespace Core { +class OKeyConfigManager; +} +} + + /* Custom colored QTabWidget */ class QExtTab : public QTab { public: QColor color; }; class IRCTabWidget : public QTabWidget { @@ -54,16 +61,23 @@ protected: QArray<QColor> m_colors; }; /* A QLineEdit with history functionality and tab completion */ class IRCHistoryLineEdit : public QLineEdit { Q_OBJECT public: + enum KeyMode { + KeyNextTab, + KeyPrevTab + }; + + static Opie::Core::OKeyConfigManager* keyConfigInstance(); + IRCHistoryLineEdit(QWidget *parent = 0, const char *name = 0); virtual bool eventFilter(QObject *object, QEvent *event); public slots: void setEditFocus(); signals: void nextTab(); void prevTab(); void closeTab(); diff --git a/noncore/net/opieirc/ircsettings.cpp b/noncore/net/opieirc/ircsettings.cpp index 13fcc24..1fba030 100644 --- a/noncore/net/opieirc/ircsettings.cpp +++ b/noncore/net/opieirc/ircsettings.cpp @@ -1,15 +1,17 @@ #include "ircsettings.h" #include "irctab.h" +#include "ircmisc.h" /* OPIE */ #include <opie2/ocolorbutton.h> #include <opie2/otabwidget.h> +#include <opie2/okeyconfigwidget.h> #include <qpe/qpeapplication.h> /* QT */ #include <qvalidator.h> #include <qwhatsthis.h> using namespace Opie; using namespace Opie::Ui; @@ -73,38 +75,54 @@ IRCSettings::IRCSettings(QWidget* parent, const char* name, bool modal, WFlags) QWhatsThis::add(m_server, tr("Text color to be used to identify text written by the server")); layout->addWidget(m_server, 5, 1); label = new QLabel(tr("Notifications :"), widget); layout->addWidget(label, 6, 0); m_notification = new OColorButton(widget, m_config->readEntry("NotificationColor", "#AAE300")); QWhatsThis::add(m_notification, tr("Text color to be used to display notifications")); layout->addWidget(m_notification, 6, 1); tw->addTab(view, "opieirc/colors", tr("Colors")); - tw->setCurrentTab( genwidget ); + + /* + * IRC EditLine KeyConfiguration + */ + m_keyConf = new Opie::Ui::OKeyConfigWidget(tw, "KEyConfig GUI" ); + m_keyConf->setChangeMode( OKeyConfigWidget::Queue ); + m_keyConf->insert( tr("Keyboard Shortcuts"), + IRCHistoryLineEdit::keyConfigInstance() ); + m_keyConf->load(); + tw->addTab(m_keyConf, "SettingsIcon", tr("Keyboard Shortcuts") ); + + tw->setCurrentTab( genwidget ); QPEApplication::showDialog( this ); } void IRCSettings::accept() { IRCTab::m_backgroundColor = m_background->color().name(); IRCTab::m_textColor = m_text->color().name(); IRCTab::m_errorColor = m_error->color().name(); IRCTab::m_selfColor = m_self->color().name(); IRCTab::m_otherColor = m_other->color().name(); IRCTab::m_serverColor = m_server->color().name(); IRCTab::m_notificationColor = m_notification->color().name(); IRCTab::m_maxLines = m_lines->text().toInt(); + m_keyConf->save(); + + m_config->writeEntry("BackgroundColor", IRCTab::m_backgroundColor); m_config->writeEntry("TextColor", IRCTab::m_textColor); m_config->writeEntry("ErrorColor", IRCTab::m_errorColor); m_config->writeEntry("SelfColor", IRCTab::m_selfColor); m_config->writeEntry("OtherColor", IRCTab::m_otherColor); m_config->writeEntry("ServerColor", IRCTab::m_serverColor); m_config->writeEntry("NotificationColor", IRCTab::m_notificationColor); m_config->writeEntry("Lines", m_lines->text()); + IRCHistoryLineEdit::keyConfigInstance()->save(); + QDialog::accept(); } IRCSettings::~IRCSettings() { delete m_config; } diff --git a/noncore/net/opieirc/ircsettings.h b/noncore/net/opieirc/ircsettings.h index 56e667b..a032aff 100644 --- a/noncore/net/opieirc/ircsettings.h +++ b/noncore/net/opieirc/ircsettings.h @@ -22,16 +22,19 @@ #define __IRCSETTINGS_H #include <qpe/config.h> #include <qdialog.h> #include <qlineedit.h> namespace Opie { class OColorButton; +namespace Ui { +class OKeyConfigWidget; +} } class IRCSettings : public QDialog { Q_OBJECT public: IRCSettings(QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags f = 0); ~IRCSettings(); protected slots: @@ -40,12 +43,13 @@ protected: Config *m_config; Opie::OColorButton *m_background; Opie::OColorButton *m_text; Opie::OColorButton *m_error; Opie::OColorButton *m_self; Opie::OColorButton *m_server; Opie::OColorButton *m_other; Opie::OColorButton *m_notification; + Opie::Ui::OKeyConfigWidget *m_keyConf; QLineEdit *m_lines; }; #endif /* __IRCSETTINGS_H */ diff --git a/noncore/net/opieirc/irctab.cpp b/noncore/net/opieirc/irctab.cpp index 8e1dc16..2b3ecd4 100644 --- a/noncore/net/opieirc/irctab.cpp +++ b/noncore/net/opieirc/irctab.cpp @@ -1,13 +1,18 @@ +#include "irctab.h" +#include "mainwindow.h" + +#include <opie2/okeyconfigmanager.h> #include <qpe/resource.h> + + #include <qpushbutton.h> #include <qwhatsthis.h> -#include "irctab.h" -#include "mainwindow.h" + QString IRCTab::m_errorColor; QString IRCTab::m_serverColor; QString IRCTab::m_textColor; QString IRCTab::m_backgroundColor; QString IRCTab::m_selfColor; QString IRCTab::m_otherColor; QString IRCTab::m_notificationColor; diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 1143213..2e674c5 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp @@ -71,16 +71,17 @@ void MainWindow::addTab(IRCTab *tab) { void MainWindow::changeEvent(IRCTab *tab) { if (tab->id() != m_tabWidget->currentPageIndex()) m_tabWidget->setTabColor(tab->id(), blue); } void MainWindow::killTab(IRCTab *tab) { m_tabWidget->removePage(tab); m_tabs.remove(tab); + /* there might be nicer ways to do this .. */ delete tab; } void MainWindow::newConnection() { IRCServerList list(this, "ServerList", TRUE); if (list.exec() == QDialog::Accepted && list.hasServer()) { IRCServerTab *serverTab = new IRCServerTab(list.server(), this, m_tabWidget); |