summaryrefslogtreecommitdiff
path: root/libopie/colorpopupmenu.cpp
Unidiff
Diffstat (limited to 'libopie/colorpopupmenu.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libopie/colorpopupmenu.cpp165
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
29ColorPanelButton::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
38ColorPanelButton::~ColorPanelButton()
39{
40}
41
42void 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
53void ColorPanelButton::enterEvent( QEvent* e )
54{
55 Q_UNUSED( e )
56
57 if ( !m_active ) {
58 setFrameStyle( Panel | Sunken );
59 }
60}
61
62void ColorPanelButton::leaveEvent( QEvent* e )
63{
64 Q_UNUSED( e )
65
66 if ( !m_active ) {
67 setFrameStyle( NoFrame );
68 }
69}
70
71void 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
83void ColorPanelButton::mouseReleaseEvent( QMouseEvent* e )
84{
85 Q_UNUSED( e )
86
87 emit selected( m_color );
88}
89
90ColorPopupMenu::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
141ColorPopupMenu::~ColorPopupMenu()
142{
143}
144
145void 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
152void ColorPopupMenu::buttonSelected( const QColor& color )
153{
154 m_color = color;
155 emit colorSelected( color );
156 hide();
157}
158
159void ColorPopupMenu::moreColorClicked()
160{
161 QColor color = QColorDialog::getColor( m_color );
162 m_color = color;
163 emit colorSelected( color );
164 hide();
165}