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 );
}