1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/cros/network_library.h"
10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/chromeos/status/network_menu.h"
114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/chromeos/views/dropdown_button.h"
123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/animation_delegate.h"
133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "ui/base/animation/throb_animation.h"
14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsennamespace chromeos {
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The network dropdown button with menu. Used on welcome screen.
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This class will handle getting the networks to show connected network
19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// at top level and populating the menu.
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// See NetworkMenu for more details.
214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass NetworkDropdownButton : public DropDownButton,
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                              public NetworkMenu,
23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              public NetworkLibrary::NetworkManagerObserver {
24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public:
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  NetworkDropdownButton(bool browser_mode, gfx::NativeWindow parent_window);
26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual ~NetworkDropdownButton();
27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // ui::AnimationDelegate implementation.
293f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  virtual void AnimationProgressed(const ui::Animation* animation);
30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // NetworkLibrary::NetworkManagerObserver implementation.
32513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OnNetworkManagerChanged(NetworkLibrary* obj);
33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Refreshes button state. Used when language has been changed.
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  void Refresh();
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen protected:
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // NetworkMenu implementation:
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual bool IsBrowserMode() const { return browser_mode_; }
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  virtual gfx::NativeWindow GetNativeWindow() const { return parent_window_; }
41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OpenButtonOptions() {}
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool ShouldOpenButtonOptions() const { return false; }
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private:
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  bool browser_mode_;
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // The throb animation that does the wifi connecting animation.
483f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  ui::ThrobAnimation animation_connecting_;
49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // The duration of the icon throbbing in milliseconds.
51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  static const int kThrobDuration;
52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  gfx::NativeWindow parent_window_;
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(NetworkDropdownButton);
56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen};
57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}  // namespace chromeos
59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif  // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
61