/*
 * Kivio - Visual Modelling and Flowcharting
 * Copyright (C) 2000 theKompany.com
 *
 * 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.
 *
 * 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 General Public License for more details.
 *
 * You should have received a copy of the GNU 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 TKCOLORACTION_H
#define TKCOLORACTION_H

#include "tkaction.h"
#include <koffice_export.h>
#include <kpopupmenu.h>
#include <tqdict.h>

class TQGridLayout;
class TKColorPanel;
class TKSelectColorActionPrivate;

class TKColorPopupMenu : public KPopupMenu
{ Q_OBJECT
  
public:
  TKColorPopupMenu( TQWidget* parent = 0, const char* name = 0 );
  ~TKColorPopupMenu();

public slots:
  void updateItemSize();
};
/****************************************************************************************/
class KOFFICEUI_EXPORT TKSelectColorAction : public TKAction
{ Q_OBJECT
  
public:
  enum Type {
    TextColor,
    LineColor,
    FillColor,
    Color
  };

  TKSelectColorAction( const TQString& text, Type type, TQObject* parent, const char* name, bool menuDefaultColor=false);
  TKSelectColorAction( const TQString& text, Type type,
                       TQObject* receiver, const char* slot,
                       TQObject* parent, const char* name,bool menuDefaultColor=false );

  virtual ~TKSelectColorAction();

  TQColor color() const { return m_pCurrentColor; }

  KPopupMenu* popupMenu() const { return m_pMenu; }
  void setDefaultColor(const TQColor &_col);


public slots:
  void setCurrentColor( const TQColor& );
  void setActiveColor( const TQColor& );
  virtual void activate();

signals:
  void colorSelected( const TQColor& );

protected slots:
  void selectColorDialog();
  void panelColorSelected( const TQColor& );
  void panelReject();
  virtual void slotActivated();
  void defaultColor();

protected:
  void init();
  virtual void initToolBarButton(TKToolBarButton*);
  void updatePixmap();
  void updatePixmap(TKToolBarButton*);

protected:
  TKColorPopupMenu* m_pMenu;
  TKColorPanel* m_pStandardColor;
  TKColorPanel* m_pRecentColor;
  int m_type;

  TQColor m_pCurrentColor;

private:
  TKSelectColorActionPrivate *d;
};
/****************************************************************************************/
class TKColorPanelButton : public TQFrame
{ Q_OBJECT
  
public:
  TKColorPanelButton( const TQColor&, TQWidget* parent, const char* name = 0 );
  ~TKColorPanelButton();

  void setActive( bool );

  TQColor panelColor() const { return m_Color; }

signals:
  void selected( const TQColor& );

protected:
  virtual void paintEvent( TQPaintEvent* );
  virtual void enterEvent( TQEvent* );
  virtual void leaveEvent( TQEvent* );
  virtual void mouseReleaseEvent( TQMouseEvent* );

  TQColor m_Color;
  bool m_bActive;

private:
  class TKColorPanelButtonPrivate;
  TKColorPanelButtonPrivate *d;
};
/****************************************************************************************/
class TKColorPanel : public TQWidget
{ Q_OBJECT
  

public:
  TKColorPanel( TQWidget* parent = 0L, const char* name = 0 );
  ~TKColorPanel();

  void setActiveColor( const TQColor& );
  void setNumCols( int col );
  void clear();

public slots:
  void insertColor( const TQColor& );
  void insertColor( const TQColor&, const TQString& );
  void selected( const TQColor& );

signals:
  void colorSelected( const TQColor& );
  void reject();
  void sizeChanged();

protected:
  void addToGrid( TKColorPanelButton* );
  void resetGrid();

  virtual void mouseReleaseEvent( TQMouseEvent* );
  virtual void showEvent( TQShowEvent *e );

  TQGridLayout* m_pLayout;
  int m_iWidth;
  int m_iX;
  int m_iY;

  TQColor m_activeColor;
  TQDict<TKColorPanelButton> m_pColorDict;

private:
  void fillPanel();

  class TKColorPanelPrivate;
  TKColorPanelPrivate *d;
};

#endif