/***************************************************************************
                          kkeyleddtlcfg.h  -  description
                             -------------------
    begin                : Tue Aug 14 2001
    copyright            : (C) 2001 by Dieter Landolt
    email                : dieter.landolt@secs.ch
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef KKEYLEDDTLCFG_H
#define KKEYLEDDTLCFG_H

#include <qwidget.h>
#include <kstandarddirs.h>
#include <qpushbutton.h>
#include <qfileinfo.h>
#include "ledcfgdia.h"
#include "kdndbutton.h"

/**Implementation for the dialog
  *@author Dieter Landolt
  */

class kkeyleddtlcfg : public ledcfgdia  {
   Q_OBJECT
public: 
	kkeyleddtlcfg(QWidget *parent=0, const char *name=0,bool modal=FALSE, WFlags fl=0);
	~kkeyleddtlcfg();
private:
  /** Handler for all buttons */
   void lockbutton_click(kDndButton *button);
  /** read a spezific configuration. for active or theme */
  void readConfig(QString confName);
  /** Loads a them to activate */
  void loadTheme(QString theme,bool display=true);
  /** Function witch saves a spezific theme */
  void saveTheme(QString theme);
  /** delete a theme width this name (theme) i must be esisting in the combobox */
  void delTheme(QString theme);

    /*!
        \fn kkeyleddtlcfg::locate(QString type, QString filename)
	I build the funktion with the return QString::null if file is not found
     */
    QString locate(QString type, QString filename)
    {
	QFileInfo fi;
	fi.setFile(KGlobal::dirs()->findResource(type,filename));
	if ( fi.isFile() ) {
		return fi.absFilePath();
	} else {
		return QString::null;
	}
    }

protected slots:
  /** If the checkbox is clicked apply must be enabled */
  void enableApply() { ApplyButton->setEnabled(true); }
  /** If the checkbox is clicked save must be enabled */
  void enableSave() { ThemeSave->setEnabled(true); }

public slots: // Public slots
  /** button click */
  void numlockon_click(){
     lockbutton_click(numlockon);
  };
  /** button click */
  void capslockon_click(){
     lockbutton_click(capslockon);
  };
  /** button click */
  void scrollockon_click(){
     lockbutton_click(scrollockon);
  };
  /** button click */
  void numlockoff_click(){
     lockbutton_click(numlockoff);
  };
  /** button click */
  void capslockoff_click(){
    lockbutton_click(capslockoff);
  };
  /** button click */
  void scrollockoff_click(){
    lockbutton_click(scrollockoff);
  };
  void setNumOnPath(QString s) { 
     numlockon->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  void setNumOffPath(QString s) { 
     numlockoff->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  void setCapsOnPath(QString s) { 
     capslockon->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  void setCapsOffPath(QString s) { 
     capslockoff->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  void setScrollOnPath(QString s) { 
     scrollockon->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  void setScrollOffPath(QString s) { 
     scrollockoff->path = s; 
     ApplyButton->setEnabled(true);
     ThemeSave->setEnabled(true);
  }
  /** if a soundpath changes do this */
  void setSoundPath(QString s) {
    ApplyButton->setEnabled(true);
    ThemeSave->setEnabled(true);
  };
  
private slots: // Private slots
  /** Apply Configuration */
  void applyConfig();
  /** clear the scrollockbuttons */
  void clearscroll();
  /** clear the capslock button */
  void clearcaps();
  /** clear the path of the numlock buttons */
  void clearnum();
  /** set the them from the combobox */
  void setCurrentTheme();
  /** save the them under the Name and into the list of the box */
  void saveThisTheme();
  /** Called to activate the them selected in the Combobox */
  void activateTheme(int themeNr);
  /** Notfy's that the displayed Theme should be deleted */
  void delThisTheme();
  /** For renaming a displayed Theme */
  void renThisTheme();
signals: // Signals
  /** Notify' s if the configuration was changed
 */
  void configChanged();
};

#endif
