summaryrefslogtreecommitdiffstats
path: root/kandy/src/kandyview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kandy/src/kandyview.cpp')
-rw-r--r--kandy/src/kandyview.cpp319
1 files changed, 319 insertions, 0 deletions
diff --git a/kandy/src/kandyview.cpp b/kandy/src/kandyview.cpp
new file mode 100644
index 00000000..5b9f0619
--- /dev/null
+++ b/kandy/src/kandyview.cpp
@@ -0,0 +1,319 @@
+/*
+ This file is part of Kandy.
+
+ Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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 program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <unistd.h>
+
+#include <qpainter.h>
+#include <qlayout.h>
+#include <qhbox.h>
+#include <qvbox.h>
+#include <qtextedit.h>
+#include <qlistview.h>
+#include <qdom.h>
+#include <qtextstream.h>
+#include <qfile.h>
+#include <qlineedit.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+
+#include <kurl.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kglobal.h>
+#include <kconfig.h>
+#include <kinputdialog.h>
+#include <kdialog.h>
+
+#include "modem.h"
+#include "cmdpropertiesdialog.h"
+#include "commanditem.h"
+#include "atcommand.h"
+#include "commandscheduler.h"
+#include "kandyprefs.h"
+
+#include "kandyview.h"
+#include "kandyview.moc"
+
+KandyView::KandyView(CommandScheduler *scheduler,QWidget *parent)
+ : QWidget(parent)
+{
+ mModified = false;
+ mScheduler = scheduler;
+
+ QBoxLayout *topLayout = new QVBoxLayout( this );
+
+ QSplitter *mainSplitter = new QSplitter( Horizontal, this );
+ topLayout->addWidget( mainSplitter );
+
+ QWidget *commandBox = new QWidget( mainSplitter );
+
+ QBoxLayout *commandLayout = new QVBoxLayout( commandBox );
+ commandLayout->setMargin( KDialog::marginHint() );
+ commandLayout->setSpacing( KDialog::spacingHint() );
+
+ mCommandList = new QListView( commandBox );
+ mCommandList->addColumn( i18n( "Name" ) );
+ mCommandList->addColumn( i18n( "Command" ) );
+ mCommandList->addColumn( i18n( "Hex" ) );
+ commandLayout->addWidget( mCommandList );
+
+ connect( mCommandList, SIGNAL( doubleClicked(QListViewItem*) ),
+ SLOT( executeCommand() ) );
+
+ QPushButton *buttonAdd = new QPushButton( i18n("Add..."), commandBox );
+ commandLayout->addWidget( buttonAdd );
+ connect( buttonAdd, SIGNAL( clicked() ), SLOT( addCommand() ) );
+
+ QPushButton *buttonEdit = new QPushButton( i18n("Edit..."), commandBox );
+ commandLayout->addWidget( buttonEdit );
+ connect( buttonEdit, SIGNAL( clicked() ), SLOT( editCommand() ) );
+
+ QPushButton *buttonDelete = new QPushButton( i18n("Delete"), commandBox );
+ commandLayout->addWidget( buttonDelete );
+ connect( buttonDelete, SIGNAL( clicked() ), SLOT( deleteCommand() ) );
+
+ QPushButton *buttonExecute = new QPushButton( i18n("Execute"), commandBox );
+ commandLayout->addWidget( buttonExecute );
+ connect( buttonExecute, SIGNAL( clicked() ), SLOT( executeCommand() ) );
+
+ QSplitter *ioSplitter = new QSplitter( Vertical, mainSplitter );
+
+ QWidget *inBox = new QWidget( ioSplitter );
+
+ QBoxLayout *inLayout = new QVBoxLayout( inBox );
+
+ QLabel *inLabel = new QLabel( i18n("Input:"), inBox );
+ inLabel->setMargin( 2 );
+ inLayout->addWidget( inLabel );
+
+ mInput = new QTextEdit( inBox );
+ inLayout->addWidget( mInput );
+
+ QWidget *outBox = new QWidget( ioSplitter );
+
+ QBoxLayout *outLayout = new QVBoxLayout( outBox );
+
+ QLabel *outLabel = new QLabel( i18n( "Output:"), outBox );
+ outLabel->setMargin( 2 );
+ outLayout->addWidget( outLabel );
+
+ mOutput = new QTextEdit( outBox );
+ mOutput->setReadOnly( true );
+ outLayout->addWidget( mOutput );
+
+ QVBox *resultBox = new QVBox( mainSplitter );
+
+ QLabel *resultLabel = new QLabel( i18n("Result:"), resultBox );
+ resultLabel->setMargin( 2 );
+
+ mResultView = new QTextEdit( resultBox );
+ mResultView->setReadOnly( true );
+
+ connect (mInput,SIGNAL(returnPressed()),SLOT(processLastLine()));
+
+ connect(mScheduler->modem(),SIGNAL(gotLine(const char *)),
+ SLOT(appendOutput(const char *)));
+
+ connect(mScheduler,SIGNAL(result(const QString &)),
+ mResultView,SLOT(setText(const QString &)));
+ connect(mScheduler,SIGNAL(commandProcessed(ATCommand *)),
+ SLOT(setResult(ATCommand *)));
+}
+
+KandyView::~KandyView()
+{
+}
+
+
+void KandyView::print(QPainter *, int, int)
+{
+ // do the actual printing, here
+ // p->drawText(etc..)
+}
+
+void KandyView::importPhonebook()
+{
+#if 0
+ createMobileGui();
+ connect (mMobileGui,SIGNAL(phonebookRead()),mMobileGui,SLOT(writeKab()));
+ mMobileGui->readPhonebook();
+#endif
+}
+
+void KandyView::slotSetTitle(const QString& title)
+{
+ emit signalChangeCaption(title);
+}
+
+void KandyView::processLastLine()
+{
+ int para = 0;
+ int row = 0;
+ mInput->getCursorPosition( &para, &row );
+
+ if ( para > 0 ) {
+ mLastInput = mInput->text( para - 1 );
+
+ kdDebug(5960) << "processLastLine(): " << mLastInput << endl;
+
+ mScheduler->execute(mLastInput);
+ }
+}
+
+void KandyView::appendOutput(const char *line)
+{
+// kdDebug(5960) << "OUT: " << line << endl;
+ mOutput->append(line);
+ mOutput->setCursorPosition(mOutput->paragraphs()-1,0);
+}
+
+void KandyView::setResult(ATCommand *command)
+{
+ if (command == 0) {
+ kdDebug(5960) << "KandyView::setResult(): Error! No command." << endl;
+ mResultView->setText(i18n("Error"));
+ return;
+ }
+
+// kdDebug(5960) << "KandyView::setResult(): " << endl << mResult << endl
+// << mLastCommand->processOutput(mResult) << endl;
+
+ mResultView->setText(command->cmdName() + ":\n" + command->processOutput());
+}
+
+void KandyView::addCommand()
+{
+ ATCommand *cmd = new ATCommand(mLastInput);
+
+ CmdPropertiesDialog *dlg = new CmdPropertiesDialog(cmd,this,"cmdprop",true);
+
+ int result = dlg->exec();
+
+ if (result == QDialog::Accepted) {
+ new CommandItem(mCommandList,cmd);
+ mScheduler->commandSet()->addCommand(cmd);
+ setModified();
+ } else {
+ delete cmd;
+ }
+}
+
+void KandyView::editCommand()
+{
+ QListViewItem *item = mCommandList->currentItem();
+ if (item) {
+ CommandItem *cmdItem = (CommandItem *)item;
+ ATCommand *cmd = cmdItem->command();
+
+ CmdPropertiesDialog *dlg = new CmdPropertiesDialog(cmd,this,"cmdprop",true);
+
+ int result = dlg->exec();
+
+ if (result == QDialog::Accepted) {
+ cmdItem->setItemText();
+ setModified();
+ }
+ }
+}
+
+void KandyView::executeCommand()
+{
+ CommandItem *item = (CommandItem *)(mCommandList->currentItem());
+ if (item) {
+ ATCommand *cmd = item->command();
+ QPtrList<ATParameter> paraList = cmd->parameters();
+ for(uint i=0;i<paraList.count();++i) {
+ ATParameter *p = paraList.at(i);
+ if (p->userInput()) {
+ bool ok = false;
+ QString value = KInputDialog::getText(QString::null,
+ i18n("Enter value for %1:").arg(p->name()),QString::null,&ok,this);
+ if (!ok)
+ return;
+ p->setValue(value);
+ }
+ }
+ kdDebug(5960) << "KandyView::executeCommand(): " << cmd->cmd() << endl;
+ mScheduler->execute(cmd);
+ }
+}
+
+void KandyView::deleteCommand()
+{
+ CommandItem *item = dynamic_cast<CommandItem *>(mCommandList->currentItem());
+ if (item) {
+ mScheduler->commandSet()->deleteCommand(item->command());
+ delete item;
+ setModified();
+ }
+}
+
+bool KandyView::loadFile(const QString& filename)
+{
+ mCommandList->clear();
+
+ if (!mScheduler->loadProfile(filename)) return false;
+
+ QPtrList<ATCommand> *cmds = mScheduler->commandSet()->commandList();
+
+ for(uint i=0;i<cmds->count();++i) {
+ new CommandItem(mCommandList,cmds->at(i));
+ }
+
+ KConfig *config = KGlobal::config();
+ config->setGroup("General");
+ config->writeEntry("CurrentProfile",filename);
+
+ setModified(false);
+
+ return true;
+}
+
+bool KandyView::saveFile(const QString& filename)
+{
+ if (!mScheduler->saveProfile(filename)) return false;
+
+ KConfig *config = KGlobal::config();
+ config->setGroup("General");
+ config->writeEntry("CurrentProfile",filename);
+
+ setModified(false);
+
+ return true;
+}
+
+void KandyView::setModified(bool modified)
+{
+ if (modified != mModified) {
+ mModified = modified;
+ emit modifiedChanged(mModified);
+ }
+}
+
+bool KandyView::isModified()
+{
+ return mModified;
+}