/***************************************************************************
 *   Copyright (C) 2004 by Hans Oischinger                                 *
 *   hans.oischinger@kdemail.net                                           *
 *                                                                         *
 *   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 Steet, Fifth Floor, Boston, MA 02110-1301, USA.             *
 ***************************************************************************/
#ifndef GRADIENTEDITORWIDGET_H
#define GRADIENTEDITORWIDGET_H

#include <qwidget.h>

class Gradient;
class GradientPreview;
class StopsEditorWidget;
class KIntNumInput;
class KPushButton;
class KColorButton;
class StopElement;
/**
@author Hans Oischinger
*/
class GradientEditorWidget : public QWidget
{
  Q_OBJECT
public:
  GradientEditorWidget(QWidget *parent = 0, const char *name = 0);
  ~GradientEditorWidget();

  /**
   * Set a gradient. GradientEditorWidget will operate on a copy
   */
  void setGradient( Gradient& );

protected:
  /**
   * Updates the GradientPreview to show the current Gradient
   */
  void updatePreview();

  /**
   * Applies the gradient to the stops editor and the preview, etc
   */
  void applyGradient();

  void fireGradientUpdate();

protected slots:
  void slotStopModified( StopElement* );
  void slotStopSelected( StopElement* );
  void slotOffsetNInputChanged(int );
  void slotOpacityNInputChanged(int );
  void slotColorBtnChanged(const QColor& );
  void slotDeleteBtnChanged();
  void slotApplyBtnChanged();

private:
  Gradient* m_gradient;
  StopElement* m_currentStop;

  GradientPreview* m_gradPreview;
  StopsEditorWidget *m_stopsEditor;
  KIntNumInput *m_stopOffsetNInput;
  KPushButton* m_delBtn;
  KPushButton* m_applyBtn;
  KColorButton *m_colorBtn;
  KIntNumInput *m_stopOpacityNInput;
};

#endif
