Code

Fixing scrollbar size for embeded color swatches.
[inkscape.git] / src / dialogs / layer-properties.cpp
1 /**
2  *
3  * \brief  Dialog for renaming layers
4  *
5  * Author:
6  *   Bryce W. Harrington <bryce@bryceharrington.com>
7  *
8  * Copyright (C) 2004 Bryce Harrington
9  *
10  * Released under GNU GPL.  Read the file 'COPYING' for more information
11  */
13 #ifdef HAVE_CONFIG_H
14 # include <config.h>
15 #endif
17 #include <gtkmm/stock.h>
19 #include <glibmm/i18n.h>
20 #include "inkscape.h"
21 #include "desktop.h"
22 #include "document.h"
23 #include "message-stack.h"
24 #include "desktop-handles.h"
25 #include "layer-fns.h"
26 #include "sp-object.h"
28 #include "layer-properties.h"
30 namespace Inkscape {
31 namespace UI {
32 namespace Dialogs {
34 LayerPropertiesDialog::LayerPropertiesDialog()
35 : _strategy(NULL), _desktop(NULL), _layer(NULL)
36 {
37     GtkWidget *dlg = GTK_WIDGET(gobj());
38     g_assert(dlg);
40     Gtk::VBox *mainVBox = get_vbox();
42     // Layer name widgets
43     _layer_name_entry.set_activates_default(true);
44     _layer_name_hbox.pack_end(_layer_name_entry, false, false, 4);
45     _layer_name_label.set_label(_("Layer name:"));
46     _layer_name_hbox.pack_end(_layer_name_label, false, false, 4);
47     mainVBox->pack_start(_layer_name_hbox, false, false, 4);
49     // Buttons
50     _close_button.set_use_stock(true);
51     _close_button.set_label(Gtk::Stock::CANCEL.id);
52     _close_button.set_flags(Gtk::CAN_DEFAULT);
54     _apply_button.set_use_underline(true);
55     _apply_button.set_flags(Gtk::CAN_DEFAULT);
57     _close_button.signal_clicked()
58         .connect(sigc::mem_fun(*this, &LayerPropertiesDialog::_close));
59     _apply_button.signal_clicked()
60         .connect(sigc::mem_fun(*this, &LayerPropertiesDialog::_apply));
62     signal_delete_event().connect(
63         sigc::bind_return(
64             sigc::hide(sigc::mem_fun(*this, &LayerPropertiesDialog::_close)),
65             true
66         )
67     );
69     add_action_widget(_close_button, Gtk::RESPONSE_CLOSE);
70     add_action_widget(_apply_button, Gtk::RESPONSE_APPLY);
72     _apply_button.grab_default();
74     show_all_children();
75 }
77 LayerPropertiesDialog::~LayerPropertiesDialog() {
78     _setDesktop(NULL);
79     _setLayer(NULL);
80 }
82 void LayerPropertiesDialog::_showDialog(LayerPropertiesDialog::Strategy &strategy,
83                                         SPDesktop *desktop, SPObject *layer)
84 {
85     LayerPropertiesDialog *dialog = new LayerPropertiesDialog();
87     dialog->_strategy = &strategy;
88     dialog->_setDesktop(desktop);
89     dialog->_setLayer(layer);
91     dialog->_strategy->setup(*dialog);
93     dialog->set_modal(true);
94     desktop->setWindowTransient (dialog->gobj());
95     dialog->property_destroy_with_parent() = true;
97     dialog->show();
98     dialog->present();
99 }
101 void
102 LayerPropertiesDialog::_apply()
104     g_assert(_strategy != NULL);
106     _strategy->perform(*this);
107     sp_document_done(SP_DT_DOCUMENT(SP_ACTIVE_DESKTOP));
109     _close();
112 void
113 LayerPropertiesDialog::_close()
115     _setLayer(NULL);
116     _setDesktop(NULL);
117     destroy_();
118     Glib::signal_idle().connect(
119         sigc::bind_return(
120             sigc::bind(sigc::ptr_fun(&::operator delete), this),
121             false 
122         )
123     );
126 void LayerPropertiesDialog::Rename::setup(LayerPropertiesDialog &dialog) {
127     SPDesktop *desktop=dialog._desktop;
128     dialog.set_title(_("Rename Layer"));
129     gchar const *name = desktop->currentLayer()->label();
130     dialog._layer_name_entry.set_text(( name ? name : "" ));
131     dialog._apply_button.set_label(_("_Rename"));
134 void LayerPropertiesDialog::Rename::perform(LayerPropertiesDialog &dialog) {
135     SPDesktop *desktop=dialog._desktop;
136     Glib::ustring name(dialog._layer_name_entry.get_text());
137     desktop->currentLayer()->setLabel(
138         ( name.empty() ? NULL : (gchar *)name.c_str() )
139     );
140     sp_document_done(SP_DT_DOCUMENT(desktop));
141     // TRANSLATORS: This means "The layer has been renamed"
142     desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Renamed layer"));
145 void LayerPropertiesDialog::Create::setup(LayerPropertiesDialog &dialog) {
146     dialog.set_title(_("Add Layer"));
147     dialog._layer_name_entry.set_text("");
148     dialog._apply_button.set_label(_("_Add"));
151 void LayerPropertiesDialog::Create::perform(LayerPropertiesDialog &dialog) {
152     SPDesktop *desktop=dialog._desktop;
153     SPObject *new_layer=Inkscape::create_layer(
154         desktop->currentRoot(), dialog._layer
155     );
156     Glib::ustring name(dialog._layer_name_entry.get_text());
157     if (!name.empty()) {
158         new_layer->setLabel((gchar *)name.c_str());
159     }
160     SP_DT_SELECTION(desktop)->clear();
161     desktop->setCurrentLayer(new_layer);
162     desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("New layer created."));
165 void LayerPropertiesDialog::_setDesktop(SPDesktop *desktop) {
166     if (desktop) {
167         Inkscape::GC::anchor (desktop);
168     }
169     if (_desktop) {
170         Inkscape::GC::release (_desktop);
171     }
172     _desktop = desktop;
175 void LayerPropertiesDialog::_setLayer(SPObject *layer) {
176     if (layer) {
177         sp_object_ref(layer, NULL);
178     }
179     if (_layer) {
180         sp_object_unref(_layer, NULL);
181     }
182     _layer = layer;
185 } // namespace
186 } // namespace
187 } // namespace
190 /*
191   Local Variables:
192   mode:c++
193   c-file-style:"stroustrup"
194   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
195   indent-tabs-mode:nil
196   fill-column:99
197   End:
198 */
199 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :