summaryrefslogtreecommitdiffstats
path: root/src/dialogs
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-03-15 22:58:35 +0000
committermental <mental@users.sourceforge.net>2006-03-15 22:58:35 +0000
commit6377ae8ca2e597a43d8e9c0b00c3e3f7caed4258 (patch)
tree9114831a899153b3e39e18cb8fc33ee0fc088dcf /src/dialogs
parentreadme for legacy icons (diff)
downloadinkscape-6377ae8ca2e597a43d8e9c0b00c3e3f7caed4258.tar.gz
inkscape-6377ae8ca2e597a43d8e9c0b00c3e3f7caed4258.zip
merged patch #1447043 from Andrius "knutux" R. to create sub-layers
(bzr r251)
Diffstat (limited to 'src/dialogs')
-rw-r--r--src/dialogs/layer-properties.cpp72
-rw-r--r--src/dialogs/layer-properties.h24
2 files changed, 88 insertions, 8 deletions
diff --git a/src/dialogs/layer-properties.cpp b/src/dialogs/layer-properties.cpp
index 8806e97f0..086b24b07 100644
--- a/src/dialogs/layer-properties.cpp
+++ b/src/dialogs/layer-properties.cpp
@@ -4,8 +4,10 @@
*
* Author:
* Bryce W. Harrington <bryce@bryceharrington.com>
+ * Andreas R. <knutux@users.sourceforge.net>
*
* Copyright (C) 2004 Bryce Harrington
+ * Copyright (C) 2006 Andreas R.
*
* Released under GNU GPL. Read the file 'COPYING' for more information
*/
@@ -22,8 +24,8 @@
#include "document.h"
#include "message-stack.h"
#include "desktop-handles.h"
-#include "layer-fns.h"
#include "sp-object.h"
+#include "sp-item.h"
#include "layer-properties.h"
@@ -39,12 +41,19 @@ LayerPropertiesDialog::LayerPropertiesDialog()
Gtk::VBox *mainVBox = get_vbox();
+ _layout_table.set_spacings(4);
+ _layout_table.resize (1, 2);
+
// Layer name widgets
_layer_name_entry.set_activates_default(true);
- _layer_name_hbox.pack_end(_layer_name_entry, false, false, 4);
_layer_name_label.set_label(_("Layer name:"));
- _layer_name_hbox.pack_end(_layer_name_label, false, false, 4);
- mainVBox->pack_start(_layer_name_hbox, false, false, 4);
+ _layer_name_label.set_alignment(1.0, 0.5);
+
+ _layout_table.attach(_layer_name_label,
+ 0, 1, 0, 1, Gtk::FILL, Gtk::FILL);
+ _layout_table.attach(_layer_name_entry,
+ 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL);
+ mainVBox->pack_start(_layout_table, false, false, 4);
// Buttons
_close_button.set_use_stock(true);
@@ -123,6 +132,51 @@ LayerPropertiesDialog::_close()
);
}
+void
+LayerPropertiesDialog::_setup_position_controls() {
+ if ( NULL == _layer || _desktop->currentRoot() == _layer ) {
+ // no layers yet, so option above/below/sublayer is useless
+ return;
+ }
+
+ _dropdown_list = Gtk::ListStore::create(_dropdown_columns);
+ _layer_position_combo.set_model(_dropdown_list);
+ _layer_position_combo.pack_start(_label_renderer);
+ _layer_position_combo.set_cell_data_func(_label_renderer,
+ sigc::mem_fun(*this, &LayerPropertiesDialog::_prepareLabelRenderer));
+
+ _layout_table.resize (2, 2);
+
+ Gtk::ListStore::iterator row;
+ row = _dropdown_list->append();
+ row->set_value(_dropdown_columns.position, LPOS_ABOVE);
+ row->set_value(_dropdown_columns.name, Glib::ustring(_("Above current")));
+ _layer_position_combo.set_active(row);
+ row = _dropdown_list->append();
+ row->set_value(_dropdown_columns.position, LPOS_BELOW);
+ row->set_value(_dropdown_columns.name, Glib::ustring(_("Below current")));
+ row = _dropdown_list->append();
+ row->set_value(_dropdown_columns.position, LPOS_CHILD);
+ row->set_value(_dropdown_columns.name, Glib::ustring(_("As sublayer of current")));
+
+ _layout_table.attach(_layer_position_combo,
+ 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL);
+ _layer_position_label.set_label(_("Position:"));
+ _layer_position_label.set_alignment(1.0, 0.5);
+ _layout_table.attach(_layer_position_label,
+ 0, 1, 1, 2, Gtk::FILL, Gtk::FILL);
+ show_all_children();
+}
+
+/** Formats the label for a given layer row
+ */
+void LayerPropertiesDialog::_prepareLabelRenderer(
+ Gtk::TreeModel::const_iterator const &row
+) {
+ Glib::ustring name=(*row)[_dropdown_columns.name];
+ _label_renderer.property_markup() = name.c_str();
+}
+
void LayerPropertiesDialog::Rename::setup(LayerPropertiesDialog &dialog) {
SPDesktop *desktop=dialog._desktop;
dialog.set_title(_("Rename Layer"));
@@ -146,13 +200,17 @@ void LayerPropertiesDialog::Create::setup(LayerPropertiesDialog &dialog) {
dialog.set_title(_("Add Layer"));
dialog._layer_name_entry.set_text("");
dialog._apply_button.set_label(_("_Add"));
+ dialog._setup_position_controls();
}
void LayerPropertiesDialog::Create::perform(LayerPropertiesDialog &dialog) {
SPDesktop *desktop=dialog._desktop;
- SPObject *new_layer=Inkscape::create_layer(
- desktop->currentRoot(), dialog._layer
- );
+
+ Gtk::ListStore::iterator activeRow(dialog._layer_position_combo.get_active());
+ LayerRelativePosition position = activeRow->get_value(dialog._dropdown_columns.position);
+
+ SPObject *new_layer=Inkscape::create_layer(desktop->currentRoot(), dialog._layer, position);
+
Glib::ustring name(dialog._layer_name_entry.get_text());
if (!name.empty()) {
new_layer->setLabel((gchar *)name.c_str());
diff --git a/src/dialogs/layer-properties.h b/src/dialogs/layer-properties.h
index 15404b2e5..93cd4f7e0 100644
--- a/src/dialogs/layer-properties.h
+++ b/src/dialogs/layer-properties.h
@@ -20,8 +20,11 @@
#include <gtkmm/entry.h>
#include <gtkmm/label.h>
#include <gtkmm/table.h>
+#include <gtkmm/combobox.h>
+#include <gtkmm/liststore.h>
#include "selection.h"
+#include "layer-fns.h"
namespace Inkscape {
namespace UI {
@@ -65,9 +68,25 @@ protected:
SPDesktop *_desktop;
SPObject *_layer;
- Gtk::HBox _layer_name_hbox;
+ class PositionDropdownColumns : public Gtk::TreeModel::ColumnRecord {
+ public:
+ Gtk::TreeModelColumn<LayerRelativePosition> position;
+ Gtk::TreeModelColumn<Glib::ustring> name;
+
+ PositionDropdownColumns() {
+ add(position); add(name);
+ }
+ };
+
Gtk::Label _layer_name_label;
Gtk::Entry _layer_name_entry;
+ Gtk::Label _layer_position_label;
+ Gtk::ComboBox _layer_position_combo;
+ Gtk::Table _layout_table;
+
+ PositionDropdownColumns _dropdown_columns;
+ Gtk::CellRendererText _label_renderer;
+ Glib::RefPtr<Gtk::ListStore> _dropdown_list;
Gtk::Button _close_button;
Gtk::Button _apply_button;
@@ -86,6 +105,9 @@ protected:
void _apply();
void _close();
+ void _setup_position_controls();
+ void _prepareLabelRenderer(Gtk::TreeModel::const_iterator const &row);
+
private:
LayerPropertiesDialog(LayerPropertiesDialog const &); // no copy
LayerPropertiesDialog &operator=(LayerPropertiesDialog const &); // no assign