kalarm/lib
colourcombo.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <tqpainter.h>
00025
00026 #include <klocale.h>
00027 #include <kcolordialog.h>
00028
00029 #include "kalarm/preferences.h"
00030 #include "colourcombo.moc"
00031
00032
00033 ColourCombo::ColourCombo(TQWidget* parent, const char* name, const TQColor& defaultColour)
00034 : TQComboBox(parent, name),
00035 mColourList(Preferences::messageColours()),
00036 mSelectedColour(defaultColour),
00037 mCustomColour(255, 255, 255),
00038 mReadOnly(false),
00039 mDisabled(false)
00040 {
00041 addColours();
00042 connect(this, TQT_SIGNAL(activated(int)), TQT_SLOT(slotActivated(int)));
00043 connect(this, TQT_SIGNAL(highlighted(int)), TQT_SLOT(slotHighlighted(int)));
00044 Preferences::connect(TQT_SIGNAL(preferencesChanged()), TQT_TQOBJECT(this), TQT_SLOT(slotPreferencesChanged()));
00045 }
00046
00047 void ColourCombo::setColour(const TQColor& colour)
00048 {
00049 mSelectedColour = colour;
00050 addColours();
00051 }
00052
00053
00054
00055
00056 void ColourCombo::setColours(const ColourList& colours)
00057 {
00058 mColourList = colours;
00059 if (mSelectedColour != mCustomColour
00060 && !mColourList.contains(mSelectedColour))
00061 {
00062
00063 mSelectedColour = mColourList.count() ? mColourList.first() : mCustomColour;
00064 }
00065 addColours();
00066 }
00067
00068
00069
00070
00071
00072 void ColourCombo::slotPreferencesChanged()
00073 {
00074 const ColourList& prefColours = Preferences::messageColours();
00075 if (prefColours != mColourList)
00076 setColours(prefColours);
00077 }
00078
00079
00080
00081
00082
00083 void ColourCombo::setEnabled(bool enable)
00084 {
00085 if (enable && mDisabled)
00086 {
00087 mDisabled = false;
00088 setColour(mSelectedColour);
00089 }
00090 else if (!enable && !mDisabled)
00091 {
00092 mSelectedColour = color();
00093 int end = count();
00094 if (end > 1)
00095 {
00096
00097 TQPixmap pm = *pixmap(1);
00098 pm.fill(paletteBackgroundColor());
00099 insertItem(pm);
00100 setCurrentItem(end);
00101 }
00102 mDisabled = true;
00103 }
00104 TQComboBox::setEnabled(enable);
00105 }
00106
00107 void ColourCombo::slotActivated(int index)
00108 {
00109 if (index)
00110 mSelectedColour = mColourList[index - 1];
00111 else
00112 {
00113 if (KColorDialog::getColor(mCustomColour, this) == TQDialog::Accepted)
00114 {
00115 TQRect rect;
00116 drawCustomItem(rect, false);
00117 }
00118 mSelectedColour = mCustomColour;
00119 }
00120 emit activated(mSelectedColour);
00121 }
00122
00123 void ColourCombo::slotHighlighted(int index)
00124 {
00125 mSelectedColour = index ? mColourList[index - 1] : mCustomColour;
00126 emit highlighted(mSelectedColour);
00127 }
00128
00129
00130
00131
00132 void ColourCombo::addColours()
00133 {
00134 clear();
00135
00136 for (ColourList::const_iterator it = mColourList.begin(); ; ++it)
00137 {
00138 if (it == mColourList.end())
00139 {
00140 mCustomColour = mSelectedColour;
00141 break;
00142 }
00143 if (mSelectedColour == *it)
00144 break;
00145 }
00146
00147 TQRect rect;
00148 drawCustomItem(rect, true);
00149
00150 TQPainter painter;
00151 TQPixmap pixmap(rect.width(), rect.height());
00152 int i = 1;
00153 for (ColourList::const_iterator it = mColourList.begin(); it != mColourList.end(); ++i, ++it)
00154 {
00155 painter.begin(&pixmap);
00156 TQBrush brush(*it);
00157 painter.fillRect(rect, brush);
00158 painter.end();
00159
00160 insertItem(pixmap);
00161 pixmap.detach();
00162
00163 if (*it == mSelectedColour.rgb())
00164 setCurrentItem(i);
00165 }
00166 }
00167
00168 void ColourCombo::drawCustomItem(TQRect& rect, bool insert)
00169 {
00170 TQPen pen;
00171 if (tqGray(mCustomColour.rgb()) < 128)
00172 pen.setColor(TQt::white);
00173 else
00174 pen.setColor(TQt::black);
00175
00176 TQPainter painter;
00177 TQFontMetrics fm = TQFontMetrics(painter.font());
00178 rect.setRect(0, 0, width(), fm.height() + 4);
00179 TQPixmap pixmap(rect.width(), rect.height());
00180
00181 painter.begin(&pixmap);
00182 TQBrush brush(mCustomColour);
00183 painter.fillRect(rect, brush);
00184 painter.setPen(pen);
00185 painter.drawText(2, fm.ascent() + 2, i18n("Custom..."));
00186 painter.end();
00187
00188 if (insert)
00189 insertItem(pixmap);
00190 else
00191 changeItem(pixmap, 0);
00192 pixmap.detach();
00193 }
00194
00195 void ColourCombo::setReadOnly(bool ro)
00196 {
00197 mReadOnly = ro;
00198 }
00199
00200 void ColourCombo::resizeEvent(TQResizeEvent* re)
00201 {
00202 TQComboBox::resizeEvent(re);
00203 addColours();
00204 }
00205
00206 void ColourCombo::mousePressEvent(TQMouseEvent* e)
00207 {
00208 if (mReadOnly)
00209 {
00210
00211 if (e->button() == Qt::LeftButton)
00212 return;
00213 }
00214 TQComboBox::mousePressEvent(e);
00215 }
00216
00217 void ColourCombo::mouseReleaseEvent(TQMouseEvent* e)
00218 {
00219 if (!mReadOnly)
00220 TQComboBox::mouseReleaseEvent(e);
00221 }
00222
00223 void ColourCombo::mouseMoveEvent(TQMouseEvent* e)
00224 {
00225 if (!mReadOnly)
00226 TQComboBox::mouseMoveEvent(e);
00227 }
00228
00229 void ColourCombo::keyPressEvent(TQKeyEvent* e)
00230 {
00231 if (!mReadOnly || e->key() == TQt::Key_Escape)
00232 TQComboBox::keyPressEvent(e);
00233 }
00234
00235 void ColourCombo::keyReleaseEvent(TQKeyEvent* e)
00236 {
00237 if (!mReadOnly)
00238 TQComboBox::keyReleaseEvent(e);
00239 }
|