aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/resourceeditor/qrceditor/undocommands.cpp
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2012-06-04 14:10:34 +0400
committerEike Ziller <eike.ziller@nokia.com>2012-07-18 15:39:49 +0200
commit2bf7271d5158e5b589959f7ed93268b4d71b0e07 (patch)
tree6f258634a40c626a87caf912a1b968c9cbe6e05f /src/plugins/resourceeditor/qrceditor/undocommands.cpp
parentfaf7ba6274f0bdbf32597eb837997aac29a832e2 (diff)
Moved QrcEditor to ResourceEditor plugin.
Change-Id: I623b47ab4fdad7abf07e47abd99959f0326639c6 Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
Diffstat (limited to 'src/plugins/resourceeditor/qrceditor/undocommands.cpp')
-rw-r--r--src/plugins/resourceeditor/qrceditor/undocommands.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/src/plugins/resourceeditor/qrceditor/undocommands.cpp b/src/plugins/resourceeditor/qrceditor/undocommands.cpp
new file mode 100644
index 0000000000..00aff6d9c3
--- /dev/null
+++ b/src/plugins/resourceeditor/qrceditor/undocommands.cpp
@@ -0,0 +1,189 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "undocommands_p.h"
+
+#include <QModelIndex>
+
+namespace ResourceEditor {
+
+ViewCommand::ViewCommand(ResourceView *view)
+ : m_view(view)
+{ }
+
+ViewCommand::~ViewCommand()
+{ }
+
+ModelIndexViewCommand::ModelIndexViewCommand(ResourceView *view)
+ : ViewCommand(view)
+{ }
+
+ModelIndexViewCommand::~ModelIndexViewCommand()
+{ }
+
+void ModelIndexViewCommand::storeIndex(const QModelIndex &index)
+{
+ if (m_view->isPrefix(index)) {
+ m_prefixArrayIndex = index.row();
+ m_fileArrayIndex = -1;
+ } else {
+ m_fileArrayIndex = index.row();
+ m_prefixArrayIndex = m_view->model()->parent(index).row();
+ }
+}
+
+QModelIndex ModelIndexViewCommand::makeIndex() const
+{
+ const QModelIndex prefixModelIndex
+ = m_view->model()->index(m_prefixArrayIndex, 0, QModelIndex());
+ if (m_fileArrayIndex != -1) {
+ // File node
+ const QModelIndex fileModelIndex
+ = m_view->model()->index(m_fileArrayIndex, 0, prefixModelIndex);
+ return fileModelIndex;
+ } else {
+ // Prefix node
+ return prefixModelIndex;
+ }
+}
+
+
+
+ModifyPropertyCommand::ModifyPropertyCommand(ResourceView *view, const QModelIndex &nodeIndex,
+ ResourceView::NodeProperty property, const int mergeId, const QString &before,
+ const QString &after)
+ : ModelIndexViewCommand(view), m_property(property), m_before(before), m_after(after),
+ m_mergeId(mergeId)
+{
+ storeIndex(nodeIndex);
+}
+
+bool ModifyPropertyCommand::mergeWith(const QUndoCommand * command)
+{
+ if (command->id() != id() || m_property != static_cast<const ModifyPropertyCommand *>(command)->m_property)
+ return false;
+ // Choose older command (this) and forgot the other
+ return true;
+}
+
+void ModifyPropertyCommand::undo()
+{
+ Q_ASSERT(m_view);
+
+ // Save current text in m_after for redo()
+ m_after = m_view->getCurrentValue(m_property);
+
+ // Reset text to m_before
+ m_view->changeValue(makeIndex(), m_property, m_before);
+}
+
+void ModifyPropertyCommand::redo()
+{
+ // Prevent execution from within QUndoStack::push
+ if (m_after.isNull())
+ return;
+
+ // Bring back text before undo
+ Q_ASSERT(m_view);
+ m_view->changeValue(makeIndex(), m_property, m_after);
+}
+
+RemoveEntryCommand::RemoveEntryCommand(ResourceView *view, const QModelIndex &index)
+ : ModelIndexViewCommand(view), m_entry(0), m_isExpanded(true)
+{
+ storeIndex(index);
+}
+
+RemoveEntryCommand::~RemoveEntryCommand()
+{
+ freeEntry();
+}
+
+void RemoveEntryCommand::redo()
+{
+ freeEntry();
+ const QModelIndex index = makeIndex();
+ m_isExpanded = m_view->isExpanded(index);
+ m_entry = m_view->removeEntry(index);
+}
+
+void RemoveEntryCommand::undo()
+{
+ if (m_entry != 0) {
+ m_entry->restore();
+ Q_ASSERT(m_view != 0);
+ const QModelIndex index = makeIndex();
+ m_view->setExpanded(index, m_isExpanded);
+ m_view->setCurrentIndex(index);
+ freeEntry();
+ }
+}
+
+void RemoveEntryCommand::freeEntry()
+{
+ delete m_entry;
+ m_entry = 0;
+}
+
+AddFilesCommand::AddFilesCommand(ResourceView *view, int prefixIndex, int cursorFileIndex,
+ const QStringList &fileNames)
+ : ViewCommand(view), m_prefixIndex(prefixIndex), m_cursorFileIndex(cursorFileIndex),
+ m_fileNames(fileNames)
+{ }
+
+void AddFilesCommand::redo()
+{
+ m_view->addFiles(m_prefixIndex, m_fileNames, m_cursorFileIndex, m_firstFile, m_lastFile);
+}
+
+void AddFilesCommand::undo()
+{
+ m_view->removeFiles(m_prefixIndex, m_firstFile, m_lastFile);
+}
+
+AddEmptyPrefixCommand::AddEmptyPrefixCommand(ResourceView *view)
+ : ViewCommand(view)
+{ }
+
+void AddEmptyPrefixCommand::redo()
+{
+ m_prefixArrayIndex = m_view->addPrefix().row();
+}
+
+void AddEmptyPrefixCommand::undo()
+{
+ const QModelIndex prefixModelIndex = m_view->model()->index(
+ m_prefixArrayIndex, 0, QModelIndex());
+ delete m_view->removeEntry(prefixModelIndex);
+}
+
+} // namespace SharedTools