You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
7.4 KiB
C++
265 lines
7.4 KiB
C++
/***************************************************************************
|
|
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 <klineedit.h>
|
|
#include <kiconloader.h>
|
|
#include <tqregexp.h>
|
|
#include <tqstyle.h>
|
|
|
|
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, "<A HREF=\"" + hyperLinks.cap(0) + "\">" + hyperLinks.cap(0) + "</A>");
|
|
}
|
|
pos = mailLinks.search(data, 0);
|
|
if(pos >= 0)
|
|
{
|
|
data.replace(mailLinks, "<A HREF=\"mailto:" + mailLinks.cap(0) + "\">" + mailLinks.cap(0) + "</A>");
|
|
}
|
|
return data;
|
|
}
|