1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#ifndef CHROME_BROWSER_UI_COCOA_TABLE_MODEL_ARRAY_CONTROLLER_H_ 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#define CHROME_BROWSER_UI_COCOA_TABLE_MODEL_ARRAY_CONTROLLER_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#import <Cocoa/Cocoa.h> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#import "base/mac/cocoa_protocols.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_nsobject.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/models/table_model_observer.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass RemoveRowsObserverBridge; 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass RemoveRowsTableModel; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen@class TableModelArrayController; 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// This class allows you to use a RemoveRowsTableModel with Cocoa bindings. 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// It maps the CanRemoveRows method to its canRemove property, and exposes 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// RemoveRows and RemoveAll as actions (remove: and removeAll:). 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// If the table model has groups, these are inserted into the list of arranged 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// objects as group rows. 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// The designated initializer is the same as for NSArrayController, 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// initWithContent:, but usually this class is instantiated from a nib file. 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Clicking on a group row selects all rows belonging to that group, like it 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// does in a Windows table_view. 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// In order to show group rows, this class must be the delegate of the 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// NSTableView. 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen@interface TableModelArrayController : NSArrayController<NSTableViewDelegate> { 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen @private 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen RemoveRowsTableModel* model_; // weak 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_ptr<RemoveRowsObserverBridge> tableObserver_; 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_nsobject<NSDictionary> columns_; 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen scoped_nsobject<NSString> groupTitle_; 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen} 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Bind this controller to the given model. 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// |columns| is a dictionary mapping table column bindings to NSNumbers 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// containing the column identifier in the TableModel. 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// |groupTitleColumn| is the column in the table that should display the group 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// title for a group row, usually the first column. If the model doesn't have 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// groups, it can be nil. 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen- (void)bindToTableModel:(RemoveRowsTableModel*)model 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen withColumns:(NSDictionary*)columns 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen groupTitleColumn:(NSString*)groupTitleColumn; 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen- (IBAction)removeAll:(id)sender; 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen@end 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#endif // CHROME_BROWSER_UI_COCOA_TABLE_MODEL_ARRAY_CONTROLLER_H_ 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 55