diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp
index 42f09e99839d02fef0f7088784d1b6d23b5dac83..3ff79a0d3b2e8efdeb556c9d3b3a42c95bb2dd06 100644 (file)
--- a/src/ui/dialog/find.cpp
+++ b/src/ui/dialog/find.cpp
# include <config.h>
#endif
+#include <gtkmm/widget.h>
#include "find.h"
#include "verbs.h"
#include "selection.h"
#include "desktop-handles.h"
-#include "dialog-events.h"
-#include "../prefs-utils.h"
-#include "../verbs.h"
-#include "../interface.h"
-#include "../sp-text.h"
-#include "../sp-flowtext.h"
-#include "../text-editing.h"
-#include "../sp-tspan.h"
-#include "../selection-chemistry.h"
-#include "../sp-defs.h"
-#include "../sp-rect.h"
-#include "../sp-ellipse.h"
-#include "../sp-star.h"
-#include "../sp-spiral.h"
-#include "../sp-path.h"
-#include "../sp-line.h"
-#include "../sp-polyline.h"
-#include "../sp-item-group.h"
-#include "../sp-use.h"
-#include "../sp-image.h"
-#include "../sp-offset.h"
+#include "dialogs/dialog-events.h"
+#include "prefs-utils.h"
+#include "verbs.h"
+#include "interface.h"
+#include "sp-text.h"
+#include "sp-flowtext.h"
+#include "text-editing.h"
+#include "sp-tspan.h"
+#include "sp-tref.h"
+#include "selection-chemistry.h"
+#include "sp-defs.h"
+#include "sp-rect.h"
+#include "sp-ellipse.h"
+#include "sp-star.h"
+#include "sp-spiral.h"
+#include "sp-path.h"
+#include "sp-line.h"
+#include "sp-polyline.h"
+#include "sp-item-group.h"
+#include "sp-use.h"
+#include "sp-image.h"
+#include "sp-offset.h"
#include <xml/repr.h>
namespace UI {
namespace Dialog {
-Find::Find()
- : Dialog ("dialogs.find", SP_VERB_DIALOG_FIND),
+Find::Find()
+ : UI::Widget::Panel("", "dialogs.find", SP_VERB_DIALOG_FIND),
_entry_text(_("_Text: "), _("Find objects by their text content (exact or partial match)")),
_entry_id(_("_ID: "), _("Find objects by the value of the id attribute (exact or partial match)")),
_entry_style(_("_Style: "), _("Find objects by the value of the style attribute (exact or partial match)")),
_button_clear(_("_Clear"), _("Clear values")),
_button_find(_("_Find"), _("Select objects matching all of the fields you filled in"))
{
- // Top level vbox
- Gtk::VBox *vbox = get_vbox();
- vbox->set_spacing(4);
+ Gtk::Box *contents = _getContents();
+ contents->set_spacing(4);
- vbox->pack_start(_entry_text, true, true);
- vbox->pack_start(_entry_id, true, true);
- vbox->pack_start(_entry_style, true, true);
- vbox->pack_start(_entry_attribute, true, true);
-
- vbox->pack_start(_check_all, true, true);
- vbox->pack_start(_check_all_shapes, true, true);
- vbox->pack_start(_check_rects, true, true);
- vbox->pack_start(_check_ellipses, true, true);
- vbox->pack_start(_check_stars, true, true);
- vbox->pack_start(_check_spirals, true, true);
- vbox->pack_start(_check_paths, true, true);
- vbox->pack_start(_check_texts, true, true);
- vbox->pack_start(_check_groups, true, true);
- vbox->pack_start(_check_clones, true, true);
- vbox->pack_start(_check_images, true, true);
- vbox->pack_start(_check_offsets, true, true);
-
- vbox->pack_start(_check_search_selection, true, true);
- vbox->pack_start(_check_search_layer, true, true);
- vbox->pack_start(_check_include_hidden, true, true);
- vbox->pack_start(_check_include_locked, true, true);
-
- vbox->pack_start(_button_clear, true, true);
- vbox->pack_start(_button_find, true, true);
-
+ contents->pack_start(_entry_text, true, true);
+ contents->pack_start(_entry_id, true, true);
+ contents->pack_start(_entry_style, true, true);
+ contents->pack_start(_entry_attribute, true, true);
+
+ contents->pack_start(_check_all, true, true);
+ contents->pack_start(_check_all_shapes, true, true);
+ contents->pack_start(_check_rects, true, true);
+ contents->pack_start(_check_ellipses, true, true);
+ contents->pack_start(_check_stars, true, true);
+ contents->pack_start(_check_spirals, true, true);
+ contents->pack_start(_check_paths, true, true);
+ contents->pack_start(_check_texts, true, true);
+ contents->pack_start(_check_groups, true, true);
+ contents->pack_start(_check_clones, true, true);
+ contents->pack_start(_check_images, true, true);
+ contents->pack_start(_check_offsets, true, true);
+
+ contents->pack_start(_check_search_selection, true, true);
+ contents->pack_start(_check_search_layer, true, true);
+ contents->pack_start(_check_include_hidden, true, true);
+ contents->pack_start(_check_include_locked, true, true);
+
+ contents->pack_start(_button_clear, true, true);
+ contents->pack_start(_button_find, true, true);
+
+ // set signals to handle clicks
+ _check_all.signal_clicked().connect(sigc::mem_fun(*this, &Find::onToggleAlltypes));
+ _check_all_shapes.signal_clicked().connect(sigc::mem_fun(*this, &Find::onToggleShapes));
_button_clear.signal_clicked().connect(sigc::mem_fun(*this, &Find::onClear));
_button_find.signal_clicked().connect(sigc::mem_fun(*this, &Find::onFind));
- set_default (_button_find); // activatable by Enter
-
-
+ _button_find.set_flags(Gtk::CAN_DEFAULT);
+ // set_default (_button_find); // activatable by Enter
+ _entry_text.getEntry()->grab_focus();
show_all_children();
+ onClear();
}
Find::~Find()
bool
Find::item_type_match (SPItem *item)
{
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ SPDesktop *desktop = getDesktop();
if (SP_IS_RECT(item)) {
return (_check_all_shapes.get_active() || _check_rects.get_active());
} else if (SP_IS_PATH(item) || SP_IS_LINE(item) || SP_IS_POLYLINE(item)) {
return (_check_paths.get_active());
- } else if (SP_IS_TEXT(item) || SP_IS_TSPAN(item) || SP_IS_STRING(item)) {
+ } else if (SP_IS_TEXT(item) || SP_IS_TSPAN(item) || SP_IS_TREF(item) || SP_IS_STRING(item)) {
return (_check_texts.get_active());
} else if (SP_IS_GROUP(item) && !desktop->isLayer(item) ) { // never select layers!
GSList *
Find::all_items (SPObject *r, GSList *l, bool hidden, bool locked)
{
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ SPDesktop *desktop = getDesktop();
if (SP_IS_DEFS(r))
return l; // we're not interested in items in defs
GSList *
Find::all_selection_items (Inkscape::Selection *s, GSList *l, SPObject *ancestor, bool hidden, bool locked)
{
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ SPDesktop *desktop = getDesktop();
- for (GSList *i = (GSList *) s->itemList(); i != NULL; i = i->next) {
+ for (GSList *i = (GSList *) s->itemList(); i != NULL; i = i->next) {
if (SP_IS_ITEM (i->data) && !SP_OBJECT_IS_CLONED (i->data) && !desktop->isLayer(SP_ITEM(i->data))) {
if (!ancestor || ancestor->isAncestorOf(SP_OBJECT (i->data))) {
if ((hidden || !desktop->itemIsHidden(SP_ITEM(i->data))) && (locked || !SP_ITEM(i->data)->isLocked())) {
void
Find::onFind()
{
- SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+ SPDesktop *desktop = getDesktop();
bool hidden = _check_include_hidden.get_active();
bool locked = _check_include_locked.get_active();
}
}
+void
+Find::onToggleAlltypes ()
+{
+ if (_check_all.get_active()) {
+ // explicit toggle to make sure its handler gets called, no matter what was the original state
+ _check_all_shapes.toggled();
+ _check_all_shapes.set_active();
+ _check_all_shapes.hide();
+ _check_paths.hide();
+ _check_texts.hide();
+ _check_groups.hide();
+ _check_clones.hide();
+ _check_images.hide();
+ _check_offsets.hide();
+ } else {
+ // explicit toggle to make sure its handler gets called, no matter what was the original state
+ _check_all_shapes.toggled();
+ _check_all_shapes.set_active();
+ _check_all_shapes.show();
+
+ _check_paths.set_active();
+ _check_paths.show();
+ _check_texts.set_active();
+ _check_texts.show();
+ _check_groups.set_active();
+ _check_groups.show();
+ _check_clones.set_active();
+ _check_clones.show();
+ _check_images.set_active();
+ _check_images.show();
+ _check_offsets.set_active();
+ _check_offsets.show();
+ }
+ squeeze_window();
+}
+
+void
+Find::onToggleShapes ()
+{
+ if (_check_all_shapes.get_active()) {
+ _check_rects.hide();
+ _check_ellipses.hide();
+ _check_stars.hide();
+ _check_spirals.hide();
+ } else {
+ _check_rects.set_active();
+ _check_rects.show();
+ _check_ellipses.set_active();
+ _check_ellipses.show();
+ _check_stars.set_active();
+ _check_stars.show();
+ _check_spirals.set_active();
+ _check_spirals.show();
+ }
+ squeeze_window();
+}
+
+
+/*########################################################################
+# UTILITY
+########################################################################*/
+
+
+
+void
+Find::squeeze_window()
+{
+ // TO DO: make window as small as possible
+}