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