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

Side by Side Diff: chrome/browser/ui/gtk/reload_button_gtk.h

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_UI_GTK_RELOAD_BUTTON_GTK_H_
6 #define CHROME_BROWSER_UI_GTK_RELOAD_BUTTON_GTK_H_
7
8 #include <gtk/gtk.h>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/timer/timer.h"
13 #include "chrome/browser/ui/gtk/custom_button.h"
14 #include "chrome/browser/ui/gtk/menu_gtk.h"
15 #include "content/public/browser/notification_observer.h"
16 #include "content/public/browser/notification_registrar.h"
17 #include "ui/base/gtk/gtk_signal.h"
18 #include "ui/base/gtk/owned_widget_gtk.h"
19 #include "ui/base/models/simple_menu_model.h"
20
21 class Browser;
22 class GtkThemeService;
23 class LocationBarViewGtk;
24
25 class ReloadButtonGtk : public content::NotificationObserver,
26 MenuGtk::Delegate,
27 public ui::SimpleMenuModel::Delegate {
28 public:
29 enum Mode { MODE_RELOAD = 0, MODE_STOP };
30
31 ReloadButtonGtk(LocationBarViewGtk* location_bar, Browser* browser);
32 virtual ~ReloadButtonGtk();
33
34 GtkWidget* widget() const { return widget_.get(); }
35
36 // Ask for a specified button state. If |force| is true this will be applied
37 // immediately.
38 void ChangeMode(Mode mode, bool force);
39
40 // Provide content::NotificationObserver implementation.
41 virtual void Observe(int type,
42 const content::NotificationSource& source,
43 const content::NotificationDetails& details) OVERRIDE;
44
45 // Provide MenuGtk::Delegate implementation.
46 virtual void StoppedShowing() OVERRIDE;
47
48 // Provide SimpleMenuModel::Delegate implementation.
49 virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
50 virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
51 virtual bool IsCommandIdVisible(int command_id) const OVERRIDE;
52 virtual bool GetAcceleratorForCommandId(
53 int command_id,
54 ui::Accelerator* accelerator) OVERRIDE;
55 virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
56
57 private:
58 friend class ReloadButtonGtkTest;
59
60 CHROMEGTK_CALLBACK_0(ReloadButtonGtk, void, OnClicked);
61 CHROMEGTK_CALLBACK_1(ReloadButtonGtk, gboolean, OnExpose, GdkEventExpose*);
62 CHROMEGTK_CALLBACK_1(ReloadButtonGtk,
63 gboolean,
64 OnLeaveNotify,
65 GdkEventCrossing*);
66 CHROMEGTK_CALLBACK_4(ReloadButtonGtk,
67 gboolean,
68 OnQueryTooltip,
69 gint,
70 gint,
71 gboolean,
72 GtkTooltip*);
73
74 // Starts a timer to show the dropdown menu.
75 CHROMEGTK_CALLBACK_1(ReloadButtonGtk,
76 gboolean,
77 OnButtonPress,
78 GdkEventButton*);
79
80 // If there is a timer to show the dropdown menu, and the mouse has moved
81 // sufficiently down the screen, cancel the timer and immediately show the
82 // menu.
83 CHROMEGTK_CALLBACK_1(ReloadButtonGtk,
84 gboolean,
85 OnMouseMove,
86 GdkEventMotion*);
87
88 void UpdateThemeButtons();
89
90 void OnDoubleClickTimer();
91 void OnStopToReloadTimer();
92
93 // Shows the dropdown menu.
94 void ShowReloadMenu(int button, guint32 event_time);
95
96 // Do actual reload. command == 0, indicates default dehaviour.
97 void DoReload(int command);
98
99 // Indicates if reload menu is currently enabled.
100 bool ReloadMenuEnabled();
101 void ClearCache();
102
103 base::OneShotTimer<ReloadButtonGtk> double_click_timer_;
104 base::OneShotTimer<ReloadButtonGtk> stop_to_reload_timer_;
105
106 // These may be NULL when testing.
107 LocationBarViewGtk* const location_bar_;
108 Browser* const browser_;
109
110 // The mode we should be in assuming no timers are running.
111 Mode intended_mode_;
112
113 // The currently-visible mode - this may differ from the intended mode.
114 Mode visible_mode_;
115
116 // Used to listen for theme change notifications.
117 content::NotificationRegistrar registrar_;
118
119 GtkThemeService* theme_service_;
120
121 CustomDrawButtonBase reload_;
122 CustomDrawButtonBase stop_;
123 CustomDrawHoverController hover_controller_;
124
125 ui::OwnedWidgetGtk widget_;
126
127 // The delay times for the timers. These are members so that tests can modify
128 // them.
129 base::TimeDelta double_click_timer_delay_;
130 base::TimeDelta stop_to_reload_timer_delay_;
131
132 // The y position of the last mouse down event.
133 int y_position_of_last_press_;
134 // The menu gets reset every time it is shown.
135 scoped_ptr<MenuGtk> menu_;
136 // The dropdown menu model.
137 scoped_ptr<ui::SimpleMenuModel> menu_model_;
138 // Indicates if menu is currently shown.
139 bool menu_visible_;
140
141 // TESTING ONLY
142 // True if we should pretend the button is hovered.
143 bool testing_mouse_hovered_;
144 // Increments when we would tell the browser to "reload", so
145 // test code can tell whether we did so (as there may be no |browser_|).
146 int testing_reload_count_;
147
148 base::WeakPtrFactory<ReloadButtonGtk> weak_factory_;
149
150 DISALLOW_IMPLICIT_CONSTRUCTORS(ReloadButtonGtk);
151 };
152
153 #endif // CHROME_BROWSER_UI_GTK_RELOAD_BUTTON_GTK_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698