You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeadmin/kcron/ktapp.cpp

464 lines
12 KiB

/***************************************************************************
* KT application implementation. *
* -------------------------------------------------------------------- *
* Copyright (C) 1999, Gary Meyer <gary@meyer.net> *
* -------------------------------------------------------------------- *
* 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"