|
|
|
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 2004, 2005 Dag Andersen <danders@get2net.dk>
|
|
|
|
|
|
|
|
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"
|