OLD | NEW |
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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "mojo/examples/keyboard/keyboard.mojom.h" | 7 #include "mojo/examples/keyboard/keyboard.mojom.h" |
8 #include "mojo/examples/window_manager/debug_panel.h" | 8 #include "mojo/examples/window_manager/debug_panel.h" |
9 #include "mojo/examples/window_manager/window_manager.mojom.h" | 9 #include "mojo/examples/window_manager/window_manager.mojom.h" |
10 #include "mojo/public/cpp/application/application_connection.h" | 10 #include "mojo/public/cpp/application/application_connection.h" |
11 #include "mojo/public/cpp/application/application_delegate.h" | 11 #include "mojo/public/cpp/application/application_delegate.h" |
12 #include "mojo/public/cpp/application/application_impl.h" | 12 #include "mojo/public/cpp/application/application_impl.h" |
| 13 #include "mojo/public/cpp/application/interface_factory_with_context.h" |
13 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" | 14 #include "mojo/services/public/cpp/geometry/geometry_type_converters.h" |
14 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h" | 15 #include "mojo/services/public/cpp/input_events/input_events_type_converters.h" |
15 #include "mojo/services/public/cpp/view_manager/node.h" | 16 #include "mojo/services/public/cpp/view_manager/node.h" |
16 #include "mojo/services/public/cpp/view_manager/node_observer.h" | 17 #include "mojo/services/public/cpp/view_manager/node_observer.h" |
17 #include "mojo/services/public/cpp/view_manager/view.h" | 18 #include "mojo/services/public/cpp/view_manager/view.h" |
18 #include "mojo/services/public/cpp/view_manager/view_event_dispatcher.h" | 19 #include "mojo/services/public/cpp/view_manager/view_event_dispatcher.h" |
19 #include "mojo/services/public/cpp/view_manager/view_manager.h" | 20 #include "mojo/services/public/cpp/view_manager/view_manager.h" |
| 21 #include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" |
20 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" | 22 #include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" |
21 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" | 23 #include "mojo/services/public/interfaces/input_events/input_events.mojom.h" |
22 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h" | 24 #include "mojo/services/public/interfaces/launcher/launcher.mojom.h" |
23 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" | 25 #include "mojo/services/public/interfaces/navigation/navigation.mojom.h" |
24 #include "mojo/views/views_init.h" | 26 #include "mojo/views/views_init.h" |
25 #include "ui/events/event.h" | 27 #include "ui/events/event.h" |
26 #include "ui/events/event_constants.h" | 28 #include "ui/events/event_constants.h" |
27 | 29 |
28 #if defined CreateWindow | 30 #if defined CreateWindow |
29 #undef CreateWindow | 31 #undef CreateWindow |
30 #endif | 32 #endif |
31 | 33 |
32 using mojo::view_manager::Id; | 34 using mojo::view_manager::Id; |
33 using mojo::view_manager::Node; | 35 using mojo::view_manager::Node; |
34 using mojo::view_manager::NodeObserver; | 36 using mojo::view_manager::NodeObserver; |
35 using mojo::view_manager::View; | 37 using mojo::view_manager::View; |
36 using mojo::view_manager::ViewEventDispatcher; | 38 using mojo::view_manager::ViewEventDispatcher; |
37 using mojo::view_manager::ViewManager; | 39 using mojo::view_manager::ViewManager; |
| 40 using mojo::view_manager::ViewManagerClientFactory; |
38 using mojo::view_manager::ViewManagerDelegate; | 41 using mojo::view_manager::ViewManagerDelegate; |
39 using mojo::view_manager::ViewObserver; | 42 using mojo::view_manager::ViewObserver; |
40 | 43 |
41 namespace mojo { | 44 namespace mojo { |
42 namespace examples { | 45 namespace examples { |
43 | 46 |
44 class WindowManager; | 47 class WindowManager; |
45 | 48 |
46 namespace { | 49 namespace { |
47 | 50 |
48 const int kBorderInset = 25; | 51 const int kBorderInset = 25; |
49 const int kControlPanelWidth = 200; | 52 const int kControlPanelWidth = 200; |
50 const int kTextfieldHeight = 25; | 53 const int kTextfieldHeight = 25; |
51 | 54 |
52 } // namespace | 55 } // namespace |
53 | 56 |
54 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { | 57 class WindowManagerConnection : public InterfaceImpl<IWindowManager> { |
55 public: | 58 public: |
56 explicit WindowManagerConnection(ApplicationConnection* connection, | 59 explicit WindowManagerConnection(WindowManager* window_manager) |
57 WindowManager* window_manager) | |
58 : window_manager_(window_manager) {} | 60 : window_manager_(window_manager) {} |
59 virtual ~WindowManagerConnection() {} | 61 virtual ~WindowManagerConnection() {} |
60 | 62 |
61 private: | 63 private: |
62 // Overridden from IWindowManager: | 64 // Overridden from IWindowManager: |
63 virtual void CloseWindow(Id node_id) OVERRIDE; | 65 virtual void CloseWindow(Id node_id) OVERRIDE; |
64 virtual void ShowKeyboard(Id view_id, RectPtr bounds) OVERRIDE; | 66 virtual void ShowKeyboard(Id view_id, RectPtr bounds) OVERRIDE; |
65 virtual void HideKeyboard(Id view_id) OVERRIDE; | 67 virtual void HideKeyboard(Id view_id) OVERRIDE; |
66 | 68 |
67 WindowManager* window_manager_; | 69 WindowManager* window_manager_; |
68 | 70 |
69 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); | 71 DISALLOW_COPY_AND_ASSIGN(WindowManagerConnection); |
70 }; | 72 }; |
71 | 73 |
72 class NavigatorHost : public InterfaceImpl<navigation::NavigatorHost> { | 74 class NavigatorHost : public InterfaceImpl<navigation::NavigatorHost> { |
73 public: | 75 public: |
74 explicit NavigatorHost(ApplicationConnection* connection, | 76 explicit NavigatorHost(WindowManager* window_manager) |
75 WindowManager* window_manager) | 77 : window_manager_(window_manager) {} |
76 : window_manager_(window_manager) { | |
77 } | |
78 virtual ~NavigatorHost() { | 78 virtual ~NavigatorHost() { |
79 } | 79 } |
80 | 80 |
81 private: | 81 private: |
82 virtual void DidNavigateLocally(uint32 source_node_id, | 82 virtual void DidNavigateLocally(uint32 source_node_id, |
83 const mojo::String& url) OVERRIDE; | 83 const mojo::String& url) OVERRIDE; |
84 virtual void RequestNavigate( | 84 virtual void RequestNavigate( |
85 uint32 source_node_id, | 85 uint32 source_node_id, |
86 navigation::Target target, | 86 navigation::Target target, |
87 navigation::NavigationDetailsPtr nav_details) OVERRIDE; | 87 navigation::NavigationDetailsPtr nav_details) OVERRIDE; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 // TODO(hansmuller): Do Layout | 179 // TODO(hansmuller): Do Layout |
180 } | 180 } |
181 | 181 |
182 Node* root_; | 182 Node* root_; |
183 ViewManager* view_manager_; | 183 ViewManager* view_manager_; |
184 Id content_node_id_; | 184 Id content_node_id_; |
185 | 185 |
186 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager); | 186 DISALLOW_COPY_AND_ASSIGN(RootLayoutManager); |
187 }; | 187 }; |
188 | 188 |
189 class WindowManager : public ApplicationDelegate, | 189 class WindowManager |
190 public DebugPanel::Delegate, | 190 : public ApplicationDelegate, |
191 public ViewManagerDelegate, | 191 public DebugPanel::Delegate, |
192 public ViewEventDispatcher { | 192 public ViewManagerDelegate, |
| 193 public ViewEventDispatcher, |
| 194 public InterfaceFactoryWithContext<WindowManagerConnection, |
| 195 WindowManager>, |
| 196 public InterfaceFactoryWithContext<NavigatorHost, WindowManager> { |
193 public: | 197 public: |
194 WindowManager() | 198 WindowManager() |
195 : launcher_ui_(NULL), | 199 : InterfaceFactoryWithContext<WindowManagerConnection, WindowManager>( |
| 200 this), |
| 201 InterfaceFactoryWithContext<NavigatorHost, WindowManager>(this), |
| 202 launcher_ui_(NULL), |
196 view_manager_(NULL), | 203 view_manager_(NULL), |
197 app_(NULL) { | 204 view_manager_client_factory_(this), |
198 } | 205 app_(NULL) {} |
199 | 206 |
200 virtual ~WindowManager() {} | 207 virtual ~WindowManager() {} |
201 | 208 |
202 void CloseWindow(Id node_id) { | 209 void CloseWindow(Id node_id) { |
203 Node* node = view_manager_->GetNodeById(node_id); | 210 Node* node = view_manager_->GetNodeById(node_id); |
204 DCHECK(node); | 211 DCHECK(node); |
205 std::vector<Node*>::iterator iter = | 212 std::vector<Node*>::iterator iter = |
206 std::find(windows_.begin(), windows_.end(), node); | 213 std::find(windows_.begin(), windows_.end(), node); |
207 DCHECK(iter != windows_.end()); | 214 DCHECK(iter != windows_.end()); |
208 windows_.erase(iter); | 215 windows_.erase(iter); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 private: | 266 private: |
260 // Overridden from ApplicationDelegate: | 267 // Overridden from ApplicationDelegate: |
261 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE { | 268 virtual void Initialize(ApplicationImpl* app) MOJO_OVERRIDE { |
262 app_ = app; | 269 app_ = app; |
263 app->ConnectToService("mojo:mojo_launcher", &launcher_); | 270 app->ConnectToService("mojo:mojo_launcher", &launcher_); |
264 views_init_.reset(new ViewsInit); | 271 views_init_.reset(new ViewsInit); |
265 } | 272 } |
266 | 273 |
267 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) | 274 virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) |
268 MOJO_OVERRIDE { | 275 MOJO_OVERRIDE { |
269 connection->AddService<WindowManagerConnection>(this); | 276 connection->AddServiceFactory<IWindowManager>(this); |
270 connection->AddService<NavigatorHost>(this); | 277 connection->AddServiceFactory<navigation::NavigatorHost>(this); |
271 ViewManager::ConfigureIncomingConnection(connection, this); | 278 connection->AddServiceFactory(&view_manager_client_factory_); |
272 return true; | 279 return true; |
273 } | 280 } |
274 | 281 |
275 // Overridden from ViewManagerDelegate: | 282 // Overridden from ViewManagerDelegate: |
276 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE { | 283 virtual void OnRootAdded(ViewManager* view_manager, Node* root) OVERRIDE { |
277 DCHECK(!view_manager_); | 284 DCHECK(!view_manager_); |
278 view_manager_ = view_manager; | 285 view_manager_ = view_manager; |
279 view_manager_->SetEventDispatcher(this); | 286 view_manager_->SetEventDispatcher(this); |
280 | 287 |
281 Node* node = Node::Create(view_manager_); | 288 Node* node = Node::Create(view_manager_); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 | 432 |
426 debug_panel_ = new DebugPanel(this, node); | 433 debug_panel_ = new DebugPanel(this, node); |
427 } | 434 } |
428 | 435 |
429 scoped_ptr<ViewsInit> views_init_; | 436 scoped_ptr<ViewsInit> views_init_; |
430 DebugPanel* debug_panel_; | 437 DebugPanel* debug_panel_; |
431 launcher::LauncherPtr launcher_; | 438 launcher::LauncherPtr launcher_; |
432 Node* launcher_ui_; | 439 Node* launcher_ui_; |
433 std::vector<Node*> windows_; | 440 std::vector<Node*> windows_; |
434 ViewManager* view_manager_; | 441 ViewManager* view_manager_; |
| 442 ViewManagerClientFactory view_manager_client_factory_; |
435 scoped_ptr<RootLayoutManager> root_layout_manager_; | 443 scoped_ptr<RootLayoutManager> root_layout_manager_; |
436 | 444 |
437 // Id of the node most content is added to. The keyboard is NOT added here. | 445 // Id of the node most content is added to. The keyboard is NOT added here. |
438 Id content_node_id_; | 446 Id content_node_id_; |
439 | 447 |
440 scoped_ptr<KeyboardManager> keyboard_manager_; | 448 scoped_ptr<KeyboardManager> keyboard_manager_; |
441 ApplicationImpl* app_; | 449 ApplicationImpl* app_; |
442 | 450 |
443 DISALLOW_COPY_AND_ASSIGN(WindowManager); | 451 DISALLOW_COPY_AND_ASSIGN(WindowManager); |
444 }; | 452 }; |
(...skipping 23 matching lines...) Expand all Loading... |
468 } | 476 } |
469 | 477 |
470 } // namespace examples | 478 } // namespace examples |
471 | 479 |
472 // static | 480 // static |
473 ApplicationDelegate* ApplicationDelegate::Create() { | 481 ApplicationDelegate* ApplicationDelegate::Create() { |
474 return new examples::WindowManager; | 482 return new examples::WindowManager; |
475 } | 483 } |
476 | 484 |
477 } // namespace mojo | 485 } // namespace mojo |
OLD | NEW |