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_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 7 8 #include "ash/shelf/shelf_item_delegate.h" 9 #include "ash/shelf/shelf_item_types.h" 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/scoped_vector.h" 13 #include "base/strings/string16.h" 14 #include "chrome/browser/ui/ash/launcher/chrome_launcher_types.h" 15 #include "ui/events/event.h" 16 17 class ChromeLauncherController; 18 class ChromeLauncherAppMenuItem; 19 20 typedef ScopedVector<ChromeLauncherAppMenuItem> ChromeLauncherAppMenuItems; 21 22 namespace aura { 23 class Window; 24 } 25 26 namespace content { 27 class WebContents; 28 } 29 30 // LauncherItemController is used by ChromeLauncherController to track one 31 // or more windows associated with a shelf item. 32 class LauncherItemController : public ash::ShelfItemDelegate { 33 public: 34 enum Type { 35 TYPE_APP, 36 TYPE_APP_PANEL, 37 TYPE_SHORTCUT, 38 TYPE_WINDOWED_APP 39 }; 40 41 LauncherItemController(Type type, 42 const std::string& app_id, 43 ChromeLauncherController* launcher_controller); 44 virtual ~LauncherItemController(); 45 46 Type type() const { return type_; } 47 ash::ShelfID shelf_id() const { return shelf_id_; } 48 void set_shelf_id(ash::ShelfID id) { shelf_id_ = id; } 49 virtual const std::string& app_id() const; 50 ChromeLauncherController* launcher_controller() const { 51 return launcher_controller_; 52 } 53 54 // Lock this item to the launcher without being pinned (windowed v1 apps). 55 void lock() { locked_++; } 56 void unlock() { 57 DCHECK(locked_); 58 locked_--; 59 } 60 bool locked() { return locked_ > 0; } 61 62 bool image_set_by_controller() const { return image_set_by_controller_; } 63 void set_image_set_by_controller(bool image_set_by_controller) { 64 image_set_by_controller_ = image_set_by_controller; 65 } 66 67 // Returns true if this item is open. 68 virtual bool IsOpen() const = 0; 69 70 // Returns true if this item is visible (e.g. not minimized). 71 virtual bool IsVisible() const = 0; 72 73 // Launches a new instance of the app associated with this item. 74 virtual void Launch(ash::LaunchSource source, int event_flags) = 0; 75 76 // Shows and activates the most-recently-active window associated with the 77 // item, or launches the item if it is not currently open. 78 // Returns true when a new item got created. 79 virtual bool Activate(ash::LaunchSource source) = 0; 80 81 // Called to retrieve the list of running applications. 82 virtual ChromeLauncherAppMenuItems GetApplicationList(int event_flags) = 0; 83 84 // Helper function to get the ash::ShelfItemType for the item type. 85 ash::ShelfItemType GetShelfItemType() const; 86 87 protected: 88 // Helper function to return the title associated with |app_id_|. 89 // Returns an empty title if no matching extension can be found. 90 base::string16 GetAppTitle() const; 91 92 private: 93 const Type type_; 94 // App id will be empty if there is no app associated with the window. 95 const std::string app_id_; 96 ash::ShelfID shelf_id_; 97 ChromeLauncherController* launcher_controller_; 98 99 // The lock counter which tells the launcher if the item can be removed from 100 // the launcher (0) or not (>0). It is being used for windowed V1 101 // applications. 102 int locked_; 103 104 // Set to true if the launcher item image has been set by the controller. 105 bool image_set_by_controller_; 106 107 DISALLOW_COPY_AND_ASSIGN(LauncherItemController); 108 }; 109 110 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 111