summaryrefslogtreecommitdiffstats
path: root/src/ciwidgetmgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ciwidgetmgr.h')
-rw-r--r--src/ciwidgetmgr.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/ciwidgetmgr.h b/src/ciwidgetmgr.h
new file mode 100644
index 0000000..b79fc06
--- /dev/null
+++ b/src/ciwidgetmgr.h
@@ -0,0 +1,103 @@
+/***************************************************************************
+ * Copyright (C) 2005 by David Saxton *
+ * david@bluehaze.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#ifndef CIWIDGETMGR_H
+#define CIWIDGETMGR_H
+
+#include <qmap.h>
+#include <qstring.h>
+
+class Button;
+class CNItem;
+class Slider;
+class QCanvas;
+class Widget;
+
+typedef QMap<QString, Widget*> WidgetMap;
+
+/**
+This class handles the widgets (those things associated with CNItems that use QWidgets.
+This class is pretty much to maintain a tidy interface: the functions could just as well be
+all shoved in CNItem, but that gets messy.
+@author David Saxton
+*/
+class CIWidgetMgr
+{
+public:
+ CIWidgetMgr( QCanvas *canvas, CNItem *item );
+ virtual ~CIWidgetMgr();
+
+ /**
+ * Set the top-left position from which mouse events are interpreted and the
+ * widgets are drawn from.
+ */
+ void setWidgetsPos( const QPoint &pos );
+ /**
+ * Returns a pointer to the widget with the given id, or NULL if no such
+ * widgets are found.
+ */
+ Widget *widgetWithID( const QString &id ) const;
+ Button *button( const QString &id ) const;
+ Slider *slider( const QString &id ) const;
+ void setButtonState( const QString &id, int state );
+ /**
+ * Adds a slider with the given id and values to the position
+ */
+ Slider* addSlider( const QString &id, int minValue, int maxValue, int pageStep, int value, Qt::Orientation orientation, const QRect & pos );
+ /**
+ * Essentially the same as addDisplayText, but displays a button with
+ * text on it. The virtual functions buttonPressed( const QString &id ) and
+ * buttonReleased( const QString &id ) are called as appropriate with button id
+ */
+ Button* addButton( const QString &id, const QRect & pos, const QString &display, bool toggle = false );
+ /**
+ * Adds a button with a QPixmap pixmap on it instead of text
+ * @see void addButton( const QString &id, QRect pos, const QString &display )
+ */
+ Button* addButton( const QString &id, const QRect & pos, QPixmap pixmap, bool toggle = false );
+ /**
+ * Removes the widget with the given id.
+ */
+ void removeWidget( const QString & id );
+ /**
+ * Sets whether or not to draw the widgets (drawing widgets mucks up SVG
+ * export). This function just calls either hide() or show() in each widget.
+ */
+ void setDrawWidgets( bool draw );
+
+ bool mousePressEvent( const EventInfo &info );
+ bool mouseReleaseEvent( const EventInfo &info );
+ bool mouseDoubleClickEvent ( const EventInfo &info );
+ bool mouseMoveEvent( const EventInfo &info );
+ bool wheelEvent( const EventInfo &info );
+ void enterEvent();
+ void leaveEvent();
+
+ virtual void buttonStateChanged( const QString &/*id*/, bool /*on*/ ) {};
+ virtual void sliderValueChanged( const QString &/*id*/, int /*value*/ ) {};
+
+ int mgrX() const { return m_pos.x(); }
+ int mgrY() const { return m_pos.y(); }
+ /**
+ * Draw the widgets using the given painter. This function isn't actually
+ * used to draw the widgets on the canvas, as they are QCanvasItems
+ * themselves, but allows other classes (e.g. ItemLibrary) to draw them
+ * using a special painter.
+ */
+ void drawWidgets( QPainter &p );
+
+protected:
+ WidgetMap m_widgetMap;
+ QPoint m_pos;
+ QCanvas *p_canvas;
+ CNItem *p_cnItem;
+};
+
+#endif