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 
00067         virtual int columns() const;
00068 
00073         virtual KexiTableViewColumn* column(int col);
00074 
00077         virtual int fieldNumberForColumn(int col) {
00078             KexiFormDataItemInterface *item = dynamic_cast<KexiFormDataItemInterface*>(
00079                 dbFormWidget()->orderedDataAwareWidgets()->at( col ));
00080             if (!item)
00081                 return -1;
00082             KexiFormDataItemInterfaceToIntMap::ConstIterator it(m_fieldNumbersForDataItems.find( item ));
00083             return it!=m_fieldNumbersForDataItems.constEnd() ? (int)it.data() : -1;
00084         }
00085 
00087         void beforeSwitchView();
00088 
00093 
00094         virtual int lastVisibleRow() const;
00095 
00097         virtual QScrollBar* verticalScrollBar() const { return KexiScrollView::verticalScrollBar(); }
00098 
00099     public slots:
00101         virtual void show();
00102 
00103         //virtual void setFocus();
00104 
00107         virtual int rowsPerPage() const;
00108 
00110         virtual void ensureCellVisible(int row, int col/*=-1*/);
00111 
00112         virtual void moveToRecordRequested(uint r);
00113         virtual void moveToLastRecordRequested();
00114         virtual void moveToPreviousRecordRequested();
00115         virtual void moveToNextRecordRequested();
00116         virtual void moveToFirstRecordRequested();
00117         virtual void addNewRecordRequested() { KexiDataAwareObjectInterface::addNewRecordRequested(); }
00118 
00122         virtual bool cancelEditor();
00123 
00124     public slots:
00126         virtual void refreshContentsSize();
00127 
00130 
00131         virtual void vScrollBarValueChanged(int v) { KexiDataAwareObjectInterface::vScrollBarValueChanged(v); }
00132 
00134 
00135         virtual void vScrollBarSliderReleased() { KexiDataAwareObjectInterface::vScrollBarSliderReleased(); }
00136 
00140 
00141         virtual void scrollBarTipTimeout() { KexiDataAwareObjectInterface::scrollBarTipTimeout(); }
00142 
00143     signals:
00144         virtual void itemChanged(KexiTableItem *, int row, int col);
00145         virtual void itemChanged(KexiTableItem *, int row, int col, QVariant oldValue);
00146         virtual void itemDeleteRequest(KexiTableItem *, int row, int col);
00147         virtual void currentItemDeleteRequest();
00148         virtual void newItemAppendedForAfterDeletingInSpreadSheetMode(); 
00149         virtual void dataRefreshed();
00150         virtual void dataSet( KexiTableViewData *data );
00151         virtual void itemSelected(KexiTableItem *);
00152         virtual void cellSelected(int col, int row);
00153         virtual void sortedColumnChanged(int col);
00154         virtual void rowEditStarted(int row);
00155         virtual void rowEditTerminated(int row);
00156         virtual void reloadActions();
00157 
00158     protected slots:
00159         void slotResizingStarted();
00160 
00162         virtual void slotRowRepaintRequested(KexiTableItem& item);
00163 
00165         virtual void slotAboutToDeleteRow(KexiTableItem& item, KexiDB::ResultInfo* result, bool repaint)
00166         { KexiDataAwareObjectInterface::slotAboutToDeleteRow(item, result, repaint); }
00167 
00169         virtual void slotRowDeleted() { KexiDataAwareObjectInterface::slotRowDeleted(); }
00170 
00172         virtual void slotRowInserted(KexiTableItem *item, bool repaint);
00173 
00175         virtual void slotRowInserted(KexiTableItem *item, uint row, bool repaint);
00176 
00177         virtual void slotRowsDeleted( const QValueList<int> & );
00178 
00179         virtual void slotDataDestroying() { KexiDataAwareObjectInterface::slotDataDestroying(); }
00180 
00183         virtual void reloadData() { KexiDataAwareObjectInterface::reloadData(); }
00184 
00186         virtual void copySelection();
00187 
00189         virtual void cutSelection();
00190 
00192         virtual void paste();
00193 
00194     protected:
00196         virtual void clearColumnsInternal(bool repaint);
00197 
00199         virtual void addHeaderColumn(const QString& caption, const QString& description, 
00200             const QIconSet& icon, int width);
00201 
00203         virtual int currentLocalSortingOrder() const;
00204 
00206         virtual int currentLocalSortColumn() const;
00207 
00209         virtual void setLocalSortingOrder(int col, int order);
00210 
00212         void sortColumnInternal(int col, int order = 0);
00213 
00215         virtual void updateGUIAfterSorting();
00216 
00218         virtual void createEditor(int row, int col, const QString& addText = QString::null, 
00219             bool removeOld = false);
00220 
00222         virtual KexiDataItemInterface *editor( int col, bool ignoreMissingEditor = false );
00223 
00225         virtual void editorShowFocus( int row, int col );
00226 
00229         virtual void updateCell(int row, int col);
00230 
00232         virtual void updateCurrentCell();
00233 
00236         virtual void updateRow(int row);
00237 
00240         virtual void updateWidgetContents();
00241 
00245         virtual void updateWidgetContentsSize();
00246 
00250         virtual void updateWidgetScrollBars();
00251 
00252         KexiDBForm* dbFormWidget() const;
00253 
00255         virtual void valueChanged(KexiDataItemInterface* item);
00256 
00261         virtual bool cursorAtNewRow() const;
00262 
00266         inline virtual void selectCellInternal();
00267 
00269         virtual void initDataContents();
00270 
00275         virtual void updateAfterCancelRowEdit();
00276 
00281         virtual void updateAfterAcceptRowEdit();
00282 
00285         void handleDataWidgetAction(const QString& actionName);
00286 
00288         bool shouldDisplayDefaultValueForItem(KexiFormDataItemInterface* itemIface) const;
00289 
00290         //virtual bool focusNextPrevChild( bool next );
00291 
00292         KFormDesigner::Form *m_form;
00293         int m_currentLocalSortColumn, m_localSortingOrder;
00295         KexiTableItem *m_previousItem;
00296 };
00297 
00298 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys