00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "colorpopupmenu.h"
00034 #include "colordialog.h"
00035
00036 #include <qaction.h>
00037 #include <qlayout.h>
00038 #include <qpainter.h>
00039
00040 OColorPanelButton::OColorPanelButton( const QColor& color, QWidget* parent, const char* name )
00041 : QFrame( parent, name )
00042 {
00043 m_color = color;
00044
00045 setFixedSize( 16, 16 );
00046 setActive( FALSE );
00047 }
00048
00049 OColorPanelButton::~OColorPanelButton()
00050 {
00051 }
00052
00053 void OColorPanelButton::setActive( bool active )
00054 {
00055 m_active = active;
00056
00057 if ( m_active ) {
00058 setFrameStyle( Panel | Sunken );
00059 } else {
00060 setFrameStyle( NoFrame );
00061 }
00062 }
00063
00064 void OColorPanelButton::enterEvent( QEvent* )
00065 {
00066 if ( !m_active ) {
00067 setFrameStyle( Panel | Sunken );
00068 }
00069 }
00070
00071 void OColorPanelButton::leaveEvent( QEvent* )
00072 {
00073 if ( !m_active ) {
00074 setFrameStyle( NoFrame );
00075 }
00076 }
00077
00078 void OColorPanelButton::paintEvent( QPaintEvent* e )
00079 {
00080 QFrame::paintEvent( e );
00081
00082 QPainter painter;
00083 painter.begin( this );
00084 painter.fillRect( 2, 2, 12, 12, m_color );
00085 painter.setPen( Qt::black );
00086 painter.drawRect( 2, 2, 12, 12 );
00087 painter.end();
00088 }
00089
00090 void OColorPanelButton::mouseReleaseEvent( QMouseEvent* )
00091 {
00092 emit selected( m_color );
00093 }
00094
00095 OColorPopupMenu::OColorPopupMenu( const QColor& color, QWidget* parent, const char* name )
00096 : QPopupMenu( parent, name )
00097 {
00098 m_color = color;
00099
00100 colorPanel = new QWidget( this );
00101
00102 colorLayout = new QGridLayout(colorPanel, 5, 6);
00103
00104 addColor(QColor(255, 255, 255), 0, 1);
00105 addColor(QColor(192, 192, 192), 0, 2);
00106 addColor(QColor(128, 128, 128), 0, 3);
00107 addColor(QColor(64, 64, 64), 0, 4);
00108 addColor(QColor(0, 0, 0), 0, 5);
00109
00110 addColor(QColor(255, 0, 0), 1, 0);
00111 addColor(QColor(255, 128, 0), 1, 1);
00112 addColor(QColor(255, 255, 0), 1, 2);
00113 addColor(QColor(128, 255, 0), 1, 3);
00114 addColor(QColor(0, 255, 0), 1, 4);
00115 addColor(QColor(0, 255, 128), 1, 5);
00116
00117 addColor(QColor(128, 0, 0), 2, 0);
00118 addColor(QColor(128, 64, 0), 2, 1);
00119 addColor(QColor(128, 128, 0), 2, 2);
00120 addColor(QColor(64, 128, 0), 2, 3);
00121 addColor(QColor(0, 128, 0), 2, 4);
00122 addColor(QColor(0, 128, 64), 2, 5);
00123
00124 addColor(QColor(0, 255, 255), 3, 0);
00125 addColor(QColor(0, 128, 255), 3, 1);
00126 addColor(QColor(0, 0, 255), 3, 2);
00127 addColor(QColor(128, 0, 255), 3, 3);
00128 addColor(QColor(255, 0, 255), 3, 4);
00129 addColor(QColor(255, 0, 128), 3, 5);
00130
00131 addColor(QColor(0, 128, 128), 4, 0);
00132 addColor(QColor(0, 64, 128), 4, 1);
00133 addColor(QColor(0, 0, 128), 4, 2);
00134 addColor(QColor(64, 0, 128), 4, 3);
00135 addColor(QColor(128, 0, 128), 4, 4);
00136 addColor(QColor(128, 0, 64), 4, 5);
00137
00138 insertItem( colorPanel );
00139 insertSeparator();
00140 insertItem(tr("More"),this,SLOT( moreColorClicked()));
00141
00142
00143
00144
00145
00146 activateItemAt( 0 );
00147 }
00148
00149 OColorPopupMenu::~OColorPopupMenu()
00150 {
00151 }
00152
00153 void OColorPopupMenu::addColor( const QColor& color, int row, int col )
00154 {
00155 OColorPanelButton* panelButton = new OColorPanelButton( color, colorPanel );
00156 connect( panelButton, SIGNAL( selected( const QColor& ) ), this, SLOT( buttonSelected( const QColor& ) ) );
00157 colorLayout->addWidget( panelButton, row, col );
00158 }
00159
00160 void OColorPopupMenu::buttonSelected( const QColor& color )
00161 {
00162 m_color = color;
00163 emit colorSelected( color );
00164 hide();
00165 }
00166
00167 void OColorPopupMenu::moreColorClicked()
00168 {
00169 QColor color = OColorDialog::getColor( m_color );
00170 m_color = color;
00171 emit colorSelected( color );
00172 hide();
00173 }