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 17class ChromeLauncherController; 18class ChromeLauncherAppMenuItem; 19 20typedef ScopedVector<ChromeLauncherAppMenuItem> ChromeLauncherAppMenuItems; 21 22namespace aura { 23class Window; 24} 25 26namespace content { 27class WebContents; 28} 29 30// LauncherItemController is used by ChromeLauncherController to track one 31// or more windows associated with a shelf item. 32class 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