Index: mojo/examples/window_manager/window_manager.cc |
diff --git a/mojo/examples/window_manager/window_manager.cc b/mojo/examples/window_manager/window_manager.cc |
index 1dc1b29c85906560e70269902b6f69aebccc61eb..255a962a12bedd1f9978c0e485721d04dbe4aa4e 100644 |
--- a/mojo/examples/window_manager/window_manager.cc |
+++ b/mojo/examples/window_manager/window_manager.cc |
@@ -8,6 +8,7 @@ |
#include "mojo/public/cpp/application/application.h" |
#include "mojo/services/public/cpp/view_manager/view.h" |
#include "mojo/services/public/cpp/view_manager/view_manager.h" |
+#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
#include "mojo/services/public/cpp/view_manager/view_observer.h" |
#include "mojo/services/public/cpp/view_manager/view_tree_node.h" |
#include "ui/events/event_constants.h" |
@@ -16,6 +17,14 @@ |
#undef CreateWindow |
#endif |
+using mojo::view_manager::TransportNodeId; |
+using mojo::view_manager::View; |
+using mojo::view_manager::ViewManager; |
+using mojo::view_manager::ViewManagerDelegate; |
+using mojo::view_manager::ViewObserver; |
+using mojo::view_manager::ViewTreeNode; |
+using mojo::view_manager::ViewTreeNodeObserver; |
+ |
namespace mojo { |
namespace examples { |
@@ -29,7 +38,7 @@ class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
private: |
// Overridden from IWindowManager: |
- virtual void CloseWindow(view_manager::TransportNodeId node_id) OVERRIDE; |
+ virtual void CloseWindow(TransportNodeId node_id) OVERRIDE; |
WindowManager* window_manager_; |
@@ -37,14 +46,14 @@ class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
}; |
class WindowManager : public Application, |
- public view_manager::ViewObserver { |
+ public ViewObserver, |
+ public ViewManagerDelegate { |
public: |
- WindowManager() {} |
+ WindowManager() : view_manager_(NULL) {} |
virtual ~WindowManager() {} |
- void CloseWindow(view_manager::TransportNodeId node_id) { |
- DCHECK(view_manager_); |
- view_manager::ViewTreeNode* node = view_manager_->GetNodeById(node_id); |
+ void CloseWindow(TransportNodeId node_id) { |
+ ViewTreeNode* node = view_manager_->GetNodeById(node_id); |
DCHECK(node); |
node->Destroy(); |
} |
@@ -53,30 +62,38 @@ class WindowManager : public Application, |
// Overridden from Application: |
virtual void Initialize() MOJO_OVERRIDE { |
AddService<WindowManagerConnection>(this); |
+ ViewManager::Create(this, this); |
+ } |
+ |
+ // Overridden from ViewObserver: |
+ virtual void OnViewInputEvent(View* view, EventPtr event) OVERRIDE { |
+ if (event->action == ui::ET_MOUSE_RELEASED) { |
+ if (event->flags & ui::EF_LEFT_MOUSE_BUTTON) |
+ CreateWindow("mojo:mojo_embedded_app"); |
+ else if (event->flags & ui::EF_RIGHT_MOUSE_BUTTON) |
+ CreateWindow("mojo:mojo_nesting_app"); |
+ } |
+ } |
+ |
+ // Overridden from ViewManagerDelegate: |
+ virtual void OnRootAdded(ViewManager* view_manager, |
+ ViewTreeNode* root) OVERRIDE { |
+ DCHECK(!view_manager_); |
+ view_manager_ = view_manager; |
- view_manager_ = view_manager::ViewManager::CreateBlocking(this); |
- view_manager::ViewTreeNode* node = |
- view_manager::ViewTreeNode::Create(view_manager_); |
- view_manager_->roots().front()->AddChild(node); |
+ ViewTreeNode* node = ViewTreeNode::Create(view_manager); |
+ view_manager->roots().front()->AddChild(node); |
node->SetBounds(gfx::Rect(800, 600)); |
parent_node_id_ = node->id(); |
- view_manager::View* view = view_manager::View::Create(view_manager_); |
+ View* view = View::Create(view_manager); |
node->SetActiveView(view); |
view->SetColor(SK_ColorBLUE); |
view->AddObserver(this); |
} |
- // Overridden from ViewObserver: |
- virtual void OnViewInputEvent(view_manager::View* view, |
- EventPtr event) OVERRIDE { |
- if (event->action == ui::ET_MOUSE_RELEASED) |
- CreateWindow(); |
- } |
- |
- void CreateWindow() { |
- view_manager::ViewTreeNode* node = |
- view_manager_->GetNodeById(parent_node_id_); |
+ void CreateWindow(const String& url) { |
+ ViewTreeNode* node = view_manager_->GetNodeById(parent_node_id_); |
gfx::Rect bounds(50, 50, 200, 200); |
if (!node->children().empty()) { |
@@ -85,21 +102,19 @@ class WindowManager : public Application, |
bounds.set_origin(position); |
} |
- view_manager::ViewTreeNode* embedded = |
- view_manager::ViewTreeNode::Create(view_manager_); |
+ ViewTreeNode* embedded = ViewTreeNode::Create(view_manager_); |
node->AddChild(embedded); |
embedded->SetBounds(bounds); |
- embedded->Embed("mojo:mojo_embedded_app"); |
+ embedded->Embed(url); |
} |
- view_manager::ViewManager* view_manager_; |
- view_manager::TransportNodeId parent_node_id_; |
+ ViewManager* view_manager_; |
+ TransportNodeId parent_node_id_; |
DISALLOW_COPY_AND_ASSIGN(WindowManager); |
}; |
-void WindowManagerConnection::CloseWindow( |
- view_manager::TransportNodeId node_id) { |
+void WindowManagerConnection::CloseWindow(TransportNodeId node_id) { |
window_manager_->CloseWindow(node_id); |
} |