X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fdock_history.cpp;h=c8fc3da8bd49ef673ff6cdc802a7232620047e80;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=73658d9b23e15a44690cb6c0a3c9e1f6be0c5101;hpb=fa0d98d6982bcc2fc503cf7c0f4c05df30a5c370;p=synfig.git
diff --git a/synfig-studio/trunk/src/gtkmm/dock_history.cpp b/synfig-studio/trunk/src/gtkmm/dock_history.cpp
index 73658d9..c8fc3da 100644
--- a/synfig-studio/trunk/src/gtkmm/dock_history.cpp
+++ b/synfig-studio/trunk/src/gtkmm/dock_history.cpp
@@ -6,7 +6,7 @@
**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
-** Copyright (c) 2007 Chris Moore
+** Copyright (c) 2007, 2008 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
@@ -95,6 +95,17 @@ Dock_History::Dock_History():
)
);
action_group->add(Gtk::Action::create(
+ "clear-undo-and-redo",
+ Gtk::Stock::CLEAR,
+ _("Clear Undo and Redo Stacks"),
+ _("Clear the undo and redo stacks")
+ ),
+ sigc::mem_fun(
+ *this,
+ &Dock_History::clear_undo_and_redo
+ )
+ );
+ action_group->add(Gtk::Action::create(
"undo",
Gtk::StockID("gtk-undo"),
_("Undo"),
@@ -121,6 +132,7 @@ Dock_History::Dock_History():
" "
" "
" "
+ " "
" "
""
;
@@ -201,13 +213,13 @@ Dock_History::create_action_tree()
Gtk::CellRendererText* cell_renderer_jump=Gtk::manage(new Gtk::CellRendererText());
column->pack_start(*cell_renderer_jump,true);
- cell_renderer_jump->property_text()="(JMP)";
+ cell_renderer_jump->property_text()=_("(JMP)");
cell_renderer_jump->property_foreground()="#003a7f";
column->set_resizable();
column->set_clickable();
- column->set_sort_column_id(COLUMNID_JUMP);
+ column->set_sort_column(COLUMNID_JUMP);
action_tree->append_column(*column);
//column->clicked();
@@ -228,6 +240,9 @@ Dock_History::create_action_tree()
action_tree->append_column(*column);
}
+ action_tree->set_enable_search(true);
+ action_tree->set_search_column(history_tree_model.name);
+ action_tree->set_search_equal_func(sigc::ptr_fun(&studio::HistoryTreeStore::search_func));
action_tree->set_rules_hint();
// action_tree->signal_row_activated().connect(sigc::mem_fun(*this,&Dock_History::on_row_activate));
@@ -257,17 +272,26 @@ Dock_History::create_action_tree()
void
Dock_History::clear_undo()
{
- if(selected_instance && App::dialog_yes_no(_("Clear History"), _("You will not be able to undo any changes that you have made!\nAre you sure you want to clear the undo stack?")))
- {
+ if(selected_instance && App::dialog_yes_no(_("Clear History"),
+ _("You will not be able to undo any changes that you have made!\nAre you sure you want to clear the undo stack?")))
selected_instance->clear_undo_stack();
- }
}
void
Dock_History::clear_redo()
{
- if(selected_instance && App::dialog_yes_no(_("Clear History"), _("You will not be able to redo any changes that you have made!\nAre you sure you want to clear the redo stack?")))
+ if(selected_instance && App::dialog_yes_no(_("Clear History"),
+ _("You will not be able to redo any changes that you have made!\nAre you sure you want to clear the redo stack?")))
+ selected_instance->clear_redo_stack();
+}
+
+void
+Dock_History::clear_undo_and_redo()
+{
+ if(selected_instance && App::dialog_yes_no(_("Clear History"),
+ _("You will not be able to undo or redo any changes that you have made!\nAre you sure you want to clear the undo and redo stacks?")))
{
+ selected_instance->clear_undo_stack();
selected_instance->clear_redo_stack();
}
}
@@ -282,18 +306,53 @@ Dock_History::update_undo_redo()
action_group->get_action("clear-undo")->set_sensitive(instance->get_undo_status());
action_group->get_action("redo")->set_sensitive(instance->get_redo_status());
action_group->get_action("clear-redo")->set_sensitive(instance->get_redo_status());
+ action_group->get_action("clear-undo-and-redo")->set_sensitive(instance->get_undo_status() || instance->get_redo_status());
}
}
void
+Dock_History::on_undo_tree_changed()
+{
+ Gtk::TreeModel::Children children(selected_instance->history_tree_store()->children());
+
+ if (!children.size())
+ return;
+
+ studio::HistoryTreeStore::Model model;
+
+ Gtk::TreeModel::Children::iterator iter, prev = children.end();
+ for (iter = children.begin(); iter != children.end(); prev = iter++)
+ if ((*iter)[model.is_redo])
+ {
+ if (prev == children.end())
+ action_tree->get_selection()->unselect_all();
+ else
+ {
+ action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
+ action_tree->get_selection()->select(prev);
+ }
+ return;
+ }
+
+ action_tree->scroll_to_row(Gtk::TreePath(prev), 0.5);
+ action_tree->get_selection()->select(prev);
+}
+
+void
Dock_History::set_selected_instance_(etl::handle instance)
{
if(studio::App::shutdown_in_progress)
return;
+ if (on_undo_tree_changed_connection)
+ on_undo_tree_changed_connection.disconnect();
+
selected_instance=instance;
if(instance)
{
+ on_undo_tree_changed_connection = selected_instance->history_tree_store()->signal_undo_tree_changed().connect(
+ sigc::mem_fun(*this,&Dock_History::on_undo_tree_changed));
+
action_tree->set_model(instance->history_tree_store());
action_tree->show();
update_undo_redo();