Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Steve Lhomme
VLC
Commits
32519ebf
Commit
32519ebf
authored
Nov 05, 2002
by
Jon Lech Johansen
Browse files
* ./modules/gui/macosx/prefs.m: new configuration interface
parent
4d0e2b16
Changes
9
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
32519ebf
0.5.0
Not
released
yet
*
./
modules
/
gui
/
macosx
/
prefs
.
m
:
new
configuration
interface
*
./
src
/
misc
/
netutils
.
c
:
GetMacAddress
Darwin
support
*
./
src
/
libvlc
.
h
:
default
to
en0
instead
of
eth0
under
Darwin
*
./
plugins
/
dvdplay
/
access
.
c
:
use
dvdplay
after
it
has
completed
...
...
extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib
View file @
32519ebf
...
...
@@ -28,7 +28,7 @@
SUPERCLASS = NSObject;
},
{
ACTIONS = {clearRecentItems = id; };
ACTIONS = {clearRecentItems = id;
viewPreferences = id;
};
CLASS = VLCMain;
LANGUAGE = ObjC;
OUTLETS = {
...
...
@@ -57,13 +57,13 @@
"o_mi_open_disc" = id;
"o_mi_open_file" = id;
"o_mi_open_net" = id;
"o_mi_open_quickly" = id;
"o_mi_open_recent" = id;
"o_mi_open_recent_cm" = id;
"o_mi_paste" = id;
"o_mi_pause" = id;
"o_mi_play" = id;
"o_mi_playlist" = id;
"o_mi_prefs" = id;
"o_mi_previous" = id;
"o_mi_program" = id;
"o_mi_quit" = id;
...
...
extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib
View file @
32519ebf
...
...
@@ -16,6 +16,7 @@
<key>
IBOpenObjects
</key>
<array>
<integer>
636
</integer>
<integer>
29
</integer>
</array>
<key>
IBSystem Version
</key>
<string>
6D52
</string>
...
...
extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib
View file @
32519ebf
No preview for this file type
modules/gui/macosx/Modules.am
View file @
32519ebf
...
...
@@ -4,6 +4,7 @@ SOURCES_macosx = \
modules/gui/macosx/vout.m \
modules/gui/macosx/intf.m \
modules/gui/macosx/open.m \
modules/gui/macosx/prefs.m \
modules/gui/macosx/playlist.m \
modules/gui/macosx/controls.m \
modules/gui/macosx/asystm.m
...
...
@@ -11,6 +12,7 @@ SOURCES_macosx = \
noinst_HEADERS += \
modules/gui/macosx/intf.h \
modules/gui/macosx/open.h \
modules/gui/macosx/prefs.h \
modules/gui/macosx/playlist.h \
modules/gui/macosx/vout.h \
modules/gui/macosx/adev_discovery.h \
...
...
modules/gui/macosx/intf.h
View file @
32519ebf
...
...
@@ -2,7 +2,7 @@
* intf.h: MacOS X interface plugin
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: intf.h,v 1.
2
2002/1
0
/0
2 22:56:53 massiot
Exp $
* $Id: intf.h,v 1.
3
2002/1
1
/0
5 03:57:16 jlj
Exp $
*
* Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Christophe Massiot <massiot@via.ecp.fr>
...
...
@@ -82,6 +82,8 @@ struct intf_sys_t
*****************************************************************************/
@interface
VLCMain
:
NSObject
{
id
o_prefs
;
/* VLCPrefs */
IBOutlet
id
o_window
;
/* main window */
IBOutlet
id
o_controls
;
/* VLCControls */
...
...
@@ -94,6 +96,7 @@ struct intf_sys_t
/* main menu */
IBOutlet
id
o_mi_about
;
IBOutlet
id
o_mi_prefs
;
IBOutlet
id
o_mi_hide
;
IBOutlet
id
o_mi_hide_others
;
IBOutlet
id
o_mi_show_all
;
...
...
@@ -103,7 +106,6 @@ struct intf_sys_t
IBOutlet
id
o_mi_open_file
;
IBOutlet
id
o_mi_open_disc
;
IBOutlet
id
o_mi_open_net
;
IBOutlet
id
o_mi_open_quickly
;
IBOutlet
id
o_mi_open_recent
;
IBOutlet
id
o_mi_open_recent_cm
;
...
...
@@ -166,6 +168,8 @@ struct intf_sys_t
//- (void)selectAction:(id)sender;
-
(
IBAction
)
viewPreferences
:(
id
)
sender
;
@end
@interface
VLCMain
(
Internal
)
...
...
modules/gui/macosx/intf.m
View file @
32519ebf
...
...
@@ -2,7 +2,7 @@
* intf.m: MacOS X interface plugin
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: intf.m,v 1.
3
2002/1
0
/0
2 22:56:53 massiot
Exp $
* $Id: intf.m,v 1.
4
2002/1
1
/0
5 03:57:16 jlj
Exp $
*
* Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Christophe Massiot <massiot@via.ecp.fr>
...
...
@@ -33,6 +33,7 @@
#include "intf.h"
#include "vout.h"
#include "prefs.h"
#include "playlist.h"
#include "asystm.h"
...
...
@@ -164,6 +165,18 @@ static void Run( intf_thread_t *p_intf )
*****************************************************************************/
@implementation
VLCMain
-
(
id
)
init
{
self
=
[
super
init
];
if
(
self
!=
nil
)
{
o_prefs
=
nil
;
}
return
(
self
);
}
-
(
void
)
awakeFromNib
{
NSString
*
pTitle
=
[
NSString
...
...
@@ -175,6 +188,7 @@ static void Run( intf_thread_t *p_intf )
[
o_msgs_btn_ok
setTitle
:
_NS
(
"Close"
)];
[
o_mi_about
setTitle
:
_NS
(
"About vlc"
)];
[
o_mi_prefs
setTitle
:
_NS
(
"Preferences"
)];
[
o_mi_hide
setTitle
:
_NS
(
"Hide vlc"
)];
[
o_mi_hide_others
setTitle
:
_NS
(
"Hide Others"
)];
[
o_mi_show_all
setTitle
:
_NS
(
"Show All"
)];
...
...
@@ -184,7 +198,6 @@ static void Run( intf_thread_t *p_intf )
[
o_mi_open_file
setTitle
:
_NS
(
"Open File"
)];
[
o_mi_open_disc
setTitle
:
_NS
(
"Open Disc"
)];
[
o_mi_open_net
setTitle
:
_NS
(
"Open Network"
)];
[
o_mi_open_quickly
setTitle
:
_NS
(
"Open Quickly..."
)];
[
o_mi_open_recent
setTitle
:
_NS
(
"Open Recent"
)];
[
o_mi_open_recent_cm
setTitle
:
_NS
(
"Clear Menu"
)];
...
...
@@ -424,6 +437,12 @@ static void Run( intf_thread_t *p_intf )
vout_DestroyThread
(
p_vout
);
}
if
(
o_prefs
!=
nil
)
{
[
o_prefs
release
];
o_prefs
=
nil
;
}
[
NSApp
stop
:
nil
];
/* write cached user defaults to disk */
...
...
@@ -743,6 +762,16 @@ static void Run( intf_thread_t *p_intf )
[
self
application
:
nil
openFile
:
[
sender
title
]];
}
-
(
IBAction
)
viewPreferences
:(
id
)
sender
{
if
(
o_prefs
==
nil
)
{
o_prefs
=
[[
VLCPrefs
alloc
]
init
];
}
[
o_prefs
createPrefPanel
:
@"main"
];
}
@end
@implementation
VLCMain
(
NSMenuValidation
)
...
...
modules/gui/macosx/prefs.h
0 → 100644
View file @
32519ebf
/*****************************************************************************
* prefs.h: MacOS X plugin for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: prefs.h,v 1.1 2002/11/05 03:57:16 jlj Exp $
*
* Authors: Jon Lech Johansen <jon-vl@nanocrew.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
* 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.
*****************************************************************************/
/*****************************************************************************
* VLCPrefs interface
*****************************************************************************/
@interface
VLCPrefs
:
NSObject
{
intf_thread_t
*
p_intf
;
NSMutableDictionary
*
o_pref_panels
;
NSMutableDictionary
*
o_toolbars
;
NSMutableDictionary
*
o_scroll_views
;
NSMutableDictionary
*
o_panel_views
;
NSMutableDictionary
*
o_save_prefs
;
}
-
(
BOOL
)
hasPrefs
:(
NSString
*
)
o_module_name
;
-
(
void
)
createPrefPanel
:(
NSString
*
)
o_module_name
;
-
(
void
)
destroyPrefPanel
:(
id
)
o_unknown
;
-
(
void
)
selectPrefView
:(
id
)
sender
;
-
(
void
)
moduleSelected
:(
id
)
sender
;
-
(
void
)
configureModule
:(
id
)
sender
;
-
(
void
)
selectModule
:(
id
)
sender
;
-
(
void
)
configChanged
:(
id
)
o_unknown
;
-
(
void
)
clickedApply
:(
id
)
sender
;
-
(
void
)
clickedCancelOK
:(
id
)
sender
;
@end
@interface
VLCFlippedView
:
NSView
{
}
@end
#define INTF_CONTROL_CONFIG(x) \
@interface VLC##x : NS##x \
{ \
NSString *o_module_name; \
NSString *o_config_name; \
int i_config_type; \
} \
- (void)setModuleName:(NSString *)_o_module_name; \
- (void)setConfigName:(NSString *)_o_config_name; \
- (void)setConfigType:(int)_i_config_type; \
- (NSString *)moduleName; \
- (NSString *)configName; \
- (int)configType; \
@end
#define IMPL_CONTROL_CONFIG(x) \
@implementation VLC##x \
- (id)init \
{ \
self = [super init]; \
if( self != nil ) \
{ \
o_module_name = nil; \
o_config_name = nil; \
i_config_type = 0; \
} \
return( self ); \
} \
- (void)dealloc \
{ \
if( o_module_name != nil ) \
{ \
[o_module_name release]; \
} \
if( o_config_name != nil ) \
{ \
[o_config_name release]; \
} \
[super dealloc]; \
} \
- (void)setModuleName:(NSString *)_o_module_name \
{ \
if( o_module_name != nil ) \
{ \
[o_module_name release]; \
} \
o_module_name = [_o_module_name retain]; \
} \
- (void)setConfigName:(NSString *)_o_config_name \
{ \
if( o_config_name != nil ) \
{ \
[o_config_name release]; \
} \
o_config_name = [_o_config_name retain]; \
} \
- (void)setConfigType:(int)_i_config_type \
{ \
i_config_type = _i_config_type; \
} \
- (NSString *)moduleName \
{ \
return( o_module_name ); \
} \
- (NSString *)configName \
{ \
return( o_config_name ); \
} \
- (int)configType \
{ \
return( i_config_type ); \
} \
@end
INTF_CONTROL_CONFIG
(
Button
);
INTF_CONTROL_CONFIG
(
ComboBox
);
INTF_CONTROL_CONFIG
(
TextField
);
#define CONTROL_CONFIG( obj, mname, ctype, cname ) \
{ \
[obj setModuleName: mname]; \
[obj setConfigType: ctype]; \
[obj setConfigName: [NSString stringWithCString: cname]]; \
}
modules/gui/macosx/prefs.m
0 → 100644
View file @
32519ebf
/*****************************************************************************
* prefs.m: MacOS X plugin for vlc
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: prefs.m,v 1.1 2002/11/05 03:57:16 jlj Exp $
*
* Authors: Jon Lech Johansen <jon-vl@nanocrew.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
* 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 <sys/param.h>
/* for MAXPATHLEN */
#include <string.h>
#import <Cocoa/Cocoa.h>
#include <vlc/vlc.h>
#include <vlc/intf.h>
#import "intf.h"
#import "prefs.h"
/*****************************************************************************
* VLCPrefs implementation
*****************************************************************************/
@implementation
VLCPrefs
-
(
id
)
init
{
self
=
[
super
init
];
if
(
self
!=
nil
)
{
p_intf
=
[
NSApp
getIntf
];
o_pref_panels
=
[[
NSMutableDictionary
alloc
]
init
];
o_toolbars
=
[[
NSMutableDictionary
alloc
]
init
];
o_scroll_views
=
[[
NSMutableDictionary
alloc
]
init
];
o_panel_views
=
[[
NSMutableDictionary
alloc
]
init
];
o_save_prefs
=
[[
NSMutableDictionary
alloc
]
init
];
}
return
(
self
);
}
-
(
void
)
dealloc
{
id
v1
,
v2
;
NSEnumerator
*
o_e1
;
NSEnumerator
*
o_e2
;
#define DIC_REL1(o_dic) \
{ \
o_e1 = [o_dic objectEnumerator]; \
while( (v1 = [o_e1 nextObject]) ) \
{ \
[v1 release]; \
} \
[o_dic removeAllObjects]; \
[o_dic release]; \
}
#define DIC_REL2(o_dic) \
{ \
o_e2 = [o_dic objectEnumerator]; \
while( (v2 = [o_e2 nextObject]) ) \
{ \
DIC_REL1(v2); \
} \
[o_dic removeAllObjects]; \
}
DIC_REL1
(
o_pref_panels
);
DIC_REL2
(
o_toolbars
);
DIC_REL1
(
o_scroll_views
);
DIC_REL2
(
o_panel_views
);
DIC_REL1
(
o_save_prefs
);
#undef DIC_REL1
#undef DIC_REL2
[
super
dealloc
];
}
-
(
BOOL
)
hasPrefs
:(
NSString
*
)
o_module_name
{
module_t
**
pp_parser
;
vlc_list_t
*
p_list
;
char
*
psz_module_name
;
psz_module_name
=
(
char
*
)[
o_module_name
lossyCString
];
/* look for module */
p_list
=
vlc_list_find
(
p_intf
,
VLC_OBJECT_MODULE
,
FIND_ANYWHERE
);
for
(
pp_parser
=
(
module_t
**
)
p_list
->
pp_objects
;
*
pp_parser
;
pp_parser
++
)
{
if
(
!
strcmp
(
(
*
pp_parser
)
->
psz_object_name
,
psz_module_name
)
)
{
BOOL
b_has_prefs
=
(
*
pp_parser
)
->
i_config_items
!=
0
;
vlc_list_release
(
p_list
);
return
(
b_has_prefs
);
}
}
vlc_list_release
(
p_list
);
return
(
NO
);
}
-
(
void
)
createPrefPanel
:(
NSString
*
)
o_module_name
{
int
i_pos
;
int
i_module_tag
;
module_t
**
pp_parser
;
vlc_list_t
*
p_list
;
module_config_t
*
p_item
;
char
*
psz_module_name
;
NSPanel
*
o_panel
;
/* panel */
NSRect
s_panel_rc
;
/* panel rect */
NSView
*
o_panel_view
;
/* panel view */
NSToolbar
*
o_toolbar
;
/* panel toolbar */
NSMutableDictionary
*
o_tb_items
;
/* panel toolbar items */
NSScrollView
*
o_scroll_view
;
/* panel scroll view */
NSRect
s_scroll_rc
;
/* panel scroll view rect */
NSMutableDictionary
*
o_views
;
/* panel scroll view docviews */
NSRect
s_rc
;
/* rect */
NSView
*
o_view
;
/* view */
NSRect
s_vrc
;
/* view rect */
NSButton
*
o_button
;
/* button */
NSRect
s_brc
;
/* button rect */
VLCTextField
*
o_text_field
;
/* input field / label */
o_panel
=
[
o_pref_panels
objectForKey
:
o_module_name
];
if
(
o_panel
!=
nil
)
{
[
o_panel
center
];
[
o_panel
makeKeyAndOrderFront
:
nil
];
return
;
}
psz_module_name
=
(
char
*
)[
o_module_name
lossyCString
];
/* Look for the selected module */
p_list
=
vlc_list_find
(
p_intf
,
VLC_OBJECT_MODULE
,
FIND_ANYWHERE
);
for
(
pp_parser
=
(
module_t
**
)
p_list
->
pp_objects
;
*
pp_parser
;
pp_parser
++
)
{
if
(
psz_module_name
&&
!
strcmp
(
psz_module_name
,
(
*
pp_parser
)
->
psz_object_name
)
)
{
break
;
}
}
if
(
!
(
*
pp_parser
)
)
{
vlc_list_release
(
p_list
);
return
;
}
/* We found it, now we can start building its configuration interface */
s_panel_rc
=
NSMakeRect
(
0
,
0
,
450
,
450
);
o_panel
=
[[
NSPanel
alloc
]
initWithContentRect
:
s_panel_rc
styleMask:
NSTitledWindowMask
backing:
NSBackingStoreBuffered
defer:
YES
];
o_toolbar
=
[[
NSToolbar
alloc
]
initWithIdentifier
:
o_module_name
];
[
o_panel
setTitle
:
[
NSString
stringWithFormat
:
@"%@ (%@)"
,
_NS
(
"Preferences"
),
o_module_name
]];
o_panel_view
=
[
o_panel
contentView
];
s_scroll_rc
=
s_panel_rc
;
s_scroll_rc
.
size
.
height
-=
55
;
s_scroll_rc
.
origin
.
y
+=
55
;
o_scroll_view
=
[[
NSScrollView
alloc
]
initWithFrame
:
s_scroll_rc
];
[
o_scroll_views
setObject
:
o_scroll_view
forKey
:
o_module_name
];
[
o_scroll_view
setBorderType
:
NSGrooveBorder
];
[
o_scroll_view
setHasVerticalScroller
:
YES
];
[
o_scroll_view
setDrawsBackground
:
NO
];
[
o_scroll_view
setRulersVisible
:
YES
];
[
o_panel_view
addSubview
:
o_scroll_view
];
o_tb_items
=
[[
NSMutableDictionary
alloc
]
init
];
o_views
=
[[
NSMutableDictionary
alloc
]
init
];
[
o_save_prefs
setObject
:
[[
NSMutableArray
alloc
]
init
]
forKey:
o_module_name
];
/* Enumerate config options and add corresponding config boxes */
p_item
=
(
*
pp_parser
)
->
p_config
;
i_pos
=
0
;
o_view
=
nil
;
i_module_tag
=
3
;
#define X_ORIGIN 20
#define Y_ORIGIN (X_ORIGIN - 10)
#define CHECK_VIEW_HEIGHT \
{ \
float f_new_pos = s_rc.origin.y + s_rc.size.height + X_ORIGIN; \
if( f_new_pos > s_vrc.size.height ) \
{ \
s_vrc.size.height = f_new_pos; \
[o_view setFrame: s_vrc]; \
} \
}
#define CONTROL_LABEL( label ) \
{ \
s_rc.origin.x += s_rc.size.width + 10; \
s_rc.size.width = s_vrc.size.width - s_rc.origin.x - X_ORIGIN - 20; \
o_text_field = [[NSTextField alloc] initWithFrame: s_rc]; \
[o_text_field setDrawsBackground: NO]; \
[o_text_field setBordered: NO]; \
[o_text_field setEditable: NO]; \
[o_text_field setSelectable: NO]; \
[o_text_field setStringValue: \
[NSString stringWithCString: label]]; \
[o_view addSubview: [o_text_field autorelease]]; \
}
#define INPUT_FIELD( ctype, cname, label, w, msg, param ) \
{ \
s_rc.size.height = 23; \
s_rc.size.width = w; \
s_rc.origin.y += 10; \
CHECK_VIEW_HEIGHT; \
o_text_field = [[VLCTextField alloc] initWithFrame: s_rc]; \
[o_text_field setAlignment: NSRightTextAlignment]; \
CONTROL_CONFIG( o_text_field, o_module_name, ctype, cname ); \
[o_text_field msg: param]; \
[o_view addSubview: [o_text_field autorelease]]; \
[[NSNotificationCenter defaultCenter] addObserver: self \
selector: @selector(configChanged:) \
name: NSControlTextDidChangeNotification \
object: o_text_field]; \
CONTROL_LABEL( label ); \
s_rc.origin.y += s_rc.size.height; \
s_rc.origin.x = X_ORIGIN; \
}
#define INPUT_FIELD_INTEGER( name, label, w, param ) \
INPUT_FIELD( CONFIG_ITEM_INTEGER, name, label, w, setIntValue, param )
#define INPUT_FIELD_FLOAT( name, label, w, param ) \
INPUT_FIELD( CONFIG_ITEM_FLOAT, name, label, w, setFloatValue, param )
#define INPUT_FIELD_STRING( name, label, w, param ) \
INPUT_FIELD( CONFIG_ITEM_STRING, name, label, w, setStringValue, param )
if
(
p_item
)
do
{
switch
(
p_item
->
i_type
)
{
case
CONFIG_HINT_CATEGORY
:
{
NSString
*
o_key
;
NSString
*
o_label
;
NSToolbarItem
*
o_tbi
;
o_label
=
[
NSString
stringWithCString
:
p_item
->
psz_text
];
o_tbi
=
[[
NSToolbarItem
alloc
]
initWithItemIdentifier
:
o_label
];
[
o_tbi
setImage
:
[
NSImage
imageNamed
:
@"NSApplicationIcon"
]];
[
o_tbi
setLabel
:
o_label
];
[
o_tbi
setTarget
:
self
];
[
o_tbi
setAction
:
@selector
(
selectPrefView
:)];
o_key
=
[
NSString
stringWithFormat
:
@"%02d %@"
,
i_pos
,
o_label
];
[
o_tb_items
setObject
:
o_tbi
forKey
:
o_key
];
s_vrc
=
s_scroll_rc
;
s_vrc
.
size
.
height
-=
4
;
o_view
=
[[
VLCFlippedView
alloc
]
initWithFrame
:
s_vrc
];
[
o_views
setObject
:
o_view
forKey
:
o_label
];
s_rc
.
origin
.
x
=
X_ORIGIN
;
s_rc
.
origin
.
y
=
Y_ORIGIN
;
i_module_tag
=
3
;