📄 bookmarks.m
字号:
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]->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 ) != VLC_SUCCESS ) { 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("Two bookmarks have to be selected.")); return; } 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 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; int i_second = -1; int x = 0; int c = 0; while (c != 2) { if([o_tbl_dataTable isRowSelected:x]) { if (i_first == -1) { i_first = x; c = 1; } else if (i_second == -1) { i_second = x; c = 2; } } x = (x + 1); } 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, "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]]; vlc_object_release( p_input ); 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_Control( p_input, INPUT_SET_BOOKMARK, [o_tbl_dataTable selectedRow] ); vlc_object_release( p_input );}- (IBAction)remove:(id)sender{ /* 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 ); 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];}/***************************************************************************** * callback stuff *****************************************************************************/-(id)getDataTable{ return o_tbl_dataTable;}/***************************************************************************** * data source methods *****************************************************************************/- (int)numberOfRowsInTableView:(NSTableView *)theDataTable{ /* return the number of bookmarks */ intf_thread_t * p_intf = VLCIntf; 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, &i_bookmarks ) != VLC_SUCCESS ) { vlc_object_release( p_input ); return 0; } else { vlc_object_release( p_input ); return i_bookmarks; }}- (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, 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, &i_bookmarks ) != VLC_SUCCESS ) { vlc_object_release( p_input ); return @""; } 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; vlc_object_release( p_input ); return [[NSNumber numberWithInt: i_toBeReturned] stringValue]; } else if ([[theTableColumn identifier] isEqualToString: @"time_offset"]) { i_toBeReturned = pp_bookmarks[row]->i_time_offset; vlc_object_release( p_input ); return [[NSNumber numberWithInt: (i_toBeReturned / 1000000)] stringValue]; } else { /* may not happen, but just in case */ vlc_object_release( p_input ); msg_Err(p_intf, "unknown table column identifier (%s) while " "updating the bookmark table", [[theTableColumn identifier] UTF8String] ); return @"unknown identifier"; } }}/***************************************************************************** * delegate methods *****************************************************************************/- (void)tableViewSelectionDidChange:(NSNotification *)aNotification{ /* check whether a row is selected and en-/disable the edit/remove buttons */ if ([o_tbl_dataTable selectedRow] == -1) { /* no row is selected */ [o_btn_edit setEnabled: NO]; [o_btn_rm setEnabled: NO]; [o_btn_extract setEnabled: NO]; } else { /* a row is selected */ [o_btn_edit setEnabled: YES]; [o_btn_rm setEnabled: YES]; if ([o_tbl_dataTable numberOfSelectedRows] == 2) { [o_btn_extract setEnabled: YES]; } }}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -