-rw-r--r-- | noncore/apps/opie-console/PLANS | 12 | ||||
-rw-r--r-- | noncore/apps/opie-console/default.cpp | 7 | ||||
-rw-r--r-- | noncore/apps/opie-console/default.h | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/emulation_layer.h | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/keytrans.cpp | 3 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.cpp | 48 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.h | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/metafactory.cpp | 25 | ||||
-rw-r--r-- | noncore/apps/opie-console/metafactory.h | 21 | ||||
-rw-r--r-- | noncore/apps/opie-console/profilemanager.cpp | 44 | ||||
-rw-r--r-- | noncore/apps/opie-console/profilemanager.h | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.cpp | 49 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.h | 38 | ||||
-rw-r--r-- | noncore/apps/opie-console/tabwidget.cpp | 21 | ||||
-rw-r--r-- | noncore/apps/opie-console/tabwidget.h | 5 | ||||
-rw-r--r-- | noncore/apps/opie-console/vt102emulation.cpp | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/vt102emulation.h | 2 |
17 files changed, 248 insertions, 41 deletions
diff --git a/noncore/apps/opie-console/PLANS b/noncore/apps/opie-console/PLANS index 8f6b807..0ec45cb 100644 --- a/noncore/apps/opie-console/PLANS +++ b/noncore/apps/opie-console/PLANS @@ -1,4 +1,6 @@ can we please get a working serial connection for now? if that works i can test file transfers and stuff. -hash +sure. I finished the ConfigDialog and now doing the Profile->Session +stuff. Then you just need to click Open -zecke From a UNIX point of view we want to do something like minicom @@ -19,15 +21,17 @@ Framework Serial IOLayer Saving and Restoring Profiles +ConfigDialog Framework +FilesendingLayer - hash TASKS in progress: Profile->Session and MainWidget --- Harlekin -FilesendingLayer - hash IOLayer - wazlaf -Configuration - josef TE - ibotty - -OPEN tasks: Session->Profile - hash Scripting - wazlaf + +OPEN tasks: +Irda ConfigWidget +BT ConfigWidget Keys - open IRDA-Layer - open diff --git a/noncore/apps/opie-console/default.cpp b/noncore/apps/opie-console/default.cpp index d9a0557..da6f3e2 100644 --- a/noncore/apps/opie-console/default.cpp +++ b/noncore/apps/opie-console/default.cpp @@ -3,4 +3,5 @@ #include "serialconfigwidget.h" #include "terminalwidget.h" +#include "vt102emulation.h" #include "default.h" @@ -45,4 +46,9 @@ extern "C" { } + // VT Emulations + EmulationLayer* newVT102( Widget* wid ) { + return new Vt102Emulation( wid ); + } + }; @@ -62,4 +68,5 @@ Default::Default( MetaFactory* fact ) { fact->addTerminalWidgetFactory( "default", QObject::tr("Default Terminal"), newTerminalWidget ); + fact->addEmulationLayer( "default", QObject::tr("Default Terminal"), newVT102 ); } Default::~Default() { diff --git a/noncore/apps/opie-console/default.h b/noncore/apps/opie-console/default.h index ed78986..b9af898 100644 --- a/noncore/apps/opie-console/default.h +++ b/noncore/apps/opie-console/default.h @@ -4,4 +4,6 @@ #include "metafactory.h" +class Widget; + extern "C" { FileTransferLayer* newSZTransfer(IOLayer*); @@ -18,4 +20,6 @@ extern "C" { ProfileDialogWidget* newTerminalWidget(const QString&, QWidget* ); + + EmulationLayer* newVT102( Widget* ); }; diff --git a/noncore/apps/opie-console/emulation_layer.h b/noncore/apps/opie-console/emulation_layer.h index 0f54331..5781acc 100644 --- a/noncore/apps/opie-console/emulation_layer.h +++ b/noncore/apps/opie-console/emulation_layer.h @@ -27,5 +27,5 @@ #define EMULATION_LAYER_H -#include "widget.h" +#include "widget_layer.h" #include "screen.h" #include <qtimer.h> diff --git a/noncore/apps/opie-console/keytrans.cpp b/noncore/apps/opie-console/keytrans.cpp index d569ae0..5ea192e 100644 --- a/noncore/apps/opie-console/keytrans.cpp +++ b/noncore/apps/opie-console/keytrans.cpp @@ -628,4 +628,5 @@ static QDict<KeyTrans> * path2keymap = 0L; KeyTrans* KeyTrans::find(int numb) { + loadAll(); KeyTrans* res = numb2keymap->find(numb); return res ? res : numb2keymap->find(0); @@ -634,4 +635,5 @@ KeyTrans* KeyTrans::find(int numb) KeyTrans* KeyTrans::find(const char* path) { + loadAll(); KeyTrans* res = path2keymap->find(path); return res ? res : numb2keymap->find(0); @@ -640,4 +642,5 @@ KeyTrans* KeyTrans::find(const char* path) int KeyTrans::count() { + loadAll(); return numb2keymap->count(); } diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index 3531478..aeb3742 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp @@ -6,7 +6,9 @@ #include <qtoolbar.h> +#include "profileeditordialog.h" #include "configdialog.h" #include "default.h" #include "metafactory.h" +#include "profile.h" #include "profilemanager.h" #include "mainwindow.h" @@ -110,5 +112,7 @@ ProfileManager* MainWindow::manager() { return m_manager; } - +TabWidget* MainWindow::tabWidget() { + return m_consoleWindow; +} void MainWindow::populateProfiles() { m_sessionsPop->clear(); @@ -138,4 +142,10 @@ QList<Session> MainWindow::sessions() { void MainWindow::slotNew() { qWarning("New Connection"); + ProfileEditorDialog dlg(factory() ); + int ret = dlg.exec(); + + if ( ret == QDialog::Accepted ) { + create( dlg.profile() ); + } } @@ -153,6 +163,6 @@ void MainWindow::slotTerminate() { if ( currentSession() ) currentSession()->layer()->close(); - delete m_curSession; - m_curSession = 0l; + + slotClose(); /* FIXME move to the next session */ } @@ -171,10 +181,36 @@ 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; -void MainWindow::slotProfile( int ) { + tabWidget()->remove( currentSession() ); + tabWidget()->setCurrent( m_sessions.first() ); + m_sessions.remove( m_curSession ); + delete m_curSession; + m_curSession = m_sessions.first(); +} +/* + * We will get the name + * Then the profile + * and then we will make a profile + */ +void MainWindow::slotProfile( int id) { + Profile prof = manager()->profile( m_sessionsPop->text( id) ); + create( prof ); +} +void MainWindow::create( const Profile& prof ) { + Session *ses = manager()->fromProfile( prof, tabWidget() ); + m_sessions.append( ses ); + tabWidget()->add( ses ); + m_curSession = ses; } diff --git a/noncore/apps/opie-console/mainwindow.h b/noncore/apps/opie-console/mainwindow.h index 36eb3a7..7ef9c26 100644 --- a/noncore/apps/opie-console/mainwindow.h +++ b/noncore/apps/opie-console/mainwindow.h @@ -18,5 +18,5 @@ class MetaFactory; class TabWidget; class ProfileManager; - +class Profile; class MainWindow : public QMainWindow { Q_OBJECT @@ -46,4 +46,5 @@ public: */ ProfileManager* manager(); + TabWidget* tabWidget(); private slots: @@ -59,4 +60,5 @@ private: void initUI(); void populateProfiles(); + void create( const Profile& ); /** * the current session diff --git a/noncore/apps/opie-console/metafactory.cpp b/noncore/apps/opie-console/metafactory.cpp index 4501ec2..02a9f9b 100644 --- a/noncore/apps/opie-console/metafactory.cpp +++ b/noncore/apps/opie-console/metafactory.cpp @@ -31,4 +31,10 @@ void MetaFactory::addFileTransferLayer( const QCString& name, m_fileFact.insert( str, lay ); } +void MetaFactory::addEmulationLayer( const QCString& name, + const QString& str, + emulationLayer em) { + m_strings.insert(str, name ); + m_emu.insert( str, em ); +} QStringList MetaFactory::ioLayers()const { QStringList list; @@ -63,4 +69,12 @@ QStringList MetaFactory::fileTransferLayers()const { return list; } +QStringList MetaFactory::emulationLayers()const { + QStringList list; + QMap<QString, emulationLayer>::ConstIterator it; + for ( it = m_emu.begin(); it != m_emu.end(); ++it ) { + list << it.key(); + } + return list; +} IOLayer* MetaFactory::newIOLayer( const QString& str,const Profile& prof ) { @@ -102,4 +116,15 @@ ProfileDialogWidget *MetaFactory::newTerminalPlugin( const QString& str, QWidget return wid; } +EmulationLayer* MetaFactory::newEmulationLayer( const QString& str, Widget* wid) { + EmulationLayer* lay = 0l; + + QMap<QString, emulationLayer>::Iterator it; + it = m_emu.find( str ); + if ( it != m_emu.end() ) { + lay = (*(it.data() ) )(wid); + } + + return lay; +} QCString MetaFactory::internal( const QString& str )const { return m_strings[str]; diff --git a/noncore/apps/opie-console/metafactory.h b/noncore/apps/opie-console/metafactory.h index 3f7ddce..71c35a2 100644 --- a/noncore/apps/opie-console/metafactory.h +++ b/noncore/apps/opie-console/metafactory.h @@ -16,5 +16,7 @@ #include "profile.h" #include "profiledialogwidget.h" +#include "emulation_layer.h" +class Widget; class MetaFactory { public: @@ -22,4 +24,5 @@ public: typedef IOLayer* (*iolayer)(const Profile& ); typedef FileTransferLayer* (*filelayer)(IOLayer*); + typedef EmulationLayer* (*emulationLayer)(Widget* ); MetaFactory(); @@ -51,12 +54,29 @@ public: filelayer ); + /** + * adds a Factory for Emulation to the Layer.. + */ + void addEmulationLayer ( const QCString& name, + const QString& uiString, + emulationLayer ); + /* translated UI Strings */ QStringList ioLayers()const; QStringList connectionWidgets()const; + + /** + * Terminal Configuration widgets + */ QStringList terminalWidgets()const; QStringList fileTransferLayers()const; + QStringList emulationLayers()const; + + /** + * the generation... + */ IOLayer* newIOLayer( const QString&,const Profile& ); ProfileDialogWidget *newConnectionPlugin ( const QString&, QWidget* ); ProfileDialogWidget* newTerminalPlugin( const QString&, QWidget* ); + EmulationLayer* newEmulationLayer(const QString&, Widget* ); /* @@ -80,4 +100,5 @@ private: QMap<QString, iolayer> m_layerFact; QMap<QString, filelayer> m_fileFact; + QMap<QString, emulationLayer> m_emu; }; diff --git a/noncore/apps/opie-console/profilemanager.cpp b/noncore/apps/opie-console/profilemanager.cpp index e66ebcc..dcf3cbd 100644 --- a/noncore/apps/opie-console/profilemanager.cpp +++ b/noncore/apps/opie-console/profilemanager.cpp @@ -3,7 +3,10 @@ #include <qfile.h> +#include <qlayout.h> +#include <qwidgetstack.h> #include <qpe/config.h> +#include "widget.h" #include "metafactory.h" #include "profileconfig.h" @@ -52,15 +55,38 @@ Profile::ValueList ProfileManager::all()const { return m_list; } -Session* ProfileManager::fromProfile( const Profile& prof) { +/* + * Our goal is to create a Session + * We will load the the IOLayer and EmulationLayer + * from the factory + * we will generate a QWidgetStack + * add a dummy widget with layout + * add "Widget" to the layout + * add the dummy to the stack + * raise the dummy + * call session->connect(= + * this way we only need to reparent + * in TabWidget + */ +Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { Session* session = new Session(); session->setName( prof.name() ); - session->setIOLayer(m_fact->newIOLayer(prof.ioLayerName(), - prof) ); - /* - * FIXME - * load emulation - * load widget? - * set colors + fonts - */ + /* translate the internal name to the external */ + session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) , + prof) ); + + QWidgetStack *stack = new QWidgetStack(parent); + session->setWidgetStack( stack ); + QWidget* dummy = new QWidget(stack ); + QHBoxLayout* lay = new QHBoxLayout(dummy ); + stack->addWidget( dummy, 0 ); + stack->raiseWidget( 0 ); + Widget* wid = new Widget(dummy ); + lay->addWidget( wid ); + + session->setEmulationWidget( wid ); + session->setEmulationLayer( m_fact->newEmulationLayer( m_fact->external( prof.terminalName() ), + wid ) ); + session->connect(); + return session; } diff --git a/noncore/apps/opie-console/profilemanager.h b/noncore/apps/opie-console/profilemanager.h index 1387247..33b7095 100644 --- a/noncore/apps/opie-console/profilemanager.h +++ b/noncore/apps/opie-console/profilemanager.h @@ -23,5 +23,5 @@ public: void remove( const Profile& prof ); Profile profile(const QString& name )const; - Session* fromProfile( const Profile& ); + Session* fromProfile( const Profile& , QWidget* parent = 0l); void setProfiles( const Profile::ValueList& ); void save(); diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp index d32b340..42b0583 100644 --- a/noncore/apps/opie-console/session.cpp +++ b/noncore/apps/opie-console/session.cpp @@ -3,22 +3,31 @@ #include "io_layer.h" #include "file_layer.h" +#include "widget.h" +#include "emulation_layer.h" #include "session.h" + Session::Session() { m_widget = 0l; m_layer = 0l; + m_widLay = 0l; + m_emLay = 0l; } -Session::Session( const QString& na, QWidget* widget, IOLayer* lay) +Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay) : m_name( na ), m_widget( widget ), m_layer( lay ) { + m_widLay = 0l; + m_emLay = 0l; } Session::~Session() { delete m_layer; + delete m_emLay; delete m_widget; + /* the widget layer should be deleted by the m_widget */ } QString Session::name()const { return m_name; } -QWidget* Session::widget() { +QWidgetStack* Session::widgetStack() { return m_widget; } @@ -26,9 +35,35 @@ IOLayer* Session::layer() { return m_layer; } +EmulationLayer* Session::emulationLayer() { + return m_emLay; +} +Widget* Session::emulationWidget() { + return m_widLay; +} +void Session::connect() { + if ( !m_layer || !m_emLay ) + return; + + QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), + m_emLay, SLOT(onRcvBlock(const QByteArray&) ) ); + QObject::connect(m_emLay, SIGNAL(sndBlock(const QByteArray&) ), + m_layer, SLOT(send(const QByteArray&) ) ); +} +void Session::disconnect() { + if ( !m_layer || !m_emLay ) + return; + + QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ), + m_emLay, SLOT(onRcvBlock(const QByteArray&) ) ); + QObject::disconnect(m_emLay, SIGNAL(sndBlock(const QByteArray&) ), + m_layer, SLOT(send(const QByteArray&) ) ); +} void Session::setName( const QString& na){ m_name = na; } -void Session::setWidget( QWidget* wid ) { +void Session::setWidgetStack( QWidgetStack* wid ) { delete m_widget; + /* the EmulationLayer was destroyed... */ + delete m_emLay; m_widget = wid; } @@ -37,2 +72,10 @@ void Session::setIOLayer( IOLayer* lay ) { m_layer = lay; } +void Session::setEmulationLayer( EmulationLayer* lay ) { + delete m_emLay; + m_emLay = lay; +} +void Session::setEmulationWidget( Widget* lay ) { + delete m_widLay; + m_widLay = lay; +} diff --git a/noncore/apps/opie-console/session.h b/noncore/apps/opie-console/session.h index 44b5fc8..c3673fc 100644 --- a/noncore/apps/opie-console/session.h +++ b/noncore/apps/opie-console/session.h @@ -2,7 +2,9 @@ #define OPIE_SESSION_H -#include <qwidget.h> +#include <qwidgetstack.h> class IOLayer; +class EmulationLayer; +class Widget; /** * This is a Session. A session contains @@ -18,5 +20,5 @@ public: */ Session(); - Session( const QString&, QWidget* widget, IOLayer* ); + Session( const QString&, QWidgetStack* widget, IOLayer* ); ~Session(); @@ -27,7 +29,11 @@ public: /** - * return the widget + * return the widgetstack + * this is used to be semi modal + * for FileTransfer + * + * semi modal == SessionModal */ - QWidget* widget(); + QWidgetStack* widgetStack(); /** @@ -35,5 +41,23 @@ public: */ IOLayer* layer(); - void setWidget( QWidget* widget ); + + EmulationLayer* emulationLayer(); + Widget* emulationWidget(); + + /* + * connects the data flow from + * the IOLayer to the EmulationLayer + */ + void connect(); + + /* + * disconnect the dataflow + * this will be done for ft + */ + void disconnect(); + + void setWidgetStack( QWidgetStack* widget ); + void setEmulationLayer( EmulationLayer* lay ); + void setEmulationWidget( Widget* lay ); void setIOLayer( IOLayer* ); void setName( const QString& ); @@ -41,6 +65,8 @@ public: private: QString m_name; - QWidget* m_widget; + QWidgetStack* m_widget; IOLayer* m_layer; + EmulationLayer* m_emLay; + Widget* m_widLay; }; diff --git a/noncore/apps/opie-console/tabwidget.cpp b/noncore/apps/opie-console/tabwidget.cpp index 783bf13..cfaef91 100644 --- a/noncore/apps/opie-console/tabwidget.cpp +++ b/noncore/apps/opie-console/tabwidget.cpp @@ -3,5 +3,5 @@ TabWidget::TabWidget( QWidget* parent, const char* name ) - : OTabWidget( parent, name ) { + : QTabWidget( parent, name ) { connect(this, SIGNAL( currentChanged(QWidget*) ), this, SLOT( slotCurChanged(QWidget*) ) ); @@ -12,12 +12,15 @@ TabWidget::~TabWidget() { void TabWidget::add( Session* ses ) { - if ( !ses->widget() ) return; - addTab( ses->widget(), "console/konsole", ses->name() ); - m_map.insert( ses->widget(), ses ); + if ( !ses->widgetStack() ) return; + qWarning("going to add it"); + //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->widget() ); - removePage( ses->widget() ); + m_map.remove( ses->widgetStack() ); + removePage( ses->widgetStack() ); } @@ -31,4 +34,10 @@ void TabWidget::slotCurChanged( QWidget* wid ) { emit activated( it.data() ); } +void TabWidget::setCurrent( Session* ses ) { + if (!ses ) + return; + + showPage( ses->widgetStack() ); +} diff --git a/noncore/apps/opie-console/tabwidget.h b/noncore/apps/opie-console/tabwidget.h index a701488..42a00ec 100644 --- a/noncore/apps/opie-console/tabwidget.h +++ b/noncore/apps/opie-console/tabwidget.h @@ -3,5 +3,5 @@ #include <qmap.h> -#include <opie/otabwidget.h> +#include <qtabwidget.h> #include "session.h" @@ -10,5 +10,5 @@ * we can add sessions here */ -class TabWidget : public OTabWidget{ +class TabWidget : public QTabWidget{ Q_OBJECT public: @@ -17,4 +17,5 @@ public: void add( Session* ); void remove( Session* ); + void setCurrent( Session* ); signals: diff --git a/noncore/apps/opie-console/vt102emulation.cpp b/noncore/apps/opie-console/vt102emulation.cpp index dc977f5..2220f4e 100644 --- a/noncore/apps/opie-console/vt102emulation.cpp +++ b/noncore/apps/opie-console/vt102emulation.cpp @@ -623,5 +623,5 @@ void Vt102Emulation::sendString(const char* s) } -void Vt102Emulation::sendString(const QByteArray s) +void Vt102Emulation::sendString(const QByteArray& s) { emit sndBlock( s ); diff --git a/noncore/apps/opie-console/vt102emulation.h b/noncore/apps/opie-console/vt102emulation.h index 018835e..a3d0ae6 100644 --- a/noncore/apps/opie-console/vt102emulation.h +++ b/noncore/apps/opie-console/vt102emulation.h @@ -87,5 +87,5 @@ public: * sends a list of bytes to the IOLayer */ - void sendString(const QByteArray); + void sendString(const QByteArray&); /** |