/*************************************************************************** console.cpp - description ------------------- begin : Sun May 27 2001 copyright : (C) 2003 by Troy Corbin Jr. email : tcorbin@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ #include "console.moc" #include "knightstextview.h" #include "accel.h" #include "tabmanager.h" /* KDE */ #include #include #include #include Console::Console(TQWidget *parent, const char *name, resource *Rsrc ) : TQVBox(parent,name) { myResource = Rsrc; SelfMoving = FALSE; TQStyle& Style = TQApplication::style(); margin = Style.defaultFrameWidth(); myTextView = new KnightsTextView( this, myResource ); myLineEdit = new KLineEdit( this, "console_edit" ); /* Configure misc */ setBG(); myTextView->setStaticBackground( FALSE ); connect( myLineEdit, TQT_SIGNAL( returnPressed( const TQString& ) ), this, TQT_SLOT( getText( const TQString& ) ) ); connect( myResource->myAccel, TQT_SIGNAL( history_prev() ), this, TQT_SLOT( historyBackward() ) ); connect( myResource->myAccel, TQT_SIGNAL( history_next() ), this, TQT_SLOT( historyForward() ) ); connect( myResource->myAccel, TQT_SIGNAL( page_up() ), this, TQT_SLOT( pageUp() ) ); connect( myResource->myAccel, TQT_SIGNAL( page_down() ), this, TQT_SLOT( pageDown() ) ); connect( myResource->myAccel, TQT_SIGNAL( kibitz() ), this, TQT_SLOT( kibitz() ) ); connect( myResource->myAccel, TQT_SIGNAL( whisper() ), this, TQT_SLOT( whisper() ) ); connect( myResource->myAccel, TQT_SIGNAL( reply_tell() ), this, TQT_SLOT( replyPrivate() ) ); connect( myResource->myAccel, TQT_SIGNAL( reply_channel() ), this, TQT_SLOT( replyChannel() ) ); connect( myResource->myAccel, TQT_SIGNAL( focus() ), this, TQT_SLOT( getFocus() ) ); connect( myResource->myAccel, TQT_SIGNAL( focus( const TQChar& ) ), this, TQT_SLOT( getFocus( const TQChar& ) ) ); myTextView->show(); myLineEdit->show(); show(); } Console::~Console() { delete myLineEdit; delete myTextView; } /////////////////////////////////////// // // Console::pageDown // /////////////////////////////////////// void Console::pageDown( void ) { myTextView->pageMove( TQt::Key_PageDown ); } /////////////////////////////////////// // // Console::pageUp // /////////////////////////////////////// void Console::pageUp( void ) { myTextView->pageMove(); } /////////////////////////////////////// // // Console::recvCMD // /////////////////////////////////////// void Console::recvCMD( const Command& command ) { TQString modText; /* this will hold the text to append after it has been modified with anchors */ switch(((Command)command).getCommand()) { case CMD_Append_To_Console: if( myTextView->contentsY() >= ( myTextView->contentsHeight() - myTextView->visibleHeight() - 12 ) ) { modText = insertTags(((Command)command).getData()); myTextView->append(modText); myTextView->scrollToBottom(); } else { modText = insertTags(((Command)command).getData()); myTextView->append(modText); } break; case CMD_Set_Input: myLineEdit->setText( ((Command)command).getData() ); if( !myLineEdit->hasFocus() ) getFocus(); break; case CMD_Set_Src_Tell: lastPrivateSource = ((Command)command).getData(); break; case CMD_Set_Src_Channel: lastChannelSource = ((Command)command).getData(); break; default: break; } } /////////////////////////////////////// // // Console::getText // /////////////////////////////////////// void Console::getText( const TQString &text ) { /* Append this text into our history */ history.append( text ); if( history.count() > 100 ) history.remove( history.begin() ); historyIT = history.end(); emit sendCMD( Command( 0, CMD_Send_To_ICS, text ) ); myLineEdit->clear(); } /////////////////////////////////////// // // Console::historyBack // /////////////////////////////////////// void Console::historyBackward( void ) { if( history.count() && ( historyIT != history.begin() ) ) { historyIT--; myLineEdit->setText( (*historyIT) ); } if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::historyForward // /////////////////////////////////////// void Console::historyForward( void ) { if( history.count() && ( historyIT != history.end() ) ) { historyIT++; myLineEdit->setText( (*historyIT) ); } if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::replyPrivate // /////////////////////////////////////// void Console::replyPrivate( void ) { myLineEdit->setText( TQString( "tell %1 " ).arg( lastPrivateSource ) ); if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::replyChannel // /////////////////////////////////////// void Console::replyChannel( void ) { myLineEdit->setText( TQString( "tell %1 " ).arg( lastChannelSource ) ); if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::kibitz // /////////////////////////////////////// void Console::kibitz( void ) { myLineEdit->setText( TQString( "kibitz " ) ); if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::whisper // /////////////////////////////////////// void Console::whisper( void ) { myLineEdit->setText( TQString( "whisper " ) ); if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::getFocus // /////////////////////////////////////// void Console::getFocus( void ) { if( myLineEdit->hasFocus() ) { getText( myLineEdit->text() ); } setActiveWindow(); myResource->tabManager->showTab( this ); myLineEdit->setFocus(); } void Console::getFocus( const TQChar &c ) { myLineEdit->setText( myLineEdit->text() + TQString( c ) ); if( !myLineEdit->hasFocus() ) getFocus(); } /////////////////////////////////////// // // Console::setBG // /////////////////////////////////////// void Console::setBG( void ) { myTextView->setPaper( TQBrush( myResource->COLOR_Background ) ); } /////////////////////////////////////// // // Console::insertTags(TQString data) // /////////////////////////////////////// TQString Console::insertTags(TQString data) { TQRegExp hyperLinks("(http://(?:.)+(?:\\.(?:[^\\s\\r\\t<])+)+)"); TQRegExp mailLinks("\\b((?:\\w|\\d)+\\@(?:\\w|\\d)+(?:\\.(?:\\d|\\w)+)+)\\b"); int pos = 0; pos = hyperLinks.search(data, 0); if(pos >= 0) { data.replace(hyperLinks, "" + hyperLinks.cap(0) + ""); } pos = mailLinks.search(data, 0); if(pos >= 0) { data.replace(mailLinks, "" + mailLinks.cap(0) + ""); } return data; }