* Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Christophe Massiot <massiot@via.ecp.fr>
* Derk-Jan Hartman <hartman at videolan dot org>
+ * Benjamin Pracht <bigben at videolan doit 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
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
#include "vout.h"
#include "open.h"
#include "controls.h"
-#include <osd.h>
+#include <vlc_osd.h>
/*****************************************************************************
* VLCControls implementation
*****************************************************************************/
@implementation VLCControls
+- (void)awakeFromNib
+{
+ [o_specificTime_mi setTitle: _NS("Jump To Time")];
+ [o_specificTime_cancel_btn setTitle: _NS("Cancel")];
+ [o_specificTime_ok_btn setTitle: _NS("OK")];
+ [o_specificTime_sec_lbl setStringValue: _NS("sec.")];
+ [o_specificTime_goTo_lbl setStringValue: _NS("Jump to time")];
+}
+
- (IBAction)play:(id)sender
{
vlc_value_t val;
{
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- val.i_int = config_GetInt( p_intf, "key-jump+10sec" );
+ val.i_int = config_GetInt( p_intf, "key-jump+short" );
var_Set( p_intf->p_vlc, "key-pressed", val );
}
{
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- val.i_int = config_GetInt( p_intf, "key-jump-10sec" );
+ val.i_int = config_GetInt( p_intf, "key-jump-short" );
var_Set( p_intf->p_vlc, "key-pressed", val );
}
if( p_vout != NULL )
{
+ id o_embedded_vout_list = [[VLCMain sharedInstance] getEmbeddedList];
while ((o_window = [o_enumerator nextObject]))
{
- if( [[o_window className] isEqualToString: @"VLCWindow"] )
+ id o_vout_view = nil;
+ /* We have an embedded vout */
+ if( [o_embedded_vout_list windowContainsEmbedded: o_window] )
+ {
+ o_vout_view = [o_embedded_vout_list getViewForWindow: o_window];
+ }
+ /* We have a detached Vout */
+ else if( [[o_window className] isEqualToString: @"VLCWindow"] )
+ {
+ msg_Dbg( VLCIntf, "detached vout controls.m call getVoutView" );
+ o_vout_view = [o_window getVoutView];
+ }
+
+ if( o_vout_view )
{
if( [o_title isEqualToString: _NS("Half Size") ] )
- [o_window scaleWindowWithFactor: 0.5];
+ [o_vout_view scaleWindowWithFactor: 0.5];
else if( [o_title isEqualToString: _NS("Normal Size") ] )
- [o_window scaleWindowWithFactor: 1.0];
+ [o_vout_view scaleWindowWithFactor: 1.0];
else if( [o_title isEqualToString: _NS("Double Size") ] )
- [o_window scaleWindowWithFactor: 2.0];
+ [o_vout_view scaleWindowWithFactor: 2.0];
else if( [o_title isEqualToString: _NS("Float on Top") ] )
- [o_window toggleFloatOnTop];
+ [o_vout_view toggleFloatOnTop];
else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
{
if( ![o_window isZoomed] )
}
else if( [o_title isEqualToString: _NS("Snapshot") ] )
{
- [o_window snapshot];
+ [o_vout_view snapshot];
}
else
{
- [o_window toggleFullscreen];
+ [o_vout_view toggleFullscreen];
}
break;
}
Value: another_val ofType: i_type];
[o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
[o_lmi setTarget: self];
-
+
if( !strcmp( val.psz_string, val_list.p_list->p_values[i].psz_string ) && !( i_type & VLC_VAR_ISCOMMAND ) )
[o_lmi setState: TRUE ];
break;
}
}
-
+
/* clean up everything */
if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string );
var_Change( p_object, psz_variable, VLC_VAR_FREELIST, &val_list, &text_list );
return VLC_EGENERIC;
}
+- (IBAction)goToSpecificTime:(id)sender
+{
+ if( sender == o_specificTime_cancel_btn )
+ {
+ [NSApp endSheet: o_specificTime_win];
+ [o_specificTime_win close];
+ }
+ else if( sender == o_specificTime_ok_btn )
+ {
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( VLCIntf, \
+ VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ if( p_input )
+ {
+ unsigned int timeInSec = 0;
+ NSString * fieldContent = [o_specificTime_enter_fld stringValue];
+ if( [[fieldContent componentsSeparatedByString: @":"] count] > 1 &&
+ [[fieldContent componentsSeparatedByString: @":"] count] <= 3 )
+ {
+ NSArray * ourTempArray = \
+ [fieldContent componentsSeparatedByString: @":"];
+
+ if( [[fieldContent componentsSeparatedByString: @":"] count] == 3 )
+ {
+ timeInSec += ([[ourTempArray objectAtIndex: 0] intValue] * 3600); //h
+ timeInSec += ([[ourTempArray objectAtIndex: 1] intValue] * 60); //m
+ timeInSec += [[ourTempArray objectAtIndex: 2] intValue]; //s
+ }
+ else
+ {
+ timeInSec += ([[ourTempArray objectAtIndex: 0] intValue] * 60); //m
+ timeInSec += [[ourTempArray objectAtIndex: 1] intValue]; //s
+ }
+ }
+ else
+ timeInSec = [fieldContent intValue];
+
+ input_Control( p_input, INPUT_SET_TIME, (int64_t)(timeInSec * 1000000));
+ vlc_object_release( p_input );
+ }
+
+ [NSApp endSheet: o_specificTime_win];
+ [o_specificTime_win close];
+ }
+ else
+ {
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( VLCIntf, \
+ VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ if( p_input )
+ {
+ /* we can obviously only do that if an input is available */
+ vlc_value_t pos, length;
+ var_Get( p_input, "time", &pos );
+ [o_specificTime_enter_fld setIntValue: (pos.i_time / 1000000)];
+ var_Get( p_input, "length", &length );
+ [o_specificTime_stepper setMaxValue: (length.i_time / 1000000)];
+
+ [NSApp beginSheet: o_specificTime_win modalForWindow: \
+ [NSApp mainWindow] modalDelegate: self didEndSelector: nil \
+ contextInfo: nil];
+ [o_specificTime_win makeKeyWindow];
+ vlc_object_release( p_input );
+ }
+ }
+}
+
@end
@implementation VLCControls (NSMenuValidation)
-
+
- (BOOL)validateMenuItem:(NSMenuItem *)o_mi
{
BOOL bEnabled = TRUE;
{
bEnabled = FALSE;
}
- [o_main setupMenus]; /* Make sure input menu is up to date */
+ [o_main setupMenus]; /* Make sure input menu is up to date */
}
else if( [[o_mi title] isEqualToString: _NS("Previous")] ||
[[o_mi title] isEqualToString: _NS("Next")] )
[o_mi setState: i_state];
}
else if( [[o_mi title] isEqualToString: _NS("Step Forward")] ||
- [[o_mi title] isEqualToString: _NS("Step Backward")] )
+ [[o_mi title] isEqualToString: _NS("Step Backward")] ||
+ [[o_mi title] isEqualToString: _NS("Jump To Time")])
{
if( p_input != NULL )
{
var_Get( p_input, "seekable", &val);
bEnabled = val.b_bool;
}
+ else bEnabled = FALSE;
}
- else if( [[o_mi title] isEqualToString: _NS("Mute")] )
+ else if( [[o_mi title] isEqualToString: _NS("Mute")] )
{
[o_mi setState: p_intf->p_sys->b_mute ? NSOnState : NSOffState];
- [o_main setupMenus]; /* Make sure audio menu is up to date */
+ [o_main setupMenus]; /* Make sure audio menu is up to date */
}
else if( [[o_mi title] isEqualToString: _NS("Half Size")] ||
[[o_mi title] isEqualToString: _NS("Normal Size")] ||
while( (o_window = [o_enumerator nextObject]))
{
- if( [[o_window className] isEqualToString: @"VLCWindow"] )
+ if( [[o_window className] isEqualToString: @"VLCWindow"] ||
+ [[[VLCMain sharedInstance] getEmbeddedList]
+ windowContainsEmbedded: o_window])
{
bEnabled = TRUE;
break;
}
@end
+
+
+/*****************************************************************************
+ * VLCTimeField implementation
+ *****************************************************************************
+ * we need this to catch our click-event in the controller window
+ *****************************************************************************/
+
+@implementation VLCTimeField
+- (void)mouseDown: (NSEvent *)ourEvent
+{
+ if( [ourEvent clickCount] > 1 )
+ [[[VLCMain sharedInstance] getControls] goToSpecificTime: nil];
+}
+@end