SOURCES_macosx_dialog_provider = \
VLCLoginPanel.m \
+ VLCProgressPanel.m \
dialogProvider.m \
$(NULL)
noinst_HEADERS = \
- VLCLoginPanel.h
+ VLCLoginPanel.h \
+ VLCProgressPanel.h
--- /dev/null
+/*****************************************************************************
+ * VLCProgressPanel.h: A Generic Progress Indicator Panel created for VLC
+ *****************************************************************************
+ * Copyright (C) 2009-2010 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Felix Paul Kühne <fkuehne at videolan dot org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface VLCProgressPanel : NSPanel {
+ BOOL _isCancelled;
+
+ IBOutlet NSProgressIndicator * _progressBar;
+ IBOutlet NSTextField *_titleField;
+ IBOutlet NSTextField *_messageField;
+ IBOutlet NSButton *_cancelButton;
+ IBOutlet NSImageView *_iconView;
+}
+- (void)createContentView;
+
+- setDialogTitle:(NSString *)title;
+- setDialogMessage:(NSString *)message;
+- setCancelButtonLabel:(NSString *)cancelLabel;
+- setProgressAsDouble:(double)value;
+- (BOOL)isCancelled;
+
+- (IBAction)cancelDialog:(id)sender;
+
+@end
--- /dev/null
+/*****************************************************************************
+ * VLCProgressPanel.m: A Generic Progress Indicator Panel created for VLC
+ *****************************************************************************
+ * Copyright (C) 2009-2010 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Felix Paul Kühne <fkuehne at videolan dot org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCProgressPanel.h"
+
+
+@implementation VLCProgressPanel
+
+- (id)init
+{
+ NSRect windowRect;
+ windowRect.size.height = 182;
+ windowRect.size.width = 520;
+ windowRect.origin.x = windowRect.origin.y = 0;
+
+ return [super initWithContentRect:windowRect
+ styleMask:NSTitledWindowMask
+ backing:NSBackingStoreBuffered
+ defer:YES];
+}
+
+- (void)createContentView
+{
+ NSRect s_rc = [self frame];
+ id ourContentView = [self contentView];
+
+ s_rc.origin.x = 398;
+ s_rc.origin.y = 28;
+ s_rc.size.height = 32;
+ s_rc.size.width = 108;
+ _cancelButton = [[NSButton alloc] initWithFrame:s_rc];
+ [_cancelButton setButtonType:NSMomentaryLightButton];
+ [_cancelButton setTitle:@"Cancel"];
+ [_cancelButton setBezelStyle:NSRoundedBezelStyle];
+ [_cancelButton setBordered:YES];
+ [_cancelButton setTarget:self];
+ [_cancelButton setAction:@selector(cancelDialog:)];
+ [ourContentView addSubview:_cancelButton];
+
+ s_rc.origin.x = 89;
+ s_rc.origin.y = 153;
+ s_rc.size.height = 17;
+ s_rc.size.width = 414;
+ _titleField = [[NSTextField alloc] initWithFrame:s_rc];
+ [_titleField setFont:[NSFont boldSystemFontOfSize:0]];
+ [_titleField setBezeled:NO];
+ [_titleField setEditable:NO];
+ [_titleField setSelectable:YES];
+ [_titleField setDrawsBackground:NO];
+ [ourContentView addSubview:_titleField];
+
+ s_rc.origin.x = 89;
+ s_rc.origin.y = 116;
+ s_rc.size.height = 42;
+ s_rc.size.width = 414;
+ _messageField = [[NSTextField alloc] initWithFrame:s_rc];
+ [_messageField setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
+ [_messageField setBezeled:NO];
+ [_messageField setEditable:NO];
+ [_messageField setSelectable:YES];
+ [_messageField setDrawsBackground:NO];
+ [ourContentView addSubview:_messageField];
+
+ s_rc.origin.x = 90;
+ s_rc.origin.y = 66;
+ s_rc.size.height = 20;
+ s_rc.size.width = 412;
+ _progressBar = [[NSProgressIndicator alloc] initWithFrame:s_rc];
+ [_progressBar setMaxValue:1000.0];
+ [_progressBar setUsesThreadedAnimation:YES];
+ [_progressBar setStyle:NSProgressIndicatorBarStyle];
+ [_progressBar setDisplayedWhenStopped:YES];
+ [_progressBar setControlSize:NSRegularControlSize];
+ [_progressBar setIndeterminate:NO];
+ [ourContentView addSubview:_progressBar];
+ [_progressBar startAnimation:nil];
+
+ s_rc.origin.x = 20;
+ s_rc.origin.y = 110;
+ s_rc.size.height = s_rc.size.width = 64;
+ _iconView = [[NSImageView alloc] initWithFrame:s_rc];
+ [_iconView setImage:[NSImage imageNamed:@"NSApplicationIcon"]];
+ [_iconView setEditable:NO];
+ [_iconView setAllowsCutCopyPaste:NO];
+ [ourContentView addSubview:_iconView];
+}
+
+- setDialogTitle:(NSString *)title
+{
+ [_titleField setStringValue:title];
+ [self setTitle:title];
+}
+
+- setDialogMessage:(NSString *)message
+{
+ [_messageField setStringValue:message];
+}
+
+- setCancelButtonLabel:(NSString *)cancelLabel
+{
+ [_cancelButton setTitle:cancelLabel];
+}
+
+- setProgressAsDouble:(double)value
+{
+ [_progressBar setDoubleValue:value];
+}
+
+- (BOOL)isCancelled
+{
+ return _isCancelled;
+}
+
+- (IBAction)cancelDialog:(id)sender
+{
+ _isCancelled = YES;
+}
+
+@end
#import <Cocoa/Cocoa.h>
#import "VLCLoginPanel.h"
+#import "VLCProgressPanel.h"
/*****************************************************************************
* Prototypes
static int DisplayCritical(vlc_object_t *,const char *,vlc_value_t,vlc_value_t,void * );
static int DisplayQuestion(vlc_object_t *,const char *,vlc_value_t,vlc_value_t,void * );
static int DisplayLogin(vlc_object_t *,const char *,vlc_value_t,vlc_value_t,void * );
+static int DisplayProgressPanelAction(vlc_object_t *,const char *,vlc_value_t,vlc_value_t,void * );
+
+static void updateProgressPanel (void *, const char *, float);
+static bool checkProgressPanel (void *);
+static void destroyProgressPanel (void *);
struct intf_sys_t
{
+ VLCProgressPanel *currentProgressBarPanel;
+
vlc_mutex_t lock;
vlc_cond_t wait;
};
var_AddCallback(p_intf,"dialog-login",DisplayLogin,p_intf);
var_Create(p_intf,"dialog-question",VLC_VAR_ADDRESS);
var_AddCallback(p_intf,"dialog-question",DisplayQuestion,p_intf);
- // var_Create(p_intf,"dialog-progress-bar",VLC_VAR_ADDRESS);
- // var_AddCallback(p_intf,"dialog-progress-bar",DisplayProgressPanelAction,p_intf);
+ var_Create(p_intf,"dialog-progress-bar",VLC_VAR_ADDRESS);
+ var_AddCallback(p_intf,"dialog-progress-bar",DisplayProgressPanelAction,p_intf);
dialog_Register(p_intf);
msg_Dbg(p_intf,"Mac OS X dialog provider initialised");
var_DelCallback(p_intf,"dialog-critical",DisplayCritical,p_intf);
var_DelCallback(p_intf,"dialog-login",DisplayLogin,p_intf);
var_DelCallback(p_intf,"dialog-question",DisplayQuestion,p_intf);
- // var_DelCallback(p_intf,"dialog-progress-bar",DisplayProgressPanelAction,p_intf);
+ var_DelCallback(p_intf,"dialog-progress-bar",DisplayProgressPanelAction,p_intf);
}
/*****************************************************************************
* CloseIntf: destroy interface
[NSString stringWithUTF8String:p_dialog->message],
@"OK", nil, nil);
[o_pool release];
+ return VLC_SUCCESS;
}
static int DisplayCritical(vlc_object_t *p_this, const char *type, vlc_value_t previous, vlc_value_t value, void *data)
[NSString stringWithUTF8String:p_dialog->message],
@"OK", nil, nil);
[o_pool release];
+ return VLC_SUCCESS;
}
static int DisplayQuestion(vlc_object_t *p_this, const char *type, vlc_value_t previous, vlc_value_t value, void *data)
if (i_returnValue == NSAlertOtherReturn)
p_dialog->answer = 3;
[o_pool release];
+ return VLC_SUCCESS;
}
static int DisplayLogin(vlc_object_t *p_this, const char *type, vlc_value_t previous, vlc_value_t value, void *data)
[thePanel setDialogTitle:[NSString stringWithUTF8String:p_dialog->title]];
[thePanel setDialogMessage:[NSString stringWithUTF8String:p_dialog->message]];
[thePanel center];
- i_returnValue = [NSApp runModalForWindow: thePanel];
+ i_returnValue = [NSApp runModalForWindow:thePanel];
[thePanel close];
- if( i_returnValue )
- {
+ if (i_returnValue) {
*p_dialog->username = strdup( [[thePanel userName] UTF8String] );
*p_dialog->password = strdup( [[thePanel password] UTF8String] );
- }
- else
- {
+ } else
*p_dialog->username = *p_dialog->password = NULL;
- }
[o_pool release];
+ return VLC_SUCCESS;
+}
+
+static int DisplayProgressPanelAction(vlc_object_t *p_this, const char *type, vlc_value_t previous, vlc_value_t value, void *data)
+{
+ NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
+ dialog_progress_bar_t * p_dialog = (dialog_progress_bar_t *)value.p_address;
+ intf_thread_t *p_intf = (intf_thread_t*) p_this;
+ intf_sys_t *p_sys = p_intf->p_sys;
+
+ if(p_sys->currentProgressBarPanel)
+ [p_sys->currentProgressBarPanel release];
+
+ p_sys->currentProgressBarPanel = [[VLCProgressPanel alloc] init];
+ [p_sys->currentProgressBarPanel createContentView];
+ if (p_dialog->title)
+ [p_sys->currentProgressBarPanel setDialogTitle:[NSString stringWithUTF8String:p_dialog->title]];
+ if (p_dialog->message)
+ [p_sys->currentProgressBarPanel setDialogMessage:[NSString stringWithUTF8String:p_dialog->message]];
+ if (p_dialog->cancel)
+ [p_sys->currentProgressBarPanel setCancelButtonLabel:[NSString stringWithUTF8String:p_dialog->cancel]];
+ [p_sys->currentProgressBarPanel center];
+ [p_sys->currentProgressBarPanel makeKeyAndOrderFront:nil];
+
+ p_dialog->pf_update = updateProgressPanel;
+ p_dialog->pf_check = checkProgressPanel;
+ p_dialog->pf_destroy = destroyProgressPanel;
+ p_dialog->p_sys = p_intf->p_sys;
+
+ [o_pool release];
+ return VLC_SUCCESS;
}
+
+void updateProgressPanel (void *priv, const char *text, float value)
+{
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+ intf_sys_t *p_sys = (intf_sys_t *)priv;
+
+ if (text)
+ [p_sys->currentProgressBarPanel setDialogMessage:[NSString stringWithUTF8String:text]];
+ else
+ [p_sys->currentProgressBarPanel setDialogMessage:@""];
+ [p_sys->currentProgressBarPanel setProgressAsDouble:(double)(value * 1000.)];
+
+ [o_pool release];
+}
+
+void destroyProgressPanel (void *priv)
+{
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+ intf_sys_t *p_sys = (intf_sys_t *)priv;
+
+ [p_sys->currentProgressBarPanel close];
+ [p_sys->currentProgressBarPanel release];
+
+ [o_pool release];
+}
+
+bool checkProgressPanel (void *priv)
+{
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+ intf_sys_t *p_sys = (intf_sys_t *)priv;
+ BOOL b_returned;
+
+ b_returned = [p_sys->currentProgressBarPanel isCancelled];
+
+ [o_pool release];
+ return b_returned;
+}
+