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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h" 5 #include "mojo/services/public/cpp/view_manager/lib/view_manager_synchronizer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "mojo/public/cpp/application/application.h" 9 #include "mojo/public/cpp/application/application.h"
10 #include "mojo/public/cpp/application/connect.h" 10 #include "mojo/public/cpp/application/connect.h"
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 service()->DeleteNode(node_id_, ActionCompletedCallback()); 239 service()->DeleteNode(node_id_, ActionCompletedCallback());
240 } 240 }
241 virtual void DoActionCompleted(bool success) OVERRIDE { 241 virtual void DoActionCompleted(bool success) OVERRIDE {
242 // TODO(beng): recovery? 242 // TODO(beng): recovery?
243 } 243 }
244 244
245 const Id node_id_; 245 const Id node_id_;
246 DISALLOW_COPY_AND_ASSIGN(DestroyViewTreeNodeTransaction); 246 DISALLOW_COPY_AND_ASSIGN(DestroyViewTreeNodeTransaction);
247 }; 247 };
248 248
249 class HierarchyTransaction : public ViewManagerTransaction { 249 class AddChildTransaction : public ViewManagerTransaction {
250 public: 250 public:
251 enum HierarchyChangeType { 251 AddChildTransaction(Id child_id,
252 TYPE_ADD, 252 Id parent_id,
253 TYPE_REMOVE 253 ViewManagerSynchronizer* synchronizer)
254 };
255 HierarchyTransaction(HierarchyChangeType hierarchy_change_type,
256 Id child_id,
257 Id parent_id,
258 ViewManagerSynchronizer* synchronizer)
259 : ViewManagerTransaction(synchronizer), 254 : ViewManagerTransaction(synchronizer),
260 hierarchy_change_type_(hierarchy_change_type),
261 child_id_(child_id), 255 child_id_(child_id),
262 parent_id_(parent_id) {} 256 parent_id_(parent_id) {}
263 virtual ~HierarchyTransaction() {} 257 virtual ~AddChildTransaction() {}
264 258
265 private: 259 private:
266 // Overridden from ViewManagerTransaction: 260 // Overridden from ViewManagerTransaction:
267 virtual void DoCommit() OVERRIDE { 261 virtual void DoCommit() OVERRIDE {
268 switch (hierarchy_change_type_) { 262 service()->AddNode(parent_id_,
269 case TYPE_ADD: 263 child_id_,
270 service()->AddNode( 264 GetAndAdvanceNextServerChangeId(),
271 parent_id_, 265 ActionCompletedCallback());
272 child_id_,
273 GetAndAdvanceNextServerChangeId(),
274 ActionCompletedCallback());
275 break;
276 case TYPE_REMOVE:
277 service()->RemoveNodeFromParent(
278 child_id_,
279 GetAndAdvanceNextServerChangeId(),
280 ActionCompletedCallback());
281 break;
282 }
283 } 266 }
284 267
285 virtual void DoActionCompleted(bool success) OVERRIDE { 268 virtual void DoActionCompleted(bool success) OVERRIDE {
286 // TODO(beng): Failure means either one of the nodes specified didn't exist, 269 // TODO(beng): recovery?
287 // or we passed the same node id for both params. Roll back?
288 } 270 }
289 271
290 const HierarchyChangeType hierarchy_change_type_;
291 const Id child_id_; 272 const Id child_id_;
292 const Id parent_id_; 273 const Id parent_id_;
293 274
294 DISALLOW_COPY_AND_ASSIGN(HierarchyTransaction); 275 DISALLOW_COPY_AND_ASSIGN(AddChildTransaction);
276 };
277
278 class RemoveChildTransaction : public ViewManagerTransaction {
279 public:
280 RemoveChildTransaction(Id child_id,
281 ViewManagerSynchronizer* synchronizer)
282 : ViewManagerTransaction(synchronizer),
283 child_id_(child_id) {}
284 virtual ~RemoveChildTransaction() {}
285
286 private:
287 // Overridden from ViewManagerTransaction:
288 virtual void DoCommit() OVERRIDE {
289 service()->RemoveNodeFromParent(
290 child_id_,
291 GetAndAdvanceNextServerChangeId(),
292 ActionCompletedCallback());
293 }
294
295 virtual void DoActionCompleted(bool success) OVERRIDE {
296 // TODO(beng): recovery?
297 }
298
299 const Id child_id_;
300
301 DISALLOW_COPY_AND_ASSIGN(RemoveChildTransaction);
302 };
303
304 class ReorderNodeTransaction : public ViewManagerTransaction {
305 public:
306 ReorderNodeTransaction(Id node_id,
307 Id relative_id,
308 OrderDirection direction,
309 ViewManagerSynchronizer* synchronizer)
310 : ViewManagerTransaction(synchronizer),
311 node_id_(node_id),
312 relative_id_(relative_id),
313 direction_(direction) {}
314 virtual ~ReorderNodeTransaction() {}
315
316 private:
317 // Overridden from ViewManagerTransaction:
318 virtual void DoCommit() OVERRIDE {
319 service()->ReorderNode(node_id_,
320 relative_id_,
321 direction_,
322 GetAndAdvanceNextServerChangeId(),
323 ActionCompletedCallback());
324 }
325
326 virtual void DoActionCompleted(bool success) OVERRIDE {
327 // TODO(beng): recovery?
328 }
329
330 const Id node_id_;
331 const Id relative_id_;
332 const OrderDirection direction_;
333
334 DISALLOW_COPY_AND_ASSIGN(ReorderNodeTransaction);
295 }; 335 };
296 336
297 class SetActiveViewTransaction : public ViewManagerTransaction { 337 class SetActiveViewTransaction : public ViewManagerTransaction {
298 public: 338 public:
299 SetActiveViewTransaction(Id node_id, 339 SetActiveViewTransaction(Id node_id,
300 Id view_id, 340 Id view_id,
301 ViewManagerSynchronizer* synchronizer) 341 ViewManagerSynchronizer* synchronizer)
302 : ViewManagerTransaction(synchronizer), 342 : ViewManagerTransaction(synchronizer),
303 node_id_(node_id), 343 node_id_(node_id),
304 view_id_(view_id) {} 344 view_id_(view_id) {}
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 void ViewManagerSynchronizer::DestroyView(Id view_id) { 528 void ViewManagerSynchronizer::DestroyView(Id view_id) {
489 DCHECK(connected_); 529 DCHECK(connected_);
490 pending_transactions_.push_back(new DestroyViewTransaction(view_id, this)); 530 pending_transactions_.push_back(new DestroyViewTransaction(view_id, this));
491 Sync(); 531 Sync();
492 } 532 }
493 533
494 void ViewManagerSynchronizer::AddChild(Id child_id, 534 void ViewManagerSynchronizer::AddChild(Id child_id,
495 Id parent_id) { 535 Id parent_id) {
496 DCHECK(connected_); 536 DCHECK(connected_);
497 pending_transactions_.push_back( 537 pending_transactions_.push_back(
498 new HierarchyTransaction(HierarchyTransaction::TYPE_ADD, 538 new AddChildTransaction(child_id, parent_id, this));
499 child_id,
500 parent_id,
501 this));
502 Sync(); 539 Sync();
503 } 540 }
504 541
505 void ViewManagerSynchronizer::RemoveChild(Id child_id, Id parent_id) { 542 void ViewManagerSynchronizer::RemoveChild(Id child_id, Id parent_id) {
506 DCHECK(connected_); 543 DCHECK(connected_);
507 pending_transactions_.push_back( 544 pending_transactions_.push_back(new RemoveChildTransaction(child_id, this));
508 new HierarchyTransaction(HierarchyTransaction::TYPE_REMOVE,
509 child_id,
510 parent_id,
511 this));
512 Sync(); 545 Sync();
513 } 546 }
514 547
548 void ViewManagerSynchronizer::Reorder(
549 Id node_id,
550 Id relative_node_id,
551 OrderDirection direction) {
552 DCHECK(connected_);
553 pending_transactions_.push_back(
554 new ReorderNodeTransaction(node_id, relative_node_id, direction, this));
555 Sync();
556 }
557
515 bool ViewManagerSynchronizer::OwnsNode(Id id) const { 558 bool ViewManagerSynchronizer::OwnsNode(Id id) const {
516 return HiWord(id) == connection_id_; 559 return HiWord(id) == connection_id_;
517 } 560 }
518 561
519 bool ViewManagerSynchronizer::OwnsView(Id id) const { 562 bool ViewManagerSynchronizer::OwnsView(Id id) const {
520 return HiWord(id) == connection_id_; 563 return HiWord(id) == connection_id_;
521 } 564 }
522 565
523 void ViewManagerSynchronizer::SetActiveView(Id node_id, Id view_id) { 566 void ViewManagerSynchronizer::SetActiveView(Id node_id, Id view_id) {
524 DCHECK(connected_); 567 DCHECK(connected_);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 ViewTreeNodePrivate(node).LocalSetBounds(old_bounds.To<gfx::Rect>(), 674 ViewTreeNodePrivate(node).LocalSetBounds(old_bounds.To<gfx::Rect>(),
632 new_bounds.To<gfx::Rect>()); 675 new_bounds.To<gfx::Rect>());
633 } 676 }
634 677
635 void ViewManagerSynchronizer::OnNodeHierarchyChanged( 678 void ViewManagerSynchronizer::OnNodeHierarchyChanged(
636 Id node_id, 679 Id node_id,
637 Id new_parent_id, 680 Id new_parent_id,
638 Id old_parent_id, 681 Id old_parent_id,
639 Id server_change_id, 682 Id server_change_id,
640 mojo::Array<INodePtr> nodes) { 683 mojo::Array<INodePtr> nodes) {
641 // TODO: deal with |nodes|.
642 next_server_change_id_ = server_change_id + 1; 684 next_server_change_id_ = server_change_id + 1;
643 685
644 BuildNodeTree(this, nodes); 686 BuildNodeTree(this, nodes);
645 687
646 ViewTreeNode* new_parent = GetNodeById(new_parent_id); 688 ViewTreeNode* new_parent = GetNodeById(new_parent_id);
647 ViewTreeNode* old_parent = GetNodeById(old_parent_id); 689 ViewTreeNode* old_parent = GetNodeById(old_parent_id);
648 ViewTreeNode* node = GetNodeById(node_id); 690 ViewTreeNode* node = GetNodeById(node_id);
649 if (new_parent) 691 if (new_parent)
650 ViewTreeNodePrivate(new_parent).LocalAddChild(node); 692 ViewTreeNodePrivate(new_parent).LocalAddChild(node);
651 else 693 else
652 ViewTreeNodePrivate(old_parent).LocalRemoveChild(node); 694 ViewTreeNodePrivate(old_parent).LocalRemoveChild(node);
653 } 695 }
654 696
697 void ViewManagerSynchronizer::OnNodeReordered(Id node_id,
698 Id relative_node_id,
699 OrderDirection direction,
700 Id server_change_id) {
701 next_server_change_id_ = server_change_id + 1;
702
703 ViewTreeNode* node = GetNodeById(node_id);
704 ViewTreeNode* relative_node = GetNodeById(relative_node_id);
705 if (node && relative_node) {
706 ViewTreeNodePrivate(node).LocalReorder(relative_node, direction);
707 }
708 }
709
655 void ViewManagerSynchronizer::OnNodeDeleted(Id node_id, Id server_change_id) { 710 void ViewManagerSynchronizer::OnNodeDeleted(Id node_id, Id server_change_id) {
656 next_server_change_id_ = server_change_id + 1; 711 next_server_change_id_ = server_change_id + 1;
657 712
658 ViewTreeNode* node = GetNodeById(node_id); 713 ViewTreeNode* node = GetNodeById(node_id);
659 if (node) 714 if (node)
660 ViewTreeNodePrivate(node).LocalDestroy(); 715 ViewTreeNodePrivate(node).LocalDestroy();
661 } 716 }
662 717
663 void ViewManagerSynchronizer::OnNodeViewReplaced(Id node_id, 718 void ViewManagerSynchronizer::OnNodeViewReplaced(Id node_id,
664 Id new_view_id, 719 Id new_view_id,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 // ViewManager, public: 803 // ViewManager, public:
749 804
750 // static 805 // static
751 void ViewManager::Create(Application* application, 806 void ViewManager::Create(Application* application,
752 ViewManagerDelegate* delegate) { 807 ViewManagerDelegate* delegate) {
753 application->AddService<ViewManagerSynchronizer>(delegate); 808 application->AddService<ViewManagerSynchronizer>(delegate);
754 } 809 }
755 810
756 } // namespace view_manager 811 } // namespace view_manager
757 } // namespace mojo 812 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698