Code

Implemented dynamic repositioning of toolboxes.
[inkscape.git] / src / ui / uxmanager.cpp
1 /** \file
2  * Desktop widget implementation
3  */
4 /* Authors:
5  *   Jon A. Cruz <jon@joncruz.org>
6  *
7  * Copyright (C) 2010 Jon A. Cruz
8  *
9  * Released under GNU GPL, read the file 'COPYING' for more information
10  */
12 #ifdef HAVE_CONFIG_H
13 # include "config.h"
14 #endif
16 #include <algorithm>
18 #include "uxmanager.h"
19 #include "util/ege-tags.h"
20 #include "widgets/toolbox.h"
21 #include "widgets/desktop-widget.h"
23 using std::map;
24 using std::vector;
26 static vector<SPDesktop*> desktops;
27 static vector<SPDesktopWidget*> dtws;
28 static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
32 namespace Inkscape {
33 namespace UI {
35 UXManager* instance = 0;
37 UXManager* UXManager::getInstance()
38 {
39     if (!instance) {
40         instance = new UXManager();
41     }
42     return instance;
43 }
46 UXManager::UXManager()
47 {
48     ege::TagSet tags;
49     tags.setLang("en");
51     tags.addTag(ege::Tag("General"));
52     tags.addTag(ege::Tag("Icons"));
53 }
55 UXManager::~UXManager()
56 {
57 }
59 void UXManager::setTask(SPDesktop* dt, gint val)
60 {
61     for (vector<SPDesktopWidget*>::iterator it = dtws.begin(); it != dtws.end(); ++it) {
62         SPDesktopWidget* dtw = *it;
63         if (dtw->desktop == dt) {
64             if (val == 0) {
65                 dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
66                 dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP);
67                 dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP);
68                 // for now skip "AuxToolbar";
69             } else {
70                 dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP);
71                 dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT);
72                 dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
73                 // for now skip "AuxToolbar";
74             }
75             break;
76         }
77     }
78 }
81 void UXManager::addTrack( SPDesktopWidget* dtw )
82 {
83     if (std::find(dtws.begin(), dtws.end(), dtw) == dtws.end()) {
84         dtws.push_back(dtw);
85     }
86 }
88 void UXManager::delTrack( SPDesktopWidget* dtw )
89 {
90     vector<SPDesktopWidget*>::iterator iter = std::find(dtws.begin(), dtws.end(), dtw);
91     if (iter != dtws.end()) {
92         dtws.erase(iter);
93     }
94 }
96 void UXManager::connectToDesktop( vector<GtkWidget *> const & toolboxes, SPDesktop *desktop )
97 {
98 //static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
100     for (vector<GtkWidget*>::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) {
101         GtkWidget* toolbox = *it;
103         ToolboxFactory::setToolboxDesktop( toolbox, desktop );
104         vector<GtkWidget*>& tracked = trackedBoxes[desktop];
105         if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) {
106             tracked.push_back(toolbox);
107         }
108     }
110     if (std::find(desktops.begin(), desktops.end(), desktop) == desktops.end()) {
111         desktops.push_back(desktop);
112     }
116 } // namespace UI
117 } // namespace Inkscape
119 /*
120   Local Variables:
121   mode:c++
122   c-file-style:"stroustrup"
123   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
124   indent-tabs-mode:nil
125   fill-column:99
126   End:
127 */
128 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :