| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #import "remoting/host/disconnect_window_mac.h" |
| |
| #include "base/compiler_specific.h" |
| #include "base/sys_string_conversions.h" |
| #include "remoting/host/chromoting_host.h" |
| #include "remoting/host/disconnect_window.h" |
| |
| namespace remoting { |
| class DisconnectWindowMac : public remoting::DisconnectWindow { |
| public: |
| DisconnectWindowMac(); |
| virtual ~DisconnectWindowMac(); |
| |
| virtual void Show(remoting::ChromotingHost* host, |
| const std::string& username) OVERRIDE; |
| virtual void Hide() OVERRIDE; |
| |
| private: |
| DisconnectWindowController* window_controller_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DisconnectWindowMac); |
| }; |
| |
| DisconnectWindowMac::DisconnectWindowMac() |
| : window_controller_(nil) { |
| } |
| |
| DisconnectWindowMac::~DisconnectWindowMac() { |
| [window_controller_ close]; |
| } |
| |
| void DisconnectWindowMac::Show(remoting::ChromotingHost* host, |
| const std::string& username) { |
| CHECK(window_controller_ == nil); |
| NSString* nsUsername = base::SysUTF8ToNSString(username); |
| window_controller_ = |
| [[DisconnectWindowController alloc] initWithHost:host |
| window:this |
| username:nsUsername]; |
| [window_controller_ showWindow:nil]; |
| } |
| |
| void DisconnectWindowMac::Hide() { |
| // DisconnectWindowController is responsible for releasing itself in its |
| // windowWillClose: method. |
| [window_controller_ close]; |
| window_controller_ = nil; |
| } |
| |
| remoting::DisconnectWindow* remoting::DisconnectWindow::Create() { |
| return new DisconnectWindowMac; |
| } |
| } // namespace remoting |
| |
| @interface DisconnectWindowController() |
| @property (nonatomic, assign) remoting::ChromotingHost* host; |
| @property (nonatomic, assign) remoting::DisconnectWindowMac* disconnectWindow; |
| @property (nonatomic, copy) NSString* username; |
| @end |
| |
| @implementation DisconnectWindowController |
| |
| @synthesize host = host_; |
| @synthesize disconnectWindow = disconnectWindow_; |
| @synthesize username = username_; |
| |
| - (id)initWithHost:(remoting::ChromotingHost*)host |
| window:(remoting::DisconnectWindowMac*)disconnectWindow |
| username:(NSString*)username { |
| self = [super initWithWindowNibName:@"disconnect_window"]; |
| if (self) { |
| host_ = host; |
| disconnectWindow_ = disconnectWindow; |
| username_ = [username copy]; |
| } |
| return self; |
| } |
| |
| - (void)dealloc { |
| [username_ release]; |
| [super dealloc]; |
| } |
| |
| - (IBAction)stopSharing:(id)sender { |
| if (self.host) { |
| self.host->Shutdown(NULL); |
| self.host = NULL; |
| } |
| self.disconnectWindow = NULL; |
| } |
| |
| - (void)windowDidLoad { |
| // TODO(jamiewalch): Resize the window to fit the username without leaving too |
| // much space. |
| [usernameField_ setStringValue:self.username]; |
| } |
| |
| - (void)windowWillClose:(NSNotification*)notification { |
| [self stopSharing:self]; |
| [self autorelease]; |
| } |
| |
| @end |