/*
 * KMix -- KDE's full featured mini mixer
 *
 *
 * Copyright (C) 2000 Stefan Schimanski <1Stein@gmx.de>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this program; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#ifndef KMIXAPPLET_H
#define KMIXAPPLET_H

// TQt
#include <tqlayout.h>
#include <tqptrlist.h>
#include <tqwidget.h>

// KDE
#include <kaboutdata.h>
#include <kdialogbase.h>
#include <kpanelapplet.h>

//KMix
#include "viewapplet.h"

class Mixer;
class ColorWidget;
class KMixApplet;


class AppletConfigDialog : public KDialogBase
{
  Q_OBJECT
  
  public:
   AppletConfigDialog( TQWidget * parent=0, const char * name=0 );
   virtual ~AppletConfigDialog() {};

   void setActiveColors(const TQColor& high, const TQColor& low, const TQColor& back);
   void activeColors(TQColor& high, TQColor& low, TQColor& back) const;

   void setMutedColors(const TQColor& high, const TQColor& low, const TQColor& back);
   void mutedColors(TQColor& high, TQColor& low, TQColor& back) const;

   void setUseCustomColors(bool);
   bool useCustomColors() const;

  protected slots:
   virtual void slotOk();
   virtual void slotApply();

  signals:
   void applied();
  private:
   ColorWidget* colorWidget;
};


class KMixApplet : public KPanelApplet
{
   Q_OBJECT
  

public:
   KMixApplet( const TQString& configFile, Type t = Normal,
	       TQWidget *parent = 0, const char *name = 0 );
   virtual ~KMixApplet();

   struct Colors {
       TQColor high, low, back, mutedHigh, mutedLow, mutedBack;
   };

   void about();
   void help();
   void preferences();   
   void reportBug();
   void paletteChange ( const TQPalette & oldPalette );

   TQSize sizeHint() const;
   TQSizePolicy sizePolicy() const;
   int widthForHeight(int) const;
   int heightForWidth(int) const;

protected slots:
   void selectMixer();
   void applyPreferences();
   void preferencesDone();
   void updateGeometrySlot();
  
protected:
   void resizeEvent( TQResizeEvent * );
   void saveConfig();
   void saveConfig( KConfig *config, const TQString &grp );
   void loadConfig();
   void loadConfig( KConfig *config, const TQString &grp );

private:
   void positionChange(Position);
   void setColors();
   void setColors( const Colors &color );

   ViewApplet *m_mixerWidget;
   TQPushButton *m_errorLabel;
   AppletConfigDialog *m_pref;

   static int             s_instCount;
   Mixer                  *_mixer;

   KMixApplet::Colors _colors;
   bool               _customColors;

   TQLayout* _layout;

   TQString _mixerId;
   TQString _mixerName;

   KAboutData m_aboutData;
};


#endif