[KLF Application][KLF Tools][KLF Backend][KLF Home]
KLatexFormula Project

src/klftools/klfcolorchooser.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   file klfcolorchooser.h
00003  *   This file is part of the KLatexFormula Project.
00004  *   Copyright (C) 2007 by Philippe Faist
00005  *   philippe.faist at bluewin.ch
00006  *                                                                         *
00007  *   This program is free software; you can redistribute it and/or modify  *
00008  *   it under the terms of the GNU General Public License as published by  *
00009  *   the Free Software Foundation; either version 2 of the License, or     *
00010  *   (at your option) any later version.                                   *
00011  *                                                                         *
00012  *   This program is distributed in the hope that it will be useful,       *
00013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00015  *   GNU General Public License for more details.                          *
00016  *                                                                         *
00017  *   You should have received a copy of the GNU General Public License     *
00018  *   along with this program; if not, write to the                         *
00019  *   Free Software Foundation, Inc.,                                       *
00020  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00021  ***************************************************************************/
00022 /* $Id: klfcolorchooser.h 517 2010-09-27 12:46:50Z philippe $ */
00023 
00024 #ifndef KLFCOLORCHOOSER_H
00025 #define KLFCOLORCHOOSER_H
00026 
00027 #include <QPushButton>
00028 #include <QColor>
00029 #include <QApplication>
00030 #include <QList>
00031 #include <QEvent>
00032 #include <QWidget>
00033 #include <QDialog>
00034 #include <QSpinBox>
00035 #include <QGridLayout>
00036 #include <QPainter>
00037 
00038 #include <klfdefs.h>
00039 
00040 
00041 class KLFColorList;
00042 
00043 
00044 // ------------------------------------------------------------------------------------
00045 
00046 
00047 class KLF_EXPORT KLFColorClickSquare : public QWidget
00048 {
00049   Q_OBJECT
00050 
00051   Q_PROPERTY(QColor color READ color WRITE setColor USER true)
00052 public:
00053   KLFColorClickSquare(QColor color = Qt::white, int size = 16, bool removable = true, QWidget *parent = 0);
00054 
00055   virtual QSize sizeHint() { return QSize(_size, _size); }
00056 
00057   QColor color() const { return _color; }
00058 
00059 signals:
00060   void activated();
00061   void colorActivated(const QColor& color);
00062   void wantRemove();
00063   void wantRemoveColor(const QColor& color);
00064 
00065 public slots:
00066   void setColor(const QColor& col) { _color = col; }
00067   void activate() {
00068     emit activated();
00069     emit colorActivated(_color);
00070   }
00071 
00072 protected:
00073   void paintEvent(QPaintEvent *event);
00074   void keyPressEvent(QKeyEvent *event);
00075   void mousePressEvent(QMouseEvent *event);
00076   void contextMenuEvent(QContextMenuEvent *event);
00077 
00078 private:
00079   QColor _color;
00080   int _size;
00081   bool _removable;
00082 
00083 private slots:
00084   void internalWantRemove();
00085 };
00086 
00087 
00088 // ------------------------------------------------------------------------------------
00089 
00133 class KLF_EXPORT KLFColorComponentsEditorBase
00134 {
00135 protected:
00137   int valueAFromNewColor(const QColor& color) const;
00139   int valueBFromNewColor(const QColor& color) const;
00141   inline int valueA() const { return valueAFromNewColor(_color); }
00143   inline int valueB() const { return valueBFromNewColor(_color); }
00145   inline int valueAMax() const { return valueMax(_colorcomponent); }
00147   inline int valueBMax() const { return valueMax(_colorcomponent_b); }
00148 
00165   QColor colorFromValues(QColor color_base, int value_a, int value_b = -1);
00166 
00172   bool refreshColorFromInternalValues(int value_a, int value_b = -1);
00173 
00176   static int valueFromNewColor(const QColor& color, const QString& component);
00177 
00183   static int valueMax(const QString& component);
00184 
00186   QColor _color;
00187 
00190   QString _colorcomponent, _colorcomponent_b;
00191 };
00192 
00193 
00194 // ------------------------------------------------------------------------------------
00195 
00218 class KLF_EXPORT KLFColorComponentSpinBox : public QSpinBox, public KLFColorComponentsEditorBase
00219 {
00220   Q_OBJECT
00221 
00222   Q_PROPERTY(QString colorComponent READ colorComponent WRITE setColorComponent)
00223   Q_PROPERTY(QColor color READ color WRITE setColor USER true)
00224 public:
00225   KLFColorComponentSpinBox(QWidget *parent);
00226   virtual ~KLFColorComponentSpinBox() { }
00227 
00228   QString colorComponent() const { return _colorcomponent; }
00229   QColor color() const { return _color; }
00230 
00231 signals:
00232   void colorChanged(const QColor& color);
00233 
00234 public slots:
00235   void setColorComponent(const QString& component);
00236   void setColor(const QColor& color);
00237 
00238 private slots:
00239   void internalChanged(int newvalue);
00240 
00241 };
00242 
00243 
00244 // ------------------------------------------------------------------------------------
00245 
00264 class KLF_EXPORT KLFColorChooseWidgetPane : public QWidget, public KLFColorComponentsEditorBase
00265 {
00266   Q_OBJECT
00267   Q_PROPERTY(QString paneType READ paneType WRITE setPaneType);
00268   Q_PROPERTY(QColor color READ color WRITE setColor USER true);
00269 public:
00270   KLFColorChooseWidgetPane(QWidget *parent = 0);
00271   virtual ~KLFColorChooseWidgetPane() { }
00272 
00273   QString paneType() const { return _colorcomponent + "+" + _colorcomponent_b; }
00274   QColor color() const { return _color; }
00275 
00276 signals:
00277   void colorChanged(const QColor& color);
00278 
00279 public slots:
00280   void setColor(const QColor& newcolor);
00281   void setPaneType(const QString& panetype);
00282 
00283 protected:
00284   virtual void paintEvent(QPaintEvent *e);
00285   virtual void mousePressEvent(QMouseEvent *e);
00286   virtual void mouseMoveEvent(QMouseEvent *e);
00287   virtual void wheelEvent(QWheelEvent *e);
00288 
00289 private:
00290   QImage _img;
00291 };
00292 
00293 
00294 // ------------------------------------------------------------------------------------
00295 
00296 namespace Ui { class KLFColorChooseWidget; }
00297 class QListWidgetItem;
00298 
00314 class KLF_EXPORT KLFColorChooseWidget : public QWidget
00315 {
00316   Q_OBJECT
00317 
00318   Q_PROPERTY(QColor color READ color WRITE setColor USER true)
00319   Q_PROPERTY(bool alphaEnabled READ alphaEnabled WRITE setAlphaEnabled)
00320 public:
00321   KLFColorChooseWidget(QWidget *parent = 0);
00322   virtual ~KLFColorChooseWidget() { }
00323 
00324   QColor color() const { return _color; }
00325 
00326   bool alphaEnabled() const { return _alphaenabled; }
00327 
00328   static void ensureColorListsInstance();
00329   static void setRecentCustomColors(QList<QColor> recentcolors, QList<QColor> customcolors);
00330   static void addRecentColor(const QColor& col);
00331   static QList<QColor> recentColors();
00332   static QList<QColor> customColors();
00333 
00334 signals:
00335   void colorChanged(const QColor& color);
00336 
00337 public slots:
00338   void setColor(const QColor& color);
00339   void setAlphaEnabled(bool alpha_enabled);
00340   void setCurrentToCustomColor();
00341 
00342   void updatePalettes();
00343 
00344   void updatePaletteRecent();
00345   void updatePaletteStandard();
00346   void updatePaletteCustom();
00347 
00348 protected slots:
00349   virtual void internalColorChanged(const QColor& newcolor);
00350   virtual void internalColorNameSelected(QListWidgetItem *item);
00351   virtual void internalColorNameSet(const QString& colorname);
00352 
00353 
00354 private:
00355   Ui::KLFColorChooseWidget *u;
00356 
00357   QColor _color;
00358   bool _alphaenabled;
00359 
00360   QList<QObject*> _connectedColorChoosers;
00361 
00362   void fillPalette(KLFColorList *colorlist, QWidget *w);
00363 
00364   static KLFColorList *_recentcolors;
00365   static KLFColorList *_standardcolors;
00366   static KLFColorList *_customcolors;
00367 };
00368 
00369 
00370 // ------------------------------------------------------------------------------------
00371 
00372 
00373 namespace Ui { class KLFColorDialog; }
00374 
00383 class KLF_EXPORT KLFColorDialog : public QDialog
00384 {
00385   Q_OBJECT
00386 public:
00389   KLFColorDialog(QWidget *parent = 0);
00390   virtual ~KLFColorDialog();
00391 
00393   KLFColorChooseWidget *colorChooseWidget();
00394 
00401   static QColor getColor(QColor startwith = Qt::black, bool alphaenabled = true, QWidget *parent = 0);
00402 
00403 private:
00404   Ui::KLFColorDialog *u;
00405 };
00406 
00407 
00408 
00409 
00410 // ------------------------------------------------------------------------------------
00411 
00412 class QStyle;
00413 
00414 class KLF_EXPORT KLFColorChooser : public QPushButton
00415 {
00416   Q_OBJECT
00417 
00418   Q_PROPERTY(QSize showSize READ showSize WRITE setShowSize)
00419   Q_PROPERTY(bool allowDefaultState READ allowDefaultState WRITE setAllowDefaultState)
00420   Q_PROPERTY(QString defaultStateString READ defaultStateString WRITE setDefaultStateString)
00421   Q_PROPERTY(bool autoAddToList READ autoAddToList WRITE setAutoAddToList)
00422   Q_PROPERTY(QColor color READ color WRITE setColor USER true)
00423   Q_PROPERTY(float pixXAlignFactor READ pixXAlignFactor WRITE setPixXAlignFactor)
00424   Q_PROPERTY(float pixYAlignFactor READ pixYAlignFactor WRITE setPixYAlignFactor)
00425   Q_PROPERTY(bool alphaEnabled READ alphaEnabled WRITE setAlphaEnabled)
00426 
00427 public:
00428   KLFColorChooser(QWidget *parent);
00429   ~KLFColorChooser();
00430 
00431   QSize showSize() const { return _size; }
00433 
00437   bool allowDefaultState() const { return _allowdefaultstate; }
00438   QString defaultStateString() const { return _defaultstatestring; }
00439   bool autoAddToList() const { return _autoadd; }
00440   QColor color() const;
00441   float pixXAlignFactor() const { return _xalignfactor; }
00442   float pixYAlignFactor() const { return _yalignfactor; }
00444   bool alphaEnabled() const { return _alphaenabled; }
00445 
00446   virtual QSize sizeHint() const;
00447 
00450   static void setUserMaxColors(int maxcolors);
00451 
00452   static void setColorList(const QList<QColor>& colorlist);
00453   static QList<QColor> colorList();
00454 
00455 signals:
00456   void colorChanged(const QColor& newcolor);
00457 
00458 public slots:
00462   void setColor(const QColor& color);
00463   void setAllowDefaultState(bool allow);
00464   void setDefaultStateString(const QString& str);
00465   void setAutoAddToList(bool autoadd) { _autoadd = autoadd; }
00466   void setShowSize(const QSize& size) { _size = size; }
00467   void setPixXAlignFactor(float xalignfactor) { _xalignfactor = xalignfactor; }
00468   void setPixYAlignFactor(float yalignfactor) { _yalignfactor = yalignfactor; }
00469   void setAlphaEnabled(bool alpha_enabled);
00471   void setDefaultColor();
00472 
00473   void requestColor();
00474 
00475 protected slots:
00476   void setSenderPropertyColor();
00477   void _makemenu();
00478 
00479 protected:
00480   void paintEvent(QPaintEvent *event);
00481 
00482 private:
00483   QColor _color;
00484   QPixmap _pix;
00485 
00486   bool _allowdefaultstate;
00487   QString _defaultstatestring;
00488   bool _autoadd;
00489   QSize _size;
00490   float _xalignfactor, _yalignfactor;
00491 
00492   bool _alphaenabled;
00493 
00494   QMenu *mMenu;
00495 
00496   void _setpix();
00497 
00498   QPixmap colorPixmap(const QColor& color, const QSize& size);
00499 
00500   static KLFColorList *_colorlist;
00501   static QStyle *mReplaceButtonStyle;
00502 
00503   static int staticUserMaxColors;
00504 
00505   static void ensureColorListInstance();
00506 
00507 };
00508 
00509 
00510 #endif

Generated by doxygen 1.7.3