-rw-r--r-- | libopie/colorpopupmenu.cpp | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/libopie/colorpopupmenu.cpp b/libopie/colorpopupmenu.cpp new file mode 100644 index 0000000..35e91f4 --- a/dev/null +++ b/libopie/colorpopupmenu.cpp | |||
@@ -0,0 +1,165 @@ | |||
1 | /********************************************************************** | ||
2 | ** ColorPopupMenu | ||
3 | ** | ||
4 | ** Popup menu for selecting colors | ||
5 | ** | ||
6 | ** Based on colorpanel by S. Prud'homme <prudhomme@laposte.net> | ||
7 | ** | ||
8 | ** Copyright (C) 2002, Dan Williams | ||
9 | ** williamsdr@acm.org | ||
10 | ** http://draknor.net | ||
11 | ** | ||
12 | ** This file may be distributed and/or modified under the terms of the | ||
13 | ** GNU General Public License version 2 as published by the Free Software | ||
14 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
15 | ** packaging of this file. | ||
16 | ** | ||
17 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
18 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
19 | ** | ||
20 | **********************************************************************/ | ||
21 | |||
22 | #include "colorpopupmenu.h" | ||
23 | #include "colordialog.h" | ||
24 | |||
25 | #include <qaction.h> | ||
26 | #include <qlayout.h> | ||
27 | #include <qpainter.h> | ||
28 | |||
29 | ColorPanelButton::ColorPanelButton( const QColor& color, QWidget* parent, const char* name ) | ||
30 | : QFrame( parent, name ) | ||
31 | { | ||
32 | m_color = color; | ||
33 | |||
34 | setFixedSize( 16, 16 ); | ||
35 | setActive( FALSE ); | ||
36 | } | ||
37 | |||
38 | ColorPanelButton::~ColorPanelButton() | ||
39 | { | ||
40 | } | ||
41 | |||
42 | void ColorPanelButton::setActive( bool active ) | ||
43 | { | ||
44 | m_active = active; | ||
45 | |||
46 | if ( m_active ) { | ||
47 | setFrameStyle( Panel | Sunken ); | ||
48 | } else { | ||
49 | setFrameStyle( NoFrame ); | ||
50 | } | ||
51 | } | ||
52 | |||
53 | void ColorPanelButton::enterEvent( QEvent* e ) | ||
54 | { | ||
55 | Q_UNUSED( e ) | ||
56 | |||
57 | if ( !m_active ) { | ||
58 | setFrameStyle( Panel | Sunken ); | ||
59 | } | ||
60 | } | ||
61 | |||
62 | void ColorPanelButton::leaveEvent( QEvent* e ) | ||
63 | { | ||
64 | Q_UNUSED( e ) | ||
65 | |||
66 | if ( !m_active ) { | ||
67 | setFrameStyle( NoFrame ); | ||
68 | } | ||
69 | } | ||
70 | |||
71 | void ColorPanelButton::paintEvent( QPaintEvent* e ) | ||
72 | { | ||
73 | QFrame::paintEvent( e ); | ||
74 | |||
75 | QPainter painter; | ||
76 | painter.begin( this ); | ||
77 | painter.fillRect( 2, 2, 12, 12, m_color ); | ||
78 | painter.setPen( Qt::black ); | ||
79 | painter.drawRect( 2, 2, 12, 12 ); | ||
80 | painter.end(); | ||
81 | } | ||
82 | |||
83 | void ColorPanelButton::mouseReleaseEvent( QMouseEvent* e ) | ||
84 | { | ||
85 | Q_UNUSED( e ) | ||
86 | |||
87 | emit selected( m_color ); | ||
88 | } | ||
89 | |||
90 | ColorPopupMenu::ColorPopupMenu( const QColor& color, QWidget* parent = 0, const char* name = 0 ) | ||
91 | : QPopupMenu( parent, name ) | ||
92 | { | ||
93 | m_color = color; | ||
94 | |||
95 | colorPanel = new QWidget( this ); | ||
96 | |||
97 | colorLayout = new QGridLayout(colorPanel, 5, 6); | ||
98 | |||
99 | addColor(QColor(255, 255, 255), 0, 1); | ||
100 | addColor(QColor(192, 192, 192), 0, 2); | ||
101 | addColor(QColor(128, 128, 128), 0, 3); | ||
102 | addColor(QColor(64, 64, 64), 0, 4); | ||
103 | addColor(QColor(0, 0, 0), 0, 5); | ||
104 | |||
105 | addColor(QColor(255, 0, 0), 1, 0); | ||
106 | addColor(QColor(255, 128, 0), 1, 1); | ||
107 | addColor(QColor(255, 255, 0), 1, 2); | ||
108 | addColor(QColor(128, 255, 0), 1, 3); | ||
109 | addColor(QColor(0, 255, 0), 1, 4); | ||
110 | addColor(QColor(0, 255, 128), 1, 5); | ||
111 | |||
112 | addColor(QColor(128, 0, 0), 2, 0); | ||
113 | addColor(QColor(128, 64, 0), 2, 1); | ||
114 | addColor(QColor(128, 128, 0), 2, 2); | ||
115 | addColor(QColor(64, 128, 0), 2, 3); | ||
116 | addColor(QColor(0, 128, 0), 2, 4); | ||
117 | addColor(QColor(0, 128, 64), 2, 5); | ||
118 | |||
119 | addColor(QColor(0, 255, 255), 3, 0); | ||
120 | addColor(QColor(0, 128, 255), 3, 1); | ||
121 | addColor(QColor(0, 0, 255), 3, 2); | ||
122 | addColor(QColor(128, 0, 255), 3, 3); | ||
123 | addColor(QColor(255, 0, 255), 3, 4); | ||
124 | addColor(QColor(255, 0, 128), 3, 5); | ||
125 | |||
126 | addColor(QColor(0, 128, 128), 4, 0); | ||
127 | addColor(QColor(0, 64, 128), 4, 1); | ||
128 | addColor(QColor(0, 0, 128), 4, 2); | ||
129 | addColor(QColor(64, 0, 128), 4, 3); | ||
130 | addColor(QColor(128, 0, 128), 4, 4); | ||
131 | addColor(QColor(128, 0, 64), 4, 5); | ||
132 | |||
133 | insertItem( colorPanel ); | ||
134 | insertSeparator(); | ||
135 | QAction* chooseColorAction = new QAction( tr( "More" ), tr( "More..." ), 0, colorPanel, "More" ); | ||
136 | connect( chooseColorAction, SIGNAL( activated() ), this, SLOT( moreColorClicked() ) ); | ||
137 | chooseColorAction->addTo( this ); | ||
138 | activateItemAt( 0 ); | ||
139 | } | ||
140 | |||
141 | ColorPopupMenu::~ColorPopupMenu() | ||
142 | { | ||
143 | } | ||
144 | |||
145 | void ColorPopupMenu::addColor( const QColor& color, int row, int col ) | ||
146 | { | ||
147 | ColorPanelButton* panelButton = new ColorPanelButton( color, colorPanel ); | ||
148 | connect( panelButton, SIGNAL( selected( const QColor& ) ), this, SLOT( buttonSelected( const QColor& ) ) ); | ||
149 | colorLayout->addWidget( panelButton, row, col ); | ||
150 | } | ||
151 | |||
152 | void ColorPopupMenu::buttonSelected( const QColor& color ) | ||
153 | { | ||
154 | m_color = color; | ||
155 | emit colorSelected( color ); | ||
156 | hide(); | ||
157 | } | ||
158 | |||
159 | void ColorPopupMenu::moreColorClicked() | ||
160 | { | ||
161 | QColor color = QColorDialog::getColor( m_color ); | ||
162 | m_color = color; | ||
163 | emit colorSelected( color ); | ||
164 | hide(); | ||
165 | } | ||