Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
0bb73cd8
Commit
0bb73cd8
authored
Sep 21, 2008
by
Pierre d'Herbemont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
macosx: Simplify prefs.m.
parent
54f11e39
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
269 additions
and
429 deletions
+269
-429
modules/gui/macosx/prefs.h
modules/gui/macosx/prefs.h
+2
-2
modules/gui/macosx/prefs.m
modules/gui/macosx/prefs.m
+267
-427
No files found.
modules/gui/macosx/prefs.h
View file @
0bb73cd8
...
...
@@ -21,7 +21,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
@class
VLCTreeItem
;
@class
VLCTree
Main
Item
;
/*****************************************************************************
* VLCPrefs interface
...
...
@@ -29,7 +29,7 @@
@interface
VLCPrefs
:
NSObject
{
intf_thread_t
*
p_intf
;
VLCTree
Item
*
o_config_tree
;
VLCTree
MainItem
*
_rootTreeItem
;
NSView
*
o_empty_view
;
NSMutableDictionary
*
o_save_prefs
;
...
...
modules/gui/macosx/prefs.m
View file @
0bb73cd8
...
...
@@ -62,38 +62,59 @@
@interface
VLCTreeItem
:
NSObject
{
NSString
*
o_name
;
NSString
*
o_title
;
NSString
*
o_help
;
vlc_object_t
*
_vlc_object
;
VLCTreeItem
*
o_parent
;
NSMutableArray
*
o_children
;
int
i_object_category
;
NSMutableArray
*
o_subviews
;
}
-
(
id
)
initWithName
:
(
NSString
*
)
o_item_name
withTitle
:
(
NSString
*
)
o_item_title
withHelp
:
(
NSString
*
)
o_item_help
withObject
:
(
vlc_object_t
*
)
object
parent
:(
VLCTreeItem
*
)
o_parent_item
children
:(
NSMutableArray
*
)
o_children_array
whithCategory
:
(
int
)
i_category
;
+
(
VLCTreeItem
*
)
rootItem
;
NSString
*
_name
;
NSMutableArray
*
_children
;
NSMutableArray
*
_subviews
;
module_config_t
*
_configItem
;
}
-
(
id
)
initWithConfigItem
:(
module_config_t
*
)
configItem
;
-
(
id
)
initWithName
:(
NSString
*
)
name
andConfigItem
:(
module_config_t
*
)
configItem
;
-
(
int
)
numberOfChildren
;
-
(
VLCTreeItem
*
)
childAtIndex
:(
int
)
i_index
;
-
(
vlc_object_t
*
)
vlcObject
;
-
(
module_config_t
*
)
configItem
;
-
(
NSString
*
)
name
;
-
(
NSString
*
)
title
;
-
(
NSString
*
)
help
;
-
(
BOOL
)
hasPrefs
:(
NSString
*
)
o_module_name
;
-
(
NSView
*
)
showView
:(
NSScrollView
*
)
o_prefs_view
;
-
(
NSMutableArray
*
)
children
;
-
(
void
)
showView
:(
NSScrollView
*
)
o_prefs_view
;
-
(
void
)
applyChanges
;
-
(
void
)
resetView
;
@end
@interface
VLCTreeSubCategoryItem
:
VLCTreeItem
{
int
_subCategory
;
}
+
(
VLCTreeSubCategoryItem
*
)
subCategoryTreeItemWithSubCategory
:(
int
)
category
;
-
(
id
)
initWithSubCategory
:(
int
)
subCategory
;
-
(
int
)
subCategory
;
@end
@interface
VLCTreeCategoryItem
:
VLCTreeItem
{
int
_category
;
}
+
(
VLCTreeCategoryItem
*
)
categoryTreeItemWithCategory
:(
int
)
category
;
-
(
id
)
initWithCategory
:(
int
)
category
;
-
(
int
)
category
;
-
(
VLCTreeSubCategoryItem
*
)
itemRepresentingSubCategory
:(
int
)
category
;
@end
@interface
VLCTreeLeafItem
:
VLCTreeItem
{
}
@end
@interface
VLCTreeMainItem
:
VLCTreeItem
{
module_config_t
*
_configItems
;
}
-
(
VLCTreeCategoryItem
*
)
itemRepresentingCategory
:(
int
)
category
;
@end
#pragma mark -
/*****************************************************************************
...
...
@@ -118,6 +139,7 @@ static VLCPrefs *_o_sharedMainInstance = nil;
_o_sharedMainInstance
=
[
super
init
];
p_intf
=
VLCIntf
;
o_empty_view
=
[[
NSView
alloc
]
init
];
_rootTreeItem
=
[[
VLCTreeMainItem
alloc
]
init
];
}
return
_o_sharedMainInstance
;
...
...
@@ -126,6 +148,7 @@ static VLCPrefs *_o_sharedMainInstance = nil;
-
(
void
)
dealloc
{
[
o_empty_view
release
];
[
_rootTreeItem
release
];
[
super
dealloc
];
}
...
...
@@ -168,7 +191,7 @@ static VLCPrefs *_o_sharedMainInstance = nil;
-
(
IBAction
)
savePrefs
:
(
id
)
sender
{
/* TODO: call savePrefs on Root item */
[
[
VLCTreeItem
rootItem
]
applyChanges
];
[
_rootTreeItem
applyChanges
];
config_SaveConfigFile
(
p_intf
,
NULL
);
[
o_prefs_window
orderOut
:
self
];
}
...
...
@@ -194,7 +217,7 @@ static VLCPrefs *_o_sharedMainInstance = nil;
{
[
o_prefs_view
setDocumentView
:
o_empty_view
];
config_ResetAll
(
p_intf
);
[
[
VLCTreeItem
rootItem
]
resetView
];
[
_rootTreeItem
resetView
];
[[
o_tree
itemAtRow
:[
o_tree
selectedRow
]]
showView:
o_prefs_view
];
}
...
...
@@ -226,504 +249,321 @@ static VLCPrefs *_o_sharedMainInstance = nil;
@implementation
VLCPrefs
(
NSTableDataSource
)
-
(
int
)
outlineView
:(
NSOutlineView
*
)
outlineView
numberOfChildrenOfItem
:(
id
)
item
{
return
(
item
==
nil
)
?
[[
VLCTreeItem
rootItem
]
numberOfChildren
]
:
[
item
numberOfChildren
];
-
(
int
)
outlineView
:(
NSOutlineView
*
)
outlineView
numberOfChildrenOfItem
:(
id
)
item
{
return
(
item
==
nil
)
?
[
_rootTreeItem
numberOfChildren
]
:
[
item
numberOfChildren
];
}
-
(
BOOL
)
outlineView
:(
NSOutlineView
*
)
outlineView
isItemExpandable
:(
id
)
item
{
return
(
item
==
nil
)
?
YES
:
(
([
item
numberOfChildren
]
!=
-
1
)
&&
([
item
numberOfChildren
]
!=
0
));
return
!
[
item
isKindOfClass
:[
VLCTreeSubCategoryItem
class
]];
}
-
(
id
)
outlineView
:(
NSOutlineView
*
)
outlineView
child
:(
int
)
index
ofItem
:(
id
)
item
{
return
(
item
==
nil
)
?
[[
VLCTreeItem
rootItem
]
childAtIndex
:
index
]
:
(
id
)[
item
childAtIndex
:
index
];
-
(
id
)
outlineView
:(
NSOutlineView
*
)
outlineView
child
:(
int
)
index
ofItem
:(
id
)
item
{
return
(
item
==
nil
)
?
(
id
)[
_rootTreeItem
childAtIndex
:
index
]:
(
id
)[
item
childAtIndex
:
index
];
}
-
(
id
)
outlineView
:(
NSOutlineView
*
)
outlineView
objectValueForTableColumn
:(
NSTableColumn
*
)
tableColumn
byItem
:(
id
)
item
{
return
(
item
==
nil
)
?
@""
:
(
id
)
[
item
name
];
return
(
item
==
nil
)
?
@""
:
[
item
name
];
}
@end
@implementation
VLCTreeItem
static
VLCTreeItem
*
o_root_item
=
nil
;
#define IsALeafNode ((id)-1)
#pragma mark -
@implementation
VLCTreeMainItem
-
(
id
)
initWithName
:
(
NSString
*
)
o_item_name
withTitle
:
(
NSString
*
)
o_item_title
withHelp
:
(
NSString
*
)
o_item_help
withObject
:
(
vlc_object_t
*
)
object
parent
:(
VLCTreeItem
*
)
o_parent_item
children
:(
NSMutableArray
*
)
o_children_array
whithCategory
:
(
int
)
i_category
-
(
VLCTreeCategoryItem
*
)
itemRepresentingCategory
:(
int
)
category
{
self
=
[
super
init
];
if
(
self
!=
nil
)
for
(
int
i
=
0
;
i
<
[[
self
children
]
count
];
i
++
)
{
o_name
=
[
o_item_name
copy
];
o_title
=
[
o_item_title
copy
];
o_help
=
[
o_item_help
copy
];
_vlc_object
=
object
?
vlc_object_hold
(
object
)
:
NULL
;
o_parent
=
o_parent_item
;
o_children
=
o_children_array
;
i_object_category
=
i_category
;
o_subviews
=
nil
;
VLCTreeCategoryItem
*
categoryItem
=
[[
self
children
]
objectAtIndex
:
i
];
if
(
[
categoryItem
category
]
==
category
)
return
categoryItem
;
}
return
(
self
);
}
+
(
VLCTreeItem
*
)
rootItem
{
if
(
o_root_item
==
nil
)
o_root_item
=
[[
VLCTreeItem
alloc
]
initWithName
:
@"main"
withTitle
:
@"main"
withHelp
:
@""
withObject
:
NULL
parent:
nil
children
:
[[
NSMutableArray
alloc
]
initWithCapacity
:
10
]
whithCategory:
-
1
];
return
o_root_item
;
return
nil
;
}
-
(
void
)
dealloc
{
if
(
_vlc_object
)
vlc_object_release
(
_vlc_object
);
if
(
o_children
!=
IsALeafNode
)
[
o_children
release
];
[
o_name
release
];
[
o_title
release
];
[
o_help
release
];
module_config_free
(
_configItems
);
[
super
dealloc
];
}
/* Creates and returns the array of children
* Loads children incrementally */
-
(
NSArray
*
)
children
-
(
NS
Mutable
Array
*
)
children
{
if
(
o_children
==
IsALeafNode
)
return
o_children
;
if
(
[
o_children
count
]
==
0
)
{
intf_thread_t
*
p_intf
=
VLCIntf
;
module_t
**
p_list
;
module_t
*
p_module
=
NULL
;
module_t
*
p_main_module
;
module_config_t
*
p_items
;
if
(
[[
self
name
]
isEqualToString
:
@"main"
]
)
{
p_main_module
=
module_get_main
(
p_intf
);
assert
(
p_main_module
);
/* We found the main module */
/* Enumerate config categories and store a reference so we can
* generate their config panel them when it is asked by the user. */
VLCTreeItem
*
p_last_category
=
NULL
;
unsigned
int
i_confsize
;
p_items
=
module_config_get
(
p_main_module
,
&
i_confsize
);
o_children
=
[[
NSMutableArray
alloc
]
initWithCapacity
:
10
];
for
(
int
i
=
0
;
i
<
i_confsize
;
i
++
)
{
NSString
*
o_child_name
;
NSString
*
o_child_title
;
NSString
*
o_child_help
;
switch
(
p_items
[
i
].
i_type
)
{
case
CONFIG_CATEGORY
:
if
(
p_items
[
i
].
value
.
i
==
-
1
)
break
;
o_child_name
=
[[
VLCMain
sharedInstance
]
localizedString:
config_CategoryNameGet
(
p_items
[
i
].
value
.
i
)];
o_child_title
=
o_child_name
;
o_child_help
=
[[
VLCMain
sharedInstance
]
localizedString:
config_CategoryHelpGet
(
p_items
[
i
].
value
.
i
)];
p_last_category
=
[
VLCTreeItem
alloc
];
[
o_children
addObject
:[
p_last_category
initWithName:
o_child_name
withTitle:
o_child_title
withHelp:
o_child_help
withObject:
(
vlc_object_t
*
)
p_main_module
parent:
self
children:
[[
NSMutableArray
alloc
]
initWithCapacity:
10
]
whithCategory:
p_items
[
i
].
value
.
i
]];
break
;
case
CONFIG_SUBCATEGORY
:
if
(
p_items
[
i
].
value
.
i
==
-
1
)
break
;
if
(
p_items
[
i
].
value
.
i
!=
SUBCAT_PLAYLIST_GENERAL
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_VIDEO_GENERAL
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_INPUT_GENERAL
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_INTERFACE_GENERAL
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_SOUT_GENERAL
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_ADVANCED_MISC
&&
p_items
[
i
].
value
.
i
!=
SUBCAT_AUDIO_GENERAL
)
{
o_child_name
=
[[
VLCMain
sharedInstance
]
localizedString:
config_CategoryNameGet
(
p_items
[
i
].
value
.
i
)
];
o_child_title
=
o_child_name
;
o_child_help
=
[[
VLCMain
sharedInstance
]
localizedString:
config_CategoryHelpGet
(
p_items
[
i
].
value
.
i
)
];
[
p_last_category
->
o_children
addObject:
[[
VLCTreeItem
alloc
]
initWithName:
o_child_name
withTitle:
o_child_title
withHelp:
o_child_help
withObject:
(
vlc_object_t
*
)
p_main_module
parent:
p_last_category
children:
[[
NSMutableArray
alloc
]
initWithCapacity:
10
]
whithCategory:
p_items
[
i
].
value
.
i
]];
}
break
;
default:
break
;
}
}
if
(
_children
)
return
_children
;
_children
=
[[
NSMutableArray
alloc
]
init
];
vlc_object_release
(
(
vlc_object_t
*
)
p_main_module
)
;
intf_thread_t
*
p_intf
=
VLCIntf
;
/* List the modules */
p_list
=
module_list_get
(
NULL
);
if
(
!
p_list
)
return
nil
;
/* List the modules */
size_t
count
,
i
;
module_t
**
modules
=
module_list_get
(
&
count
);
if
(
!
modules
)
return
nil
;
/* Build a tree of the plugins */
/* Add the capabilities */
for
(
size_t
i
=
0
;
p_list
[
i
];
i
++
)
{
unsigned
int
confsize
;
p_module
=
p_list
[
i
];
/* Exclude the main module */
if
(
module_is_main
(
p_module
)
)
continue
;
/* Exclude empty plugins (submodules don't have config */
/* options, they are stored in the parent module) */
p_items
=
module_config_get
(
p_module
,
&
confsize
);
/* Build a tree of the plugins */
/* Add the capabilities */
for
(
i
=
0
;
i
<
count
;
i
++
)
{
module_t
*
p_module
=
modules
[
i
];
unsigned
int
j
;
/* Exclude empty plugins (submodules don't have config */
/* options, they are stored in the parent module) */
unsigned
int
confsize
;
_configItems
=
module_config_get
(
p_module
,
&
confsize
);
int
i_category
=
-
1
;
int
i_subcategory
=
-
1
;
bool
b_item
=
false
;
VLCTreeCategoryItem
*
categoryItem
=
nil
;
VLCTreeSubCategoryItem
*
subCategoryItem
=
nil
;
for
(
j
=
0
;
j
<
confsize
;
j
++
)
unsigned
int
j
;
for
(
j
=
0
;
j
<
confsize
;
j
++
)
{
int
configType
=
_configItems
[
j
].
i_type
;
if
(
configType
==
CONFIG_CATEGORY
)
{
categoryItem
=
[
self
itemRepresentingCategory
:
_configItems
[
j
].
value
.
i
];
if
(
!
categoryItem
)
{
if
(
p_items
[
j
].
i_type
==
CONFIG_CATEGORY
)
i_category
=
p_items
[
j
].
value
.
i
;
else
if
(
p_items
[
j
].
i_type
==
CONFIG_SUBCATEGORY
)
i_subcategory
=
p_items
[
j
].
value
.
i
;
if
(
p_items
[
j
].
i_type
&
CONFIG_ITEM
)
b_item
=
true
;
if
(
b_item
&&
i_category
>=
0
&&
i_subcategory
>=
0
)
break
;
categoryItem
=
[
VLCTreeCategoryItem
categoryTreeItemWithCategory
:
_configItems
[
j
].
value
.
i
];
if
(
categoryItem
)
[[
self
children
]
addObject
:
categoryItem
];
}
if
(
!
b_item
)
continue
;
/* Find the right category item */
long
cookie
;
bool
b_found
=
false
;
VLCTreeItem
*
p_category_item
,
*
p_subcategory_item
;
for
(
j
=
0
;
j
<
[
o_children
count
]
;
j
++
)
}
else
if
(
configType
==
CONFIG_SUBCATEGORY
&&
categoryItem
)
{
subCategoryItem
=
[
categoryItem
itemRepresentingSubCategory
:
_configItems
[
j
].
value
.
i
];
if
(
!
subCategoryItem
)
{
p_category_item
=
[
o_children
objectAtIndex
:
j
];
if
(
p_category_item
->
i_object_category
==
i_category
)
{
b_found
=
true
;
break
;
}
subCategoryItem
=
[
VLCTreeSubCategoryItem
subCategoryTreeItemWithSubCategory
:
_configItems
[
j
].
value
.
i
];
if
(
subCategoryItem
)
[[
categoryItem
children
]
addObject
:
subCategoryItem
];
}
if
(
!
b_found
)
continue
;
}
else
if
(
(
configType
&
CONFIG_ITEM
)
&&
subCategoryItem
)
{
[[
subCategoryItem
children
]
addObject
:[[
VLCTreeLeafItem
alloc
]
initWithConfigItem
:
&
_configItems
[
j
]]];
}
/* Find subcategory item */
b_found
=
false
;
cookie
=
-
1
;
for
(
j
=
0
;
j
<
[
p_category_item
->
o_children
count
]
;
j
++
)
{
p_subcategory_item
=
[
p_category_item
->
o_children
objectAtIndex:
j
];
if
(
p_subcategory_item
->
i_object_category
==
i_subcategory
)
{
b_found
=
true
;
break
;
}
}
if
(
!
b_found
)
p_subcategory_item
=
p_category_item
;
[
p_subcategory_item
->
o_children
addObject
:[[
VLCTreeItem
alloc
]
initWithName:
[[
VLCMain
sharedInstance
]
localizedString:
module_get_name
(
p_module
,
false
)
]
withTitle:
[[
VLCMain
sharedInstance
]
localizedString:
module_GetLongName
(
p_module
)
]
withHelp:
@""
withObject:
(
vlc_object_t
*
)
p_main_module
parent:
p_subcategory_item
children:
IsALeafNode
whithCategory:
-
1
]];
}
module_list_free
(
p_list
);
}
}
return
o_children
;
module_list_free
(
modules
);
return
_children
;
}
@end
-
(
vlc_object_t
*
)
vlcObject
#pragma mark -
@implementation
VLCTreeCategoryItem
+
(
VLCTreeCategoryItem
*
)
categoryTreeItemWithCategory
:(
int
)
category
{
return
[[[[
self
class
]
alloc
]
initWithCategory
:
category
]
autorelease
];
}
-
(
id
)
initWithCategory
:(
int
)
category
{
return
vlc_object_hold
(
_vlc_object
);
if
(
!
config_CategoryNameGet
(
category
))
return
nil
;
NSString
*
name
=
[[
VLCMain
sharedInstance
]
localizedString
:
config_CategoryNameGet
(
category
)];
if
(
self
=
[
super
initWithName
:
name
andConfigItem
:
nil
])
{
_category
=
category
;
//_help = [[[VLCMain sharedInstance] localizedString: config_CategoryHelpGet( category )] retain];
}
return
self
;
}
-
(
NSString
*
)
name
-
(
VLCTreeSubCategoryItem
*
)
itemRepresentingSubCategory
:(
int
)
subCategory
{
return
[[
o_name
retain
]
autorelease
];
assert
(
[
self
isKindOfClass
:[
VLCTreeCategoryItem
class
]]
);
for
(
int
i
=
0
;
i
<
[[
self
children
]
count
];
i
++
)
{
VLCTreeSubCategoryItem
*
subCategoryItem
=
[[
self
children
]
objectAtIndex
:
i
];
if
(
[
subCategoryItem
subCategory
]
==
subCategory
)
return
subCategoryItem
;
}
return
nil
;
}
-
(
NSString
*
)
title
-
(
int
)
category
{
return
[[
o_title
retain
]
autorelease
]
;
return
_category
;
}
@end
-
(
NSString
*
)
help
#pragma mark -
@implementation
VLCTreeSubCategoryItem
-
(
id
)
initWithSubCategory
:(
int
)
subCategory
{
return
[[
o_help
retain
]
autorelease
];
if
(
!
config_CategoryNameGet
(
subCategory
))
return
nil
;
NSString
*
name
=
[[
VLCMain
sharedInstance
]
localizedString
:
config_CategoryNameGet
(
subCategory
)];
if
(
self
=
[
super
initWithName
:
name
andConfigItem
:
NULL
])
{
_subCategory
=
subCategory
;
//_help = [[[VLCMain sharedInstance] localizedString: config_CategoryHelpGet( subCategory )] retain];
}
return
self
;
}
-
(
VLCTreeItem
*
)
childAtIndex
:(
int
)
i_index
+
(
VLCTreeSubCategoryItem
*
)
subCategoryTreeItemWithSubCategory
:(
int
)
subCategory
{
return
[[
self
children
]
objectAtIndex
:
i_index
];
return
[[
[[
self
class
]
alloc
]
initWithSubCategory
:
subCategory
]
autorelease
];
}
-
(
int
)
numberOfChildren
{
id
i_tmp
=
[
self
children
];
return
(
i_tmp
==
IsALeafNode
)
?
(
-
1
)
:
(
int
)[
i_tmp
count
]
;
-
(
int
)
subCategory
{
return
_subCategory
;
}
-
(
BOOL
)
hasPrefs
:(
NSString
*
)
o_module_name
@end
#pragma mark -
@implementation
VLCTreeLeafItem
@end
#pragma mark -
#pragma mark (Root class for all TreeItems)
@implementation
VLCTreeItem
-
(
id
)
initWithConfigItem
:
(
module_config_t
*
)
configItem
{
unsigned
int
confsize
;
NSString
*
name
=
[[
VLCMain
sharedInstance
]
localizedString
:
configItem
->
psz_name
];
return
[
self
initWithName
:
name
andConfigItem
:
configItem
];
}
intf_thread_t
*
p_intf
=
VLCIntf
;
module_t
*
p_parser
;
-
(
id
)
initWithName
:(
NSString
*
)
name
andConfigItem
:(
module_config_t
*
)
configItem
{
self
=
[
super
init
];
if
(
self
!=
nil
)
{
_name
=
[
name
retain
];
_configItem
=
configItem
;
}
return
self
;
}
-
(
void
)
dealloc
{
[
_children
release
];
[
_name
release
];
[
_subviews
release
];
[
super
dealloc
];
}
const
char
*
psz_module_name
=
(
char
*
)[
o_module_name
UTF8String
];
-
(
VLCTreeItem
*
)
childAtIndex
:(
int
)
i_index
{
return
[[
self
children
]
objectAtIndex
:
i_index
];
}
/* look for module */
p_parser
=
module_find
(
p_intf
,
psz_module_name
);
if
(
!
p_parser
)
return
(
NO
);
-
(
int
)
numberOfChildren
{
return
[[
self
children
]
count
];
}
module_config_get
(
p_parser
,
&
confsize
);
BOOL
b_has_prefs
=
confsize
!=
0
;
module_release
(
p_parser
);
return
(
b_has_prefs
);
-
(
NSString
*
)
name
{
return
[[
_name
retain
]
autorelease
];
}
-
(
NSView
*
)
showView
:(
NSScrollView
*
)
o_prefs_v
iew
-
(
void
)
showView
:(
NSScrollView
*
)
prefsV
iew
{
NSRect
s_vrc
;
NSView
*
o_view
;
[[
VLCPrefs
sharedInstance
]
setTitle
:
[
self
title
]];
/* NSLog( [self getHelp] ); */
s_vrc
=
[[
o_prefs_view
contentView
]
bounds
];
s_vrc
.
size
.
height
-=
4
;
o_view
=
[[
VLCFlippedView
alloc
]
initWithFrame
:
s_vrc
];
[
o_view
setAutoresizingMask
:
NSViewWidthSizable
|
NSViewMinYMargin
|
NSViewMaxYMargin
];
/* Create all subviews if it isn't already done because we cannot use */
/* setHiden for MacOS < 10.3*/
if
(
o_subviews
==
nil
)
{
intf_thread_t
*
p_intf
=
VLCIntf
;
vlc_list_t
*
p_list
;
module_t
*
p_module
=
NULL
;
module_t
*
p_main_module
;
module_config_t
*
p_items
;
unsigned
int
confsize
;
NSView
*
view
;
o_subviews
=
[[
NSMutableArray
alloc
]
initWithCapacity
:
10
];
/* Get a pointer to the module */
if
(
i_object_category
==
-
1
)
{
p_module
=
(
module_t
*
)
[
self
vlcObject
];
assert
(
p_module
);
[[
VLCPrefs
sharedInstance
]
setTitle
:
[
self
name
]];
s_vrc
=
[[
prefsView
contentView
]
bounds
];
s_vrc
.
size
.
height
-=
4
;
view
=
[[
VLCFlippedView
alloc
]
initWithFrame
:
s_vrc
];
[
view
setAutoresizingMask
:
NSViewWidthSizable
|
NSViewMinYMargin
|
NSViewMaxYMargin
];
p_items
=
module_config_get
(
p_module
,
&
confsize
);
if
(
!
_subviews
)
{
_subviews
=
[[
NSMutableArray
alloc
]
initWithCapacity
:
10
];
for
(
unsigned
int
i
=
0
;
i
<
confsize
;
i
++
)
{
switch
(
p_items
[
i
].
i_type
)
{
case
CONFIG_SUBCATEGORY
:
case
CONFIG_CATEGORY
:
case
CONFIG_SECTION
:
case
CONFIG_HINT_USAGE
:
break
;
default:
{
VLCConfigControl
*
o_control
=
nil
;
o_control
=
[
VLCConfigControl
newControl
:
&
p_items
[
i
]
withView:
o_view
];
if
(
o_control
)
{
[
o_control
setAutoresizingMask
:
NSViewMaxYMargin
|
NSViewWidthSizable
];
[
o_subviews
addObject
:
o_control
];
}
}
break
;
}
}
vlc_object_release
(
(
vlc_object_t
*
)
p_module
);
}
else
long
i
;
for
(
i
=
0
;
i
<
[[
self
children
]
count
];
i
++
)
{
p_main_module
=
module_get_main
(
p_intf
);
assert
(
p_main_module
);
module_config_t
*
p_items
;
unsigned
int
i
,
confsize
;
p_items
=
module_config_get
(
p_main_module
,
&
confsize
);
/* We need to first, find the right (sub)category,
* and then abort when we find a new (sub)category. Part of the Ugliness. */
bool
in_right_category
=
false
;
bool
in_subcategory
=
false
;
bool
done
=
false
;
for
(
i
=
0
;
i
<
confsize
;
i
++
)
{
if
(
!
p_items
[
i
].
i_type
)
{
msg_Err
(
p_intf
,
"invalid preference item found"
);
break
;
}
VLCTreeItem
*
item
=
[[
self
children
]
objectAtIndex
:
i
];
if
(
!
[
item
isKindOfClass
:[
VLCTreeLeafItem
class
]])
continue
;
switch
(
p_items
[
i
].
i_type
)
{
case
CONFIG_CATEGORY
:
if
(
!
in_right_category
&&
p_items
[
i
].
value
.
i
==
i_object_category
)
in_right_category
=
true
;
else
if
(
in_right_category
)
done
=
true
;
break
;
case
CONFIG_SUBCATEGORY
:
if
(
!
in_right_category
&&
p_items
[
i
].
value
.
i
==
i_object_category
)
{
in_right_category
=
true
;
in_subcategory
=
true
;
}
else
if
(
in_right_category
&&
in_subcategory
)
done
=
true
;
break
;
case
CONFIG_SECTION
:
case
CONFIG_HINT_USAGE
:
break
;
default:
{
if
(
!
in_right_category
)
break
;
VLCConfigControl
*
o_control
=
nil
;
o_control
=
[
VLCConfigControl
newControl
:
&
p_items
[
i
]
withView:
o_view
];
if
(
o_control
!=
nil
)
{
[
o_control
setAutoresizingMask
:
NSViewMaxYMargin
|
NSViewWidthSizable
];
[
o_subviews
addObject
:
o_control
];
}
break
;
}
}
if
(
done
)
break
;
VLCConfigControl
*
control
;
control
=
[
VLCConfigControl
newControl
:[
item
configItem
]
withView
:
view
];
if
(
control
)
{
[
control
setAutoresizingMask
:
NSViewMaxYMargin
|
NSViewWidthSizable
];
[
_subviews
addObject
:
control
];
}
vlc_object_release
(
(
vlc_object_t
*
)
p_main_module
);
}
}
if
(
o_view
!=
nil
)
{
int
i_lastItem
=
0
;
int
i_yPos
=
-
2
;
int
i_max_label
=
0
;
NSEnumerator
*
enumerator
=
[
o_subviews
objectEnumerator
];
VLCConfigControl
*
o_widget
;
NSRect
o_frame
;
while
(
(
o_widget
=
[
enumerator
nextObject
]
)
)
if
(
i_max_label
<
[
o_widget
getLabelSize
]
)
i_max_label
=
[
o_widget
getLabelSize
];
enumerator
=
[
o_subviews
objectEnumerator
];
while
(
(
o_widget
=
[
enumerator
nextObject
]
)
)
{
int
i_widget
;
i_widget
=
[
o_widget
getViewType
];
i_yPos
+=
[
VLCConfigControl
calcVerticalMargin
:
i_widget
lastItem:
i_lastItem
];
[
o_widget
setYPos
:
i_yPos
];
o_frame
=
[
o_widget
frame
];
o_frame
.
size
.
width
=
[
o_view
frame
].
size
.
width
-
LEFTMARGIN
-
RIGHTMARGIN
;
[
o_widget
setFrame
:
o_frame
];
[
o_widget
alignWithXPosition
:
i_max_label
];
i_yPos
+=
[
o_widget
frame
].
size
.
height
;
i_lastItem
=
i_widget
;
[
o_view
addSubview
:
o_widget
];
}
o_frame
=
[
o_view
frame
];
o_frame
.
size
.
height
=
i_yPos
;
[
o_view
setFrame
:
o_frame
];
[
o_prefs_view
setDocumentView
:
o_view
];
assert
(
view
);
int
i_lastItem
=
0
;
int
i_yPos
=
-
2
;
int
i_max_label
=
0
;
NSEnumerator
*
enumerator
=
[
_subviews
objectEnumerator
];
VLCConfigControl
*
widget
;
NSRect
frame
;
while
(
(
widget
=
[
enumerator
nextObject
]
)
)
if
(
i_max_label
<
[
widget
getLabelSize
]
)
i_max_label
=
[
widget
getLabelSize
];
enumerator
=
[
_subviews
objectEnumerator
];
while
(
(
widget
=
[
enumerator
nextObject
]
)
)
{
int
i_widget
;
i_widget
=
[
widget
getViewType
];
i_yPos
+=
[
VLCConfigControl
calcVerticalMargin
:
i_widget
lastItem
:
i_lastItem
];
[
widget
setYPos
:
i_yPos
];
frame
=
[
widget
frame
];
frame
.
size
.
width
=
[
view
frame
].
size
.
width
-
LEFTMARGIN
-
RIGHTMARGIN
;
[
widget
setFrame
:
frame
];
[
widget
alignWithXPosition
:
i_max_label
];
i_yPos
+=
[
widget
frame
].
size
.
height
;
i_lastItem
=
i_widget
;
[
view
addSubview
:
widget
];
}
return
o_view
;
frame
=
[
view
frame
];
frame
.
size
.
height
=
i_yPos
;
[
view
setFrame
:
frame
];
[
prefsView
setDocumentView
:
view
];
}
-
(
void
)
applyChanges
{
unsigned
int
i
;
if
(
o_subviews
!=
nil
)
//Item has been shown
for
(
i
=
0
;
i
<
[
o_subviews
count
]
;
i
++
)
[[
o_subviews
objectAtIndex
:
i
]
applyChanges
];
for
(
i
=
0
;
i
<
[
_subviews
count
]
;
i
++
)
[[
_subviews
objectAtIndex
:
i
]
applyChanges
];
if
(
o_children
!=
IsALeafNode
)
for
(
i
=
0
;
i
<
[
o_children
count
]
;
i
++
)
[[
o_children
objectAtIndex
:
i
]
applyChanges
];
for
(
i
=
0
;
i
<
[
_children
count
]
;
i
++
)
[[
_children
objectAtIndex
:
i
]
applyChanges
];
}
-
(
void
)
resetView
{
[
_subviews
release
];
_subviews
=
nil
;
unsigned
int
i
;
if
(
o_subviews
!=
nil
)
{
//Item has been shown
[
o_subviews
release
];
o_subviews
=
nil
;
}
for
(
i
=
0
;
i
<
[
_children
count
]
;
i
++
)
[[
_children
objectAtIndex
:
i
]
resetView
];
}
if
(
o_children
!=
IsALeafNode
)
for
(
i
=
0
;
i
<
[
o_children
count
]
;
i
++
)
[[
o_children
objectAtIndex
:
i
]
resetView
];
-
(
NSMutableArray
*
)
children
{
if
(
!
_children
)
_children
=
[[
NSMutableArray
alloc
]
init
];
return
_children
;
}
-
(
module_config_t
*
)
configItem
{
return
_configItem
;
}
@end
#pragma mark -
@implementation
VLCFlippedView
-
(
BOOL
)
isFlipped
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment