summaryrefslogtreecommitdiffstats
path: root/quanta/project/eventeditordlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/project/eventeditordlg.cpp')
-rw-r--r--quanta/project/eventeditordlg.cpp407
1 files changed, 407 insertions, 0 deletions
diff --git a/quanta/project/eventeditordlg.cpp b/quanta/project/eventeditordlg.cpp
new file mode 100644
index 00000000..d67251f0
--- /dev/null
+++ b/quanta/project/eventeditordlg.cpp
@@ -0,0 +1,407 @@
+/***************************************************************************
+ eventeditordlg.cpp - description
+ -------------------
+ begin : Mon Jul 12 2004
+ copyright : (C) 2004 Andras Mantia <amantia@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. *
+ * *
+ ***************************************************************************/
+
+//qt includes
+#include <qlabel.h>
+#include <qregexp.h>
+#include <qtooltip.h>
+
+//kde includes
+#include <kaction.h>
+#include <kcombobox.h>
+#include <klocale.h>
+
+ //app includes
+#include "eventeditordlg.h"
+#include "qpevents.h"
+#include "project.h"
+#include "tagaction.h"
+
+extern QString simpleMemberStr;
+extern QString taskLeaderStr;
+extern QString teamLeaderStr;
+extern QString subprojectLeaderStr;
+
+EventEditorDlg::EventEditorDlg(KActionCollection *actionCollection, QWidget* parent, const char* name, WFlags fl)
+: EventEditorDlgS(parent,name,fl)
+{
+ m_actionCollection = actionCollection;
+ eventCombo->insertStringList(QPEvents::ref()->eventNames());
+ actionCombo->insertStringList(QPEvents::ref()->actionNames());
+ slotActionChanged(actionCombo->currentText());
+}
+
+EventEditorDlg::~EventEditorDlg()
+{
+}
+
+void EventEditorDlg::setEvent(const QString &name)
+{
+ for (int i = 0; i < eventCombo->count(); i++)
+ {
+ if (eventCombo->text(i) == name)
+ {
+ eventCombo->setCurrentItem(i);
+ break;
+ }
+ }
+}
+
+void EventEditorDlg::setAction(const QString &name)
+{
+ for (int i = 0; i < actionCombo->count(); i++)
+ {
+ if (actionCombo->text(i) == name)
+ {
+ actionCombo->setCurrentItem(i);
+ slotActionChanged(name);
+ break;
+ }
+ }
+}
+
+QString EventEditorDlg::argument1()
+{
+ if (argument1Combo->isEnabled())
+ {
+ QString s = argument1Combo->currentText();
+ QString actionType = actionCombo->currentText();
+ if (actionType == QPEvents::ref()->fullActionName("email"))
+ {
+ if (s == i18n(teamLeaderStr.utf8()))
+ s = "teamleader";
+ else
+ if (s.startsWith(i18n(taskLeaderStr.utf8()) +" - "))
+ {
+ s.remove(i18n(taskLeaderStr.utf8()) +" - ");
+ s.prepend("taskleader-");
+ } else
+ if (s.startsWith(i18n(subprojectLeaderStr.utf8()) +" - "))
+ {
+ s.remove(i18n(subprojectLeaderStr.utf8()) +" - ");
+ s.prepend("subprojectleader-");
+ }
+ return s;
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("script"))
+ {
+ QString s = argument1Combo->currentText();
+ for (QMap<QString, QString>::ConstIterator it = m_scriptActions.constBegin(); it != m_scriptActions.constEnd(); ++it)
+ {
+ if (it.data() == s)
+ {
+ s = it.key();
+ break;
+ }
+ }
+ return s;
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("action"))
+ {
+ QString s = argument1Combo->currentText();
+ for (QMap<QString, QString>::ConstIterator it = m_otherActions.constBegin(); it != m_otherActions.constEnd(); ++it)
+ {
+ if (it.data() == s)
+ {
+ s = it.key();
+ break;
+ }
+ }
+ return s;
+ } else
+
+ return s;
+ }
+
+ return QString::null;
+}
+
+QString EventEditorDlg::argument2()
+{
+ if (argument2Combo->isEnabled())
+ {
+ QString actionType = actionCombo->currentText();
+ if (actionType == QPEvents::ref()->fullActionName("log"))
+ {
+ int id = argument2Combo->currentItem();
+ if (id == 0)
+ return "full";
+ else
+ return "minimal";
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("script"))
+ {
+ int id = argument2Combo->currentItem();
+ if (id == 0)
+ return "yes";
+ else
+ return "no";
+ }
+ return argument2Combo->currentText();
+ } else
+ return QString::null;
+}
+
+QString EventEditorDlg::argument3()
+{
+ if (argument3Combo->isEnabled())
+ {
+ QString actionType = actionCombo->currentText();
+ if (actionType == QPEvents::ref()->fullActionName("log"))
+ {
+ int id = argument3Combo->currentItem();
+ if (id == 0)
+ return "create_new";
+ else
+ return "append";
+ }
+ return argument3Combo->currentText();
+ } else
+ return QString::null;
+}
+
+QString EventEditorDlg::argument4()
+{
+ if (argument4Combo->isEnabled())
+ {
+ return argument4Combo->currentText();
+ } else
+ return QString::null;
+}
+
+void EventEditorDlg::setArguments(const QStringList& arguments)
+{
+ QString actionType = actionCombo->currentText();
+ if (actionType == QPEvents::ref()->fullActionName("email"))
+ {
+ QString s = arguments[0];
+ if (s == "teamleader")
+ s = i18n(teamLeaderStr.utf8());
+ else
+ if (s.startsWith("taskleader-"))
+ {
+ s.remove("taskleader-");
+ s.prepend(i18n(taskLeaderStr.utf8()) +" - ");
+ } else
+ if (s.startsWith("subprojectleader-"))
+ {
+ s.remove("subprojectleader-");
+ s.prepend(i18n(subprojectLeaderStr.utf8()) +" - ");
+ }
+ if (argument1Combo->contains(s))
+ {
+ for (int i = 0; i < argument1Combo->count(); i++)
+ {
+ if (argument1Combo->text(i) == s)
+ {
+ argument1Combo->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ argument1Combo->insertItem(s, 0);
+ argument1Combo->setCurrentItem(0);
+ }
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("script"))
+ {
+ QString s = arguments[0];
+ if (m_scriptActions.contains(s))
+ s = m_scriptActions[s];
+ if (argument1Combo->contains(s))
+ {
+ for (int i = 0; i < argument1Combo->count(); i++)
+ {
+ if (argument1Combo->text(i) == s)
+ {
+ argument1Combo->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ argument1Combo->insertItem(s, 0);
+ argument1Combo->setCurrentItem(0);
+ }
+ s = arguments[1];
+ if (s == "yes")
+ argument2Combo->setCurrentItem(0);
+ else if (s == "no")
+ argument2Combo->setCurrentItem(1);
+ return; //setup for script arguments completed
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("action"))
+ {
+ QString s = arguments[0];
+ if (m_otherActions.contains(s))
+ s = m_otherActions[s];
+ if (argument1Combo->contains(s))
+ {
+ for (int i = 0; i < argument1Combo->count(); i++)
+ {
+ if (argument1Combo->text(i) == s)
+ {
+ argument1Combo->setCurrentItem(i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ argument1Combo->insertItem(s, 0);
+ argument1Combo->setCurrentItem(0);
+ }
+ } else
+ if (actionType == QPEvents::ref()->fullActionName("log"))
+ {
+ argument1Combo->insertItem(arguments[0], 0);
+ argument1Combo->setCurrentItem(0);
+ QString s = arguments[1];
+ if (s == "full")
+ argument2Combo->setCurrentItem(0);
+ else if (s == "minimal")
+ argument2Combo->setCurrentItem(1);
+ s = arguments[2];
+ if (s == "create_new")
+ argument3Combo->setCurrentItem(0);
+ else if (s == "append")
+ argument3Combo->setCurrentItem(1);
+ return; //setup for log arguments completed
+ } else
+ {
+ argument1Combo->insertItem(arguments[0], 0);
+ argument1Combo->setCurrentItem(0);
+ }
+ argument2Combo->insertItem(arguments[1], 0);
+ argument2Combo->setCurrentItem(0);
+ argument3Combo->insertItem(arguments[2], 0);
+ argument3Combo->setCurrentItem(0);
+ argument4Combo->insertItem(arguments[3], 0);
+ argument4Combo->setCurrentItem(0);
+}
+
+void EventEditorDlg::resetArgumentWidgets(QLabel *label, KComboBox *combo)
+{
+ label->setText(i18n("Argument:"));
+ label->setEnabled(false);
+ combo->setEnabled(false);
+ combo->setEditable(true);
+ combo->clear();
+ QToolTip::remove(combo);
+}
+
+void EventEditorDlg::slotActionChanged(const QString &name)
+{
+ resetArgumentWidgets(argument1Label, argument1Combo);
+ resetArgumentWidgets(argument2Label, argument2Combo);
+ resetArgumentWidgets(argument3Label, argument3Combo);
+ resetArgumentWidgets(argument4Label, argument4Combo);
+ if (name == QPEvents::ref()->fullActionName("email"))
+ {
+ argument1Label->setEnabled(true);
+ argument1Label->setText(i18n("Receiver:"));
+ argument1Combo->setEnabled(true);
+ argument1Combo->insertItem(i18n(teamLeaderStr.utf8()));
+ QValueList<SubProject> *subprojects = Project::ref()->subprojects();
+ for (uint i = 0; i < subprojects->count(); i++)
+ {
+ QString s = (*subprojects)[i].name;
+ if (!Project::ref()->subprojectLeader(s).name.isEmpty())
+ argument1Combo->insertItem(i18n(subprojectLeaderStr.utf8()) + " - " + s);
+ }
+ QStringList tasks = Project::ref()->tasks();
+ for (uint i = 0; i < tasks.count(); i++)
+ {
+ argument1Combo->insertItem(i18n(taskLeaderStr.utf8()) + " - " + tasks[i]);
+ }
+ } else
+ if (name == QPEvents::ref()->fullActionName("log"))
+ {
+ argument1Label->setEnabled(true);
+ argument1Label->setText(i18n("Log file:"));
+ argument1Combo->setEnabled(true);
+ QToolTip::add(argument1Combo, i18n("A relative file to the project folder or a file outside of the project folder in which case the full path must be specified."));
+ argument2Label->setEnabled(true);
+ argument2Label->setText(i18n("Detail:"));
+ argument2Combo->setEnabled(true);
+ argument2Combo->setEditable(false);
+ argument2Combo->insertItem(i18n("Full"), 0);
+ argument2Combo->insertItem(i18n("Minimal"), 1);
+ argument3Label->setEnabled(true);
+ argument3Label->setText(i18n("Behavior:"));
+ argument3Combo->setEnabled(true);
+ argument3Combo->setEditable(false);
+ argument3Combo->insertItem(i18n("Create New Log"), 0);
+ argument3Combo->insertItem(i18n("Append to Existing Log"), 1);
+ } else
+ if (name == QPEvents::ref()->fullActionName("script"))
+ {
+ argument1Label->setEnabled(true);
+ argument1Label->setText(i18n("Action name:"));
+ TagAction *action = 0L;
+ QString s;
+ QStringList items;
+ QRegExp r("\\&(?!\\&)");
+ for (uint i = 0; i < m_actionCollection->count(); i++)
+ {
+ action = dynamic_cast<TagAction*>(m_actionCollection->action(i));
+ if (action && action->type() == "script")
+ {
+ s = action->text().replace(r, "");
+ items.append(s);
+ m_scriptActions[action->name()] = s;
+ }
+ }
+ items.sort();
+ argument1Combo->insertStringList(items);
+ argument1Combo->setEnabled(true);
+ argument2Label->setEnabled(true);
+ argument2Label->setText(i18n("Blocking:"));
+ argument2Combo->setEnabled(true);
+ argument2Combo->setEditable(false);
+ argument2Combo->insertItem(i18n("Yes"), 0);
+ argument2Combo->insertItem(i18n("No"), 1);
+ } else
+ if (name == QPEvents::ref()->fullActionName("action"))
+ {
+ argument1Label->setEnabled(true);
+ argument1Label->setText(i18n("Action name:"));
+ TagAction *action = 0L;
+ QString s;
+ QRegExp r("\\&(?!\\&)");
+ QStringList items;
+ for (uint i = 0; i < m_actionCollection->count(); i++)
+ {
+ KAction *a = m_actionCollection->action(i);
+ action = dynamic_cast<TagAction*>(a);
+ if (!action || action->type() != "script")
+ {
+ s = a->text().replace(r, "");
+ items.append(s);
+ m_otherActions[a->name()] = s;
+ }
+ }
+ items.sort();
+ argument1Combo->insertStringList(items);
+ argument1Combo->setEnabled(true);
+ }
+}
+
+#include "eventeditordlg.moc"
+