summaryrefslogtreecommitdiffstats
path: root/kexi/plugins/forms/kexiformscrollview.h
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/plugins/forms/kexiformscrollview.h')
-rw-r--r--kexi/plugins/forms/kexiformscrollview.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/kexi/plugins/forms/kexiformscrollview.h b/kexi/plugins/forms/kexiformscrollview.h
new file mode 100644
index 00000000..12315761
--- /dev/null
+++ b/kexi/plugins/forms/kexiformscrollview.h
@@ -0,0 +1,297 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004 Cedric Pasteur <cedric.pasteur@free.fr>
+ Copyright (C) 2004-2006 Jaroslaw Staniek <js@iidea.pl>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KEXIFORMSCROLLVIEW_H
+#define KEXIFORMSCROLLVIEW_H
+
+#include "kexidataprovider.h"
+#include "kexiformeventhandler.h"
+#include "widgets/kexidbform.h"
+#include <widget/kexiscrollview.h>
+#include <widget/utils/kexirecordnavigator.h>
+#include <widget/utils/kexisharedactionclient.h>
+#include <widget/tableview/kexidataawareobjectiface.h>
+
+//! @short KexiFormScrollView class provides a widget for displaying data in a form view
+/*! This class also implements:
+ - record navigation handling (KexiRecordNavigatorHandler)
+ - shared actions handling (KexiSharedActionClient)
+ - data-aware behaviour (KexiDataAwareObjectInterface)
+ - data provider bound to data-aware widgets (KexiFormDataProvider)
+
+ @see KexiTableView
+*/
+class KEXIFORMUTILS_EXPORT KexiFormScrollView :
+ public KexiScrollView,
+ public KexiRecordNavigatorHandler,
+ public KexiSharedActionClient,
+ public KexiDataAwareObjectInterface,
+ public KexiFormDataProvider,
+ public KexiFormEventHandler
+{
+ Q_OBJECT
+ KEXI_DATAAWAREOBJECTINTERFACE
+
+ public:
+ KexiFormScrollView(QWidget *parent, bool preview);
+ virtual ~KexiFormScrollView();
+
+ void setForm(KFormDesigner::Form *form) { m_form = form; }
+
+ /*! Reimplemented from KexiDataAwareObjectInterface
+ for checking 'readOnly' flag from a widget
+ ('readOnly' flag from data member is still checked though). */
+ virtual bool columnEditable(int col);
+
+ /*! \return number of visible columns in this view.
+ There can be a number of duplicated columns defined,
+ so columns() can return greater or smaller number than dataColumns(). */
+ virtual int columns() const;
+
+ /*! \return column information for column number \a col.
+ Reimplemented for KexiDataAwareObjectInterface:
+ column data corresponding to widget number is used here
+ (see fieldNumberForColumn()). */
+ virtual KexiTableViewColumn* column(int col);
+
+ /*! \return field number within data model connected to a data-aware
+ widget at column \a col. */
+ virtual int fieldNumberForColumn(int col) {
+ KexiFormDataItemInterface *item = dynamic_cast<KexiFormDataItemInterface*>(
+ dbFormWidget()->orderedDataAwareWidgets()->at( col ));
+ if (!item)
+ return -1;
+ KexiFormDataItemInterfaceToIntMap::ConstIterator it(m_fieldNumbersForDataItems.find( item ));
+ return it!=m_fieldNumbersForDataItems.constEnd() ? (int)it.data() : -1;
+ }
+
+ /*! @internal Used by KexiFormView in view switching. */
+ void beforeSwitchView();
+
+ /*! \return last row visible on the screen (counting from 0).
+ The returned value is guaranteed to be smaller or equal to currentRow() or -1
+ if there are no rows.
+ Implemented for KexiDataAwareObjectInterface. */
+//! @todo unimplemented for now, this will be used for continuous forms
+ virtual int lastVisibleRow() const;
+
+ /*! \return vertical scrollbar. Implemented for KexiDataAwareObjectInterface. */
+ virtual QScrollBar* verticalScrollBar() const { return KexiScrollView::verticalScrollBar(); }
+
+ public slots:
+ /*! Reimplemented to update resize policy. */
+ virtual void show();
+
+ //virtual void setFocus();
+
+ //! Implementation for KexiDataAwareObjectInterface
+ //! \return arbitraty value of 10.
+ virtual int rowsPerPage() const;
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void ensureCellVisible(int row, int col/*=-1*/);
+
+ virtual void moveToRecordRequested(uint r);
+ virtual void moveToLastRecordRequested();
+ virtual void moveToPreviousRecordRequested();
+ virtual void moveToNextRecordRequested();
+ virtual void moveToFirstRecordRequested();
+ virtual void addNewRecordRequested() { KexiDataAwareObjectInterface::addNewRecordRequested(); }
+
+ /*! Cancels changes made to the currently active editor.
+ Reverts the editor's value to old one.
+ \return true on success or false on failure (e.g. when editor does not exist) */
+ virtual bool cancelEditor();
+
+ public slots:
+ /*! Reimplemented to also clear command history right after final resize. */
+ virtual void refreshContentsSize();
+
+ /*! Handles verticalScrollBar()'s valueChanged(int) signal.
+ Called when vscrollbar's value has been changed. */
+//! @todo unused for now, will be used for continuous forms
+ virtual void vScrollBarValueChanged(int v) { KexiDataAwareObjectInterface::vScrollBarValueChanged(v); }
+
+ /*! Handles sliderReleased() signal of the verticalScrollBar(). Used to hide the "row number" tooltip. */
+//! @todo unused for now, will be used for continuous forms
+ virtual void vScrollBarSliderReleased() { KexiDataAwareObjectInterface::vScrollBarSliderReleased(); }
+
+ /*! Handles timeout() signal of the m_scrollBarTipTimer. If the tooltip is visible,
+ m_scrollBarTipTimerCnt is set to 0 and m_scrollBarTipTimerCnt is restarted;
+ else the m_scrollBarTipTimerCnt is just set to 0.*/
+//! @todo unused for now, will be used for continuous forms
+ virtual void scrollBarTipTimeout() { KexiDataAwareObjectInterface::scrollBarTipTimeout(); }
+
+ signals:
+ virtual void itemChanged(KexiTableItem *, int row, int col);
+ virtual void itemChanged(KexiTableItem *, int row, int col, QVariant oldValue);
+ virtual void itemDeleteRequest(KexiTableItem *, int row, int col);
+ virtual void currentItemDeleteRequest();
+ virtual void newItemAppendedForAfterDeletingInSpreadSheetMode(); //!< does nothing
+ virtual void dataRefreshed();
+ virtual void dataSet( KexiTableViewData *data );
+ virtual void itemSelected(KexiTableItem *);
+ virtual void cellSelected(int col, int row);
+ virtual void sortedColumnChanged(int col);
+ virtual void rowEditStarted(int row);
+ virtual void rowEditTerminated(int row);
+ virtual void reloadActions();
+
+ protected slots:
+ void slotResizingStarted();
+
+ //! Handles KexiTableViewData::rowRepaintRequested() signal
+ virtual void slotRowRepaintRequested(KexiTableItem& item);
+
+ //! Handles KexiTableViewData::aboutToDeleteRow() signal. Prepares info for slotRowDeleted().
+ virtual void slotAboutToDeleteRow(KexiTableItem& item, KexiDB::ResultInfo* result, bool repaint)
+ { KexiDataAwareObjectInterface::slotAboutToDeleteRow(item, result, repaint); }
+
+ //! Handles KexiTableViewData::rowDeleted() signal to repaint when needed.
+ virtual void slotRowDeleted() { KexiDataAwareObjectInterface::slotRowDeleted(); }
+
+ //! Handles KexiTableViewData::rowInserted() signal to repaint when needed.
+ virtual void slotRowInserted(KexiTableItem *item, bool repaint);
+
+ //! Like above, not db-aware version
+ virtual void slotRowInserted(KexiTableItem *item, uint row, bool repaint);
+
+ virtual void slotRowsDeleted( const QValueList<int> & );
+
+ virtual void slotDataDestroying() { KexiDataAwareObjectInterface::slotDataDestroying(); }
+
+ /*! Reloads data for this widget.
+ Handles KexiTableViewData::reloadRequested() signal. */
+ virtual void reloadData() { KexiDataAwareObjectInterface::reloadData(); }
+
+ //! Copy current selection to a clipboard (e.g. cell)
+ virtual void copySelection();
+
+ //! Cut current selection to a clipboard (e.g. cell)
+ virtual void cutSelection();
+
+ //! Paste current clipboard contents (e.g. to a cell)
+ virtual void paste();
+
+ protected:
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void clearColumnsInternal(bool repaint);
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void addHeaderColumn(const QString& caption, const QString& description,
+ const QIconSet& icon, int width);
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual int currentLocalSortingOrder() const;
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual int currentLocalSortColumn() const;
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void setLocalSortingOrder(int col, int order);
+
+ //! Implementation for KexiDataAwareObjectInterface
+ void sortColumnInternal(int col, int order = 0);
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void updateGUIAfterSorting();
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void createEditor(int row, int col, const QString& addText = QString::null,
+ bool removeOld = false);
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual KexiDataItemInterface *editor( int col, bool ignoreMissingEditor = false );
+
+ //! Implementation for KexiDataAwareObjectInterface
+ virtual void editorShowFocus( int row, int col );
+
+ /*! Implementation for KexiDataAwareObjectInterface
+ Redraws specified cell. */
+ virtual void updateCell(int row, int col);
+
+ /*! Redraws the current cell. Implemented after KexiDataAwareObjectInterface. */
+ virtual void updateCurrentCell();
+
+ /*! Implementation for KexiDataAwareObjectInterface
+ Redraws all cells of specified row. */
+ virtual void updateRow(int row);
+
+ /*! Implementation for KexiDataAwareObjectInterface
+ Updates contents of the widget. Just call update() here on your widget. */
+ virtual void updateWidgetContents();
+
+ /*! Implementation for KexiDataAwareObjectInterface
+ Implementation for KexiDataAwareObjectInterface
+ Updates widget's contents size e.g. using QScrollView::resizeContents(). */
+ virtual void updateWidgetContentsSize();
+
+ /*! Implementation for KexiDataAwareObjectInterface
+ Updates scrollbars of the widget.
+ QScrollView::updateScrollbars() will be usually called here. */
+ virtual void updateWidgetScrollBars();
+
+ KexiDBForm* dbFormWidget() const;
+
+ //! Reimplemented from KexiFormDataProvider. Reaction for change of \a item.
+ virtual void valueChanged(KexiDataItemInterface* item);
+
+ /*! Reimplemented from KexiFormDataProvider.
+ \return information whether we're currently at new row or now.
+ This can be used e.g. by data-aware widgets to determine if "(autonumber)"
+ label should be displayed. */
+ virtual bool cursorAtNewRow() const;
+
+ //! Implementation for KexiDataAwareObjectInterface
+ //! Called by KexiDataAwareObjectInterface::setCursorPosition()
+ //! if cursor's position is really changed.
+ inline virtual void selectCellInternal();
+
+ /*! Reimplementation: used to refresh "editing indicator" visibility. */
+ virtual void initDataContents();
+
+ /*! @internal
+ Updates row appearance after canceling row edit.
+ Reimplemented from KexiDataAwareObjectInterface: just undoes changes for every data item.
+ Used by cancelRowEdit(). */
+ virtual void updateAfterCancelRowEdit();
+
+ /*! @internal
+ Updates row appearance after accepting row edit.
+ Reimplemented from KexiDataAwareObjectInterface: just clears 'edit' indicator.
+ Used by cancelRowEdit(). */
+ virtual void updateAfterAcceptRowEdit();
+
+ /*! @internal
+ Used to invoke copy/paste/cut etc. actions at the focused widget's level. */
+ void handleDataWidgetAction(const QString& actionName);
+
+ /*! @internal */
+ bool shouldDisplayDefaultValueForItem(KexiFormDataItemInterface* itemIface) const;
+
+ //virtual bool focusNextPrevChild( bool next );
+
+ KFormDesigner::Form *m_form;
+ int m_currentLocalSortColumn, m_localSortingOrder;
+ //! Used in selectCellInternal() to avoid fetching the same record twice
+ KexiTableItem *m_previousItem;
+};
+
+#endif