diff --git a/src/event-log.cpp b/src/event-log.cpp
index 751616d30635c56f85f6de6aa863295dcb81722f..82de44696b7b8b29356fac0fce0d0b22d8a6a219 100644 (file)
--- a/src/event-log.cpp
+++ b/src/event-log.cpp
* Author:
* Gustav Broberg <broberg@kth.se>
*
- * Copyright (c) 2006 Authors
+ * Copyright (c) 2006, 2007 Authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#include "event-log.h"
#include "inkscape.h"
#include "util/ucompose.hpp"
+#include "document.h"
+#include "xml/repr.h"
+#include "sp-object.h"
namespace Inkscape {
{
// add initial pseudo event
Gtk::TreeRow curr_row = *(_event_list_store->append());
- _curr_event = _last_event = curr_row;
+ _curr_event = _last_saved = _last_event = curr_row;
curr_row[_columns.description] = _("[Unchanged]");
curr_row[_columns.type] = SP_VERB_FILE_NEW;
{
if ( !_notifications_blocked ) {
+ // make sure the supplied event matches the next undoable event
+ g_return_if_fail ( _getUndoEvent() && (*(_getUndoEvent()))[_columns.event] == log );
+
// if we're on the first child event...
if ( _curr_event->parent() &&
_curr_event == _curr_event->parent()->children().begin() )
}
}
+ checkForVirginity();
+
// update the view
if (_connected) {
(*_callback_connections)[CALLB_SELECTION_CHANGE].block();
Gtk::TreePath curr_path = _event_list_store->get_path(_curr_event);
_event_list_view->expand_to_path(curr_path);
_event_list_selection->select(curr_path);
- _event_list_view->scroll_to_row(curr_path);
+ _event_list_view->scroll_to_row(curr_path);
(*_callback_connections)[CALLB_EXPAND].block(false);
(*_callback_connections)[CALLB_SELECTION_CHANGE].block(false);
{
if ( !_notifications_blocked ) {
+ // make sure the supplied event matches the next redoable event
+ g_return_if_fail ( _getRedoEvent() && (*(_getRedoEvent()))[_columns.event] == log );
+
// if we're on a parent event...
if ( !_curr_event->children().empty() ) {
}
}
+ checkForVirginity();
+
// update the view
if (_connected) {
Gtk::TreePath curr_path = _event_list_store->get_path(_curr_event);
_event_list_view->expand_to_path(curr_path);
_event_list_selection->select(curr_path);
- _event_list_view->scroll_to_row(curr_path);
+ _event_list_view->scroll_to_row(curr_path);
(*_callback_connections)[CALLB_EXPAND].block(false);
(*_callback_connections)[CALLB_SELECTION_CHANGE].block(false);
void
EventLog::notifyUndoCommitEvent(Event* log)
{
- // If we're not at the last event in list then erase the previously undone events
- if ( _last_event != _curr_event ) {
-
- _last_event = _curr_event;
-
- if ( !_last_event->children().empty() ) {
- _last_event = _last_event->children().begin();
- } else {
- ++_last_event;
- }
-
- while ( _last_event != _event_list_store->children().end() ) {
-
- if (_last_event->parent()) {
- while ( _last_event != _last_event->parent()->children().end() ) {
- _last_event = _event_list_store->erase(_last_event);
- }
- _last_event = _last_event->parent();
-
- (*_last_event)[_columns.child_count] = _last_event->children().size() + 1;
-
- ++_last_event;
- } else {
- _last_event = _event_list_store->erase(_last_event);
- }
-
- }
- }
+ _clearRedo();
const unsigned int event_type = log->type;
_curr_event = _last_event = curr_row;
+ curr_row[_columns.event] = log;
curr_row[_columns.type] = event_type;
curr_row[_columns.description] = log->description;
+ checkForVirginity();
+
// update the view
if (_connected) {
Gtk::TreePath curr_path = _event_list_store->get_path(_curr_event);
_event_list_view->expand_to_path(curr_path);
_event_list_selection->select(curr_path);
- _event_list_view->scroll_to_row(curr_path);
+ _event_list_view->scroll_to_row(curr_path);
(*_callback_connections)[CALLB_EXPAND].block(false);
(*_callback_connections)[CALLB_SELECTION_CHANGE].block(false);
updateUndoVerbs();
}
+void
+EventLog::notifyClearUndoEvent()
+{
+ _clearUndo();
+ updateUndoVerbs();
+}
+
+void
+EventLog::notifyClearRedoEvent()
+{
+ _clearRedo();
+ updateUndoVerbs();
+}
+
void
EventLog::connectWithDialog(Gtk::TreeView *event_list_view, CallbackMap *callback_connections)
{
return redo_event;
}
+void
+EventLog::_clearUndo()
+{
+ // TODO: Implement when needed
}
+void
+EventLog::_clearRedo()
+{
+ if ( _last_event != _curr_event ) {
+
+ _last_event = _curr_event;
+
+ if ( !_last_event->children().empty() ) {
+ _last_event = _last_event->children().begin();
+ } else {
+ ++_last_event;
+ }
+
+ while ( _last_event != _event_list_store->children().end() ) {
+
+ if (_last_event->parent()) {
+ while ( _last_event != _last_event->parent()->children().end() ) {
+ _last_event = _event_list_store->erase(_last_event);
+ }
+ _last_event = _last_event->parent();
+
+ (*_last_event)[_columns.child_count] = _last_event->children().size() + 1;
+
+ ++_last_event;
+ } else {
+ _last_event = _event_list_store->erase(_last_event);
+ }
+
+ }
+
+ }
+}
+
+/* mark document as untouched if we reach a state where the document was previously saved */
+void
+EventLog::checkForVirginity() {
+ g_return_if_fail (_document);
+ if (_curr_event == _last_saved) {
+ _document->setModifiedSinceSave(false);
+ }
+}
+
+} // namespace Inkscape
+
+
/*
Local Variables:
mode:c++