summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/MyPty.cpp5
-rw-r--r--noncore/apps/opie-console/TEWidget.cpp4
-rw-r--r--noncore/apps/opie-console/TEmulation.cpp5
-rw-r--r--noncore/apps/opie-console/atconfigdialog.cpp6
-rw-r--r--noncore/apps/opie-console/btconfigwidget.cpp22
-rw-r--r--noncore/apps/opie-console/comboboxhelper.cpp55
-rw-r--r--noncore/apps/opie-console/comboboxhelper.h49
-rw-r--r--noncore/apps/opie-console/dialer.cpp14
-rw-r--r--noncore/apps/opie-console/emulation_handler.cpp9
-rw-r--r--noncore/apps/opie-console/emulation_widget.cpp6
-rw-r--r--noncore/apps/opie-console/function_keyboard.cpp18
-rw-r--r--noncore/apps/opie-console/io_bt.cpp21
-rw-r--r--noncore/apps/opie-console/io_bt.h3
-rw-r--r--noncore/apps/opie-console/io_irda.cpp20
-rw-r--r--noncore/apps/opie-console/io_irda.h3
-rw-r--r--noncore/apps/opie-console/io_modem.cpp22
-rw-r--r--noncore/apps/opie-console/io_modem.h7
-rw-r--r--noncore/apps/opie-console/mainwindow.cpp7
-rw-r--r--noncore/apps/opie-console/modemconfigwidget.cpp19
-rw-r--r--noncore/apps/opie-console/opie-console.pro8
-rw-r--r--noncore/apps/opie-console/profileeditordialog.cpp22
-rw-r--r--noncore/apps/opie-console/serialconfigwidget.cpp23
-rw-r--r--noncore/apps/opie-console/settings.ui23
-rw-r--r--noncore/apps/opie-console/sz_transfer.cpp23
-rw-r--r--noncore/apps/opie-console/tabwidget.cpp4
-rw-r--r--noncore/apps/opie-console/terminalwidget.cpp6
-rw-r--r--noncore/apps/opie-console/vt102emulation.cpp1024
-rw-r--r--noncore/apps/opie-console/vt102emulation.h153
-rw-r--r--noncore/apps/opie-console/widget.cpp1278
-rw-r--r--noncore/apps/opie-console/widget.h213
-rw-r--r--noncore/apps/opie-console/widget_layer.cpp242
-rw-r--r--noncore/apps/opie-console/widget_layer.h265
32 files changed, 144 insertions, 3435 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp
index 315ea4a..27ba9ff 100644
--- a/noncore/apps/opie-console/MyPty.cpp
+++ b/noncore/apps/opie-console/MyPty.cpp
@@ -57,28 +57,24 @@
those device pairs, which is 256.
Another technic are UNIX 98 PTY's. These are supported also, and prefered
over the (obsolete) predecessor.
There's a sinister ioctl(2), signal(2) and job control stuff
nessesary to make everything work as it should.
*/
#include "procctl.h"
#include "MyPty.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
/* QT */
#include <qsocketnotifier.h>
#include <qfile.h>
/* STD */
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
@@ -93,25 +89,24 @@ using namespace Opie::Core;
#undef VERBOSE_DEBUG
/* -------------------------------------------------------------------------- */
/*!
Informs the client program about the
actual size of the window.
*/
void MyPty::setSize(int lines, int columns)
{
- owarn << "setting size" << oendl;
struct winsize wsize;
wsize.ws_row = (unsigned short)lines;
wsize.ws_col = (unsigned short)columns;
if(m_fd < 0) return;
ioctl(m_fd,TIOCSWINSZ,(char *)&wsize);
}
void MyPty::donePty()
{
// This is code from the Qt DumbTerminal example
diff --git a/noncore/apps/opie-console/TEWidget.cpp b/noncore/apps/opie-console/TEWidget.cpp
index d168a5e..98c1793 100644
--- a/noncore/apps/opie-console/TEWidget.cpp
+++ b/noncore/apps/opie-console/TEWidget.cpp
@@ -1020,25 +1020,24 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
static_cast<QKeyEvent *>( e )->ignore();
return true;
}
if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
return FALSE; // not us
if ( e->type() == QEvent::Wheel) {
QApplication::sendEvent(scrollbar, e);
}
#ifdef FAKE_CTRL_AND_ALT
static bool control = FALSE;
static bool alt = FALSE;
-// odebug << " Has a keyboard with no CTRL and ALT keys, but we fake it:" << oendl;
bool dele=FALSE;
if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
QKeyEvent* ke = (QKeyEvent*)e;
bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
switch (ke->key()) {
case Key_F9: // let this be "Control"
control = keydown;
e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
dele=TRUE;
break;
case Key_F13: // let this be "Alt"
alt = keydown;
@@ -1059,29 +1058,26 @@ bool TEWidget::eventFilter( QObject *obj, QEvent *e )
ke->ascii(), ke->state()|AltButton, ke->text());
dele=TRUE;
}
}
}
#endif
if ( e->type() == QEvent::KeyPress ) {
QKeyEvent* ke = (QKeyEvent*)e;
actSel=0; // Key stroke implies a screen update, so TEWidget won't
// know where the current selection is.
-// odebug << "key pressed is 0x" << ke->key() << "" << oendl;
if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker
-
-// odebug << "key pressed 2 is 0x" << ke->key() << "" << oendl;
emitText("\\"); // expose
} else
emit keyPressedSignal(ke); // expose
ke->accept();
#ifdef FAKE_CTRL_AND_ALT
if ( dele ) delete e;
#endif
return true; // stop the event
}
if ( e->type() == QEvent::Enter ) {
QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()),
this, SLOT(onClearSelection()) );
diff --git a/noncore/apps/opie-console/TEmulation.cpp b/noncore/apps/opie-console/TEmulation.cpp
index 6ff73af..72cce75 100644
--- a/noncore/apps/opie-console/TEmulation.cpp
+++ b/noncore/apps/opie-console/TEmulation.cpp
@@ -62,28 +62,24 @@
As a sort of catch-all needed for cases where none of the above
conditions catch, the screen refresh is also triggered by a count
of incoming bulks (`bulk_incnt').
*/
/* FIXME
- evtl. the bulk operations could be made more transparent.
*/
#include "TEmulation.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
/* STD */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* ------------------------------------------------------------------------- */
/* */
/* TEmulation */
/* */
/* ------------------------------------------------------------------------- */
@@ -201,25 +197,24 @@ void TEmulation::onRcvChar(int c)
/* ------------------------------------------------------------------------- */
/* */
/* Keyboard Handling */
/* */
/* ------------------------------------------------------------------------- */
/*!
*/
void TEmulation::onKeyPress( QKeyEvent* ev )
{
- owarn << "onKeyPress,...." << oendl;
if (!connected) return; // someone else gets the keys
if (scr->getHistCursor() != scr->getHistLines());
scr->setHistCursor(scr->getHistLines());
if (!ev->text().isEmpty())
{ // A block of text
// Note that the text is proper unicode.
// We should do a conversion here, but since this
// routine will never be used, we simply emit plain ascii.
emit sndBlock(ev->text().ascii(),ev->text().length());
}
else if (ev->ascii()>0)
{ unsigned char c[1];
diff --git a/noncore/apps/opie-console/atconfigdialog.cpp b/noncore/apps/opie-console/atconfigdialog.cpp
index c998f96..f958b52 100644
--- a/noncore/apps/opie-console/atconfigdialog.cpp
+++ b/noncore/apps/opie-console/atconfigdialog.cpp
@@ -1,19 +1,15 @@
#include "atconfigdialog.h"
#include "io_modem.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
/* QT */
#include <qlineedit.h>
#include <qspinbox.h>
#include <qlayout.h>
#include <qcombobox.h>
#include <qtabwidget.h>
#include <qlabel.h>
#include <qscrollview.h>
ATConfigDialog::ATConfigDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl ) {
@@ -146,26 +142,24 @@ QWidget* ATConfigDialog::tab1( QWidget* parent ) {
multiLineUntagBox = new QComboBox( returnWidget );
layout->addWidget( multiLineUntagLabel, 6, 0 );
layout->addWidget( multiLineUntagBox, 6, 1 );
multiLineUntagBox->insertItem( tr("No") );
multiLineUntagBox->insertItem( tr("Yes") );
return returnWidget;
}
void ATConfigDialog::readConfig( const Profile& config ) {
- owarn << "config in atconfigdialog" << oendl;
-
initStringLine->setText( config.readEntry("InitString", MODEM_DEFAULT_INIT_STRING ) );
resetStringLine->setText( config.readEntry("ResetString", MODEM_DEFAULT_RESET_STRING ) );
dialPref1Line->setText( config.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 ) );
dialSuf1Line->setText( config.readEntry("DialSuffix1", MODEM_DEFAULT_DIAL_SUFFIX1 ) );
dialPref2Line->setText( config.readEntry("DialPrefix2", MODEM_DEFAULT_DIAL_PREFIX1 ) );
dialSuf2Line->setText( config.readEntry("DialSuffix2", MODEM_DEFAULT_DIAL_SUFFIX1 ) );
dialPref3Line->setText( config.readEntry("DialPrefix3", MODEM_DEFAULT_DIAL_PREFIX1 ) );
dialSuf3Line->setText( config.readEntry("DialSuffix3", MODEM_DEFAULT_DIAL_SUFFIX1 ) );
connectLine->setText( config.readEntry("DefaultConnect", MODEM_DEFAULT_CONNECT_STRING ) );
hangupLine->setText( config.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING ) );
dialTimeSpin->setValue( config.readNumEntry("DialTime", MODEM_DEFAULT_DIAL_TIME ) );
delayRedialSpin->setValue( config.readNumEntry("DelayRedial", MODEM_DEFAULT_DELAY_REDIAL ) );
diff --git a/noncore/apps/opie-console/btconfigwidget.cpp b/noncore/apps/opie-console/btconfigwidget.cpp
index 232e497..f2ed558 100644
--- a/noncore/apps/opie-console/btconfigwidget.cpp
+++ b/noncore/apps/opie-console/btconfigwidget.cpp
@@ -1,35 +1,25 @@
+#include "btconfigwidget.h"
+#include "iolayerbase.h"
+#include "comboboxhelper.h"
+
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qcombobox.h>
#include <qhbox.h>
#include <qradiobutton.h>
-#include "iolayerbase.h"
-#include "btconfigwidget.h"
-namespace {
- void setCurrent( const QString& str, QComboBox* bo ) {
- uint b = bo->count();
- for (int i = 0; i < bo->count(); i++ ) {
- if ( bo->text(i) == str ) {
- bo->setCurrentItem( i );
- return;
- }
- }
- bo->insertItem( str );
- bo->setCurrentItem( b );
- }
-}
+
BTConfigWidget::BTConfigWidget( const QString& name,
QWidget* parent,
const char* na )
: ProfileDialogConnectionWidget( name, parent, na ) {
m_lay = new QVBoxLayout( this );
m_device = new QLabel( tr( "Device" ), this );
QHBox *deviceBox = new QHBox( this );
m_devRadio = new QRadioButton( deviceBox );
connect( m_devRadio, SIGNAL( toggled(bool) ), this, SLOT( slotDevRadio(bool) ) );
@@ -106,25 +96,25 @@ void BTConfigWidget::load( const Profile& prof ) {
m_base->setSpeed( IOLayerBase::Baud_2400 );
break;
case 1200:
m_base->setSpeed( IOLayerBase::Baud_1200 );
break;
case 9600:
default:
m_base->setSpeed(IOLayerBase::Baud_9600 );
break;
}
if ( prof.readEntry("Device").isEmpty() ) return;
- setCurrent( prof.readEntry("Device"), m_deviceCmb );
+ ComboboxHelper::setCurrent( prof.readEntry("Device"), m_deviceCmb );
}
/*
* save speed,
* flow,
* parity
*/
void BTConfigWidget::save( Profile& prof ) {
int flow, parity, speed;
flow = parity = speed = 0;
prof.writeEntry("Device", m_deviceCmb->currentText() );
diff --git a/noncore/apps/opie-console/comboboxhelper.cpp b/noncore/apps/opie-console/comboboxhelper.cpp
new file mode 100644
index 0000000..1bfe0a7
--- a/dev/null
+++ b/noncore/apps/opie-console/comboboxhelper.cpp
@@ -0,0 +1,55 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002,2004 Holger Hans Peter Freyther <freyther@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING.BIN.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+
+#include "comboboxhelper.h"
+
+#include <qstring.h>
+#include <qcombobox.h>
+
+/**
+ * \brief Set string to be Current String inside the QCombox without duplicating it
+ *
+ * This method will make \par str the current QString. If
+ * the QString is already inside the QComboBox it will be
+ * set current. If it isn't it will be added.
+ *
+ * @param str The QString to be set current
+ * @param bo The QComboBox to operate on
+ */
+void ComboboxHelper::setCurrent( const QString& str, QComboBox* bo ) {
+ const uint b = bo->count();
+ for (uint i = 0; i < b; i++ ) {
+ if ( bo->text(i) == str ) {
+ bo->setCurrentItem( i );
+ return;
+ }
+ }
+
+ bo->insertItem( str );
+ bo->setCurrentItem( b );
+}
diff --git a/noncore/apps/opie-console/comboboxhelper.h b/noncore/apps/opie-console/comboboxhelper.h
new file mode 100644
index 0000000..40153bf
--- a/dev/null
+++ b/noncore/apps/opie-console/comboboxhelper.h
@@ -0,0 +1,49 @@
+/*
+               =. This file is part of the OPIE Project
+             .=l. Copyright (c) 2002,2004 Holger Hans Peter Freyther <freyther@handhelds.org>
+           .>+-=
+ _;:,     .>    :=|. This program is free software; you can
+.> <`_,   >  .   <= redistribute it and/or modify it under
+:`=1 )Y*s>-.--   : the terms of the GNU General Public
+.="- .-=="i,     .._ License as published by the Free Software
+ - .   .-<_>     .<> Foundation; either version 2 of the License,
+     ._= =}       : or (at your option) any later version.
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This program is distributed in the hope that
+     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
+    : ..    .:,     . . . without even the implied warranty of
+    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
+  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.=       =       ; General Public License for more
+++=   -.     .`     .: details.
+ :     =  ...= . :.=-
+ -.   .:....=;==+<; You should have received a copy of the GNU
+  -_. . .   )=.  = General Public License along with
+    --        :-=` this library; see the file COPYING.BIN.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+*/
+#ifndef COMBO_BOX_HELPER_H
+#define COMBO_BOX_HELPER_H
+
+#include <qstring.h>
+
+
+class QComboBox;
+
+
+/**
+ * \brief ComboboxHelper with a small Helper for Configuring it
+ *
+ * ComboboxHelper contains methods for helping managing
+ * Comboboxes with 'dynamic' data.
+ * All Methods related to this class are static and operate
+ * on a QComboBox.
+ */
+struct ComboboxHelper {
+ static void setCurrent(const QString&, QComboBox *);
+};
+
+#endif
diff --git a/noncore/apps/opie-console/dialer.cpp b/noncore/apps/opie-console/dialer.cpp
index 7010594..8883b83 100644
--- a/noncore/apps/opie-console/dialer.cpp
+++ b/noncore/apps/opie-console/dialer.cpp
@@ -1,19 +1,15 @@
#include "dialer.h"
#include "io_modem.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
/* QT */
#include <qlayout.h>
#include <qprogressbar.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qapp.h>
#include <qtimer.h>
#include <qmessagebox.h>
/* STD */
#include <unistd.h>
#include <string.h>
@@ -100,25 +96,24 @@ void Dialer::slotCancel()
if(state != state_online)
{
usercancel = 1;
reset();
}
else {
accept();
}
}
void Dialer::reset()
{
- owarn << "reset" << oendl;
switchState(state_cancel);
}
void Dialer::slotAutostart()
{
//state = state_preinit;
dial(m_profile.readEntry("Number"));
}
void Dialer::dial(const QString& number)
{
while(state != state_online)
@@ -132,36 +127,33 @@ void Dialer::dial(const QString& number)
}
if(usercancel)
{
// modem hangup
trydial(QString::null);
reject();
}
}
void Dialer::trydial(const QString& number)
{
- owarn << "TryDial:" << number.latin1() << "" << oendl;
if(state != state_cancel) switchState(state_preinit);
if(cleanshutdown)
{
- owarn << "HangupString " << m_profile.readEntry("HangupString") << oendl;
send(m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING ) + "\r");
}
if(state != state_cancel)
{
switchState(state_init);
-// owarn << "Init String " + m_profile.readEntry("InitString") << oendl;
send(m_profile.readEntry("InitString",MODEM_DEFAULT_INIT_STRING ) + "\r");
QString response2 = receive();
if(!response2.contains("\nOK\r"))
reset();
}
/* if(state != state_cancel)
{
switchState(state_options);
owarn << "ATM3l3" << oendl;
send("ATM3L3\r");
@@ -174,61 +166,59 @@ void Dialer::trydial(const QString& number)
if(state != state_cancel)
{
switchState(state_dialtone);
send("ATX1\r");
QString response4 = receive();
if(!response4.contains("\nOK\r"))
reset();
}
if(state != state_cancel)
{
- owarn << "progress" << oendl;
switchState(state_dialing);
// send(QString("ATDT %1\r").arg(number));
send(QString("%1 %2\r").arg(m_profile.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 ))
.arg(number));
QString response5 = receive();
if(!response5.contains("CONNECT") )
{
if(response5.contains("BUSY"))
switchState(state_dialing);
else
{
QMessageBox::warning(this,
QObject::tr("Failure"),
- QObject::tr("Dialing the number failed."));
+ QObject::tr("<qt>Dialing the number failed.</qt>"));
slotCancel();
}
}
}
if(state != state_cancel)
{
state = state_online;
slotCancel();
}
}
void Dialer::send(const QString& msg)
{
QString m = msg;
int bytes;
QString termination;
- owarn << "Sending: " << m.latin1() << "" << oendl;
/* termination = "\r";
//termination = m_profile.readEntry("Termination");
if(termination == "\n") m = m + "\n";
else if(termination == "\r") m = m + "\r";
else m = m + "\r\n";
*/
m = m.replace(QRegExp("\n"), "\r");
bytes = ::write(m_fd, m.local8Bit(), strlen(m.local8Bit()));
if(bytes < 0)
{
@@ -243,29 +233,27 @@ QString Dialer::receive()
int ret;
int counter = 0;
while(1)
{
ret = ::read(m_fd, buffer, sizeof(buffer));
if(ret > 0)
{
for(int i = 0; i < ret; i++)
buffer[i] = buffer[i] & 0x7F;
buffer[ret] = 0;
- owarn << "Got: " << buffer << "" << oendl;
buf.append(QString(buffer));
if(buf.contains("OK") || buf.contains("ERROR") || buf.contains("CONNECT") || (buf.contains("BUSY")))
{
- //owarn << "Receiving: '" << buf.latin1() << "'" << oendl;
cleanshutdown = 1;
return buf;
}else if (buf.contains("NO CARRIER") || buf.contains("NO DIALTONE") ) {
cleanshutdown = 1;
return QString::null;
}
}
else if(ret < 0)
{
if(errno != EAGAIN) reset();
else if(!(counter++ % 100)) qApp->processEvents();
}
diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp
index e045aef..986ae8d 100644
--- a/noncore/apps/opie-console/emulation_handler.cpp
+++ b/noncore/apps/opie-console/emulation_handler.cpp
@@ -1,26 +1,21 @@
#include "TEmuVt102.h"
#include "profile.h"
#include "emulation_handler.h"
#include "script.h"
#include "logger.h"
-/* OPIE */
-#include <opie2/odebug.h>
-
#include <qfile.h>
#include <qtextstream.h>
-using namespace Opie::Core;
-
EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name )
: QObject(0, name )
{
m_teWid = new TEWidget( parent, "TerminalMain");
// use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar)
// use setWrapAt(80) for normal console with scrollbar
setWrap(prof.readNumEntry("Wrap", 80) ? 0 : 80);
m_teWid->setMinimumSize(150, 70 );
m_script = 0;
m_log = 0;
parent->resize( m_teWid->calcSize(80, 24 ) );
m_teEmu = new TEmuVt102(m_teWid );
@@ -139,53 +134,49 @@ QColor EmulationHandler::foreColor(int col) {
QColor co;
/* we need to switch it */
switch( col ) {
default:
case Profile::White:
/* color is black */
co = Qt::white;
break;
case Profile::Black:
co = Qt::black;
break;
case Profile::Green:
- owarn << "Foreground green" << oendl;
co = Qt::green;
break;
case Profile::Orange:
- owarn << "Foreground orange" << oendl;
co.setRgb( 231, 184, 98 );
break;
}
return co;
}
QColor EmulationHandler::backColor(int col ) {
QColor co;
/* we need to switch it */
switch( col ) {
default:
case Profile::White:
/* color is white */
co = Qt::black;
break;
case Profile::Black:
co = Qt::white;
break;
case Profile::Green:
- owarn << "Background black" << oendl;
co = Qt::black;
break;
case Profile::Orange:
- owarn << "Background black" << oendl;
co = Qt::black;
break;
}
return co;
}
QPushButton* EmulationHandler::cornerButton() {
return m_teWid->cornerButton();
}
diff --git a/noncore/apps/opie-console/emulation_widget.cpp b/noncore/apps/opie-console/emulation_widget.cpp
index 4688551..f0708d0 100644
--- a/noncore/apps/opie-console/emulation_widget.cpp
+++ b/noncore/apps/opie-console/emulation_widget.cpp
@@ -215,28 +215,24 @@ void EmulationWidget::paintEvent( QPaintEvent* pe )
drawAttrString( unistr, painter, QRect( m_blX+tLx+f_width*x,m_bY+tLy+f_height*y,f_width*len,f_height ), m_image[loc(x ,y )], pm != 0l, false );
x +=len -1;
}
delete [] disstrU;
drawFrame( &painter );
painter.end();
}
void EmulationWidget::calcGeometry()
{
m_scrollbar->resize(QApplication::style().scrollBarExtent().width(), contentsRect().height() );
- odebug << QString(" TEST").arg( contentsRect().width() ) << oendl;
- odebug << QString(" TEST").arg( contentsRect().height() ) << oendl;
- odebug << "NEUER TESTT!!!!!!!!" << oendl;
-
switch( scrollLoc )
{
case SCRNONE :
m_columns = ( contentsRect().width() -2 * rimX ) / f_width;
m_blX = ( contentsRect().width() - ( m_columns*f_width ) ) / 2;
m_brX = m_blX;
m_scrollbar->hide();
break;
case SCRLEFT :
m_columns = ( contentsRect().width() - 2 * rimX - m_scrollbar->width() ) / f_width;
m_brX = ( contentsRect().width() - ( m_columns*f_width ) - m_scrollbar->width() ) / 2;
m_blX = m_brX + m_scrollbar->width();
@@ -249,39 +245,37 @@ void EmulationWidget::calcGeometry()
m_brX = m_blX;
m_scrollbar->move( contentsRect().topRight() - QPoint (m_scrollbar->width()-1,0 ) );
m_scrollbar->show();
break;
}
m_lines = ( contentsRect().height() - 2 * rimY ) / f_height;
m_bY = ( contentsRect().height() - (m_lines * f_height ) ) / 2;
}
void EmulationWidget::drawAttrString( QString& string, QPainter &painter, QRect rect, Character attr, bool usePixmap, bool clear )
{
- owarn << "Color1 " << color_table[attr.b].color.name().latin1() << "" << oendl;
if ( usePixmap && color_table[attr.b].transparent )
{
painter.setBackgroundMode( TransparentMode );
if ( clear )
erase( rect );
}
else
{
if ( blinking )
painter.fillRect( rect, color_table[attr.b].color );
else
{
painter.setBackgroundMode( OpaqueMode );
- owarn << "Color " << color_table[attr.b].color.name().latin1() << "" << oendl;
painter.setBackgroundColor( color_table[attr.b].color );
}
}
if ( color_table[attr.f].bold )
painter.setPen( QColor( 0x8F, 0x00, 0x00 ) );
else
painter.setPen( color_table[attr.f].color );
painter.drawText( rect.x(), rect.y() + f_ascent, string );
}
diff --git a/noncore/apps/opie-console/function_keyboard.cpp b/noncore/apps/opie-console/function_keyboard.cpp
index 6613183..0abe0d9 100644
--- a/noncore/apps/opie-console/function_keyboard.cpp
+++ b/noncore/apps/opie-console/function_keyboard.cpp
@@ -1,18 +1,14 @@
#include "function_keyboard.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
/* QT */
#include <qlayout.h>
#include <qlistbox.h>
#include <qlabel.h>
#include <qdir.h>
#define DEFAULT_ROWS 2
#define DEFAULT_COLS 12
/* FunctionKeyboard {{{1 */
FunctionKeyboard::FunctionKeyboard(QWidget *parent) :
@@ -33,25 +29,24 @@ FunctionKeyboard::FunctionKeyboard(QWidget *parent) :
QString handle = "r" + QString::number(r) + "c" + QString::number(c);
QStringList value_list = conf.readListEntry( handle, '|');
if (value_list.isEmpty()) continue;
keys.insert(
handle,
FKey (value_list[0], value_list[1], value_list[2].toUShort(), value_list[3].toUShort())
);
}
- //owarn << "loaded " << keys.count() << " keys" << oendl;
*/
if (keys.isEmpty()) loadDefaults();
}
FunctionKeyboard::~FunctionKeyboard() {}
void FunctionKeyboard::changeRows(int r) {
numRows = r;
@@ -252,62 +247,59 @@ void FunctionKeyboard::loadDefaults() {
keys.insert( "r1c10", FKey ("F11", 0, 4154, 0));
keys.insert( "r1c11", FKey ("F12", 0, 4155, 0));
}
/* FunctionKeyboardConfig {{{1 */
FunctionKeyboardConfig::FunctionKeyboardConfig(const QString& name, QWidget* parent, const char* na )
: ProfileDialogKeyWidget(name, parent, na),
selectedRow(0), selectedCol(0)
{
- owarn << "FunctionKeyboardConfig" << oendl;
-
-
kb = new FunctionKeyboard(this);
connect (kb, SIGNAL(keyPressed(FKey,ushort,ushort,bool)),
this, SLOT(slotKeyPressed(FKey,ushort,ushort,bool)));
QGroupBox *dimentions = new QGroupBox(2, Qt::Horizontal, tr("Dimensions"), this);
- QLabel *l = new QLabel("Rows", dimentions);
+ QLabel *l = new QLabel(tr("Rows"), dimentions);
m_rowBox = new QSpinBox(1, 15, 1, dimentions);
connect (m_rowBox, SIGNAL(valueChanged(int)), this, SLOT(slotChangeRows(int)));
- l = new QLabel("Columns", dimentions);
+ l = new QLabel(tr("Columns"), dimentions);
m_colBox = new QSpinBox(1, 15, 1, dimentions);
connect (m_colBox, SIGNAL(valueChanged(int)), this, SLOT(slotChangeCols(int)));
QGroupBox *editKey = new QGroupBox(2, Qt::Horizontal, tr("Edit Key"), this);
- l = new QLabel("Label", editKey);
+ l = new QLabel(tr("Label"), editKey);
m_labels = new QComboBox(true, editKey);
m_labels->setInsertionPolicy(QComboBox::AtCurrent);
m_labels->insertItem("");
QStringList files = QDir( QPEApplication::qpeDir() + "pics/console/keys/", "*.png").entryList();
for (uint i = 0; i < files.count(); i++) {
m_labels->insertItem( Resource::loadPixmap("console/keys/" + files[i]), files[i]);
}
connect (m_labels, SIGNAL(activated(int)), this, SLOT(slotChangeIcon(int)));
connect (m_labels, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeLabelText(const QString&)));
- l = new QLabel("Q Keycode", editKey);
+ l = new QLabel(tr("Q Keycode", "Qt Key Code for the OnScreen Keyboard"), editKey);
m_qvalues = new QComboBox(true, editKey);
m_qvalues->setInsertionPolicy(QComboBox::AtTop);
m_qvalues->setDuplicatesEnabled(false);
m_qvalues->insertItem("");
connect (m_qvalues, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeQCode(const QString&)));
- l = new QLabel("Unicode Value", editKey);
+ l = new QLabel(tr("Unicode Value", "The Unicode value of the key"), editKey);
m_uniValues = new QComboBox(true, editKey);
m_uniValues->setInsertionPolicy(QComboBox::AtTop);
m_uniValues->setDuplicatesEnabled(false);
m_uniValues->insertItem("");
connect (m_uniValues, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeUnicode(const QString&)));
QVBoxLayout *root = new QVBoxLayout(this, 2);
root->addWidget(kb);
root->addWidget(dimentions);
root->addWidget(editKey);
}
FunctionKeyboardConfig::~FunctionKeyboardConfig() {
diff --git a/noncore/apps/opie-console/io_bt.cpp b/noncore/apps/opie-console/io_bt.cpp
index c102427..a06b0c4 100644
--- a/noncore/apps/opie-console/io_bt.cpp
+++ b/noncore/apps/opie-console/io_bt.cpp
@@ -1,19 +1,15 @@
#include "io_bt.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
IOBt::IOBt( const Profile &config ) : IOSerial( config ) {
m_attach = 0;
}
IOBt::~IOBt() {
if ( m_attach ) {
delete m_attach;
}
}
@@ -26,36 +22,35 @@ void IOBt::close() {
m_attach = 0;
}
}
bool IOBt::open() {
bool ret = false;
// only set up bt stuff if mac address was set, otherwise use the device set
if ( !m_mac.isEmpty() ) {
// now it should also be checked, if there is a connection to the device with that mac allready
// hciattach here
- m_attach = new OProcess();
+ m_attach = new Opie::Core::OProcess();
*m_attach << "hciattach /dev/ttyS2 any 57600";
// then start hcid, then rcfomm handling (m_mac)
connect( m_attach, SIGNAL( processExited(Opie::Core::OProcess*) ),
this, SLOT( slotExited(Opie::Core::OProcess*) ) );
if ( m_attach->start() ) {
ret = IOSerial::open();
} else {
- owarn << "could not attach to device" << oendl;
delete m_attach;
m_attach = 0;
}
} else {
// directly to the normal serial
// TODO: look first if the connection really exists. ( is set up )
ret =IOSerial::open();
}
return ret;
}
@@ -69,28 +64,16 @@ void IOBt::reload( const Profile &config ) {
m_flow = config.readNumEntry("Flow", BT_DEFAULT_FLOW);
}
QString IOBt::identifier() const {
return "bluetooth";
}
QString IOBt::name() const {
return "BLuetooth IO Layer";
}
-void IOBt::slotExited( OProcess* proc ){
+void IOBt::slotExited( Opie::Core::OProcess* proc ){
close();
delete proc;
}
-
-QBitArray IOBt::supports() const {
- return QBitArray( 3 );
-}
-
-bool IOBt::isConnected() {
- return false;
-}
-
-void IOBt::send(const QByteArray &data) {
- odebug << "Please overload me..." << oendl;
-}
diff --git a/noncore/apps/opie-console/io_bt.h b/noncore/apps/opie-console/io_bt.h
index 00ca7e5..156632b 100644
--- a/noncore/apps/opie-console/io_bt.h
+++ b/noncore/apps/opie-console/io_bt.h
@@ -18,33 +18,30 @@
class IOBt : public IOSerial {
Q_OBJECT
public:
IOBt(const Profile &);
~IOBt();
virtual QString identifier() const;
virtual QString name() const;
- virtual QBitArray supports() const;
- virtual bool isConnected();
signals:
void received(const QByteArray &);
void error(int, const QString &);
public slots:
- virtual void send( const QByteArray& );
virtual bool open();
virtual void close();
virtual void reload(const Profile &);
private:
Opie::Core::OProcess *m_attach;
QString m_mac;
private slots:
void slotExited(Opie::Core::OProcess* proc);
};
diff --git a/noncore/apps/opie-console/io_irda.cpp b/noncore/apps/opie-console/io_irda.cpp
index 38542f5..9d27c85 100644
--- a/noncore/apps/opie-console/io_irda.cpp
+++ b/noncore/apps/opie-console/io_irda.cpp
@@ -1,80 +1,64 @@
#include "io_irda.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
IOIrda::IOIrda( const Profile &config ) : IOSerial( config ) {
m_attach = 0;
}
IOIrda::~IOIrda() {
if ( m_attach ) {
delete m_attach;
}
}
void IOIrda::close() {
IOSerial::close();
// still need error handling
delete m_attach;
}
bool IOIrda::open() {
bool ret;
// irdaattach here
- m_attach = new OProcess();
+ m_attach = new Opie::Core::OProcess();
*m_attach << "irattach /dev/ttyS2 -s";
connect( m_attach, SIGNAL( processExited(Opie::Core::OProcess*) ),
this, SLOT( slotExited(Opie::Core::OProcess*) ) );
if ( m_attach->start() ) {
ret= IOSerial::open();
} else {
// emit error!!!
- owarn << "could not attach to device" << oendl;
delete m_attach;
m_attach = 0l;
}
return ret;
}
void IOIrda::reload( const Profile &config ) {
m_device = config.readEntry("Device", IRDA_DEFAULT_DEVICE);
m_baud = config.readNumEntry("Baud", IRDA_DEFAULT_BAUD);
m_parity = config.readNumEntry("Parity", IRDA_DEFAULT_PARITY);
m_dbits = config.readNumEntry("DataBits", IRDA_DEFAULT_DBITS);
m_sbits = config.readNumEntry("StopBits", IRDA_DEFAULT_SBITS);
m_flow = config.readNumEntry("Flow", IRDA_DEFAULT_FLOW);
}
QString IOIrda::identifier() const {
return "irda";
}
QString IOIrda::name() const {
return "Irda IO Layer";
}
-void IOIrda::slotExited(OProcess* proc ){
+void IOIrda::slotExited(Opie::Core::OProcess* proc ){
close();
delete proc;
}
-QBitArray IOIrda::supports()const {
- return QBitArray( 3 );
-}
-
-bool IOIrda::isConnected() {
- return false;
-}
-
-void IOIrda::send(const QByteArray &data) {
- odebug << "Please overload me..." << oendl;
-}
diff --git a/noncore/apps/opie-console/io_irda.h b/noncore/apps/opie-console/io_irda.h
index fb29686..1fdbd4b 100644
--- a/noncore/apps/opie-console/io_irda.h
+++ b/noncore/apps/opie-console/io_irda.h
@@ -16,33 +16,30 @@
class IOIrda : public IOSerial {
Q_OBJECT
public:
IOIrda(const Profile &);
~IOIrda();
virtual QString identifier() const;
virtual QString name() const;
- virtual QBitArray supports() const;
- virtual bool isConnected();
signals:
void received(const QByteArray &);
void error(int, const QString &);
public slots:
- virtual void send( const QByteArray& );
virtual bool open();
virtual void close();
virtual void reload(const Profile &);
private:
Opie::Core::OProcess *m_attach;
private slots:
void slotExited(Opie::Core::OProcess* proc);
};
diff --git a/noncore/apps/opie-console/io_modem.cpp b/noncore/apps/opie-console/io_modem.cpp
index c499dfe..915a1d2 100644
--- a/noncore/apps/opie-console/io_modem.cpp
+++ b/noncore/apps/opie-console/io_modem.cpp
@@ -1,20 +1,16 @@
#include "io_modem.h"
#include "dialer.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
-
IOModem::IOModem( const Profile &profile )
: IOSerial( profile ) {
m_profile = profile;
}
IOModem::~IOModem() {
}
void IOModem::close() {
// Hangup, discarding result
@@ -79,30 +75,12 @@ void IOModem::reload( const Profile &config ) {
m_dcdLines = config.readBoolEntry("DCDLines", MODEM_DEFAULT_DCD_LINES );
m_multiLineUntag = config.readBoolEntry("MultiLineUntag", MODEM_DEFAULT_MULTI_LINE_UNTAG );
}
QString IOModem::identifier() const {
return "modem";
}
QString IOModem::name() const {
return "Modem IO Layer";
}
-
-void IOModem::slotExited(OProcess* proc ){
- close();
- /* delete it afterwards */
- delete proc;
-}
-
-QBitArray IOModem::supports()const {
- return QBitArray( 3 );
-}
-
-bool IOModem::isConnected() {
- return false;
-}
-
-void IOModem::send(const QByteArray &data) {
- odebug << "Please overload me..." << oendl;
-}
diff --git a/noncore/apps/opie-console/io_modem.h b/noncore/apps/opie-console/io_modem.h
index 5b99e00..056e630 100644
--- a/noncore/apps/opie-console/io_modem.h
+++ b/noncore/apps/opie-console/io_modem.h
@@ -36,39 +36,32 @@
class IOModem : public IOSerial {
Q_OBJECT
public:
IOModem(const Profile &);
~IOModem();
virtual QString identifier() const;
virtual QString name() const;
- virtual QBitArray supports() const;
- virtual bool isConnected();
signals:
void received(const QByteArray &);
void error(int, const QString &);
public slots:
- virtual void send( const QByteArray& );
virtual bool open();
virtual void close();
virtual void reload(const Profile &);
private:
QString m_initString, m_resetString, m_dialPref1, m_dialSuf1, m_dialPref2,
m_dialSuf2, m_dialPref3, m_dialSuf3, m_connect, m_hangup, m_cancel;
int m_dialTime, m_delayRedial, m_numberTries, m_dtrDropTime,
m_bpsDetect, m_dcdLines, m_multiLineUntag;
Profile m_profile;
-
-private slots:
- void slotExited(Opie::Core::OProcess* proc);
-
};
#endif
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp
index 291912c..b3cb208 100644
--- a/noncore/apps/opie-console/mainwindow.cpp
+++ b/noncore/apps/opie-console/mainwindow.cpp
@@ -3,28 +3,26 @@
#include "configdialog.h"
#include "default.h"
#include "profilemanager.h"
#include "mainwindow.h"
#include "tabwidget.h"
#include "transferdialog.h"
#include "function_keyboard.h"
#include "emulation_handler.h"
#include "script.h"
#include "fixit.h"
/* OPIE */
-#include <opie2/odebug.h>
#include <opie2/ofiledialog.h>
#include <qpe/filemanager.h>
-using namespace Opie::Core;
using namespace Opie::Ui;
/* QT */
#include <qaction.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qmessagebox.h>
#include <qwhatsthis.h>
#include <qfileinfo.h>
/* STD */
#include <assert.h>
@@ -472,31 +470,29 @@ void MainWindow::slotConfigure() {
/*
* we will remove
* this window from the tabwidget
* remove it from the list
* delete it
* and set the currentSession()
*/
void MainWindow::slotClose() {
if (!currentSession() )
return;
Session* ses = currentSession();
- owarn << "removing! currentSession " << currentSession()->name().latin1() << "" << oendl;
/* set to NULL to be safe, if its needed slotSessionChanged resets it automatically */
m_curSession = NULL;
tabWidget()->remove( /*currentSession()*/ses );
/*it's autodelete */
m_sessions.remove( ses );
- owarn << "after remove!!" << oendl;
if (!currentSession() ) {
m_connect->setEnabled( false );
m_disconnect->setEnabled( false );
m_terminate->setEnabled( false );
m_transfer->setEnabled( false );
m_recordScript->setEnabled( false );
m_saveScript->setEnabled( false );
m_scripts->setItemEnabled(m_runScript_id, false);
m_fullscreen->setEnabled( false );
m_wrap->setEnabled( false );
m_closewindow->setEnabled( false );
@@ -595,34 +591,31 @@ void MainWindow::slotOpenKeb(bool state) {
void MainWindow::slotOpenButtons( bool state ) {
if ( state ) {
m_buttonBar->show();
} else {
m_buttonBar->hide();
}
}
void MainWindow::slotSessionChanged( Session* ses ) {
- owarn << "changed!" << oendl;
-
if(m_curSession)
if(m_curSession->transferDialog()) m_curSession->transferDialog()->hide();
if(ses)
if(ses->transferDialog()) ses->transferDialog()->show();
if ( ses ) {
m_curSession = ses;
- odebug << QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) << oendl;
if ( m_curSession->layer()->isConnected() ) {
m_connect->setEnabled( false );
m_disconnect->setEnabled( true );
m_recordScript->setEnabled(!m_curSession->emulationHandler()->isRecording());
m_saveScript->setEnabled(m_curSession->emulationHandler()->isRecording());
m_scripts->setItemEnabled(m_runScript_id, true);
} else {
m_connect->setEnabled( true );
m_disconnect->setEnabled( false );
m_recordScript->setEnabled( false );
m_saveScript->setEnabled( false );
m_scripts->setItemEnabled(m_runScript_id, false);
diff --git a/noncore/apps/opie-console/modemconfigwidget.cpp b/noncore/apps/opie-console/modemconfigwidget.cpp
index b2f5c68..eb4bd0d 100644
--- a/noncore/apps/opie-console/modemconfigwidget.cpp
+++ b/noncore/apps/opie-console/modemconfigwidget.cpp
@@ -1,40 +1,26 @@
#include "modemconfigwidget.h"
#include "dialdialog.h"
+#include "comboboxhelper.h"
/* OPIE */
-#include <opie2/odebug.h>
#include <qpe/qpeapplication.h>
-using namespace Opie::Core;
/* QT */
#include <qlabel.h>
#include <qlayout.h>
#include <qcombobox.h>
#include <qpushbutton.h>
#include <qhbox.h>
-namespace {
- void setCurrent( const QString& str, QComboBox* bo ) {
- uint b = bo->count();
- for (int i = 0; i < bo->count(); i++ ) {
- if ( bo->text(i) == str ) {
- bo->setCurrentItem( i );
- return;
- }
- }
- bo->insertItem( str );
- bo->setCurrentItem( b );
- }
-}
ModemConfigWidget::ModemConfigWidget( const QString& name, QWidget* parent,
const char* na )
: ProfileDialogConnectionWidget( name, parent, na ) {
m_lay = new QVBoxLayout( this );
m_device = new QLabel(tr( "Modem is attached to:" ), this );
m_deviceCmb = new QComboBox(this );
m_deviceCmb->setEditable( TRUE );
QLabel* telLabel = new QLabel( this );
telLabel->setText( tr( "Enter telefon number here:" ) );
@@ -137,28 +123,27 @@ void ModemConfigWidget::load( const Profile& prof ) {
if ( sbits == 2) {
m_base->setStop( IOLayerBase::Stop_Two );
} else if ( sbits == 15 ) {
m_base->setStop( IOLayerBase::Stop_OnePointFive );
} else {
m_base->setStop( IOLayerBase::Stop_One );
}
atConf->readConfig( prof );
if ( prof.readEntry( "Device" ).isEmpty() ) {
- owarn << "device empty!" << oendl;
return;
}
- setCurrent( prof.readEntry( "Device" ), m_deviceCmb );
+ ComboboxHelper::setCurrent( prof.readEntry( "Device" ), m_deviceCmb );
}
/*
* save speed,
* flow,
* parity
*/
void ModemConfigWidget::save( Profile& prof ) {
int flow, parity, speed, data, stop;
flow = parity = speed = data = stop = 0;
diff --git a/noncore/apps/opie-console/opie-console.pro b/noncore/apps/opie-console/opie-console.pro
index d947eec..a7b9d5f 100644
--- a/noncore/apps/opie-console/opie-console.pro
+++ b/noncore/apps/opie-console/opie-console.pro
@@ -19,25 +19,26 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h io_modem.h \
serialconfigwidget.h irdaconfigwidget.h \
btconfigwidget.h modemconfigwidget.h \
atconfigdialog.h dialdialog.h \
procctl.h \
function_keyboard.h \
receive_layer.h filereceive.h \
script.h \
dialer.h logger.h \
terminalwidget.h \
emulation_handler.h TECommon.h \
TEHistory.h TEScreen.h TEWidget.h \
TEmuVt102.h TEmulation.h MyPty.h \
- consoleconfigwidget.h fixit.h
+ consoleconfigwidget.h fixit.h \
+ comboboxhelper.h
SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp io_modem.cpp \
file_layer.cpp filetransfer.cpp \
main.cpp \
metafactory.cpp \
session.cpp \
mainwindow.cpp \
profile.cpp \
profileconfig.cpp \
profilemanager.cpp \
tabwidget.cpp \
configdialog.cpp \
@@ -49,26 +50,27 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp io_modem.cpp \
serialconfigwidget.cpp irdaconfigwidget.cpp \
btconfigwidget.cpp modemconfigwidget.cpp \
atconfigdialog.cpp dialdialog.cpp \
default.cpp procctl.cpp \
function_keyboard.cpp \
receive_layer.cpp filereceive.cpp \
script.cpp \
dialer.cpp logger.cpp \
terminalwidget.cpp \
emulation_handler.cpp TEHistory.cpp \
TEScreen.cpp TEWidget.cpp \
TEmuVt102.cpp TEmulation.cpp MyPty.cpp \
- consoleconfigwidget.cpp fixit.cpp
+ consoleconfigwidget.cpp fixit.cpp \
+ comboboxhelper.cpp
DESTDIR = $(OPIEDIR)/bin/
INTERFACES = configurebase.ui editbase.ui
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopiecore2 -lopieui2 -lutil
TARGET = opie-console
DEFINES += HAVE_OPENPTY
-#DEFINES += EAST FSCKED_DISTRI
+DEFINES += EAST FSCKED_DISTRI
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/apps/opie-console/profileeditordialog.cpp b/noncore/apps/opie-console/profileeditordialog.cpp
index dc42d8b..8109070 100644
--- a/noncore/apps/opie-console/profileeditordialog.cpp
+++ b/noncore/apps/opie-console/profileeditordialog.cpp
@@ -1,33 +1,29 @@
+#include "profileeditordialog.h"
+#include "metafactory.h"
+#include "comboboxhelper.h"
+
+
#include <qlayout.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qmessagebox.h>
#include <qcombobox.h>
#include <qcheckbox.h>
#include <qscrollview.h>
-#include "metafactory.h"
-#include "profileeditordialog.h"
+
using namespace Opie::Ui;
-namespace {
- void setCurrent( const QString& str, QComboBox* bo ) {
- for (int i = 0; i < bo->count(); i++ ) {
- if ( bo->text(i) == str ) {
- bo->setCurrentItem( i );
- }
- }
- };
-}
+
ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact,
const Profile& prof )
: QDialog(0, 0, TRUE), m_fact( fact ), m_prof( prof )
{
initUI();
// Apply current profile
// plugin_plugin->load(profile);
// ... (reset profile name line edit etc.)
}
@@ -115,26 +111,26 @@ void ProfileEditorDialog::initUI()
QStringList::Iterator it;
for (it =list.begin(); it != list.end(); ++it ) {
m_conCmb->insertItem( (*it) );
}
list = m_fact->terminalWidgets();
for (it =list.begin(); it != list.end(); ++it ) {
m_termCmb->insertItem( (*it) );
}
// load profile values
m_name->setText(m_prof.name());
slotKeyActivated( "Default Keyboard" );
- setCurrent( m_fact->external(m_prof.ioLayerName() ), m_conCmb );
- setCurrent( m_fact->external(m_prof.terminalName() ), m_termCmb );
+ ComboboxHelper::setCurrent( m_fact->external(m_prof.ioLayerName() ), m_conCmb );
+ ComboboxHelper::setCurrent( m_fact->external(m_prof.terminalName() ), m_termCmb );
slotConActivated( m_fact->external(m_prof.ioLayerName() ) );
slotTermActivated( m_fact->external(m_prof.terminalName() ) );
m_autoConnect->setChecked(m_prof.autoConnect());
// signal and slots
connect(m_conCmb, SIGNAL(activated(const QString&) ),
this, SLOT(slotConActivated(const QString&) ) );
connect(m_termCmb, SIGNAL(activated(const QString&) ),
this, SLOT(slotTermActivated(const QString&) ) );
}
diff --git a/noncore/apps/opie-console/serialconfigwidget.cpp b/noncore/apps/opie-console/serialconfigwidget.cpp
index c4c9c99..4efb286 100644
--- a/noncore/apps/opie-console/serialconfigwidget.cpp
+++ b/noncore/apps/opie-console/serialconfigwidget.cpp
@@ -1,34 +1,21 @@
-#include <qlabel.h>
-#include <qlayout.h>
-#include <qcombobox.h>
-
#include "iolayerbase.h"
#include "serialconfigwidget.h"
+#include "comboboxhelper.h"
-namespace {
- void setCurrent( const QString& str, QComboBox* bo ) {
- uint b = bo->count();
- for (int i = 0; i < bo->count(); i++ ) {
- if ( bo->text(i) == str ) {
- bo->setCurrentItem( i );
- return;
- }
- }
- bo->insertItem( str );
- bo->setCurrentItem( b );
- }
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qcombobox.h>
-}
SerialConfigWidget::SerialConfigWidget( const QString& name,
QWidget* parent,
const char* na )
: ProfileDialogConnectionWidget( name, parent, na ) {
m_lay = new QVBoxLayout(this );
m_device = new QLabel(tr("Device"), this );
m_deviceCmb = new QComboBox(this );
m_deviceCmb->setEditable( TRUE );
m_base = new IOLayerBase(this, "base");
@@ -107,25 +94,25 @@ void SerialConfigWidget::load( const Profile& prof ) {
m_base->setData( IOLayerBase::Data_Eight );
}
if ( sbits == 2) {
m_base->setStop( IOLayerBase::Stop_Two );
} else if ( sbits == 15 ) {
m_base->setStop( IOLayerBase::Stop_OnePointFive );
} else {
m_base->setStop( IOLayerBase::Stop_One );
}
if ( prof.readEntry("Device").isEmpty() ) return;
- setCurrent( prof.readEntry("Device"), m_deviceCmb );
+ ComboboxHelper::setCurrent( prof.readEntry("Device"), m_deviceCmb );
}
/*
* save speed,
* flow,
* parity
*/
void SerialConfigWidget::save( Profile& prof ) {
int flow, parity, speed, data, stop;
flow = parity = speed = data = stop = 0;
prof.writeEntry("Device", m_deviceCmb->currentText() );
diff --git a/noncore/apps/opie-console/settings.ui b/noncore/apps/opie-console/settings.ui
deleted file mode 100644
index 6944dd0..0000000
--- a/noncore/apps/opie-console/settings.ui
+++ b/dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE UI><UI>
-<class>Settings</class>
-<widget>
- <class>QDialog</class>
- <property stdset="1">
- <name>name</name>
- <cstring>Settings</cstring>
- </property>
- <property stdset="1">
- <name>geometry</name>
- <rect>
- <x>0</x>
- <y>0</y>
- <width>596</width>
- <height>480</height>
- </rect>
- </property>
- <property stdset="1">
- <name>caption</name>
- <string>Settings</string>
- </property>
-</widget>
-</UI>
diff --git a/noncore/apps/opie-console/sz_transfer.cpp b/noncore/apps/opie-console/sz_transfer.cpp
index f505998..3299e33 100644
--- a/noncore/apps/opie-console/sz_transfer.cpp
+++ b/noncore/apps/opie-console/sz_transfer.cpp
@@ -31,56 +31,39 @@ void SzTransfer::sendFile(const QString& file) {
this, SLOT(sent()));
connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),
this, SLOT(SzReceivedStdout(Opie::Core::OProcess*,char*,int)));
connect(proc, SIGNAL(receivedStderr(Opie::Core::OProcess*,char*,int)),
this, SLOT(SzReceivedStderr(Opie::Core::OProcess*,char*,int)));
connect(layer(), SIGNAL(received(const QByteArray&)),
this, SLOT(receivedStdin(const QByteArray&)));
proc->start(OProcess::NotifyOnExit, OProcess::All);
}
void SzTransfer::SzReceivedStdout(OProcess *, char *buffer, int buflen) {
-
- owarn << "recieved from sz on stdout " << buflen << " bytes" << oendl;
-
QByteArray data(buflen);
data.fill(*buffer, buflen);
+
+#ifdef DEBUG_RECEIVE
for (uint i = 0; i < data.count(); i++ ) {
printf("%c", buffer[i] );
}
printf("\n");
+#endif
// send out through the io layer
layer()->send(data);
}
void SzTransfer::SzReceivedStderr(OProcess *, char *buffer, int length) {
-
- // parse and show data in a progress dialog/widget
- printf("stderr:\n");
- //for (int i = 0; i < length; i++)
- // printf("%c", buffer[i]);
- //printf("\n");
}
void SzTransfer::receivedStdin(const QByteArray &data) {
-
- owarn << "recieved from io_serial " << data.size() << " bytes" << oendl;
-
// recieved data from the io layer goes to sz
proc->writeStdin(data.data(), data.size());
-
}
void SzTransfer::sent() {
-
- owarn << "sent file" << oendl;
-
- //setcbreak(0); /* default */
-
-
delete proc;
disconnect(layer(), SIGNAL(received(const QByteArray&)),
this, SLOT(receivedStdin(const QByteArray&)));
-
}
diff --git a/noncore/apps/opie-console/tabwidget.cpp b/noncore/apps/opie-console/tabwidget.cpp
index 152c26b..79ccac5 100644
--- a/noncore/apps/opie-console/tabwidget.cpp
+++ b/noncore/apps/opie-console/tabwidget.cpp
@@ -1,32 +1,28 @@
#include "tabwidget.h"
-/* OPIE */
-#include <opie2/odebug.h>
-using namespace Opie::Core;
using Opie::Ui::OTabWidget;
TabWidget::TabWidget( QWidget* parent, const char* name )
: OTabWidget( parent, name ) {
connect(this, SIGNAL( currentChanged(QWidget*) ),
this, SLOT( slotCurChanged(QWidget*) ) );
}
TabWidget::~TabWidget() {
}
void TabWidget::add( Session* ses ) {
- owarn << "session ses " + ses->name() << oendl;
if ( !ses->widgetStack() ) return;
//reparent( ses->widgetStack(), QPoint() );
addTab( ses->widgetStack(), "console/konsole", ses->name() );
//addTab( ses->widgetStack(), ses->name() );
m_map.insert( ses->widgetStack(), ses );
}
void TabWidget::remove( Session* ses ) {
m_map.remove( ses->widgetStack() );
removePage( ses->widgetStack() );
}
diff --git a/noncore/apps/opie-console/terminalwidget.cpp b/noncore/apps/opie-console/terminalwidget.cpp
index 3e3b8a6..907de1b 100644
--- a/noncore/apps/opie-console/terminalwidget.cpp
+++ b/noncore/apps/opie-console/terminalwidget.cpp
@@ -1,19 +1,14 @@
#include "terminalwidget.h"
-/* OPIE */
-#include <opie2/odebug.h>
-
-using namespace Opie::Core;
-
/* QT */
#include <qlabel.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qradiobutton.h>
#include <qhgroupbox.h>
#include <qhbuttongroup.h>
#include <qlayout.h>
#include <qhbox.h>
namespace {
enum TermIds {
@@ -71,25 +66,24 @@ TerminalWidget::TerminalWidget( const QString& name, QWidget* parent,
m_typeBox->add( m_terminal );
m_typeBox->add( m_terminalBox );
m_lroot->add( m_groupSize );
m_colorBox->add( m_colorLabel );
m_colorBox->add( m_colorCmb );
m_lroot->add( m_groupConv );
m_lroot->add( m_groupOptions );
m_lroot->addStretch( 0 );
// Fill in some options
- owarn << "Options for terminal box" << oendl;
m_terminalBox->insertItem( tr("VT 100"), 0 ); // /*, id_term_vt100*/ );
m_terminalBox->insertItem( tr("VT 102"), 1 ); // /* , id_term_vt102 */);
m_terminalBox->insertItem( tr("Linux Console"), 2 ); //, id_term_linux );
m_terminalBox->insertItem( tr("X-Terminal"), 3 ); //, id_term_xterm );
//m_terminalBox->insertItem( tr("ANSI"), id_term_ansi );
m_colorCmb->insertItem( tr("black on white"), id_term_black );
m_colorCmb->insertItem( tr("white on black"), id_term_white );
m_colorCmb->insertItem( tr("green on black"), id_term_green );
m_colorCmb->insertItem( tr("orange on black"), id_term_orange );
// signals + slots
diff --git a/noncore/apps/opie-console/vt102emulation.cpp b/noncore/apps/opie-console/vt102emulation.cpp
deleted file mode 100644
index 35b789c..0000000
--- a/noncore/apps/opie-console/vt102emulation.cpp
+++ b/dev/null
@@ -1,1024 +0,0 @@
-/* ------------------------------------------------------------------------- */
-/* */
-/* [vt102emulation.cpp] VT102 Terminal Emulation */
-/* */
-/* ------------------------------------------------------------------------- */
-/* */
-/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
-/* */
-/* This file is part of Konsole - an X terminal for KDE */
-/* */
-/* ------------------------------------------------------------------------- */
-/* */
-/* Ported Konsole to Qt/Embedded */
-/* */
-/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
-/* -------------------------------------------------------------------------- */
-
-/*! \class Vt102Emulation
-
- \brief Actual Emulation for Konsole
-
- \sa Widget \sa Screen \sa EmulationLayer
-*/
-
-#include "vt102emulation.h"
-
-#include <stdio.h>
-#include <unistd.h>
-
-
-/* VT102 Terminal Emulation
-
- This class puts together the screens, the pty and the widget to a
- complete terminal emulation. Beside combining it's componentes, it
- handles the emulations's protocol.
-
- This module consists of the following sections:
-
- - Constructor/Destructor
- - Incoming Bytes Event pipeline
- - Outgoing Bytes
- - Mouse Events
- - Keyboard Events
- - Modes and Charset State
- - Diagnostics
-*/
-
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Constructor / Destructor */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*
- Nothing really intesting happens here.
-*/
-
-/*!
-*/
-
-Vt102Emulation::Vt102Emulation(WidgetLayer* gui) : EmulationLayer(gui)
-{
- QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)),
- this,SLOT(onMouse(int,int,int)));
- initTokenizer();
- reset();
-}
-
-/*!
-*/
-
-Vt102Emulation::~Vt102Emulation()
-{
-}
-
-/*!
-*/
-
-void Vt102Emulation::reset()
-{
- resetToken();
- resetModes();
- resetCharset(0); screen[0]->reset();
- resetCharset(1); screen[0]->reset();
- setCodec(0);
- setKeytrans("linux.keytab");
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Processing the incoming byte stream */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/* Incoming Bytes Event pipeline
-
- This section deals with decoding the incoming character stream.
- Decoding means here, that the stream is first seperated into `tokens'
- which are then mapped to a `meaning' provided as operations by the
- `TEScreen' class or by the emulation class itself.
-
- The pipeline proceeds as follows:
-
- - Tokenizing the ESC codes (onRcvChar)
- - VT100 code page translation of plain characters (applyCharset)
- - Interpretation of ESC codes (tau)
-
- The escape codes and their meaning are described in the
- technical reference of this program.
-*/
-
-// Tokens ------------------------------------------------------------------ --
-
-/*
- Since the tokens are the central notion if this section, we've put them
- in front. They provide the syntactical elements used to represent the
- terminals operations as byte sequences.
-
- They are encodes here into a single machine word, so that we can later
- switch over them easily. Depending on the token itself, additional
- argument variables are filled with parameter values.
-
- The tokens are defined below:
-
- - CHR - Printable characters (32..255 but DEL (=127))
- - CTL - Control characters (0..31 but ESC (= 27), DEL)
- - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'>
- - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C
- - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C
- - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C
- - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C
- - VT52 - VT52 escape codes
- - <ESC><Chr>
- - <ESC>'Y'{Pc}{Pc}
- - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL>
- note that this is handled differently
-
- The last two forms allow list of arguments. Since the elements of
- the lists are treated individually the same way, they are passed
- as individual tokens to the interpretation. Further, because the
- meaning of the parameters are names (althought represented as numbers),
- they are includes within the token ('N').
-
-*/
-
-#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) )
-
-#define TY_CHR___( ) TY_CONSTR(0,0,0)
-#define TY_CTL___(A ) TY_CONSTR(1,A,0)
-#define TY_ESC___(A ) TY_CONSTR(2,A,0)
-#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B)
-#define TY_ESC_DE(A ) TY_CONSTR(4,A,0)
-#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N)
-#define TY_CSI_PN(A ) TY_CONSTR(6,A,0)
-#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N)
-
-#define TY_VT52__(A ) TY_CONSTR(8,A,0)
-
-// Tokenizer --------------------------------------------------------------- --
-
-/* The tokenizers state
-
- The state is represented by the buffer (pbuf, ppos),
- and accompanied by decoded arguments kept in (argv,argc).
- Note that they are kept internal in the tokenizer.
-*/
-
-void Vt102Emulation::resetToken()
-{
- ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0;
-}
-
-void Vt102Emulation::addDigit(int dig)
-{
- argv[argc] = 10*argv[argc] + dig;
-}
-
-void Vt102Emulation::addArgument()
-{
- argc = QMIN(argc+1,MAXARGS-1);
- argv[argc] = 0;
-}
-
-void Vt102Emulation::pushToToken(int cc)
-{
- pbuf[ppos] = cc;
- ppos = QMIN(ppos+1,MAXPBUF-1);
-}
-
-// Character Classes used while decoding
-
-#define CTL 1
-#define CHR 2
-#define CPN 4
-#define DIG 8
-#define SCS 16
-#define GRP 32
-
-void Vt102Emulation::initTokenizer()
-{ int i; UINT8* s;
- for(i = 0; i < 256; i++) tbl[ i] = 0;
- for(i = 0; i < 32; i++) tbl[ i] |= CTL;
- for(i = 32; i < 256; i++) tbl[ i] |= CHR;
- for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN;
- for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG;
- for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS;
- for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP;
- resetToken();
-}
-
-/* Ok, here comes the nasty part of the decoder.
-
- Instead of keeping an explicit state, we deduce it from the
- token scanned so far. It is then immediately combined with
- the current character to form a scanning decision.
-
- This is done by the following defines.
-
- - P is the length of the token scanned so far.
- - L (often P-1) is the position on which contents we base a decision.
- - C is a character or a group of characters (taken from 'tbl').
-
- Note that they need to applied in proper order.
-*/
-
-#define lec(P,L,C) (p == (P) && s[(L)] == (C))
-#define lun( ) (p == 1 && cc >= 32 )
-#define les(P,L,C) (p == (P) && s[L] < 256 && (tbl[s[(L)]] & (C)) == (C))
-#define eec(C) (p >= 3 && cc == (C))
-#define ees(C) (p >= 3 && cc < 256 && (tbl[ cc ] & (C)) == (C))
-#define eps(C) (p >= 3 && s[2] != '?' && cc < 256 && (tbl[ cc ] & (C)) == (C))
-#define epp( ) (p >= 3 && s[2] == '?' )
-#define egt( ) (p == 3 && s[2] == '>' )
-#define Xpe (ppos>=2 && pbuf[1] == ']' )
-#define Xte (Xpe && cc == 7 )
-#define ces(C) ( cc < 256 && (tbl[ cc ] & (C)) == (C) && !Xte)
-
-#define ESC 27
-#define CNTL(c) ((c)-'@')
-
-// process an incoming unicode character
-
-void Vt102Emulation::onRcvChar(int cc)
-{ int i;
-
- if (cc == 127) return; //VT100: ignore.
-
- if (ces( CTL))
- { // DEC HACK ALERT! Control Characters are allowed *within* esc sequences in VT100
- // This means, they do neither a resetToken nor a pushToToken. Some of them, do
- // of course. Guess this originates from a weakly layered handling of the X-on
- // X-off protocol, which comes really below this level.
- if (cc == CNTL('X') || cc == CNTL('Z') || cc == ESC) resetToken(); //VT100: CAN or SUB
- if (cc != ESC) { tau( TY_CTL___(cc+'@' ), 0, 0); return; }
- }
-
- pushToToken(cc); // advance the state
-
- int* s = pbuf;
- int p = ppos;
-
- if (getMode(MODE_Ansi)) // decide on proper action
- {
- if (lec(1,0,ESC)) { return; }
- if (les(2,1,GRP)) { return; }
- if (Xte ) { XtermHack(); resetToken(); return; }
- if (Xpe ) { return; }
- if (lec(3,2,'?')) { return; }
- if (lec(3,2,'>')) { return; }
- if (lun( )) { tau( TY_CHR___(), applyCharset(cc), 0); resetToken(); return; }
- if (lec(2,0,ESC)) { tau( TY_ESC___(s[1]), 0, 0); resetToken(); return; }
- if (les(3,1,SCS)) { tau( TY_ESC_CS(s[1],s[2]), 0, 0); resetToken(); return; }
- if (lec(3,1,'#')) { tau( TY_ESC_DE(s[2]), 0, 0); resetToken(); return; }
-// if (egt( )) { tau( TY_CSI_PG(cc ), '>', 0); resetToken(); return; }
- if (eps( CPN)) { tau( TY_CSI_PN(cc), argv[0],argv[1]); resetToken(); return; }
- if (ees( DIG)) { addDigit(cc-'0'); return; }
- if (eec( ';')) { addArgument(); return; }
- for (i=0;i<=argc;i++)
- if (epp( )) tau( TY_CSI_PR(cc,argv[i]), 0, 0); else
- tau( TY_CSI_PS(cc,argv[i]), 0, 0);
- resetToken();
- }
- else // mode VT52
- {
- if (lec(1,0,ESC)) return;
- if (les(1,0,CHR)) { tau( TY_CHR___( ), s[0], 0); resetToken(); return; }
- if (lec(2,1,'Y')) return;
- if (lec(3,1,'Y')) return;
- if (p < 4) { tau( TY_VT52__(s[1] ), 0, 0); resetToken(); return; }
- tau( TY_VT52__(s[1] ), s[2],s[3]); resetToken(); return;
- }
-}
-
-void Vt102Emulation::XtermHack()
-{ int i,arg = 0;
- for (i = 2; i < ppos && '0'<=pbuf[i] && pbuf[i]<'9' ; i++)
- arg = 10*arg + (pbuf[i]-'0');
- if (pbuf[i] != ';') { ReportErrorToken(); return; }
- QChar *str = new QChar[ppos-i-2];
- for (int j = 0; j < ppos-i-2; j++) str[j] = pbuf[i+1+j];
- QString unistr(str,ppos-i-2);
- // arg == 1 doesn't change the title. In XTerm it only changes the icon name
- // (btw: arg=0 changes title and icon, arg=1 only icon, arg=2 only title
- if (arg == 0 || arg == 2) emit changeTitle(arg,unistr);
- delete [] str;
-}
-
-// Interpreting Codes ---------------------------------------------------------
-
-/*
- Now that the incoming character stream is properly tokenized,
- meaning is assigned to them. These are either operations of
- the current screen, or of the emulation class itself.
-
- The token to be interpreteted comes in as a machine word
- possibly accompanied by two parameters.
-
- Likewise, the operations assigned to, come with up to two
- arguments. One could consider to make up a proper table
- from the function below.
-
- The technical reference manual provides more informations
- about this mapping.
-*/
-
-void Vt102Emulation::tau( int token, int p, int q )
-{
-//scan_buffer_report();
-//if (token == TY_CHR___()) printf("%c",p); else
-//printf("tau(%d,%d,%d, %d,%d)\n",(token>>0)&0xff,(token>>8)&0xff,(token>>16)&0xffff,p,q);
- switch (token)
- {
-
- case TY_CHR___( ) : scr->ShowCharacter (p ); break; //UTF16
-
- // 127 DEL : ignored on input
-
- case TY_CTL___('@' ) : /* NUL: ignored */ break;
- case TY_CTL___('A' ) : /* SOH: ignored */ break;
- case TY_CTL___('B' ) : /* STX: ignored */ break;
- case TY_CTL___('C' ) : /* ETX: ignored */ break;
- case TY_CTL___('D' ) : /* EOT: ignored */ break;
- case TY_CTL___('E' ) : reportAnswerBack ( ); break; //VT100
- case TY_CTL___('F' ) : /* ACK: ignored */ break;
- case TY_CTL___('G' ) : gui->bell ( ); break; //VT100
- case TY_CTL___('H' ) : scr->BackSpace ( ); break; //VT100
- case TY_CTL___('I' ) : scr->Tabulate ( ); break; //VT100
- case TY_CTL___('J' ) : scr->NewLine ( ); break; //VT100
- case TY_CTL___('K' ) : scr->NewLine ( ); break; //VT100
- case TY_CTL___('L' ) : scr->NewLine ( ); break; //VT100
- case TY_CTL___('M' ) : scr->Return ( ); break; //VT100
-
- case TY_CTL___('N' ) : useCharset ( 1); break; //VT100
- case TY_CTL___('O' ) : useCharset ( 0); break; //VT100
-
- case TY_CTL___('P' ) : /* DLE: ignored */ break;
- case TY_CTL___('Q' ) : /* DC1: XON continue */ break; //VT100
- case TY_CTL___('R' ) : /* DC2: ignored */ break;
- case TY_CTL___('S' ) : /* DC3: XOFF halt */ break; //VT100
- case TY_CTL___('T' ) : /* DC4: ignored */ break;
- case TY_CTL___('U' ) : /* NAK: ignored */ break;
- case TY_CTL___('V' ) : /* SYN: ignored */ break;
- case TY_CTL___('W' ) : /* ETB: ignored */ break;
- case TY_CTL___('X' ) : scr->ShowCharacter ( 0x2592); break; //VT100
- case TY_CTL___('Y' ) : /* EM : ignored */ break;
- case TY_CTL___('Z' ) : scr->ShowCharacter ( 0x2592); break; //VT100
- case TY_CTL___('[' ) : /* ESC: cannot be seen here. */ break;
- case TY_CTL___('\\' ) : /* FS : ignored */ break;
- case TY_CTL___(']' ) : /* GS : ignored */ break;
- case TY_CTL___('^' ) : /* RS : ignored */ break;
- case TY_CTL___('_' ) : /* US : ignored */ break;
-
- case TY_ESC___('D' ) : scr->index ( ); break; //VT100
- case TY_ESC___('E' ) : scr->NextLine ( ); break; //VT100
- case TY_ESC___('H' ) : scr->changeTabStop (TRUE ); break; //VT100
- case TY_ESC___('M' ) : scr->reverseIndex ( ); break; //VT100
- case TY_ESC___('Z' ) : reportTerminalType ( ); break;
- case TY_ESC___('c' ) : reset ( ); break;
-
- case TY_ESC___('n' ) : useCharset ( 2); break;
- case TY_ESC___('o' ) : useCharset ( 3); break;
- case TY_ESC___('7' ) : saveCursor ( ); break;
- case TY_ESC___('8' ) : restoreCursor ( ); break;
-
- case TY_ESC___('=' ) : setMode (MODE_AppKeyPad); break;
- case TY_ESC___('>' ) : resetMode (MODE_AppKeyPad); break;
- case TY_ESC___('<' ) : setMode (MODE_Ansi ); break; //VT100
-
- case TY_ESC_CS('(', '0') : setCharset (0, '0'); break; //VT100
- case TY_ESC_CS('(', 'A') : setCharset (0, 'A'); break; //VT100
- case TY_ESC_CS('(', 'B') : setCharset (0, 'B'); break; //VT100
-
- case TY_ESC_CS(')', '0') : setCharset (1, '0'); break; //VT100
- case TY_ESC_CS(')', 'A') : setCharset (1, 'A'); break; //VT100
- case TY_ESC_CS(')', 'B') : setCharset (1, 'B'); break; //VT100
-
- case TY_ESC_CS('*', '0') : setCharset (2, '0'); break; //VT100
- case TY_ESC_CS('*', 'A') : setCharset (2, 'A'); break; //VT100
- case TY_ESC_CS('*', 'B') : setCharset (2, 'B'); break; //VT100
-
- case TY_ESC_CS('+', '0') : setCharset (3, '0'); break; //VT100
- case TY_ESC_CS('+', 'A') : setCharset (3, 'A'); break; //VT100
- case TY_ESC_CS('+', 'B') : setCharset (3, 'B'); break; //VT100
-
- case TY_ESC_CS('%', 'G') : setCodec (1 ); break; //LINUX
- case TY_ESC_CS('%', '@') : setCodec (0 ); break; //LINUX
-
- case TY_ESC_DE('3' ) : /* IGNORED: double high, top half */ break;
- case TY_ESC_DE('4' ) : /* IGNORED: double high, bottom half */ break;
- case TY_ESC_DE('5' ) : /* IGNORED: single width, single high*/ break;
- case TY_ESC_DE('6' ) : /* IGNORED: double width, single high*/ break;
- case TY_ESC_DE('8' ) : scr->helpAlign ( ); break;
-
- case TY_CSI_PS('K', 0) : scr->clearToEndOfLine ( ); break;
- case TY_CSI_PS('K', 1) : scr->clearToBeginOfLine ( ); break;
- case TY_CSI_PS('K', 2) : scr->clearEntireLine ( ); break;
- case TY_CSI_PS('J', 0) : scr->clearToEndOfScreen ( ); break;
- case TY_CSI_PS('J', 1) : scr->clearToBeginOfScreen ( ); break;
- case TY_CSI_PS('J', 2) : scr->clearEntireScreen ( ); break;
- case TY_CSI_PS('g', 0) : scr->changeTabStop (FALSE ); break; //VT100
- case TY_CSI_PS('g', 3) : scr->clearTabStops ( ); break; //VT100
- case TY_CSI_PS('h', 4) : scr-> setMode (MODE_Insert ); break;
- case TY_CSI_PS('h', 20) : setMode (MODE_NewLine ); break;
- case TY_CSI_PS('i', 0) : /* IGNORE: attached printer */ break; //VT100
- case TY_CSI_PS('l', 4) : scr-> resetMode (MODE_Insert ); break;
- case TY_CSI_PS('l', 20) : resetMode (MODE_NewLine ); break;
-
- case TY_CSI_PS('m', 0) : scr->setDefaultRendition ( ); break;
- case TY_CSI_PS('m', 1) : scr-> setRendition (RE_BOLD ); break; //VT100
- case TY_CSI_PS('m', 4) : scr-> setRendition (RE_UNDERLINE); break; //VT100
- case TY_CSI_PS('m', 5) : scr-> setRendition (RE_BLINK ); break; //VT100
- case TY_CSI_PS('m', 7) : scr-> setRendition (RE_REVERSE ); break;
- case TY_CSI_PS('m', 10) : /* IGNORED: mapping related */ break; //LINUX
- case TY_CSI_PS('m', 11) : /* IGNORED: mapping related */ break; //LINUX
- case TY_CSI_PS('m', 12) : /* IGNORED: mapping related */ break; //LINUX
- case TY_CSI_PS('m', 22) : scr->resetRendition (RE_BOLD ); break;
- case TY_CSI_PS('m', 24) : scr->resetRendition (RE_UNDERLINE); break;
- case TY_CSI_PS('m', 25) : scr->resetRendition (RE_BLINK ); break;
- case TY_CSI_PS('m', 27) : scr->resetRendition (RE_REVERSE ); break;
-
- case TY_CSI_PS('m', 30) : scr->setForeColor ( 0); break;
- case TY_CSI_PS('m', 31) : scr->setForeColor ( 1); break;
- case TY_CSI_PS('m', 32) : scr->setForeColor ( 2); break;
- case TY_CSI_PS('m', 33) : scr->setForeColor ( 3); break;
- case TY_CSI_PS('m', 34) : scr->setForeColor ( 4); break;
- case TY_CSI_PS('m', 35) : scr->setForeColor ( 5); break;
- case TY_CSI_PS('m', 36) : scr->setForeColor ( 6); break;
- case TY_CSI_PS('m', 37) : scr->setForeColor ( 7); break;
- case TY_CSI_PS('m', 39) : scr->setForeColorToDefault( ); break;
-
- case TY_CSI_PS('m', 40) : scr->setBackColor ( 0); break;
- case TY_CSI_PS('m', 41) : scr->setBackColor ( 1); break;
- case TY_CSI_PS('m', 42) : scr->setBackColor ( 2); break;
- case TY_CSI_PS('m', 43) : scr->setBackColor ( 3); break;
- case TY_CSI_PS('m', 44) : scr->setBackColor ( 4); break;
- case TY_CSI_PS('m', 45) : scr->setBackColor ( 5); break;
- case TY_CSI_PS('m', 46) : scr->setBackColor ( 6); break;
- case TY_CSI_PS('m', 47) : scr->setBackColor ( 7); break;
- case TY_CSI_PS('m', 49) : scr->setBackColorToDefault( ); break;
-
- case TY_CSI_PS('m', 90) : scr->setForeColor ( 8); break;
- case TY_CSI_PS('m', 91) : scr->setForeColor ( 9); break;
- case TY_CSI_PS('m', 92) : scr->setForeColor ( 10); break;
- case TY_CSI_PS('m', 93) : scr->setForeColor ( 11); break;
- case TY_CSI_PS('m', 94) : scr->setForeColor ( 12); break;
- case TY_CSI_PS('m', 95) : scr->setForeColor ( 13); break;
- case TY_CSI_PS('m', 96) : scr->setForeColor ( 14); break;
- case TY_CSI_PS('m', 97) : scr->setForeColor ( 15); break;
-
- case TY_CSI_PS('m', 100) : scr->setBackColor ( 8); break;
- case TY_CSI_PS('m', 101) : scr->setBackColor ( 9); break;
- case TY_CSI_PS('m', 102) : scr->setBackColor ( 10); break;
- case TY_CSI_PS('m', 103) : scr->setBackColor ( 11); break;
- case TY_CSI_PS('m', 104) : scr->setBackColor ( 12); break;
- case TY_CSI_PS('m', 105) : scr->setBackColor ( 13); break;
- case TY_CSI_PS('m', 106) : scr->setBackColor ( 14); break;
- case TY_CSI_PS('m', 107) : scr->setBackColor ( 15); break;
-
- case TY_CSI_PS('n', 5) : reportStatus ( ); break;
- case TY_CSI_PS('n', 6) : reportCursorPosition ( ); break;
- case TY_CSI_PS('q', 0) : /* IGNORED: LEDs off */ break; //VT100
- case TY_CSI_PS('q', 1) : /* IGNORED: LED1 on */ break; //VT100
- case TY_CSI_PS('q', 2) : /* IGNORED: LED2 on */ break; //VT100
- case TY_CSI_PS('q', 3) : /* IGNORED: LED3 on */ break; //VT100
- case TY_CSI_PS('q', 4) : /* IGNORED: LED4 on */ break; //VT100
- case TY_CSI_PS('x', 0) : reportTerminalParms ( 2); break; //VT100
- case TY_CSI_PS('x', 1) : reportTerminalParms ( 3); break; //VT100
-
- case TY_CSI_PN('@' ) : scr->insertChars (p ); break;
- case TY_CSI_PN('A' ) : scr->cursorUp (p ); break; //VT100
- case TY_CSI_PN('B' ) : scr->cursorDown (p ); break; //VT100
- case TY_CSI_PN('C' ) : scr->cursorRight (p ); break; //VT100
- case TY_CSI_PN('D' ) : scr->cursorLeft (p ); break; //VT100
- case TY_CSI_PN('G' ) : scr->setCursorX (p ); break; //LINUX
- case TY_CSI_PN('H' ) : scr->setCursorYX (p, q); break; //VT100
- case TY_CSI_PN('L' ) : scr->insertLines (p ); break;
- case TY_CSI_PN('M' ) : scr->deleteLines (p ); break;
- case TY_CSI_PN('P' ) : scr->deleteChars (p ); break;
- case TY_CSI_PN('X' ) : scr->eraseChars (p ); break;
- case TY_CSI_PN('c' ) : reportTerminalType ( ); break; //VT100
- case TY_CSI_PN('d' ) : scr->setCursorY (p ); break; //LINUX
- case TY_CSI_PN('f' ) : scr->setCursorYX (p, q); break; //VT100
- case TY_CSI_PN('r' ) : scr->setMargins (p, q); break; //VT100
- case TY_CSI_PN('y' ) : /* IGNORED: Confidence test */ break; //VT100
-
- case TY_CSI_PR('h', 1) : setMode (MODE_AppCuKeys); break; //VT100
- case TY_CSI_PR('l', 1) : resetMode (MODE_AppCuKeys); break; //VT100
- case TY_CSI_PR('s', 1) : saveMode (MODE_AppCuKeys); break; //FIXME
- case TY_CSI_PR('r', 1) : restoreMode (MODE_AppCuKeys); break; //FIXME
-
- case TY_CSI_PR('l', 2) : resetMode (MODE_Ansi ); break; //VT100
-
- case TY_CSI_PR('h', 3) : setColumns ( 132); break; //VT100
- case TY_CSI_PR('l', 3) : setColumns ( 80); break; //VT100
-
- case TY_CSI_PR('h', 4) : /* IGNORED: soft scrolling */ break; //VT100
- case TY_CSI_PR('l', 4) : /* IGNORED: soft scrolling */ break; //VT100
-
- case TY_CSI_PR('h', 5) : scr-> setMode (MODE_Screen ); break; //VT100
- case TY_CSI_PR('l', 5) : scr-> resetMode (MODE_Screen ); break; //VT100
-
- case TY_CSI_PR('h', 6) : scr-> setMode (MODE_Origin ); break; //VT100
- case TY_CSI_PR('l', 6) : scr-> resetMode (MODE_Origin ); break; //VT100
- case TY_CSI_PR('s', 6) : scr-> saveMode (MODE_Origin ); break; //FIXME
- case TY_CSI_PR('r', 6) : scr->restoreMode (MODE_Origin ); break; //FIXME
-
- case TY_CSI_PR('h', 7) : scr-> setMode (MODE_Wrap ); break; //VT100
- case TY_CSI_PR('l', 7) : scr-> resetMode (MODE_Wrap ); break; //VT100
- case TY_CSI_PR('s', 7) : scr-> saveMode (MODE_Wrap ); break; //FIXME
- case TY_CSI_PR('r', 7) : scr->restoreMode (MODE_Wrap ); break; //FIXME
-
- case TY_CSI_PR('h', 8) : /* IGNORED: autorepeat on */ break; //VT100
- case TY_CSI_PR('l', 8) : /* IGNORED: autorepeat off */ break; //VT100
-
- case TY_CSI_PR('h', 9) : /* IGNORED: interlace */ break; //VT100
- case TY_CSI_PR('l', 9) : /* IGNORED: interlace */ break; //VT100
-
- case TY_CSI_PR('h', 25) : setMode (MODE_Cursor ); break; //VT100
- case TY_CSI_PR('l', 25) : resetMode (MODE_Cursor ); break; //VT100
-
- case TY_CSI_PR('h', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
- case TY_CSI_PR('l', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
- case TY_CSI_PR('s', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
- case TY_CSI_PR('r', 41) : /* IGNORED: obsolete more(1) fix */ break; //XTERM
-
- case TY_CSI_PR('h', 47) : setMode (MODE_AppScreen); break; //VT100
- case TY_CSI_PR('l', 47) : resetMode (MODE_AppScreen); break; //VT100
-
- case TY_CSI_PR('h', 1000) : setMode (MODE_Mouse1000); break; //XTERM
- case TY_CSI_PR('l', 1000) : resetMode (MODE_Mouse1000); break; //XTERM
- case TY_CSI_PR('s', 1000) : saveMode (MODE_Mouse1000); break; //XTERM
- case TY_CSI_PR('r', 1000) : restoreMode (MODE_Mouse1000); break; //XTERM
-
- case TY_CSI_PR('h', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
- case TY_CSI_PR('l', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
- case TY_CSI_PR('s', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
- case TY_CSI_PR('r', 1001) : /* IGNORED: hilite mouse tracking */ break; //XTERM
-
- case TY_CSI_PR('h', 1047) : setMode (MODE_AppScreen); break; //XTERM
- case TY_CSI_PR('l', 1047) : resetMode (MODE_AppScreen); break; //XTERM
-
- //FIXME: Unitoken: save translations
- case TY_CSI_PR('h', 1048) : saveCursor ( ); break; //XTERM
- case TY_CSI_PR('l', 1048) : restoreCursor ( ); break; //XTERM
-
- //FIXME: every once new sequences like this pop up in xterm.
- // Here's a guess of what they could mean.
- case TY_CSI_PR('h', 1049) : setMode (MODE_AppScreen); break; //XTERM
- case TY_CSI_PR('l', 1049) : resetMode (MODE_AppScreen); break; //XTERM
-
- //FIXME: when changing between vt52 and ansi mode evtl do some resetting.
- case TY_VT52__('A' ) : scr->cursorUp ( 1); break; //VT52
- case TY_VT52__('B' ) : scr->cursorDown ( 1); break; //VT52
- case TY_VT52__('C' ) : scr->cursorRight ( 1); break; //VT52
- case TY_VT52__('D' ) : scr->cursorLeft ( 1); break; //VT52
-
- case TY_VT52__('F' ) : setAndUseCharset (0, '0'); break; //VT52
- case TY_VT52__('G' ) : setAndUseCharset (0, 'B'); break; //VT52
-
- case TY_VT52__('H' ) : scr->setCursorYX (1,1 ); break; //VT52
- case TY_VT52__('I' ) : scr->reverseIndex ( ); break; //VT52
- case TY_VT52__('J' ) : scr->clearToEndOfScreen ( ); break; //VT52
- case TY_VT52__('K' ) : scr->clearToEndOfLine ( ); break; //VT52
- case TY_VT52__('Y' ) : scr->setCursorYX (p-31,q-31 ); break; //VT52
- case TY_VT52__('Z' ) : reportTerminalType ( ); break; //VT52
- case TY_VT52__('<' ) : setMode (MODE_Ansi ); break; //VT52
- case TY_VT52__('=' ) : setMode (MODE_AppKeyPad); break; //VT52
- case TY_VT52__('>' ) : resetMode (MODE_AppKeyPad); break; //VT52
-
- default : ReportErrorToken(); break;
- };
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Terminal to Host protocol */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*
- Outgoing bytes originate from several sources:
-
- - Replies to Enquieries.
- - Mouse Events
- - Keyboard Events
-*/
-
-/*!
-*/
-
-void Vt102Emulation::sendString(const char* s)
-{
- QByteArray tmp;
- tmp.setRawData( s, strlen( s ));
- emit sndBlock( tmp);
-}
-
-void Vt102Emulation::sendString(const QByteArray& s)
-{
- emit sndBlock( s );
-}
-
-// Replies ----------------------------------------------------------------- --
-
-// This section copes with replies send as response to an enquiery control code.
-
-/*!
-*/
-
-void Vt102Emulation::reportCursorPosition()
-{ char tmp[20];
- sprintf(tmp,"\033[%d;%dR",scr->getCursorY()+1,scr->getCursorX()+1);
- sendString(tmp);
-}
-
-/*
- What follows here is rather obsolete and faked stuff.
- The correspondent enquieries are neverthenless issued.
-*/
-
-/*!
-*/
-
-void Vt102Emulation::reportTerminalType()
-{
-//FIXME: should change?
- if (getMode(MODE_Ansi))
-// sendString("\033[?1;2c"); // I'm a VT100 with AP0 //FIXME: send only in response to ^[[0c
- sendString("\033[>0;115;0c"); // I'm a VT220 //FIXME: send only in response to ^[[>c
- else
- sendString("\033/Z"); // I'm a VT52
-}
-
-void Vt102Emulation::reportTerminalParms(int p)
-// DECREPTPARM
-{ char tmp[100];
- sprintf(tmp,"\033[%d;1;1;112;112;1;0x",p); // not really true.
- sendString(tmp);
-}
-
-/*!
-*/
-
-void Vt102Emulation::reportStatus()
-{
- sendString("\033[0n"); //VT100. Device status report. 0 = Ready.
-}
-
-/*!
-*/
-
-#define ANSWER_BACK "" // This is really obsolete VT100 stuff.
-
-void Vt102Emulation::reportAnswerBack()
-{
- sendString(ANSWER_BACK);
-}
-
-// Mouse Handling ---------------------------------------------------------- --
-
-/*!
- Mouse clicks are possibly reported to the client
- application if it has issued interest in them.
- They are normally consumed by the widget for copy
- and paste, but may be propagated from the widget
- when gui->setMouseMarks is set via setMode(MODE_Mouse1000).
-
- `x',`y' are 1-based.
- `ev' (event) indicates the button pressed (0-2)
- or a general mouse release (3).
-*/
-
-void Vt102Emulation::onMouse( int cb, int cx, int cy )
-{ char tmp[20];
- if (!connected) return;
- sprintf(tmp,"\033[M%c%c%c",cb+040,cx+040,cy+040);
- sendString(tmp);
-}
-
-// Keyboard Handling ------------------------------------------------------- --
-
-#define encodeMode(M,B) BITS(B,getMode(M))
-#define encodeStat(M,B) BITS(B,((ev->state() & (M)) == (M)))
-
-/*
- Keyboard event handling has been simplified somewhat by pushing
- the complications towards a configuration file [see KeyTrans class].
-*/
-
-void Vt102Emulation::onKeyPress( QKeyEvent* ev )
-{
- if (!connected) return; // someone else gets the keys
-
-//printf("State/Key: 0x%04x 0x%04x (%d,%d)\n",ev->state(),ev->key(),ev->text().length(),ev->text().length()?ev->text().ascii()[0]:0);
-
- // revert to non-history when typing
- if (scr->getHistCursor() != scr->getHistLines());
- scr->setHistCursor(scr->getHistLines());
-
- // lookup in keyboard translation table ...
- int cmd; const char* txt; int len;
- if (keytrans->findEntry(ev->key(), encodeMode(MODE_NewLine , BITS_NewLine ) + // OLD,
- encodeMode(MODE_Ansi , BITS_Ansi ) + // OBSOLETE,
- encodeMode(MODE_AppCuKeys, BITS_AppCuKeys ) + // VT100 stuff
- encodeStat(ControlButton , BITS_Control ) +
- encodeStat(ShiftButton , BITS_Shift ) +
- encodeStat(AltButton , BITS_Alt ),
- &cmd, &txt, &len ))
-//printf("cmd: %d, %s, %d\n",cmd,txt,len);
- {
- switch(cmd) // ... and execute if found.
- {
- case CMD_emitSelection : gui->insertSelection(); return;
- case CMD_scrollPageUp : gui->scroll(-gui->lines()/2); return;
- case CMD_scrollPageDown : gui->scroll(+gui->lines()/2); return;
- case CMD_scrollLineUp : gui->scroll(-1 ); return;
- case CMD_scrollLineDown : gui->scroll(+1 ); return;
- case CMD_send : sendString( txt ); return;
- case CMD_prevSession : emit prevSession(); return;
- case CMD_nextSession : emit nextSession(); return;
- }
- }
- // fall back handling
- if (!ev->text().isEmpty())
- {
- if (ev->state() & AltButton) sendString("\033"); // ESC, this is the ALT prefix
- /// very hacky
- if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='A')) sendString("\01");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='B')) sendString("\02");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='C')) sendString("\03");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='D')) sendString("\04");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='E')) sendString("\05");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='F')) sendString("\06");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='G')) sendString("\07");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='H')) sendString("\010");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='I')) sendString("\011");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='J')) sendString("\012");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='K')) sendString("\013");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='L')) sendString("\014");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='M')) sendString("\015");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='N')) sendString("\016");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='O')) sendString("\017");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='P')) sendString("\020");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Q')) sendString("\021");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='R')) sendString("\022");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='S')) sendString("\023");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='T')) sendString("\024");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='U')) sendString("\025");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='V')) sendString("\026");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='W')) sendString("\027");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='X')) sendString("\030");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Y')) sendString("\031");
- else if ((ev->state() & ControlButton) && (ev->text().upper().ascii()[0]=='Z')) sendString("\032");
- else
- {
- QCString s = codec->fromUnicode(ev->text()); // encode for application
- sendString( s ); // we may well have s.length() > 1
- }
- return;
- }
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* VT100 Charsets */
-/* */
-/* ------------------------------------------------------------------------- */
-
-// Character Set Conversion ------------------------------------------------ --
-
-/*
- The processing contains a VT100 specific code translation layer.
- It's still in use and mainly responsible for the line drawing graphics.
-
- These and some other glyphs are assigned to codes (0x5f-0xfe)
- normally occupied by the latin letters. Since this codes also
- appear within control sequences, the extra code conversion
- does not permute with the tokenizer and is placed behind it
- in the pipeline. It only applies to tokens, which represent
- plain characters.
-
- This conversion it eventually continued in TEWidget.C, since
- it might involve VT100 enhanced fonts, which have these
- particular glyphs allocated in (0x00-0x1f) in their code page.
-*/
-
-#define CHARSET charset[scr==screen[1]]
-
-// Apply current character map.
-
-unsigned short Vt102Emulation::applyCharset(unsigned short c)
-{
- if (CHARSET.graphic && 0x5f <= c && c <= 0x7e) return vt100_graphics[c-0x5f];
- if (CHARSET.pound && c == '#' ) return 0xa3; //This mode is obsolete
- return c;
-}
-
-/*
- "Charset" related part of the emulation state.
- This configures the VT100 charset filter.
-
- While most operation work on the current screen,
- the following two are different.
-*/
-
-void Vt102Emulation::resetCharset(int scrno)
-{
- charset[scrno].cu_cs = 0;
- strncpy(charset[scrno].charset,"BBBB",4);
- charset[scrno].sa_graphic = FALSE;
- charset[scrno].sa_pound = FALSE;
- charset[scrno].graphic = FALSE;
- charset[scrno].pound = FALSE;
-}
-
-/*!
-*/
-
-void Vt102Emulation::setCharset(int n, int cs) // on both screens.
-{
- charset[0].charset[n&3] = cs; useCharset(charset[0].cu_cs);
- charset[1].charset[n&3] = cs; useCharset(charset[1].cu_cs);
-}
-
-/*!
-*/
-
-void Vt102Emulation::setAndUseCharset(int n, int cs)
-{
- CHARSET.charset[n&3] = cs;
- useCharset(n&3);
-}
-
-/*!
-*/
-
-void Vt102Emulation::useCharset(int n)
-{
- CHARSET.cu_cs = n&3;
- CHARSET.graphic = (CHARSET.charset[n&3] == '0');
- CHARSET.pound = (CHARSET.charset[n&3] == 'A'); //This mode is obsolete
-}
-
-/*! Save the cursor position and the rendition attribute settings. */
-
-void Vt102Emulation::saveCursor()
-{
- CHARSET.sa_graphic = CHARSET.graphic;
- CHARSET.sa_pound = CHARSET.pound; //This mode is obsolete
- // we are not clear about these
- //sa_charset = charsets[cScreen->charset];
- //sa_charset_num = cScreen->charset;
- scr->saveCursor();
-}
-
-/*! Restore the cursor position and the rendition attribute settings. */
-
-void Vt102Emulation::restoreCursor()
-{
- CHARSET.graphic = CHARSET.sa_graphic;
- CHARSET.pound = CHARSET.sa_pound; //This mode is obsolete
- scr->restoreCursor();
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Mode Operations */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*
- Some of the emulations state is either added to the state of the screens.
-
- This causes some scoping problems, since different emulations choose to
- located the mode either to the current screen or to both.
-
- For strange reasons, the extend of the rendition attributes ranges over
- all screens and not over the actual screen.
-
- We decided on the precise precise extend, somehow.
-*/
-
-// "Mode" related part of the state. These are all booleans.
-
-void Vt102Emulation::resetModes()
-{
- resetMode(MODE_Mouse1000); saveMode(MODE_Mouse1000);
- resetMode(MODE_AppScreen); saveMode(MODE_AppScreen);
- // here come obsolete modes
- resetMode(MODE_AppCuKeys); saveMode(MODE_AppCuKeys);
- resetMode(MODE_NewLine );
- setMode(MODE_Ansi );
-}
-
-void Vt102Emulation::setMode(int m)
-{
- currParm.mode[m] = TRUE;
- switch (m)
- {
- case MODE_Mouse1000 : //gui->setMouseMarks(FALSE);
- break;
- case MODE_AppScreen : screen[1]->clearSelection();
- screen[1]->clearEntireScreen();
- setScreen(1);
- break;
- }
- if (m < MODES_SCREEN || m == MODE_NewLine)
- {
- screen[0]->setMode(m);
- screen[1]->setMode(m);
- }
-}
-
-void Vt102Emulation::resetMode(int m)
-{
- currParm.mode[m] = FALSE;
- switch (m)
- {
- case MODE_Mouse1000 : //gui->setMouseMarks(TRUE);
- break;
- case MODE_AppScreen : screen[0]->clearSelection();
- setScreen(0);
- break;
- }
- if (m < MODES_SCREEN || m == MODE_NewLine)
- {
- screen[0]->resetMode(m);
- screen[1]->resetMode(m);
- }
-}
-
-void Vt102Emulation::saveMode(int m)
-{
- saveParm.mode[m] = currParm.mode[m];
-}
-
-void Vt102Emulation::restoreMode(int m)
-{
- if(saveParm.mode[m]) setMode(m); else resetMode(m);
-}
-
-BOOL Vt102Emulation::getMode(int m)
-{
- return currParm.mode[m];
-}
-
-void Vt102Emulation::setConnect(bool c)
-{
- EmulationLayer::setConnect(c);
- if (c)
- { // refresh mouse mode
- if (getMode(MODE_Mouse1000))
- setMode(MODE_Mouse1000);
- else
- resetMode(MODE_Mouse1000);
- }
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Diagnostic */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*! shows the contents of the scan buffer.
-
- This functions is used for diagnostics. It is called by \e ReportErrorToken
- to inform about strings that cannot be decoded or handled by the emulation.
-
- \sa ReportErrorToken
-*/
-
-/*!
-*/
-
-static void hexdump(int* s, int len)
-{ int i;
- for (i = 0; i < len; i++)
- {
- if (s[i] == '\\')
- printf("\\\\");
- else
- if ((s[i]) > 32 && s[i] < 127)
- printf("%c",s[i]);
- else
- printf("\\%04x(hex)",s[i]);
- }
-}
-
-void Vt102Emulation::scan_buffer_report()
-{
- if (ppos == 0 || ppos == 1 && (pbuf[0] & 0xff) >= 32) return;
- printf("token: "); hexdump(pbuf,ppos); printf("\n");
-}
-
-/*!
-*/
-
-void Vt102Emulation::ReportErrorToken()
-{
- printf("undecodable "); scan_buffer_report();
-}
diff --git a/noncore/apps/opie-console/vt102emulation.h b/noncore/apps/opie-console/vt102emulation.h
deleted file mode 100644
index 17ab449..0000000
--- a/noncore/apps/opie-console/vt102emulation.h
+++ b/dev/null
@@ -1,153 +0,0 @@
-/* -------------------------------------------------------------------------- */
-/* */
-/* [TEmuVt102.h] X Terminal Emulation */
-/* */
-/* -------------------------------------------------------------------------- */
-/* */
-/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
-/* */
-/* This file is part of Konsole - an X terminal for KDE */
-/* */
-/* -------------------------------------------------------------------------- */
-/* */
-/* Ported Konsole to Qt/Embedded */
-/* */
-/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
-/* -------------------------------------------------------------------------- */
-/* Ported embedded-konsole to opie-terminal */
-/* */
-/* Copyright (C) 2002 by opie developers <opie@handhelds.org> */
-/* */
-/* -------------------------------------------------------------------------- */
-
-#ifndef VT102EMU_H
-#define VT102EMU_H
-
-#include "widget_layer.h"
-#include "screen.h"
-#include "emulation_layer.h"
-#include <qtimer.h>
-#include <stdio.h>
-
-//
-
-#define MODE_AppScreen (MODES_SCREEN+0)
-#define MODE_AppCuKeys (MODES_SCREEN+1)
-#define MODE_AppKeyPad (MODES_SCREEN+2)
-#define MODE_Mouse1000 (MODES_SCREEN+3)
-#define MODE_Ansi (MODES_SCREEN+4)
-#define MODE_total (MODES_SCREEN+5)
-
-struct DECpar
-{
- BOOL mode[MODE_total];
-};
-
-struct CharCodes
-{
- // coding info
- char charset[4]; //
- int cu_cs; // actual charset.
- bool graphic; // Some VT100 tricks
- bool pound ; // Some VT100 tricks
- bool sa_graphic; // saved graphic
- bool sa_pound; // saved pound
-};
-
-class Vt102Emulation: public EmulationLayer
-{ Q_OBJECT
-
-public:
-
- Vt102Emulation(WidgetLayer* gui);
- ~Vt102Emulation();
-
-public slots: // signals incoming from Widget
-
- void onKeyPress(QKeyEvent*);
- void onMouse(int cb, int cx, int cy);
-
-signals:
-
- void changeTitle(int,const QString&);
- void prevSession();
- void nextSession();
-
-public:
-
- void reset();
-
- /**
- * receive a char from IOLayer
- */
- void onRcvChar(int cc);
-
- /**
- * sends a list of bytes to the IOLayer
- */
- void sendString(const QByteArray&);
-
- /**
- * @deprecated use QByteArray instead
- * see sendString() above
- */
- void sendString(const char *);
-
-public:
-
- BOOL getMode (int m);
-
- void setMode (int m);
- void resetMode (int m);
- void saveMode (int m);
- void restoreMode(int m);
- void resetModes();
-
- void setConnect(bool r);
-
-private:
-
- void resetToken();
-#define MAXPBUF 80
- void pushToToken(int cc);
- int pbuf[MAXPBUF]; //FIXME: overflow?
- int ppos;
-#define MAXARGS 15
- void addDigit(int dig);
- void addArgument();
- int argv[MAXARGS];
- int argc;
- void initTokenizer();
- int tbl[256];
-
- void scan_buffer_report(); //FIXME: rename
- void ReportErrorToken(); //FIXME: rename
-
- void tau(int code, int p, int q);
- void XtermHack();
-
- //
-
- void reportTerminalType();
- void reportStatus();
- void reportAnswerBack();
- void reportCursorPosition();
- void reportTerminalParms(int p);
-
-protected:
-
- unsigned short applyCharset(unsigned short c);
- void setCharset(int n, int cs);
- void useCharset(int n);
- void setAndUseCharset(int n, int cs);
- void saveCursor();
- void restoreCursor();
- void resetCharset(int scrno);
- CharCodes charset[2];
-
- DECpar currParm;
- DECpar saveParm;
-};
-
-#endif // ifndef ANSIEMU_H
diff --git a/noncore/apps/opie-console/widget.cpp b/noncore/apps/opie-console/widget.cpp
deleted file mode 100644
index 4a578be..0000000
--- a/noncore/apps/opie-console/widget.cpp
+++ b/dev/null
@@ -1,1278 +0,0 @@
-/* ------------------------------------------------------------------------ */
-/* */
-/* [TEWidget.C] Terminal Emulation Widget */
-/* */
-/* ------------------------------------------------------------------------ */
-/* */
-/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
-/* */
-/* This file is part of Konsole - an X terminal for KDE */
-/* */
-/* ------------------------------------------------------------------------ */
-/* */
-/* Ported Konsole to Qt/Embedded */
-/* */
-/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
-/* -------------------------------------------------------------------------- */
-
-/* ibot:
- i changed
- "currentSession->getEmulation()->sendString()" to
- "currentSession->layer()->send()"
- # this is not right! EmulationLayer should send it...
- i changed all those to use emulationLayer()->send() instead
- i had to create a QByteArray before...
-
-TODO:
-alter Widget to use only QByteArray, where applicable.
-*/
-
-
-
-/*! \class Widget
-
- \brief Visible screen contents
-
- This class is responsible to map the `image' of a terminal emulation to the
- display. All the dependency of the emulation to a specific GUI or toolkit is
- localized here. Further, this widget has no knowledge about being part of an
- emulation, it simply work within the terminal emulation framework by exposing
- size and key events and by being ordered to show a new image.
-
- <ul>
- <li> The internal image has the size of the widget (evtl. rounded up)
- <li> The external image used in setImage can have any size.
- <li> (internally) the external image is simply copied to the internal
- when a setImage happens. During a resizeEvent no painting is done
- a paintEvent is expected to follow anyway.
- </ul>
-
- \sa TEScreen \sa Emulation
-*/
-
-/* FIXME:
- - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent
- - 'font_a' not used in mouse events
- - add destructor
-*/
-
-/* TODO
- - evtl. be sensitive to `paletteChange' while using default colors.
- - set different 'rounding' styles? I.e. have a mode to show clipped chars?
-*/
-
-// #include "config.h"
-#include "widget.h"
-#include <qpe/config.h>
-
-#include <qclipboard.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <signal.h>
-
-#include <assert.h>
-
-// #include "widget.moc"
-//#include <kapp.h>
-//#include <kcursor.h>
-//#include <kurl.h>
-//#include <kdebug.h>
-//#include <klocale.h>
-
-#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__)
-#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); }
-
-#define loc(X,Y) ((Y)*columns+(X))
-
-//FIXME: the rim should normally be 1, 0 only when running in full screen mode.
-#define rimX 0 // left/right rim width
-#define rimY 0 // top/bottom rim high
-
-#define yMouseScroll 1
-// scroll increment used when dragging selection at top/bottom of window.
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Colors */
-/* */
-/* ------------------------------------------------------------------------- */
-
-//FIXME: the default color table is in session.C now.
-// We need a way to get rid of this one, here.
-static const ColorEntry base_color_table[TABLE_COLORS] =
-// The following are almost IBM standard color codes, with some slight
-// gamma correction for the dim colors to compensate for bright X screens.
-// It contains the 8 ansiterm/xterm colors in 2 intensities.
-{
- // Fixme: could add faint colors here, also.
- // normal
- ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
- ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
- ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
- ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
- ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
- // intensiv
- ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
- ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
- ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
- ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ),
- ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
-};
-
-/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
-
- Code 0 1 2 3 4 5 6 7
- ----------- ------- ------- ------- ------- ------- ------- ------- -------
- ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
- IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
-*/
-
-QColor Widget::getDefaultBackColor()
-{
- return color_table[DEFAULT_BACK_COLOR].color;
-}
-
-const ColorEntry* Widget::getColorTable() const
-{
- return color_table;
-}
-
-const ColorEntry* Widget::getdefaultColorTable() const
-{
- return base_color_table;
-}
-
-
-const QPixmap *Widget::backgroundPixmap()
-{
- static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm");
- const QPixmap *pm = bg;
- return pm;
-}
-
-void Widget::setColorTable(const ColorEntry table[])
-{
- for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i];
-
- const QPixmap* pm = backgroundPixmap();
- if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color);
- update();
-}
-
-//FIXME: add backgroundPixmapChanged.
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Font */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*
- The VT100 has 32 special graphical characters. The usual vt100 extended
- xterm fonts have these at 0x00..0x1f.
-
- QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
- come in here as proper unicode characters.
-
- We treat non-iso10646 fonts as VT100 extended and do the requiered mapping
- from unicode to 0x00..0x1f. The remaining translation is then left to the
- QCodec.
-*/
-
-// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
-
-unsigned short vt100_graphics[32] =
-{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
- 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
- 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
- 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
- 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
-};
-
-static QChar vt100extended(QChar c)
-{
- switch (c.unicode())
- {
- case 0x25c6 : return 1;
- case 0x2592 : return 2;
- case 0x2409 : return 3;
- case 0x240c : return 4;
- case 0x240d : return 5;
- case 0x240a : return 6;
- case 0x00b0 : return 7;
- case 0x00b1 : return 8;
- case 0x2424 : return 9;
- case 0x240b : return 10;
- case 0x2518 : return 11;
- case 0x2510 : return 12;
- case 0x250c : return 13;
- case 0x2514 : return 14;
- case 0x253c : return 15;
- case 0xf800 : return 16;
- case 0xf801 : return 17;
- case 0x2500 : return 18;
- case 0xf803 : return 19;
- case 0xf804 : return 20;
- case 0x251c : return 21;
- case 0x2524 : return 22;
- case 0x2534 : return 23;
- case 0x252c : return 24;
- case 0x2502 : return 25;
- case 0x2264 : return 26;
- case 0x2265 : return 27;
- case 0x03c0 : return 28;
- case 0x2260 : return 29;
- case 0x00a3 : return 30;
- case 0x00b7 : return 31;
- }
- return c;
-}
-
-static QChar identicalMap(QChar c)
-{
- return c;
-}
-
-void Widget::fontChange(const QFont &)
-{
- QFontMetrics fm(font());
- font_h = fm.height();
- font_w = fm.maxWidth();
- font_a = fm.ascent();
-//printf("font_h: %d\n",font_h);
-//printf("font_w: %d\n",font_w);
-//printf("font_a: %d\n",font_a);
-//printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii());
-//printf("rawname: %s\n",font().rawName().ascii());
- fontMap =
-#if QT_VERSION < 300
- strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646")
- ? vt100extended
- :
-#endif
- identicalMap;
- propagateSize();
- update();
-}
-
-void Widget::setVTFont(const QFont& f)
-{
- QFrame::setFont(f);
-}
-
-QFont Widget::getVTFont() {
- return font();
-}
-
-void Widget::setFont(const QFont &)
-{
- // ignore font change request if not coming from konsole itself
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Constructor / Destructor */
-/* */
-/* ------------------------------------------------------------------------- */
-
-Widget::Widget(QWidget *parent, const char *name) : QFrame(parent,name)
-{
-#ifndef QT_NO_CLIPBOARD
- cb = QApplication::clipboard();
- QObject::connect( (QObject*)cb, SIGNAL(dataChanged()),
- this, SLOT(onClearSelection()) );
-#endif
-
- scrollbar = new QScrollBar(this);
- scrollbar->setCursor( arrowCursor );
- connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
-
- Config cfg("Konsole");
- cfg.setGroup("ScrollBar");
- switch( cfg.readNumEntry("Position",2)){
- case 0:
- scrollLoc = SCRNONE;
- break;
- case 1:
- scrollLoc = SCRLEFT;
- break;
- case 2:
- scrollLoc = SCRRIGHT;
- break;
- };
-
- blinkT = new QTimer(this);
- connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent()));
- // blinking = FALSE;
- blinking = TRUE;
-
- resizing = FALSE;
- actSel = 0;
- image = 0;
- lines = 1;
- columns = 1;
- font_w = 1;
- font_h = 1;
- font_a = 1;
- word_selection_mode = FALSE;
-
- setMouseMarks(TRUE);
- setVTFont( QFont("fixed") );
- setColorTable(base_color_table); // init color table
-
- qApp->installEventFilter( this ); //FIXME: see below
-// KCursor::setAutoHideCursor( this, true );
-
- // Init DnD ////////////////////////////////////////////////////////////////
- currentSession = NULL;
-// setAcceptDrops(true); // attempt
-// m_drop = new QPopupMenu(this);
-// m_drop->insertItem( QString("Paste"), 0);
-// m_drop->insertItem( QString("cd"), 1);
-// connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int)));
-
- // we need focus so that the auto-hide cursor feature works
- setFocus();
- setFocusPolicy( WheelFocus );
-}
-
-//FIXME: make proper destructor
-// Here's a start (David)
-Widget::~Widget()
-{
- qApp->removeEventFilter( this );
- if (image) free(image);
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Display Operations */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*!
- attributed string draw primitive
-*/
-
-void Widget::drawAttrStr(QPainter &paint, QRect rect,
- QString& str, Character attr, BOOL pm, BOOL clear)
-{
- if (pm && color_table[attr.b].transparent)
- {
- paint.setBackgroundMode( TransparentMode );
- if (clear) erase(rect);
- }
- else
- {
- if (blinking)
- paint.fillRect(rect, color_table[attr.b].color);
- else
- {
- paint.setBackgroundMode( OpaqueMode );
- paint.setBackgroundColor( color_table[attr.b].color );
- }
- }
-
- if (color_table[attr.f].bold)
- paint.setPen(QColor( 0x8F, 0x00, 0x00 ));
- else
- paint.setPen(color_table[attr.f].color);
-
- paint.drawText(rect.x(),rect.y()+font_a, str);
-
- if (attr.r & RE_UNDERLINE)
- paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 );
-}
-
-/*!
- The image can only be set completely.
-
- The size of the new image may or may not match the size of the widget.
-*/
-
-void Widget::setImage(const Character* const newimg, int lines, int columns)
-{ int y,x,len;
- const QPixmap* pm = backgroundPixmap();
- QPainter paint;
- setUpdatesEnabled(FALSE);
- paint.begin( this );
-HCNT("setImage");
-
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
- hasBlinker = FALSE;
-
- int cf = -1; // undefined
- int cb = -1; // undefined
- int cr = -1; // undefined
-
- int lins = QMIN(this->lines, QMAX(0,lines ));
- int cols = QMIN(this->columns,QMAX(0,columns));
- QChar *disstrU = new QChar[cols];
-
-//{ static int cnt = 0; printf("setImage %d\n",cnt++); }
- for (y = 0; y < lins; y++)
- {
- const Character* lcl = &image[y*this->columns];
- const Character* const ext = &newimg[y*columns];
- if (!resizing) // not while resizing, we're expecting a paintEvent
- for (x = 0; x < cols; x++)
- {
- hasBlinker |= (ext[x].r & RE_BLINK);
- if (ext[x] != lcl[x])
- {
- cr = ext[x].r;
- cb = ext[x].b;
- if (ext[x].f != cf) cf = ext[x].f;
- int lln = cols - x;
- disstrU[0] = fontMap(ext[x+0].c);
- for (len = 1; len < lln; len++)
- {
- if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr ||
- ext[x+len] == lcl[x+len] )
- break;
- disstrU[len] = fontMap(ext[x+len].c);
- }
- QString unistr(disstrU,len);
- drawAttrStr(paint,
- QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h),
- unistr, ext[x], pm != NULL, true);
- x += len - 1;
- }
- }
- // finally, make `image' become `newimg'.
- memcpy((void*)lcl,(const void*)ext,cols*sizeof(Character));
- }
- drawFrame( &paint );
- paint.end();
- setUpdatesEnabled(TRUE);
- if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms
- if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; }
- delete [] disstrU;
-}
-
-// paint Event ////////////////////////////////////////////////////
-
-/*!
- The difference of this routine vs. the `setImage' is,
- that the drawing does not include a difference analysis
- between the old and the new image. Instead, the internal
- image is used and the painting bound by the PaintEvent box.
-*/
-
-void Widget::paintEvent( QPaintEvent* pe )
-{
-
-//{ static int cnt = 0; printf("paint %d\n",cnt++); }
- const QPixmap* pm = backgroundPixmap();
- QPainter paint;
- setUpdatesEnabled(FALSE);
- paint.begin( this );
- paint.setBackgroundMode( TransparentMode );
-HCNT("paintEvent");
-
- // Note that the actual widget size can be slightly larger
- // that the image (the size is truncated towards the smaller
- // number of characters in `resizeEvent'. The paint rectangle
- // can thus be larger than the image, but less then the size
- // of one character.
-
- QRect rect = pe->rect().intersect(contentsRect());
-
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
-
- int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w));
- int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h));
- int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w));
- int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h));
-
- /*
- printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly,
- rect.left(), rect.right(), rect.top(), rect.bottom());
- */
-
- // if (pm != NULL && color_table[image->b].transparent)
- // erase(rect);
- // BL: I have no idea why we need this, and it breaks the refresh.
-
- QChar *disstrU = new QChar[columns];
- for (int y = luy; y <= rly; y++)
- for (int x = lux; x <= rlx; x++)
- {
- int len = 1;
- disstrU[0] = fontMap(image[loc(x,y)].c);
- int cf = image[loc(x,y)].f;
- int cb = image[loc(x,y)].b;
- int cr = image[loc(x,y)].r;
- while (x+len <= rlx &&
- image[loc(x+len,y)].f == cf &&
- image[loc(x+len,y)].b == cb &&
- image[loc(x+len,y)].r == cr )
- {
- disstrU[len] = fontMap(image[loc(x+len,y)].c);
- len += 1;
- }
- QString unistr(disstrU,len);
- drawAttrStr(paint,
- QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h),
- unistr, image[loc(x,y)], pm != NULL, false);
- x += len - 1;
- }
- delete [] disstrU;
- drawFrame( &paint );
- paint.end();
- setUpdatesEnabled(TRUE);
-}
-
-void Widget::blinkEvent()
-{
- blinking = !blinking;
- repaint(FALSE);
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Resizing */
-/* */
-/* ------------------------------------------------------------------------- */
-
-void Widget::resizeEvent(QResizeEvent* ev)
-{
-// printf("resize: %d,%d\n",ev->size().width(),ev->size().height());
- //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h);
- //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h);
- //printf("curren: %d,%d\n",width(),height());
-HCNT("resizeEvent");
-
- // see comment in `paintEvent' concerning the rounding.
- //FIXME: could make a routine here; check width(),height()
- assert(ev->size().width() == width());
- assert(ev->size().height() == height());
-
- propagateSize();
-}
-
-void Widget::propagateSize()
-{
- Character* oldimg = image;
- int oldlin = lines;
- int oldcol = columns;
- makeImage();
- // we copy the old image to reduce flicker
- int lins = QMIN(oldlin,lines);
- int cols = QMIN(oldcol,columns);
- if (oldimg)
- {
- for (int lin = 0; lin < lins; lin++)
- memcpy((void*)&image[columns*lin],
- (void*)&oldimg[oldcol*lin],cols*sizeof(Character));
- free(oldimg); //FIXME: try new,delete
- }
- else
- clearImage();
-
- //NOTE: control flows from the back through the chest right into the eye.
- // `emu' will call back via `setImage'.
-
- resizing = TRUE;
- emit changedImageSizeSignal(lines, columns); // expose resizeEvent
- resizing = FALSE;
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Scrollbar */
-/* */
-/* ------------------------------------------------------------------------- */
-
-void Widget::scrollChanged(int)
-{
- emit changedHistoryCursor(scrollbar->value()); //expose
-}
-
-void Widget::setScroll(int cursor, int slines)
-{
- disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
- scrollbar->setRange(0,slines);
- scrollbar->setSteps(1,lines);
- scrollbar->setValue(cursor);
- connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int)));
-}
-
-void Widget::setScrollbarLocation(int loc)
-{
- if (scrollLoc == loc) return; // quickly
- scrollLoc = loc;
- propagateSize();
- update();
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Mouse */
-/* */
-/* ------------------------------------------------------------------------- */
-
-/*!
- Three different operations can be performed using the mouse, and the
- routines in this section serve all of them:
-
- 1) The press/release events are exposed to the application
- 2) Marking (press and move left button) and Pasting (press middle button)
- 3) The right mouse button is used from the configuration menu
-
- NOTE: During the marking process we attempt to keep the cursor within
- the bounds of the text as being displayed by setting the mouse position
- whenever the mouse has left the text area.
-
- Two reasons to do so:
- 1) QT does not allow the `grabMouse' to confine-to the Widget.
- Thus a `XGrapPointer' would have to be used instead.
- 2) Even if so, this would not help too much, since the text area
- of the Widget is normally not identical with it's bounds.
-
- The disadvantage of the current handling is, that the mouse can visibly
- leave the bounds of the widget and is then moved back. Because of the
- current construction, and the reasons mentioned above, we cannot do better
- without changing the overall construction.
-*/
-
-/*!
-*/
-
-void Widget::mousePressEvent(QMouseEvent* ev)
-{
-//printf("press [%d,%d] %d\n",ev->x()/font_w,ev->y()/font_h,ev->button());
- if ( !contentsRect().contains(ev->pos()) ) return;
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
-
- word_selection_mode = FALSE;
-
-//printf("press top left [%d,%d] by=%d\n",tLx,tLy, bY);
- if ( ev->button() == LeftButton)
- {
- QPoint pos = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
-
- if ( ev->state() & ControlButton ) preserve_line_breaks = FALSE ;
-
- if (mouse_marks || (ev->state() & ShiftButton))
- {
- emit clearSelectionSignal();
- iPntSel = pntSel = pos;
- actSel = 1; // left mouse button pressed but nothing selected yet.
- grabMouse( /*crossCursor*/ ); // handle with care!
- }
- else
- {
- emit mouseSignal( 0, pos.x() + 1, pos.y() + 1 ); // left button
- }
- }
- if ( ev->button() == MidButton )
- {
- emitSelection();
- }
- if ( ev->button() == RightButton ) // Configure
- {
- emit configureRequest( this, ev->state()&(ShiftButton|ControlButton), ev->x(), ev->y() );
- }
-}
-
-void Widget::mouseMoveEvent(QMouseEvent* ev)
-{
- // for auto-hiding the cursor, we need mouseTracking
- if (ev->state() == NoButton ) return;
-
- if (actSel == 0) return;
-
- // don't extend selection while pasting
- if (ev->state() & MidButton) return;
-
- //if ( !contentsRect().contains(ev->pos()) ) return;
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
- int scroll = scrollbar->value();
-
- // we're in the process of moving the mouse with the left button pressed
- // the mouse cursor will kept catched within the bounds of the text in
- // this widget.
-
- // Adjust position within text area bounds. See FIXME above.
- QPoint pos = ev->pos();
- if ( pos.x() < tLx+blX ) pos.setX( tLx+blX );
- if ( pos.x() > tLx+blX+columns*font_w-1 ) pos.setX( tLx+blX+columns*font_w );
- if ( pos.y() < tLy+bY ) pos.setY( tLy+bY );
- if ( pos.y() > tLy+bY+lines*font_h-1 ) pos.setY( tLy+bY+lines*font_h-1 );
- // check if we produce a mouse move event by this
- if ( pos != ev->pos() ) cursor().setPos(mapToGlobal(pos));
-
- if ( pos.y() == tLy+bY+lines*font_h-1 )
- {
- scrollbar->setValue(scrollbar->value()+yMouseScroll); // scrollforward
- }
- if ( pos.y() == tLy+bY )
- {
- scrollbar->setValue(scrollbar->value()-yMouseScroll); // scrollback
- }
-
- QPoint here = QPoint((pos.x()-tLx-blX)/font_w,(pos.y()-tLy-bY)/font_h);
- QPoint ohere;
- bool swapping = FALSE;
-
- if ( word_selection_mode )
- {
- // Extend to word boundaries
- int i;
- int selClass;
-
- bool left_not_right = ( here.y() < iPntSel.y() ||
- here.y() == iPntSel.y() && here.x() < iPntSel.x() );
- bool old_left_not_right = ( pntSel.y() < iPntSel.y() ||
- pntSel.y() == iPntSel.y() && pntSel.x() < iPntSel.x() );
- swapping = left_not_right != old_left_not_right;
-
- // Find left (left_not_right ? from here : from start)
- QPoint left = left_not_right ? here : iPntSel;
- i = loc(left.x(),left.y());
- selClass = charClass(image[i].c);
- while ( left.x() > 0 && charClass(image[i-1].c) == selClass )
- { i--; left.rx()--; }
-
- // Find left (left_not_right ? from start : from here)
- QPoint right = left_not_right ? iPntSel : here;
- i = loc(right.x(),right.y());
- selClass = charClass(image[i].c);
- while ( right.x() < columns-1 && charClass(image[i+1].c) == selClass )
- { i++; right.rx()++; }
-
- // Pick which is start (ohere) and which is extension (here)
- if ( left_not_right )
- {
- here = left; ohere = right;
- }
- else
- {
- here = right; ohere = left;
- }
- }
-
- if (here == pntSel && scroll == scrollbar->value()) return; // not moved
-
- if ( word_selection_mode ) {
- if ( actSel < 2 || swapping ) {
- emit beginSelectionSignal( ohere.x(), ohere.y() );
- }
- } else if ( actSel < 2 ) {
- emit beginSelectionSignal( pntSel.x(), pntSel.y() );
- }
-
- actSel = 2; // within selection
- pntSel = here;
- emit extendSelectionSignal( here.x(), here.y() );
-}
-
-void Widget::mouseReleaseEvent(QMouseEvent* ev)
-{
-//printf("release [%d,%d] %d\n",ev->x()/font_w,ev->y()/font_h,ev->button());
- if ( ev->button() == LeftButton)
- {
- if ( actSel > 1 ) emit endSelectionSignal(preserve_line_breaks);
- preserve_line_breaks = TRUE;
- actSel = 0;
-
- //FIXME: emits a release event even if the mouse is
- // outside the range. The procedure used in `mouseMoveEvent'
- // applies here, too.
-
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
-
- if (!mouse_marks && !(ev->state() & ShiftButton))
- emit mouseSignal( 3, // release
- (ev->x()-tLx-blX)/font_w + 1,
- (ev->y()-tLy-bY)/font_h + 1 );
- releaseMouse();
- }
-}
-
-void Widget::mouseDoubleClickEvent(QMouseEvent* ev)
-{
- if ( ev->button() != LeftButton) return;
-
- QPoint tL = contentsRect().topLeft();
- int tLx = tL.x();
- int tLy = tL.y();
- QPoint pos = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
-
- // pass on double click as two clicks.
- if (!mouse_marks && !(ev->state() & ShiftButton))
- {
- emit mouseSignal( 0, pos.x()+1, pos.y()+1 ); // left button
- emit mouseSignal( 3, pos.x()+1, pos.y()+1 ); // release
- emit mouseSignal( 0, pos.x()+1, pos.y()+1 ); // left button
- return;
- }
-
-
- emit clearSelectionSignal();
- QPoint bgnSel = pos;
- QPoint endSel = QPoint((ev->x()-tLx-blX)/font_w,(ev->y()-tLy-bY)/font_h);
- int i = loc(bgnSel.x(),bgnSel.y());
- iPntSel = bgnSel;
-
- word_selection_mode = TRUE;
-
- // find word boundaries...
- int selClass = charClass(image[i].c);
- {
- // set the start...
- int x = bgnSel.x();
- while ( x > 0 && charClass(image[i-1].c) == selClass )
- { i--; x--; }
- bgnSel.setX(x);
- emit beginSelectionSignal( bgnSel.x(), bgnSel.y() );
-
- // set the end...
- i = loc( endSel.x(), endSel.y() );
- x = endSel.x();
- while( x < columns-1 && charClass(image[i+1].c) == selClass )
- { i++; x++ ; }
- endSel.setX(x);
- actSel = 2; // within selection
- emit extendSelectionSignal( endSel.x(), endSel.y() );
- emit endSelectionSignal(preserve_line_breaks);
- preserve_line_breaks = TRUE;
- }
-}
-
-void Widget::focusInEvent( QFocusEvent * )
-{
-
- // do nothing, to prevent repainting
-}
-
-
-void Widget::focusOutEvent( QFocusEvent * )
-{
- // do nothing, to prevent repainting
-}
-
-bool Widget::focusNextPrevChild( bool next )
-{
- if (next)
- return false; // This disables changing the active part in konqueror
- // when pressing Tab
- return QFrame::focusNextPrevChild( next );
-}
-
-
-int Widget::charClass(char ch) const
-{
- // This might seem like overkill, but imagine if ch was a Unicode
- // character (Qt 2.0 QChar) - it might then be sensible to separate
- // the different language ranges, etc.
-
- if ( isspace(ch) ) return ' ';
-
- static const char *word_characters = ":@-./_~";
- if ( isalnum(ch) || strchr(word_characters, ch) )
- return 'a';
-
- // Everything else is weird
- return 1;
-}
-
-void Widget::setMouseMarks(bool on)
-{
- mouse_marks = on;
- setCursor( mouse_marks ? ibeamCursor : arrowCursor );
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Clipboard */
-/* */
-/* ------------------------------------------------------------------------- */
-
-#undef KeyPress
-
-void Widget::emitSelection()
-// Paste Clipboard by simulating keypress events
-{
-#ifndef QT_NO_CLIPBOARD
- QString text = QApplication::clipboard()->text();
- if ( ! text.isNull() )
- {
- text.replace(QRegExp("\n"), "\r");
- QKeyEvent e(QEvent::KeyPress, 0, -1, 0, text);
- emit keyPressedSignal(&e); // expose as a big fat keypress event
- emit clearSelectionSignal();
- }
-#endif
-}
-
-void Widget::emitText(QString text)
-{
- QKeyEvent e(QEvent::KeyPress, 0, -1, 0, text);
- emit keyPressedSignal(&e); // expose as a big fat keypress event
-}
-
-void Widget::pasteClipboard( )
-{
- emitSelection();
-}
-
-void Widget::setSelection(const QString& t)
-{
-#ifndef QT_NO_CLIPBOARD
- // Disconnect signal while WE set the clipboard
- QObject *cb = QApplication::clipboard();
- QObject::disconnect( cb, SIGNAL(dataChanged()),
- this, SLOT(onClearSelection()) );
-
- QApplication::clipboard()->setText(t);
-
- QObject::connect( cb, SIGNAL(dataChanged()),
- this, SLOT(onClearSelection()) );
-#endif
-}
-
-void Widget::onClearSelection()
-{
- emit clearSelectionSignal();
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Keyboard */
-/* */
-/* ------------------------------------------------------------------------- */
-
-//FIXME: an `eventFilter' has been installed instead of a `keyPressEvent'
-// due to a bug in `QT' or the ignorance of the author to prevent
-// repaint events being emitted to the screen whenever one leaves
-// or reenters the screen to/from another application.
-//
-// Troll says one needs to change focusInEvent() and focusOutEvent(),
-// which would also let you have an in-focus cursor and an out-focus
-// cursor like xterm does.
-
-// for the auto-hide cursor feature, I added empty focusInEvent() and
-// focusOutEvent() so that update() isn't called.
-// For auto-hide, we need to get keypress-events, but we only get them when
-// we have focus.
-
-void Widget::doScroll(int lines)
-{
- scrollbar->setValue(scrollbar->value()+lines);
-}
-
-bool Widget::eventFilter( QObject *obj, QEvent *e )
-{
- if ( (e->type() == QEvent::Accel ||
- e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) {
- static_cast<QKeyEvent *>( e )->ignore();
- return true;
- }
- if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
- return FALSE; // not us
- if ( e->type() == QEvent::Wheel) {
- QApplication::sendEvent(scrollbar, e);
- }
-
-#ifdef FAKE_CTRL_AND_ALT
- static bool control = FALSE;
- static bool alt = FALSE;
- bool dele=FALSE;
- if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
- QKeyEvent* ke = (QKeyEvent*)e;
- bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
- switch (ke->key()) {
- case Key_F9: // let this be "Control"
- control = keydown;
- e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
- dele=TRUE;
- break;
- case Key_F13: // let this be "Alt"
- alt = keydown;
- e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state());
- dele=TRUE;
- break;
- default:
- if ( control ) {
- int a = toupper(ke->ascii())-64;
- if ( a >= 0 && a < ' ' ) {
- e = new QKeyEvent(e->type(), ke->key(),
- a, ke->state()|ControlButton, QChar(a,0));
- dele=TRUE;
- }
- }
- if ( alt ) {
- e = new QKeyEvent(e->type(), ke->key(),
- ke->ascii(), ke->state()|AltButton, ke->text());
- dele=TRUE;
- }
- }
- }
-#endif
-
- if ( e->type() == QEvent::KeyPress ) {
- QKeyEvent* ke = (QKeyEvent*)e;
- actSel=0; // Key stroke implies a screen update, so Widget won't
- // know where the current selection is.
-
- if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker
- emitText("\\"); // expose
- } else
- emit keyPressedSignal(ke); // expose
- ke->accept();
-#ifdef FAKE_CTRL_AND_ALT
- if ( dele ) delete e;
-#endif
- return true; // stop the event
- }
- if ( e->type() == QEvent::Enter ) {
- QObject::disconnect( (QObject*)cb, SIGNAL(dataChanged()),
- this, SLOT(onClearSelection()) );
- }
- if ( e->type() == QEvent::Leave ) {
- QObject::connect( (QObject*)cb, SIGNAL(dataChanged()),
- this, SLOT(onClearSelection()) );
- }
- return QFrame::eventFilter( obj, e );
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Frame */
-/* */
-/* ------------------------------------------------------------------------- */
-
-void Widget::frameChanged()
-{
- propagateSize();
- update();
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Sound */
-/* */
-/* ------------------------------------------------------------------------- */
-
-void Widget::Bell()
-{
- QApplication::beep();
-}
-
-/* ------------------------------------------------------------------------- */
-/* */
-/* Auxiluary */
-/* */
-/* ------------------------------------------------------------------------- */
-
-void Widget::clearImage()
-// initialize the image
-// for internal use only
-{
- for (int y = 0; y < lines; y++)
- for (int x = 0; x < columns; x++)
- {
- image[loc(x,y)].c = 0xff; //' ';
- image[loc(x,y)].f = 0xff; //DEFAULT_FORE_COLOR;
- image[loc(x,y)].b = 0xff; //DEFAULT_BACK_COLOR;
- image[loc(x,y)].r = 0xff; //DEFAULT_RENDITION;
- }
-}
-
-// Create Image ///////////////////////////////////////////////////////
-
-void Widget::calcGeometry()
-{
- //FIXME: set rimX == rimY == 0 when running in full screen mode.
-
- scrollbar->resize(QApplication::style().scrollBarExtent().width(),
- contentsRect().height());
- switch(scrollLoc)
- {
- case SCRNONE :
- columns = ( contentsRect().width() - 2 * rimX ) / font_w;
- blX = (contentsRect().width() - (columns*font_w) ) / 2;
- brX = blX;
- scrollbar->hide();
- break;
- case SCRLEFT :
- columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
- brX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
- blX = brX + scrollbar->width();
- scrollbar->move(contentsRect().topLeft());
- scrollbar->show();
- break;
- case SCRRIGHT:
- columns = ( contentsRect().width() - 2 * rimX - scrollbar->width()) / font_w;
- blX = (contentsRect().width() - (columns*font_w) - scrollbar->width() ) / 2;
- brX = blX;
- scrollbar->move(contentsRect().topRight() - QPoint(scrollbar->width()-1,0));
- scrollbar->show();
- break;
- }
- //FIXME: support 'rounding' styles
- lines = ( contentsRect().height() - 2 * rimY ) / font_h;
- bY = (contentsRect().height() - (lines *font_h)) / 2;
-}
-
-void Widget::makeImage()
-//FIXME: rename 'calcGeometry?
-{
- calcGeometry();
- image = (Character*) malloc(lines*columns*sizeof(Character));
- clearImage();
-}
-
-// calculate the needed size
-QSize Widget::calcSize(int cols, int lins) const
-{
- int frw = width() - contentsRect().width();
- int frh = height() - contentsRect().height();
- int scw = (scrollLoc==SCRNONE?0:scrollbar->width());
- return QSize( font_w*cols + 2*rimX + frw + scw, font_h*lins + 2*rimY + frh );
-}
-
-QSize Widget::sizeHint() const
-{
- return size();
-}
-
-void Widget::styleChange(QStyle &)
-{
- propagateSize();
-}
-
-#ifndef QT_NO_DRAGANDDROP
-
-/* --------------------------------------------------------------------- */
-/* */
-/* Drag & Drop */
-/* */
-/* --------------------------------------------------------------------- */
-
-
-void Widget::dragEnterEvent(QDragEnterEvent* e)
-{
- e->accept(QTextDrag::canDecode(e) ||
- QUriDrag::canDecode(e));
-}
-
-void Widget::dropEvent(QDropEvent* event)
-{
- // The current behaviour when url(s) are dropped is
- // * if there is only ONE url and if it's a LOCAL one, ask for paste or cd
- // * in all other cases, just paste
- // (for non-local ones, or for a list of URLs, 'cd' is nonsense)
- QStrList strlist;
- int file_count = 0;
- dropText = "";
- bool bPopup = true;
-
- if(QUriDrag::decode(event, strlist)) {
- if (strlist.count()) {
- for(const char* p = strlist.first(); p; p = strlist.next()) {
- if(file_count++ > 0) {
- dropText += " ";
- bPopup = false; // more than one file, don't popup
- }
-
-/*
- KURL url(p);
- if (url.isLocalFile()) {
- dropText += url.path(); // local URL : remove protocol
- }
- else {
- dropText += url.prettyURL();
- bPopup = false; // a non-local file, don't popup
- }
-*/
-
- }
-
- if (bPopup)
- // m_drop->popup(pos() + event->pos());
- m_drop->popup(mapToGlobal(event->pos()));
- else
- {
- if (currentSession) {
- //currentSession->getEmulation()->sendString(dropText.local8Bit());
- QByteArray tmp;
- // ibot: this should be pretty wrong...
- // now it sends to the right layer
- currentSession-> emulationLayer()->send( tmp.setRawData( dropText.local8Bit()));
- }
- // kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
- }
- }
- }
- else if(QTextDrag::decode(event, dropText)) {
-// kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
- if (currentSession) {
- //currentSession->getEmulation()->sendString(dropText.local8Bit());
- QByteArray tmp;
- currentSession->emulationLayer()->send( tmp.setRawData( dropText.local8Bit()));
- }
- // Paste it
- }
-}
-#endif
-
-
-void Widget::drop_menu_activated(int item)
-{
-#ifndef QT_NO_DRAGANDDROP
- QByteArray tmp;
- switch (item)
- {
- case 0: // paste
- //currentSession->getEmulation()->sendString(dropText.local8Bit());
- currentSession->emulationLayer()->send( tmp.setRawData( dropText.local8Bit()));
-
-// KWM::activate((Window)this->winId());
- break;
- case 1: // cd ...
- //currentSession->getEmulation()->sendString("cd ");
- tmp.setRawData( "cd " );
- currentSession->emulationLayer()->send( tmp );
- struct stat statbuf;
- if ( ::stat( QFile::encodeName( dropText ), &statbuf ) == 0 )
- {
- if ( !S_ISDIR(statbuf.st_mode) )
- {
-/*
- KURL url;
- url.setPath( dropText );
- dropText = url.directory( true, false ); // remove filename
-*/
- }
- }
- dropText.replace(QRegExp(" "), "\\ "); // escape spaces
- QByteArray tmp2;
- tmp.setRawDate( dropText.local8Bit() + "\n" );
- //currentSession->getEmulation()->sendString(dropText.local8Bit());
- //currentSession->getEmulation()->sendString("\n");
- currentSession->emulationLayer()->send( tmp );
-// KWM::activate((Window)this->winId());
- break;
- }
-#endif
-}
-
diff --git a/noncore/apps/opie-console/widget.h b/noncore/apps/opie-console/widget.h
deleted file mode 100644
index cfd709c..0000000
--- a/noncore/apps/opie-console/widget.h
+++ b/dev/null
@@ -1,213 +0,0 @@
-/* ----------------------------------------------------------------------- */
-/* */
-/* [widget.h] Terminal Emulation Widget */
-/* */
-/* ----------------------------------------------------------------------- */
-/* */
-/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
-/* */
-/* This file was part of Konsole - an X terminal for KDE */
-/* */
-/* ----------------------------------------------------------------------- */
-/* */
-/* Ported Konsole to Qt/Embedded */
-/* */
-/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
-/* */
-/* -------------------------------------------------------------------------- */
-/* */
-/* modified to suit opie-console */
-/* */
-/* Copyright (c) 2002 by opie developers <opie@handhelds.org> */
-/* */
-/* ------------------------------------------------------------------------ */
-
-// ibot: TODO *
-
-#ifndef WIDGET_H
-#define WIDGET_H
-
-#include <qapplication.h>
-#include <qwidget.h>
-#include <qlabel.h>
-#include <qtimer.h>
-#include <qcolor.h>
-#include <qkeycode.h>
-#include <qscrollbar.h>
-
-#include <qpopupmenu.h>
-
-#include "common.h"
-
-extern unsigned short vt100_graphics[32];
-
-class Session;
-
-// class Konsole;
-
-class Widget : public QFrame
-// a widget representing attributed text
-{ Q_OBJECT
-
-// friend class Konsole;
-
-public:
-
- Widget(QWidget *parent=0, const char *name=0);
- virtual ~Widget();
-
-public:
-
- QColor getDefaultBackColor();
-
- const ColorEntry* getColorTable() const;
- const ColorEntry* getdefaultColorTable() const;
- void setColorTable(const ColorEntry table[]);
-
- void setScrollbarLocation(int loc);
- enum { SCRNONE=0, SCRLEFT=1, SCRRIGHT=2 };
-
- void setScroll(int cursor, int lines);
- void doScroll(int lines);
-
- void emitSelection();
-
-public:
-
- void setImage(const Character* const newimg, int lines, int columns);
-
- int Lines() { return lines; }
- int Columns() { return columns; }
-
- void calcGeometry();
- void propagateSize();
- QSize calcSize(int cols, int lins) const;
-
- QSize sizeHint() const;
-
-public:
-
- void Bell();
- void emitText(QString text);
- void pasteClipboard();
-
-signals:
-
- void keyPressedSignal(QKeyEvent *e);
- void mouseSignal(int cb, int cx, int cy);
- void changedImageSizeSignal(int lines, int columns);
- void changedHistoryCursor(int value);
- void configureRequest( Widget*, int state, int x, int y );
-
- void clearSelectionSignal();
- void beginSelectionSignal( const int x, const int y );
- void extendSelectionSignal( const int x, const int y );
- void endSelectionSignal(const BOOL preserve_line_breaks);
-
-
-protected:
-
- virtual void styleChange( QStyle& );
-
- bool eventFilter( QObject *, QEvent * );
-
- void drawAttrStr(QPainter &paint, QRect rect,
- QString& str, Character attr, BOOL pm, BOOL clear);
- void paintEvent( QPaintEvent * );
-
- void resizeEvent(QResizeEvent*);
-
- void fontChange(const QFont &font);
- void frameChanged();
-
- void mouseDoubleClickEvent(QMouseEvent* ev);
- void mousePressEvent( QMouseEvent* );
- void mouseReleaseEvent( QMouseEvent* );
- void mouseMoveEvent( QMouseEvent* );
-
- void focusInEvent( QFocusEvent * );
- void focusOutEvent( QFocusEvent * );
- bool focusNextPrevChild( bool next );
-
-#ifndef QT_NO_DRAGANDDROP
- // Dnd
- void dragEnterEvent(QDragEnterEvent* event);
- void dropEvent(QDropEvent* event);
-#endif
-
- virtual int charClass(char) const;
-
- void clearImage();
-
-public:
- const QPixmap *backgroundPixmap();
-
- void setSelection(const QString &t);
-
- virtual void setFont(const QFont &);
- void setVTFont(const QFont &);
- QFont getVTFont();
-
- void setMouseMarks(bool on);
-
-public slots:
-
- void onClearSelection();
-
-protected slots:
-
- void scrollChanged(int value);
- void blinkEvent();
-
-private:
-
- QChar (*fontMap)(QChar); // possible vt100 font extention
-
- bool fixed_font; // has fixed pitch
- int font_h; // height
- int font_w; // width
- int font_a; // ascend
-
- int blX; // actual offset (left)
- int brX; // actual offset (right)
- int bY; // actual offset
-
- int lines;
- int columns;
- Character *image; // [lines][columns]
-
- ColorEntry color_table[TABLE_COLORS];
-
- BOOL resizing;
- bool mouse_marks;
-
- void makeImage();
-
- QPoint iPntSel; // initial selection point
- QPoint pntSel; // current selection point
- int actSel; // selection state
- BOOL word_selection_mode;
- BOOL preserve_line_breaks;
-
- QClipboard* cb;
- QScrollBar* scrollbar;
- int scrollLoc;
-
-//#define SCRNONE 0
-//#define SCRLEFT 1
-//#define SCRRIGHT 2
-
- BOOL blinking; // hide text in paintEvent
- BOOL hasBlinker; // has characters to blink
- QTimer* blinkT; // active when hasBlinker
- QPopupMenu* m_drop;
- QString dropText;
- public:
- // current session in this widget
- // ibot: switch from TESession to Session!
- Session *currentSession;
-private slots:
- void drop_menu_activated(int item);
-};
-
-#endif // TE_WIDGET_H
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp
deleted file mode 100644
index afded92..0000000
--- a/noncore/apps/opie-console/widget_layer.cpp
+++ b/dev/null
@@ -1,242 +0,0 @@
-/* ------------------------------------------------------------------------- */
-/* */
-/* widget_layer.cpp Widget Layer */
-/* */
-/* opie developers <opie@handhelds.org> */
-/* */
-/* ------------------------------------------------------------------------- */
-
-
-
-#include "widget_layer.h"
-
-
-#include <string.h>
-//#include <
-
-
-
-
-WidgetLayer::WidgetLayer( const Profile &config, QWidget *parent, const char *name ) : QFrame( parent, name )
-{
- // get the clipboard
- m_clipboard = QApplication::clipboard();
-
- // when data on clipboard changes, clear selection
- QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
- (QObject*)this, SLOT( onClearSelection() ) );
-
- // initialize vars:
- m_lines = 1;
- m_columns = 1;
- m_resizing = false;
-
- // just for demonstrating
- //m_image = QArray<Character>( m_lines * m_columns );
- m_image = QArray<Character>( 1 );
-
- // we need to install an event filter,
- // to emit keypresses.
- qApp->installEventFilter( this );
-
-}
-
-
-WidgetLayer::~WidgetLayer()
-{
- // clean up
- delete m_image;
-}
-
-
-QSize WidgetLayer::sizeHint()
-{
- return size();
-}
-
-
-/* --------------------------------- audio ---------------------------------- */
-
-void WidgetLayer::bell()
-{
- QApplication::beep();
-}
-
-bool WidgetLayer::eventFilter( QObject *obj, QEvent *e )
-{
- if ( (e->type() == QEvent::Accel ||
- e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) {
- static_cast<QKeyEvent *>( e )->ignore();
- return true;
- }
- if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
- return false; // not us
-
-#ifdef FAKE_CTRL_AND_ALT
- static bool control = false;
- static bool alt = false;
- bool dele = false;
- if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
- QKeyEvent* ke = (QKeyEvent*)e;
- bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
- switch (ke->key()) {
- case Key_F9: // let this be "Control"
- control = keydown;
- e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
- dele=TRUE;
- break;
- case Key_F13: // let this be "Alt"
- alt = keydown;
- e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state());
- dele=TRUE;
- break;
- default:
- if ( control ) {
- int a = toupper(ke->ascii())-64;
- if ( a >= 0 && a < ' ' ) {
- e = new QKeyEvent(e->type(), ke->key(),
- a, ke->state()|ControlButton,
-QChar(a,0));
- dele=TRUE;
- }
- }
- if ( alt ) {
- e = new QKeyEvent(e->type(), ke->key(),
- ke->ascii(), ke->state()|AltButton, ke->text());
- dele=TRUE;
- }
- }
- }
-#endif
-
- if ( e->type() == QEvent::KeyPress ) {
- QKeyEvent* ke = (QKeyEvent*)e;
- //actSel=0; // Key stroke implies a screen update, so Widget won't
- // know where the current selection is.
-
- if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker
- insertText("\\"); // expose
- } else
- emit keyPressed( ke ); // expose
- ke->accept();
-#ifdef FAKE_CTRL_AND_ALT
- if ( dele ) delete e;
-#endif
- return true; // stop the event
- }
- return QFrame::eventFilter( obj, e );
-}
-
-
-/* --------------------------------- screen --------------------------------- */
-
-
-void WidgetLayer::propagateSize()
-{
- QArray<Character> oldimage = m_image.copy();
- int oldlines = m_lines;
- int oldcolumns = m_columns;
-
- makeImage();
-
- // copy old image, to reduce flicker
- if ( ! oldimage.isEmpty() )
- {
- int lins = QMIN( oldlines, m_lines );
- int cols = QMIN( oldcolumns, m_columns );
- for ( int lin = 0; lin < lins; ++lin )
- {
- memcpy( (void*) &m_image[m_columns*lin],
- (void*) &oldimage[oldcolumns*lin],
- cols*sizeof( Character ) );
- }
- }
- else
- clearImage();
-
- delete oldimage;
-
- m_resizing = true;
- emit imageSizeChanged( m_lines, m_columns );
- m_resizing = false;
-}
-
-void WidgetLayer::makeImage()
-{
- calcGeometry();
- m_image = QArray<Character>( m_columns * m_lines );
- clearImage();
-}
-
-void WidgetLayer::clearImage()
-{
- //should this belong here??
- for ( int y = 0; y < m_lines; y++ )
- for ( int x = 0; x < m_columns; x++ )
- {
- m_image[loc(x,y)].c = 0xff;
- m_image[loc(x,y)].f = 0xff;
- m_image[loc(x,y)].b = 0xff;
- m_image[loc(x,y)].r = 0xff;
- }
-}
-
-/* --------------------------------- selection ------------------------------ */
-
-void WidgetLayer::pasteClipboard()
-{
- insertSelection();
-}
-
-
-void WidgetLayer::insertSelection()
-{
- QString text = QApplication::clipboard()->text();
- if ( ! text.isNull() )
- {
- text.replace( QRegExp( "\n" ), "\r" );
- insertText( text );
- // selection should be unselected
- emit selectionCleared();
- }
-}
-
-void WidgetLayer::insertText( QString text )
-{
- // text is inserted as key event
- QKeyEvent e( QEvent::KeyPress, 0, -1, 0, text);
- emit keyPressed( &e );
-}
-
-void WidgetLayer::onClearSelection()
-{
- emit selectionCleared();
-}
-
-void WidgetLayer::setSelection( const QString& text )
-{
- // why get the clipboard, we have it as instance var...
- QObject *m_clipboard = QApplication::clipboard();
-
- // we know, that cliboard changes, when we change clipboard
- QObject::disconnect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
- (QObject*) this, SLOT( selectionCleared() ) );
-
- QApplication::clipboard()->setText( text );
-
- QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
- (QObject*) this, SLOT( selectionCleared() ) );
-}
-
-
-/////////
-// special font characters
-/////////
-unsigned short vt100_graphics[32] =
-{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
- 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
- 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
- 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
- 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
-};
-
diff --git a/noncore/apps/opie-console/widget_layer.h b/noncore/apps/opie-console/widget_layer.h
deleted file mode 100644
index 6812711..0000000
--- a/noncore/apps/opie-console/widget_layer.h
+++ b/dev/null
@@ -1,265 +0,0 @@
-/* -------------------------------------------------------------------------- */
-/* */
-/* [widget_layer.h] Widget Layer */
-/* */
-/* -------------------------------------------------------------------------- */
-
-// proposal of a widget Layer in opie-console
-//
-// fellow devels:
-// just mail me (ibotty@web.de), what you additionally need from the main widget
-// (or say in chat)
-
-#ifndef WIDGET_LAYER_H
-#define WIDGET_LAYER_H
-
-// qt includes
-#include <qapplication.h>
-#include <qframe.h>
-#include <qarray.h>
-#include <qtimer.h>
-#include <qkeycode.h>
-#include <qclipboard.h>
-
-
-// opie-console includes
-#include "session.h"
-#include "common.h"
-#include "profile.h"
-
-
-/*
- * given a pseudo location ( column, line ),
- * returns the actual index, in the QArray<Character>
- */
-#define loc(X,Y) ((Y)*m_columns+(X))
-
-
-
-extern unsigned short vt100_graphics[32];
-
-class WidgetLayer : public QFrame
-{ Q_OBJECT
-
-public:
-
- /**
- * constructor
- * @param const Profile &config, the configuration for this widget
- * @param QWidget *parent, the parent widget
- * @param const char *name, the name of the widget, defaults to ""
- */
- WidgetLayer( const Profile& config, QWidget *parent=0, const char *name=0 );
-
- /**
- * destructor
- */
- virtual ~WidgetLayer();
-
-public:
- /**
- * sets the image
- * @param QArray<Character> const newimg, the new image
- * @param int lines, lines count of newimg
- * @param int columns, columns count of newimg
- */
- virtual void setImage( QArray<Character> const newimg, int lines, int colums ) = 0;
-
- /**
- * annoy the user
- */
- void bell();
-
- /**
- * @return int m_lines, the lines count
- */
- int lines() { return m_lines; }
-
- /**
- * @return int m_columns, the columns count
- */
- int columns() { return m_columns; }
-
- /**
- * insert current selection (currently this is only the clipboard)
- */
- void insertSelection();
-
- /**
- * insert text
- * @param QString text, the text to be inserted
- */
- void insertText( QString text );
-
- /**
- * set selection (clipboard) to text
- * @param const QString &text, the text to be selected
- */
- void setSelection( const QString &text );
-
- /**
- * paste content of clipboard
- */
- void pasteClipboard();
-
-
- /**
- * reload configuration
- * @param const Profile& config, the config to be used (may be the same as in constructor)
- */
- virtual void reloadConfig( const Profile& config ) = 0;
-
-
- /**
- * sets the scrollbar (if implemented by successor of this class)
- */
- virtual void setScroll( int cursor, int slines ) = 0;
-
- /**
- * scrolls (if implemented, by successor of this class)
- * @param int value, how much the widget should scroll up (positive value) or down (negative value)
- */
- virtual void scroll( int value ) = 0;
-
-
- virtual bool eventFilter( QObject *obj, QEvent *event );
-
-
- QSize sizeHint();
-
- virtual QSize calcSize( int cols, int lins ) const = 0;
-signals:
-
- /**
- * key was pressed
- */
- void keyPressed( QKeyEvent *e );
-
- /**
- * whenever Mouse selects something
- * @param int button, the button that us pressed :
- * 0 left Button
- * 3 Button released
- * @param int x, x position
- * @param int y, y position
- *
- * // numbering due to layout in old TEWidget
- */
- void mousePressed( int button, int x, int y );
-
- /**
- * size of image changed
- * @param int lines, line count of new size
- * @param int columns, column count of new size
- */
- void imageSizeChanged( int lines, int columns );
-
- /**
- * cursor in history changed
- * @param int value, value of history cursor
- */
- void historyCursorChanged( int value );
-
- /**
- * selection should be cleared
- */
- void selectionCleared();
-
- /**
- * selection begin
- * @param const int x, x position
- * @param const int y, y position
- */
- void selectionBegin( const int x, const int y );
-
- /**
- * selection extended
- * (from begin (s.a.) to x, y)
- * @param const int x, x position
- * @param const int y, y position
- */
- void selectionExtended( const int x, const int y );
-
- /**
- * selection end
- * @param const bool lineBreakPreserve, preserve line breaks in selection
- */
- void selectionEnd( const bool lineBreakPreserve );
-
-
-
-// protected methods
-protected:
-
- // image operations
-
- /**
- * changes image, to suit new size
- * TODO: find meaningful name!
- */
- void propagateSize();
-
- /**
- *determines count of lines and columns
- */
- virtual void calcGeometry() = 0;
-
- /**
- * makes an empty image
- */
- void makeImage();
-
- /**
- * clears the image
- */
- void clearImage();
-
-protected slots:
-
- /**
- * clear selection
- */
- void onClearSelection();
-
-
-// protected vars
-protected:
-
- /**
- * current Session
- */
- Session *m_session;
-
- /**
- * current character image
- *
- * a Character at loc( column, line )
- * has the actual index:
- * ix = line * m_columns + column;
- *
- * use loc( x, y ) macro to access.
- */
- QArray<Character> m_image;
-
- /**
- * lines count
- */
- int m_lines;
-
- /**
- * columns count
- */
- int m_columns;
-
- /**
- * clipboard
- */
- QClipboard* m_clipboard;
-
- /**
- * whether widget is resizing
- */
- bool m_resizing;
-};
-
-#endif // WIDGET_LAYER_H