diff options
Diffstat (limited to 'src/ktview.cpp')
-rw-r--r-- | src/ktview.cpp | 609 |
1 files changed, 609 insertions, 0 deletions
diff --git a/src/ktview.cpp b/src/ktview.cpp new file mode 100644 index 0000000..e5836d4 --- /dev/null +++ b/src/ktview.cpp @@ -0,0 +1,609 @@ +/************************************************************************** + * KT main GUI view 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 "ktview.h" + + +#include <config.h> + +// #ifdef HAVE_SSTREAM +// #include <sstream> +// #else +// #include <strstream.h> +// #endif + + +#include <qfileinfo.h> + +#include "cthost.h" +#include "ctcron.h" +#include "ctvariable.h" +#include "cttask.h" + + + +#include "ktlistcron.h" +//#include "ktlistvars.h" +//#include "ktlistvar.h" +#include "ktlisttasks.h" +#include "ktlisttask.h" +//#include "ktapp.h" +//#include "ktvariable.h" +//#include "kttask.h" +//#include "ktprint.h" + +#include "schedule.h" + +#include <stdlib.h> // system + +KTView::KTView(QWidget *parent, const char* name) : + QWidget(parent, name), + listView(0), + currentCTCron(0), + currentIsTask(true), + currentCTTask(0), + currentCTVariable(0), + clipboardIsTask(true), + clipboardCTTask(0), + clipboardCTVariable(0) +{ + sched = (Schedule*)parentWidget()->parentWidget(); + //cthost = new CTHost(); + //const CTHost& cth(*cthost); + + setBackgroundMode(PaletteBase); + refresh(); + listView->setSelected(listView->firstChild(), true); + +// connect(this, SIGNAL(enableModificationButtons(bool)), parent, +// SLOT(slotEnableModificationButtons(bool))); +// +// connect(this, SIGNAL(enablePaste(bool)), parent, +// SLOT(slotEnablePaste(bool))); +// +// connect(this, SIGNAL(enableRunNow(bool)), parent, +// SLOT(slotEnableRunNow(bool))); +// +// connect(this, SIGNAL(enableEnabled(bool)), parent, +// SLOT(slotEnableEnabled(bool))); +// +// emit(enableModificationButtons(false)); +// emit(enablePaste(clipboardCTVariable)); +// emit(enableRunNow(false)); + + listView->setColumnWidthMode(1, QListView::Manual); + listView->hideColumn(1); + +} + +void KTView::refresh() +{ + QListView* tmpListView(listView); + + listView = new QListView(this); + + listView->setFrameStyle(QListView::Panel | QListView::Sunken); + listView->setRootIsDecorated(true); + listView->setAllColumnsShowFocus(true); + listView->setShowSortIndicator(true); + + const CTHost& cth(sched->getCTHost()); + //const CTHost& cth(*cthost); + +/* if (cth.root()) + listView->addColumn(i18n("Users/Tasks/Variables")); + else*/ + listView->addColumn(i18n("Scan Description")); + + listView->addColumn(i18n("Value")); + listView->addColumn(i18n("When to Scan")); + + //for (int item = 0; item <=2; item++) + //listView->setColumnWidthMode(item, QListView::Maximum); + + // for each user + for (CTCronIterator i = const_cast<CTHost&>(cth).cron.begin(); + i != cth.cron.end(); i++) + { + CTCron* ctcron((CTCron*)*i); + +// KTListVars* variables(0); + KTListTasks* tasks(0); + +/* if (cth.root()) + { + KTListCron* user = new KTListCron(listView, ctcron); + if (currentCTCron == ctcron) + { + listView->setSelected(user, true); + } + + variables = new KTListVars(user, ctcron); + tasks = new KTListTasks(user, ctcron); + } + else + { + variables = new KTListVars(listView, ctcron);*/ + tasks = new KTListTasks(listView, ctcron); +// } + + if (currentIsTask) + { + listView->setSelected(tasks, true); + slotSetCurrent(tasks); + } +// else +// { +// listView->setSelected(variables, true); +// slotSetCurrent(variables); +// } + +/* for (CTVariableIterator j = (CTVariableIterator)ctcron->variable.begin(); + j != ctcron->variable.end(); j++) + { + new KTListVar(variables, ctcron, (CTVariable*)*j); + } +*/ + for (CTTaskIterator k = (CTTaskIterator)ctcron->task.begin(); + k != ctcron->task.end(); k++) + { + new KTListTask(tasks, ctcron, (CTTask*)*k); + } + } + + resizeEvent(); + + connect(listView, SIGNAL(contextMenuRequested(QListViewItem*, const QPoint&, int)), + SLOT(slotMenu(QListViewItem*, const QPoint&, int))); + + connect(listView, SIGNAL(selectionChanged(QListViewItem*)), + SLOT(slotSetCurrent(QListViewItem*))); + + connect(listView, SIGNAL(doubleClicked(QListViewItem*)), + SLOT(slotEdit(QListViewItem*))); + + connect(listView, SIGNAL(returnPressed(QListViewItem*)), + SLOT(slotEdit(QListViewItem*))); + + + // switch to the new view + if (tmpListView) + { + tmpListView->hide(); + listView->show(); + listView->setFocus(); + delete tmpListView; + } + + listView->setColumnWidthMode(1, QListView::Manual); + listView->hideColumn(1); + + QListViewItemIterator it( listView); + + while ( it.current() ) { + + QListViewItem* tItem = it.current(); + //kdDebug() << tItem->text(1) << endl; + + if ((tItem->text(1).contains("klamav")) || (tItem->text(1).contains("Klamav")) || (tItem->text(0).contains("Tasks"))) + tItem->setVisible(true); + else + tItem->setVisible(false); + ++it; + } + +} + +// void KTView::print () const +// { +// bool crontab, allUsers; +// KTListItem *ktli, *user; +// +// const CTHost& cth(ktapp->getCTHost()); +// +// KTPrint printer(cth.root()); +// +// if (printer.start()) +// { +// crontab = printer.crontab(); +// allUsers = printer.allUsers(); +// +// printer.createColumns(3); +// +// int copies = printer.numCopies(); +// while (copies != 0) +// { +// if (allUsers || !cth.root()) +// { +// ktli = (KTListItem*)listView->firstChild(); +// } +// else +// { +// ktli = (KTListItem*)listView->currentItem(); +// } +// +// //Check that the correct item is selected, they must +// //select the top level entry for all items to print +// while (ktli->depth() != 0) +// ktli = (KTListItem*)ktli->parent(); +// +// user = ktli; //Used to store user's name +// +// if (allUsers) +// { +// while (ktli) +// { +// pageHeading(ktli, printer); +// ktli->print(printer); +// if (crontab) +// pageFooter(ktli, printer); +// ktli = (KTListItem*)ktli->nextSibling(); +// if (ktli) +// printer.newPage(); +// } +// } +// else +// { +// //ktli goes out of range here hence the need for user +// pageHeading(user, printer); +// if (!cth.root()) +// { +// while (ktli) +// { +// ktli->print(printer); +// ktli = (KTListItem*)ktli->nextSibling(); +// } +// } +// else +// ktli->print(printer); +// +// if (crontab) +// pageFooter(user, printer); +// +// } +// +// copies--; //Keep a track of how many copies we have printed +// if (copies != 0) printer.newPage(); +// }//End printing loop (for more than one copy) +// +// printer.finished(); //End the print +// +// }//End Printing if +// } + +// void KTView :: pageHeading (KTListItem* user, KTPrint &printer) const +// { +// QFont stnd; +// QString logonInfo; +// QDateTime now (QDateTime::currentDateTime()); +// char hostName[20]; +// +// gethostname(hostName, 20); +// // SSA : Fix Me user name, logon name and host name musst be +// // SSA : not only in us-ascii ?? +// logonInfo = i18n("user on host", "%1 <%2> on %3") +// .arg(QString::fromLocal8Bit(user->getCTCron()->name.c_str())) +// .arg(QString::fromLocal8Bit(user->getCTCron()->login.c_str())) +// .arg(QString::fromLocal8Bit(hostName)); +// +// stnd = printer.getFont(); +// printer.setFont(QFont( KGlobalSettings::generalFont().family(), 14, QFont::Bold )); +// +// printer.print (i18n("Scheduled Tasks"), 2, KTPrint::alignTextCenter, false); +// printer.print (logonInfo, 2, KTPrint::alignTextCenter, false); +// printer.print (KGlobal::locale()->formatDateTime(now), 2, KTPrint::alignTextCenter, false); +// printer.setFont(stnd); +// +// printer.levelColumns(20); +// +// } + +// void KTView :: pageFooter (KTListItem* user, KTPrint &printer) const +// { +// #ifdef HAVE_SSTREAM +// ostringstream oss; +// #else +// char buffer[4096]; +// ostrstream oss(buffer, sizeof(buffer)); +// #endif +// +// oss<<*(user->getCTCron())<<ends; +// +// if (oss) { +// string crontab(oss.str()); +// printer.print(crontab.c_str(), 1, KTPrint::alignTextLeft, false); +// } +// } + +KTView::~KTView() +{ + delete listView; +} + +void KTView::resizeEvent (QResizeEvent*) +{ + listView->setFixedWidth(width()); + listView->setFixedHeight(height()); + repaint(); +} + +// void KTView::copy() +// { +// if (clipboardCTTask) +// { +// delete clipboardCTTask; +// clipboardCTTask = 0; +// } +// +// if (clipboardCTVariable) +// { +// delete clipboardCTVariable; +// clipboardCTVariable = 0; +// } +// +// if (currentIsTask) +// { +// clipboardCTTask = new CTTask(*currentCTTask); +// } +// else +// { +// clipboardCTVariable = new CTVariable(*currentCTVariable); +// } +// clipboardIsTask = currentIsTask; +// } + +/*void KTView::paste() +{ + KTListItem* qlvi = (KTListItem*)listView->currentItem(); + + if (currentIsTask) + { + CTTask* temptask = new CTTask(*clipboardCTTask); + currentCTCron->task.push_back(temptask); + KTListTask* ktlt = new KTListTask(qlvi, currentCTCron, temptask); + listView->setSelected(ktlt, true); + } + else + { + CTVariable* tempvar = new CTVariable(*clipboardCTVariable); + currentCTCron->variable.push_back(tempvar); + KTListVar* ktlv = new KTListVar(qlvi, currentCTCron, tempvar); + listView->setSelected(ktlv, true); + } +} +*/ +void KTView::create() +{ + KTListItem* ktli = (KTListItem*)listView->currentItem(); + if ((ktli->text(0) != KTListTasks::getDescription()) ) { + ktli = (KTListItem*)ktli->parent(); + } + Q_CHECK_PTR(ktli); + ktli->create(); + listView->triggerUpdate(); +} + +// void KTView::edit() +// { +// KTListItem* ktli = (KTListItem*)listView->currentItem(); +// Q_CHECK_PTR(ktli); +// ktli->edit(); +// listView->triggerUpdate(); +// } + +void KTView::remove() +{ + if (currentIsTask) + { + if (currentCTTask) + { + for (CTTaskIterator i = (CTTaskIterator) + (currentCTCron->task.begin()); + i != currentCTCron->task.end(); i++) + { + if (*i == currentCTTask) + { + currentCTCron->task.erase(i); + delete currentCTTask; + currentCTTask = 0; + break; + } + } + } + } + else + { + if (currentCTVariable) + { + for (CTVariableIterator j = (CTVariableIterator) + (currentCTCron->variable.begin()); + j != currentCTCron->variable.end(); j++) + { + if (*j == currentCTVariable) + { + currentCTCron->variable.erase(j); + delete currentCTVariable; + currentCTVariable = 0; + break; + } + } + } + } + refresh(); +} + +QString KTView::absolute() const +{ + QString fullCommand = QString::fromLocal8Bit(currentCTTask->command.c_str()); + QString command(fullCommand); + int pos(command.find(" ")); + if (pos > 0) command = command.left(pos); + + if (command.find("/") == 0) + return fullCommand; + + QString path = QString::fromLocal8Bit(currentCTCron->path().c_str()); + int begin(0); + int end(0); + QString prefix; + QString full; + + while ((end = path.find(":", begin)) > 0) + { + prefix = path.mid(begin, begin + end) + "/"; + full = prefix + command; + if (QFileInfo(full).isExecutable()) + return QString(prefix + fullCommand); + begin = end + 1; + } + prefix = path.mid(begin, begin + end) + "/"; + full = prefix + command; + if (QFileInfo(full).isExecutable()) + return QString(prefix + fullCommand); + return QString(""); +} + +void KTView::run() const +{ + QString command(absolute() + " &"); + system(QFile::encodeName(command)); +} + +void KTView::enable(bool enable) +{ + QListViewItem* qlvi = listView->currentItem(); + + if (currentIsTask) + { + if (currentCTTask) + { + currentCTTask->enabled = enable; + ((KTListTask*)(qlvi))->refresh(); + } + } +/* else + { + if (currentCTVariable) + { + currentCTVariable->enabled = enable; + ((KTListVar*)(qlvi))->refresh(); + } + }*/ +} + +void KTView::slotMenu(QListViewItem* qlvi, const QPoint& /*qp*/, int /*i*/) +{ + if (qlvi !=0 ) { + listView->setSelected(qlvi, true); + slotSetCurrent(qlvi); + //ktapp->slotEdit(qp); + } +} + +void KTView::slotEdit(QListViewItem* /*qlvi*/) +{ + //edit(); +} + +void KTView::slotSetCurrent (QListViewItem* qlvi) +{ + QListViewItem* parent = qlvi->parent(); + +/* if (qlvi->text(0) == KTListVars::getDescription()) + { + // variable label + currentCTCron = ((KTListCron*)qlvi)->getCTCron(); + currentCTVariable = 0; + currentCTTask = 0; + currentIsTask = false; + emit(enableModificationButtons(false)); + emit(enablePaste(clipboardCTVariable)); + emit(enableRunNow(false)); + emit(enableEnabled(false)); + + } + else*/ if (qlvi->text(0) == KTListTasks::getDescription()) + { + // task label + currentCTCron = ((KTListCron*)qlvi)->getCTCron(); + currentCTVariable = 0; + currentCTTask = 0; + currentIsTask = true; + + emit(enableModificationButtons(false)); + emit(enablePaste(clipboardCTTask)); + emit(enableRunNow(false)); + emit(enableEnabled(false)); + + } + else if (parent) + { +/* if (parent->text(0) == KTListVars::getDescription()) + { + // variable + currentCTCron = ((KTListVar*)qlvi)->getCTCron(); + currentCTVariable = ((KTListVar*)qlvi)->getCTVariable(); + currentCTTask = 0; + currentIsTask = false; + + emit(enableModificationButtons(true)); + emit(enableRunNow(false)); + emit(enableEnabled(currentCTTask->enabled)); + + } + else*/ if (parent->text(0) == KTListTasks::getDescription()) + { + // task + currentCTCron = ((KTListTask*)qlvi)->getCTCron(); + currentCTVariable = 0; + currentCTTask = ((KTListTask*)qlvi)->getCTTask(); + currentIsTask = true; + + emit(enableModificationButtons(true)); + emit(enableRunNow((currentCTTask->enabled) && + (!absolute().isEmpty()))); + emit(enableEnabled(currentCTTask->enabled)); + + } + } + else + { + // user + currentCTCron = ((KTListCron*)qlvi)->getCTCron(); + currentCTVariable = 0; + currentCTTask = 0; + currentIsTask = true; + + emit(enableModificationButtons(true)); + emit(enablePaste(false)); + emit(enableRunNow(false)); + emit(enableEnabled(false)); + + } +} + +CTCron* KTView::getCTCron() +{ + return currentCTCron; +} + +QListViewItem* KTView::currentItem() +{ + //kdDebug() << listView->currentItem()->text(1) << endl; + return listView->currentItem(); +} + +void KTView::hideCommand() +{ + listView->hideColumn(1); +} + +#include "ktview.moc" |