23#include "kexirecordmarker.h"
30#include <tqapplication.h>
33#include <kstaticdeleter.h>
35#include <kexiutils/utils.h>
37static KStaticDeleter<TQImage> KexiRecordMarker_pen_deleter, KexiRecordMarker_plus_deleter;
38TQImage* KexiRecordMarker_pen = 0, *KexiRecordMarker_plus = 0;
40static const unsigned char img_pen_data[] = {
41 0x00,0x00,0x03,0x30,0x78,0x9c,0xfb,0xff,0xff,0x3f,0xc3,0x7f,0x32,0x30,
42 0x10,0x80,0x88,0xff,0xe4,0xe8,0x85,0xe9,0xc7,0xc6,0x26,0x55,0x3f,0x3a,
43 0x4d,0x8e,0x7e,0x72,0xfc,0x32,0xd2,0xf5,0xa3,0xeb,0xa5,0xb5,0x7e,0x5c,
44 0xe9,0x85,0x54,0xfb,0xb1,0xa5,0x1b,0x52,0xdc,0x0e,0x00,0xf2,0xea,0x0a,
47static const unsigned char img_plus_data[] = {
48 0x00,0x00,0x01,0x90,0x78,0x9c,0xfb,0xff,0xff,0x3f,0xc3,0x7f,0x28,0x86,
49 0x82,0xff,0x50,0x0c,0x17,0x47,0xc7,0xd4,0x50,0x87,0x05,0xc0,0xd5,0xe1,
50 0x10,0xa7,0x16,0x26,0xca,0x5e,0x7c,0xfe,0x20,0x47,0x1d,0xb2,0x5a,0x5c,
51 0xea,0x40,0x72,0x00,0x03,0x6e,0x74,0x8c
54static struct EmbedImage {
55 int width, height, depth;
56 const unsigned char *data;
59 const TQRgb *colorTable;
63 { 17, 12, 32, ( const unsigned char*)img_pen_data, 57, 0, 0, true, "tableview_pen.png" },
64 { 10, 10, 32, ( const unsigned char*)img_pen_data, 50, 0, 0, true, "tableview_plus.png" }
67TQImage* getImg( const unsigned char* data, int id)
70 baunzip = tqUncompress( data, embed_image[ id].compressed );
71 TQImage *img = new TQImage( TQImage((uchar*)baunzip.data(),
72 embed_image[ id].width, embed_image[ id].height,
73 embed_image[ id].depth, (TQRgb*)embed_image[ id].colorTable,
74 embed_image[ id].numColors, TQImage::BigEndian
76 if ( embed_image[ id].alpha )
77 img->setAlphaBuffer( true);
81static void initRecordMarkerImages()
83 if (!KexiRecordMarker_pen) {
85 KexiRecordMarker_pen_deleter.setObject( KexiRecordMarker_pen, getImg(img_pen_data, 0) );
86 KexiRecordMarker_plus_deleter.setObject( KexiRecordMarker_plus, getImg(img_plus_data, 1) );
93class KexiRecordMarker::Private
103 , selectionBackgroundColor(tqApp->palette().active().highlight())
104 , showInsertRow(true)
113 TQColor selectionBackgroundColor;
114 bool showInsertRow : 1;
119KexiRecordMarker::KexiRecordMarker(TQWidget *parent, const char* name)
120 : TQWidget(parent, name)
123 initRecordMarkerImages();
126KexiRecordMarker::~KexiRecordMarker()
131TQImage* KexiRecordMarker::penImage()
133 initRecordMarkerImages();
134 return KexiRecordMarker_pen;
137TQImage* KexiRecordMarker::plusImage()
139 initRecordMarkerImages();
140 return KexiRecordMarker_plus;
143void KexiRecordMarker::addLabel( bool upd)
150void KexiRecordMarker::removeLabel( bool upd)
166void KexiRecordMarker::clear( bool upd)
173int KexiRecordMarker::rows() const
175 if (d->showInsertRow)
181void KexiRecordMarker::paintEvent(TQPaintEvent *e)
186 int first = (r.top() + d->offset) / d->rowHeight;
187 int last = (r.bottom() + d->offset) / d->rowHeight;
188 if(last > (d->rows-1+(d->showInsertRow?1:0)))
189 last = d->rows-1+(d->showInsertRow?1:0);
191 TQColorGroup selectedColorGroup(colorGroup());
192 selectedColorGroup.setColor( TQColorGroup::Button,
194 d->selectionBackgroundColor, 2, 1) );
195 selectedColorGroup.setColor( TQColorGroup::Background,
196 selectedColorGroup.color(TQColorGroup::Button) );
197 TQColorGroup highlightedColorGroup(colorGroup());
198 highlightedColorGroup.setColor( TQColorGroup::Button,
200 d->selectionBackgroundColor, 4, 1) );
201 highlightedColorGroup.setColor( TQColorGroup::Background,
202 highlightedColorGroup.color(TQColorGroup::Button) );
203 for( int i=first; i <= last; i++)
205 int y = ((d->rowHeight * i)-d->offset);
206 TQRect r(0, y, width(), d->rowHeight);
208 style().drawPrimitive( TQStyle::PE_HeaderSection, &p, r,
209 (d->currentRow == i) ? selectedColorGroup : (d->highlightedRow == i ? highlightedColorGroup : colorGroup()),
210 TQStyle::Style_Raised | (isEnabled() ? TQStyle::Style_Enabled : 0));
212 if (d->editRow!=-1 && d->editRow >= first && d->editRow <= (last)) {
214 int ofs = d->rowHeight / 4;
215 int pos = ((d->rowHeight*(d->currentRow>=0?d->currentRow:0))-d->offset)-ofs/2+1;
216 p.drawImage((d->rowHeight-KexiRecordMarker_pen->width())/2,
217 (d->rowHeight-KexiRecordMarker_pen->height())/2+pos,*KexiRecordMarker_pen);
219 else if (d->currentRow >= first && d->currentRow <= last
220 && (!d->showInsertRow || (d->showInsertRow && d->currentRow < last)))
223 p.setBrush(colorGroup().foreground());
224 p.setPen(TQPen(TQt::NoPen));
225 TQPointArray points(3);
226 int ofs = d->rowHeight / 4;
227 int ofs2 = (width() - ofs) / 2 -1;
228 int pos = ((d->rowHeight*d->currentRow)-d->offset)-ofs/2+2;
229 points.putPoints(0, 3, ofs2, pos+ofs, ofs2 + ofs, pos+ofs*2,
231 p.drawPolygon(points);
236 if (d->showInsertRow && d->editRow < last
237 && last == (d->rows-1+(d->showInsertRow?1:0)) ) {
239 int pos = ((d->rowHeight*last)-d->offset)+(d->rowHeight-KexiRecordMarker_plus->height())/2;
241 p.drawImage((width()-KexiRecordMarker_plus->width())/2, pos, *KexiRecordMarker_plus);
245void KexiRecordMarker::setCurrentRow( int row)
247 if (row == d->currentRow)
249 int oldRow = d->currentRow;
253 update(0,(d->rowHeight*(oldRow))-d->offset-1, width()+2, d->rowHeight+2);
254 if (d->currentRow != -1)
255 update(0,(d->rowHeight*d->currentRow)-d->offset-1, width()+2, d->rowHeight+2);
258void KexiRecordMarker::setHighlightedRow( int row)
260 if (row == d->highlightedRow)
262 int oldRow = d->highlightedRow;
263 d->highlightedRow = row;
266 update(0,(d->rowHeight*(oldRow))-d->offset-1, width()+2, d->rowHeight+2);
267 if (d->currentRow != -1)
268 update(0,(d->rowHeight*d->highlightedRow)-d->offset-1, width()+2, d->rowHeight+2);
271void KexiRecordMarker::setOffset( int offset)
273 int oldOff = d->offset;
275 scroll(0,oldOff-offset);
278void KexiRecordMarker::setCellHeight( int cellHeight)
280 d->rowHeight = cellHeight;
290void KexiRecordMarker::showInsertRow( bool show)
292 d->showInsertRow = show;
297void KexiRecordMarker::setSelectionBackgroundColor( const TQColor &color)
299 d->selectionBackgroundColor = color;
302TQColor KexiRecordMarker::selectionBackgroundColor() const
304 return d->selectionBackgroundColor;
307#include "kexirecordmarker.moc"
void addLabels(int num, bool upd=true)
KEXIUTILS_EXPORT TQColor blendedColors(const TQColor &c1, const TQColor &c2, int factor1=1, int factor2=1)
|