summaryrefslogtreecommitdiffstats
path: root/kplato/kptmainprojectpanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kplato/kptmainprojectpanel.cpp')
-rw-r--r--kplato/kptmainprojectpanel.cpp240
1 files changed, 240 insertions, 0 deletions
diff --git a/kplato/kptmainprojectpanel.cpp b/kplato/kptmainprojectpanel.cpp
new file mode 100644
index 00000000..375b04f1
--- /dev/null
+++ b/kplato/kptmainprojectpanel.cpp
@@ -0,0 +1,240 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004, 2005 Dag Andersen <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation;
+ version 2 of the License.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "kptmainprojectpanel.h"
+
+#include <tqcheckbox.h>
+#include <tqbuttongroup.h>
+#include <tqdatetime.h>
+#include <tqdatetimeedit.h>
+#include <tqradiobutton.h>
+#include <tqpushbutton.h>
+
+#include <tqlabel.h>
+#include <klineedit.h>
+#include <ktextedit.h>
+#include <kdatewidget.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+#include <kcommand.h>
+#include <tdeabc/addressee.h>
+#include <tdeabc/addresseedialog.h>
+
+#include <kdebug.h>
+
+#include "kptproject.h"
+#include "kptcommand.h"
+#include "kptschedule.h"
+
+namespace KPlato
+{
+
+MainProjectPanel::MainProjectPanel(Project &p, TQWidget *parent, const char *name)
+ : MainProjectPanelImpl(parent, name),
+ project(p)
+{
+ namefield->setText(project.name());
+ idfield->setText(project.id());
+ leaderfield->setText(project.leader());
+ descriptionfield->setText(project.description());
+ wbs->setText(project.wbs());
+
+ //baseline->setChecked(project.isBaselined()); FIXME: Removed for this release
+
+ TQDateTime st = project.constraintStartTime();
+ TQDateTime et = project.constraintEndTime();
+ TQString s = i18n("Scheduling");
+ Schedule *sch = project.currentSchedule();
+ if (sch) {
+ s = i18n("Scheduling (%1)").arg(sch->typeToString(true));
+ }
+ schedulingGroup->setTitle(s);
+ if (project.constraint() == Node::MustStartOn) {
+ schedulingGroup->setButton(0);
+ if (sch)
+ et = project.endTime();
+ } else if (project.constraint() == Node::MustFinishOn) {
+ schedulingGroup->setButton(1);
+ if (sch)
+ st = project.startTime();
+ } else {
+ kdWarning()<<k_funcinfo<<"Illegal constraint: "<<project.constraint()<<endl;
+ schedulingGroup->setButton(0);
+ if (sch)
+ et = project.endTime();
+ }
+ startDate->setDate(st.date());
+ startTime->setTime(st.time());
+ endDate->setDate(et.date());
+ endTime->setTime(et.time());
+ enableDateTime();
+ //slotBaseline();
+ namefield->setFocus();
+}
+
+
+bool MainProjectPanel::ok() {
+ if (idfield->text() != project.id() && project.findNode(idfield->text())) {
+ KMessageBox::sorry(this, i18n("Project id must be unique"));
+ idfield->setFocus();
+ return false;
+ }
+ return true;
+}
+
+KCommand *MainProjectPanel::buildCommand(Part *part) {
+ KMacroCommand *m = 0;
+ TQString c = i18n("Modify main project");
+ if (project.name() != namefield->text()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new NodeModifyNameCmd(part, project, namefield->text()));
+ }
+ if (project.id() != idfield->text()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new NodeModifyIdCmd(part, project, idfield->text()));
+ }
+ if (project.leader() != leaderfield->text()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new NodeModifyLeaderCmd(part, project, leaderfield->text()));
+ }
+ if (project.description() != descriptionfield->text()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new NodeModifyDescriptionCmd(part, project, descriptionfield->text()));
+ }
+/* FIXME: Removed for this release
+ if (baseline->isChecked() != project.isBaselined()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new ProjectModifyBaselineCmd(part, project, baseline->isChecked()));
+ } */
+ if (bStartDate->state() && project.constraint() != Node::MustStartOn) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new ProjectModifyConstraintCmd(part, project, Node::MustStartOn));
+ }
+ if (bEndDate->state() && project.constraint() != Node::MustFinishOn) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new ProjectModifyConstraintCmd(part, project, Node::MustFinishOn));
+ }
+ if (bStartDate->state() && startDateTime() != project.constraintStartTime()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new ProjectModifyStartTimeCmd(part, project, startDateTime()));
+ }
+ if (bEndDate->state() && endDateTime() != project.constraintEndTime()) {
+ if (!m) m = new KMacroCommand(c);
+ m->addCommand(new ProjectModifyEndTimeCmd(part, project, endDateTime()));
+ }
+ return m;
+}
+
+//-------------------------------------------------------------------
+MainProjectPanelImpl::MainProjectPanelImpl(TQWidget *parent, const char *name)
+ : MainProjectPanelBase(parent, name) {
+
+ // signals and slots connections
+ connect( bStartDate, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotStartDateClicked() ) );
+ connect( bEndDate, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEndDateClicked() ) );
+ connect( bStartDate, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( bEndDate, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( descriptionfield, TQT_SIGNAL( textChanged() ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( endDate, TQT_SIGNAL( changed(TQDate) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( endTime, TQT_SIGNAL( valueChanged(const TQTime&) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( startDate, TQT_SIGNAL( changed(TQDate) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( startTime, TQT_SIGNAL( valueChanged(const TQTime&) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ //connect( baseline, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) ); FIXME: Removed for this release
+ connect( namefield, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( idfield, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ connect( leaderfield, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotCheckAllFieldsFilled() ) );
+ //connect( baseline, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( slotBaseline() ) ); FIXME: Removed for this release
+ connect( chooseLeader, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotChooseLeader() ) );
+}
+
+void MainProjectPanelImpl::slotCheckAllFieldsFilled()
+{
+ emit changed();
+ emit obligatedFieldsFilled(!namefield->text().isEmpty() && !idfield->text().isEmpty() && !leaderfield->text().isEmpty());
+}
+
+
+void MainProjectPanelImpl::slotChooseLeader()
+{
+ TDEABC::Addressee a = TDEABC::AddresseeDialog::getAddressee(this);
+ if (!a.isEmpty())
+ {
+ leaderfield->setText(a.fullEmail());
+ }
+}
+
+
+void MainProjectPanelImpl::slotStartDateClicked()
+{
+ enableDateTime();
+}
+
+
+void MainProjectPanelImpl::slotEndDateClicked()
+{
+ enableDateTime();
+}
+
+
+
+void MainProjectPanelImpl::enableDateTime()
+{
+ if (schedulingGroup->selected() == bStartDate)
+ {
+ startTime->setEnabled(true);
+ startDate->setEnabled(true);
+ endTime->setEnabled(false);
+ endDate->setEnabled(false);
+ }
+ if (schedulingGroup->selected() == bEndDate)
+ {
+ startTime->setEnabled(false);
+ startDate->setEnabled(false);
+ endTime->setEnabled(true);
+ endDate->setEnabled(true);
+ }
+}
+
+
+TQDateTime MainProjectPanelImpl::startDateTime()
+{
+ return TQDateTime(startDate->date(), startTime->time());
+}
+
+
+TQDateTime MainProjectPanelImpl::endDateTime()
+{
+ return TQDateTime(endDate->date(), endTime->time());
+}
+
+
+void MainProjectPanelImpl::slotBaseline()
+{
+ bool b = false;
+ //b = baseline->isChecked(); FIXME: Removed for this release
+ namefield->setReadOnly(b);
+ idfield->setReadOnly(b);
+ leaderfield->setReadOnly(b);
+ chooseLeader->setEnabled(!b);
+ schedulingGroup->setEnabled(!b);
+}
+
+} //KPlato namespace
+
+#include "kptmainprojectpanel.moc"