Home | History | Annotate | Download | only in status
      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_CHROMEOS_STATUS_NETWORK_MENU_H_
      6 #define CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "base/strings/string16.h"
     14 #include "ui/gfx/native_widget_types.h"  // gfx::NativeWindow
     15 
     16 class Browser;
     17 
     18 namespace ui {
     19 class MenuModel;
     20 }
     21 
     22 namespace views {
     23 class MenuItemView;
     24 class MenuButton;
     25 class MenuRunner;
     26 }
     27 
     28 namespace chromeos {
     29 
     30 class NetworkMenuModel;
     31 
     32 // This class builds and manages a ui::MenuModel used to build network
     33 // menus. It does not represent an actual menu widget. The menu is populated
     34 // with the list of wifi and mobile networks, and handles connecting to
     35 // existing networks or spawning UI to configure a new network.
     36 //
     37 // This class is now only used to build the dropdown menu in the oobe and
     38 // other web based login screen UI. See ash::NetworkStateListDetailedView for
     39 // the status area network list. TODO(stevenjb): Integrate this with the
     40 // login UI code.
     41 //
     42 // The network menu model looks like this:
     43 //
     44 // <icon>  Ethernet
     45 // <icon>  Wifi Network A
     46 // <icon>  Wifi Network B
     47 // <icon>  Wifi Network C
     48 // <icon>  Cellular Network A
     49 // <icon>  Cellular Network B
     50 // <icon>  Cellular Network C
     51 // <icon>  Other Wi-Fi network...
     52 // --------------------------------
     53 //         Disable Wifi
     54 //         Disable Celluar
     55 // --------------------------------
     56 //         <IP Address>
     57 //         Proxy settings...
     58 //
     59 // <icon> will show the strength of the wifi/cellular networks.
     60 // The label will be BOLD if the network is currently connected.
     61 
     62 class NetworkMenu {
     63  public:
     64   class Delegate {
     65    public:
     66     virtual ~Delegate();
     67     virtual gfx::NativeWindow GetNativeWindow() const = 0;
     68     virtual void OpenButtonOptions() = 0;
     69     virtual bool ShouldOpenButtonOptions() const = 0;
     70     virtual void OnConnectToNetworkRequested(
     71         const std::string& service_path) = 0;
     72   };
     73 
     74   explicit NetworkMenu(Delegate* delegate);
     75   virtual ~NetworkMenu();
     76 
     77   // Access to menu definition.
     78   ui::MenuModel* GetMenuModel();
     79 
     80   // Update the menu (e.g. when the network list or status has changed).
     81   virtual void UpdateMenu();
     82 
     83  private:
     84   friend class NetworkMenuModel;
     85 
     86   // Getters.
     87   Delegate* delegate() const { return delegate_; }
     88 
     89   // Weak ptr to delegate.
     90   Delegate* delegate_;
     91 
     92   // Set to true if we are currently refreshing the menu.
     93   bool refreshing_menu_;
     94 
     95   // The network menu.
     96   scoped_ptr<NetworkMenuModel> main_menu_model_;
     97 
     98   // Weak pointer factory so we can start connections at a later time
     99   // without worrying that they will actually try to happen after the lifetime
    100   // of this object.
    101   base::WeakPtrFactory<NetworkMenu> weak_pointer_factory_;
    102 
    103   DISALLOW_COPY_AND_ASSIGN(NetworkMenu);
    104 };
    105 
    106 }  // namespace chromeos
    107 
    108 #endif  // CHROME_BROWSER_CHROMEOS_STATUS_NETWORK_MENU_H_
    109