00001 #include "ircmisc.h"
00002
00003
00004 #include <opie2/odebug.h>
00005 #include <opie2/oconfig.h>
00006 #include <opie2/okeyconfigmanager.h>
00007 using namespace Opie::Core;
00008
00009
00010 IRCTabBar::IRCTabBar(QWidget *parent, const char *name) : QTabBar(parent, name) {
00011 }
00012
00013 int IRCTabBar::insertTab(QTab *tab, int index) {
00014
00015 QExtTab *ext = new QExtTab();
00016 ext->color = black;
00017 ext->label = tab->text();
00018 ext->r = tab->rect();
00019 ext->enabled = tab->isEnabled();
00020 ext->iconset = tab->iconSet();
00021 delete tab;
00022 return QTabBar::insertTab(ext, index);
00023 }
00024
00025 void IRCTabBar::setTabColor(int index, QColor color) {
00026 ((QExtTab *)tab(index))->color = color;
00027 update();
00028 }
00029
00030 void IRCTabBar::paintLabel(QPainter* p, const QRect& br, QTab* t, bool focus) const {
00031 QRect r = br;
00032 QTabBar::paintLabel(p, br, t, focus);
00033 if (t->id == currentTab())
00034 r.setBottom(r.bottom() - style().defaultFrameWidth());
00035 p->setPen(((QExtTab *)t)->color);
00036 p->drawText(r, AlignCenter | ShowPrefix, t->label);
00037 }
00038
00039 IRCTabWidget::IRCTabWidget(QWidget *parent, const char *name) : QTabWidget(parent, name) {
00040 setTabBar(new IRCTabBar(this, "tab control"));
00041 }
00042
00043 void IRCTabWidget::setTabColor(int index, QColor color) {
00044 ((IRCTabBar *)tabBar())->setTabColor(index, color);
00045 }
00046
00047
00048
00049 static OKeyConfigManager* s_manager = 0;
00050 OKeyConfigManager* IRCHistoryLineEdit::keyConfigInstance() {
00051 if ( !s_manager ) {
00052
00053
00054
00055
00056
00057 OKeyPair::List blackList = OKeyPair::hardwareKeys();
00058 blackList.append( OKeyPair::returnKey() );
00059 blackList.append( OKeyPair::leftArrowKey() );
00060 blackList.append( OKeyPair::upArrowKey() );
00061 blackList.append( OKeyPair::downArrowKey() );
00062
00063 s_manager = new OKeyConfigManager(new OConfig("opieirc-keys"),
00064 "keys", blackList,
00065 false, 0, "irc_history_line_keyconfigm" );
00066 s_manager->addKeyConfig( OKeyConfigItem( tr("Next Tab"), "next_tab", QPixmap(),
00067 KeyNextTab, OKeyPair(Qt::Key_N, Qt::ControlButton) ));
00068 s_manager->addKeyConfig( OKeyConfigItem( tr("Previous Tab"), "prev_tab", QPixmap(),
00069 KeyPrevTab, OKeyPair(Qt::Key_P, Qt::ControlButton) ));
00070 s_manager->addKeyConfig( OKeyConfigItem( tr("Close Tab"), "close_tab",
00071 QPixmap(), KeyCloseTab,
00072 OKeyPair(Qt::Key_C, Qt::ControlButton) ));
00073 s_manager->load();
00074 }
00075
00076 return s_manager;
00077 }
00078
00079
00080 IRCHistoryLineEdit::IRCHistoryLineEdit(QWidget *parent, const char *name) : QLineEdit(parent, name) {
00081 m_index = -1;
00082 installEventFilter(this);
00083 }
00084
00085 void IRCHistoryLineEdit::keyPressEvent(QKeyEvent *event) {
00086 int key = event->key();
00087 if (key == Key_Up) {
00088 if (m_history.count() > 0 && m_index < (signed int)m_history.count()-1) {
00089 m_index++;
00090 setText(m_history[m_index]);
00091 }
00092 } else if (key == Key_Down) {
00093 if (m_history.count() > 0 && m_index > 0) {
00094 m_index--;
00095 setText(m_history[m_index]);
00096 }
00097 if (m_index == 0) {
00098 m_index = -1;
00099 setText("");
00100 }
00101 } else if (key == Key_Return) {
00102 m_history.prepend(text());
00103 m_index = -1;
00104 }
00105
00106 switch( keyConfigInstance()->handleKeyEventId( event ) ) {
00107 case KeyNextTab:
00108 emit nextTab();
00109 return;
00110 case KeyPrevTab:
00111 emit prevTab();
00112 return;
00113 case KeyCloseTab:
00114 emit closeTab();
00115 default:
00116 break;
00117 }
00118
00119 QLineEdit::keyPressEvent(event);
00120 }
00121
00122 bool IRCHistoryLineEdit::eventFilter(QObject *object, QEvent *event) {
00123 if (event->type() == QEvent::KeyPress) {
00124 QKeyEvent *k = (QKeyEvent *) event;
00125
00126 if (k->key() == Key_Tab) {
00127 emit nextTab();
00128 return TRUE;
00129 }
00130 }
00131 return QLineEdit::eventFilter(object, event);
00132 }
00133
00134
00135 void IRCHistoryLineEdit::setEditFocus() {
00136 setActiveWindow();
00137 setFocus();
00138 }