00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#include <qbuttongroup.h>
00024
#include <qcombobox.h>
00025
#include <qgroupbox.h>
00026
#include <qhbox.h>
00027
#include <qlabel.h>
00028
#include <qlayout.h>
00029
#include <qlineedit.h>
00030
#include <qpixmap.h>
00031
#include <qpushbutton.h>
00032
#include <qradiobutton.h>
00033
#include <qstring.h>
00034
#include <qwidget.h>
00035
#include <qwhatsthis.h>
00036
00037
#include <kiconloader.h>
00038
#include <klocale.h>
00039
#include <kwinmodule.h>
00040
00041
#include "edittaskdialog.h"
00042
#include "ktimewidget.h"
00043
#include "kdebug.h"
00044
00045 EditTaskDialog::EditTaskDialog( QString caption,
bool editDlg,
00046 DesktopList* desktopList)
00047 : KDialogBase(0, "
EditTaskDialog", true, caption, Ok|Cancel, Ok, true ),
00048 origTime( 0 ), origSession( 0 )
00049 {
00050 QWidget *page =
new QWidget(
this );
00051 setMainWidget(page);
00052
00053 QVBoxLayout *lay1 =
new QVBoxLayout(page);
00054
00055 QHBoxLayout *lay2 =
new QHBoxLayout();
00056 lay1->addLayout(lay2);
00057
00058
00059 QLabel *label =
new QLabel( i18n(
"Task &name:"), page,
"name" );
00060 lay2->addWidget( label );
00061 lay2->addSpacing(5);
00062
00063
00064 _name =
new QLineEdit( page,
"lineedit" );
00065
00066 _name->setMinimumWidth(fontMetrics().maxWidth()*15);
00067 lay2->addWidget( _name );
00068 label->setBuddy( _name );
00069
00070
00071
00072 lay1->addSpacing(10);lay1->addStretch(1);
00073 _absoluteRB =
new QRadioButton( i18n(
"Edit &absolute" ), page,
00074
"_absoluteRB" );
00075 lay1->addWidget( _absoluteRB );
00076 connect( _absoluteRB, SIGNAL( clicked() ),
this, SLOT( slotAbsolutePressed() ) );
00077
00078
00079
00080 QHBoxLayout *lay5 =
new QHBoxLayout();
00081 lay1->addLayout(lay5);
00082 lay5->addSpacing(20);
00083 QGridLayout *lay3 =
new QGridLayout( 2, 2, -1,
"lay3" );
00084 lay5->addLayout(lay3);
00085
00086
00087 _timeLA =
new QLabel( i18n(
"&Time:"), page,
"time" );
00088 lay3->addWidget( _timeLA, 0, 0 );
00089
00090 _timeTW =
new KArmTimeWidget( page,
"_timeTW" );
00091 lay3->addWidget( _timeTW, 0, 1 );
00092 _timeLA->setBuddy( _timeTW );
00093
00094
00095
00096 _sessionLA =
new QLabel( i18n(
"&Session time:"), page,
"session time" );
00097 lay3->addWidget( _sessionLA, 1, 0 );
00098
00099 _sessionTW =
new KArmTimeWidget( page,
"_sessionTW" );
00100 lay3->addWidget( _sessionTW, 1, 1 );
00101 _sessionLA->setBuddy( _sessionTW );
00102
00103
00104
00105 lay1->addSpacing(10);lay1->addStretch(1);
00106 _relativeRB =
new QRadioButton( i18n(
"Edit &relative (apply to both time and"
00107
" session time)" ), page,
"_relativeRB" );
00108 lay1->addWidget( _relativeRB );
00109 connect( _relativeRB, SIGNAL( clicked() ),
this, SLOT(slotRelativePressed()) );
00110
00111
00112 QHBoxLayout *lay4 =
new QHBoxLayout();
00113 lay1->addLayout( lay4 );
00114 lay4->addSpacing(20);
00115
00116 _operator =
new QComboBox(page);
00117 _operator->insertItem( QString::fromLatin1(
"+" ) );
00118 _operator->insertItem( QString::fromLatin1(
"-" ) );
00119 lay4->addWidget( _operator );
00120
00121 lay4->addSpacing(5);
00122
00123 _diffTW =
new KArmTimeWidget( page,
"_sessionAddTW" );
00124 lay4->addWidget( _diffTW );
00125
00126 desktopCount = getDesktopCount();
00127
00128
00129
00130
00131
if ( (desktopList != 0) && (desktopList->size() > 0) )
00132 {
00133 DesktopList::iterator rit = desktopList->begin();
00134
while (*rit < desktopCount && rit!=desktopList->end())
00135 {
00136 ++rit;
00137 }
00138 desktopList->erase(rit, desktopList->end());
00139 }
00140
00141
00142 lay1->addSpacing(10);
00143 lay1->addStretch(1);
00144
00145 _desktopCB =
new QCheckBox(i18n(
"A&uto tracking"), page);
00146 _desktopCB->setEnabled(
true);
00147 lay1->addWidget(_desktopCB);
00148
00149 QGroupBox* groupBox;
00150 {
00151
int lines = (
int)(desktopCount/2);
00152
if (lines*2 != desktopCount) lines++;
00153 groupBox =
new QButtonGroup( lines, QGroupBox::Horizontal,
00154 i18n(
"In Desktop"), page,
"_desktopsGB");
00155 }
00156 lay1->addWidget(groupBox);
00157
00158 QHBoxLayout *lay6 =
new QHBoxLayout();
00159
00160 lay1->addLayout(lay6);
00161
for (
int i=0; i<desktopCount; i++) {
00162 _deskBox.push_back(
new QCheckBox(groupBox,QString::number(i).latin1()));
00163 _deskBox[i]->setText(QString::number(i+1));
00164 _deskBox[i]->setChecked(
false);
00165
00166 lay6->addWidget(_deskBox[i]);
00167 }
00168
00169
bool enableDesktops =
false;
00170
00171
if ( (desktopList != 0) && (desktopList->size() > 0) )
00172 {
00173 DesktopList::iterator it = desktopList->begin();
00174
while (it != desktopList->end())
00175 {
00176 _deskBox[*it]->setChecked(
true);
00177 it++;
00178 }
00179 enableDesktops =
true;
00180 }
00181
00182 _desktopCB->setChecked(enableDesktops);
00183
00184
for (
int i=0; i<desktopCount; i++)
00185 _deskBox[i]->setEnabled(enableDesktops);
00186
00187 connect(_desktopCB, SIGNAL(clicked()),
this, SLOT(slotAutoTrackingPressed()));
00188
00189 KIconLoader loader;
00190
00191 QPixmap whatsThisIM = loader.loadIcon( QString::fromLatin1(
"contexthelp"),
00192 KIcon::Toolbar);
00193 QPushButton* whatsThisBU =
new QPushButton(page,
"whatsThisLA");
00194 whatsThisBU->setFocusPolicy(NoFocus);
00195
00196 connect(whatsThisBU, SIGNAL(clicked()),
this, SLOT(enterWhatsThis()));
00197 whatsThisBU->setPixmap( whatsThisIM );
00198 lay4->addWidget(whatsThisBU);
00199
00200 lay1->addStretch(1);
00201
00202
00203
if ( editDlg ) {
00204
00205 _operator->setFocus();
00206 }
00207
else {
00208
00209 _name->setFocus();
00210 }
00211
00212 slotRelativePressed();
00213
00214
00215 QWhatsThis::add( _name,
00216 i18n(
"Enter the name of the task here. "
00217
"This name is for your eyes only."));
00218 QWhatsThis::add( _absoluteRB,
00219 i18n(
"If you select this radio button, you specify that "
00220
"you want to enter the time as absolute values. For "
00221
"example: the time for this task is 20 hours and 15 "
00222
"minutes.\n\n"
00223
"The time is specified for the cumulated time and "
00224
"the session time separately."));
00225 QWhatsThis::add( _relativeRB,
00226 i18n(
"If you select this radio button, you specify that "
00227
"you want to add or subtract time for the task. For "
00228
"example: I've worked 2 hours and 20 minutes more on "
00229
"this task (without having the timer running.)\n\n"
00230
"This time will be added or subtracted for both the "
00231
"session time and the cumulated time."));
00232 QWhatsThis::add( _timeTW,
00233 i18n(
"This is the overall time this task has been "
00234
"running."));
00235 QWhatsThis::add( _sessionTW,
00236 i18n(
"This is the time the task has been running this "
00237
"session."));
00238 QWhatsThis::add( _diffTW, i18n(
"Specify how much time to add or subtract "
00239
"to the overall and session time"));
00240 }
00241
00242
int EditTaskDialog::getDesktopCount()
00243 {
00244 KWinModule k(0, KWinModule::INFO_DESKTOP);
00245
return k.numberOfDesktops();
00246 }
00247
00248
void EditTaskDialog::enterWhatsThis()
00249 {
00250 QWhatsThis::enterWhatsThisMode ();
00251 }
00252
00253
00254
void EditTaskDialog::slotAbsolutePressed()
00255 {
00256 _relativeRB->setChecked(
false );
00257 _absoluteRB->setChecked(
true );
00258
00259 _operator->setEnabled(
false );
00260 _diffTW->setEnabled(
false );
00261
00262 _timeLA->setEnabled(
true );
00263 _sessionLA->setEnabled(
true );
00264 _timeTW->setEnabled(
true );
00265 _sessionTW->setEnabled(
true );
00266 }
00267
00268
void EditTaskDialog::slotRelativePressed()
00269 {
00270 _relativeRB->setChecked(
true );
00271 _absoluteRB->setChecked(
false );
00272
00273 _operator->setEnabled(
true );
00274 _diffTW->setEnabled(
true );
00275
00276 _timeLA->setEnabled(
false );
00277 _sessionLA->setEnabled(
false );
00278 _timeTW->setEnabled(
false );
00279 _sessionTW->setEnabled(
false );
00280 }
00281
00282
void EditTaskDialog::slotAutoTrackingPressed()
00283 {
00284
bool checked = _desktopCB->isChecked();
00285
for (
unsigned int i=0; i<_deskBox.size(); i++)
00286 _deskBox[i]->setEnabled(checked);
00287
00288
if (!checked)
00289
for (
int i=0; i<desktopCount; i++)
00290 _deskBox[i]->setChecked(
false);
00291 }
00292
00293
void EditTaskDialog::setTask(
const QString &name,
long time,
long session )
00294 {
00295 _name->setText( name );
00296
00297 _timeTW->
setTime( time / 60, time % 60 );
00298 _sessionTW->
setTime( session / 60, session % 60 );
00299 origTime = time;
00300 origSession = session;
00301 }
00302
00303
00304 QString EditTaskDialog::taskName()
const
00305
{
00306
return( _name->text() );
00307 }
00308
00309
00310
void EditTaskDialog::status(
long *time,
long *timeDiff,
long *session,
00311
long *sessionDiff, DesktopList *desktopList)
const
00312
{
00313
if ( _absoluteRB->isChecked() ) {
00314 *time = _timeTW->
time();
00315 *session = _sessionTW->
time();
00316 }
00317
else {
00318
int diff = _diffTW->
time();
00319
if ( _operator->currentItem() == 1) {
00320 diff = -diff;
00321 }
00322 *time = origTime + diff;
00323 *session = origSession + diff;
00324 }
00325
00326 *timeDiff = *time - origTime;
00327 *sessionDiff = *session - origSession;
00328
00329
for (
unsigned int i=0; i<_deskBox.size(); i++) {
00330
if (_deskBox[i]->isChecked())
00331 desktopList->push_back(i);
00332 }
00333 }
00334
00335
#include "edittaskdialog.moc"