blob: 27617a058309bda6d9a2452f4c38bda7827352f7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_LAUNCHER_LAUNCHER_VIEW_H_
#define ASH_LAUNCHER_LAUNCHER_VIEW_H_
#pragma once
#include <vector>
#include "ash/launcher/launcher_button_host.h"
#include "ash/launcher/launcher_model_observer.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/widget/widget_delegate.h"
namespace views {
class BoundsAnimator;
class ImageButton;
class MenuRunner;
}
namespace aura_shell {
struct LauncherItem;
class LauncherModel;
class ViewModel;
namespace internal {
class LauncherView : public views::WidgetDelegateView,
public LauncherModelObserver,
public views::ButtonListener,
public LauncherButtonHost {
public:
explicit LauncherView(LauncherModel* model);
virtual ~LauncherView();
void Init();
private:
class FadeOutAnimationDelegate;
class StartFadeAnimationDelegate;
struct IdealBounds {
gfx::Rect new_browser_bounds;
gfx::Rect show_apps_bounds;
gfx::Rect overflow_bounds;
};
// Sets the bounds of each view to its ideal bounds.
void LayoutToIdealBounds();
// Calculates the ideal bounds. The bounds of each button corresponding to an
// item in the model is set in |view_model_|, the bounds of the
// |new_browser_button_| and |show_apps_button_| is set in |bounds|.
void CalculateIdealBounds(IdealBounds* bounds);
// Returns the index of the last view whose max x-coordinate is less than
// |max_x|. Returns -1 if nothing fits, or there are no views.
int DetermineLastVisibleIndex(int max_x);
// Animates the bounds of each view to its ideal bounds.
void AnimateToIdealBounds();
// Creates the view used to represent |item|.
views::View* CreateViewForItem(const LauncherItem& item);
// Fades |view| from an opacity of 0 to 1. This is when adding a new item.
void FadeIn(views::View* view);
// Invoked when the mouse has moved enough to trigger a drag. Sets internal
// state in preparation for the drag.
void PrepareForDrag(const views::MouseEvent& event);
// Invoked when the mouse is dragged. Updates the models as appropriate.
void ContinueDrag(const views::MouseEvent& event);
// If there is a drag operation in progress it's canceled.
void CancelDrag(views::View* deleted_view);
// Common setup done for all children.
void ConfigureChildView(views::View* view);
// Returns the windows whose icon is not show because it doesn't fit.
void GetOverflowWindows(std::vector<aura::Window*>* names);
// Shows the overflow menu.
void ShowOverflowMenu();
// Overridden from views::View:
virtual gfx::Size GetPreferredSize() OVERRIDE;
virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE;
// Overridden from LauncherModelObserver:
virtual void LauncherItemAdded(int model_index) OVERRIDE;
virtual void LauncherItemRemoved(int model_index) OVERRIDE;
virtual void LauncherItemImagesChanged(int model_index) OVERRIDE;
virtual void LauncherItemMoved(int start_index, int target_index) OVERRIDE;
virtual void LauncherItemImagesWillChange(int index) OVERRIDE;
// Overridden from LauncherButtonHost:
virtual void MousePressedOnButton(views::View* view,
const views::MouseEvent& event) OVERRIDE;
virtual void MouseDraggedOnButton(views::View* view,
const views::MouseEvent& event) OVERRIDE;
virtual void MouseReleasedOnButton(views::View* view,
bool canceled) OVERRIDE;
// Overriden from views::ButtonListener:
virtual void ButtonPressed(views::Button* sender,
const views::Event& event) OVERRIDE;
// The model; owned by Launcher.
LauncherModel* model_;
// Used to manage the set of active launcher buttons. There is a view per
// item in |model_|.
scoped_ptr<ViewModel> view_model_;
scoped_ptr<views::BoundsAnimator> bounds_animator_;
views::ImageButton* new_browser_button_;
views::ImageButton* show_apps_button_;
views::ImageButton* overflow_button_;
// Are we dragging? This is only set if the mouse is dragged far enough to
// trigger a drag.
bool dragging_;
// The view being dragged. This is set immediately when the mouse is pressed.
// |dragging_| is set only if the mouse is dragged far enough.
views::View* drag_view_;
// X coordinate of the mouse down event in |drag_view_|s coordinates.
int drag_offset_;
// Index |drag_view_| was initially at.
int start_drag_index_;
scoped_ptr<views::MenuRunner> overflow_menu_runner_;
DISALLOW_COPY_AND_ASSIGN(LauncherView);
};
} // namespace internal
} // namespace aura_shell
#endif // ASH_LAUNCHER_LAUNCHER_VIEW_H_
|