diff options
Diffstat (limited to 'kexi/plugins/forms/widgets/kexidbimagebox.h')
-rw-r--r-- | kexi/plugins/forms/widgets/kexidbimagebox.h | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/kexi/plugins/forms/widgets/kexidbimagebox.h b/kexi/plugins/forms/widgets/kexidbimagebox.h new file mode 100644 index 00000000..3ad2f710 --- /dev/null +++ b/kexi/plugins/forms/widgets/kexidbimagebox.h @@ -0,0 +1,275 @@ +/* This file is part of the KDE project + Copyright (C) 2005 Cedric Pasteur <[email protected]> + Copyright (C) 2004-2007 Jaroslaw Staniek <[email protected]> + + This program 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 program 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 program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KexiDBImageBox_H +#define KexiDBImageBox_H + +#include "kexiformdataiteminterface.h" +#include "kexiframe.h" +#include "kexidbutils.h" +#include <kexiblobbuffer.h> + +class KexiDropDownButton; +class KexiImageContextMenu; + +//! @short A data-aware, editable image box. +/*! Can also act as a normal static image box. +*/ +class KEXIFORMUTILS_EXPORT KexiDBImageBox : + public KexiFrame, + public KexiFormDataItemInterface, + public KexiSubwidgetInterface +{ + Q_OBJECT + Q_PROPERTY( QString dataSource READ dataSource WRITE setDataSource ) + Q_PROPERTY( QCString dataSourceMimeType READ dataSourceMimeType WRITE setDataSourceMimeType ) + Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly ) +// Q_PROPERTY( QPixmap pixmap READ pixmap WRITE setPixmap ) +// Q_PROPERTY( QByteArray pixmapData READ pixmapData WRITE setPixmapData ) + Q_PROPERTY( uint pixmapId READ pixmapId WRITE setPixmapId DESIGNABLE true STORED false ) + Q_PROPERTY( uint storedPixmapId READ storedPixmapId WRITE setStoredPixmapId DESIGNABLE false STORED true ) + Q_PROPERTY( bool scaledContents READ hasScaledContents WRITE setScaledContents ) + Q_PROPERTY( bool keepAspectRatio READ keepAspectRatio WRITE setKeepAspectRatio ) + Q_PROPERTY( Alignment alignment READ alignment WRITE setAlignment ) +// Q_PROPERTY( QString originalFileName READ originalFileName WRITE setOriginalFileName DESIGNABLE false ) +// Q_OVERRIDE( FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy ) + Q_PROPERTY( bool dropDownButtonVisible READ dropDownButtonVisible WRITE setDropDownButtonVisible ) + Q_OVERRIDE( int lineWidth READ lineWidth WRITE setLineWidth ) + Q_OVERRIDE( FocusPolicy focusPolicy READ focusPolicyInternal WRITE setFocusPolicy ) + + public: + KexiDBImageBox( bool designMode, QWidget *parent, const char *name = 0 ); + virtual ~KexiDBImageBox(); + + inline QString dataSource() const { return KexiFormDataItemInterface::dataSource(); } + inline QCString dataSourceMimeType() const { return KexiFormDataItemInterface::dataSourceMimeType(); } + + virtual QVariant value(); // { return m_value.data(); } + +// QByteArray pixmapData() const { return m_value.data(); } + + QPixmap pixmap() const; + + uint pixmapId() const; + + uint storedPixmapId() const; +// + virtual void setInvalidState( const QString& displayText ); + + virtual bool valueIsNull(); + + virtual bool valueIsEmpty(); + + virtual QWidget* widget(); + + //! always true + virtual bool cursorAtStart(); + + //! always true + virtual bool cursorAtEnd(); + +// //! used to catch setIndent(), etc. +// virtual bool setProperty ( const char * name, const QVariant & value ); + + virtual bool isReadOnly() const; + + bool hasScaledContents() const; + +// bool designMode() const { return m_designMode; } + + int alignment() const { return m_alignment; } + + bool keepAspectRatio() const { return m_keepAspectRatio; } + + virtual QSize sizeHint() const; + + KexiImageContextMenu *contextMenu() const; + + /*! \return original file name of image loaded from a file. + This can be later reused for displaying the image within a collection (to be implemented) + or on saving the image data back to file. */ +//todo QString originalFileName() const { return m_value.originalFileName(); } + + //! Reimplemented to override behaviour of "lineWidth" property. + virtual void setLineWidth( int width ); + + //! Reimplemented to override behaviour of "paletteBackgroundColor" + //! and "paletteForegroundColor" properties. + virtual void setPalette( const QPalette &pal ); + + //! Reimplemented to override behaviour of "paletteBackgroundColor" property. + virtual void setPaletteBackgroundColor( const QColor & color ); + + //! \return true id drop down button should be visible (the default). + bool dropDownButtonVisible() const; + + //! For overridden property + int lineWidth() const { return KexiFrame::lineWidth(); } + + /*! Overriden to change the policy behaviour a bit: + NoFocus is returned regardless the real focus flag + if the data source is empty (see dataSource()). */ + FocusPolicy focusPolicy() const; + + //! \return the internal focus policy value, i.e. the one unrelated to data source presence. + FocusPolicy focusPolicyInternal() const; + + /*! Sets the internal focus policy value. + "Internal" means that if there is no data source set, real policy becomes NoFocus. */ + virtual void setFocusPolicy( FocusPolicy policy ); + + public slots: + void setPixmapId(uint id); + + void setStoredPixmapId(uint id); + + //! Sets the datasource to \a ds + virtual void setDataSource( const QString &ds ); + + inline void setDataSourceMimeType(const QCString &ds) { KexiFormDataItemInterface::setDataSourceMimeType(ds); } + + virtual void setReadOnly(bool set); + + //! Sets \a pixmapData data for this widget. If the widget has data source set, + //! the pixmap will be also placed inside of the buffer and saved later. +//todo void setPixmapData(const QByteArray& pixmapData) { m_value.setData(pixmapData); } + + /*! Sets original file name of image loaded from a file. + @see originalFileName() */ +//todo void setOriginalFileName(const QString& name) { m_value.setOriginalFileName(name); } + + void setScaledContents(bool set); + + void setAlignment(int alignment); + + void setKeepAspectRatio(bool set); + +// void updateActionsAvailability(); + + //! @internal +// void slotToggled( bool on ); + + //! \return sets dropDownButtonVisible property. @see dropDownButtonVisible() + void setDropDownButtonVisible( bool set ); + + //! Forces execution of "insert from file" action + void insertFromFile(); + + signals: + //! Used for db-aware mode. Emitted when value has been changed. + //! Actual value can be obtained using value(). +// virtual void pixmapChanged(); +// virtual void valueChanged(const QByteArray& data); + + void idChanged(long id); + + protected slots: + void slotUpdateActionsAvailabilityRequested(bool& valueIsNull, bool& valueIsReadOnly); + + void handleInsertFromFileAction(const KURL& url); + void handleAboutToSaveAsAction(QString& origFilename, QString& fileExtension, bool& dataIsEmpty); + void handleSaveAsAction(const QString& fileName); + void handleCutAction(); + void handleCopyAction(); + void handlePasteAction(); + virtual void clear(); + void handleShowPropertiesAction(); + + protected: + //! \return data depending on the current mode (db-aware or static) + QByteArray data() const; + + virtual void contextMenuEvent ( QContextMenuEvent * e ); +// virtual void mousePressEvent( QMouseEvent *e ); + virtual void setColumnInfo(KexiDB::QueryColumnInfo* cinfo); + virtual void paintEvent( QPaintEvent* ); + virtual void resizeEvent( QResizeEvent* e ); + virtual bool eventFilter( QObject * watched, QEvent * e ); + + //! Sets value \a value for a widget. + virtual void setValueInternal( const QVariant& add, bool removeOld ) { + setValueInternal( add, removeOld, true /*loadPixmap*/ ); + } + + //! @internal, added \a loadPixmap option used by paste(). + void setValueInternal( const QVariant& add, bool removeOld, bool loadPixmap ); + + //! Updates i18n'd action strings after datasource change + void updateActionStrings(); + void updatePixmap(); + + //! @internal + void setData(const KexiBLOBBuffer::Handle& handle); + + bool popupMenuAvailable(); + + /*! Called by top-level form on key press event. + Used for Key_Escape to if the popup is visible, + so the key press won't be consumed to perform "cancel editing". */ + virtual bool keyPressed(QKeyEvent *ke); + + //! \return real line width, i.e. for Boxed sunken or Boxed raised + //! frames returns doubled width value. + int realLineWidth() const; + + //! Implemented for KexiSubwidgetInterface + virtual bool subwidgetStretchRequired(KexiDBAutoField* autoField) const; + +// virtual void drawContents ( QPainter *p ); + +// virtual void fontChange( const QFont& font ); +// virtual void styleChange( QStyle& style ); +// virtual void enabledChange( bool enabled ); + +// virtual void paletteChange( const QPalette& pal ); +// virtual void frameChanged(); +// virtual void showEvent( QShowEvent* e ); + +// void updatePixmapLater(); +// class ImageLabel; +// ImageLabel *m_pixmapLabel; + QPixmap m_pixmap; + QByteArray m_value; //!< for db-aware mode + QString m_valueMimeType; //!< for db-aware mode +// PixmapData m_value; + KexiBLOBBuffer::Handle m_data; +// QString m_originalFileName; + KexiDropDownButton *m_chooser; + KexiImageContextMenu *m_popupMenu; +//moved KActionCollection m_actionCollection; +//moved KAction *m_insertFromFileAction, *m_saveAsAction, *m_cutAction, *m_copyAction, *m_pasteAction, +// *m_deleteAction, *m_propertiesAction; +// QTimer m_clickTimer; + int m_alignment; + FocusPolicy m_focusPolicyInternal; //!< Used for focusPolicyInternal() + bool m_designMode : 1; + bool m_readOnly : 1; + bool m_scaledContents : 1; + bool m_keepAspectRatio : 1; + bool m_insideSetData : 1; + bool m_setFocusOnButtonAfterClosingPopup : 1; + bool m_lineWidthChanged : 1; + bool m_paletteBackgroundColorChanged : 1; + bool m_paintEventEnabled : 1; //!< used to disable paintEvent() + bool m_dropDownButtonVisible : 1; + bool m_insideSetPalette : 1; +}; + +#endif |