summaryrefslogtreecommitdiffstats
path: root/kexi/plugins/forms/widgets/kexidbimagebox.h
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/plugins/forms/widgets/kexidbimagebox.h')
-rw-r--r--kexi/plugins/forms/widgets/kexidbimagebox.h275
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