Commit 1672cb91 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* THANKS: hungarian translator and designer of OSX intf controller added

 * modules/LIST: updated
 * Makefile.am: include new OS X art in the dist.
 * NEWS: updated
 * */.cvsignore: added and improved some of these.
 * modules/gui/macosx/prefs_widgets.?:
   - new config controls much like in the wxwindows module. not yet in use.
   - beware not tested irl. but it compiles :)
parent bbf92477
......@@ -177,17 +177,32 @@ EXTRA_DIST += \
extras/MacOSX/Resources/vob.icns \
extras/MacOSX/Resources/wma.icns \
extras/MacOSX/Resources/wmv.icns \
extras/MacOSX/Resources/back.png \
extras/MacOSX/Resources/begin.png \
extras/MacOSX/Resources/end.png \
extras/MacOSX/Resources/forw.png \
extras/MacOSX/Resources/list.png \
extras/MacOSX/Resources/pause.png \
extras/MacOSX/Resources/pause_blue.png \
extras/MacOSX/Resources/play.png \
extras/MacOSX/Resources/prefs.png \
extras/MacOSX/Resources/slow.png \
extras/MacOSX/Resources/play_blue.png \
extras/MacOSX/Resources/stop.png \
extras/MacOSX/Resources/vlc_hg.png \
extras/MacOSX/Resources/stop_blue.png \
extras/MacOSX/Resources/display.png \
extras/MacOSX/Resources/display_slider.png \
extras/MacOSX/Resources/display_track.png \
extras/MacOSX/Resources/fullscreen_active.png \
extras/MacOSX/Resources/fullscreen_blue.png \
extras/MacOSX/Resources/next_active.png \
extras/MacOSX/Resources/next_blue.png \
extras/MacOSX/Resources/playlistdrawer_active.png \
extras/MacOSX/Resources/playlistdrawer_blue.png \
extras/MacOSX/Resources/previous_active.png \
extras/MacOSX/Resources/previous_blue.png \
extras/MacOSX/Resources/skip_forward_active.png \
extras/MacOSX/Resources/skip_forward_blue.png \
extras/MacOSX/Resources/skip_previous_active.png \
extras/MacOSX/Resources/skip_previous_blue.png \
extras/MacOSX/Resources/volume_high.png \
extras/MacOSX/Resources/volume_low.png \
extras/MacOSX/Resources/volumeslider_blue.png \
extras/MacOSX/Resources/volumeslider_normal.png \
extras/MacOSX/Resources/volumetrack.png \
extras/MacOSX/Resources/about_bg.png \
extras/MacOSX/Resources/vlc.scriptSuite \
extras/MacOSX/Resources/README \
......
$Id: NEWS,v 1.71 2003/11/07 13:31:26 massiot Exp $
$Id: NEWS,v 1.72 2003/11/17 06:31:22 hartman Exp $
Changes between 0.6.2 and 0.6.3:
---------------------------------
......@@ -9,84 +9,73 @@ Core support:
* Fixed the video filters. Video should no longer go black when these are used.
* New input core. Advantages are: better seeking, more responsive, support for subtitle files at the core, and much much more.
* Added a repeat mode to repeat a single file over and over.
* Improved playlist core.
Stream output:
* Added packetization for MPEG AAC ADTS streams.
* Improved mp4 muxing and added AAC/MP4V support when transcoding.
* Improved Ogg muxing and added theora, speex and subtitles support.
* Theora video encoding.
* MPEG TS muxer follows the ATSC/DVB specs for embedded A52 audio.
* RTP output mixer
Input:
* MPEG TS demuxer also handles A52 audio in DVB streams.
* Fixed seeking support in FLAC files.
* cddax and vcdx plugins using libcdio, libvcd and libvcdinfo.
* cddax and vcdx plugins using libcdio, libvcd and libvcdinfo. (Linux only)
* Reworked DVB tuning.
* Better Icecast support.
* Support for framerate setting in Video4Linux
* PVR input now supports all video connection types
Demuxers:
* ID3 tag parsing
* Vobsub subtitles support
* SSA decoding
* DVB Subtitles decoder
* rtp/rtsp support.
Codecs:
* Support for Speex audio.
* Support for AAC + SBR.
* MPEG 2.5 support.
* Support for I422 chroma
* removed old a52, mpeg_video and mpeg_audio codecs, since we are using others now.
Interface core:
* Allow on the fly switching of the main interface.
* Hotkeys support
Skins interface
* Bug fixes
* Stay on top option
WxWindows interfae:
Interface:
* Bug fixes / improvements in the skins (eg. "stay on top" option).
* Improvements to the wxwindows playlist (Sort,Search, mode buttons).
* Help in the preferences window.
HTTP Interface:
* Stream seeking, playlist sorting and fullscreen support
* Improved default pages
* Help in the wxwindows preferences window.
* New standardized and customizable hotkeys.
* OSD ( OS X and hotkeys only atm ).
* Improvements to the Web interface.
* Fixes of the SAP interface.
Mac OS X port:
* Mozilla plugin for Mac OS X (experimental).
* New controller designed by Max Rudberg from www.maxthemes.com
* Save playlist.
* Works on 10.1.x again. Apologies for that problem.
* Use XCode
* Support for Panther.
* Support for raw dumping of streams to disk.
* Mozilla plugin for Mac OS X (experimental).
Win32 port:
* New DirectShow input module (for video acquisition cards, webcams...).
* VLC can be installed as a Windows NT service.
* Allow on the fly switching of the main interface.
* Support for 3F2R in audio output.
* New --one-instance option to "force" only one running instance of VLC.
* Mozilla plugin for Windows (experimental).
iPaq port:
* Improvements in the GTK2 interface
Stream output:
* Added packetization for MPEG AAC ADTS streams.
* Improved mp4 muxing and added AAC/MP4V support when transcoding.
* Improved Ogg muxing and added theora, speex and subtitles support.
* Theora video encoding.
* MPEG TS muxer follows the ATSC/DVB specs for embedded A52 audio.
* --sout-keep option to keep the stream open while changing input.
* Preliminary rtp support.
* Fixes to SAP announces.
Subtitles:
* Text subtitles now have a black outline.
* Text subtitles autodetection.
* Text subtitles charset autodetection.
* Text subtitles for videofiles. Result may vary.
* Text subtitles for all videofiles. Results may vary.
* Text subtitles in Hebrew are supported. Arabic partially.
* Automatic fontsize selection for text subtitles.
* Fixed SAMI text subtitles support.
* Support for subtitles in Matroska files.
* Support for subtitles in DVB streams.
Miscellaneous:
* Audio visual effects filters (spectrum, scope and random).
* Audio visual effects filter using goom.
* Spanish and Portugese Brazilian translations.
* Spanish, Portuguese Brazilian and Hungarian translations.
* SAP now supports HTTP streams.
* VLC can now stream from the Dreambox.
* libcaca video output (colored ascii)
Changes between 0.6.1 and 0.6.2:
---------------------------------
......@@ -123,6 +112,33 @@ Miscellaneous:
Changes between 0.6.0 and 0.6.1:
---------------------------------
Core support:
* There should be less bogus resampling, particularly on DVDs.
* VLC will now wait for the medium to wake up before starting its clock
after a pause.
Stream output:
* Added vorbis audio support in Ogg streaming.
* Added vorbis audio transcoding support.
* Added mp3 audio transcoding support (when ffmpeg is compiled with mp3lame).
UNIX ports:
* ALSA multi-channel support fixed and tested.
* Fixed fullscreen with gnome metacity.
Win32 port:
* Fixed VCD support which was broken on some machines.
iPaq port:
* Familiar interface with Gtk+-1.2 and GPE support removed (deprecreated).
Miscellaneous:
* Text subtitles now centered on the picture.
* Ffmpeg decoder now generates proper pts and can be used to play
mpeg1/2 videos.
Changes between 0.6.0 and 0.6.1:
---------------------------------
Core support:
* There should be less bogus resampling, particularly on DVDs.
* VLC will now wait for the medium to wake up before starting its clock
......@@ -510,33 +526,6 @@ Miscellaneous:
* Mozilla plugin based on libvlc for embedded playback in webpages of any
format that VLC can play
* new swedish translation
* updated french, german, dutch and italian translations
GNU/Linux, *BSD & misc. UNIX ports:
* OSS and ALSA audio output modules support A/52 over S/PDIF output
* OSS support for multi-channel (up to 6) analog sound cards
Mac OS X port:
* localization support via GNU gettext software
* completely revamped Cocoa interface
* new preferences panel
* new open panel with full features
* video output screen can be chosen in the Video menu
* audio device and channels configuration can be chosen in the Audio menu
* new playlist drawer and messages windows
Win32 port:
* preferences dialog box redesigned
* waveout module supports multi-channel audio output and A52 over S/PDIF
* support for VCDs
* new dialog box to select avi subtitles
* some new shortcuts (in particular to play/pause or stay on top)
* new menu entry to spawn another interface
* rc interface is partly fixed and useable
BeOS port:
* new settings window for adjusting post-processing, brightness,
contrast, etc
* enhancements of the playlist window
* new messages window to see debug info
* fixed a few crashes
......
$Id: THANKS,v 1.11 2003/08/17 20:58:44 alexis Exp $
$Id: THANKS,v 1.12 2003/11/17 06:31:22 hartman Exp $
VLC makes extensive use of the following persons' code:
......@@ -23,8 +23,9 @@ Christopher Johnson <cjohnson@mint.net> - Qt fix in vlc.spec
Colin Simmonds <colin_simmonds@Mac.lover.org> - compile fix for Mac OS X
Damian Ivereigh <damian@cisco.com> - ac3dec uninitialized data structure fix
David Kennedy <dkennedy@tinytoad.com> - X11 fullscreen patch
David Weber <david_weber@gmx.de> - Mac OS X interface design & graphics
David Weber <david_weber@gmx.de> - Mac OS X interface design & graphics (v0.5.0)
Davor Orel <syntheticamac at yahoo.it> - Mac OS X icons
DirektX <direktx at freemail.hu> - Hungarian translation
Emmanuel Blindauer <manu@agat.net> - aRts audio output
Espen Skoglund <esk@ira.uka.de> - FreeBSD autoconf and Makefile patches
Ethan C. Baldridge <BaldridgeE@cadmus.com> - directory browsing code
......@@ -36,7 +37,7 @@ Jean-Philippe Grimaldi <jeanphi@via.ecp.fr> - bug fixes
Jean-Pierre Kuypers <Kuypers@sri.ucl.ac.be> - French translation
Jeffrey Baker <jwbaker@acm.org> - port of the ALSA plugin to the ALSA 1.0 API
Joel Arvidsson <dogai@privat.utfors.se> - Swedish translation
Joeri van Dooren <joeri@van.dooren.be> - OS X icon
Joeri van Dooren <joeri@van.dooren.be> - OS X icon (v0.4.0)
Johen Michael Zorko <zorko@att.net> - fix for delay issues in udp sout
John Paul Lorenti <jpl31@columbia.edu> - ALSA device selection patch
Julien Blache <jb@technologeek.org> - disc ejection code
......@@ -44,6 +45,7 @@ Mark Gritter <mgritter@kealia.com> - fix for netlist packet leak in demuxPSI
Markus Kuespert <ltlBeBoy@beosmail.com> - BeOS CSS support
Mathias Kretschmer <mathias@research.att.com> - IP Multicast support
Matthieu Lochegnies <lochegm1@cti.ecp.fr> - MPEG audio emphasis fix
Max Rudberg <max_08 at mac.com> - Mac OS X controller art (v0.7.0)
Michael Mondragon <mammon@lokmail.net> - ncurses compilation fix
Michel Lanners <mlan@cpu.lu> - fixed typos and AltiVec detection
Nilmoni Deb <ndeb@ece.cmu.edu> - autoconf and Makefile fixes
......
......@@ -9,4 +9,4 @@ sbin
share
vlc-lib
config.mak
contrib.tar.bz2
contrib*.tar.bz2
List of vlc plugins (221)
$Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
$Id: LIST,v 1.17 2003/11/17 06:31:22 hartman Exp $
* a52: A/52 basic parser/packetizer
......@@ -55,13 +55,15 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* avi: AVI File stream demuxer
* bandlimited_resampler: Badnlimited interpolation audio resampler
* bandlimited_resampler: Bandlimited interpolation audio resampler
* beos: Audio output, video output and interface module for BeOS.
* caca: color ASCII art video output using libcaca
* cdda: input module to read audio CDs
* cddax: input module to read audio CDs vi libcdio
* cddax: input module to read audio CDs via libcdio
* cinepak: Cinepack video decoder
......@@ -95,20 +97,22 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* dummy: dummy audio output, video output, interface and input modules.
* dv: DV video decoder
* dvb: input module for DVB-S/C/T streaming using v4l2 API
* dvbsub: decoder module for subs in dvb streams.
* dvd: input module for accessing DVDs.
* dvdplay: access module for accessing DVDs using libdvdplay
* dvdread: input module for accessing DVDs, uses libdvdread.
* dv: DV video decoder
* esd: audio output module using the Esound sound daemon.
* es: input module for MPEG ES decapsulation.
* esd: audio output module using the Esound sound daemon.
* faad: AAC decoder using libfaad2
* fb: video output module for the Linux framebuffer.
......@@ -164,16 +168,16 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* headphone_channel_mixer:
headphone channel mixer with virtual spatialization effect.
* hotkeys : hotkeys control module
* hotkeys: hotkeys control module
* http: HTTP remote control webinterface
* httpd: HTTP server
* http: HTTP remote control interface
* i420_rgb: planar YUV to packed RGB conversion functions.
* i420_rgb_mmx: MMX accelerated version of i420_rgb.
* i420_rgb: planar YUV to packed RGB conversion functions.
* i420_ymga_mmx: MMX accelerated version of i420_ymga
* i420_ymga: YUV to YUC conversion functions
......@@ -206,6 +210,8 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* lirc: Linux infrared control module
* livedotcom: rtp demux based on liveMedia (live.com)
* logger: file logger plugin
* logo: video filter to put a logo on the video
......@@ -216,7 +222,7 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* m4v: MPEG-4 Video Stream demuxer
* macosx: Audio output, Video output, and nterface module for Mac OS X.
* macosx: Video output, and interface module for Mac OS X.
* memcpy3dn: 3D Now! accelerated version of memcpy.
......@@ -322,8 +328,6 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* screensaver: screensaver disabling module
* sdp: SDP file demuxer
* skins: Skinnable interface
* slp: input module to access SLP registered sessions
......@@ -350,6 +354,8 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* stream_out_transcode: audio & video transcoder using ffmpeg
* stream_out_transrate: audio & video transrater using ffmpeg
* subsdec: Another SPU decoder for text subtitles
* svgalib: SGVAlib output plugin
......@@ -403,10 +409,10 @@ $Id: LIST,v 1.16 2003/11/07 13:31:26 massiot Exp $
* wall: image wall filter.
* waveout: simple audio output module for Windows.
* wav: Wav demuxer
* waveout: simple audio output module for Windows.
* wingdi: WIN 32 / WIN CE GDI video output
* wxwindows: interface module using the cross-platform wxWindows library.
......
......@@ -18,6 +18,8 @@ SOURCES_macosx = \
playlist.h \
prefs.m \
prefs.h \
prefs_widgets.h \
prefs_widgets.m \
output.h \
output.m \
vout.m \
......
/*****************************************************************************
* prefs_widgets.h: Preferences controls
*****************************************************************************
* Copyright (C) 2002-2003 VideoLAN
* $Id: prefs_widgets.h,v 1.1 2003/11/17 06:31:22 hartman Exp $
*
* Authors: Derk-Jan Hartman <hartman at videolan.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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
@interface VLCConfigControl : NSBox
{
vlc_object_t *p_this;
char *psz_name;
NSTextField *o_label;
int i_type;
vlc_bool_t b_advanced;
}
+ (VLCConfigControl *)newControl: (module_config_t *)p_item withView: (NSView *)o_parent_view withObject: (vlc_object_t *)p_this;
- (id)initWithFrame: (NSRect)frame item: (module_config_t *)p_item withObject: (vlc_object_t *)_p_this;
- (NSString *)getName;
- (int)getType;
- (BOOL)isAdvanced;
- (int)intValue;
- (float)floatValue;
- (char *)stringValue;
@end
@interface KeyConfigControl : VLCConfigControl
{
NSMatrix *o_matrix;
NSComboBox *o_combo;
}
@end
@interface ModuleConfigControl : VLCConfigControl
{
NSPopUpButton *o_popup;
}
@end
@interface StringConfigControl : VLCConfigControl
{
NSTextField *o_textfield;
}
@end
@interface StringListConfigControl : VLCConfigControl
{
NSComboBox *o_combo;
}
@end
@interface FileConfigControl : VLCConfigControl
{
NSTextField *o_textfield;
NSButton *o_button;
BOOL b_directory;
}
- (IBAction)openFileDialog: (id)sender;
- (void)pathChosenInPanel:(NSOpenPanel *)o_sheet withReturn:(int)i_return_code contextInfo:(void *)o_context_info;
@end
@interface IntegerConfigControl : VLCConfigControl
{
NSTextField *o_textfield;
NSStepper *o_stepper;
}
- (IBAction)stepperChanged:(id)sender;
- (void)textfieldChanged:(NSNotification *)o_notification;
@end
@interface IntegerListConfigControl : VLCConfigControl
{
NSComboBox *o_combo;
}
@end
@interface RangedIntegerConfigControl : VLCConfigControl
{
NSSlider *o_slider;
NSTextField *o_textfield;
NSTextField *o_textfield_min;
NSTextField *o_textfield_max;
}
- (IBAction)sliderChanged:(id)sender;
- (void)textfieldChanged:(NSNotification *)o_notification;
@end
@interface FloatConfigControl : VLCConfigControl
{
NSTextField *o_textfield;
}
@end
@interface RangedFloatConfigControl : VLCConfigControl
{
NSSlider *o_slider;
NSTextField *o_textfield;
NSTextField *o_textfield_min;
NSTextField *o_textfield_max;
}
- (IBAction)sliderChanged:(id)sender;
- (void)textfieldChanged:(NSNotification *)o_notification;
@end
@interface BoolConfigControl : VLCConfigControl
{
NSButton *o_checkbox;
}
@end
/*****************************************************************************
* prefs_widgets.m: Preferences controls
*****************************************************************************
* Copyright (C) 2002-2003 VideoLAN
* $Id: prefs_widgets.m,v 1.1 2003/11/17 06:31:22 hartman Exp $
*
* Authors: Derk-Jan Hartman <hartman at videolan.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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h> /* malloc(), free() */
#include <string.h>
#include <vlc/vlc.h>
#include "vlc_keys.h"
#include "intf.h"
#include "prefs_widgets.h"
#define PREFS_WRAP 300
#define OFFSET_RIGHT 20
#define OFFSET_BETWEEN 10
@implementation VLCConfigControl
- (id)initWithFrame: (NSRect)frame
{
return [self initWithFrame: frame
item: nil
withObject: nil];
}
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
self = [super initWithFrame: frame];
if( self != nil )
{
p_this = _p_this;
o_label = NULL;
psz_name = strdup( p_item->psz_name );
i_type = p_item->i_type;
b_advanced = p_item->b_advanced;
[self setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin ];
}
return (self);
}
- (void)dealloc
{
if( o_label ) [o_label release];
if( psz_name ) free( psz_name );
[super dealloc];
}
+ (VLCConfigControl *)newControl: (module_config_t *)p_item withView: (NSView *)o_parent_view withObject: (vlc_object_t *)_p_this
{
VLCConfigControl *p_control = NULL;
NSRect frame = [o_parent_view bounds];
switch( p_item->i_type )
{
case CONFIG_ITEM_MODULE:
p_control = [[ModuleConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
break;
case CONFIG_ITEM_STRING:
if( !p_item->i_list )
{
p_control = [[StringConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
else
{
p_control = [[StringListConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
break;
case CONFIG_ITEM_FILE:
case CONFIG_ITEM_DIRECTORY:
p_control = [[FileConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
break;
case CONFIG_ITEM_INTEGER:
if( p_item->i_list )
{
p_control = [[IntegerListConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
else if( p_item->i_min != 0 || p_item->i_max != 0 )
{
p_control = [[RangedIntegerConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
else
{
p_control = [[IntegerConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
break;
case CONFIG_ITEM_KEY:
p_control = [[KeyConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
break;
case CONFIG_ITEM_FLOAT:
if( p_item->f_min != 0 || p_item->f_max != 0 )
{
p_control = [[RangedFloatConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
else
{
p_control = [[FloatConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
}
break;
case CONFIG_ITEM_BOOL:
p_control = [[BoolConfigControl alloc] initWithFrame: frame item: p_item withObject: _p_this ];
break;
default:
break;
}
return p_control;
}
- (NSString *)getName
{
return [NSApp localizedString: psz_name];
}
- (int)getType
{
return i_type;
}
- (BOOL)isAdvanced
{
return b_advanced;
}
- (int)intValue
{
return 0;
}
- (float)floatValue
{
return 0;
}
- (char *)stringValue
{
return NULL;
}
@end
@implementation KeyConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 80;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
unsigned int i;
o_matrix = [[[NSMatrix alloc] initWithFrame: s_rc mode: NSHighlightModeMatrix cellClass: [NSButtonCell class] numberOfRows:2 numberOfColumns:2] retain];
NSArray *o_cells = [o_matrix cells];
for( i = 0; i < [o_cells count]; i++ )
{
NSButtonCell *o_current_cell = [o_cells objectAtIndex:i];
[o_current_cell setButtonType: NSSwitchButton];
[o_current_cell setControlSize: NSSmallControlSize];
[o_matrix setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext] toWidth: PREFS_WRAP] forCell: o_current_cell];
switch( i )
{
case 0:
[o_current_cell setTitle:_NS("Command")];
[o_current_cell setState: p_item->i_value & KEY_MODIFIER_COMMAND];
break;
case 1:
[o_current_cell setTitle:_NS("Control")];
[o_current_cell setState: p_item->i_value & KEY_MODIFIER_CTRL];
break;
case 2:
[o_current_cell setTitle:_NS("Option/Alt")];
[o_current_cell setState: p_item->i_value & KEY_MODIFIER_ALT];
break;
case 3:
[o_current_cell setTitle:_NS("Shift")];
[o_current_cell setState: p_item->i_value & KEY_MODIFIER_SHIFT];
break;
}
}
[o_matrix sizeToCells];
[o_matrix setAutoresizingMask:NSViewMaxXMargin ];
[[self contentView] addSubview: o_matrix];
/* add the combo box */
s_rc.origin.x += [o_matrix frame].size.width + OFFSET_BETWEEN;
s_rc.size.height = 22;
s_rc.size.width = 100;
o_combo = [[[NSComboBox alloc] initWithFrame: s_rc] retain];
[o_combo setAutoresizingMask:NSViewMaxXMargin ];
[o_combo setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext] toWidth: PREFS_WRAP]];
for( i = 0; i < sizeof(vlc_keys) / sizeof(key_descriptor_t); i++ )
{
if( vlc_keys[i].psz_key_string && *vlc_keys[i].psz_key_string )
[o_combo addItemWithObjectValue: [NSApp localizedString:vlc_keys[i].psz_key_string]];
}
[o_combo setStringValue: [NSApp localizedString:KeyToString(( ((unsigned int)p_item->i_value) & ~KEY_MODIFIER ))]];
[[self contentView] addSubview: o_combo];
/* add the label */
s_rc.origin.y += 50;
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if ( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
}
return self;
}
- (void)dealloc
{
[o_matrix release];
[o_combo release];
[super dealloc];
}
- (int)getIntValue
{
unsigned int i, i_new_key = 0;
NSButtonCell *o_current_cell;
NSArray *o_cells = [o_matrix cells];
for( i = 0; i < [o_cells count]; i++ )
{
o_current_cell = [o_cells objectAtIndex:i];
if( [[o_current_cell title] isEqualToString:_NS("Command")] &&
[o_current_cell state] == NSOnState )
{
i_new_key |= KEY_MODIFIER_COMMAND;
}
if( [[o_current_cell title] isEqualToString:_NS("Control")] &&
[o_current_cell state] == NSOnState )
{
i_new_key |= KEY_MODIFIER_CTRL;
}
if( [[o_current_cell title] isEqualToString:_NS("Option/Alt")] &&
[o_current_cell state] == NSOnState )
{
i_new_key |= KEY_MODIFIER_ALT;
}
if( [[o_current_cell title] isEqualToString:_NS("Shift")] &&
[o_current_cell state] == NSOnState )
{
i_new_key |= KEY_MODIFIER_SHIFT;
}
}
i_new_key |= StringToKey([[o_combo stringValue] cString]);
return i_new_key;
}
@end
@implementation ModuleConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 20;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
vlc_list_t *p_list;
module_t *p_parser;
NSRect s_rc = frame;
int i_index;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if ( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the popup */
s_rc.origin.x = s_rc.size.width - 200 - OFFSET_RIGHT;
s_rc.size.width = 200;
o_popup = [[[NSPopUpButton alloc] initWithFrame: s_rc] retain];
[[self contentView] addSubview: o_popup];
[o_popup setAutoresizingMask:NSViewMinXMargin ];
[o_popup setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_popup addItemWithTitle: _NS("Default")];
[[o_popup lastItem] setTag: -1];
[o_popup selectItem: [o_popup lastItem]];
/* build a list of available modules */
p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
p_parser = (module_t *)p_list->p_values[i_index].p_object ;
if( !strcmp( p_parser->psz_capability,
p_item->psz_type ) )
{
NSString *o_description = [NSApp
localizedString: p_parser->psz_longname];
[o_popup addItemWithTitle: o_description];
if( p_item->psz_value &&
!strcmp( p_item->psz_value, p_parser->psz_object_name ) )
{
[o_popup selectItem:[o_popup lastItem]];
}
}
}
vlc_list_release( p_list );
}
return self;
}
- (void)dealloc
{
[o_popup release];
[super dealloc];
}
- (char *)stringValue
{
NSString *newval = [o_popup stringValue];
char *returnval;
int i_index;
vlc_list_t *p_list;
module_t *p_parser;
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
for( i_index = 0; i_index < p_list->i_count; i_index++ )
{
p_parser = (module_t *)p_list->p_values[i_index].p_object ;
if( !strcmp( p_parser->psz_capability,
p_item->psz_type ) )
{
NSString *o_description = [NSApp
localizedString: p_parser->psz_longname];
if( [newval isEqualToString: o_description] )
{
returnval = strdup(p_parser->psz_object_name);
break;
}
}
}
vlc_list_release( p_list );
return returnval;
}
@end
@implementation StringConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 22;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the textfield */
s_rc.origin.x = s_rc.size.width - 200 - OFFSET_RIGHT;
s_rc.size.width = 200;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable ];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_textfield setStringValue: [NSApp localizedString: p_item->psz_value]];
[[self contentView] addSubview: o_textfield];
}
return self;
}
- (void)dealloc
{
[o_textfield release];
[super dealloc];
}
- (char *)stringValue
{
return strdup( [NSApp delocalizeString:[o_textfield stringValue]] );
}
@end
@implementation StringListConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 20;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
int i_index;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the textfield */
s_rc.origin.x = s_rc.size.width - 200 - OFFSET_RIGHT;
s_rc.size.width = 200;
o_combo = [[[NSComboBox alloc] initWithFrame: s_rc] retain];
[o_combo setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable ];
[o_combo setUsesDataSource:TRUE];
[o_combo setDataSource:self];
[o_combo setNumberOfVisibleItems:10];
for( i_index = 0; i_index < p_item->i_list; i_index++ )
{
if( p_item->psz_value && !strcmp( p_item->psz_value, p_item->ppsz_list[i_index] ) )
{
[o_combo selectItemAtIndex: i_index];
}
}
[o_combo setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_combo];
}
return self;
}
- (void)dealloc
{
[o_combo release];
[super dealloc];
}
- (char *)stringValue
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
if( [o_combo indexOfSelectedItem] >= 0 )
return strdup( p_item->ppsz_list[[o_combo indexOfSelectedItem]] );
else
return strdup( [NSApp delocalizeString: [o_combo stringValue]] );
}
@end
@implementation StringListConfigControl (NSComboBoxDataSource)
- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
return p_item->i_list;
}
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)i_index
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
{
return [NSApp localizedString: p_item->ppsz_list_text[i_index]];
} else return [NSApp localizedString: p_item->ppsz_list[i_index]];
}
@end
@implementation FileConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 49;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
s_rc.origin.y = 29;
s_rc.size.height = 20;
/* is it a directory */
b_directory = ( [self getType] == CONFIG_ITEM_DIRECTORY ) ? YES : NO;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
[[self contentView] addSubview: o_label];
/* build the button */
s_rc.origin.y = s_rc.origin.x = 0;
s_rc.size.height = 22;
o_button = [[[NSButton alloc] initWithFrame: s_rc] retain];
[o_button setButtonType: NSMomentaryPushInButton];
[o_button setBezelStyle: NSRoundedBezelStyle];
[o_button setTitle: _NS("Browse...")];
[o_button sizeToFit];
[o_button setAutoresizingMask:NSViewMinXMargin];
[o_button setFrameOrigin: NSMakePoint( s_rc.size.width -
[o_button frame].size.width - OFFSET_RIGHT, s_rc.origin.y)];
[o_button setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_button setTarget: self];
[o_button setAction: @selector(openFileDialog:)];
s_rc.size.height = 22;
s_rc.size.width = s_rc.size.width - OFFSET_BETWEEN - [o_button frame].size.width - OFFSET_RIGHT;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setStringValue: [NSApp localizedString: p_item->psz_value]];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_textfield setAutoresizingMask:NSViewWidthSizable];
[[self contentView] addSubview: o_textfield];
[[self contentView] addSubview: o_button];
}
return self;
}
- (void)dealloc
{
[o_textfield release];
[o_button release];
[super dealloc];
}
- (IBAction)openFileDialog: (id)sender
{
NSOpenPanel *o_open_panel = [NSOpenPanel openPanel];
[o_open_panel setTitle: _NS("Select a file or directory")];
[o_open_panel setPrompt: _NS("Select")];
[o_open_panel setAllowsMultipleSelection: NO];
[o_open_panel setCanChooseFiles: YES];
[o_open_panel setCanChooseDirectories: b_advanced];
[o_open_panel beginSheetForDirectory:nil
file:nil
types:nil
modalForWindow:[sender window]
modalDelegate: self
didEndSelector: @selector(pathChosenInPanel:
withReturn:
contextInfo:)
contextInfo: nil];
}
- (void)pathChosenInPanel:(NSOpenPanel *)o_sheet withReturn:(int)i_return_code contextInfo:(void *)o_context_info
{
if( i_return_code == NSOKButton )
{
NSString *o_path = [[o_sheet filenames] objectAtIndex: 0];
[o_textfield setStringValue: o_path];
}
}
- (char *)stringValue
{
return strdup( [NSApp delocalizeString: [o_textfield stringValue]] );
}
@end
@implementation IntegerConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 22;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the stepper */
s_rc.origin.x = s_rc.size.width - 13 - OFFSET_RIGHT;
o_stepper = [[[NSStepper alloc] initWithFrame: s_rc] retain];
[o_stepper sizeToFit];
[o_stepper setAutoresizingMask:NSViewMinXMargin];
[o_stepper setMaxValue: 1600];
[o_stepper setMinValue: -1600];
[o_stepper setIntValue: p_item->i_value];
[o_stepper setTarget: self];
[o_stepper setAction: @selector(stepperChanged:)];
[o_stepper sendActionOn:NSLeftMouseUpMask|NSLeftMouseDownMask|NSLeftMouseDraggedMask];
[o_stepper setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_stepper];
/* build the textfield */
s_rc.origin.x = s_rc.size.width - 60 - OFFSET_BETWEEN - 13 - OFFSET_RIGHT;
s_rc.size.width = 60;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable ];
[o_textfield setIntValue: p_item->i_value];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_textfield setDelegate: self];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(textfieldChanged:)
name: NSControlTextDidChangeNotification
object: o_textfield];
[[self contentView] addSubview: o_textfield];
}
return self;
}
- (void)dealloc
{
[o_stepper release];
[o_textfield release];
[super dealloc];
}
- (IBAction)stepperChanged:(id)sender
{
[o_textfield setIntValue: [o_stepper intValue]];
}
- (void)textfieldChanged:(NSNotification *)o_notification
{
[o_stepper setIntValue: [o_textfield intValue]];
}
- (int)getIntValue
{
return [o_stepper intValue];
}
@end
@implementation IntegerListConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 20;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
int i_index;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the textfield */
s_rc.origin.x = s_rc.size.width - 200 - OFFSET_RIGHT;
s_rc.size.width = 200;
o_combo = [[[NSComboBox alloc] initWithFrame: s_rc] retain];
[o_combo setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable ];
[o_combo setUsesDataSource:TRUE];
[o_combo setDataSource:self];
[o_combo setNumberOfVisibleItems:10];
for( i_index = 0; i_index < p_item->i_list; i_index++ )
{
if( p_item->i_value == p_item->pi_list[i_index] )
{
[o_combo selectItemAtIndex: i_index];
}
}
[o_combo setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_combo];
}
return self;
}
- (void)dealloc
{
[o_combo release];
[super dealloc];
}
- (int)intValue
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
if( [o_combo indexOfSelectedItem] >= 0 )
return p_item->pi_list[[o_combo indexOfSelectedItem]];
else
return [o_combo intValue];
}
@end
@implementation IntegerListConfigControl (NSComboBoxDataSource)
- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
return p_item->i_list;
}
- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)i_index
{
module_config_t *p_item;
p_item = config_FindConfig( p_this, psz_name );
if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
{
return [NSApp localizedString: p_item->ppsz_list_text[i_index]];
} else return [NSString stringWithFormat: @"%i", p_item->pi_list[i_index]];
}
@end
@implementation RangedIntegerConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 50;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
s_rc.size.height = 20;
s_rc.origin.y = 30;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the slider */
/* min value textfield */
s_rc.origin.y = 0;
s_rc.origin.x = 0;
s_rc.size.width = 40;
o_textfield_min = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield_min setAutoresizingMask:NSViewMaxXMargin];
[o_textfield_min setDrawsBackground: NO];
[o_textfield_min setBordered: NO];
[o_textfield_min setEditable: NO];
[o_textfield_min setSelectable: NO];
[o_textfield_min setIntValue: p_item->i_min];
[o_textfield_min setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_textfield_min];
/* the slider */
s_rc.size.width = [[self contentView] bounds].size.width - OFFSET_RIGHT - 2*OFFSET_BETWEEN - 3*40;
s_rc.origin.x = 40 + OFFSET_BETWEEN;
o_slider = [[[NSStepper alloc] initWithFrame: s_rc] retain];
[o_slider setAutoresizingMask:NSViewWidthSizable];
[o_slider setMaxValue: p_item->i_max];
[o_slider setMinValue: p_item->i_min];
[o_slider setIntValue: p_item->i_value];
[o_slider setTarget: self];
[o_slider setAction: @selector(sliderChanged:)];
[o_slider sendActionOn:NSLeftMouseUpMask|NSLeftMouseDownMask|NSLeftMouseDraggedMask];
[o_slider setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_slider];
/* max value textfield */
s_rc.size.width = 40;
s_rc.origin.x = [[self contentView] bounds].size.width - OFFSET_RIGHT - OFFSET_BETWEEN - 2*40;
o_textfield_max = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield_max setAutoresizingMask:NSViewMinXMargin ];
[o_textfield_max setDrawsBackground: NO];
[o_textfield_max setBordered: NO];
[o_textfield_max setEditable: NO];
[o_textfield_max setSelectable: NO];
[o_textfield_max setIntValue: p_item->i_max];
[o_textfield_max setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_textfield_max];
/* current value textfield */
s_rc.size.width = 40;
s_rc.origin.x = [[self contentView] bounds].size.width - OFFSET_RIGHT - 40;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setAutoresizingMask:NSViewMinXMargin];
[o_textfield setIntValue: p_item->i_value];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_textfield setDelegate: self];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(textfieldChanged:)
name: NSControlTextDidChangeNotification
object: o_textfield];
[[self contentView] addSubview: o_textfield];
}
return self;
}
- (void)dealloc
{
[o_textfield release];
[o_textfield_min release];
[o_textfield_max release];
[o_slider release];
[super dealloc];
}
- (IBAction)sliderChanged:(id)sender
{
[o_textfield setIntValue: [o_slider intValue]];
}
- (void)textfieldChanged:(NSNotification *)o_notification
{
[o_slider setIntValue: [o_textfield intValue]];
}
- (int)intValue
{
return [o_slider intValue];
}
@end
@implementation FloatConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 20;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the textfield */
s_rc.origin.x = s_rc.size.width - 60 - OFFSET_RIGHT;
s_rc.size.width = 60;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setAutoresizingMask:NSViewMinXMargin | NSViewWidthSizable ];
[o_textfield setFloatValue: p_item->f_value];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_textfield];
}
return self;
}
- (void)dealloc
{
[o_textfield release];
[super dealloc];
}
- (float)floatValue
{
return [o_textfield floatValue];
}
@end
@implementation RangedFloatConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 50;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
s_rc.size.height = 20;
s_rc.origin.y = 30;
/* add the label */
o_label = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_label setDrawsBackground: NO];
[o_label setBordered: NO];
[o_label setEditable: NO];
[o_label setSelectable: NO];
if( p_item->psz_text )
[o_label setStringValue: [NSApp localizedString: p_item->psz_text]];
[o_label sizeToFit];
[[self contentView] addSubview: o_label];
[o_label setAutoresizingMask:NSViewMaxXMargin ];
/* build the slider */
/* min value textfield */
s_rc.origin.y = 0;
s_rc.origin.x = 0;
s_rc.size.width = 40;
o_textfield_min = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield_min setAutoresizingMask:NSViewMaxXMargin];
[o_textfield_min setDrawsBackground: NO];
[o_textfield_min setBordered: NO];
[o_textfield_min setEditable: NO];
[o_textfield_min setSelectable: NO];
[o_textfield_min setFloatValue: p_item->f_min];
[o_textfield_min setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_textfield_min];
/* the slider */
s_rc.size.width = [[self contentView] bounds].size.width - OFFSET_RIGHT - 2*OFFSET_BETWEEN - 3*40;
s_rc.origin.x = 40 + OFFSET_BETWEEN;
o_slider = [[[NSStepper alloc] initWithFrame: s_rc] retain];
[o_slider setAutoresizingMask:NSViewWidthSizable];
[o_slider setMaxValue: p_item->f_max];
[o_slider setMinValue: p_item->f_min];
[o_slider setFloatValue: p_item->f_value];
[o_slider setTarget: self];
[o_slider setAction: @selector(sliderChanged:)];
[o_slider sendActionOn:NSLeftMouseUpMask|NSLeftMouseDownMask|NSLeftMouseDraggedMask];
[o_slider setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_slider];
/* max value textfield */
s_rc.size.width = 40;
s_rc.origin.x = [[self contentView] bounds].size.width - OFFSET_RIGHT - OFFSET_BETWEEN - 2*40;
o_textfield_max = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield_max setAutoresizingMask:NSViewMinXMargin ];
[o_textfield_max setDrawsBackground: NO];
[o_textfield_max setBordered: NO];
[o_textfield_max setEditable: NO];
[o_textfield_max setSelectable: NO];
[o_textfield_max setFloatValue: p_item->f_max];
[o_textfield_max setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_textfield_max];
/* current value textfield */
s_rc.size.width = 40;
s_rc.origin.x = [[self contentView] bounds].size.width - OFFSET_RIGHT - 40;
o_textfield = [[[NSTextField alloc] initWithFrame: s_rc] retain];
[o_textfield setAutoresizingMask:NSViewMinXMargin];
[o_textfield setFloatValue: p_item->f_value];
[o_textfield setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[o_textfield setDelegate: self];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(textfieldChanged:)
name: NSControlTextDidChangeNotification
object: o_textfield];
[[self contentView] addSubview: o_textfield];
}
return self;
}
- (void)dealloc
{
[o_textfield release];
[o_textfield_min release];
[o_textfield_max release];
[o_slider release];
[super dealloc];
}
- (IBAction)sliderChanged:(id)sender
{
[o_textfield setFloatValue: [o_slider floatValue]];
}
- (void)textfieldChanged:(NSNotification *)o_notification
{
[o_slider setFloatValue: [o_textfield floatValue]];
}
- (float)floatValue
{
return [o_slider floatValue];
}
@end
@implementation BoolConfigControl
- (id)initWithFrame: (NSRect)frame
item: (module_config_t *)p_item
withObject: (vlc_object_t *)_p_this
{
frame.size.height = 20;
if( self = [super initWithFrame: frame item: p_item
withObject: _p_this] )
{
NSRect s_rc = frame;
s_rc.size.height = 20;
o_checkbox = [[[NSButton alloc] initWithFrame: s_rc] retain];
[o_checkbox setButtonType: NSSwitchButton];
[o_checkbox setIntValue: p_item->i_value];
[o_checkbox setTitle: [NSApp localizedString: p_item->psz_text]];
[o_checkbox setToolTip: [NSApp wrapString: [NSApp localizedString: p_item->psz_longtext ] toWidth: PREFS_WRAP]];
[[self contentView] addSubview: o_checkbox];
}
return self;
}
- (void)dealloc
{
[o_checkbox release];
[super dealloc];
}
- (int)intValue
{
[o_checkbox intValue];
}
@end
.deps
.dirstamp
*.lo
*.la
*.dll
*.dylib
*.sl
*.so
Makefile.am
Makefile.in
Makefile
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment