Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Unified Diff: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc

Issue 327073003: Reorder (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
diff --git a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
index baca5a46da5d827f732e502d3aa28a2854eb9608..16e232150324f70d0af6387a60ced967d552ad38 100644
--- a/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
+++ b/mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.cc
@@ -246,52 +246,92 @@ class DestroyViewTreeNodeTransaction : public ViewManagerTransaction {
DISALLOW_COPY_AND_ASSIGN(DestroyViewTreeNodeTransaction);
};
-class HierarchyTransaction : public ViewManagerTransaction {
+class AddChildTransaction : public ViewManagerTransaction {
public:
- enum HierarchyChangeType {
- TYPE_ADD,
- TYPE_REMOVE
- };
- HierarchyTransaction(HierarchyChangeType hierarchy_change_type,
- Id child_id,
- Id parent_id,
- ViewManagerSynchronizer* synchronizer)
+ AddChildTransaction(Id child_id,
+ Id parent_id,
+ ViewManagerSynchronizer* synchronizer)
: ViewManagerTransaction(synchronizer),
- hierarchy_change_type_(hierarchy_change_type),
child_id_(child_id),
parent_id_(parent_id) {}
- virtual ~HierarchyTransaction() {}
+ virtual ~AddChildTransaction() {}
private:
// Overridden from ViewManagerTransaction:
virtual void DoCommit() OVERRIDE {
- switch (hierarchy_change_type_) {
- case TYPE_ADD:
- service()->AddNode(
- parent_id_,
- child_id_,
- GetAndAdvanceNextServerChangeId(),
- ActionCompletedCallback());
- break;
- case TYPE_REMOVE:
- service()->RemoveNodeFromParent(
- child_id_,
- GetAndAdvanceNextServerChangeId(),
- ActionCompletedCallback());
- break;
- }
+ service()->AddNode(parent_id_,
+ child_id_,
+ GetAndAdvanceNextServerChangeId(),
+ ActionCompletedCallback());
}
virtual void DoActionCompleted(bool success) OVERRIDE {
- // TODO(beng): Failure means either one of the nodes specified didn't exist,
- // or we passed the same node id for both params. Roll back?
+ // TODO(beng): recovery?
}
- const HierarchyChangeType hierarchy_change_type_;
const Id child_id_;
const Id parent_id_;
- DISALLOW_COPY_AND_ASSIGN(HierarchyTransaction);
+ DISALLOW_COPY_AND_ASSIGN(AddChildTransaction);
+};
+
+class RemoveChildTransaction : public ViewManagerTransaction {
+ public:
+ RemoveChildTransaction(Id child_id,
+ ViewManagerSynchronizer* synchronizer)
+ : ViewManagerTransaction(synchronizer),
+ child_id_(child_id) {}
+ virtual ~RemoveChildTransaction() {}
+
+ private:
+ // Overridden from ViewManagerTransaction:
+ virtual void DoCommit() OVERRIDE {
+ service()->RemoveNodeFromParent(
+ child_id_,
+ GetAndAdvanceNextServerChangeId(),
+ ActionCompletedCallback());
+ }
+
+ virtual void DoActionCompleted(bool success) OVERRIDE {
+ // TODO(beng): recovery?
+ }
+
+ const Id child_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(RemoveChildTransaction);
+};
+
+class ReorderNodeTransaction : public ViewManagerTransaction {
+ public:
+ ReorderNodeTransaction(Id node_id,
+ Id relative_id,
+ OrderDirection direction,
+ ViewManagerSynchronizer* synchronizer)
+ : ViewManagerTransaction(synchronizer),
+ node_id_(node_id),
+ relative_id_(relative_id),
+ direction_(direction) {}
+ virtual ~ReorderNodeTransaction() {}
+
+ private:
+ // Overridden from ViewManagerTransaction:
+ virtual void DoCommit() OVERRIDE {
+ service()->ReorderNode(node_id_,
+ relative_id_,
+ direction_,
+ GetAndAdvanceNextServerChangeId(),
+ ActionCompletedCallback());
+ }
+
+ virtual void DoActionCompleted(bool success) OVERRIDE {
+ // TODO(beng): recovery?
+ }
+
+ const Id node_id_;
+ const Id relative_id_;
+ const OrderDirection direction_;
+
+ DISALLOW_COPY_AND_ASSIGN(ReorderNodeTransaction);
};
class SetActiveViewTransaction : public ViewManagerTransaction {
@@ -495,20 +535,23 @@ void ViewManagerSynchronizer::AddChild(Id child_id,
Id parent_id) {
DCHECK(connected_);
pending_transactions_.push_back(
- new HierarchyTransaction(HierarchyTransaction::TYPE_ADD,
- child_id,
- parent_id,
- this));
+ new AddChildTransaction(child_id, parent_id, this));
Sync();
}
void ViewManagerSynchronizer::RemoveChild(Id child_id, Id parent_id) {
DCHECK(connected_);
+ pending_transactions_.push_back(new RemoveChildTransaction(child_id, this));
+ Sync();
+}
+
+void ViewManagerSynchronizer::Reorder(
+ Id node_id,
+ Id relative_node_id,
+ OrderDirection direction) {
+ DCHECK(connected_);
pending_transactions_.push_back(
- new HierarchyTransaction(HierarchyTransaction::TYPE_REMOVE,
- child_id,
- parent_id,
- this));
+ new ReorderNodeTransaction(node_id, relative_node_id, direction, this));
Sync();
}
@@ -638,7 +681,6 @@ void ViewManagerSynchronizer::OnNodeHierarchyChanged(
Id old_parent_id,
Id server_change_id,
mojo::Array<INodePtr> nodes) {
- // TODO: deal with |nodes|.
next_server_change_id_ = server_change_id + 1;
BuildNodeTree(this, nodes);
@@ -652,6 +694,19 @@ void ViewManagerSynchronizer::OnNodeHierarchyChanged(
ViewTreeNodePrivate(old_parent).LocalRemoveChild(node);
}
+void ViewManagerSynchronizer::OnNodeReordered(Id node_id,
+ Id relative_node_id,
+ OrderDirection direction,
+ Id server_change_id) {
+ next_server_change_id_ = server_change_id + 1;
+
+ ViewTreeNode* node = GetNodeById(node_id);
+ ViewTreeNode* relative_node = GetNodeById(relative_node_id);
+ if (node && relative_node) {
+ ViewTreeNodePrivate(node).LocalReorder(relative_node, direction);
+ }
+}
+
void ViewManagerSynchronizer::OnNodeDeleted(Id node_id, Id server_change_id) {
next_server_change_id_ = server_change_id + 1;

Powered by Google App Engine
This is Rietveld 408576698