/*****************************************************************************
* bookmarks.m: MacOS X Bookmarks window
*****************************************************************************
- * Copyright (C) 2005 the VideoLAN team
+ * Copyright (C) 2005 - 2007 the VideoLAN team
* $Id$
*
- * Authors: Felix K\9fhne <fkuehne@users.sf.net>
+ * Authors: Felix KΓΌhne <fkuehne@users.sf.net>
*
* 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.
*****************************************************************************/
/*****************************************************************************
- * Note:
- * the code used to bind with VLC's modules is heavily based upon
- * ../wxwidgets/bookmarks.cpp, written by Gildas Bazin.
- * (he is a member of the VideoLAN team)
+ * Note:
+ * the code used to bind with VLC's modules is heavily based upon
+ * ../wxwidgets/bookmarks.cpp, written by Gildas Bazin.
+ * (he is a member of the VideoLAN team)
*****************************************************************************/
#import "bookmarks.h"
#import "intf.h"
#import "wizard.h"
-#import <vlc/intf.h>
+#import <vlc_interface.h>
/*****************************************************************************
* VLCExtended implementation
- (void)dealloc
{
- if(p_old_input)
- {
- free(p_old_input);
- }
+ if( p_old_input )
+ vlc_object_release( p_old_input );
[super dealloc];
}
+#if GC_ENABLED
+- (void)finalize
+{
+ /* release old input even if GC is enabled on 10.5 */
+ if( p_old_input )
+ vlc_object_release( p_old_input );
+ [super finalize];
+}
+#endif
+
- (void)initStrings
{
/* localise the items */
-
+
/* main window */
[o_bookmarks_window setTitle: _NS("Bookmarks")];
[o_btn_add setTitle: _NS("Add")];
[o_btn_edit setTitle: _NS("Edit")];
[o_btn_extract setTitle: _NS("Extract")];
[o_btn_rm setTitle: _NS("Remove")];
- [[[o_tbl_dataTable tableColumnWithIdentifier:@"description"] headerCell] \
+ [[[o_tbl_dataTable tableColumnWithIdentifier:@"description"] headerCell]
setStringValue: _NS("Description")];
- [[[o_tbl_dataTable tableColumnWithIdentifier:@"size_offset"] headerCell] \
- setStringValue: _NS("Size offset")];
- [[[o_tbl_dataTable tableColumnWithIdentifier:@"time_offset"] headerCell] \
- setStringValue: _NS("Time offset")];
-
+ [[[o_tbl_dataTable tableColumnWithIdentifier:@"size_offset"] headerCell]
+ setStringValue: _NS("Position")];
+ [[[o_tbl_dataTable tableColumnWithIdentifier:@"time_offset"] headerCell]
+ setStringValue: _NS("Time")];
+
/* edit window */
[o_edit_btn_ok setTitle: _NS("OK")];
[o_edit_btn_cancel setTitle: _NS("Cancel")];
[o_edit_lbl_name setStringValue: _NS("Name")];
[o_edit_lbl_time setStringValue: _NS("Time")];
- [o_edit_lbl_bytes setStringValue: _NS("Bytes")];
+ [o_edit_lbl_bytes setStringValue: _NS("Position")];
}
- (void)showBookmarks
{
/* add item to list */
intf_thread_t * p_intf = VLCIntf;
- input_thread_t * p_input = (input_thread_t *)vlc_object_find (p_intf, \
- VLC_OBJECT_INPUT, FIND_ANYWHERE);
- if (!p_input) return;
-
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf,
+ VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ if( !p_input )
+ return;
+
seekpoint_t bookmark;
vlc_value_t pos;
bookmark.psz_name = NULL;
bookmark.i_byte_offset = 0;
bookmark.i_time_offset = 0;
-
+
var_Get(p_intf, "position", &pos);
bookmark.psz_name = _("Untitled");
input_Control( p_input, INPUT_GET_BYTE_POSITION, &bookmark.i_byte_offset );
var_Get( p_input, "time", &pos );
bookmark.i_time_offset = pos.i_time;
input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark );
-
+
vlc_object_release( p_input );
-
+
[o_tbl_dataTable reloadData];
}
{
/* clear table */
intf_thread_t * p_intf = VLCIntf;
- input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf, \
+ input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT, FIND_ANYWHERE );
-
- if( !p_input ) return;
+
+ if( !p_input )
+ return;
input_Control( p_input, INPUT_CLEAR_BOOKMARKS );
vlc_object_release( p_input );
-
+
[o_tbl_dataTable reloadData];
}
/* we take the values from the core and not the table, because we cannot
* really trust it */
intf_thread_t * p_intf = VLCIntf;
- input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf, \
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT, FIND_ANYWHERE );
seekpoint_t **pp_bookmarks;
int i_bookmarks;
- char * toBeReturned;
- toBeReturned = "";
- int i_toBeReturned;
- i_toBeReturned = 0;
int row;
row = [o_tbl_dataTable selectedRow];
-
- if(!p_input)
+
+ if( !p_input )
{
return;
- }
- else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, \
+ }
+ else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
{
vlc_object_release( p_input );
return;
- }
+ }
else if(row < 0)
{
vlc_object_release( p_input );
return;
} else {
- [o_edit_fld_name setStringValue: [NSString stringWithUTF8String: \
+ [o_edit_fld_name setStringValue: [NSString stringWithUTF8String:
pp_bookmarks[row]->psz_name]];
- [o_edit_fld_time setStringValue: [[NSNumber numberWithInt: \
+ [o_edit_fld_time setStringValue: [[NSNumber numberWithInt:
(pp_bookmarks[row]->i_time_offset / 1000000)] stringValue]];
- [o_edit_fld_bytes setStringValue: [[NSNumber numberWithInt: \
+ [o_edit_fld_bytes setStringValue: [[NSNumber numberWithInt:
pp_bookmarks[row]->i_byte_offset] stringValue]];
}
-
+
p_old_input = p_input;
vlc_object_release( p_input );
- (IBAction)edit_ok:(id)sender
{
/* save field contents and close sheet */
-
+
intf_thread_t * p_intf = VLCIntf;
seekpoint_t **pp_bookmarks;
- int i_bookmarks;
- input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf, \
+ int i_bookmarks, i;
+ input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT, FIND_ANYWHERE );
-
+
if( !p_input )
{
- NSBeginCriticalAlertSheet(_NS("No input"), _NS("OK"), \
- @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("No " \
- "input found. The stream must be playing or paused for " \
+ NSBeginCriticalAlertSheet(_NS("No input"), _NS("OK"),
+ @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("No "
+ "input found. A stream must be playing or paused for "
"bookmarks to work."));
return;
}
if( p_old_input != p_input )
{
- NSBeginCriticalAlertSheet(_NS("Input has changed"), _NS("OK"), \
- @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("Input " \
- "has changed, unable to save bookmark. Use \"pause\" while " \
- "editing bookmarks to keep the same input."));
+ NSBeginCriticalAlertSheet(_NS("Input has changed"), _NS("OK"),
+ @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("Input "
+ "has changed, unable to save bookmark. Suspending playback with "
+ "\"Pause\" while editing bookmarks to ensure to keep the same "
+ "input."));
vlc_object_release( p_input );
return;
}
-
- if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, \
+
+ if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
{
vlc_object_release( p_input );
return;
- }
-
- int i;
+ }
+
i = [o_tbl_dataTable selectedRow];
-
- if( pp_bookmarks[i]->psz_name )
- {
+
+ if( pp_bookmarks[i]->psz_name )
free( pp_bookmarks[i]->psz_name );
- }
- /* FIXME: putting the name to core does not work!! -- FK*/
- pp_bookmarks[i]->psz_name = strdup([[o_edit_fld_name stringValue] UTF8String]);
+
+ pp_bookmarks[i]->psz_name = strdup([[o_edit_fld_name stringValue] UTF8String]);
pp_bookmarks[i]->i_byte_offset = [[o_edit_fld_bytes stringValue] intValue];
pp_bookmarks[i]->i_time_offset = ([[o_edit_fld_time stringValue] intValue] * 1000000);
-
- if( input_Control( p_input, INPUT_CHANGE_BOOKMARK, pp_bookmarks[i], i ) \
+
+ if( input_Control( p_input, INPUT_CHANGE_BOOKMARK, pp_bookmarks[i], i )
!= VLC_SUCCESS )
{
- msg_Warn( p_intf, "VLCBookmarks: changing bookmark failed");
+ msg_Warn( p_intf, "Unable to change the bookmark");
vlc_object_release( p_input );
return;
}
-
+
[o_tbl_dataTable reloadData];
vlc_object_release( p_input );
-
-
+
+
[NSApp endSheet: o_edit_window];
[o_edit_window close];
}
- (IBAction)extract:(id)sender
{
/* extract */
-
+
intf_thread_t * p_intf = VLCIntf;
- /*
+
if( [o_tbl_dataTable numberOfSelectedRows] < 2 )
{
- NSBeginAlertSheet(_NS("Invalid selection"), _NS("OK"), \
- @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("" \
- "You must select two bookmarks"));
+ NSBeginAlertSheet(_NS("Invalid selection"), _NS("OK"),
+ @"", @"", o_bookmarks_window, nil, nil, nil, nil,
+ _NS("Two bookmarks have to be selected."));
return;
}
input_thread_t *p_input =
FIND_ANYWHERE );
if( !p_input )
{
- NSBeginCriticalAlertSheet(_NS("No input found"), _NS("OK"), \
- @"", @"", o_bookmarks_window, nil, nil, nil, nil, _NS("" \
- "The stream must be playing or paused for bookmarks to work"));
+ NSBeginCriticalAlertSheet(_NS("No input found"), _NS("OK"),
+ @"", @"", o_bookmarks_window, nil, nil, nil, nil,
+ _NS("The stream must be playing or paused for bookmarks to work."));
return;
}
-
+
seekpoint_t **pp_bookmarks;
int i_bookmarks ;
int i_first = -1;
{
i_first = x;
c = 1;
- return;
- }
+ }
else if (i_second == -1)
{
i_second = x;
c = 2;
- return;
}
}
x = (x + 1);
}
-
- if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, \
+
+ msg_Dbg(p_intf, "got the bookmark-indexes");
+
+ if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
{
vlc_object_release( p_input );
- msg_Err(p_intf, "bookmarks couldn't be retrieved from core");
+ msg_Err(p_intf, "already defined bookmarks couldn't be retrieved");
return;
}
- msg_Dbg(p_intf, "calling for wizard");
-
- [[[VLCMain sharedInstance] getWizard] initWithExtractValuesFrom: \
- [[NSNumber numberWithInt: \
- (pp_bookmarks[i_first]->i_time_offset/1000000)] stringValue] \
- to: [[NSNumber numberWithInt: \
- (pp_bookmarks[i_second]->i_time_offset/1000000)] stringValue] \
- ofItem: [NSString stringWithUTF8String: \
- p_input->input.p_item->psz_uri]];
+ msg_Dbg(p_intf, "calling wizard");
+
+ char *psz_uri = input_item_GetURI( input_GetItem( p_input ) );
+ [[[VLCMain sharedInstance] getWizard] initWithExtractValuesFrom:
+ [[NSNumber numberWithInt:
+ (pp_bookmarks[i_first]->i_time_offset/1000000)] stringValue]
+ to: [[NSNumber numberWithInt:
+ (pp_bookmarks[i_second]->i_time_offset/1000000)] stringValue]
+ ofItem: [NSString stringWithUTF8String: psz_uri]];
+ free( psz_uri );
vlc_object_release( p_input );
- msg_Dbg(p_intf, "released input");*/
- msg_Err(p_intf, "not implemented yet, sorry");
+ msg_Dbg(p_intf, "released input");
}
- (IBAction)goToBookmark:(id)sender
{
intf_thread_t * p_intf = VLCIntf;
input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
-
- if( !p_input )
- {
- return;
- }
+ (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
+ FIND_ANYWHERE );
+
+ if( !p_input ) return;
input_Control( p_input, INPUT_SET_BOOKMARK, [o_tbl_dataTable selectedRow] );
/* remove selected item */
intf_thread_t * p_intf = VLCIntf;
input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
-
+ (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
+ FIND_ANYWHERE );
+
if( !p_input ) return;
int i_focused = [o_tbl_dataTable selectedRow];
+
if( i_focused >= 0 )
- {
input_Control( p_input, INPUT_DEL_BOOKMARK, i_focused );
- }
vlc_object_release( p_input );
-
+
[o_tbl_dataTable reloadData];
}
{
/* return the number of bookmarks */
intf_thread_t * p_intf = VLCIntf;
- input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf, \
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT, FIND_ANYWHERE );
seekpoint_t **pp_bookmarks;
int i_bookmarks;
-
- if(!p_input)
- {
- return 0;
- } else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, \
+
+ if( !p_input ) return 0;
+ else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
{
vlc_object_release( p_input );
return 0;
- } else {
+ }
+ else {
+ vlc_object_release( p_input );
return i_bookmarks;
}
}
-- (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn: \
+- (id)tableView:(NSTableView *)theDataTable objectValueForTableColumn:
(NSTableColumn *)theTableColumn row: (int)row
{
/* return the corresponding data as NSString */
intf_thread_t * p_intf = VLCIntf;
- input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf, \
+ input_thread_t * p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT, FIND_ANYWHERE );
seekpoint_t **pp_bookmarks;
int i_bookmarks;
- char * toBeReturned;
- toBeReturned = "";
- int i_toBeReturned;
- i_toBeReturned = 0;
-
- if(!p_input)
- {
- return @"";
- }
- else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks, \
+ char *toBeReturned;
+ int i_toBeReturned = 0;
+
+ if( !p_input ) return @"";
+ else if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
&i_bookmarks ) != VLC_SUCCESS )
{
vlc_object_release( p_input );
return @"";
- } else {
+ }
+ else
+ {
if ([[theTableColumn identifier] isEqualToString: @"description"])
{
toBeReturned = pp_bookmarks[row]->psz_name;
vlc_object_release( p_input );
return [NSString stringWithUTF8String: toBeReturned];
- }
+ }
else if ([[theTableColumn identifier] isEqualToString: @"size_offset"])
{
i_toBeReturned = pp_bookmarks[row]->i_byte_offset;
{
i_toBeReturned = pp_bookmarks[row]->i_time_offset;
vlc_object_release( p_input );
- return [[NSNumber numberWithInt: (i_toBeReturned / 1000000)] \
+ return [[NSNumber numberWithInt: (i_toBeReturned / 1000000)]
stringValue];
}
else
{
- /* may not happen, but just in case */
+ /* may not happen, just in case */
vlc_object_release( p_input );
- msg_Err(p_intf, "VLCBookmarks: unknown table column identifier " \
- "(%s) while updating table", [[theTableColumn identifier] \
+ msg_Err(p_intf, "unknown table column identifier (%s) while "
+ "updating the bookmark table", [[theTableColumn identifier]
UTF8String] );
return @"unknown identifier";
}
[o_btn_edit setEnabled: NO];
[o_btn_rm setEnabled: NO];
[o_btn_extract setEnabled: NO];
- } else {
+ }
+ else
+ {
/* a row is selected */
[o_btn_edit setEnabled: YES];
[o_btn_rm setEnabled: YES];