1// Copyright (c) 2013 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 UI_MESSAGE_CENTER_COCOA_SETTINGS_CONTROLLER_H_
6#define UI_MESSAGE_CENTER_COCOA_SETTINGS_CONTROLLER_H_
7
8#import <Cocoa/Cocoa.h>
9
10#import "base/mac/scoped_nsobject.h"
11#include "base/memory/scoped_ptr.h"
12#include "ui/message_center/message_center_export.h"
13#include "ui/message_center/notifier_settings.h"
14
15@class MCSettingsController;
16@class MCTrayViewController;
17
18namespace message_center {
19
20// Bridge class between C++ and Cocoa world.
21class NotifierSettingsObserverMac : public NotifierSettingsObserver {
22 public:
23  NotifierSettingsObserverMac(MCSettingsController* settings_controller)
24      : settings_controller_(settings_controller) {}
25  virtual ~NotifierSettingsObserverMac();
26
27  // Overridden from NotifierSettingsObserver:
28  virtual void UpdateIconImage(const NotifierId& notifier_id,
29                               const gfx::Image& icon) OVERRIDE;
30  virtual void NotifierGroupChanged() OVERRIDE;
31
32 private:
33  MCSettingsController* settings_controller_;  // weak, owns this
34
35  DISALLOW_COPY_AND_ASSIGN(NotifierSettingsObserverMac);
36};
37
38}  // namespace message_center
39
40
41// The view controller responsible for the settings sheet in the center.
42MESSAGE_CENTER_EXPORT
43@interface MCSettingsController : NSViewController {
44 @private
45  scoped_ptr<message_center::NotifierSettingsObserverMac> observer_;
46  message_center::NotifierSettingsProvider* provider_;
47  MCTrayViewController* trayViewController_;  // Weak. Owns us.
48
49  // The "Settings" text at the top.
50  base::scoped_nsobject<NSTextField> settingsText_;
51
52  // The smaller text below the "Settings" text.
53  base::scoped_nsobject<NSTextField> detailsText_;
54
55  // The profile switcher.
56  base::scoped_nsobject<NSPopUpButton> groupDropDownButton_;
57
58  // Container for all the checkboxes.
59  base::scoped_nsobject<NSScrollView> scrollView_;
60
61  std::vector<message_center::Notifier*> notifiers_;
62}
63
64// Designated initializer.
65- (id)initWithProvider:(message_center::NotifierSettingsProvider*)provider
66    trayViewController:(MCTrayViewController*)trayViewController;
67
68@end
69
70// Testing API /////////////////////////////////////////////////////////////////
71
72@interface MCSettingsController (TestingAPI)
73- (NSPopUpButton*)groupDropDownButton;
74- (NSScrollView*)scrollView;
75@end
76
77#endif  // UI_MESSAGE_CENTER_COCOA_SETTINGS_CONTROLLER_H_
78