task_manager_mac.h revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2009 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_COCOA_TASK_MANAGER_MAC_H_ 6#define CHROME_BROWSER_UI_COCOA_TASK_MANAGER_MAC_H_ 7#pragma once 8 9#import <Cocoa/Cocoa.h> 10#include <vector> 11 12#import "base/mac/cocoa_protocols.h" 13#include "base/scoped_nsobject.h" 14#include "chrome/browser/task_manager/task_manager.h" 15#include "chrome/browser/ui/cocoa/table_row_nsimage_cache.h" 16 17@class WindowSizeAutosaver; 18class SkBitmap; 19class TaskManagerMac; 20 21// This class is responsible for loading the task manager window and for 22// managing it. 23@interface TaskManagerWindowController : 24 NSWindowController<NSTableViewDataSource, 25 NSTableViewDelegate> { 26 @private 27 IBOutlet NSTableView* tableView_; 28 IBOutlet NSButton* endProcessButton_; 29 TaskManagerMac* taskManagerObserver_; // weak 30 TaskManager* taskManager_; // weak 31 TaskManagerModel* model_; // weak 32 33 scoped_nsobject<WindowSizeAutosaver> size_saver_; 34 35 // These contain a permutation of [0..|model_->ResourceCount() - 1|]. Used to 36 // implement sorting. 37 std::vector<int> viewToModelMap_; 38 std::vector<int> modelToViewMap_; 39 40 // Descriptor of the current sort column. 41 scoped_nsobject<NSSortDescriptor> currentSortDescriptor_; 42} 43 44// Creates and shows the task manager's window. 45- (id)initWithTaskManagerObserver:(TaskManagerMac*)taskManagerObserver; 46 47// Refreshes all data in the task manager table. 48- (void)reloadData; 49 50// Callback for "Stats for nerds" link. 51- (IBAction)statsLinkClicked:(id)sender; 52 53// Callback for "End process" button. 54- (IBAction)killSelectedProcesses:(id)sender; 55 56// Callback for double clicks on the table. 57- (void)selectDoubleClickedTab:(id)sender; 58@end 59 60@interface TaskManagerWindowController (TestingAPI) 61- (NSTableView*)tableView; 62@end 63 64// This class listens to task changed events sent by chrome. 65class TaskManagerMac : public TaskManagerModelObserver, 66 public TableRowNSImageCache::Table { 67 public: 68 TaskManagerMac(TaskManager* task_manager); 69 virtual ~TaskManagerMac(); 70 71 // TaskManagerModelObserver 72 virtual void OnModelChanged(); 73 virtual void OnItemsChanged(int start, int length); 74 virtual void OnItemsAdded(int start, int length); 75 virtual void OnItemsRemoved(int start, int length); 76 77 // Called by the cocoa window controller when its window closes and the 78 // controller destroyed itself. Informs the model to stop updating. 79 void WindowWasClosed(); 80 81 // TableRowNSImageCache::Table 82 virtual int RowCount() const; 83 virtual SkBitmap GetIcon(int r) const; 84 85 // Creates the task manager if it doesn't exist; otherwise, it activates the 86 // existing task manager window. 87 static void Show(); 88 89 // Returns the TaskManager observed by |this|. 90 TaskManager* task_manager() { return task_manager_; } 91 92 // Lazily converts the image at the given row and caches it in |icon_cache_|. 93 NSImage* GetImageForRow(int row); 94 95 // Returns the cocoa object. Used for testing. 96 TaskManagerWindowController* cocoa_controller() { return window_controller_; } 97 private: 98 // The task manager. 99 TaskManager* const task_manager_; // weak 100 101 // Our model. 102 TaskManagerModel* const model_; // weak 103 104 // Controller of our window, destroys itself when the task manager window 105 // is closed. 106 TaskManagerWindowController* window_controller_; // weak 107 108 // Caches favicons for all rows. Needs to be initalized after |model_|. 109 TableRowNSImageCache icon_cache_; 110 111 // An open task manager window. There can only be one open at a time. This 112 // is reset to NULL when the window is closed. 113 static TaskManagerMac* instance_; 114 115 DISALLOW_COPY_AND_ASSIGN(TaskManagerMac); 116}; 117 118#endif // CHROME_BROWSER_UI_COCOA_TASK_MANAGER_MAC_H_ 119