1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
/**
* \file
*
* \author Mattia Basaglia
*
* \copyright Copyright (C) 2013-2020 Mattia Basaglia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef COLOR_DIALOG_HPP
#define COLOR_DIALOG_HPP
#include "colorwidgets_global.hpp"
#include "color_preview.hpp"
#include "color_wheel.hpp"
#include <QDialog>
class QAbstractButton;
namespace color_widgets {
class QCP_EXPORT ColorDialog : public QDialog
{
Q_OBJECT
Q_ENUMS(ButtonMode)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged DESIGNABLE true)
Q_PROPERTY(ColorWheel::ShapeEnum wheelShape READ wheelShape WRITE setWheelShape NOTIFY wheelShapeChanged)
Q_PROPERTY(ColorWheel::ColorSpaceEnum colorSpace READ colorSpace WRITE setColorSpace NOTIFY colorSpaceChanged)
Q_PROPERTY(bool wheelRotating READ wheelRotating WRITE setWheelRotating NOTIFY wheelRotatingChanged)
/**
* \brief whether the color alpha channel can be edited.
*
* If alpha is disabled, the selected color's alpha will always be 255.
*/
Q_PROPERTY(bool alphaEnabled READ alphaEnabled WRITE setAlphaEnabled NOTIFY alphaEnabledChanged)
public:
enum ButtonMode {
OkCancel,
OkApplyCancel,
Close
};
explicit ColorDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
~ColorDialog();
/**
* Get currently selected color
*/
QColor color() const;
/**
* Set the display mode for the color preview
*/
void setPreviewDisplayMode(ColorPreview::DisplayMode mode);
/**
* Get the color preview diplay mode
*/
ColorPreview::DisplayMode previewDisplayMode() const;
bool alphaEnabled() const;
/**
* Select which dialog buttons to show
*
* There are three predefined modes:
* OkCancel - this is useful when the dialog is modal and we just want to return a color
* OkCancelApply - this is for non-modal dialogs
* Close - for non-modal dialogs with direct color updates via colorChanged signal
*/
void setButtonMode(ButtonMode mode);
ButtonMode buttonMode() const;
QSize sizeHint() const;
ColorWheel::ShapeEnum wheelShape() const;
ColorWheel::ColorSpaceEnum colorSpace() const;
bool wheelRotating() const;
public Q_SLOTS:
/**
* Change color
*/
void setColor(const QColor &c);
/**
* Set the current color and show the dialog
*/
void showColor(const QColor &oldcolor);
void setWheelShape(ColorWheel::ShapeEnum shape);
void setColorSpace(ColorWheel::ColorSpaceEnum space);
void setWheelRotating(bool rotating);
/**
* Set whether the color alpha channel can be edited.
* If alpha is disabled, the selected color's alpha will always be 255.
*/
void setAlphaEnabled(bool a);
Q_SIGNALS:
/**
* The current color was changed
*/
void colorChanged(QColor);
/**
* The user selected the new color by pressing Ok/Apply
*/
void colorSelected(QColor);
void wheelShapeChanged(ColorWheel::ShapeEnum shape);
void colorSpaceChanged(ColorWheel::ColorSpaceEnum space);
void wheelRotatingChanged(bool rotating);
void alphaEnabledChanged(bool alphaEnabled);
private Q_SLOTS:
/// Update all the Ui elements to match the selected color
void setColorInternal(const QColor &color);
/// Update from HSV sliders
void set_hsv();
/// Update from RGB sliders
void set_rgb();
/// Update from Alpha slider
void set_alpha();
void on_edit_hex_colorChanged(const QColor& color);
void on_edit_hex_colorEditingFinished(const QColor& color);
void on_buttonBox_clicked(QAbstractButton*);
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent * event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
class Private;
Private * const p;
};
} // namespace color_widgets
#endif // COLOR_DIALOG_HPP
|