kexi

kexitableview.h
1/* This file is part of the KDE project
2 Copyright (C) 2002 Till Busch <till@bux.at>
3 Copyright (C) 2003 Lucijan Busch <lucijan@gmx.at>
4 Copyright (C) 2003 Daniel Molkentin <molkentin@kde.org>
5 Copyright (C) 2003 Joseph Wenninger <jowenn@kde.org>
6 Copyright (C) 2003-2006 Jaroslaw Staniek <js@iidea.pl>
7
8 This program is free software; you can redistribute it and,or
9 modify it under the terms of the GNU Library General Public
10 License as published by the Free Software Foundation; either
11 version 2 of the License, or (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Library General Public License for more details.
17
18 You should have received a copy of the GNU Library General Public License
19 along with this program; see the file COPYING. If not, write to
20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22
23 Original Author: Till Busch <till@bux.at>
24 Original Project: buX (www.bux.at)
25*/
26
27#ifndef KEXITABLEVIEW_H
28#define KEXITABLEVIEW_H
29
30#include <tqscrollview.h>
31#include <tqvariant.h>
32#include <tqptrlist.h>
33#include <tqheader.h>
34#include <tqtooltip.h>
35
36#include <kdebug.h>
37
38#include "kexitableviewdata.h"
39#include "kexitableedit.h"
40#include <kexiutils/tristate.h>
41#include <widget/utils/kexirecordnavigator.h>
42#include <widget/utils/kexisharedactionclient.h>
43#include "kexidataawareobjectiface.h"
44
45class TDEPopupMenu;
46class KPrinter;
47class TDEAction;
48
49class KexiTableHeader;
50class KexiTableItem;
51class KexiTableView;
52class KexiTableEdit;
53class KexiTableViewPrivate;
54class TDEActionCollection;
55
56namespace KexiDB {
57 class RowEditBuffer;
58}
59
61#define KEXITV_MINIMUM_COLUMN_WIDTH 10
62
64
66class KEXIDATATABLE_EXPORT KexiTableView :
67 public TQScrollView,
68 public KexiRecordNavigatorHandler,
69 public KexiSharedActionClient,
70 public KexiDataAwareObjectInterface
71{
72TQ_OBJECT
73
74KEXI_DATAAWAREOBJECTINTERFACE
75public:
76
78 class KEXIDATATABLE_EXPORT Appearance {
79 public:
80 Appearance(TQWidget *widget = 0);
81
84 TQColor baseColor;
85
88 TQColor textColor;
89
91 TQColor borderColor;
92
96
99
102
109
113 bool gridEnabled : 1;
114
117 bool navigatorEnabled : 1;
118
121
124
130
134
138
142
146
150 };
151
152 KexiTableView(KexiTableViewData* data=0, TQWidget* parent=0, const char* name=0);
153 virtual ~KexiTableView();
154
156 const Appearance& appearance() const;
157
159 void setAppearance(const Appearance& a);
160
162 TQString columnCaption(int colNum) const;
163
166 KexiDB::Field* field(int colNum) const;
167
169 virtual void setSpreadSheetMode();
170
172//moved bool scrollbarToolTipsEnabled() const;
173
175//moved void setScrollbarToolTipsEnabled(bool set);
176
179 virtual int rowsPerPage() const;
180
181 TQRect cellGeometry(int row, int col) const;
182 int columnWidth(int col) const;
183 int rowHeight() const;
184 int columnPos(int col) const;
185 int rowPos(int row) const;
186 int columnAt(int pos) const;
187 int rowAt(int pos, bool ignoreEnd=false) const;
188
192 virtual int lastVisibleRow() const;
193
195 virtual void updateCell(int row, int col);
196
198 virtual void updateCurrentCell();
199
201 virtual void updateRow(int row);
202
203 bool editableOnDoubleClick() const;
204 void setEditableOnDoubleClick(bool set);
205
207 bool verticalHeaderVisible() const;
208
210 void setVerticalHeaderVisible(bool set);
211
213 bool horizontalHeaderVisible() const;
214
216 void setHorizontalHeaderVisible(bool set);
217
218#ifndef KEXI_NO_PRINT
219 // printing
220// void setupPrinter(KPrinter &printer);
221 void print(KPrinter &printer);
222#endif
223
224 // reimplemented for internal reasons
225 virtual TQSizePolicy sizePolicy() const;
226 virtual TQSize sizeHint() const;
227 virtual TQSize minimumSizeHint() const;
228
230 void setFont(const TQFont &f);
231
232 virtual TQSize tableSize() const;
233
234 void emitSelected();
235
237 void triggerUpdate();
238
239 enum ScrollDirection
240 {
241 ScrollUp,
242 ScrollDown,
243 ScrollLeft,
244 ScrollRight
245 };
246
247 virtual bool eventFilter( TQObject *o, TQEvent *e );
248
251
255 int highlightedRow() const;
256
257 KexiTableItem *highlightedItem() const;
258
260 virtual TQScrollBar* verticalScrollBar() const { return TQScrollView::verticalScrollBar(); }
261
262public slots:
263 virtual void setData( KexiTableViewData *data, bool owner = true )
264 { KexiDataAwareObjectInterface::setData( data, owner ); }
265
266 virtual void clearColumnsInternal(bool repaint);
267
270 void adjustColumnWidthToContents(int colNum = -1);
271
273 void setColumnWidth(int col, int width);
274
279 void setColumnStretchEnabled( bool set, int colNum );
280
285 void maximizeColumnsWidth( const TQValueList<int> &columnList );
286
290 void adjustHorizontalHeaderSize();
291
295 void setHighlightedRow(int row);
296
299
303 virtual void ensureCellVisible(int row, int col/*=-1*/);
304
305// void gotoNext();
306//js int findString(const TQString &string);
307
312
321 virtual KexiTableItem *insertEmptyRow(int row = -1)
323
329 virtual void startEditCurrentCell(const TQString& setText = TQString())
331
336
341
347
353
361
364
365signals:
366 virtual void dataSet( KexiTableViewData *data );
367
368 virtual void itemSelected(KexiTableItem *);
369 virtual void cellSelected(int col, int row);
370
371 void itemReturnPressed(KexiTableItem *, int row, int col);
372 void itemDblClicked(KexiTableItem *, int row, int col);
373 void itemMouseReleased(KexiTableItem *, int row, int col);
374
375 void dragOverRow(KexiTableItem *item, int row, TQDragMoveEvent* e);
376 void droppedAtRow(KexiTableItem *item, int row, TQDropEvent *e, KexiTableItem*& newItem);
377
379 virtual void dataRefreshed();
380
381 virtual void itemChanged(KexiTableItem *, int row, int col);
382 virtual void itemChanged(KexiTableItem *, int row, int col, TQVariant oldValue);
383 virtual void itemDeleteRequest(KexiTableItem *, int row, int col);
384 virtual void currentItemDeleteRequest();
387// void addRecordRequest();
388// void contextMenuRequested(KexiTableItem *, int row, int col, const TQPoint &);
389 void sortedColumnChanged(int col);
390
392 void rowEditStarted(int row);
393
396 void rowEditTerminated(int row);
397
401
402protected slots:
403 void slotSettingsChanged(int category);
404
405 virtual void slotDataDestroying() { KexiDataAwareObjectInterface::slotDataDestroying(); }
406
407 virtual void slotRowsDeleted( const TQValueList<int> & );
408
410 void slotColumnWidthChanged( int col, int os, int ns );
411
412 void slotSectionHandleDoubleClicked( int section );
413
414 void slotUpdate();
416 virtual void sortColumnInternal(int col, int order = 0)
417 { KexiDataAwareObjectInterface::sortColumnInternal(col, order); }
418
419 void slotAutoScroll();
420
422 void slotTopHeaderSizeChange( int section, int oldSize, int newSize );
423
425 void slotEditRequested();
426
429 virtual void reloadData();
430
432 virtual void slotRowRepaintRequested(KexiTableItem& item);
433
435 virtual void slotAboutToDeleteRow(KexiTableItem& item, KexiDB::ResultInfo* result, bool repaint)
437
440
442 virtual void slotRowInserted(KexiTableItem *item, bool repaint)
444
446 virtual void slotRowInserted(KexiTableItem *item, uint row, bool repaint)
447 { KexiDataAwareObjectInterface::slotRowInserted(item, row, repaint); }
448
452
455
460
461protected:
466 virtual void initDataContents();
467
471 virtual void updateWidgetContentsSize();
472
474 virtual void clearVariables();
475
477 virtual int currentLocalSortingOrder() const;
478
480 virtual int currentLocalSortColumn() const;
481
483 virtual void setLocalSortingOrder(int col, int order);
484
486 virtual void updateGUIAfterSorting();
487
489 virtual void updateWidgetScrollBars() { updateScrollBars(); }
490
491// /*! Implementation for KexiDataAwareObjectInterface */
492// virtual void emitSortedColumnChanged(int col) { emit sortedColumnChanged(col); }
493
494// /*! Implementation for KexiDataAwareObjectInterface */
495// virtual void emitRowEditTerminated(int row) { emit rowEditTerminated(row); }
496
499 virtual void addHeaderColumn(const TQString& caption, const TQString& description,
500 const TQIconSet& icon, int size);
501
505 bool isDefaultValueDisplayed(KexiTableItem *item, int col, TQVariant* value = 0);
506
508 void drawContents(TQPainter *p, int cx, int cy, int cw, int ch);
509 void createBuffer(int width, int height);
510 void paintCell(TQPainter* p, KexiTableItem *item, int col, int row, const TQRect &cr, bool print=false);
511 void paintEmptyArea(TQPainter *p, int cx, int cy, int cw, int ch);
512 void updateGeometries();
513
514 TQPoint contentsToViewport2( const TQPoint &p );
515 void contentsToViewport2( int x, int y, int& vx, int& vy );
516 TQPoint viewportToContents2( const TQPoint& vp );
517
518 // event handling
519 virtual void contentsMousePressEvent(TQMouseEvent* e);
520 virtual void contentsMouseReleaseEvent(TQMouseEvent* e);
522 bool handleContentsMousePressOrRelease(TQMouseEvent* e, bool release);
523 virtual void contentsMouseMoveEvent(TQMouseEvent* e);
524 virtual void contentsMouseDoubleClickEvent(TQMouseEvent* e);
525 virtual void keyPressEvent(TQKeyEvent* e);
526 virtual void focusInEvent(TQFocusEvent* e);
527 virtual void focusOutEvent(TQFocusEvent* e);
528 virtual void resizeEvent(TQResizeEvent* e);
529 virtual void viewportResizeEvent(TQResizeEvent *e);
530 virtual void showEvent(TQShowEvent *e);
531 virtual void contentsDragMoveEvent(TQDragMoveEvent *e);
532 virtual void contentsDropEvent(TQDropEvent *e);
533 virtual void viewportDragLeaveEvent(TQDragLeaveEvent *e);
534 virtual void paletteChange( const TQPalette &oldPalette );
535
537 virtual KexiDataItemInterface *editor( int col, bool ignoreMissingEditor = false );
538
539 inline KexiTableEdit *tableEditorWidget( int col, bool ignoreMissingEditor = false )
540 { return dynamic_cast<KexiTableEdit*>( editor( col, ignoreMissingEditor ) ); }
541
543 virtual void editorShowFocus( int row, int col );
544
546 virtual void createEditor(int row, int col, const TQString& addText = TQString(),
547 bool removeOld = false);
548
549 bool focusNextPrevChild(bool next);
550
556 bool shortCutPressed( TQKeyEvent *e, const TQCString &action_name );
557
558#if 0 //we have now KexiActionProxy
561 bool updateContextMenu();
562#endif
563
571 void showContextMenu( const TQPoint& pos = TQPoint(-1,-1) );
572
574 inline void paintRow(KexiTableItem *item,
575 TQPainter *pb, int r, int rowp, int cx, int cy,
576 int colfirst, int collast, int maxwc);
577
578 virtual void setHBarGeometry( TQScrollBar & hbar, int x, int y, int w, int h );
579
581 void setupNavigator();
582
584 int validRowNumber(const TQString& text);
585
588 virtual void removeEditor();
589
591 void updateFonts(bool repaint = false);
592
595 void setBottomMarginInternal(int pixels);
596
597 virtual void updateWidgetContents() { update(); }
598
600 virtual void moveToRecordRequested(uint r);
601 virtual void moveToLastRecordRequested();
602 virtual void moveToPreviousRecordRequested();
603 virtual void moveToNextRecordRequested();
604 virtual void moveToFirstRecordRequested();
605 virtual void addNewRecordRequested() { KexiDataAwareObjectInterface::addNewRecordRequested(); }
606
608 virtual void copySelection();
609
611 virtual void cutSelection();
612
614 virtual void paste();
615
618 virtual void updateAllVisibleRowsBelow(int row);
619
620 void updateAfterCancelRowEdit();
621 void updateAfterAcceptRowEdit();
622
626 bool getVisibleLookupValue(TQVariant& cellValue, KexiTableEdit *edit,
627 KexiTableItem *item, KexiTableViewColumn *tvcol) const;
628
629// //! Called to repaint contents after a row is deleted.
630// void repaintAfterDelete();
631
632 KexiTableViewPrivate *d;
633
634 class WhatsThis;
635 friend class KexiTableItem;
636 friend class WhatsThis;
637 friend class KexiTableViewCellToolTip;
638};
639
640#endif
Meta-data for a field.
Definition field.h:73
provides data for single edited database row KexiDB::RowEditBuffer provides data for single edited ro...
virtual void slotRowInserted(KexiTableItem *item, bool repaint)
Handles KexiTableViewData::rowInserted() signal to repaint when needed.
KexiTableViewData * data() const
virtual void cutSelection()=0
Cut current selection to a clipboard (e.g. cell).
virtual void ensureCellVisible(int row, int col)=0
virtual void clearColumnsInternal(bool repaint)=0
void setData(KexiTableViewData *data, bool owner=true)
virtual void paste()=0
Paste current clipboard contents (e.g. to a cell).
virtual void setAcceptsRowEditAfterCellAccepting(bool set)
virtual void updateRow(int row)=0
virtual int lastVisibleRow() const =0
virtual void slotRowRepaintRequested(KexiTableItem &item)
Handles KexiTableViewData::rowRepaintRequested() signal.
virtual void createEditor(int row, int col, const TQString &addText=TQString(), bool removeOld=false)=0
Creates editors and shows it, what usually means the beginning of a cell editing.
virtual void cellSelected(int col, int row)=0
virtual void updateWidgetContentsSize()=0
virtual void updateAllVisibleRowsBelow(int row)
virtual void slotRowDeleted()
Handles KexiTableViewData::rowDeleted() signal to repaint when needed.
virtual void updateCell(int row, int col)=0
KexiDataItemInterface * editor() const
virtual void itemChanged(KexiTableItem *, int row, int col)=0
signals
virtual void copySelection()=0
Copy current selection to a clipboard (e.g. cell).
virtual void focusOutEvent(TQFocusEvent *e)
Call this from the subclass. *‍/.
virtual void itemSelected(KexiTableItem *)=0
virtual int rowsPerPage() const =0
virtual KexiTableItem * insertEmptyRow(int row=-1)
virtual void sortedColumnChanged(int col)=0
virtual void startEditCurrentCell(const TQString &setText=TQString())
virtual void editorShowFocus(int row, int col)=0
virtual void updateCurrentCell()=0
virtual void slotAboutToDeleteRow(KexiTableItem &item, KexiDB::ResultInfo *result, bool repaint)
Handles KexiTableViewData::aboutToDeleteRow() signal. Prepares info for slotRowDeleted().
An interface for declaring widgets to be data-aware.
virtual void moveToRecordRequested(uint r)=0
Moving to record r is requested. Records are counted from 0.
Abstract class for a cell editor. Handles cell painting and displaying the editor widget.
TQColor rowMouseOverAlternateHighlightingColor
KexiTableView class provides a widget for displaying data in a tabular view.
void rowEditTerminated(int row)
void setAppearance(const Appearance &a)
const Appearance & appearance() const
KexiDB::Field * field(int colNum) const
virtual void slotAboutToDeleteRow(KexiTableItem &item, KexiDB::ResultInfo *result, bool repaint)
Handles KexiTableViewData::aboutToDeleteRow() signal. Prepares info for slotRowDeleted().
void setVerticalHeaderVisible(bool set)
Sets vertical header's visibility.
void triggerUpdate()
single shot after 1ms for contents updatinh
virtual void vScrollBarValueChanged(int v)
virtual void setDropsAtRowEnabled(bool set)
void setHorizontalHeaderVisible(bool set)
Sets horizontal header's visibility.
virtual void setAcceptsRowEditAfterCellAccepting(bool set)
void rowEditStarted(int row)
emmited when row editing is started (for updating or inserting)
virtual void deleteAndStartEditCurrentCell()
void reloadActions()
virtual bool acceptRowEdit()
void clearHighlightedRow()
bool verticalHeaderVisible() const
virtual void sortColumnInternal(int col, int order=0)
implemented because we needed this as slot
virtual void updateWidgetContents()
virtual void startEditCurrentCell(const TQString &setText=TQString())
static void initCellEditorFactories()
Initializes standard editor cell editor factories. This is called internally, once.
virtual void slotRowInserted(KexiTableItem *item, bool repaint)
Handles KexiTableViewData::rowInserted() signal to repaint when needed.
virtual void scrollBarTipTimeout()
void setFont(const TQFont &f)
virtual KexiTableItem * insertEmptyRow(int row=-1)
virtual void newItemAppendedForAfterDeletingInSpreadSheetMode()
Emitted for spreadsheet mode when an item was deleted and a new item has been appended.
virtual void dataRefreshed()
virtual bool cancelRowEdit()
virtual TQScrollBar * verticalScrollBar() const
virtual void slotRowDeleted()
Handles KexiTableViewData::rowDeleted() signal to repaint when needed.
bool horizontalHeaderVisible() const
virtual void vScrollBarSliderReleased()
virtual void slotRowInserted(KexiTableItem *item, uint row, bool repaint)
Like above, not db-aware version.
virtual void updateWidgetScrollBars()
int highlightedRow() const
void setHighlightedRow(int row)
virtual void deleteCurrentRow()
TQString columnCaption(int colNum) const
High-level database connectivity library with database backend drivers.