15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ash/shelf/shelf_item_delegate.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/shelf/shelf_item_types.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/ash/launcher/chrome_launcher_types.h" 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/event.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeLauncherController; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ChromeLauncherAppMenuItem; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef ScopedVector<ChromeLauncherAppMenuItem> ChromeLauncherAppMenuItems; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LauncherItemController is used by ChromeLauncherController to track one 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// or more windows associated with a shelf item. 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class LauncherItemController : public ash::ShelfItemDelegate { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Type { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_APP, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_APP_PANEL, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TYPE_SHORTCUT, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TYPE_WINDOWED_APP 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LauncherItemController(Type type, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& app_id, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeLauncherController* launcher_controller); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~LauncherItemController(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Type type() const { return type_; } 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfID shelf_id() const { return shelf_id_; } 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_shelf_id(ash::ShelfID id) { shelf_id_ = id; } 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const std::string& app_id() const; 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ChromeLauncherController* launcher_controller() const { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return launcher_controller_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Lock this item to the launcher without being pinned (windowed v1 apps). 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void lock() { locked_++; } 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void unlock() { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(locked_); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) locked_--; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool locked() { return locked_ > 0; } 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool image_set_by_controller() const { return image_set_by_controller_; } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_image_set_by_controller(bool image_set_by_controller) { 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) image_set_by_controller_ = image_set_by_controller; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this item is open. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsOpen() const = 0; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if this item is visible (e.g. not minimized). 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsVisible() const = 0; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launches a new instance of the app associated with this item. 7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void Launch(ash::LaunchSource source, int event_flags) = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shows and activates the most-recently-active window associated with the 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // item, or launches the item if it is not currently open. 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns true when a new item got created. 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool Activate(ash::LaunchSource source) = 0; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called to retrieve the list of running applications. 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ChromeLauncherAppMenuItems GetApplicationList(int event_flags) = 0; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Helper function to get the ash::ShelfItemType for the item type. 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfItemType GetShelfItemType() const; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function to return the title associated with |app_id_|. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns an empty title if no matching extension can be found. 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 GetAppTitle() const; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Type type_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // App id will be empty if there is no app associated with the window. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string app_id_; 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ash::ShelfID shelf_id_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeLauncherController* launcher_controller_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The lock counter which tells the launcher if the item can be removed from 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the launcher (0) or not (>0). It is being used for windowed V1 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // applications. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int locked_; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set to true if the launcher item image has been set by the controller. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool image_set_by_controller_; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LauncherItemController); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_ASH_LAUNCHER_LAUNCHER_ITEM_CONTROLLER_H_ 111