20#include "kptstandardworktimedialog.h"
21#include "kptduration.h"
22#include "kptproject.h"
23#include "kptcalendar.h"
24#include "kptcommand.h"
25#include "kptintervaledit.h"
28#include <tqgroupbox.h>
30#include <tqpushbutton.h>
32#include <tqcombobox.h>
35#include <tqlineedit.h>
36#include <tqdatetimeedit.h>
37#include <tqdatetime.h>
41#include <kcalendarsystem.h>
45#include <tdelistview.h>
49class WeekdayListItem :
public TDEListViewItem
52 WeekdayListItem(Calendar *cal,
int wd, TDEListView *parent, TQString name, TDEListViewItem *after)
53 : TDEListViewItem(parent, after),
54 original(cal->weekday(wd)),
59 day =
new CalendarDay(original);
60 if (day->state() == Map::NonWorking) {
63 setText(1, TDEGlobal::locale()->formatNumber(day->duration().toDouble(Duration::Unit_h)));
71 day->clearIntervals();
73 void setIntervals(TQPtrList<TQPair<TQTime, TQTime> > intervals) {
74 day->setIntervals(intervals);
75 setText(1, TDEGlobal::locale()->formatNumber(day->duration().toDouble(Duration::Unit_h)));
77 void setState(
int st) {
81 KCommand *save(Part *part) {
83 if (*original != *day) {
84 cmd =
new CalendarModifyWeekdayCmd(part, calendar, weekday, day);
90 CalendarDay *original;
95StandardWorktimeDialog::StandardWorktimeDialog(
Project &p, TQWidget *parent,
const char *name)
96 : KDialogBase( Swallow, i18n(
"Standard Worktime"), Ok|Cancel, Ok, parent, name, true, true),
100 m_original = p.standardWorktime();
101 dia =
new StandardWorktimeDialogImpl(m_original,
this);
104 enableButtonOK(
false);
106 connect(dia, TQ_SIGNAL(obligatedFieldsFilled(
bool) ), TQ_SLOT(enableButtonOK(
bool)));
107 connect(dia, TQ_SIGNAL(enableButtonOk(
bool)), TQ_SLOT(enableButtonOK(
bool)));
110KMacroCommand *StandardWorktimeDialog::buildCommand(Part *part) {
112 TQString n = i18n(
"Modify Standard Worktime");
113 KMacroCommand *cmd = 0;
114 if (m_original->year() != dia->inYear()) {
115 if (cmd == 0) cmd =
new KMacroCommand(n);
116 cmd->addCommand(
new ModifyStandardWorktimeYearCmd(part, m_original, m_original->year(), dia->inYear()));
118 if (m_original->month() != dia->inMonth()) {
119 if (cmd == 0) cmd =
new KMacroCommand(n);
120 cmd->addCommand(
new ModifyStandardWorktimeMonthCmd(part, m_original, m_original->month(), dia->inMonth()));
122 if (m_original->week() != dia->inWeek()) {
123 if (cmd == 0) cmd =
new KMacroCommand(n);
124 cmd->addCommand(
new ModifyStandardWorktimeWeekCmd(part, m_original, m_original->week(), dia->inWeek()));
126 if (m_original->day() != dia->inDay()) {
127 if (cmd == 0) cmd =
new KMacroCommand(n);
128 cmd->addCommand(
new ModifyStandardWorktimeDayCmd(part, m_original, m_original->day(), dia->inDay()));
130 TQListViewItem *item = dia->weekdayList->firstChild();
131 for (; item; item = item->nextSibling()) {
132 KCommand *c =
static_cast<WeekdayListItem*
>(item)->save(part);
134 if (cmd == 0) cmd =
new KMacroCommand(n);
142void StandardWorktimeDialog::slotOk() {
147StandardWorktimeDialogImpl::StandardWorktimeDialogImpl(StandardWorktime *std, TQWidget *parent)
148 : StandardWorktimeDialogBase(parent),
151 m_std =
new StandardWorktime();
153 TQBoxLayout *l =
new TQVBoxLayout(intervalBox);
154 m_intervalEdit =
new IntervalEdit(intervalBox);
155 l->addWidget(m_intervalEdit);
157 m_year = m_std->year();
158 m_month = m_std->month();
159 m_week = m_std->week();
160 m_day = m_std->day();
162 year->setValue(m_year);
163 month->setValue(m_month);
164 week->setValue(m_week);
165 day->setValue(m_day);
167 weekdayList->setSorting(-1);
168 weekdayList->header()->setStretchEnabled(
true);
169 const KCalendarSystem * cs = TDEGlobal::locale()->calendar();
170 Calendar *cal = m_std->calendar();
172 WeekdayListItem *item = 0;
173 for (
int i = 0; i < 7; ++i) {
174 CalendarDay *day = cal->weekday(i);
178 item =
new WeekdayListItem(cal, i, weekdayList, cs->weekDayName(i+1), item);
179 weekdayList->insertItem(item);
182 connect(year, TQ_SIGNAL(valueChanged(
double)), TQ_SLOT(slotYearChanged(
double)));
183 connect(month, TQ_SIGNAL(valueChanged(
double)), TQ_SLOT(slotMonthChanged(
double)));
184 connect(week, TQ_SIGNAL(valueChanged(
double)), TQ_SLOT(slotWeekChanged(
double)));
185 connect(day, TQ_SIGNAL(valueChanged(
double)), TQ_SLOT(slotDayChanged(
double)));
187 connect(m_intervalEdit, TQ_SIGNAL(changed()), TQ_SLOT(slotIntervalChanged()));
188 connect(bApply, TQ_SIGNAL(clicked()), TQ_SLOT(slotApplyClicked()));
189 connect(weekdayList, TQ_SIGNAL(selectionChanged()), TQ_SLOT(slotWeekdaySelected()));
190 connect(state, TQ_SIGNAL(activated(
int)), TQ_SLOT(slotStateChanged(
int)));
192 if (weekdayList->firstChild()) {
193 weekdayList->setSelected(weekdayList->firstChild(),
true);
194 weekdayList->setCurrentItem(weekdayList->firstChild());
199void StandardWorktimeDialogImpl::slotEnableButtonApply(
bool on) {
200 bApply->setEnabled(on);
203void StandardWorktimeDialogImpl::slotEnableButtonOk(
bool on) {
204 emit enableButtonOk(on);
207void StandardWorktimeDialogImpl::slotCheckAllFieldsFilled() {
208 emit obligatedFieldsFilled(
true);
211void StandardWorktimeDialogImpl::slotYearChanged(
double value) {
214 if (month->value() > value)
215 month->setValue(value);
216 slotEnableButtonOk(
true);
219void StandardWorktimeDialogImpl::slotMonthChanged(
double value) {
221 if (year->value() < value)
222 year->setValue(value);
223 if (week->value() > value)
224 week->setValue(value);
225 slotEnableButtonOk(
true);
228void StandardWorktimeDialogImpl::slotWeekChanged(
double value) {
230 if (month->value() < value)
231 month->setValue(value);
232 if (day->value() > value)
233 day->setValue(value);
234 slotEnableButtonOk(
true);
237void StandardWorktimeDialogImpl::slotDayChanged(
double value) {
239 if (week->value() < value)
240 week->setValue(value);
241 slotEnableButtonOk(
true);
244void StandardWorktimeDialogImpl::slotIntervalChanged() {
246 slotEnableButtonApply(
true);
249void StandardWorktimeDialogImpl::slotApplyClicked() {
251 TQListViewItem *item = weekdayList->firstChild();
252 for (; item; item = item->nextSibling()) {
253 if (item->isSelected()) {
255 WeekdayListItem *wd =
static_cast<WeekdayListItem*
>(item);
256 wd->setState(state->currentItem());
257 if (state->currentItem() == 0) {
260 wd->setIntervals(m_intervalEdit->intervals());
262 slotEnableButtonOk(
true);
267void StandardWorktimeDialogImpl::slotWeekdaySelected() {
270 TQListViewItem *item = weekdayList->firstChild();
271 for (; item; item = item->nextSibling()) {
272 if (item->isSelected()) {
274 WeekdayListItem *wd =
static_cast<WeekdayListItem*
>(item);
275 state->setCurrentItem(wd->day->state()-1);
276 m_intervalEdit->setIntervals(wd->day->workingIntervals());
277 slotStateChanged(state->currentItem());
281 editBox->setEnabled(item != 0);
284void StandardWorktimeDialogImpl::slotStateChanged(
int st) {
286 intervalBox->setEnabled(st == 1);
287 slotEnableButtonApply(st == 0);
292#include "kptstandardworktimedialog.moc"
Project is the main node in a project, it contains child nodes and possibly sub-projects.