1// Copyright (c) 2010 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_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
6#define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
7#pragma once
8
9#include "chrome/browser/chromeos/cros/network_library.h"
10#include "chrome/browser/chromeos/status/network_menu.h"
11#include "chrome/browser/chromeos/views/dropdown_button.h"
12#include "ui/base/animation/animation_delegate.h"
13#include "ui/base/animation/throb_animation.h"
14
15namespace chromeos {
16
17// The network dropdown button with menu. Used on welcome screen.
18// This class will handle getting the networks to show connected network
19// at top level and populating the menu.
20// See NetworkMenu for more details.
21class NetworkDropdownButton : public DropDownButton,
22                              public NetworkMenu,
23                              public NetworkLibrary::NetworkManagerObserver {
24 public:
25  NetworkDropdownButton(bool browser_mode, gfx::NativeWindow parent_window);
26  virtual ~NetworkDropdownButton();
27
28  // ui::AnimationDelegate implementation.
29  virtual void AnimationProgressed(const ui::Animation* animation);
30
31  // NetworkLibrary::NetworkManagerObserver implementation.
32  virtual void OnNetworkManagerChanged(NetworkLibrary* obj);
33
34  // Refreshes button state. Used when language has been changed.
35  void Refresh();
36
37 protected:
38  // NetworkMenu implementation:
39  virtual bool IsBrowserMode() const { return browser_mode_; }
40  virtual gfx::NativeWindow GetNativeWindow() const { return parent_window_; }
41  virtual void OpenButtonOptions() {}
42  virtual bool ShouldOpenButtonOptions() const { return false; }
43
44 private:
45  bool browser_mode_;
46
47  // The throb animation that does the wifi connecting animation.
48  ui::ThrobAnimation animation_connecting_;
49
50  // The duration of the icon throbbing in milliseconds.
51  static const int kThrobDuration;
52
53  gfx::NativeWindow parent_window_;
54
55  DISALLOW_COPY_AND_ASSIGN(NetworkDropdownButton);
56};
57
58}  // namespace chromeos
59
60#endif  // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_DROPDOWN_BUTTON_H_
61