index b95005cd9830c65e6ce1f48db5b969d190beb2eb..10b497cacacb8b730d65d5afd261f6f41370c06f 100644 (file)
#include "desktop.h"
#include "document.h"
#include "dialogs/layer-properties.h"
+#include "layer-manager.h"
#include "xml/node-event-vector.h"
+#include "verbs.h"
namespace Inkscape {
namespace Widgets {
}
private:
- Gtk::Widget *_a;
+ Gtk::Widget *_a;
Gtk::Widget *_b;
bool _state;
};
}
-/** LayerSelector constructor. Creates lock and hide buttons,
+/** LayerSelector constructor. Creates lock and hide buttons,
* initalizes the layer dropdown selector with a label renderer,
* and hooks up signal for setting the desktop layer when the
* selector is changed.
- */
+ */
LayerSelector::LayerSelector(SPDesktop *desktop)
: _desktop(NULL), _layer(NULL)
{
AlternateIcons *label;
- label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_MENU, "visible", "hidden"));
+ label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "visible", "hidden"));
_visibility_toggle.add(*label);
_visibility_toggle.signal_toggled().connect(
sigc::compose(
_tooltips.set_tip(_visibility_toggle, _("Toggle current layer visibility"));
pack_start(_visibility_toggle, Gtk::PACK_EXPAND_PADDING);
- label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_MENU, "lock_unlocked", "width_height_lock"));
+ label = Gtk::manage(new AlternateIcons(Inkscape::ICON_SIZE_DECORATION, "lock_unlocked", "width_height_lock"));
_lock_toggle.add(*label);
_lock_toggle.signal_toggled().connect(
sigc::compose(
setDesktop(desktop);
}
-/** Destructor - disconnects signal handler
+/** Destructor - disconnects signal handler
*/
LayerSelector::~LayerSelector() {
setDesktop(NULL);
namespace {
-/** Helper function - detaches desktop from selector
+/** Helper function - detaches desktop from selector
*/
bool detach(LayerSelector *selector) {
selector->setDesktop(NULL);
}
-/** Selects the given layer in the dropdown selector.
+/** Selects the given layer in the dropdown selector.
*/
void LayerSelector::_selectLayer(SPObject *layer) {
using Inkscape::Util::List;
SPObject *layer=_selector.get_active()->get_value(_model_columns.object);
if ( _desktop && layer ) {
_layer_changed_connection.block();
- _desktop->setCurrentLayer(layer);
+
+ _desktop->layer_manager->setCurrentLayer(layer);
+
_layer_changed_connection.unblock();
- SP_DT_SELECTION(_desktop)->clear();
+
_selectLayer(_desktop->currentLayer());
}
+ if (_desktop && _desktop->canvas) {
+ gtk_widget_grab_focus (GTK_WIDGET(_desktop->canvas));
+ }
}
/** Creates rows in the _layer_model data structure for each item
sigc::slot<void> update_list;
};
-void attribute_changed(Inkscape::XML::Node *repr, gchar const *name,
- gchar const *old_value, gchar const *new_value,
- bool is_interactive, void *data)
+void attribute_changed(Inkscape::XML::Node */*repr*/, gchar const *name,
+ gchar const */*old_value*/, gchar const */*new_value*/,
+ bool /*is_interactive*/, void *data)
{
if ( !std::strcmp(name, "inkscape:groupmode") ) {
reinterpret_cast<Callbacks *>(data)->update_list();
}
}
-void node_added(Inkscape::XML::Node *parent, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data) {
+void node_added(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, void *data) {
gchar const *mode=child->attribute("inkscape:groupmode");
if ( mode && !std::strcmp(mode, "layer") ) {
reinterpret_cast<Callbacks *>(data)->update_list();
}
}
-void node_removed(Inkscape::XML::Node *parent, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data) {
+void node_removed(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, void *data) {
gchar const *mode=child->attribute("inkscape:groupmode");
if ( mode && !std::strcmp(mode, "layer") ) {
reinterpret_cast<Callbacks *>(data)->update_list();
}
}
-void node_reordered(Inkscape::XML::Node *parent, Inkscape::XML::Node *child,
- Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref,
+void node_reordered(Inkscape::XML::Node */*parent*/, Inkscape::XML::Node *child,
+ Inkscape::XML::Node */*old_ref*/, Inkscape::XML::Node */*new_ref*/,
void *data)
{
gchar const *mode=child->attribute("inkscape:groupmode");
_visibility_toggled_connection.block(true);
_lock_toggled_connection.block(true);
slot();
+
+ SPObject *layer = _desktop ? _desktop->currentLayer() : 0;
+ if ( layer ) {
+ bool wantedValue = ( SP_IS_ITEM(layer) ? SP_ITEM(layer)->isLocked() : false );
+ if ( _lock_toggle.get_active() != wantedValue ) {
+ _lock_toggle.set_active( wantedValue );
+ }
+ wantedValue = ( SP_IS_ITEM(layer) ? SP_ITEM(layer)->isHidden() : false );
+ if ( _visibility_toggle.get_active() != wantedValue ) {
+ _visibility_toggle.set_active( wantedValue );
+ }
+ }
_visibility_toggled_connection.block(visibility_blocked);
_lock_toggled_connection.block(lock_blocked);
}
delete callbacks;
}
-/** Formats the label for a given layer row
+/** Formats the label for a given layer row
*/
void LayerSelector::_prepareLabelRenderer(
Gtk::TreeModel::const_iterator const &row
label = _("(root)");
}
- gchar *text = g_markup_printf_escaped(format, label);
+ gchar *text = g_markup_printf_escaped(format, label);
_label_renderer.property_markup() = text;
g_free(text);
g_free(format);
void LayerSelector::_lockLayer(bool lock) {
if ( _layer && SP_IS_ITEM(_layer) ) {
SP_ITEM(_layer)->setLocked(lock);
- sp_document_maybe_done(SP_DT_DOCUMENT(_desktop), "LayerSelector:lock");
+ sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE,
+ lock? _("Lock layer") : _("Unlock layer"));
}
}
void LayerSelector::_hideLayer(bool hide) {
if ( _layer && SP_IS_ITEM(_layer) ) {
SP_ITEM(_layer)->setHidden(hide);
- sp_document_maybe_done(SP_DT_DOCUMENT(_desktop), "LayerSelector:hide");
+ sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE,
+ hide? _("Hide layer") : _("Unhide layer"));
}
}