selection-describer.cpp revision 6b15695578f07a3f72c4c9475c1a261a3021472a
0N/A/*
0N/A * Inkscape::SelectionDescriber - shows messages describing selection
0N/A *
0N/A * Authors:
0N/A * MenTaLguY <mental@rydia.net>
0N/A * bulia byak <buliabyak@users.sf.net>
0N/A *
0N/A * Copyright (C) 2004 MenTaLguY
0N/A *
0N/A * Released under GNU GPL, read the file 'COPYING' for more information
0N/A */
0N/A
0N/A#ifdef HAVE_CONFIG_H
0N/A# include "config.h"
0N/A#endif
0N/A
0N/A#include <glibmm/i18n.h>
0N/A#include "xml/quote.h"
0N/A#include "selection.h"
0N/A#include "selection-describer.h"
0N/A#include "desktop.h"
0N/A#include "sp-textpath.h"
0N/A#include "sp-offset.h"
0N/A#include "sp-flowtext.h"
0N/A#include "sp-use.h"
0N/A
0N/Anamespace Inkscape {
0N/A
0N/ASelectionDescriber::SelectionDescriber(Inkscape::Selection *selection, MessageStack *stack)
0N/A: _context(stack)
0N/A{
0N/A selection->connectChanged(sigc::mem_fun(*this, &SelectionDescriber::_updateMessageFromSelection));
0N/A _updateMessageFromSelection(selection);
0N/A}
0N/A
0N/Avoid SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *selection) {
0N/A GSList const *items = selection->itemList();
0N/A
0N/A char const *when_selected = _("Click selection to toggle scale/rotation handles");
0N/A if (!items) { // no items
0N/A _context.set(Inkscape::NORMAL_MESSAGE, _("No objects selected. Click, Shift+click, or drag around objects to select."));
0N/A } else {
0N/A SPItem *item = SP_ITEM(items->data);
0N/A SPObject *layer = selection->desktop()->layerForObject (SP_OBJECT (item));
0N/A SPObject *root = selection->desktop()->currentRoot();
0N/A gchar *layer_phrase;
0N/A if (layer == root) {
0N/A layer_phrase = g_strdup(""); // for simplicity
0N/A } else {
0N/A char const *name, *fmt;
0N/A if (layer && layer->label()) {
0N/A name = layer->label();
0N/A fmt = _(" in layer <b>%s</b>");
0N/A } else {
0N/A name = layer->defaultLabel();
0N/A fmt = _(" in layer <b><i>%s</i></b>");
0N/A }
0N/A char *quoted_name = xml_quote_strdup(name);
0N/A layer_phrase = g_strdup_printf(fmt, quoted_name);
0N/A g_free(quoted_name);
0N/A }
0N/A
0N/A if (!items->next) { // one item
0N/A char *item_desc = sp_item_description(item);
0N/A if (SP_IS_USE(item) || (SP_IS_OFFSET(item) && SP_OFFSET (item)->sourceHref)) {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
0N/A item_desc, layer_phrase,
0N/A _("Use <b>Shift+D</b> to look up original"), when_selected);
0N/A } else if (SP_IS_TEXT_TEXTPATH(item)) {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
0N/A item_desc, layer_phrase,
0N/A _("Use <b>Shift+D</b> to look up path"), when_selected);
0N/A } else if (SP_IS_FLOWTEXT(item) && !SP_FLOWTEXT(item)->has_internal_frame()) {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
0N/A item_desc, layer_phrase,
0N/A _("Use <b>Shift+D</b> to look up frame"), when_selected);
0N/A } else {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s.",
0N/A item_desc, layer_phrase, when_selected);
0N/A }
0N/A g_free(item_desc);
0N/A } else { // multiple items
0N/A int object_count = g_slist_length((GSList *)items);
0N/A const gchar *object_count_str = NULL;
0N/A object_count_str = g_strdup_printf (
0N/A ngettext("<b>%i</b> object selected",
0N/A "<b>%i</b> objects selected",
0N/A object_count),
0N/A object_count);
0N/A
0N/A if (selection->numberOfLayers() == 1) {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE, _("%s%s. %s."),
0N/A object_count_str, layer_phrase, when_selected);
0N/A } else {
0N/A _context.setF(Inkscape::NORMAL_MESSAGE,
0N/A ngettext("%s in <b>%i</b> layer. %s.",
0N/A "%s in <b>%i</b> layers. %s.",
0N/A selection->numberOfLayers()),
0N/A object_count_str, selection->numberOfLayers(), when_selected);
0N/A }
0N/A
0N/A if (object_count_str)
0N/A g_free ((gchar *) object_count_str);
0N/A }
0N/A
0N/A g_free(layer_phrase);
0N/A }
0N/A}
0N/A
0N/A}
0N/A
0N/A/*
0N/A Local Variables:
0N/A mode:c++
0N/A c-file-style:"stroustrup"
0N/A c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
0N/A indent-tabs-mode:nil
0N/A fill-column:99
0N/A End:
0N/A*/
0N/A// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
0N/A