📄 playlistinfo.m
字号:
/***************************************************************************** r playlistinfo.m: MacOS X interface module ***************************************************************************** * Copyright (C) 2002-2008 the VideoLAN team * $Id$ * * Authors: Benjamin Pracht <bigben at videolan dot org> * 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. *****************************************************************************//***************************************************************************** * Preamble *****************************************************************************/#include "intf.h"#include "playlistinfo.h"#include "playlist.h"/***************************************************************************** * VLCPlaylistInfo Implementation *****************************************************************************/@implementation VLCInfostatic VLCInfo *_o_sharedInstance = nil;+ (VLCInfo *)sharedInstance{ return _o_sharedInstance ? _o_sharedInstance : [[self alloc] init];}- (id)init{ if( _o_sharedInstance ) { [self dealloc]; } else { _o_sharedInstance = [super init]; if( _o_sharedInstance != nil ) { p_item = NULL; o_statUpdateTimer = nil; [self updatePanelWithItem: NULL]; rootItem = [[VLCInfoTreeItem alloc] init]; } } return _o_sharedInstance;}- (void)awakeFromNib{ [o_info_window setExcludedFromWindowsMenu: YES]; [o_info_window setFloatingPanel: NO]; [o_info_window setTitle: _NS("Media Information")]; [o_uri_lbl setStringValue: _NS("Location")]; [o_title_lbl setStringValue: _NS("Title")]; [o_author_lbl setStringValue: _NS("Artist")]; [o_saveMetaData_btn setStringValue: _NS("Save Metadata" )]; [[o_tab_view tabViewItemAtIndex: 0] setLabel: _NS("General")]; [[o_tab_view tabViewItemAtIndex: 1] setLabel: _NS("Codec Details")]; [[o_tab_view tabViewItemAtIndex: 2] setLabel: _NS("Statistics")]; [o_tab_view selectTabViewItemAtIndex: 0]; /* constants defined in vlc_meta.h */ [o_genre_lbl setStringValue: _NS(VLC_META_GENRE)]; [o_copyright_lbl setStringValue: _NS(VLC_META_COPYRIGHT)]; [o_collection_lbl setStringValue: _NS(VLC_META_ALBUM)]; [o_seqNum_lbl setStringValue: _NS(VLC_META_TRACK_NUMBER)]; [o_description_lbl setStringValue: _NS(VLC_META_DESCRIPTION)]; [o_date_lbl setStringValue: _NS(VLC_META_DATE)]; [o_language_lbl setStringValue: _NS(VLC_META_LANGUAGE)]; [o_nowPlaying_lbl setStringValue: _NS(VLC_META_NOW_PLAYING)]; [o_publisher_lbl setStringValue: _NS(VLC_META_PUBLISHER)]; /* statistics */ [o_input_box setTitle: _NS("Input")]; [o_read_bytes_lbl setStringValue: _NS("Read at media")]; [o_input_bitrate_lbl setStringValue: _NS("Input bitrate")]; [o_demux_bytes_lbl setStringValue: _NS("Demuxed")]; [o_demux_bitrate_lbl setStringValue: _NS("Stream bitrate")]; [o_video_box setTitle: _NS("Video")]; [o_video_decoded_lbl setStringValue: _NS("Decoded blocks")]; [o_displayed_lbl setStringValue: _NS("Displayed frames")]; [o_lost_frames_lbl setStringValue: _NS("Lost frames")]; [o_fps_lbl setStringValue: _NS("Frames per Second")]; [o_sout_box setTitle: _NS("Streaming")]; [o_sent_packets_lbl setStringValue: _NS("Sent packets")]; [o_sent_bytes_lbl setStringValue: _NS("Sent bytes")]; [o_sent_bitrate_lbl setStringValue: _NS("Send rate")]; [o_audio_box setTitle: _NS("Audio")]; [o_audio_decoded_lbl setStringValue: _NS("Decoded blocks")]; [o_played_abuffers_lbl setStringValue: _NS("Played buffers")]; [o_lost_abuffers_lbl setStringValue: _NS("Lost buffers")]; [o_info_window setInitialFirstResponder: o_uri_txt]; [o_info_window setDelegate: self]; /* We may be awoken from nib way after initialisation * Update ourselves */ [self updatePanelWithItem:p_item];}- (void)stopTimers{ /* make sure that the timer is released in any case */ if( o_statUpdateTimer && [o_statUpdateTimer isValid] ) [o_statUpdateTimer invalidate]; [rootItem release]; [o_statUpdateTimer release]; o_statUpdateTimer = nil;}- (void)dealloc{ /* make sure that the timer is released in any case */ if( o_statUpdateTimer && [o_statUpdateTimer isValid] ) [o_statUpdateTimer invalidate]; [o_statUpdateTimer release]; if( p_item ) vlc_gc_decref( p_item ); [super dealloc];}- (void)windowDidBecomeKey:(NSNotification *)notification{ BOOL b_stats = config_GetInt(VLCIntf, "stats"); if( b_stats ) { if( o_statUpdateTimer ) { [o_statUpdateTimer invalidate]; [o_statUpdateTimer release]; o_statUpdateTimer = nil; } o_statUpdateTimer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector: @selector(updateStatistics:) userInfo: nil repeats: YES]; [o_statUpdateTimer fire]; [o_statUpdateTimer retain]; }}- (BOOL)windowShouldClose:(id)sender{ if( [o_statUpdateTimer isValid] ) [o_statUpdateTimer invalidate]; if( o_statUpdateTimer ) [o_statUpdateTimer release]; o_statUpdateTimer = nil; return YES;}- (void)initPanel{ BOOL b_stats = config_GetInt(VLCIntf, "stats"); if( !b_stats ) { if( [o_tab_view numberOfTabViewItems] > 2 ) [o_tab_view removeTabViewItem: [o_tab_view tabViewItemAtIndex: 2]]; } [self initMediaPanelStats]; [o_info_window makeKeyAndOrderFront: self];}- (void)initMediaPanelStats{ //Initializing Input Variables [o_read_bytes_txt setStringValue: [NSString stringWithFormat:@"%8.0f kB", (float)0]]; [o_input_bitrate_txt setStringValue: [NSString stringWithFormat:@"%6.0f kb/s", (float)0]]; [o_demux_bytes_txt setStringValue: [NSString stringWithFormat:@"%8.0f kB", (float)0]]; [o_demux_bitrate_txt setStringValue: [NSString stringWithFormat:@"%6.0f kb/s", (float)0]]; //Initializing Video Variables [o_video_decoded_txt setIntValue:0]; [o_displayed_txt setIntValue:0]; [o_lost_frames_txt setIntValue:0]; [o_fps_txt setFloatValue:0]; //Initializing Output Variables [o_sent_packets_txt setIntValue: 0]; [o_sent_bytes_txt setStringValue: [NSString stringWithFormat:@"%8.0f kB", (float)0]]; [o_sent_bitrate_txt setStringValue: [NSString stringWithFormat:@"%6.0f kb/s", (float)0]]; //Initializing Audio Variables [o_audio_decoded_txt setIntValue:0]; [o_played_abuffers_txt setIntValue: 0]; [o_lost_abuffers_txt setIntValue: 0];}- (void)updatePanelWithItem:(input_item_t *)_p_item;{ if( _p_item != p_item ) { if( p_item ) vlc_gc_decref( p_item ); [o_saveMetaData_btn setEnabled: NO]; if( _p_item ) vlc_gc_incref( _p_item ); p_item = _p_item; } if( !p_item ) { /* Erase */ #define SET( foo ) \ [self setMeta: "" forLabel: o_##foo##_txt]; SET( uri ); SET( title ); SET( author ); SET( collection ); SET( seqNum ); SET( genre ); SET( copyright ); SET( publisher ); SET( nowPlaying ); SET( language ); SET( date ); SET( description ); #undef SET [o_image_well setImage: [NSImage imageNamed: @"noart.png"]]; } else { if( !input_item_IsPreparsed( p_item ) ) { playlist_t * p_playlist = pl_Yield( VLCIntf ); playlist_PreparseEnqueue( p_playlist, p_item ); pl_Release( VLCIntf ); } /* fill uri info */ char * psz_url = input_item_GetURI( p_item ); [o_uri_txt setStringValue: [NSString stringWithUTF8String: psz_url ? psz_url : "" ]]; free( psz_url ); /* fill title info */ char * psz_title = input_item_GetTitle( p_item ); if( !psz_title ) psz_title = input_item_GetName( p_item ); [o_title_txt setStringValue: [NSString stringWithUTF8String: psz_title ? : "" ]]; free( psz_title ); #define SET( foo, bar ) \ char *psz_##foo = input_item_Get##bar ( p_item ); \ [self setMeta: psz_##foo forLabel: o_##foo##_txt]; \ FREENULL( psz_##foo ); /* fill the other fields */ SET( author, Artist ); SET( collection, Album ); SET( seqNum, TrackNum ); SET( genre, Genre ); SET( copyright, Copyright ); SET( publisher, Publisher ); SET( nowPlaying, NowPlaying ); SET( language, Language ); SET( date, Date ); SET( description, Description ); #undef SET char *psz_meta; NSImage *o_image; psz_meta = input_item_GetArtURL( p_item ); if( psz_meta && !strncmp( psz_meta, "file://", 7 ) ) o_image = [[NSImage alloc] initWithContentsOfFile: [NSString stringWithUTF8String: psz_meta+7]]; else o_image = [[NSImage imageNamed: @"noart.png"] retain]; [o_image_well setImage: o_image]; [o_image release]; FREENULL( psz_meta ); } /* reload the advanced table */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -