summaryrefslogtreecommitdiffstats
path: root/src/ui/widget/unit-tracker.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/widget/unit-tracker.h')
-rw-r--r--src/ui/widget/unit-tracker.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/ui/widget/unit-tracker.h b/src/ui/widget/unit-tracker.h
new file mode 100644
index 000000000..19559ae1c
--- /dev/null
+++ b/src/ui/widget/unit-tracker.h
@@ -0,0 +1,74 @@
+/*
+ * Inkscape::UI::Widget::UnitTracker
+ * Simple mediator to synchronize changes to unit menus
+ *
+ * Authors:
+ * Jon A. Cruz <jon@joncruz.org>
+ * Matthew Petroff <matthew@mpetroff.net>
+ *
+ * Copyright (C) 2007 Jon A. Cruz
+ * Copyright (C) 2013 Matthew Petroff
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifndef INKSCAPE_UI_WIDGET_UNIT_TRACKER_H
+#define INKSCAPE_UI_WIDGET_UNIT_TRACKER_H
+
+#include <map>
+#include <gtk/gtk.h>
+
+#include "util/units.h"
+
+using Inkscape::Util::Unit;
+using Inkscape::Util::UnitType;
+
+namespace Inkscape {
+namespace UI {
+namespace Widget {
+
+class UnitTracker {
+public:
+ UnitTracker(UnitType unit_type);
+ virtual ~UnitTracker();
+
+ bool isUpdating() const;
+
+ void setActiveUnit(Inkscape::Util::Unit const *unit);
+ void setActiveUnitByAbbr(gchar const *abbr);
+ Inkscape::Util::Unit getActiveUnit() const;
+
+ void addUnit(Inkscape::Util::Unit const &u);
+ void addAdjustment(GtkAdjustment *adj);
+ void setFullVal(GtkAdjustment *adj, gdouble val);
+
+ GtkAction *createAction(gchar const *name, gchar const *label, gchar const *tooltip);
+
+protected:
+ UnitType _type;
+
+private:
+ static void _unitChangedCB(GtkAction *action, gpointer data);
+ static void _actionFinalizedCB(gpointer data, GObject *where_the_object_was);
+ static void _adjustmentFinalizedCB(gpointer data, GObject *where_the_object_was);
+ void _setActive(gint index);
+ void _fixupAdjustments(Inkscape::Util::Unit const oldUnit, Inkscape::Util::Unit const newUnit);
+ void _actionFinalized(GObject *where_the_object_was);
+ void _adjustmentFinalized(GObject *where_the_object_was);
+
+ gint _active;
+ bool _isUpdating;
+ Inkscape::Util::Unit _activeUnit;
+ bool _activeUnitInitialized;
+ GtkListStore *_store;
+ GSList *_unitList;
+ GSList *_actionList;
+ GSList *_adjList;
+ std::map <GtkAdjustment *, gdouble> _priorValues;
+};
+
+} // namespace Widget
+} // namespace UI
+} // namespace Inkscape
+
+#endif // INKSCAPE_UI_WIDGET_UNIT_TRACKER_H