-rw-r--r-- | noncore/apps/opie-console/MyPty.cpp | 27 | ||||
-rw-r--r-- | noncore/apps/opie-console/MyPty.h | 6 | ||||
-rw-r--r-- | noncore/apps/opie-console/PLANS | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/consoleconfigwidget.cpp | 95 | ||||
-rw-r--r-- | noncore/apps/opie-console/consoleconfigwidget.h | 34 | ||||
-rw-r--r-- | noncore/apps/opie-console/default.cpp | 9 | ||||
-rw-r--r-- | noncore/apps/opie-console/opie-console.pro | 6 |
7 files changed, 162 insertions, 17 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp index 534f79a..b0f0275 100644 --- a/noncore/apps/opie-console/MyPty.cpp +++ b/noncore/apps/opie-console/MyPty.cpp @@ -144,10 +144,4 @@ void MyPty::error() void MyPty::start() { - char* cmd = "/bin/sh"; - - if ( QFile::exists( "/bin/bash" ) ) { - cmd = "/bin/bash"; - } - QStrList lis; - int r =run(cmd, lis, 0, 0); + int r =run(m_cmd.latin1(), lis, 0, 0); r = r; @@ -184,3 +178,6 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) setenv("COLORTERM","0",1); - + EnvironmentMap::Iterator it; + for (it = m_env.begin(); it != m_env.end(); it++) { + setenv(it.key().latin1(), it.data().latin1(), 1); + } if (getuid() == 0) { @@ -265,2 +262,3 @@ MyPty::MyPty(const Profile& prof) : m_cpid(0) Q_UNUSED(ctl); + reload(prof); } @@ -293,4 +291,13 @@ void MyPty::close() { } -void MyPty::reload( const Profile& ) { - +void MyPty::reload( const Profile& prof) { + m_env.clear(); + m_cmd = prof.readEntry("Command", "/bin/bash"); + int envcount = prof.readNumEntry("EnvVars", 0); + for (int i=0; i<envcount; i++) { + QString name = prof.readEntry("Env_Name_" + QString::number(i), ""); + QString value = prof.readEntry("Env_Value_" + QString::number(i), ""); + if (!(name.isEmpty() || value.isEmpty())) { + m_env.insert(name, value); + } + } } diff --git a/noncore/apps/opie-console/MyPty.h b/noncore/apps/opie-console/MyPty.h index 7561ca3..b292ce4 100644 --- a/noncore/apps/opie-console/MyPty.h +++ b/noncore/apps/opie-console/MyPty.h @@ -25,2 +25,3 @@ #include <qobject.h> +#include <qlist.h> #include <qstrlist.h> @@ -29,2 +30,4 @@ +typedef QMap<QString, QString> EnvironmentMap; + class Profile; @@ -97,2 +100,5 @@ private: char* m_term; + + QString m_cmd; + EnvironmentMap m_env; }; diff --git a/noncore/apps/opie-console/PLANS b/noncore/apps/opie-console/PLANS index 8e0bee4..a7c7578 100644 --- a/noncore/apps/opie-console/PLANS +++ b/noncore/apps/opie-console/PLANS @@ -29,2 +29,3 @@ keyboard? Keys - hash + Scripting - wazlaf @@ -32,3 +33,2 @@ TASKS in progress: Keys - hash - Scripting - wazlaf diff --git a/noncore/apps/opie-console/consoleconfigwidget.cpp b/noncore/apps/opie-console/consoleconfigwidget.cpp new file mode 100644 index 0000000..70e2e78 --- a/dev/null +++ b/noncore/apps/opie-console/consoleconfigwidget.cpp @@ -0,0 +1,95 @@ +#include <qlabel.h> +#include <qlayout.h> +#include <qcombobox.h> +#include <qlineedit.h> +#include <qpushbutton.h> +#include <qlistview.h> +#include <qhbox.h> +#include <qregexp.h> +#include <stdio.h> + +#include "consoleconfigwidget.h" + +ConsoleConfigWidget::ConsoleConfigWidget( const QString& name, QWidget* parent, + const char* na ) + : ProfileDialogConnectionWidget( name, parent, na ) { + m_lay = new QVBoxLayout( this ); + QLabel *label = new QLabel(tr("Command to execute"), this); + m_lay->addWidget(label); + m_cmd = new QLineEdit(this); + m_lay->addWidget(m_cmd); + label = new QLabel(tr("Environment Variables"), this); + m_lay->addWidget(label); + m_env = new QListView(this); + m_env->addColumn(tr("Name")); + m_env->addColumn(tr("Value")); + m_lay->addWidget(m_env); + + QHBox *hbox = new QHBox(this); + label = new QLabel(tr("Name :"), hbox); + m_name = new QLineEdit(hbox); + m_lay->addWidget(hbox); + + hbox = new QHBox(this); + label = new QLabel(tr("Value :"), hbox); + m_value = new QLineEdit(hbox); + m_lay->addWidget(hbox); + + hbox = new QHBox(this); + hbox->setSpacing(10); + m_remove = new QPushButton(tr("Remove"), hbox); + connect(m_remove, SIGNAL(clicked()), this, SLOT(slotRemove())); + m_add = new QPushButton(tr("Add"), hbox); + connect(m_add, SIGNAL(clicked()), this, SLOT(slotAdd())); + m_lay->addWidget(hbox); +} + +void ConsoleConfigWidget::slotAdd() { + if (!(m_name->text().isEmpty() || m_value->text().isEmpty())) { + QListViewItem *item = new QListViewItem(m_env); + item->setText(0, m_name->text()); + item->setText(1, m_value->text()); + m_env->insertItem(item); + } +} + +void ConsoleConfigWidget::slotRemove() { + QListViewItem *item = m_env->currentItem(); + if (item) { + m_env->takeItem(item); + } +} + +ConsoleConfigWidget::~ConsoleConfigWidget() { +} + +void ConsoleConfigWidget::load( const Profile& prof ) { + m_cmd->setText(prof.readEntry("Command", "/bin/bash")); + int envcount = prof.readNumEntry("EnvVars", 0); + for (int i=0; i<envcount; i++) { + QString name = prof.readEntry("Env_Name_" + QString::number(i), ""); + QString value = prof.readEntry("Env_Value_" + QString::number(i), ""); + if (!(name.isEmpty() || value.isEmpty())) { + QListViewItem *item = new QListViewItem(m_env); + item->setText(0, name); + item->setText(1, value); + m_env->insertItem(item); + } + } +} + +void ConsoleConfigWidget::save( Profile& prof ) { + prof.writeEntry( "Command", m_cmd->text()); + QListViewItem *item = m_env->firstChild(); + int counter = 0; + while (item) { + QString name = item->text(0); + QString value = item->text(1); + prof.writeEntry("Env_Name_" + QString::number(counter), name); + prof.writeEntry("Env_Value_" + QString::number(counter), value); + item = item->nextSibling(); + counter++; + } + prof.writeEntry("EnvVars", QString::number(counter)); +} + diff --git a/noncore/apps/opie-console/consoleconfigwidget.h b/noncore/apps/opie-console/consoleconfigwidget.h new file mode 100644 index 0000000..c980cb4 --- a/dev/null +++ b/noncore/apps/opie-console/consoleconfigwidget.h @@ -0,0 +1,34 @@ +#ifndef OPIE_CONSOLE_CONFIG_WIDGET_H +#define OPIE_CONSOLE_CONFIG_WIDGET_H + +#include "profiledialogwidget.h" + +class QVBoxLayout; +class QLineEdit; +class QListView; +class QPushButton; + +class ConsoleConfigWidget : public ProfileDialogConnectionWidget { + Q_OBJECT +public: + ConsoleConfigWidget( const QString& name, QWidget* parent, const char* name = 0l ); + ~ConsoleConfigWidget(); + + void load( const Profile& ); + void save( Profile& ); + +protected slots: + void slotAdd(); + void slotRemove(); +private: + QVBoxLayout *m_lay; + QLineEdit *m_cmd; + QLineEdit *m_name; + QLineEdit *m_value; + QListView *m_env; + QPushButton *m_add; + QPushButton *m_remove; +}; + + +#endif diff --git a/noncore/apps/opie-console/default.cpp b/noncore/apps/opie-console/default.cpp index 5d82c6a..b060139 100644 --- a/noncore/apps/opie-console/default.cpp +++ b/noncore/apps/opie-console/default.cpp @@ -12,2 +12,3 @@ #include "function_keyboard.h" +#include "consoleconfigwidget.h" #include "MyPty.h" @@ -69,4 +70,4 @@ extern "C" { } - ProfileDialogWidget* newConsoleWid( const QString& , QWidget* ) { - return 0l; + ProfileDialogWidget* newConsoleWid( const QString& str, QWidget* wid ) { + return new ConsoleConfigWidget(str, wid ); } @@ -104,3 +105,3 @@ Default::Default( MetaFactory* fact ) { fact->addIOLayerFactory( "modem", QObject::tr("Modem"), newModemLayer ); - fact->addIOLayerFactory( "console", QObject::tr("local Console"), newConsole ); + fact->addIOLayerFactory( "console", QObject::tr("Local Console"), newConsole ); @@ -110,3 +111,3 @@ Default::Default( MetaFactory* fact ) { // fact->addConnectionWidgetFactory( "bt", QObject::tr("Bluetooth"), newBTWidget ); - fact->addConnectionWidgetFactory( "console", QObject::tr("local Console"), newConsoleWid ); + fact->addConnectionWidgetFactory( "console", QObject::tr("Local Console"), newConsoleWid ); diff --git a/noncore/apps/opie-console/opie-console.pro b/noncore/apps/opie-console/opie-console.pro index f5737d4..e3f92f0 100644 --- a/noncore/apps/opie-console/opie-console.pro +++ b/noncore/apps/opie-console/opie-console.pro @@ -32,3 +32,4 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h io_modem.h \ TEHistroy.h TEScreen.h TEWidget.h \ - TEmuVt102.h TEmulation.h MyPty.h + TEmuVt102.h TEmulation.h MyPty.h \ + consoleconfigwidget.h @@ -61,3 +62,4 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp io_modem.cpp \ TEScreen.cpp TEWidget.cpp \ - TEmuVt102.cpp TEmulation.cpp MyPty.cpp + TEmuVt102.cpp TEmulation.cpp MyPty.cpp \ + consoleconfigwidget.cpp |