OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
Mr4D (OOO till 08-26)
2014/09/23 23:14:33
Yay! I found this class odd from the beginning...
| |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "athena/activity/public/activity_view_manager.h" | |
6 | |
7 #include <algorithm> | |
8 #include <map> | |
9 | |
10 #include "athena/activity/activity_widget_delegate.h" | |
11 #include "athena/activity/public/activity.h" | |
12 #include "athena/activity/public/activity_manager.h" | |
13 #include "athena/activity/public/activity_view_model.h" | |
14 #include "athena/screen/public/screen_manager.h" | |
15 #include "ui/aura/window.h" | |
16 #include "ui/views/view.h" | |
17 #include "ui/views/widget/widget.h" | |
18 #include "ui/views/widget/widget_observer.h" | |
19 | |
20 namespace athena { | |
21 namespace { | |
22 | |
23 typedef std::map<Activity*, views::Widget*> ActivityWidgetMap; | |
24 | |
25 views::Widget* CreateWidget(Activity* activity) { | |
26 ActivityViewModel* view_model = activity->GetActivityViewModel(); | |
27 views::Widget* widget = view_model->CreateWidget(); | |
28 if (widget) | |
29 return widget; | |
30 widget = new views::Widget; | |
31 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); | |
32 params.delegate = new ActivityWidgetDelegate(view_model); | |
33 widget->Init(params); | |
34 return widget; | |
35 } | |
36 | |
37 ActivityViewManager* instance = NULL; | |
38 | |
39 class ActivityViewManagerImpl : public ActivityViewManager, | |
40 public views::WidgetObserver { | |
41 public: | |
42 ActivityViewManagerImpl() { | |
43 CHECK(!instance); | |
44 instance = this; | |
45 } | |
46 | |
47 virtual ~ActivityViewManagerImpl() { | |
48 CHECK_EQ(this, instance); | |
49 instance = NULL; | |
50 } | |
51 | |
52 // ActivityViewManager: | |
53 virtual void AddActivity(Activity* activity) OVERRIDE { | |
54 CHECK(activity_widgets_.end() == activity_widgets_.find(activity)); | |
55 views::Widget* container = CreateWidget(activity); | |
56 container->AddObserver(this); | |
57 activity_widgets_[activity] = container; | |
58 container->Show(); | |
59 container->Activate(); | |
60 // Call the Activity model's initializer. It might re-order the activity | |
61 // against others, which has to be done before before registering it to the | |
62 // system. | |
63 activity->GetActivityViewModel()->Init(); | |
64 } | |
65 | |
66 virtual void RemoveActivity(Activity* activity) OVERRIDE { | |
67 ActivityWidgetMap::iterator find = activity_widgets_.find(activity); | |
68 if (find != activity_widgets_.end()) { | |
69 views::Widget* widget = find->second; | |
70 widget->RemoveObserver(this); | |
71 widget->Close(); | |
72 activity_widgets_.erase(activity); | |
73 } | |
74 } | |
75 | |
76 virtual void UpdateActivity(Activity* activity) OVERRIDE { | |
77 ActivityWidgetMap::iterator find = activity_widgets_.find(activity); | |
78 if (find != activity_widgets_.end()) { | |
79 find->second->UpdateWindowIcon(); | |
80 find->second->UpdateWindowTitle(); | |
81 } | |
82 } | |
83 | |
84 // views::WidgetObserver: | |
85 virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE { | |
86 for (ActivityWidgetMap::iterator iter = activity_widgets_.begin(); | |
87 iter != activity_widgets_.end(); | |
88 ++iter) { | |
89 if (iter->second == widget) { | |
90 Activity::Delete(iter->first); | |
91 break; | |
92 } | |
93 } | |
94 } | |
95 | |
96 private: | |
97 ActivityWidgetMap activity_widgets_; | |
98 | |
99 DISALLOW_COPY_AND_ASSIGN(ActivityViewManagerImpl); | |
100 }; | |
101 | |
102 } // namespace | |
103 | |
104 // static | |
105 ActivityViewManager* ActivityViewManager::Create() { | |
106 new ActivityViewManagerImpl(); | |
107 CHECK(instance); | |
108 return instance; | |
109 } | |
110 | |
111 ActivityViewManager* ActivityViewManager::Get() { | |
112 return instance; | |
113 } | |
114 | |
115 void ActivityViewManager::Shutdown() { | |
116 CHECK(instance); | |
117 delete instance; | |
118 } | |
119 | |
120 } // namespace athena | |
OLD | NEW |