kexi

kexiformscrollview.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2004 Cedric Pasteur <cedric.pasteur@free.fr>
00003    Copyright (C) 2004-2006 Jaroslaw Staniek <js@iidea.pl>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #ifndef KEXIFORMSCROLLVIEW_H
00022 #define KEXIFORMSCROLLVIEW_H
00023 
00024 #include "kexidataprovider.h"
00025 #include "kexiformeventhandler.h"
00026 #include "widgets/kexidbform.h"
00027 #include <widget/kexiscrollview.h>
00028 #include <widget/utils/kexirecordnavigator.h>
00029 #include <widget/utils/kexisharedactionclient.h>
00030 #include <widget/tableview/kexidataawareobjectiface.h>
00031 
00033 
00041 class KEXIFORMUTILS_EXPORT KexiFormScrollView : 
00042     public KexiScrollView,
00043     public KexiRecordNavigatorHandler,
00044     public KexiSharedActionClient,
00045     public KexiDataAwareObjectInterface,
00046     public KexiFormDataProvider,
00047     public KexiFormEventHandler
00048 {
00049     Q_OBJECT
00050     KEXI_DATAAWAREOBJECTINTERFACE
00051 
00052     public:
00053         KexiFormScrollView(QWidget *parent, bool preview);
00054         virtual ~KexiFormScrollView();
00055 
00056         void setForm(KFormDesigner::Form *form) { m_form = form; }
00057 
00061         virtual bool columnEditable(int col);
00062 
00066         virtual int columns() const;
00067 
00072         virtual KexiTableViewColumn* column(int col);
00073 
00076         virtual int fieldNumberForColumn(int col) {
00077             KexiFormDataItemInterface *item = dynamic_cast<KexiFormDataItemInterface*>(
00078                 dbFormWidget()->orderedDataAwareWidgets()->at( col ));
00079             if (!item)
00080                 return -1;
00081             KexiFormDataItemInterfaceToIntMap::ConstIterator it(m_fieldNumbersForDataItems.find( item ));
00082             return it!=m_fieldNumbersForDataItems.constEnd() ? (int)it.data() : -1;
00083         }
00084 
00086         void beforeSwitchView();
00087 
00092 
00093         virtual int lastVisibleRow() const;
00094 
00096         virtual QScrollBar* verticalScrollBar() const { return KexiScrollView::verticalScrollBar(); }
00097 
00098     public slots:
00100         virtual void show();
00101 
00102         //virtual void setFocus();
00103 
00106         virtual int rowsPerPage() const;
00107 
00109         virtual void ensureCellVisible(int row, int col/*=-1*/);
00110 
00111         virtual void moveToRecordRequested(uint r);
00112         virtual void moveToLastRecordRequested();
00113         virtual void moveToPreviousRecordRequested();
00114         virtual void moveToNextRecordRequested();
00115         virtual void moveToFirstRecordRequested();
00116         virtual void addNewRecordRequested() { KexiDataAwareObjectInterface::addNewRecordRequested(); }
00117 
00121         virtual bool cancelEditor();
00122 
00123     public slots:
00125         virtual void refreshContentsSize();
00126 
00129 
00130         virtual void vScrollBarValueChanged(int v) { KexiDataAwareObjectInterface::vScrollBarValueChanged(v); }
00131 
00133 
00134         virtual void vScrollBarSliderReleased() { KexiDataAwareObjectInterface::vScrollBarSliderReleased(); }
00135 
00139 
00140         virtual void scrollBarTipTimeout() { KexiDataAwareObjectInterface::scrollBarTipTimeout(); }
00141 
00142     signals:
00143         virtual void itemChanged(KexiTableItem *, int row, int col);
00144         virtual void itemChanged(KexiTableItem *, int row, int col, QVariant oldValue);
00145         virtual void itemDeleteRequest(KexiTableItem *, int row, int col);
00146         virtual void currentItemDeleteRequest();
00147         virtual void newItemAppendedForAfterDeletingInSpreadSheetMode(); 
00148         virtual void dataRefreshed();
00149         virtual void dataSet( KexiTableViewData *data );
00150         virtual void itemSelected(KexiTableItem *);
00151         virtual void cellSelected(int col, int row);
00152         virtual void sortedColumnChanged(int col);
00153         virtual void rowEditStarted(int row);
00154         virtual void rowEditTerminated(int row);
00155         virtual void reloadActions();
00156 
00157     protected slots:
00158         void slotResizingStarted();
00159 
00161         virtual void slotRowRepaintRequested(KexiTableItem& item);
00162 
00164         virtual void slotAboutToDeleteRow(KexiTableItem& item, KexiDB::ResultInfo* result, bool repaint)
00165         { KexiDataAwareObjectInterface::slotAboutToDeleteRow(item, result, repaint); }
00166 
00168         virtual void slotRowDeleted() { KexiDataAwareObjectInterface::slotRowDeleted(); }
00169 
00171         virtual void slotRowInserted(KexiTableItem *item, bool repaint);
00172 
00174         virtual void slotRowInserted(KexiTableItem *item, uint row, bool repaint);
00175 
00176         virtual void slotRowsDeleted( const QValueList<int> & );
00177 
00178         virtual void slotDataDestroying() { KexiDataAwareObjectInterface::slotDataDestroying(); }
00179 
00182         virtual void reloadData() { KexiDataAwareObjectInterface::reloadData(); }
00183 
00185         virtual void copySelection();
00186 
00188         virtual void cutSelection();
00189 
00191         virtual void paste();
00192 
00193     protected:
00195         virtual void clearColumnsInternal(bool repaint);
00196 
00198         virtual void addHeaderColumn(const QString& caption, const QString& description, 
00199             const QIconSet& icon, int width);
00200 
00202         virtual int currentLocalSortingOrder() const;
00203 
00205         virtual int currentLocalSortColumn() const;
00206 
00208         virtual void setLocalSortingOrder(int col, int order);
00209 
00211         void sortColumnInternal(int col, int order = 0);
00212 
00214         virtual void updateGUIAfterSorting();
00215 
00217         virtual void createEditor(int row, int col, const QString& addText = QString::null, 
00218             bool removeOld = false);
00219 
00221         virtual KexiDataItemInterface *editor( int col, bool ignoreMissingEditor = false );
00222 
00224         virtual void editorShowFocus( int row, int col );
00225 
00228         virtual void updateCell(int row, int col);
00229 
00231         virtual void updateCurrentCell();
00232 
00235         virtual void updateRow(int row);
00236 
00239         virtual void updateWidgetContents();
00240 
00244         virtual void updateWidgetContentsSize();
00245 
00249         virtual void updateWidgetScrollBars();
00250 
00251         KexiDBForm* dbFormWidget() const;
00252 
00254         virtual void valueChanged(KexiDataItemInterface* item);
00255 
00260         virtual bool cursorAtNewRow() const;
00261 
00265         inline virtual void selectCellInternal();
00266 
00268         virtual void initDataContents();
00269 
00274         virtual void updateAfterCancelRowEdit();
00275 
00280         virtual void updateAfterAcceptRowEdit();
00281 
00284         void handleDataWidgetAction(const QString& actionName);
00285 
00287         bool shouldDisplayDefaultValueForItem(KexiFormDataItemInterface* itemIface) const;
00288 
00289         //virtual bool focusNextPrevChild( bool next );
00290 
00291         KFormDesigner::Form *m_form;
00292         int m_currentLocalSortColumn, m_localSortingOrder;
00294         KexiTableItem *m_previousItem;
00295 };
00296 
00297 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys