Source Code (Use browser search to find items of interest.)
Class Index
karm'Karm (./kdeutils/karm/karm.h:14)
class Karm : public QSplitter
{
Q_OBJECT
private:
TaskBroker *_broker;
QListBox *_timeList;
QListBox *_nameList;
bool _timerRunning;
int _timerId;
char *_timeStr;
AddTaskDialog *_addDlg;
AddTaskDialog *_editDlg;
/** Fills the list boxes with the current task list.
* The list is cleared first.
*/
void fillListBoxes();
public:
/** constructor */
Karm( QWidget *parent = 0 );
/** destructor */
virtual ~Karm();
///
static void formatTime(char *dest, long minutes);
// Application "Name"
QString KarmName;
public slots:
///
void load();
///
void save();
///
void stopClock();
///
void startClock();
///
void moveTo( int );
///
void newTask();
///
void editTask();
///
void deleteTask();
/** Rereads the task data and updates the corresponding
* list entry.
*/
void updateCurrentItem();
protected slots:
/** creates a new task.
* Used as a callback from the new task dialog, creates
* a new task only if returned is TRUE.
*/
void createNewTask( bool returned );
/** updates an existing task.
* Used as a callback from the new task dialog, updates
* the task from the Dialog fields only if returned is TRUE.
*/
void updateExistingTask( bool returned );
protected:
///
virtual void timerEvent( QTimerEvent * );
signals:
///
void timerStarted();
///
void timerStopped();
///
void timerTick();
};
inline void Karm::formatTime( char *dest, long minutes )
{
sprintf( dest, "%ld:%02ld", minutes / 60, minutes % 60 );
}
karm'Karm::Karm() (./kdeutils/karm/karm.cpp:27)
Karm::Karm( QWidget *parent )
: QSplitter( parent )
{
_timerRunning = FALSE;
_addDlg = 0;
_editDlg = 0;
_broker = new TaskBroker;
_timeList = new QListBox(this); // implicitly on the left
_nameList = new QListBox(this); // implicitly on the right
QValueList<int> qvl;
qvl.append(10);
qvl.append(90);
setSizes(qvl);
_timeStr = new char[50];
_broker->moveCursor(0);
connect(_nameList, SIGNAL( highlighted(int) ), this, SLOT(moveTo(int)));
connect(_timeList, SIGNAL( highlighted(int) ), this, SLOT(moveTo(int)));
// 1999-11-20-Espen Sand: Double click opens edit dialog.
connect(_nameList, SIGNAL( selected(int) ), this, SLOT(editTask()));
connect(_timeList, SIGNAL( selected(int) ), this, SLOT(editTask()));
startClock();
// Peter Putzer: added KarmName
KarmName = QString(kapp->caption());
}
karm'Karm::~Karm() (./kdeutils/karm/karm.cpp:61)
Karm::~Karm()
{
save();
delete _broker;
delete[] _timeStr;
}
karm'Karm::load() (./kdeutils/karm/karm.cpp:68)
void Karm::load()
{
QFileInfo info;
KConfig &config = *kapp->config();
config.setGroup( "Karm" );
QString defaultPath( locateLocal("appdata", "karmdata.txt"));
info.setFile( config.readEntry( "DataPath", defaultPath ) );
if( info.exists() )
{
_broker->readFromFile( info.filePath().ascii() );
fillListBoxes();
return;
}
}
karm'Karm::save() (./kdeutils/karm/karm.cpp:86)
void Karm::save()
{
KConfig &config = *kapp->config();
config.setGroup("Karm");
QString defaultPath( locateLocal("appdata", "karmdata.txt"));
if(!_broker->writeToFile(config.readEntry("DataPath",defaultPath).ascii()))
{
QString msg = i18n(""
"There was an error trying to save your data file.\n"
"Time accumulated this session will NOT be saved!\n");
KMessageBox::error(0, msg );
}
}
karm'Karm::stopClock() (./kdeutils/karm/karm.cpp:102)
void Karm::stopClock()
{
if( _timerRunning ) {
killTimer( _timerId );
_timerRunning = FALSE;
emit timerStopped();
}
}
karm'Karm::startClock() (./kdeutils/karm/karm.cpp:112)
void Karm::startClock()
{
if( !_timerRunning && (_broker->count() > 0)) {
_timerId = startTimer( 60000 );
_timerRunning = TRUE;
emit timerStarted();
}
}
karm'Karm::moveTo() (./kdeutils/karm/karm.cpp:122)
void Karm::moveTo( int position )
{
_nameList->setCurrentItem( position );
_timeList->setCurrentItem( position );
_broker->moveTo( position );
}
karm'Karm::fillListBoxes() (./kdeutils/karm/karm.cpp:129)
void Karm::fillListBoxes()
{
int taskCount = _broker->count();
_timeList->clear();
_nameList->clear();
if( taskCount == 0 )
return;
_broker->top();
do {
Task *task = _broker->currentTask();
formatTime( _timeStr, task->time() );
_timeList->insertItem( _timeStr );
_nameList->insertItem( task->name() );
_broker->next();
} while( --taskCount );
_broker->top();
_nameList->setCurrentItem( 0 );
_timeList->setCurrentItem( 0 );
}
karm'Karm::timerEvent() (./kdeutils/karm/karm.cpp:158)
void Karm::timerEvent( QTimerEvent *ev )
{
QSplitter::timerEvent( ev );
if ( _timerRunning && ev->timerId() == _timerId ) {
_broker->currentTask()->incrementTime( 1 );
updateCurrentItem();
emit timerTick();
}
}
karm'Karm::updateCurrentItem() (./kdeutils/karm/karm.cpp:170)
void Karm::updateCurrentItem()
{
formatTime( _timeStr, _broker->currentTask()->time() );
_timeList->changeItem( _timeStr, _broker->current() );
_nameList->changeItem( _broker->currentTask()->name(),
_broker->current() );
}
karm'Karm::newTask() (./kdeutils/karm/karm.cpp:179)
void Karm::newTask()
{
if( _addDlg == 0 )
{
_addDlg = new AddTaskDialog( topLevelWidget(), 0, false );
_addDlg->setCaption(i18n("New Task"));
connect( _addDlg, SIGNAL( finished( bool ) ),
this, SLOT( createNewTask( bool ) ) );
}
_addDlg->show();
}
karm'Karm::createNewTask() (./kdeutils/karm/karm.cpp:191)
void Karm::createNewTask( bool retVal )
{
if( _addDlg == 0 ) {
warning("Karm::createNewTask called and there's no dialog!" );
return;
}
if( retVal && !_addDlg->taskName().isEmpty() ) {
// create the new task
_broker->addTask( _addDlg->taskName(),
_addDlg->taskTime() );
fillListBoxes();
moveTo( _broker->count() - 1);
}
// dispose of the dialog
delete _addDlg;
_addDlg = 0;
}
karm'Karm::editTask() (./kdeutils/karm/karm.cpp:212)
void Karm::editTask()
{
if( _broker->currentTask() == 0 )
{
return;
}
if( _editDlg == 0 )
{
_editDlg = new AddTaskDialog( topLevelWidget(), 0, false );
_editDlg->setCaption(i18n("Edit Task"));
_editDlg->setTask( _broker->currentTask()->name(),
_broker->currentTask()->time() );
connect( _editDlg, SIGNAL( finished( bool ) ),
this, SLOT( updateExistingTask( bool ) ) );
}
_editDlg->show();
}
karm'Karm::updateExistingTask() (./kdeutils/karm/karm.cpp:231)
void Karm::updateExistingTask( bool retVal )
{
if( _editDlg == 0 ) {
warning("Karm::updateExistingTask called and there's no dialog!" );
return;
}
if( retVal && !_editDlg->taskName().isEmpty() ) {
int currentItem = _broker->current();
_broker->currentTask()->setName( _editDlg->taskName() );
_broker->currentTask()->setTime( _editDlg->taskTime() );
fillListBoxes();
_broker->moveTo( currentItem );
}
delete _editDlg;
_editDlg = 0;
}
karm'Karm::deleteTask() (./kdeutils/karm/karm.cpp:253)
void Karm::deleteTask()
{
if( _broker->count() == 0 )
return;
int response = KMessageBox::questionYesNo(0,
i18n( "Are you sure you want to delete this task?" ),
i18n( "Deleting Task"));
if( response == 0 ) {
// save the current position
int position = _broker->current() - 1;
// delete the item
_broker->deleteCurrentTask();
fillListBoxes();
// move to our new current item
if( position >= 0 && _broker->count() > position )
moveTo( position );
if( _broker->count() == 0 )
stopClock();
}
}
karm'Karm::formatTime() (./kdeutils/karm/karm.h:103)
inline void Karm::formatTime( char *dest, long minutes )
{
sprintf( dest, "%ld:%02ld", minutes / 60, minutes % 60 );
}