diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 37333bf25ad9a4c538250f5af2f9f1d666362883 (patch) | |
tree | c45e8df5b9efbffe07eb3d9340df7811c7e16943 /kcron/ktapp.cpp | |
download | tdeadmin-37333bf25ad9a4c538250f5af2f9f1d666362883.tar.gz tdeadmin-37333bf25ad9a4c538250f5af2f9f1d666362883.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeadmin@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kcron/ktapp.cpp')
-rw-r--r-- | kcron/ktapp.cpp | 463 |
1 files changed, 463 insertions, 0 deletions
diff --git a/kcron/ktapp.cpp b/kcron/ktapp.cpp new file mode 100644 index 0000000..76f0e08 --- /dev/null +++ b/kcron/ktapp.cpp @@ -0,0 +1,463 @@ +/*************************************************************************** + * KT application implementation. * + * -------------------------------------------------------------------- * + * Copyright (C) 1999, Gary Meyer <[email protected]> * + * -------------------------------------------------------------------- * + * 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. * + ***************************************************************************/ + +#include "ktapp.h" +#include <kmenubar.h> +#include <kstdaccel.h> +#include <kmessagebox.h> +#include <kconfig.h> +#include <kapplication.h> +#include <klocale.h> // i18n() +#include <kstdaction.h> +#include <kaction.h> +#include <kiconloader.h> +#include <kpopupmenu.h> +#include <kstatusbar.h> + +#include "cthost.h" +#include "ctcron.h" +#include "cttask.h" + +#include "kticon.h" +#include "ktview.h" + + +const int KTApp::statusMessage (1001); + + +KTApp::KTApp() : KMainWindow(0) +{ + config=kapp->config(); + + setIcon(KTIcon::application(true)); + + setCaption(i18n("Task Scheduler")); + + + // Initialize document. + cthost = new CTHost(); + + // Initialize view. + view = new KTView(this); + setCentralWidget(view); + + // Call inits to invoke all other construction parts. + setupActions(); + initStatusBar(); + createGUI(); + view->disableIcons(); + + //Connections + KPopupMenu *editMenu = static_cast<KPopupMenu*>(guiFactory()->container("edit", this)); + KPopupMenu *settingsMenu = static_cast<KPopupMenu*>(guiFactory()->container("settings", this)); + + connect(editMenu,SIGNAL(highlighted(int)),this,SLOT(statusEditCallback(int))); + connect(settingsMenu,SIGNAL(highlighted(int)),this,SLOT(statusSettingsCallback(int))); + // Read options. + readOptions(); +} + +bool KTApp::init() +{ + if (cthost->isError()) + { + KMessageBox::error(this, i18n("The following error occurred while initializing KCron:" + "\n\n%1\n\nKCron will now exit.\n").arg(cthost->errorMessage())); + return false; + } + + // Display greeting screen. + // if there currently are no scheduled tasks... + if (!cthost->root()) + { + int taskCount(0); + + for (CTCronIterator i = (CTCronIterator)cthost->cron.begin(); + i != cthost->cron.end(); i++) + { + for (CTTaskIterator j = (CTTaskIterator)(*i)->task.begin(); + j != (*i)->task.end(); j++) + { + taskCount++; + } + } + + if (taskCount == 0) + { + show(); + KMessageBox::information(this, i18n("You can use this application to schedule programs to run in the background.\nTo schedule a new task now, click on the Tasks folder and select Edit/New from the menu."), i18n("Welcome to the Task Scheduler"), "welcome"); + } + } + return true; +} + +KTApp::~KTApp() +{ + delete view; + delete cthost; +} + +const CTHost& KTApp::getCTHost() const +{ + return *cthost; +} + + +QString KTApp::caption() +{ + QString cap(kapp->caption()); + return cap; +} + +void KTApp::setupActions() +{ + //File Menu + KStdAction::save(this, SLOT(slotFileSave()), actionCollection()); + KStdAction::print(this, SLOT(slotFilePrint()), actionCollection()); + KStdAction::quit(this, SLOT(slotFileQuit()), actionCollection()); + + //Edit menu + KStdAction::cut(this, SLOT(slotEditCut()), actionCollection()); + KStdAction::copy(this, SLOT(slotEditCopy()), actionCollection()); + KStdAction::paste(this, SLOT(slotEditPaste()), actionCollection()); + (void)new KAction(i18n("&New..."), KStdAccel::openNew(), this,SLOT(slotEditNew()),actionCollection(),"edit_new"); + //I don't like this KStdAccel::open() for modifying, but I'm just porting this to xmlui + (void)new KAction(i18n("M&odify..."), KStdAccel::open(), this,SLOT(slotEditModify()),actionCollection(),"edit_modify"); + (void)new KAction(i18n("&Delete"), 0, this,SLOT(slotEditDelete()),actionCollection(),"edit_delete"); + (void)new KAction(i18n("&Enabled"), 0, this,SLOT(slotEditEnable()),actionCollection(),"edit_enable"); + (void)new KAction(i18n("&Run Now"), 0, this,SLOT(slotEditRunNow()),actionCollection(),"edit_run"); + + //Settings menu + (void)new KAction(i18n("Show &Toolbar"), 0, this,SLOT(slotViewToolBar()),actionCollection(),"show_toolbar"); + (void)new KAction(i18n("Show &Statusbar"), 0, this,SLOT(slotViewStatusBar()),actionCollection(),"show_statusbar"); + +} + +void KTApp::initStatusBar() +{ + statusBar()->insertItem(i18n("Ready."), statusMessage, 1); + statusBar()->setItemAlignment(statusMessage, Qt::AlignLeft | Qt::AlignVCenter); +} + +void KTApp::saveOptions() +{ + config->setGroup(QString("General Options")); + config->writeEntry(QString("Geometry"), size()); + config->writeEntry(QString("Show Toolbar"), toolBar()->isVisible()); + config->writeEntry(QString("Show Statusbar"), statusBar()->isVisible()); + config->writeEntry(QString("ToolBarPos"), (int)toolBar()->barPos()); +} + + +void KTApp::readOptions() +{ + config->setGroup(QString("General Options")); + KPopupMenu *settingsMenu = static_cast<KPopupMenu*>(guiFactory()->container("settings", this)); + + // bar status settings + bool bViewToolbar = config->readBoolEntry(QString("Show Toolbar"), true); + settingsMenu->setItemChecked(settingsMenu->idAt(0),bViewToolbar); + if (!bViewToolbar) + toolBar()->hide(); + + bool bViewStatusbar = config->readBoolEntry(QString("Show Statusbar"), true); + settingsMenu->setItemChecked(settingsMenu->idAt(1),bViewStatusbar); + if (!bViewStatusbar) + statusBar()->hide(); + + // bar position settings + KToolBar::BarPosition tool_bar_pos; + tool_bar_pos=(KToolBar::BarPosition) + config->readNumEntry(QString("ToolBarPos"), + KToolBar::Top); + + toolBar()->setBarPos(tool_bar_pos); + + QSize size=config->readSizeEntry(QString("Geometry")); + + // Minimum size is 350 by 250 + + if (size.isEmpty()) + { + size.setWidth(350); + size.setHeight(250); + } + + if (size.width() < 350) + { + size.setWidth(350); + } + if (size.height() < 250) + { + size.setHeight(250); + } + + resize(size); + +} + +bool KTApp::queryClose() +{ + if(cthost->dirty()) + { + KTApp* win = (KTApp*)parent(); + + int retVal = KMessageBox::warningYesNoCancel(win, + i18n("Scheduled tasks have been modified.\nDo you want to save changes?"), + QString::null, + KStdGuiItem::save(), KStdGuiItem::discard() + ); + + switch (retVal) + { + case KMessageBox::Yes: + cthost->apply(); + if (cthost->isError()) + { + KMessageBox::error(win, cthost->errorMessage()); + return false; + } + return true; + break; + case KMessageBox::No: + return true; + break; + case KMessageBox::Cancel: + return false; + break; + default: + return false; + break; + } + } + else + { + return true; + } +} + +bool KTApp::queryExit() +{ + saveOptions(); + return true; +} + +void KTApp::slotFileSave() +{ + slotStatusMsg(i18n("Saving...")); + cthost->apply(); + slotStatusMsg(i18n("Ready.")); + if (cthost->isError()) + { + KMessageBox::error(this, cthost->errorMessage()); + } +} + +void KTApp::slotFilePrint() +{ + slotStatusMsg(i18n("Printing...")); + view->print(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotFileQuit() +{ + saveOptions(); + close(); +} + +void KTApp::slotEdit(const QPoint& qp) +{ + KPopupMenu *editMenu = static_cast<KPopupMenu*>(guiFactory()->container("edit", this)); + editMenu->exec(qp, 0); +} + +void KTApp::slotEditCut() +{ + slotStatusMsg(i18n("Cutting to clipboard...")); + view->copy(); + view->remove(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditCopy() +{ + slotStatusMsg(i18n("Copying to clipboard...")); + view->copy(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditPaste() +{ + slotStatusMsg(i18n("Pasting from clipboard...")); + view->paste(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditNew() +{ + slotStatusMsg(i18n("Adding new entry...")); + view->create(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditModify() +{ + slotStatusMsg(i18n("Modifying entry...")); + view->edit(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditDelete() +{ + slotStatusMsg(i18n("Deleting entry...")); + view->remove(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditEnable() +{ + KPopupMenu *editMenu = static_cast<KPopupMenu*>(guiFactory()->container("edit", this)); + if (editMenu->isItemChecked(editMenu->idAt(8))) + { + slotStatusMsg(i18n("Disabling entry...")); + view->enable(false); + editMenu->setItemChecked(editMenu->idAt(8), false); + } + else + { + slotStatusMsg(i18n("Enabling entry...")); + view->enable(true); + editMenu->setItemChecked(editMenu->idAt(8), true); + } + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotEditRunNow() +{ + slotStatusMsg(i18n("Running command...")); + view->run(); + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotViewToolBar() +{ + if(toolBar()->isVisible()) + toolBar()->hide(); + else + toolBar()->show(); + + KPopupMenu *settingsMenu = static_cast<KPopupMenu*>(guiFactory()->container("settings", this)); + settingsMenu->setItemChecked(settingsMenu->idAt(0),toolBar()->isVisible()); + + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotViewStatusBar() +{ + if (statusBar()->isVisible()) + statusBar()->hide(); + else + statusBar()->show(); + + KPopupMenu *settingsMenu = static_cast<KPopupMenu*>(guiFactory()->container("settings", this)); + settingsMenu->setItemChecked(settingsMenu->idAt(1),statusBar()->isVisible()); + + slotStatusMsg(i18n("Ready.")); +} + +void KTApp::slotStatusMsg(const QString & text) +{ + statusBar()->clear(); + statusBar()->changeItem(text, statusMessage); + setCaption(i18n("Task Scheduler"), cthost->dirty()); +} + +void KTApp::slotStatusHelpMsg(const QString & text) +{ + statusBar()->message(text, 2000); +} + +void KTApp::statusEditCallback(int id_) +{ + KPopupMenu *editMenu = static_cast<KPopupMenu*>(guiFactory()->container("edit", this)); + int index = editMenu->indexOf(id_); + switch (index) { + case menuEditNew: + slotStatusHelpMsg(i18n("Create a new task or variable.")); + break; + case menuEditModify: + slotStatusHelpMsg(i18n("Edit the selected task or variable.")); + break; + case menuEditDelete: + slotStatusHelpMsg(i18n("Delete the selected task or variable.")); + break; + case menuEditEnabled: + slotStatusHelpMsg(i18n("Enable/disable the selected task or variable.")); + break; + case menuEditRunNow: + slotStatusHelpMsg(i18n("Run the selected task now.")); + break; + + default: + break; + } +} + +void KTApp::statusSettingsCallback(int id_) +{ + KPopupMenu *settingsMenu = static_cast<KPopupMenu*>(guiFactory()->container("settings", this)); + int index = settingsMenu->indexOf(id_); + switch (index) { + case menuSettingsShowToolBar: + slotStatusHelpMsg(i18n("Enable/disable the tool bar.")); + break; + case menuSettingsShowStatusBar: + slotStatusHelpMsg(i18n("Enable/disable the status bar.")); + break; + + default: + break; + } +} + +void KTApp::slotEnableModificationButtons(bool state) +{ + if (state) + stateChanged("no_task_selected", StateReverse); + else + stateChanged("no_task_selected"); + +} + +void KTApp::slotEnablePaste(bool state) +{ + if (state) + stateChanged("paste_disabled", StateReverse); + else + stateChanged("paste_disabled"); +} + +void KTApp::slotEnableRunNow(bool state) +{ + if (state) + stateChanged("runnow_enabled"); + else + stateChanged("runnow_enabled", StateReverse); +} + +void KTApp::slotEnableEnabled(bool state) +{ + KPopupMenu *editMenu = static_cast<KPopupMenu*>(guiFactory()->container("edit", this)); + editMenu->setItemChecked(editMenu->idAt(8),state); +} + +#include "ktapp.moc" |