diff --git a/src/verbs.cpp b/src/verbs.cpp
index a046372fc0a7fac513d4384daff24d5e6b1b500f..ea4ffd71bcdef5ac9ad8d47b0dd499419f3560ae 100644 (file)
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
* David Turner <novalis@gnu.org>
* bulia byak <buliabyak@users.sf.net>
*
+ * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
+ * Copyright (C) (date unspecified) Authors
* This code is in public domain.
*/
#include "dialogs/text-edit.h"
#include "dialogs/xml-tree.h"
-#include "dialogs/object-properties.h"
#include "dialogs/item-properties.h"
#include "dialogs/find.h"
#include "dialogs/layer-properties.h"
#include "dialogs/input.h"
#ifdef WITH_INKBOARD
-#include "ui/dialog/whiteboard-connect.h"
-#include "ui/dialog/whiteboard-sharewithuser.h"
-#include "ui/dialog/whiteboard-sharewithchat.h"
#include "jabber_whiteboard/session-manager.h"
-#include "jabber_whiteboard/node-tracker.h"
#endif
#include "extension/effect.h"
#include "sp-flowtext.h"
#include "layer-fns.h"
#include "node-context.h"
+#include "select-context.h"
+#include "seltrans.h"
+#include "gradient-context.h"
+#include "shape-editor.h"
+#include "draw-context.h"
+#include "gradient-drag.h"
/**
} // end of sp_action_get_title()
-
namespace Inkscape {
-/// \todo !!!FIXME:: kill this, use DialogManager instead!!!
-
-class PanelDialog : public Inkscape::UI::Dialog::Dialog
-{
-public:
- PanelDialog(char const *prefs_path, int const verb_num) : Dialog(prefs_path, verb_num) {}
-/*
- virtual Glib::ustring getName() const {return "foo";}
- virtual Glib::ustring getDesc() const {return "bar";}
-*/
-};
-
-/** \brief Utility function to get a panel displayed. */
-static void show_panel( Inkscape::UI::Widget::Panel &panel, char const *prefs_path, int const verb_num )
-{
- Gtk::Container *container = panel.get_toplevel();
- if ( &panel == container ) { // safe check?
- //g_message("Creating new dialog to hold it");
- PanelDialog *dia = new PanelDialog(prefs_path, verb_num);
- Gtk::VBox *mainVBox = dia->get_vbox();
- mainVBox->pack_start(panel);
- dia->show_all_children();
- dia->present();
- dia->read_geometry();
- } else {
- Gtk::Dialog *dia = dynamic_cast<Gtk::Dialog*>(container);
- if ( dia ) {
- //g_message("Found an existing dialog");
- dia->present();
- } else {
- g_message("Failed to find an existing dialog");
- }
- }
-}
-
/** \brief A class to encompass all of the verbs which deal with
file operations. */
class FileVerb : public Verb {
{ }
}; /* TutorialVerb class */
+/** \brief A class to encompass all of the verbs which deal with
+ text operations. */
+class TextVerb : public Verb {
+private:
+ static void perform(SPAction *action, void *mydata, void *otherdata);
+ static SPActionEventVector vector;
+protected:
+ virtual SPAction *make_action(Inkscape::UI::View::View *view);
+public:
+ /** \brief Use the Verb initializer with the same parameters. */
+ TextVerb(unsigned int const code,
+ gchar const *id,
+ gchar const *name,
+ gchar const *tip,
+ gchar const *image) :
+ Verb(code, id, name, tip, image)
+ { }
+}; //TextVerb : public Verb
Verb::VerbTable Verb::_verbs;
Verb::VerbIDTable Verb::_verb_ids;
\return NULL to represent error (this function shouldn't ever be called)
*/
SPAction *
-Verb::make_action(Inkscape::UI::View::View *view)
+Verb::make_action(Inkscape::UI::View::View */*view*/)
{
//std::cout << "make_action" << std::endl;
return NULL;
return make_action_helper(view, &vector);
}
+/** \brief Create an action for a \c TextVerb
+ \param view Which view the action should be created for
+ \return The built action.
+
+ Calls \c make_action_helper with the \c vector.
+*/
+SPAction *
+TextVerb::make_action(Inkscape::UI::View::View *view)
+{
+ return make_action_helper(view, &vector);
+}
+
/** \brief A quick little convience function to make building actions
a little bit easier.
\param view Which view the action should be created for.
for (ActionTable::iterator cur_action = _actions->begin();
cur_action != _actions->end();
cur_action++) {
- if (in_doc == NULL || (cur_action->first != NULL && cur_action->first->doc() == in_doc)) {
+ if (in_doc == NULL || (cur_action->first != NULL && cur_action->first->doc() == in_doc)) {
sp_action_set_sensitive(cur_action->second, in_sensitive ? 1 : 0);
}
}
return;
}
+
+void
+Verb::name(SPDocument *in_doc, Glib::ustring in_name)
+{
+ if (_actions != NULL) {
+ for (ActionTable::iterator cur_action = _actions->begin();
+ cur_action != _actions->end();
+ cur_action++) {
+ if (in_doc == NULL || (cur_action->first != NULL && cur_action->first->doc() == in_doc)) {
+ sp_action_set_name(cur_action->second, in_name);
+ }
+ }
+ }
+}
+
/** \brief A function to remove the action associated with a view.
\param view Which view's actions should be removed.
\return None
/** \brief Decode the verb code and take appropriate action */
void
-FileVerb::perform(SPAction *action, void *data, void *pdata)
+FileVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
#if 0
/* These aren't used, but are here to remind people not to use
Inkscape::UI::View::View *current_view = sp_action_get_view(action);
SPDocument *current_document = current_view->doc();
#endif
+
+ SPDesktop *desktop = dynamic_cast<SPDesktop*>(sp_action_get_view(action));
+ g_assert(desktop != NULL);
+ Gtk::Window *parent = desktop->getToplevel();
+ g_assert(parent != NULL);
+
switch ((long) data) {
case SP_VERB_FILE_NEW:
sp_file_new_default();
break;
case SP_VERB_FILE_OPEN:
- sp_file_open_dialog(NULL, NULL);
+ sp_file_open_dialog(*parent, NULL, NULL);
break;
case SP_VERB_FILE_REVERT:
sp_file_revert_dialog();
break;
case SP_VERB_FILE_SAVE:
- sp_file_save(NULL, NULL);
+ sp_file_save(*parent, NULL, NULL);
break;
case SP_VERB_FILE_SAVE_AS:
- sp_file_save_as(NULL, NULL);
+ sp_file_save_as(*parent, NULL, NULL);
+ break;
+ case SP_VERB_FILE_SAVE_A_COPY:
+ sp_file_save_a_copy(*parent, NULL, NULL);
break;
case SP_VERB_FILE_PRINT:
sp_file_print();
sp_file_print_preview(NULL, NULL);
break;
case SP_VERB_FILE_IMPORT:
- sp_file_import(NULL);
+ sp_file_import(*parent);
break;
case SP_VERB_FILE_EXPORT:
sp_file_export_dialog(NULL);
break;
+ case SP_VERB_FILE_IMPORT_FROM_OCAL:
+ sp_file_import_from_ocal(*parent);
+ break;
+ case SP_VERB_FILE_EXPORT_TO_OCAL:
+ sp_file_export_to_ocal(*parent);
+ break;
case SP_VERB_FILE_NEXT_DESKTOP:
inkscape_switch_desktops_next();
break;
break;
}
+
} // end of sp_verb_action_file_perform()
/** \brief Decode the verb code and take appropriate action */
void
-EditVerb::perform(SPAction *action, void *data, void *pdata)
+EditVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt)
return;
-
SPEventContext *ec = dt->event_context;
switch (reinterpret_cast<std::size_t>(data)) {
case SP_VERB_EDIT_PASTE_IN_PLACE:
sp_selection_paste(true);
break;
+ case SP_VERB_EDIT_PASTE_LIVEPATHEFFECT:
+ sp_selection_paste_livepatheffect();
+ break;
case SP_VERB_EDIT_DELETE:
sp_selection_delete();
break;
case SP_VERB_EDIT_UNLINK_CLONE:
sp_selection_unlink();
break;
- case SP_VERB_EDIT_CLONE_ORIGINAL:
+ case SP_VERB_EDIT_CLONE_SELECT_ORIGINAL:
sp_select_clone_original();
break;
+ case SP_VERB_EDIT_SELECTION_2_MARKER:
+ sp_selection_to_marker();
+ break;
case SP_VERB_EDIT_TILE:
sp_selection_tile();
break;
break;
case SP_VERB_EDIT_SELECT_ALL:
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_select_all_from_subpath(SP_NODE_CONTEXT(ec)->nodepath, false);
+ SP_NODE_CONTEXT(ec)->shape_editor->select_all_from_subpath(false);
} else {
sp_edit_select_all();
}
break;
case SP_VERB_EDIT_INVERT:
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_select_all_from_subpath(SP_NODE_CONTEXT(ec)->nodepath, true);
+ SP_NODE_CONTEXT(ec)->shape_editor->select_all_from_subpath(true);
} else {
sp_edit_invert();
}
break;
case SP_VERB_EDIT_SELECT_ALL_IN_ALL_LAYERS:
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_select_all(SP_NODE_CONTEXT(ec)->nodepath, false);
+ SP_NODE_CONTEXT(ec)->shape_editor->select_all(false);
} else {
sp_edit_select_all_in_all_layers();
}
break;
case SP_VERB_EDIT_INVERT_IN_ALL_LAYERS:
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_select_all(SP_NODE_CONTEXT(ec)->nodepath, true);
+ SP_NODE_CONTEXT(ec)->shape_editor->select_all(true);
} else {
sp_edit_invert_in_all_layers();
}
break;
+
+ case SP_VERB_EDIT_SELECT_NEXT:
+ if (tools_isactive(dt, TOOLS_NODES)) {
+ SP_NODE_CONTEXT(ec)->shape_editor->select_next();
+ } else if (tools_isactive(dt, TOOLS_GRADIENT)
+ && ec->_grdrag->isNonEmpty()) {
+ sp_gradient_context_select_next (ec);
+ } else {
+ sp_selection_item_next();
+ }
+ break;
+ case SP_VERB_EDIT_SELECT_PREV:
+ if (tools_isactive(dt, TOOLS_NODES)) {
+ SP_NODE_CONTEXT(ec)->shape_editor->select_prev();
+ } else if (tools_isactive(dt, TOOLS_GRADIENT)
+ && ec->_grdrag->isNonEmpty()) {
+ sp_gradient_context_select_prev (ec);
+ } else {
+ sp_selection_item_prev();
+ }
+ break;
+
case SP_VERB_EDIT_DESELECT:
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_deselect(SP_NODE_CONTEXT(ec)->nodepath);
+ SP_NODE_CONTEXT(ec)->shape_editor->deselect();
} else {
sp_desktop_selection(dt)->clear();
}
break;
+
+ case SP_VERB_EDIT_NEXT_PATHEFFECT_PARAMETER:
+ sp_selection_next_patheffect_param(dt);
+ break;
default:
break;
}
/** \brief Decode the verb code and take appropriate action */
void
-SelectionVerb::perform(SPAction *action, void *data, void *pdata)
+SelectionVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt)
return;
+ g_assert(dt->_dlg_mgr != NULL);
+
switch (reinterpret_cast<std::size_t>(data)) {
case SP_VERB_SELECTION_TO_FRONT:
sp_selection_raise_to_top();
break;
case SP_VERB_SELECTION_DYNAMIC_OFFSET:
sp_selected_path_create_offset_object_zero();
+ tools_switch_current(TOOLS_NODES);
break;
case SP_VERB_SELECTION_LINKED_OFFSET:
sp_selected_path_create_updating_offset_object_zero();
+ tools_switch_current(TOOLS_NODES);
break;
case SP_VERB_SELECTION_OUTLINE:
sp_selected_path_reverse();
break;
case SP_VERB_SELECTION_TRACE:
+ inkscape_dialogs_unhide();
dt->_dlg_mgr->showDialog("Trace");
break;
case SP_VERB_SELECTION_CREATE_BITMAP:
sp_selected_path_break_apart();
break;
case SP_VERB_SELECTION_GRIDTILE:
+ inkscape_dialogs_unhide();
dt->_dlg_mgr->showDialog("TileDialog");
break;
default:
/** \brief Decode the verb code and take appropriate action */
void
-LayerVerb::perform(SPAction *action, void *data, void *pdata)
+LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
unsigned int verb = reinterpret_cast<std::size_t>(data);
SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer());
if (next) {
dt->setCurrentLayer(next);
- sp_document_done(sp_desktop_document(dt));
- dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Moved to next layer."));
+ sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_NEXT,
+ _("Switch to next layer"));
+ dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Switched to next layer."));
} else {
- dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot move past last layer."));
+ dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot go past last layer."));
}
break;
}
SPObject *prev=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer());
if (prev) {
dt->setCurrentLayer(prev);
- sp_document_done(sp_desktop_document(dt));
- dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Moved to previous layer."));
+ sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_PREV,
+ _("Switch to previous layer"));
+ dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Switched to previous layer."));
} else {
- dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot move past first layer."));
+ dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot go before first layer."));
}
break;
}
if ( SP_OBJECT_NEXT(layer) != old_pos ) {
char const *message = NULL;
+ Glib::ustring description = "";
switch (verb) {
case SP_VERB_LAYER_TO_TOP:
+ message = g_strdup_printf(_("Raised layer <b>%s</b>."), layer->defaultLabel());
+ description = _("Layer to top");
+ break;
case SP_VERB_LAYER_RAISE:
message = g_strdup_printf(_("Raised layer <b>%s</b>."), layer->defaultLabel());
+ description = _("Raise layer");
break;
case SP_VERB_LAYER_TO_BOTTOM:
+ message = g_strdup_printf(_("Lowered layer <b>%s</b>."), layer->defaultLabel());
+ description = _("Layer to bottom");
+ break;
case SP_VERB_LAYER_LOWER:
message = g_strdup_printf(_("Lowered layer <b>%s</b>."), layer->defaultLabel());
+ description = _("Lower layer");
break;
};
- sp_document_done(sp_desktop_document(dt));
+ sp_document_done(sp_desktop_document(dt), verb, description);
if (message) {
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, message);
g_free((void *) message);
dt->setCurrentLayer(survivor);
}
- sp_document_done(sp_desktop_document(dt));
+ sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_DELETE,
+ _("Delete layer"));
// TRANSLATORS: this means "The layer has been deleted."
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Deleted layer."));
/** \brief Decode the verb code and take appropriate action */
void
-ObjectVerb::perform( SPAction *action, void *data, void *pdata )
+ObjectVerb::perform( SPAction *action, void *data, void */*pdata*/ )
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt)
if (sel->isEmpty())
return;
- NR::Point const center(sel->bounds().midpoint());
+ NR::Maybe<NR::Rect> bbox = sel->bounds();
+ if (!bbox) {
+ return;
+ }
+ // If the rotation center of the selection is visible, choose it as reference point
+ // for horizontal and vertical flips. Otherwise, take the center of the bounding box.
+ NR::Point center;
+ if (tools_isactive(dt, TOOLS_SELECT) && sel->center() && SP_SELECT_CONTEXT(ec)->_seltrans->centerIsVisible())
+ center = *sel->center();
+ else
+ center = bbox->midpoint();
switch (reinterpret_cast<std::size_t>(data)) {
case SP_VERB_OBJECT_ROTATE_90_CW:
text_unflow();
break;
case SP_VERB_OBJECT_FLOWTEXT_TO_TEXT:
- SPFlowtext::convert_to_text();
+ flowtext_to_text();
break;
case SP_VERB_OBJECT_FLIP_HORIZONTAL:
+ // When working with the node tool ...
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_flip(SP_NODE_CONTEXT(ec)->nodepath, NR::X);
+ Inkscape::NodePath::Node *active_node = Inkscape::NodePath::Path::active_node;
+
+ // ... and one of the nodes is currently mouseovered ...
+ if (active_node) {
+
+ // ... flip the selected nodes about that node
+ SP_NODE_CONTEXT(ec)->shape_editor->flip(NR::X, active_node->pos);
+ } else {
+
+ // ... or else about the center of their bounding box.
+ SP_NODE_CONTEXT(ec)->shape_editor->flip(NR::X);
+ }
+
+ // When working with the selector tool, flip the selection about its rotation center
+ // (if it is visible) or about the center of the bounding box.
} else {
sp_selection_scale_relative(sel, center, NR::scale(-1.0, 1.0));
}
- sp_document_done(sp_desktop_document(dt));
+ sp_document_done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_HORIZONTAL,
+ _("Flip horizontally"));
break;
case SP_VERB_OBJECT_FLIP_VERTICAL:
+ // The behaviour is analogous to flipping horizontally
if (tools_isactive(dt, TOOLS_NODES)) {
- sp_nodepath_flip(SP_NODE_CONTEXT(ec)->nodepath, NR::Y);
+ Inkscape::NodePath::Node *active_node = Inkscape::NodePath::Path::active_node;
+ if (active_node) {
+ SP_NODE_CONTEXT(ec)->shape_editor->flip(NR::Y, active_node->pos);
+ } else {
+ SP_NODE_CONTEXT(ec)->shape_editor->flip(NR::Y);
+ }
} else {
sp_selection_scale_relative(sel, center, NR::scale(1.0, -1.0));
}
- sp_document_done(sp_desktop_document(dt));
+ sp_document_done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_VERTICAL,
+ _("Flip vertically"));
break;
case SP_VERB_OBJECT_SET_MASK:
sp_selection_set_mask(false, false);
/** \brief Decode the verb code and take appropriate action */
void
-ContextVerb::perform(SPAction *action, void *data, void *pdata)
+ContextVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt;
sp_verb_t verb;
/** \todo !!! hopefully this can go away soon and actions can look after
* themselves
*/
- for (vidx = SP_VERB_CONTEXT_SELECT; vidx <= SP_VERB_CONTEXT_DROPPER_PREFS; vidx++)
+ for (vidx = SP_VERB_CONTEXT_SELECT; vidx <= SP_VERB_CONTEXT_PAINTBUCKET_PREFS; vidx++)
{
SPAction *tool_action= get((sp_verb_t)vidx)->get_action(dt);
if (tool_action) {
case SP_VERB_CONTEXT_NODE:
tools_switch_current(TOOLS_NODES);
break;
+ case SP_VERB_CONTEXT_TWEAK:
+ tools_switch_current(TOOLS_TWEAK);
+ break;
case SP_VERB_CONTEXT_RECT:
tools_switch_current(TOOLS_SHAPES_RECT);
break;
+ case SP_VERB_CONTEXT_3DBOX:
+ tools_switch_current(TOOLS_SHAPES_3DBOX);
+ break;
case SP_VERB_CONTEXT_ARC:
tools_switch_current(TOOLS_SHAPES_ARC);
break;
case SP_VERB_CONTEXT_CONNECTOR:
tools_switch_current (TOOLS_CONNECTOR);
break;
+ case SP_VERB_CONTEXT_PAINTBUCKET:
+ tools_switch_current(TOOLS_PAINTBUCKET);
+ break;
case SP_VERB_CONTEXT_SELECT_PREFS:
prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_SELECTOR);
prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_NODE);
dt->_dlg_mgr->showDialog("InkscapePreferences");
break;
+ case SP_VERB_CONTEXT_TWEAK_PREFS:
+ prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_TWEAK);
+ dt->_dlg_mgr->showDialog("InkscapePreferences");
+ break;
case SP_VERB_CONTEXT_RECT_PREFS:
prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_SHAPES_RECT);
dt->_dlg_mgr->showDialog("InkscapePreferences");
break;
+ case SP_VERB_CONTEXT_3DBOX_PREFS:
+ prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_SHAPES_3DBOX);
+ dt->_dlg_mgr->showDialog("InkscapePreferences");
+ break;
case SP_VERB_CONTEXT_ARC_PREFS:
prefs_set_int_attribute("dialogs.preferences", "page", PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
dt->_dlg_mgr->showDialog("InkscapePreferences");
prefs_set_int_attribute ("dialogs.preferences", "page", PREFS_PAGE_TOOLS_CONNECTOR);
dt->_dlg_mgr->showDialog("InkscapePreferences");
break;
+ case SP_VERB_CONTEXT_PAINTBUCKET_PREFS:
+ prefs_set_int_attribute ("dialogs.preferences", "page", PREFS_PAGE_TOOLS_PAINTBUCKET);
+ dt->_dlg_mgr->showDialog("InkscapePreferences");
+ break;
default:
break;
/** \brief Decode the verb code and take appropriate action */
void
-ZoomVerb::perform(SPAction *action, void *data, void *pdata)
+TextVerb::perform(SPAction *action, void */*data*/, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt)
return;
+ SPDocument *doc = sp_desktop_document(dt);
+ (void)doc;
+ Inkscape::XML::Node *repr = SP_OBJECT_REPR(dt->namedview);
+ (void)repr;
+}
+
+/** \brief Decode the verb code and take appropriate action */
+void
+ZoomVerb::perform(SPAction *action, void *data, void */*pdata*/)
+{
+ SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
+ if (!dt)
+ return;
+ SPEventContext *ec = dt->event_context;
+
SPDocument *doc = sp_desktop_document(dt);
Inkscape::XML::Node *repr = SP_OBJECT_REPR(dt->namedview);
switch (GPOINTER_TO_INT(data)) {
case SP_VERB_ZOOM_IN:
{
+ // While drawing with the pen/pencil tool, zoom towards the end of the unfinished path
+ if (tools_isactive(dt, TOOLS_FREEHAND_PENCIL) || tools_isactive(dt, TOOLS_FREEHAND_PEN)) {
+ SPCurve *rc = SP_DRAW_CONTEXT(ec)->red_curve;
+ if (sp_curve_last_bpath(rc)) {
+ NR::Point const zoom_to (sp_curve_last_point(rc));
+ dt->zoom_relative_keep_point(zoom_to, zoom_inc);
+ break;
+ }
+ }
+
NR::Rect const d = dt->get_display_area();
dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], zoom_inc);
break;
}
case SP_VERB_ZOOM_OUT:
{
+ // While drawing with the pen/pencil tool, zoom away from the end of the unfinished path
+ if (tools_isactive(dt, TOOLS_FREEHAND_PENCIL) || tools_isactive(dt, TOOLS_FREEHAND_PEN)) {
+ SPCurve *rc = SP_DRAW_CONTEXT(ec)->red_curve;
+ if (sp_curve_last_bpath(rc)) {
+ NR::Point const zoom_to (sp_curve_last_point(rc));
+ dt->zoom_relative_keep_point(zoom_to, 1 / zoom_inc);
+ break;
+ }
+ }
+
NR::Rect const d = dt->get_display_area();
dt->zoom_relative( d.midpoint()[NR::X], d.midpoint()[NR::Y], 1 / zoom_inc );
break;
sp_namedview_toggle_guides(doc, repr);
break;
case SP_VERB_TOGGLE_GRID:
- sp_namedview_toggle_grid(doc, repr);
+ dt->toggleGrids();
break;
#ifdef HAVE_GTK_WINDOW_FULLSCREEN
case SP_VERB_FULLSCREEN:
case SP_VERB_VIEW_MODE_OUTLINE:
dt->setDisplayModeOutline();
break;
+ case SP_VERB_VIEW_MODE_TOGGLE:
+ dt->displayModeToggle();
+ break;
+ case SP_VERB_VIEW_CMS_TOGGLE:
+ dt->toggleColorProfAdjust();
+ break;
case SP_VERB_VIEW_ICON_PREVIEW:
- show_panel( Inkscape::UI::Dialogs::IconPreviewPanel::getInstance(), "dialogs.iconpreview", SP_VERB_VIEW_ICON_PREVIEW );
+ inkscape_dialogs_unhide();
+ dt->_dlg_mgr->showDialog("IconPreviewPanel");
break;
default:
break;
}
+ dt->updateNow();
+
} // end of sp_verb_action_zoom_perform()
/** \brief Decode the verb code and take appropriate action */
void
-DialogVerb::perform(SPAction *action, void *data, void *pdata)
+DialogVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
if (reinterpret_cast<std::size_t>(data) != SP_VERB_DIALOG_TOGGLE) {
// unhide all when opening a new dialog
dt->_dlg_mgr->showDialog("DocumentProperties");
break;
case SP_VERB_DIALOG_FILL_STROKE:
- sp_object_properties_dialog();
+ dt->_dlg_mgr->showDialog("FillAndStroke");
break;
case SP_VERB_DIALOG_SWATCHES:
- show_panel( Inkscape::UI::Dialogs::SwatchesPanel::getInstance(), "dialogs.swatches", SP_VERB_DIALOG_SWATCHES);
+ dt->_dlg_mgr->showDialog("Swatches");
break;
case SP_VERB_DIALOG_TRANSFORM:
dt->_dlg_mgr->showDialog("Transformation");
break;
case SP_VERB_DIALOG_FIND:
sp_find_dialog();
+// Please test the new find dialog if you have time:
+// dt->_dlg_mgr->showDialog("Find");
break;
case SP_VERB_DIALOG_DEBUG:
dt->_dlg_mgr->showDialog("Messages");
case SP_VERB_DIALOG_SCRIPT:
dt->_dlg_mgr->showDialog("Script");
break;
+ case SP_VERB_DIALOG_UNDO_HISTORY:
+ dt->_dlg_mgr->showDialog("UndoHistory");
+ break;
case SP_VERB_DIALOG_TOGGLE:
inkscape_dialogs_toggle();
break;
sp_item_dialog();
break;
#ifdef WITH_INKBOARD
- case SP_VERB_DIALOG_WHITEBOARD_CONNECT: {
- // We need to ensure that this dialog is associated with the correct SessionManager,
- // since the user may have opened a new document (and hence swapped SessionManager
- // instances) sometime before this dialog invocation
- Inkscape::UI::Dialog::WhiteboardConnectDialogImpl *dlg = dynamic_cast< Inkscape::UI::Dialog::WhiteboardConnectDialogImpl *>(dt->_dlg_mgr->getDialog("WhiteboardConnect"));
- dlg->setSessionManager();
- dt->_dlg_mgr->showDialog("WhiteboardConnect");
- break;
- }
- case SP_VERB_DIALOG_WHITEBOARD_SHAREWITHUSER: {
- //sp_whiteboard_sharewithuser_dialog(NULL);
- Inkscape::Whiteboard::SessionManager *sm = SP_ACTIVE_DESKTOP->whiteboard_session_manager();
- if (sm->session_data && sm->session_data->status[Inkscape::Whiteboard::LOGGED_IN]) {
- // We need to ensure that this dialog is associated with the correct SessionManager,
- // since the user may have opened a new document (and hence swapped SessionManager
- // instances) sometime before this dialog invocation
- Inkscape::UI::Dialog::WhiteboardShareWithUserDialogImpl *dlg = dynamic_cast< Inkscape::UI::Dialog::WhiteboardShareWithUserDialogImpl *>(dt->_dlg_mgr->getDialog("WhiteboardShareWithUser"));
- dlg->setSessionManager();
- dt->_dlg_mgr->showDialog("WhiteboardShareWithUser");
- } else {
- Gtk::MessageDialog dlg(_("You need to connect to a Jabber server before sharing a document with another user."), true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_CLOSE);
- dlg.run();
- }
- break;
- }
- case SP_VERB_DIALOG_WHITEBOARD_SHAREWITHCHAT: {
- Inkscape::Whiteboard::SessionManager *sm = SP_ACTIVE_DESKTOP->whiteboard_session_manager();
- if (sm->session_data && sm->session_data->status[Inkscape::Whiteboard::LOGGED_IN]) {
- // We need to ensure that this dialog is associated with the correct SessionManager,
- // since the user may have opened a new document (and hence swapped SessionManager
- // instances) sometime before this dialog invocation
- Inkscape::UI::Dialog::WhiteboardShareWithChatroomDialogImpl *dlg = dynamic_cast< Inkscape::UI::Dialog::WhiteboardShareWithChatroomDialogImpl *>(dt->_dlg_mgr->getDialog("WhiteboardShareWithChat"));
- dlg->setSessionManager();
- dt->_dlg_mgr->showDialog("WhiteboardShareWithChat");
- } else {
- Gtk::MessageDialog dlg(_("You need to connect to a Jabber server before sharing a document with a chatroom."), true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_CLOSE);
- dlg.run();
- }
- break;
- }
-
- case SP_VERB_DIALOG_WHITEBOARD_DUMPXMLTRACKER:
- if (SP_ACTIVE_DESKTOP->whiteboard_session_manager()->node_tracker()) {
- SP_ACTIVE_DESKTOP->whiteboard_session_manager()->node_tracker()->dump();
- } else {
- g_log(NULL, G_LOG_LEVEL_DEBUG, _("XML node tracker has not been initialized; nothing to dump"));
- }
- break;
- case SP_VERB_DIALOG_WHITEBOARD_OPENSESSIONFILE: {
- Gtk::FileChooserDialog sessionfiledlg(_("Open session file"), Gtk::FILE_CHOOSER_ACTION_OPEN);
- sessionfiledlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- sessionfiledlg.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
-
- int result = sessionfiledlg.run();
- switch (result) {
- case Gtk::RESPONSE_OK:
- {
- SP_ACTIVE_DESKTOP->whiteboard_session_manager()->clearDocument();
- SP_ACTIVE_DESKTOP->whiteboard_session_manager()->loadSessionFile(sessionfiledlg.get_filename());
- dt->_dlg_mgr->showDialog("SessionPlayer");
- //SP_ACTIVE_DESKTOP->whiteboard_session_manager()->session_player()->start();
- break;
- }
- case Gtk::RESPONSE_CANCEL:
- default:
- break;
- }
+ case SP_VERB_XMPP_CLIENT:
+ {
+ Inkscape::Whiteboard::SessionManager::showClient();
break;
}
-
- case SP_VERB_DIALOG_WHITEBOARD_DISCONNECT_FROM_SESSION:
- {
- Inkscape::Whiteboard::SessionManager *sm = SP_ACTIVE_DESKTOP->whiteboard_session_manager();
- if (sm->session_data && sm->session_data->status[Inkscape::Whiteboard::IN_WHITEBOARD]) {
- SP_ACTIVE_DESKTOP->whiteboard_session_manager()->disconnectFromDocument();
- }
- break;
- }
- case SP_VERB_DIALOG_WHITEBOARD_DISCONNECT_FROM_SERVER:
- {
- Inkscape::Whiteboard::SessionManager *sm = SP_ACTIVE_DESKTOP->whiteboard_session_manager();
- if (sm->session_data && sm->session_data->status[Inkscape::Whiteboard::LOGGED_IN]) {
- SP_ACTIVE_DESKTOP->whiteboard_session_manager()->disconnectFromServer();
- }
- break;
- }
#endif
case SP_VERB_DIALOG_INPUT:
sp_input_dialog();
dt->_dlg_mgr->showDialog("ExtensionEditor");
break;
case SP_VERB_DIALOG_LAYERS:
- show_panel( Inkscape::UI::Dialogs::LayersPanel::getInstance(), "dialogs.layers", SP_VERB_DIALOG_LAYERS );
+ dt->_dlg_mgr->showDialog("LayersPanel");
+ break;
+ case SP_VERB_DIALOG_LIVE_PATH_EFFECT:
+ dt->_dlg_mgr->showDialog("LivePathEffect");
+ break;
+ case SP_VERB_DIALOG_FILTER_EFFECTS:
+ dt->_dlg_mgr->showDialog("FilterEffectsDialog");
break;
default:
break;
/** \brief Decode the verb code and take appropriate action */
void
-HelpVerb::perform(SPAction *action, void *data, void *pdata)
+HelpVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
g_assert(dt->_dlg_mgr != NULL);
switch (reinterpret_cast<std::size_t>(data)) {
- case SP_VERB_HELP_KEYS:
- /* TRANSLATORS: If you have translated the keys.svg file to your language, then
- translate this string as "keys.LANG.svg" (where LANG is your language code);
- otherwise leave as "keys.svg". */
- sp_help_open_screen(_("keys.svg"));
- break;
case SP_VERB_HELP_ABOUT:
sp_help_about();
break;
case SP_VERB_HELP_ABOUT_EXTENSIONS: {
- Inkscape::UI::Dialogs::ExtensionsPanel *panel = new Inkscape::UI::Dialogs::ExtensionsPanel();
- panel->set_full(true);
- show_panel( *panel, "dialogs.aboutextensions", SP_VERB_HELP_ABOUT_EXTENSIONS );
+ // Inkscape::UI::Dialogs::ExtensionsPanel *panel = new Inkscape::UI::Dialogs::ExtensionsPanel();
+ // panel->set_full(true);
+ // show_panel( *panel, "dialogs.aboutextensions", SP_VERB_HELP_ABOUT_EXTENSIONS );
break;
}
*/
case SP_VERB_HELP_MEMORY:
+ inkscape_dialogs_unhide();
dt->_dlg_mgr->showDialog("Memory");
break;
default:
/** \brief Decode the verb code and take appropriate action */
void
-TutorialVerb::perform(SPAction *action, void *data, void *pdata)
+TutorialVerb::perform(SPAction */*action*/, void *data, void */*pdata*/)
{
switch (reinterpret_cast<std::size_t>(data)) {
case SP_VERB_TUTORIAL_BASIC:
* is called.
*/
SPActionEventVector FileVerb::vector =
- {{NULL},FileVerb::perform, NULL, NULL, NULL};
+ {{NULL},FileVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined edit verb is
* called.
*/
SPActionEventVector EditVerb::vector =
- {{NULL},EditVerb::perform, NULL, NULL, NULL};
+ {{NULL},EditVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined selection
* verb is called
*/
SPActionEventVector SelectionVerb::vector =
- {{NULL},SelectionVerb::perform, NULL, NULL, NULL};
+ {{NULL},SelectionVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined layer
* verb is called
*/
SPActionEventVector LayerVerb::vector =
- {{NULL}, LayerVerb::perform, NULL, NULL, NULL};
+ {{NULL}, LayerVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined object
* editing verb is called
*/
SPActionEventVector ObjectVerb::vector =
- {{NULL},ObjectVerb::perform, NULL, NULL, NULL};
+ {{NULL},ObjectVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined context
* verb is called
*/
SPActionEventVector ContextVerb::vector =
- {{NULL},ContextVerb::perform, NULL, NULL, NULL};
+ {{NULL},ContextVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined zoom verb
* is called
*/
SPActionEventVector ZoomVerb::vector =
- {{NULL},ZoomVerb::perform, NULL, NULL, NULL};
+ {{NULL},ZoomVerb::perform, NULL, NULL, NULL, NULL};
/**
* is called
*/
SPActionEventVector DialogVerb::vector =
- {{NULL},DialogVerb::perform, NULL, NULL, NULL};
+ {{NULL},DialogVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined help verb
* is called
*/
SPActionEventVector HelpVerb::vector =
- {{NULL},HelpVerb::perform, NULL, NULL, NULL};
+ {{NULL},HelpVerb::perform, NULL, NULL, NULL, NULL};
/**
* Action vector to define functions called if a staticly defined tutorial verb
* is called
*/
SPActionEventVector TutorialVerb::vector =
- {{NULL},TutorialVerb::perform, NULL, NULL, NULL};
+ {{NULL},TutorialVerb::perform, NULL, NULL, NULL, NULL};
+
+/**
+ * Action vector to define functions called if a staticly defined tutorial verb
+ * is called
+ */
+SPActionEventVector TextVerb::vector =
+ {{NULL},TextVerb::perform, NULL, NULL, NULL, NULL};
+
/* *********** Effect Last ********** */
* The vector to attach in the last effect verb.
*/
SPActionEventVector EffectLastVerb::vector =
- {{NULL},EffectLastVerb::perform, NULL, NULL, NULL};
+ {{NULL},EffectLastVerb::perform, NULL, NULL, NULL, NULL};
/** \brief Create an action for a \c EffectLastVerb
\param view Which view the action should be created for
/** \brief Decode the verb code and take appropriate action */
void
-EffectLastVerb::perform(SPAction *action, void *data, void *pdata)
+EffectLastVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
/* These aren't used, but are here to remind people not to use
the CURRENT_DOCUMENT macros unless they really have to. */
* The vector to attach in the fit canvas verb.
*/
SPActionEventVector FitCanvasVerb::vector =
- {{NULL},FitCanvasVerb::perform, NULL, NULL, NULL};
+ {{NULL},FitCanvasVerb::perform, NULL, NULL, NULL, NULL};
/** \brief Create an action for a \c FitCanvasVerb
\param view Which view the action should be created for
/** \brief Decode the verb code and take appropriate action */
void
-FitCanvasVerb::perform(SPAction *action, void *data, void *pdata)
+FitCanvasVerb::perform(SPAction *action, void *data, void */*pdata*/)
{
SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
if (!dt) return;
SPDocument *doc = sp_desktop_document(dt);
if (!doc) return;
-
+
switch ((long) data) {
case SP_VERB_FIT_CANVAS_TO_SELECTION:
fit_canvas_to_selection(dt);
/* *********** End Fit Canvas ********** */
+/* *********** Lock'N'Hide ********** */
+/** \brief A class to represent the object unlocking and unhiding verbs */
+class LockAndHideVerb : public Verb {
+private:
+ static void perform(SPAction *action, void *mydata, void *otherdata);
+ static SPActionEventVector vector;
+protected:
+ virtual SPAction *make_action(Inkscape::UI::View::View *view);
+public:
+ /** \brief Use the Verb initializer with the same parameters. */
+ LockAndHideVerb(unsigned int const code,
+ gchar const *id,
+ gchar const *name,
+ gchar const *tip,
+ gchar const *image) :
+ Verb(code, id, name, tip, image)
+ {
+ set_default_sensitive(true);
+ }
+}; /* LockAndHideVerb class */
+
+/**
+ * The vector to attach in the lock'n'hide verb.
+ */
+SPActionEventVector LockAndHideVerb::vector =
+ {{NULL},LockAndHideVerb::perform, NULL, NULL, NULL, NULL};
+/** \brief Create an action for a \c LockAndHideVerb
+ \param view Which view the action should be created for
+ \return The built action.
+
+ Calls \c make_action_helper with the \c vector.
+*/
+SPAction *
+LockAndHideVerb::make_action(Inkscape::UI::View::View *view)
+{
+ SPAction *action = make_action_helper(view, &vector);
+ return action;
+}
+
+/** \brief Decode the verb code and take appropriate action */
+void
+LockAndHideVerb::perform(SPAction *action, void *data, void */*pdata*/)
+{
+ SPDesktop *dt = static_cast<SPDesktop*>(sp_action_get_view(action));
+ if (!dt) return;
+ SPDocument *doc = sp_desktop_document(dt);
+ if (!doc) return;
+
+ switch ((long) data) {
+ case SP_VERB_UNLOCK_ALL:
+ unlock_all(dt);
+ sp_document_done(doc, SP_VERB_UNLOCK_ALL, _("Unlock all objects in the current layer"));
+ break;
+ case SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS:
+ unlock_all_in_all_layers(dt);
+ sp_document_done(doc, SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS, _("Unlock all objects in all layers"));
+ break;
+ case SP_VERB_UNHIDE_ALL:
+ unhide_all(dt);
+ sp_document_done(doc, SP_VERB_UNHIDE_ALL, _("Unhide all objects in the current layer"));
+ break;
+ case SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS:
+ unhide_all_in_all_layers(dt);
+ sp_document_done(doc, SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS, _("Unhide all objects in all layers"));
+ break;
+ default:
+ return;
+ }
+
+ return;
+}
+/* *********** End Lock'N'Hide ********** */
/* these must be in the same order as the SP_VERB_* enum in "verbs.h" */
GTK_STOCK_SAVE ),
new FileVerb(SP_VERB_FILE_SAVE_AS, "FileSaveAs", N_("Save _As..."),
N_("Save document under a new name"), GTK_STOCK_SAVE_AS ),
+ new FileVerb(SP_VERB_FILE_SAVE_A_COPY, "FileSaveACopy", N_("Save a Cop_y..."),
+ N_("Save a copy of the document under a new name"), NULL ),
new FileVerb(SP_VERB_FILE_PRINT, "FilePrint", N_("_Print..."), N_("Print document"),
GTK_STOCK_PRINT ),
// TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions)
N_("Import a bitmap or SVG image into this document"), "file_import"),
new FileVerb(SP_VERB_FILE_EXPORT, "FileExport", N_("_Export Bitmap..."),
N_("Export this document or a selection as a bitmap image"), "file_export"),
+ new FileVerb(SP_VERB_FILE_IMPORT_FROM_OCAL, "FileImportFromOCAL", N_("Import From Open Clip Art Library"), N_("Import a document from Open Clip Art Library"), "ocal_import"),
+ new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), "ocal_export"),
new FileVerb(SP_VERB_FILE_NEXT_DESKTOP, "NextWindow", N_("N_ext Window"),
N_("Switch to the next document window"), "window_next"),
new FileVerb(SP_VERB_FILE_PREV_DESKTOP, "PrevWindow", N_("P_revious Window"),
N_("Scale each selected object vertically to match the height of the copied object"), NULL),
new EditVerb(SP_VERB_EDIT_PASTE_IN_PLACE, "EditPasteInPlace", N_("Paste _In Place"),
N_("Paste objects from clipboard to the original location"), "selection_paste_in_place"),
+ new EditVerb(SP_VERB_EDIT_PASTE_LIVEPATHEFFECT, "EditPasteLivePathEffect", N_("Paste Path _Effect"),
+ N_("Apply the path effect of the copied object to selection"), NULL),
new EditVerb(SP_VERB_EDIT_DELETE, "EditDelete", N_("_Delete"),
N_("Delete selection"), GTK_STOCK_DELETE),
new EditVerb(SP_VERB_EDIT_DUPLICATE, "EditDuplicate", N_("Duplic_ate"),
N_("Create a clone (a copy linked to the original) of selected object"), "edit_clone"),
new EditVerb(SP_VERB_EDIT_UNLINK_CLONE, "EditUnlinkClone", N_("Unlin_k Clone"),
N_("Cut the selected clone's link to its original, turning it into a standalone object"), "edit_unlink_clone"),
- new EditVerb(SP_VERB_EDIT_CLONE_ORIGINAL, "EditCloneOriginal", N_("Select _Original"),
- N_("Select the object to which the selected clone is linked"), NULL),
+ new EditVerb(SP_VERB_EDIT_CLONE_SELECT_ORIGINAL, "EditCloneSelectOriginal", N_("Select _Original"),
+ N_("Select the object to which the selected clone is linked"), "edit_select_original"),
+ // TRANSLATORS: Convert selection to a line marker
+ new EditVerb(SP_VERB_EDIT_SELECTION_2_MARKER, "ObjectsToMarker", N_("Objects to _Marker"),
+ N_("Convert selection to a line marker"), NULL),
// TRANSLATORS: Convert selection to a rectangle with tiled pattern fill
new EditVerb(SP_VERB_EDIT_TILE, "ObjectsToPattern", N_("Objects to Patter_n"),
N_("Convert selection to a rectangle with tiled pattern fill"), NULL),
new EditVerb(SP_VERB_EDIT_SELECT_ALL, "EditSelectAll", N_("Select Al_l"),
N_("Select all objects or all nodes"), "selection_select_all"),
new EditVerb(SP_VERB_EDIT_SELECT_ALL_IN_ALL_LAYERS, "EditSelectAllInAllLayers", N_("Select All in All La_yers"),
- N_("Select all objects in all visible and unlocked layers"), NULL),
+ N_("Select all objects in all visible and unlocked layers"), "selection_select_all_in_all_layers"),
new EditVerb(SP_VERB_EDIT_INVERT, "EditInvert", N_("In_vert Selection"),
- N_("Invert selection (unselect what is selected and select everything else)"), NULL),
+ N_("Invert selection (unselect what is selected and select everything else)"), "selection_invert"),
new EditVerb(SP_VERB_EDIT_INVERT_IN_ALL_LAYERS, "EditInvertInAllLayers", N_("Invert in All Layers"),
N_("Invert selection in all visible and unlocked layers"), NULL),
+ new EditVerb(SP_VERB_EDIT_SELECT_NEXT, "EditSelectNext", N_("Select Next"),
+ N_("Select next object or node"), NULL),
+ new EditVerb(SP_VERB_EDIT_SELECT_PREV, "EditSelectPrev", N_("Select Previous"),
+ N_("Select previous object or node"), NULL),
new EditVerb(SP_VERB_EDIT_DESELECT, "EditDeselect", N_("D_eselect"),
- N_("Deselect any selected objects or nodes"), NULL),
+ N_("Deselect any selected objects or nodes"), "selection_deselect"),
+ new EditVerb(SP_VERB_EDIT_NEXT_PATHEFFECT_PARAMETER, "EditNextPathEffectParameter", N_("Next Path Effect Parameter"),
+ N_("Show next Path Effect parameter for editing"), NULL),
/* Selection */
new SelectionVerb(SP_VERB_SELECTION_TO_FRONT, "SelectionToFront", N_("Raise to _Top"),
N_("Ungroup selected groups"), "selection_ungroup"),
new SelectionVerb(SP_VERB_SELECTION_TEXTTOPATH, "SelectionTextToPath", N_("_Put on Path"),
- N_("Put text on path"), NULL),
+ N_("Put text on path"), "put_on_path"),
new SelectionVerb(SP_VERB_SELECTION_TEXTFROMPATH, "SelectionTextFromPath", N_("_Remove from Path"),
- N_("Remove text from path"), NULL),
+ N_("Remove text from path"), "remove_from_path"),
new SelectionVerb(SP_VERB_SELECTION_REMOVE_KERNS, "SelectionTextRemoveKerns", N_("Remove Manual _Kerns"),
// TRANSLATORS: "glyph": An image used in the visual representation of characters;
// roughly speaking, how a character looks. A font is a set of glyphs.
- N_("Remove all manual kerns and glyph rotations from a text object"), NULL),
+ N_("Remove all manual kerns and glyph rotations from a text object"), "remove_manual_kerns"),
new SelectionVerb(SP_VERB_SELECTION_UNION, "SelectionUnion", N_("_Union"),
N_("Create union of selected paths"), "union"),
/* Object */
new ObjectVerb(SP_VERB_OBJECT_ROTATE_90_CW, "ObjectRotate90", N_("Rotate _90° CW"),
- N_("Rotate selection 90° clockwise"), "object_rotate_90_CW"),
+ // This is shared between tooltips and statusbar, so they
+ // must use UTF-8, not HTML entities for special characters.
+ N_("Rotate selection 90\xc2\xb0 clockwise"), "object_rotate_90_CW"),
new ObjectVerb(SP_VERB_OBJECT_ROTATE_90_CCW, "ObjectRotate90CCW", N_("Rotate 9_0° CCW"),
- N_("Rotate selection 90° counter-clockwise"), "object_rotate_90_CCW"),
+ // This is shared between tooltips and statusbar, so they
+ // must use UTF-8, not HTML entities for special characters.
+ N_("Rotate selection 90\xc2\xb0 counter-clockwise"), "object_rotate_90_CCW"),
new ObjectVerb(SP_VERB_OBJECT_FLATTEN, "ObjectRemoveTransform", N_("Remove _Transformations"),
N_("Remove transformations from object"), "object_reset"),
new ObjectVerb(SP_VERB_OBJECT_TO_CURVE, "ObjectToPath", N_("_Object to Path"),
N_("Convert selected object to path"), "object_tocurve"),
new ObjectVerb(SP_VERB_OBJECT_FLOW_TEXT, "ObjectFlowText", N_("_Flow into Frame"),
- N_("Put text into a frame (path or shape), creating a flowed text linked to the frame object"), NULL),
+ N_("Put text into a frame (path or shape), creating a flowed text linked to the frame object"), "flow_into_frame"),
new ObjectVerb(SP_VERB_OBJECT_UNFLOW_TEXT, "ObjectUnFlowText", N_("_Unflow"),
- N_("Remove text from frame (creates a single-line text object)"), NULL),
+ N_("Remove text from frame (creates a single-line text object)"), "unflow"),
new ObjectVerb(SP_VERB_OBJECT_FLOWTEXT_TO_TEXT, "ObjectFlowtextToText", N_("_Convert to Text"),
- N_("Convert flowed text to regular text object (preserves appearance)"), NULL),
+ N_("Convert flowed text to regular text object (preserves appearance)"), "convert_to_text"),
new ObjectVerb(SP_VERB_OBJECT_FLIP_HORIZONTAL, "ObjectFlipHorizontally",
N_("Flip _Horizontal"), N_("Flip selected objects horizontally"),
"object_flip_hor"),
new ContextVerb(SP_VERB_CONTEXT_SELECT, "ToolSelector", N_("Select"),
N_("Select and transform objects"), "draw_select"),
new ContextVerb(SP_VERB_CONTEXT_NODE, "ToolNode", N_("Node Edit"),
- N_("Edit path nodes or control handles"), "draw_node"),
+ N_("Edit paths by nodes"), "draw_node"),
+ new ContextVerb(SP_VERB_CONTEXT_TWEAK, "ToolTweak", N_("Tweak"),
+ N_("Tweak objects by sculpting or painting"), "draw_tweak"),
new ContextVerb(SP_VERB_CONTEXT_RECT, "ToolRect", N_("Rectangle"),
N_("Create rectangles and squares"), "draw_rect"),
+ new ContextVerb(SP_VERB_CONTEXT_3DBOX, "Tool3DBox", N_("3D Box"),
+ N_("Create 3D boxes"), "draw_3dbox"),
new ContextVerb(SP_VERB_CONTEXT_ARC, "ToolArc", N_("Ellipse"),
N_("Create circles, ellipses, and arcs"), "draw_arc"),
new ContextVerb(SP_VERB_CONTEXT_STAR, "ToolStar", N_("Star"),
N_("Draw freehand lines"), "draw_freehand"),
new ContextVerb(SP_VERB_CONTEXT_PEN, "ToolPen", N_("Pen"),
N_("Draw Bezier curves and straight lines"), "draw_pen"),
- new ContextVerb(SP_VERB_CONTEXT_CALLIGRAPHIC, "ToolCalligrphic", N_("Calligraphy"),
- N_("Draw calligraphic lines"), "draw_calligraphic"),
+ new ContextVerb(SP_VERB_CONTEXT_CALLIGRAPHIC, "ToolCalligraphic", N_("Calligraphy"),
+ N_("Draw calligraphic or brush strokes"), "draw_calligraphic"),
new ContextVerb(SP_VERB_CONTEXT_TEXT, "ToolText", N_("Text"),
N_("Create and edit text objects"), "draw_text"),
new ContextVerb(SP_VERB_CONTEXT_GRADIENT, "ToolGradient", N_("Gradient"),
new ContextVerb(SP_VERB_CONTEXT_ZOOM, "ToolZoom", N_("Zoom"),
N_("Zoom in or out"), "draw_zoom"),
new ContextVerb(SP_VERB_CONTEXT_DROPPER, "ToolDropper", N_("Dropper"),
- N_("Pick averaged colors from image"), "draw_dropper"),
+ N_("Pick colors from image"), "draw_dropper"),
new ContextVerb(SP_VERB_CONTEXT_CONNECTOR, "ToolConnector", N_("Connector"),
- N_("Create connectors"), "draw_connector"),
+ N_("Create diagram connectors"), "draw_connector"),
+ new ContextVerb(SP_VERB_CONTEXT_PAINTBUCKET, "ToolPaintBucket", N_("Paint Bucket"),
+ N_("Fill bounded areas"), "draw_paintbucket"),
/* Tool prefs */
new ContextVerb(SP_VERB_CONTEXT_SELECT_PREFS, "SelectPrefs", N_("Selector Preferences"),
N_("Open Preferences for the Selector tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_NODE_PREFS, "NodePrefs", N_("Node Tool Preferences"),
N_("Open Preferences for the Node tool"), NULL),
+ new ContextVerb(SP_VERB_CONTEXT_TWEAK_PREFS, "TweakPrefs", N_("Tweak Tool Preferences"),
+ N_("Open Preferences for the Tweak tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_RECT_PREFS, "RectPrefs", N_("Rectangle Preferences"),
N_("Open Preferences for the Rectangle tool"), NULL),
+ new ContextVerb(SP_VERB_CONTEXT_3DBOX_PREFS, "3DBoxPrefs", N_("3D Box Preferences"),
+ N_("Open Preferences for the 3D Box tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_ARC_PREFS, "ArcPrefs", N_("Ellipse Preferences"),
N_("Open Preferences for the Ellipse tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_STAR_PREFS, "StarPrefs", N_("Star Preferences"),
N_("Open Preferences for the Dropper tool"), NULL),
new ContextVerb(SP_VERB_CONTEXT_CONNECTOR_PREFS, "ConnectorPrefs", N_("Connector Preferences"),
N_("Open Preferences for the Connector tool"), NULL),
+ new ContextVerb(SP_VERB_CONTEXT_PAINTBUCKET_PREFS, "PaintBucketPrefs", N_("Paint Bucket Preferences"),
+ N_("Open Preferences for the Paint Bucket tool"), NULL),
/* Zoom/View */
new ZoomVerb(SP_VERB_ZOOM_IN, "ZoomIn", N_("Zoom In"), N_("Zoom in"), "zoom_in"),
N_("Switch to normal display mode"), NULL),
new ZoomVerb(SP_VERB_VIEW_MODE_OUTLINE, "ViewModeOutline", N_("_Outline"),
N_("Switch to outline (wireframe) display mode"), NULL),
+ new ZoomVerb(SP_VERB_VIEW_MODE_TOGGLE, "ViewModeToggle", N_("_Toggle"),
+ N_("Toggle between normal and outline display modes"), NULL),
- new ZoomVerb(SP_VERB_VIEW_ICON_PREVIEW, "ViewIconPreview", N_("Ico_n Preview"),
- N_("Open a window to preview objects at different icon resolutions"), NULL/*"view_icon_preview"*/),
+ new ZoomVerb(SP_VERB_VIEW_CMS_TOGGLE, "ViewCmsToggle", N_("Display Adjustment"),
+ N_("Toggle CMS display adjustment on and off"), "swatches"),
+
+ new ZoomVerb(SP_VERB_VIEW_ICON_PREVIEW, "ViewIconPreview", N_("Ico_n Preview..."),
+ N_("Open a window to preview objects at different icon resolutions"), "view_icon_preview"),
new ZoomVerb(SP_VERB_ZOOM_PAGE, "ZoomPage", N_("_Page"),
N_("Zoom to fit page in window"), "zoom_page"),
new ZoomVerb(SP_VERB_ZOOM_PAGE_WIDTH, "ZoomPageWidth", N_("Page _Width"),
N_("Edit global Inkscape preferences"), GTK_STOCK_PREFERENCES ),
new DialogVerb(SP_VERB_DIALOG_NAMEDVIEW, "DialogDocumentProperties", N_("_Document Properties..."),
N_("Edit properties of this document (to be saved with the document)"), GTK_STOCK_PROPERTIES ),
- new DialogVerb(SP_VERB_DIALOG_METADATA, "DialogMetadata", N_("_Document Metadata..."),
- N_("Edit document metadata (to be saved with the document)"), NULL ),
+ new DialogVerb(SP_VERB_DIALOG_METADATA, "DialogMetadata", N_("Document _Metadata..."),
+ N_("Edit document metadata (to be saved with the document)"), "document_metadata" ),
new DialogVerb(SP_VERB_DIALOG_FILL_STROKE, "DialogFillStroke", N_("_Fill and Stroke..."),
- N_("Edit objects' style, such as color or stroke width"), "fill_and_stroke"),
+ N_("Edit objects' colors, gradients, stroke width, arrowheads, dash patterns..."), "fill_and_stroke"),
// TRANSLATORS: "Swatches" means: color samples
new DialogVerb(SP_VERB_DIALOG_SWATCHES, "DialogSwatches", N_("S_watches..."),
N_("Select colors from a swatches palette"), GTK_STOCK_SELECT_COLOR),
N_("Precisely control objects' transformations"), "object_trans"),
new DialogVerb(SP_VERB_DIALOG_ALIGN_DISTRIBUTE, "DialogAlignDistribute", N_("_Align and Distribute..."),
N_("Align and distribute objects"), "object_align"),
+ new DialogVerb(SP_VERB_DIALOG_UNDO_HISTORY, "DialogUndoHistory", N_("Undo _History..."),
+ N_("Undo History"), "edit_undo_history"),
new DialogVerb(SP_VERB_DIALOG_TEXT, "DialogText", N_("_Text and Font..."),
N_("View and select font family, font size and other text properties"), "object_font"),
new DialogVerb(SP_VERB_DIALOG_XML_EDITOR, "DialogXMLEditor", N_("_XML Editor..."),
new DialogVerb(SP_VERB_DIALOG_FIND, "DialogFind", N_("_Find..."),
N_("Find objects in document"), GTK_STOCK_FIND ),
new DialogVerb(SP_VERB_DIALOG_DEBUG, "DialogDebug", N_("_Messages..."),
- N_("View debug messages"), NULL),
+ N_("View debug messages"), "messages"),
new DialogVerb(SP_VERB_DIALOG_SCRIPT, "DialogScript", N_("S_cripts..."),
- N_("Run scripts"), NULL),
+ N_("Run scripts"), "scripts"),
new DialogVerb(SP_VERB_DIALOG_TOGGLE, "DialogsToggle", N_("Show/Hide D_ialogs"),
N_("Show or hide all open dialogs"), "dialog_toggle"),
- // TRANSLATORS: "Tile Clones" means: "Create tiled clones"
new DialogVerb(SP_VERB_DIALOG_CLONETILER, "DialogClonetiler", N_("Create Tiled Clones..."),
- N_("Create multiple clones of selected object, arranging them into a pattern or scattering"), NULL),
+ N_("Create multiple clones of selected object, arranging them into a pattern or scattering"), "edit_create_tiled_clones"),
new DialogVerb(SP_VERB_DIALOG_ITEM, "DialogObjectProperties", N_("_Object Properties..."),
N_("Edit the ID, locked and visible status, and other object properties"), "dialog_item_properties"),
#ifdef WITH_INKBOARD
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_CONNECT, "DialogWhiteboardConnect",
- N_("_Connect to Jabber server..."), N_("Connect to a Jabber server"), NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_SHAREWITHUSER, "DialogWhiteboardShareWithUser",
- N_("Share with _user..."), N_("Establish a whiteboard session with another Jabber user"), NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_SHAREWITHCHAT, "DialogWhiteboardShareWithChat",
- N_("Share with _chatroom..."), N_("Join a chatroom to start a new whiteboard session or join one in progress"), NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_DUMPXMLTRACKER, "DialogWhiteboardDumpXMLTracker",
- N_("_Dump XML node tracker"), N_("Dump the contents of the XML tracker to the console"), NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_OPENSESSIONFILE, "DialogWhiteboardOpenSessionFile",
- N_("_Open session file..."), N_("Open and browse through records of past whiteboard sessions"), NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_SESSIONPLAYBACK, "DialogWhiteboardSessionPlayback",
- N_("Session file playback"), "", NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_DISCONNECT_FROM_SESSION, "DialogWhiteboardDisconnectSession",
- N_("_Disconnect from session"), "", NULL),
- new DialogVerb(SP_VERB_DIALOG_WHITEBOARD_DISCONNECT_FROM_SERVER, "DialogWhiteboardDisconnectServer",
- N_("Disconnect from _server"), "", NULL),
+ new DialogVerb(SP_VERB_XMPP_CLIENT, "DialogXmppClient",
+ N_("_Instant Messaging..."), N_("Jabber Instant Messaging Client"), NULL),
#endif
new DialogVerb(SP_VERB_DIALOG_INPUT, "DialogInput", N_("_Input Devices..."),
- N_("Configure extended input devices, such as a graphics tablet"), NULL),
+ N_("Configure extended input devices, such as a graphics tablet"), "input_devices"),
new DialogVerb(SP_VERB_DIALOG_EXTENSIONEDITOR, "org.inkscape.dialogs.extensioneditor", N_("_Extensions..."),
N_("Query information about extensions"), NULL),
- new DialogVerb(SP_VERB_DIALOG_LAYERS, "DialogLayers", N_("_Layers..."),
- N_("View Layers"), NULL),
+ new DialogVerb(SP_VERB_DIALOG_LAYERS, "DialogLayers", N_("Layer_s..."),
+ N_("View Layers"), "layers"),
+ new DialogVerb(SP_VERB_DIALOG_LIVE_PATH_EFFECT, "DialogLivePathEffect", N_("Path Effects..."),
+ N_("Manage path effects"), NULL),
+ new DialogVerb(SP_VERB_DIALOG_FILTER_EFFECTS, "DialogFilterEffects", N_("Filter Effects..."),
+ N_("Manage SVG filter effects"), NULL),
/* Help */
- new HelpVerb(SP_VERB_HELP_KEYS, "HelpKeys", N_("_Keys and Mouse"),
- N_("Keys and mouse shortcuts reference"), "help_keys"),
new HelpVerb(SP_VERB_HELP_ABOUT_EXTENSIONS, "HelpAboutExtensions", N_("About E_xtensions"),
N_("Information on Inkscape extensions"), NULL),
new HelpVerb(SP_VERB_HELP_MEMORY, "HelpAboutMemory", N_("About _Memory"),
- N_("Memory usage information"), NULL),
+ N_("Memory usage information"), "about_memory"),
new HelpVerb(SP_VERB_HELP_ABOUT, "HelpAbout", N_("_About Inkscape"),
N_("Inkscape version, authors, license"), /*"help_about"*/"inkscape_options"),
//new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"),
/* Effect */
new EffectLastVerb(SP_VERB_EFFECT_LAST, "EffectLast", N_("Previous Effect"),
- N_("Repeat the last effect with the same settings"), NULL/*"tutorial_tips"*/),
+ N_("Repeat the last effect with the same settings"), NULL),
new EffectLastVerb(SP_VERB_EFFECT_LAST_PREF, "EffectLastPref", N_("Previous Effect Settings..."),
- N_("Repeat the last effect with new settings"), NULL/*"tutorial_tips"*/),
-
- /* Fit Canvas */
- new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION, "FitCanvasToSelection", N_("Fit Canvas to Selection"),
- N_("Fit the canvas to the current selection"), NULL),
- new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_DRAWING, "FitCanvasToDrawing", N_("Fit Canvas to Drawing"),
- N_("Fit the canvas to the drawing"), NULL),
- new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, "FitCanvasToSelectionOrDrawing", N_("Fit Canvas to Selection or Drawing"),
- N_("Fit the canvas to the current selection or the drawing if there is no selection"), NULL),
-
+ N_("Repeat the last effect with new settings"), NULL),
+
+ /* Fit Page */
+ new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION, "FitCanvasToSelection", N_("Fit Page to Selection"),
+ N_("Fit the page to the current selection"), NULL),
+ new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_DRAWING, "FitCanvasToDrawing", N_("Fit Page to Drawing"),
+ N_("Fit the page to the drawing"), NULL),
+ new FitCanvasVerb(SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, "FitCanvasToSelectionOrDrawing", N_("Fit Page to Selection or Drawing"),
+ N_("Fit the page to the current selection or the drawing if there is no selection"), NULL),
+ /* LockAndHide */
+ new LockAndHideVerb(SP_VERB_UNLOCK_ALL, "UnlockAll", N_("Unlock All"),
+ N_("Unlock all objects in the current layer"), NULL),
+ new LockAndHideVerb(SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS, "UnlockAllInAllLayers", N_("Unlock All in All Layers"),
+ N_("Unlock all objects in all layers"), NULL),
+ new LockAndHideVerb(SP_VERB_UNHIDE_ALL, "UnhideAll", N_("Unhide All"),
+ N_("Unhide all objects in the current layer"), NULL),
+ new LockAndHideVerb(SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS, "UnhideAllInAllLayers", N_("Unhide All in All Layers"),
+ N_("Unhide all objects in all layers"), NULL),
/* Footer */
new Verb(SP_VERB_LAST, " '\"invalid id", NULL, NULL, NULL)
};
+void
+Verb::list (void) {
+ // Go through the dynamic verb table
+ for (VerbTable::iterator iter = _verbs.begin(); iter != _verbs.end(); iter++) {
+ Verb * verb = iter->second;
+ if (verb->get_code() == SP_VERB_INVALID ||
+ verb->get_code() == SP_VERB_NONE ||
+ verb->get_code() == SP_VERB_LAST) {
+ continue;
+ }
+
+ printf("%s: %s\n", verb->get_id(), verb->get_tip()? verb->get_tip() : verb->get_name());
+ }
+
+ return;
+};
+
} /* namespace Inkscape */
/*