Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ircmisc.cpp

Go to the documentation of this file.
00001 #include "ircmisc.h"
00002 
00003 /* OPIE */
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     /* FIXME: find some nicer way to do this */
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          * black list with the DeviceButtons as default
00054          * because we do not grab the keyboard and they
00055          * wouldn't work
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         /* Catch tab characters */
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 }

Generated on Sat Nov 5 16:17:41 2005 for OPIE by  doxygen 1.4.2