Code

Use radiobutton for "always snap" in the document-properties dialog
[inkscape.git] / src / ui / dialog / dialog-manager.cpp
index 23c64f1d5fa01c3f63d8a7f253060807f0892c7c..15ebcef5ac133824f50c35381345a001e88d2de0 100644 (file)
@@ -2,11 +2,12 @@
  * \brief Object for managing a set of dialogs, including their signals and
  *        construction/caching/destruction of them.
  *
- * Author:
+ * Authors:
  *   Bryce W. Harrington <bryce@bryceharrington.org>
  *   Jon Phillips <jon@rejon.org>
+ *   Gustav Broberg <broberg@kth.se>
  *
- * Copyright (C) 2004, 2005 Authors
+ * Copyright (C) 2004--2007 Authors
  *
  * Released under GNU GPL.  Read the file 'COPYING' for more information.
  */
@@ -26,6 +27,7 @@
 #include "ui/dialog/filter-effects-dialog.h"
 #include "ui/dialog/find.h"
 #include "ui/dialog/inkscape-preferences.h"
+#include "ui/dialog/input.h"
 #include "ui/dialog/layer-editor.h"
 #include "ui/dialog/livepatheffect-editor.h"
 #include "ui/dialog/memory.h"
 #include "ui/dialog/transformation.h"
 #include "ui/dialog/undo-history.h"
 #include "ui/dialog/xml-editor.h"
+#include "ui/dialog/panel-dialog.h"
 
+#include "dialogs/layers-panel.h"
 #include "dialogs/tiledialog.h"
+#include "dialogs/iconpreview.h"
+
+#include "ui/dialog/floating-behavior.h"
+#include "ui/dialog/dock-behavior.h"
 
 namespace Inkscape {
 namespace UI {
@@ -45,8 +53,10 @@ namespace Dialog {
 
 namespace {
 
-template <typename T>
-Dialog *create() { return T::create(); }
+using namespace Behavior;
+
+template <typename T, typename B>
+inline Dialog *create() { return PanelDialog<B>::template create<T>(); }
 
 }
 
@@ -71,26 +81,69 @@ Dialog *create() { return T::create(); }
  *
  */
 DialogManager::DialogManager() {
-    registerFactory("AlignAndDistribute",  &create<AlignAndDistribute>);
-    registerFactory("DocumentMetadata",    &create<DocumentMetadata>);
-    registerFactory("DocumentProperties",  &create<DocumentProperties>);
-    registerFactory("Export",              &create<Export>);
-    registerFactory("ExtensionEditor",     &create<ExtensionEditor>);
-    registerFactory("FillAndStroke",       &create<FillAndStroke>);
-    registerFactory("FilterEffectsDialog", &create<FilterEffectsDialog>);
-    registerFactory("Find",                &create<Find>);
-    registerFactory("InkscapePreferences", &create<InkscapePreferences>);
-    registerFactory("LayerEditor",         &create<LayerEditor>);
-    registerFactory("LivePathEffect",      &create<LivePathEffectEditor>);
-    registerFactory("Memory",              &create<Memory>);
-    registerFactory("Messages",            &create<Messages>);
-    registerFactory("Script",              &create<ScriptDialog>);
-    registerFactory("TextProperties",      &create<TextProperties>);
-    registerFactory("TileDialog",          &create<TileDialog>);
-    registerFactory("Trace",               &create<TraceDialog>);
-    registerFactory("Transformation",      &create<Transformation>);
-    registerFactory("UndoHistory",         &create<UndoHistory>);
-    registerFactory("XmlEditor",           &create<XmlEditor>);
+
+    using namespace Behavior;
+    using namespace Inkscape::UI::Dialogs; // temporary
+
+    int dialogs_type = prefs_get_int_attribute_limited ("options.dialogtype", "value", DOCK, 0, 1);
+
+    if (dialogs_type == FLOATING) {
+
+        registerFactory("AlignAndDistribute",  &create<AlignAndDistribute,   FloatingBehavior>);
+        registerFactory("DocumentMetadata",    &create<DocumentMetadata,     FloatingBehavior>);
+        registerFactory("DocumentProperties",  &create<DocumentProperties,   FloatingBehavior>);
+        registerFactory("Export",              &create<Export,               FloatingBehavior>);
+        registerFactory("ExtensionEditor",     &create<ExtensionEditor,      FloatingBehavior>);
+        registerFactory("FillAndStroke",       &create<FillAndStroke,        FloatingBehavior>);
+        registerFactory("FilterEffectsDialog", &create<FilterEffectsDialog,  FloatingBehavior>);
+        registerFactory("Find",                &create<Find,                 FloatingBehavior>);
+        registerFactory("IconPreviewPanel",    &create<IconPreviewPanel,     FloatingBehavior>);
+        registerFactory("InkscapePreferences", &create<InkscapePreferences,  FloatingBehavior>);
+        registerFactory("LayerEditor",         &create<LayerEditor,          FloatingBehavior>);
+        registerFactory("LayersPanel",         &create<LayersPanel,          FloatingBehavior>);
+        registerFactory("LivePathEffect",      &create<LivePathEffectEditor, FloatingBehavior>);
+        registerFactory("Memory",              &create<Memory,               FloatingBehavior>);
+        registerFactory("Messages",            &create<Messages,             FloatingBehavior>);
+        registerFactory("Script",              &create<ScriptDialog,         FloatingBehavior>);
+        registerFactory("Swatches",            &create<SwatchesPanel,        FloatingBehavior>);
+        registerFactory("TextProperties",      &create<TextProperties,       FloatingBehavior>);
+        registerFactory("TileDialog",          &create<TileDialog,           FloatingBehavior>);
+        registerFactory("Trace",               &create<TraceDialog,          FloatingBehavior>);
+        registerFactory("Transformation",      &create<Transformation,       FloatingBehavior>);
+        registerFactory("UndoHistory",         &create<UndoHistory,          FloatingBehavior>);
+        registerFactory("XmlEditor",           &create<XmlEditor,            FloatingBehavior>);
+
+        registerFactory("InputDevices",        &create<InputDialog,           FloatingBehavior>);
+
+    } else {
+
+        registerFactory("AlignAndDistribute",  &create<AlignAndDistribute,   DockBehavior>);
+        registerFactory("DocumentMetadata",    &create<DocumentMetadata,     DockBehavior>);
+        registerFactory("DocumentProperties",  &create<DocumentProperties,   DockBehavior>);
+        registerFactory("Export",              &create<Export,               DockBehavior>);
+        registerFactory("ExtensionEditor",     &create<ExtensionEditor,      DockBehavior>);
+        registerFactory("FillAndStroke",       &create<FillAndStroke,        DockBehavior>);
+        registerFactory("FilterEffectsDialog", &create<FilterEffectsDialog,  DockBehavior>);
+        registerFactory("Find",                &create<Find,                 DockBehavior>);
+        registerFactory("IconPreviewPanel",    &create<IconPreviewPanel,     DockBehavior>);
+        registerFactory("InkscapePreferences", &create<InkscapePreferences,  DockBehavior>);
+        registerFactory("LayerEditor",         &create<LayerEditor,          DockBehavior>);
+        registerFactory("LayersPanel",         &create<LayersPanel,          DockBehavior>);
+        registerFactory("LivePathEffect",      &create<LivePathEffectEditor, DockBehavior>);
+        registerFactory("Memory",              &create<Memory,               DockBehavior>);
+        registerFactory("Messages",            &create<Messages,             DockBehavior>);
+        registerFactory("Script",              &create<ScriptDialog,         DockBehavior>);
+        registerFactory("Swatches",            &create<SwatchesPanel,        DockBehavior>);
+        registerFactory("TextProperties",      &create<TextProperties,       DockBehavior>);
+        registerFactory("TileDialog",          &create<TileDialog,           DockBehavior>);
+        registerFactory("Trace",               &create<TraceDialog,          DockBehavior>);
+        registerFactory("Transformation",      &create<Transformation,       DockBehavior>);
+        registerFactory("UndoHistory",         &create<UndoHistory,          DockBehavior>);
+        registerFactory("XmlEditor",           &create<XmlEditor,            DockBehavior>);
+
+        registerFactory("InputDevices",        &create<InputDialog,          DockBehavior>);
+
+    }
 }
 
 DialogManager::~DialogManager() {
@@ -99,6 +152,23 @@ DialogManager::~DialogManager() {
     //        Appears to cause a segfault if we do
 }
 
+
+DialogManager &DialogManager::getInstance()
+{
+    int dialogs_type = prefs_get_int_attribute_limited ("options.dialogtype", "value", DOCK, 0, 1);
+
+    /* Use singleton behavior for floating dialogs */
+    if (dialogs_type == FLOATING) {
+        static DialogManager *instance = 0;
+        
+        if (!instance)
+            instance = new DialogManager();
+        return *instance;
+    } 
+
+    return *new DialogManager();
+}
+
 /**
  * Registers a dialog factory function used to create the named dialog.
  */
@@ -163,7 +233,6 @@ void DialogManager::showDialog(GQuark name) {
     Dialog *dialog=getDialog(name);
     if (dialog) {
         dialog->present();
-        dialog->read_geometry();
     }
 }