index e1b60f3150f7257b427d9f13efcef66f122c7f75..f2f51a780094239aea95b29abef5494ef168279a 100644 (file)
#include "inkscape.h"
#include "ui/icons.h"
#include "verbs.h"
+#include "desktop-handles.h"
#include "undo-history.h"
/* Rendering functions for custom cell renderers */
-void
+void
CellRendererSPIcon::render_vfunc(const Glib::RefPtr<Gdk::Drawable>& window,
Gtk::Widget& widget,
const Gdk::Rectangle& background_area,
if (icon) {
- // check icon type (inkscape, gtk, none)
- if ( SP_IS_ICON(icon->gobj()) ) {
+ // check icon type (inkscape, gtk, none)
+ if ( SP_IS_ICON(icon->gobj()) ) {
SPIcon* sp_icon = SP_ICON(icon->gobj());
sp_icon_fetch_pixbuf(sp_icon);
_property_icon = Glib::wrap(sp_icon->pb, true);
} else if ( GTK_IS_IMAGE(icon->gobj()) ) {
- _property_icon = Gtk::Invisible().render_icon(Gtk::StockID(image),
+ _property_icon = Gtk::Invisible().render_icon(Gtk::StockID(image),
Gtk::ICON_SIZE_MENU);
} else {
delete icon;
property_pixbuf() = _icon_cache[_property_event_type];
}
- Gtk::CellRendererPixbuf::render_vfunc(window, widget, background_area,
+ Gtk::CellRendererPixbuf::render_vfunc(window, widget, background_area,
cell_area, expose_area, flags);
}
const Gdk::Rectangle& expose_area,
Gtk::CellRendererState flags)
{
- if( _filter(_property_number) ) {
+ if( _filter(_property_number) ) {
std::ostringstream s;
s << _property_number << std::flush;
property_text() = s.str();
- Gtk::CellRendererText::render_vfunc(window, widget, background_area,
+ Gtk::CellRendererText::render_vfunc(window, widget, background_area,
cell_area, expose_area, flags);
- }
+ }
}
const CellRendererInt::Filter& CellRendererInt::no_filter = CellRendererInt::NoFilter();
+UndoHistory& UndoHistory::getInstance()
+{
+ return *new UndoHistory();
+}
+
+void
+UndoHistory::setDesktop(SPDesktop* desktop)
+{
+ Panel::setDesktop(desktop);
+
+ if (!desktop) return;
+
+ _document = sp_desktop_document(desktop);
+
+ _event_log = desktop->event_log;
+
+ _callback_connections[EventLog::CALLB_SELECTION_CHANGE].block();
+
+ _event_list_store = _event_log->getEventListStore();
+ _event_list_view.set_model(_event_list_store);
+ _event_list_selection = _event_list_view.get_selection();
+
+ _event_log->connectWithDialog(&_event_list_view, &_callback_connections);
+ _event_list_view.scroll_to_row(_event_list_store->get_path(_event_list_selection->get_selected()));
+
+ _callback_connections[EventLog::CALLB_SELECTION_CHANGE].block(false);
+}
UndoHistory::UndoHistory()
- : Dialog ("dialogs.undo-history", SP_VERB_DIALOG_UNDO_HISTORY),
- _document (SP_ACTIVE_DOCUMENT),
- _event_log (_document ? &_document->getEventLog() : NULL),
+ : UI::Widget::Panel ("", "dialogs.undo-history", SP_VERB_DIALOG_UNDO_HISTORY),
+ _document (sp_desktop_document(getDesktop())),
+ _event_log (getDesktop() ? getDesktop()->event_log : NULL),
_columns (_event_log ? &_event_log->getColumns() : NULL),
_event_list_selection (_event_list_view.get_selection())
-{
- if( !_document || !_event_log || !_columns ) return;
+{
+ if ( !_document || !_event_log || !_columns ) return;
- set_size_request(300, 400);
+ set_size_request(300, 95);
- get_vbox()->pack_start(_scrolled_window);
+ _getContents()->pack_start(_scrolled_window);
_scrolled_window.set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
_event_list_store = _event_log->getEventListStore();
_scrolled_window.add(_event_list_view);
- // connect callbacks
+ // connect EventLog callbacks
_callback_connections[EventLog::CALLB_SELECTION_CHANGE] =
_event_list_selection->signal_changed().connect(sigc::mem_fun(*this, &Inkscape::UI::Dialog::UndoHistory::_onListSelectionChange));
_callback_connections[EventLog::CALLB_COLLAPSE] =
_event_list_view.signal_row_collapsed().connect(sigc::mem_fun(*this, &Inkscape::UI::Dialog::UndoHistory::_onCollapseEvent));
- // connect with the event log
+ // connect with the EventLog
_event_log->connectWithDialog(&_event_list_view, &_callback_connections);
- _event_list_view.scroll_to_row(_event_list_store->get_path(_event_list_selection->get_selected()));
-
show_all_children();
+ // scroll to the selected row
+ _event_list_view.set_cursor(_event_list_store->get_path(_event_log->getCurrEvent()));
}
UndoHistory::~UndoHistory()
{
}
-void
+void
UndoHistory::_onListSelectionChange()
{
} else { // this should not happen
_event_list_selection->select(curr_event);
}
-
+
} else {
EventLog::const_iterator last_selected = _event_log->getCurrEvent();
* of that parent's branch.
*/
- if ( !selected->children().empty() &&
+ if ( !selected->children().empty() &&
!_event_list_view.row_expanded(_event_list_store->get_path(selected)) )
{
selected = selected->children().end();
}
// An event before the current one has been selected. Undo to the selected event.
- if ( _event_list_store->get_path(selected) <
- _event_list_store->get_path(last_selected) )
+ if ( _event_list_store->get_path(selected) <
+ _event_list_store->get_path(last_selected) )
{
_event_log->blockNotifications();
while ( selected != last_selected ) {
-
+
sp_document_undo(_document);
if ( last_selected->parent() &&
}
}
}
- _event_log->blockNotifications(false);
+ _event_log->blockNotifications(false);
_event_log->updateUndoVerbs();
} else { // An event after the current one has been selected. Redo to the selected event.
}
}
}
- _event_log->blockNotifications(false);
-
+ _event_log->blockNotifications(false);
+
}
_event_log->setCurrEvent(selected);
}
void
-UndoHistory::_onExpandEvent(const Gtk::TreeModel::iterator &iter, const Gtk::TreeModel::Path &path)
+UndoHistory::_onExpandEvent(const Gtk::TreeModel::iterator &iter, const Gtk::TreeModel::Path &/*path*/)
{
- if ( iter == _event_list_selection->get_selected() )
- {
+ if ( iter == _event_list_selection->get_selected() ) {
_event_list_selection->select(_event_log->getCurrEvent());
}
}
void
-UndoHistory::_onCollapseEvent(const Gtk::TreeModel::iterator &iter, const Gtk::TreeModel::Path &path)
+UndoHistory::_onCollapseEvent(const Gtk::TreeModel::iterator &iter, const Gtk::TreeModel::Path &/*path*/)
{
// Collapsing a branch we're currently in is equal to stepping to the last event in that branch
- if ( iter == _event_log->getCurrEvent() )
- {
+ if ( iter == _event_log->getCurrEvent() ) {
EventLog::const_iterator curr_event_parent = _event_log->getCurrEvent();
EventLog::const_iterator curr_event = curr_event_parent->children().begin();
EventLog::const_iterator last = curr_event_parent->children().end();