summaryrefslogtreecommitdiffstats
path: root/kexi/kexiutils/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/kexiutils/utils.h')
-rw-r--r--kexi/kexiutils/utils.h267
1 files changed, 267 insertions, 0 deletions
diff --git a/kexi/kexiutils/utils.h b/kexi/kexiutils/utils.h
new file mode 100644
index 00000000..03b775c7
--- /dev/null
+++ b/kexi/kexiutils/utils.h
@@ -0,0 +1,267 @@
+/* This file is part of the KDE project
+ Copyright (C) 2003-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 KEXIUTILS_UTILS_H
+#define KEXIUTILS_UTILS_H
+
+#include "kexiutils_export.h"
+
+#include <qguardedptr.h>
+#include <qobjectlist.h>
+#include <kmimetype.h>
+class QColor;
+
+//! @short General Utils
+namespace KexiUtils
+{
+ //! \return true if \a o has parent \a par.
+ inline bool hasParent(QObject* par, QObject* o)
+ {
+ if (!o || !par)
+ return false;
+ while (o && o!=par)
+ o = o->parent();
+ return o==par;
+ }
+
+ //! \return parent object of \a o that inherits \a className or NULL if no such parent
+ template<class type>
+ inline type* findParent(QObject* o, const char* className)
+ {
+ if (!o || !className || className[0]=='\0')
+ return 0;
+ while ( ((o=o->parent())) && !o->inherits(className) )
+ ;
+ return static_cast<type*>(o);
+ }
+
+ //! Const version of findParent()
+ template<class type>
+ inline const type* findParentConst(const QObject* const o, const char* className)
+ {
+ const QObject * obj = o;
+ if (!obj || !className || className[0]=='\0')
+ return 0;
+ while ( ((obj=obj->parent())) && !obj->inherits(className) )
+ ;
+ return static_cast<const type*>(obj);
+ }
+
+ /*! \return first found child of \a o, inheriting \a className.
+ If objName is 0 (the default), all object names match.
+ Returned pointer type is casted. */
+ template<class type>
+ type* findFirstChild(QObject *o, const char* className, const char* objName = 0)
+ {
+ if (!o || !className || className[0]=='\0')
+ return 0;
+ QObjectList *l = o->queryList( className, objName );
+ QObject *result = l->first();
+ delete l;
+ return static_cast<type*>(result);
+ }
+
+ //! QDateTime - a hack needed because QVariant(QTime) has broken isNull()
+ inline QDateTime stringToHackedQTime(const QString& s)
+ {
+ if (s.isEmpty())
+ return QDateTime();
+ // kdDebug() << QDateTime( QDate(0,1,2), QTime::fromString( s, Qt::ISODate ) ).toString(Qt::ISODate) << endl;;
+ return QDateTime( QDate(0,1,2), QTime::fromString( s, Qt::ISODate ) );
+ }
+
+ /*! Sets "wait" cursor with 1 second delay (or 0 seconds if noDelay is true).
+ Does nothing if the application has no GUI enabled. (see KApplication::guiEnabled()) */
+ KEXIUTILS_EXPORT void setWaitCursor(bool noDelay = false);
+
+ /*! Remove "wait" cursor previously set with \a setWaitCursor(),
+ even if it's not yet visible.
+ Does nothing if the application has no GUI enabled. (see KApplication::guiEnabled()) */
+ KEXIUTILS_EXPORT void removeWaitCursor();
+
+ /*! Helper class. Allocate it in your code block as follows:
+ <code>
+ KexiUtils::WaitCursor wait;
+ </code>
+ .. and wait cursor will be visible (with one second delay) until you're in this block, without
+ a need to call removeWaitCursor() before exiting the block.
+ Does nothing if the application has no GUI enabled. (see KApplication::guiEnabled()) */
+ class KEXIUTILS_EXPORT WaitCursor
+ {
+ public:
+ WaitCursor(bool noDelay = false);
+ ~WaitCursor();
+ };
+
+ /*! Helper class. Allocate it in your code block as follows:
+ <code>
+ KexiUtils::WaitCursorRemover remover;
+ </code>
+ .. and the wait cursor will be hidden unless you leave this block, without
+ a need to call setWaitCursor() before exiting the block. After leaving the codee block,
+ the cursor will be visible again, if it was visible before creating the WaitCursorRemover object.
+ Does nothing if the application has no GUI enabled. (see KApplication::guiEnabled()) */
+ class KEXIUTILS_EXPORT WaitCursorRemover
+ {
+ public:
+ WaitCursorRemover();
+ ~WaitCursorRemover();
+ private:
+ bool m_reactivateCursor : 1;
+ };
+
+ /*! \return filter string in QFileDialog format for a mime type pointed by \a mime
+ If \a kdeFormat is true, QFileDialog-compatible filter string is generated,
+ eg. "Image files (*.png *.xpm *.jpg)", otherwise KFileDialog -compatible
+ filter string is generated, eg. "*.png *.xpm *.jpg|Image files (*.png *.xpm *.jpg)".
+ "\\n" is appended if \a kdeFormat is true, otherwise ";;" is appended. */
+ KEXIUTILS_EXPORT QString fileDialogFilterString(const KMimeType::Ptr& mime, bool kdeFormat = true);
+
+ /*! @overload QString fileDialogFilterString(const KMimeType::Ptr& mime, bool kdeFormat = true) */
+ KEXIUTILS_EXPORT QString fileDialogFilterString(const QString& mimeString, bool kdeFormat = true);
+
+ /*! Like QString fileDialogFilterString(const KMimeType::Ptr& mime, bool kdeFormat = true)
+ but returns a list of filter strings. */
+ KEXIUTILS_EXPORT QString fileDialogFilterStrings(const QStringList& mimeStrings, bool kdeFormat);
+
+ /*! \return a color being a result of blending \a c1 with \a c2 with \a factor1
+ and \a factor1 factors: (c1*factor1+c2*factor2)/(factor1+factor2). */
+ KEXIUTILS_EXPORT QColor blendedColors(const QColor& c1, const QColor& c2, int factor1 = 1, int factor2 = 1);
+
+ /*! \return a contrast color for a color \a c:
+ If \a c is light color, darker color created using c.dark(200) is returned;
+ otherwise lighter color created using c.light(200) is returned. */
+ KEXIUTILS_EXPORT QColor contrastColor(const QColor& c);
+
+ /*! \return a lighter color for a color \a c and a factor \a factor.
+ For colors like Qt::red or Qt::green where hue and saturation are near to 255,
+ hue is decreased so the result will be more bleached.
+ For black color the result is dark gray rather than black. */
+ KEXIUTILS_EXPORT QColor bleachedColor(const QColor& c, int factor);
+
+ /*! \return icon set computed as a result of colorizing \a icon pixmap with "buttonText"
+ color of \a palette palette. This function is useful for displaying monochromed icons
+ on the list view or table view header, to avoid bloat, but still have the color compatible
+ with accessibility settings. */
+ KEXIUTILS_EXPORT QIconSet colorizeIconToTextColor(const QPixmap& icon, const QPalette& palette);
+
+ /*! \return empty (fully transparent) pixmap that can be used as a place for icon of size \a iconGroup */
+ KEXIUTILS_EXPORT QPixmap emptyIcon(KIcon::Group iconGroup);
+
+ /*! Serializes \a map to \a array.
+ KexiUtils::deserializeMap() can be used to deserialize this array back to map. */
+ KEXIUTILS_EXPORT void serializeMap(const QMap<QString,QString>& map, const QByteArray& array);
+ KEXIUTILS_EXPORT void serializeMap(const QMap<QString,QString>& map, QString& string);
+
+ /*! \return a map deserialized from a byte array \a array.
+ \a array need to contain data previously serialized using KexiUtils::serializeMap(). */
+ KEXIUTILS_EXPORT QMap<QString,QString> deserializeMap(const QByteArray& array);
+
+ /*! \return a map deserialized from \a string.
+ \a string need to contain data previously serialized using KexiUtils::serializeMap(). */
+ KEXIUTILS_EXPORT QMap<QString,QString> deserializeMap(const QString& string);
+
+ /*! \return a valid filename converted from \a string by:
+ - replacing \\, /, :, *, ?, ", <, >, |, \n \\t characters with a space
+ - simplifing whitespace by removing redundant space characters using QString::simplifyWhiteSpace()
+ Do not pass full paths here, but only filename strings. */
+ KEXIUTILS_EXPORT QString stringToFileName(const QString& string);
+
+ /*! Performs a simple \a string encryption using rot47-like algorithm.
+ Each character's unicode value is increased by 47 + i (where i is index of the character).
+ The resulting string still contains redable characters.
+ Do not use this for data that can be accessed by attackers! */
+ KEXIUTILS_EXPORT void simpleCrypt(QString& string);
+
+ /*! Performs a simple \a string decryption using rot47-like algorithm,
+ using opposite operations to KexiUtils::simpleCrypt(). */
+ KEXIUTILS_EXPORT void simpleDecrypt(QString& string);
+
+#ifdef KEXI_DEBUG_GUI
+ //! Creates debug window for convenient debugging output
+ KEXIUTILS_EXPORT QWidget *createDebugWindow(QWidget *parent);
+
+ //! Adds debug line for for KexiDB database
+ KEXIUTILS_EXPORT void addKexiDBDebug(const QString& text);
+
+ //! Adds debug line for for Table Designer (Alter Table actions)
+ KEXIUTILS_EXPORT void addAlterTableActionDebug(const QString& text, int nestingLevel = 0);
+
+ //! Connects push button action to \a receiver and its \a slot. This allows to execute debug-related actions
+ //! using buttons displayed in the debug window.
+ KEXIUTILS_EXPORT void connectPushButtonActionForDebugWindow(const char* actionName,
+ const QObject *receiver, const char* slot);
+#endif
+
+ //! Draws pixmap on painter \a p using predefined parameters.
+ //! Used in KexiDBImageBox and KexiBlobTableEdit.
+ KEXIUTILS_EXPORT void drawPixmap( QPainter& p, int lineWidth, const QRect& rect,
+ const QPixmap& pixmap, int alignment, bool scaledContents, bool keepAspectRatio);
+
+ //! @internal
+ KEXIUTILS_EXPORT QString ptrToStringInternal(void* ptr, uint size);
+ //! @internal
+ KEXIUTILS_EXPORT void* stringToPtrInternal(const QString& str, uint size);
+
+ //! \return a pointer \a ptr safely serialized to string
+ template<class type>
+ QString ptrToString(type *ptr)
+ {
+ return ptrToStringInternal(ptr, sizeof(type*));
+ }
+
+ //! \return a pointer of type \a type safely deserialized from \a str
+ template<class type>
+ type* stringToPtr(const QString& str)
+ {
+ return static_cast<type*>( stringToPtrInternal(str, sizeof(type*)) );
+ }
+
+ //! Sets focus for widget \a widget with reason \a reason.
+ KEXIUTILS_EXPORT void setFocusWithReason(QWidget* widget, QFocusEvent::Reason reason);
+
+ //! Unsets focus for widget \a widget with reason \a reason.
+ KEXIUTILS_EXPORT void unsetFocusWithReason(QWidget* widget, QFocusEvent::Reason reason);
+
+ //! Used by copyFile()
+ enum CopyFileResult {
+ CopySuccess = 0,
+ CopyReadError = 1,
+ CopyWriteError = 2
+ };
+
+ /*!
+ Copies @p src file to @p dest file.
+ @return CopySuccess on success, CopyReadError on source file error,
+ CopyWriteError on destination file error.
+ @todo remove: QFile in Qt4 provides this.
+ */
+ KEXIUTILS_EXPORT CopyFileResult copyFile(const QString& src, const QString& dest);
+}
+
+
+//! sometimes we leave a space in the form of empty QFrame and want to insert here
+//! a widget that must be instantiated by hand.
+//! This macro inserts a widget \a what into a frame \a where.
+#define GLUE_WIDGET(what, where) \
+ { QVBoxLayout *lyr = new QVBoxLayout(where); \
+ lyr->addWidget(what); }
+
+
+#endif //KEXIUTILS_UTILS_H