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