diff options
Diffstat (limited to 'arts/builder/execdlg.cpp')
-rw-r--r-- | arts/builder/execdlg.cpp | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/arts/builder/execdlg.cpp b/arts/builder/execdlg.cpp new file mode 100644 index 00000000..2186d1f5 --- /dev/null +++ b/arts/builder/execdlg.cpp @@ -0,0 +1,201 @@ + /* + + Copyright (C) 1998 Stefan Westerfeld + stefan@space.twc.de + + 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ + +#include <qfile.h> +#include <qlayout.h> +#include <qlabel.h> +#include <qbuttongroup.h> +#include <qradiobutton.h> +#include <qlineedit.h> + +#include <kbuttonbox.h> +#include <kfiledialog.h> +#include <kseparator.h> +#include <klocale.h> +#include <kapplication.h> +#include <kstdguiitem.h> + +#include <unistd.h> +#include "execdlg.h" +#include "dirmanager.h" +#include <arts/debug.h> +#include <qpushbutton.h> + +#ifndef KDE_USE_FINAL +static void min_size(QWidget *w) { + w->setMinimumSize(w->sizeHint()); +} +#endif + +ExecDlg::ExecDlg(QWidget *parent, ExecutableStructure *structure) + :QDialog(parent,"X") +/*, TRUE)*/ +{ + this->structure = structure; + + setCaption(i18n("aRts Module Execution")); + + mainlayout = new QVBoxLayout(this); + +// caption label: "Synthesis running..." + + mainlayout->addSpacing(5); + QLabel *captionlabel = new QLabel(this); + QFont labelfont(captionlabel->font()); + labelfont.setPointSize(labelfont.pointSize()*3/2); + captionlabel->setFont(labelfont); + captionlabel->setText(QString(" ")+i18n("Synthesis running...")+QString(" ")); + captionlabel->setAlignment(AlignCenter); + min_size(captionlabel); + mainlayout->addWidget(captionlabel); + + cpuusagelabel = new QLabel(this); + cpuusagelabel->setText(i18n("CPU usage: unknown")); + + cpuusagetimer = new QTimer( this ); + connect( cpuusagetimer, SIGNAL(timeout()), + this, SLOT(updateCpuUsage()) ); + connect( cpuusagetimer, SIGNAL(timeout()), + this, SLOT(guiServerTick()) ); + cpuusagetimer->start( 2000, false ); + + min_size(cpuusagelabel); + mainlayout->addWidget(cpuusagelabel); + +// ruler above the sliderlayout + + mainlayout->addSpacing(5); + KSeparator* sep = new KSeparator( KSeparator::HLine, this); + mainlayout->addWidget(sep); + mainlayout->addSpacing(5); + +// sliders, controlpanels + + sliderlayout = new QVBoxLayout; + mainlayout->addLayout(sliderlayout); + +#if 0 /* PORT */ + this->GUIServer = GUIServer; + GUIServer->setGlobalParent(this); + GUIServer->setGlobalLayout(sliderlayout); +#endif + +// hruler below the sliderlayout + + mainlayout->addSpacing(5); + sep = new KSeparator( KSeparator::HLine, this); + mainlayout->addWidget(sep); + mainlayout->addSpacing(5); + +// buttons + + QHBoxLayout *buttonlayout = new QHBoxLayout; + mainlayout->addSpacing(5); + mainlayout->addLayout(buttonlayout); + mainlayout->addSpacing(5); + + buttonlayout->addSpacing(5); + KButtonBox *bbox = new KButtonBox(this); + + bbox->addButton(KStdGuiItem::help(), this, SLOT( help() )); + + bbox->addStretch(1); + + QButton *savebutton = bbox->addButton(KStdGuiItem::saveAs()); + connect( savebutton, SIGNAL( clicked() ), SLOT(saveSession() ) ); + + QButton *okbutton = bbox->addButton(KStdGuiItem::ok()); + connect( okbutton, SIGNAL( clicked() ), SLOT(accept() ) ); + + bbox->layout(); + //min_size(bbox); + + buttonlayout->addWidget(bbox); + buttonlayout->addSpacing(5); + +// mainlayout->freeze(); +} + +void ExecDlg::start() +{ + mainlayout->freeze(); +} + +void ExecDlg::guiServerTick() +{ +#if 0 /* TODO:PORT */ + GUIServer->tick(); +#endif +} + +void ExecDlg::updateCpuUsage() +{ +#if 0 /* TODO:PORT */ + char cpuusage[100]; + + ArtsCorba::Status s = Synthesizer->getStatus(); + if(s.halted) + { + cpuusagetimer->stop(); + accept(); + PortableKDE::KMsgSorry(this,i18n("Your synthesis has been interrupted due to excessive CPU load.")); + /* + KMsgBox::message(this,i18n("Error"), + i18n("Your synthesis has been interrupted due to excessive CPU load."), + KMsgBox::STOP); + */ + // warning: this is invalid after accept(); + return; + } + sprintf(cpuusage,"%s%3.2f%%", + (const char *)i18n("CPU usage: "),s.cpu_usage*100); + + cpuusagelabel->setText(cpuusage); + + if(!structure->isExecuting()) accept(); + // warning: this is invalid after accept(); +#endif +} + +void ExecDlg::done( int r ) +{ + structure->stopExecute(); + QDialog::done(r); + emit ready(); +} + +void ExecDlg::saveSession() +{ + chdir(DirManager::sessionDir()); + + QString filename = KFileDialog::getSaveFileName(0,"*.arts-session",this); + if(!filename.isEmpty()) + { + arts_debug("save... %s",filename.local8Bit().data()); + structure->saveSession(QFile::encodeName(filename)); + } +} + +void ExecDlg::help() +{ + KApplication::kApplication()->invokeHelp("", "karts"); +} +#include "execdlg.moc" |