X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fbookmarks.m;h=a468e9df0031a1e91fc738e83496b3554c7a4262;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=804bcaaa8ab54f6eb933a9a9dcb9a0d3029ec52c;hpb=db7107f25dc7e55fb0e48c247abbf07d70de9f3b;p=vlc diff --git a/modules/gui/macosx/bookmarks.m b/modules/gui/macosx/bookmarks.m index 804bcaaa8a..a468e9df00 100644 --- a/modules/gui/macosx/bookmarks.m +++ b/modules/gui/macosx/bookmarks.m @@ -1,10 +1,10 @@ /***************************************************************************** * bookmarks.m: MacOS X Bookmarks window ***************************************************************************** - * Copyright (C) 2005 the VideoLAN team + * Copyright (C) 2005 - 2007 the VideoLAN team * $Id$ * - * Authors: Felix KŸhne + * Authors: Felix Kühne * * 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 @@ -18,15 +18,15 @@ * * 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) *****************************************************************************/ @@ -37,7 +37,7 @@ #import "bookmarks.h" #import "intf.h" #import "wizard.h" -#import +#import /***************************************************************************** * VLCExtended implementation @@ -77,17 +77,25 @@ static VLCBookmarks *_o_sharedInstance = nil; - (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")]; @@ -95,19 +103,19 @@ static VLCBookmarks *_o_sharedInstance = nil; [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 @@ -121,26 +129,26 @@ static VLCBookmarks *_o_sharedInstance = nil; { /* add item to list */ 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; - + 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]; } @@ -148,16 +156,16 @@ static VLCBookmarks *_o_sharedInstance = nil; { /* 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; input_Control( p_input, INPUT_CLEAR_BOOKMARKS ); vlc_object_release( p_input ); - + [o_tbl_dataTable reloadData]; } @@ -167,40 +175,36 @@ static VLCBookmarks *_o_sharedInstance = nil; /* 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 ) { 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 ); @@ -221,61 +225,60 @@ static VLCBookmarks *_o_sharedInstance = nil; - (IBAction)edit_ok:(id)sender { /* save field contents and close sheet */ - + intf_thread_t * p_intf = VLCIntf; seekpoint_t **pp_bookmarks; int i_bookmarks, i; - 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 ) { - 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; - } + } i = [o_tbl_dataTable selectedRow]; - - if( pp_bookmarks[i]->psz_name ) - { + + if( pp_bookmarks[i]->psz_name ) free( pp_bookmarks[i]->psz_name ); - } - 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]; } @@ -283,14 +286,14 @@ static VLCBookmarks *_o_sharedInstance = nil; - (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 have to 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 = @@ -298,12 +301,12 @@ static VLCBookmarks *_o_sharedInstance = nil; 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; @@ -318,7 +321,7 @@ static VLCBookmarks *_o_sharedInstance = nil; { i_first = x; c = 1; - } + } else if (i_second == -1) { i_second = x; @@ -327,25 +330,26 @@ static VLCBookmarks *_o_sharedInstance = nil; } x = (x + 1); } - + msg_Dbg(p_intf, "got the bookmark-indexes"); - - 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 ); - 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 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]]; + 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"); } @@ -354,12 +358,10 @@ static VLCBookmarks *_o_sharedInstance = nil; { 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] ); @@ -371,18 +373,18 @@ static VLCBookmarks *_o_sharedInstance = nil; /* 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]; } @@ -403,16 +405,13 @@ static VLCBookmarks *_o_sharedInstance = nil; { /* 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 ); @@ -424,25 +423,20 @@ static VLCBookmarks *_o_sharedInstance = nil; } } -- (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 ); @@ -455,7 +449,7 @@ static VLCBookmarks *_o_sharedInstance = nil; 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; @@ -466,15 +460,15 @@ static VLCBookmarks *_o_sharedInstance = nil; { 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"; }