]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/prefs_widgets.m
macosx: fix resume playback guards, do not resume for folder urls
[vlc] / modules / gui / macosx / prefs_widgets.m
index 232d9813fa3c22459072b86adf3aee78cbf684b4..0324a034aa2c4e0e2333b7fedce8cbee94c5fc66 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * prefs_widgets.m: Preferences controls
  *****************************************************************************
- * Copyright (C) 2002-2011 the VideoLAN team
+ * Copyright (C) 2002-2012 VLC authors and VideoLAN
  * $Id$
  *
  * Authors: Derk-Jan Hartman <hartman at videolan.org>
@@ -34,6 +34,7 @@
 
 #include <vlc_common.h>
 #include <vlc_modules.h>
+#include <vlc_plugin.h>
 #include <vlc_keys.h>
 
 #include "intf.h"
@@ -48,7 +49,7 @@
 #define UP_ARROWHEAD                        "\xE2\x8C\x83"
 #define PLACE_OF_INTEREST_SIGN              "\xE2\x8C\x98"
 
-#define POPULATE_A_KEY( o_menu, string, value )                             \
+#define POPULATE_A_KEY(o_menu, string, value)                               \
 {                                                                           \
     NSMenuItem *o_mi;                                                       \
 /*  Normal */                                                               \
         0];                                                                 \
     [o_mi setAlternate: NO];                                                \
     [o_mi setTag:                                                           \
-        ( value )];                                                         \
+        (value)];                                                           \
     [o_menu addItem: o_mi];                                                 \
 /*  Ctrl */                                                                 \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD                                                    \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD]                       \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask];                                                  \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        KEY_MODIFIER_CTRL | ( value )];                                     \
+        KEY_MODIFIER_CTRL | (value)];                                       \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Alt */                                                              \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD OPTION_KEY                                         \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD OPTION_KEY]            \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSAlternateKeyMask];                             \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT) | ( value )];                \
+        (KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT) | (value)];                  \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Shift */                                                            \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD UPWARDS_WHITE_ARROW                                \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD UPWARDS_WHITE_ARROW]   \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
        NSControlKeyMask | NSShiftKeyMask];                                  \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_CTRL | KEY_MODIFIER_SHIFT) | ( value )];              \
+        (KEY_MODIFIER_CTRL | KEY_MODIFIER_SHIFT) | (value)];                \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Apple */                                                            \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD PLACE_OF_INTEREST_SIGN                             \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD PLACE_OF_INTEREST_SIGN]\
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSCommandKeyMask];                               \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_CTRL | KEY_MODIFIER_COMMAND) | ( value )];            \
+        (KEY_MODIFIER_CTRL | KEY_MODIFIER_COMMAND) | (value)];              \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Alt+Shift */                                                        \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD OPTION_KEY UPWARDS_WHITE_ARROW                     \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD OPTION_KEY UPWARDS_WHITE_ARROW] \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSAlternateKeyMask | NSShiftKeyMask];            \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
         (KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT | KEY_MODIFIER_SHIFT) |       \
-             ( value )];                                                    \
+             (value)];                                                      \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Alt+Apple */                                                        \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD OPTION_KEY PLACE_OF_INTEREST_SIGN                  \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD OPTION_KEY PLACE_OF_INTEREST_SIGN] \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask];          \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
         (KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT | KEY_MODIFIER_COMMAND) |     \
-            ( value )];                                                     \
+            (value)];                                                       \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Shift+Apple */                                                      \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN         \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN] \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSShiftKeyMask | NSCommandKeyMask];              \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
         (KEY_MODIFIER_CTRL | KEY_MODIFIER_SHIFT | KEY_MODIFIER_COMMAND) |   \
-            ( value )];                                                     \
+            (value)];                                                       \
     [o_menu addItem: o_mi];                                                 \
 /* Ctrl+Alt+Shift+Apple */                                                  \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UP_ARROWHEAD OPTION_KEY UPWARDS_WHITE_ARROW                     \
-                PLACE_OF_INTEREST_SIGN                                      \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UP_ARROWHEAD OPTION_KEY UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN] \
+         stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSControlKeyMask | NSAlternateKeyMask | NSShiftKeyMask |            \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
         (KEY_MODIFIER_CTRL | KEY_MODIFIER_ALT | KEY_MODIFIER_SHIFT |        \
-            KEY_MODIFIER_COMMAND) | ( value )];                             \
+            KEY_MODIFIER_COMMAND) | (value)];                               \
     [o_menu addItem: o_mi];                                                 \
 /* Alt */                                                                   \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            OPTION_KEY                                                      \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:OPTION_KEY] stringByAppendingString: string] \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSAlternateKeyMask];                                                \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        KEY_MODIFIER_ALT | ( value )];                                      \
+        KEY_MODIFIER_ALT | (value)];                                        \
     [o_menu addItem: o_mi];                                                 \
 /* Alt+Shift */                                                             \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            OPTION_KEY UPWARDS_WHITE_ARROW                                  \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:OPTION_KEY UPWARDS_WHITE_ARROW] stringByAppendingString: string] \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSAlternateKeyMask | NSShiftKeyMask];                               \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_ALT | KEY_MODIFIER_SHIFT) | ( value )];               \
+        (KEY_MODIFIER_ALT | KEY_MODIFIER_SHIFT) | (value)];                 \
     [o_menu addItem: o_mi];                                                 \
 /* Alt+Apple */                                                             \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            OPTION_KEY PLACE_OF_INTEREST_SIGN                               \
-        ] stringByAppendingString: string]                                  \
-        action:nil keyEquivalent:@""];                                      \
+        [[NSString stringWithUTF8String:OPTION_KEY PLACE_OF_INTEREST_SIGN]  \
+         stringByAppendingString: string] action:nil keyEquivalent:@""];    \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSAlternateKeyMask | NSCommandKeyMask];                             \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_ALT | KEY_MODIFIER_COMMAND) | ( value )];             \
+        (KEY_MODIFIER_ALT | KEY_MODIFIER_COMMAND) | (value)];               \
     [o_menu addItem: o_mi];                                                 \
 /* Alt+Shift+Apple */                                                       \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            OPTION_KEY UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN           \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:OPTION_KEY UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN] \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSAlternateKeyMask | NSShiftKeyMask | NSCommandKeyMask];            \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
         (KEY_MODIFIER_ALT | KEY_MODIFIER_SHIFT | KEY_MODIFIER_COMMAND) |    \
-            ( value )];                                                     \
+            (value)];                                                       \
     [o_menu addItem: o_mi];                                                 \
 /* Shift */                                                                 \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UPWARDS_WHITE_ARROW                                             \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UPWARDS_WHITE_ARROW]                \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSShiftKeyMask];                                                    \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        KEY_MODIFIER_SHIFT | ( value )];                                    \
+        KEY_MODIFIER_SHIFT | (value)];                                      \
     [o_menu addItem: o_mi];                                                 \
 /* Shift+Apple */                                                           \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-            UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN                      \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:UPWARDS_WHITE_ARROW PLACE_OF_INTEREST_SIGN] \
+         stringByAppendingString: string]                                   \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSShiftKeyMask | NSCommandKeyMask];                                 \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        (KEY_MODIFIER_SHIFT | KEY_MODIFIER_COMMAND) | ( value )];           \
+        (KEY_MODIFIER_SHIFT | KEY_MODIFIER_COMMAND) | (value)];             \
     [o_menu addItem: o_mi];                                                 \
 /* Apple */                                                                 \
     o_mi = [[NSMenuItem alloc] initWithTitle:                               \
-        [[NSString stringWithUTF8String:                                    \
-        PLACE_OF_INTEREST_SIGN                                              \
-        ] stringByAppendingString: string]                                  \
+        [[NSString stringWithUTF8String:PLACE_OF_INTEREST_SIGN]             \
+          stringByAppendingString: string]                                  \
         action:nil keyEquivalent:@""];                                      \
     [o_mi setKeyEquivalentModifierMask:                                     \
         NSCommandKeyMask];                                                  \
     [o_mi setAlternate: YES];                                               \
     [o_mi setTag:                                                           \
-        KEY_MODIFIER_COMMAND | ( value )];                                  \
+        KEY_MODIFIER_COMMAND | (value)];                                    \
     [o_menu addItem: o_mi];                                                 \
 }
 
-#define ADD_LABEL( o_label, superFrame, x_offset, my_y_offset, label,       \
-    tooltip )                                                               \
+#define ADD_LABEL(o_label, superFrame, x_offset, my_y_offset, label,        \
+    tooltip                                                               \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.size.height = 17;                                                  \
     [o_label sizeToFit];                                                    \
 }
 
-#define ADD_TEXTFIELD( o_textfield, superFrame, x_offset, my_y_offset,      \
-    my_width, tooltip, init_value )                                         \
+#define ADD_TEXTFIELD(o_textfield, superFrame, x_offset, my_y_offset,       \
+    my_width, tooltip, init_value                                         \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.origin.x = x_offset;                                               \
     [o_textfield setStringValue: init_value];                               \
 }
 
-#define ADD_SECURETEXTFIELD( o_textfield, superFrame, x_offset, my_y_offset,      \
-my_width, tooltip, init_value )                                         \
+#define ADD_SECURETEXTFIELD(o_textfield, superFrame, x_offset, my_y_offset, \
+my_width, tooltip, init_value)                                              \
 {                                                                           \
-NSRect s_rc = superFrame;                                               \
-s_rc.origin.x = x_offset;                                               \
-s_rc.origin.y = my_y_offset;                                            \
-s_rc.size.height = 22;                                                  \
-s_rc.size.width = my_width;                                             \
-o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
-[o_textfield setFont:[NSFont systemFontOfSize:0]];                      \
-[o_textfield setToolTip: tooltip];                                      \
-[o_textfield setStringValue: init_value];                               \
-}
-
-#define ADD_COMBO( o_combo, superFrame, x_offset, my_y_offset, x2_offset,   \
-    tooltip )                                                               \
+NSRect s_rc = superFrame;                                                   \
+s_rc.origin.x = x_offset;                                                   \
+s_rc.origin.y = my_y_offset;                                                \
+s_rc.size.height = 22;                                                      \
+s_rc.size.width = my_width;                                                 \
+o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];     \
+[o_textfield setFont:[NSFont systemFontOfSize:0]];                          \
+[o_textfield setToolTip: tooltip];                                          \
+[o_textfield setStringValue: init_value];                                   \
+}
+
+#define ADD_COMBO(o_combo, superFrame, x_offset, my_y_offset, x2_offset,    \
+    tooltip                                                               \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.origin.x = x_offset + 2;                                           \
@@ -313,8 +295,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     [o_combo setCompletes:YES];                                             \
 }
 
-#define ADD_RIGHT_BUTTON( o_button, superFrame, x_offset, my_y_offset,      \
-    tooltip, title )                                                        \
+#define ADD_RIGHT_BUTTON(o_button, superFrame, x_offset, my_y_offset,       \
+    tooltip, title                                                        \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     o_button = [[[NSButton alloc] initWithFrame: s_rc] retain];             \
@@ -333,8 +315,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     [o_button setAction: @selector(openFileDialog:)];                       \
 }
 
-#define ADD_POPUP( o_popup, superFrame, x_offset, my_y_offset, x2_offset,   \
-    tooltip )                                                               \
+#define ADD_POPUP(o_popup, superFrame, x_offset, my_y_offset, x2_offset,    \
+    tooltip                                                               \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.origin.x = x_offset - 1;                                           \
@@ -347,8 +329,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     [o_popup setToolTip: tooltip];                                          \
 }
 
-#define ADD_STEPPER( o_stepper, superFrame, x_offset, my_y_offset, tooltip, \
-    lower, higher )                                                         \
+#define ADD_STEPPER(o_stepper, superFrame, x_offset, my_y_offset, tooltip,  \
+    lower, higher                                                         \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.origin.x = x_offset;                                               \
@@ -366,8 +348,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         NSLeftMouseDraggedMask];                                            \
 }
 
-#define ADD_SLIDER( o_slider, superFrame, x_offset, my_y_offset, my_width,  \
-    tooltip, lower, higher )                                                \
+#define ADD_SLIDER(o_slider, superFrame, x_offset, my_y_offset, my_width,   \
+    tooltip, lower, higher                                                \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.origin.x = x_offset;                                               \
@@ -381,8 +363,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     [o_slider setMinValue: lower];                                          \
 }
 
-#define ADD_CHECKBOX( o_checkbox, superFrame, x_offset, my_y_offset, label, \
-    tooltip, init_value, position )                                         \
+#define ADD_CHECKBOX(o_checkbox, superFrame, x_offset, my_y_offset, label,  \
+    tooltip, init_value, position                                         \
 {                                                                           \
     NSRect s_rc = superFrame;                                               \
     s_rc.size.height = 18;                                                  \
@@ -399,6 +381,8 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 }
 
 @implementation VLCConfigControl
+@synthesize type = i_type, viewType = i_view_type, advanced = b_advanced;
+
 - (id)initWithFrame: (NSRect)frame
 {
     return [self initWithFrame: frame
@@ -410,8 +394,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 {
     self = [super initWithFrame: frame];
 
-    if( self != nil )
-    {
+    if (self != nil) {
         p_item = _p_item;
         psz_name = p_item->psz_name;
         o_label = NULL;
@@ -432,20 +415,18 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)dealloc
 {
-    if( o_label ) [o_label release];
-    free( psz_name );
+    if (o_label) [o_label release];
+    free(psz_name);
     [super dealloc];
 }
 
 + (int)calcVerticalMargin: (int)i_curItem lastItem: (int)i_lastItem
 {
     int i_margin;
-    switch( i_curItem )
-    {
+    switch(i_curItem) {
     case CONFIG_ITEM_STRING:
     case CONFIG_ITEM_PASSWORD:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -481,8 +462,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_STRING_LIST:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -519,8 +499,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         break;
     case CONFIG_ITEM_LOADFILE:
     case CONFIG_ITEM_SAVEFILE:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 13;
@@ -556,8 +535,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_MODULE:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -593,8 +571,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_INTEGER:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -630,8 +607,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_RANGED_INTEGER:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -667,8 +643,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_BOOL:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 10;
@@ -704,8 +679,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_KEY:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 8;
@@ -741,8 +715,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         }
         break;
     case CONFIG_ITEM_MODULE_LIST:
-        switch( i_lastItem )
-        {
+        switch(i_lastItem) {
         case CONFIG_ITEM_STRING:
         case CONFIG_ITEM_PASSWORD:
             i_margin = 10;
@@ -789,18 +762,14 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 {
     VLCConfigControl *p_control = NULL;
 
-    switch( _p_item->i_type )
-    {
+    switch(_p_item->i_type) {
     case CONFIG_ITEM_STRING:
     case CONFIG_ITEM_PASSWORD:
-        if( !_p_item->i_list )
-        {
+        if (!_p_item->list_count) {
             p_control = [[StringConfigControl alloc]
                     initWithItem: _p_item
                     withView: o_parent_view];
-        }
-        else
-        {
+        } else {
             p_control = [[StringListConfigControl alloc]
                     initWithItem: _p_item
                     withView: o_parent_view];
@@ -814,30 +783,22 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
                     withView: o_parent_view];
         break;
     case CONFIG_ITEM_MODULE:
+            p_control = [[StringListConfigControl alloc]
+                         initWithItem: _p_item
+                         withView: o_parent_view];
+            break;
     case CONFIG_ITEM_MODULE_CAT:
         p_control = [[ModuleConfigControl alloc]
                     initWithItem: _p_item
                     withView: o_parent_view];
         break;
     case CONFIG_ITEM_INTEGER:
-        if( _p_item->i_list )
-        {
-            p_control = [[IntegerListConfigControl alloc]
-                        initWithItem: _p_item
-                        withView: o_parent_view];
-        }
-        else if( (_p_item->min.i != 0 || _p_item->max.i != 0) && (_p_item->min.i != INT_MIN || _p_item->max.i != INT_MAX) )
-        {
-            p_control = [[RangedIntegerConfigControl alloc]
-                        initWithItem: _p_item
-                        withView: o_parent_view];
-        }
+        if (_p_item->list_count)
+            p_control = [[IntegerListConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
+        else if ((_p_item->min.i != 0 || _p_item->max.i != 0) && (_p_item->min.i != INT_MIN || _p_item->max.i != INT_MAX))
+            p_control = [[RangedIntegerConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
         else
-        {
-            p_control = [[IntegerConfigControl alloc]
-                        initWithItem: _p_item
-                        withView: o_parent_view];
-        }
+            p_control = [[IntegerConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
         break;
     case CONFIG_ITEM_BOOL:
         p_control = [[BoolConfigControl alloc]
@@ -845,20 +806,12 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
                     withView: o_parent_view];
         break;
     case CONFIG_ITEM_FLOAT:
-        if( (_p_item->min.i != 0 || _p_item->max.i != 0) && (_p_item->min.i != INT_MIN || _p_item->max.i != INT_MAX) )
-        {
-            p_control = [[RangedFloatConfigControl alloc]
-                        initWithItem: _p_item
-                        withView: o_parent_view];
-        }
+        if ((_p_item->min.i != 0 || _p_item->max.i != 0) && (_p_item->min.i != INT_MIN || _p_item->max.i != INT_MAX))
+            p_control = [[RangedFloatConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
         else
-        {
-            p_control = [[FloatConfigControl alloc]
-                        initWithItem: _p_item
-                        withView: o_parent_view];
-        }
+            p_control = [[FloatConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
         break;
-    /* don't display keys in the advanced settings, since the current controls 
+    /* don't display keys in the advanced settings, since the current controls
     are broken by design. The user is required to change hotkeys in the sprefs
     and can only change really advanced stuff here..
     case CONFIG_ITEM_KEY:
@@ -868,9 +821,10 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         break; */
     case CONFIG_ITEM_MODULE_LIST:
     case CONFIG_ITEM_MODULE_LIST_CAT:
-        p_control = [[ModuleListConfigControl alloc]
-                    initWithItem: _p_item
-                    withView: o_parent_view];
+        p_control = [[ModuleListConfigControl alloc] initWithItem: _p_item withView: o_parent_view];
+        break;
+    case CONFIG_SECTION:
+        p_control = [[SectionControl alloc] initWithItem: _p_item withView: o_parent_view];
         break;
     default:
         break;
@@ -880,22 +834,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (NSString *)name
 {
-    return [[VLCMain sharedInstance] localizedString: psz_name];
-}
-
-- (int)type
-{
-    return i_type;
-}
-
-- (int)viewType
-{
-    return i_view_type;
-}
-
-- (BOOL)isAdvanced
-{
-    return b_advanced;
+    return _NS(psz_name);
 }
 
 - (int)intValue
@@ -916,8 +855,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 - (void)applyChanges
 {
     vlc_value_t val;
-    switch( p_item->i_type )
-    {
+    switch(p_item->i_type) {
     case CONFIG_ITEM_STRING:
     case CONFIG_ITEM_PASSWORD:
     case CONFIG_ITEM_LOADFILE:
@@ -925,19 +863,22 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     case CONFIG_ITEM_DIRECTORY:
     case CONFIG_ITEM_MODULE:
     case CONFIG_ITEM_MODULE_LIST:
-    case CONFIG_ITEM_MODULE_LIST_CAT:
-        config_PutPsz( VLCIntf, psz_name, [self stringValue] );
+    case CONFIG_ITEM_MODULE_LIST_CAT: {
+        char *psz_val = [self stringValue];
+        config_PutPsz(VLCIntf, psz_name, psz_val);
+        free(psz_val);
         break;
+    }
     case CONFIG_ITEM_KEY:
         /* So you don't need to restart to have the changes take effect */
         val.i_int = [self intValue];
-        var_Set( VLCIntf->p_libvlc, psz_name, val );
+        var_Set(VLCIntf->p_libvlc, psz_name, val);
     case CONFIG_ITEM_INTEGER:
     case CONFIG_ITEM_BOOL:
-        config_PutInt( VLCIntf, psz_name, [self intValue] );
+        config_PutInt(VLCIntf, psz_name, [self intValue]);
         break;
     case CONFIG_ITEM_FLOAT:
-        config_PutFloat( VLCIntf, psz_name, [self floatValue] );
+        config_PutFloat(VLCIntf, psz_name, [self floatValue]);
         break;
     }
 }
@@ -969,44 +910,36 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
-        if( p_item->i_type == CONFIG_ITEM_PASSWORD )
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
+        if (p_item->i_type == CONFIG_ITEM_PASSWORD)
             i_view_type = CONFIG_ITEM_PASSWORD;
         else
             i_view_type = CONFIG_ITEM_STRING;
 
-        o_textfieldTooltip = [[VLCMain sharedInstance] wrapString:
-                              [[VLCMain sharedInstance] localizedString: (char *)p_item->psz_longtext]
-                                                          toWidth: PREFS_WRAP];
+        o_textfieldTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the textfield */
-        if( p_item->value.psz )
-            o_textfieldString = [[VLCMain sharedInstance]
-                                    localizedString: (char *)p_item->value.psz];
+        if (p_item->value.psz)
+            o_textfieldString = [NSString stringWithCString:p_item->value.psz encoding:NSUTF8StringEncoding];
         else
-            o_textfieldString = [NSString stringWithString: @""];
-        if( p_item->i_type == CONFIG_ITEM_PASSWORD )
-        {
-            ADD_SECURETEXTFIELD( o_textfield, mainFrame, [o_label frame].size.width + 2,
+            o_textfieldString = @"";
+        if (p_item->i_type == CONFIG_ITEM_PASSWORD) {
+            ADD_SECURETEXTFIELD(o_textfield, mainFrame, [o_label frame].size.width + 2,
                           0, mainFrame.size.width - [o_label frame].size.width -
-                          2, o_textfieldTooltip, o_textfieldString )
-        }
-        else
-        {
-            ADD_TEXTFIELD( o_textfield, mainFrame, [o_label frame].size.width + 2,
+                          2, o_textfieldTooltip, o_textfieldString)
+        } else {
+            ADD_TEXTFIELD(o_textfield, mainFrame, [o_label frame].size.width + 2,
                             0, mainFrame.size.width - [o_label frame].size.width -
-                            2, o_textfieldTooltip, o_textfieldString )
+                            2, o_textfieldTooltip, o_textfieldString)
         }
         [o_textfield setAutoresizingMask:NSViewWidthSizable ];
 
@@ -1037,20 +970,18 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (char *)stringValue
 {
-    return [[VLCMain sharedInstance] delocalizeString:
-                        [o_textfield stringValue]];
+    return strdup([[o_textfield stringValue] UTF8String]);
 }
 
 - (void)resetValues
 {
     NSString *o_textfieldString;
-    char *psz_value = config_GetPsz( VLCIntf, p_item->psz_name );
-    if( psz_value )
-        o_textfieldString = [[VLCMain sharedInstance]
-                                localizedString: psz_value];
+    char *psz_value = config_GetPsz(VLCIntf, p_item->psz_name);
+    if (psz_value)
+        o_textfieldString = _NS(psz_value);
     else
-        o_textfieldString = [NSString stringWithString: @""];
-    free( psz_value );
+        o_textfieldString = @"";
+    free(psz_value);
     [super resetValues];
 }
 @end
@@ -1066,38 +997,32 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
-        int i_index;
-        i_view_type = CONFIG_ITEM_STRING_LIST;
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
+        if (p_item->i_type == CONFIG_ITEM_STRING)
+            i_view_type = CONFIG_ITEM_STRING_LIST;
+        else
+            i_view_type = CONFIG_ITEM_MODULE;
 
-        o_textfieldTooltip = [[VLCMain sharedInstance] wrapString:
-                              [[VLCMain sharedInstance]
-                               localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_textfieldTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS(p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the textfield */
-        ADD_COMBO( o_combo, mainFrame, [o_label frame].size.width,
-            -2, 0, o_textfieldTooltip )
-        [o_combo setAutoresizingMask:NSViewWidthSizable ];
-        for( i_index = 0; i_index < p_item->i_list; i_index++ )
-        {
-            if( !p_item->value.psz && !p_item->ppsz_list[i_index] )
-                [o_combo selectItemAtIndex: i_index];
-            else if( p_item->value.psz && p_item->ppsz_list[i_index] &&
-                !strcmp( p_item->value.psz, p_item->ppsz_list[i_index] ) )
-                [o_combo selectItemAtIndex: i_index];
-       }
-        [self addSubview: o_combo];
+        ADD_POPUP(o_popup, mainFrame, [o_label frame].size.width,
+            -2, 0, o_textfieldTooltip)
+        [o_popup setAutoresizingMask:NSViewWidthSizable];
+
+        /* add items */
+        [self resetValues];
+
+        [self addSubview: o_popup];
     }
     return self;
 }
@@ -1110,64 +1035,56 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     frame.origin.x = i_xPos - frame.size.width - 3;
     [o_label setFrame:frame];
 
-    frame = [o_combo frame];
+    frame = [o_popup frame];
     frame.origin.x = i_xPos + 2;
     frame.size.width = superFrame.size.width - frame.origin.x + 2;
-    [o_combo setFrame:frame];
+    [o_popup setFrame:frame];
 }
 
 - (void)dealloc
 {
-    [o_combo release];
+    [o_popup release];
     [super dealloc];
 }
 
 - (char *)stringValue
 {
-    if( [o_combo indexOfSelectedItem] >= 0 ) {
-        if( p_item->ppsz_list[[o_combo indexOfSelectedItem]] != NULL )
-            return strdup( p_item->ppsz_list[[o_combo indexOfSelectedItem]] );
-    } else {
-        if( [[VLCMain sharedInstance] delocalizeString: [o_combo stringValue]] != NULL )
-            return strdup( [[VLCMain sharedInstance] delocalizeString: [o_combo stringValue]] );
-    }
-    return NULL;
+    if ([o_popup indexOfSelectedItem] < 0)
+        return NULL;
+
+    NSString *o_data = [[o_popup selectedItem] representedObject];
+    return strdup([o_data UTF8String]);
 }
 
 - (void)resetValues
 {
-    int i_index;
-    [o_combo reloadData];
-    char *psz_value = config_GetPsz( VLCIntf, p_item->psz_name );
-
-    for( i_index = 0; i_index < p_item->i_list; i_index++ )
-    {
-        if( !psz_value && !p_item->ppsz_list[i_index] )
-            [o_combo selectItemAtIndex: i_index];
-        else if( psz_value && p_item->ppsz_list[i_index] &&
-            !strcmp( psz_value, p_item->ppsz_list[i_index] ) )
-            [o_combo selectItemAtIndex: i_index];
-    }
+    [o_popup removeAllItems];
 
-    free( psz_value );
-    [super resetValues];
-}
-@end
+    char *psz_value = config_GetPsz(VLCIntf, p_item->psz_name);
 
-@implementation StringListConfigControl (NSComboBoxDataSource)
-- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox
-{
-        return p_item->i_list;
-}
+    char **values, **texts;
+    ssize_t count = config_GetPszChoices(VLC_OBJECT(VLCIntf), p_item->psz_name,
+                                         &values, &texts);
+    for (ssize_t i = 0; i < count && texts; i++) {
+        if (texts[i] == NULL || values[i] == NULL)
+            continue;
 
-- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)i_index
-{
-    if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
-    {
-        return [[VLCMain sharedInstance]
-                    localizedString: (char *)p_item->ppsz_list_text[i_index]];
-    } else return [[VLCMain sharedInstance]
-                    localizedString: (char *)p_item->ppsz_list[i_index]];
+        [o_popup addItemWithTitle: toNSStr(texts[i])];
+        NSMenuItem *lastItem = [o_popup lastItem];
+        [lastItem setRepresentedObject: toNSStr(values[i])];
+
+        if (!strcmp(psz_value ? psz_value : "", values[i]))
+            [o_popup selectItem: [o_popup lastItem]];
+
+        free(texts[i]);
+        free(values[i]);
+    }
+    free(texts);
+    free(values);
+
+    free(psz_value);
+
+    [super resetValues];
 }
 @end
 
@@ -1182,41 +1099,37 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_LOADFILE;
 
-        o_itemTooltip = [[VLCMain sharedInstance]
-                           wrapString: [[VLCMain sharedInstance]
-                                        localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_itemTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* is it a directory */
-        b_directory = ( [self type] == CONFIG_ITEM_DIRECTORY ) ? YES : NO;
+        b_directory = ([self type] == CONFIG_ITEM_DIRECTORY) ? YES : NO;
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, 3, o_labelString, o_itemTooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, 3, o_labelString, o_itemTooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the button */
-        ADD_RIGHT_BUTTON( o_button, mainFrame, 0, 0, o_itemTooltip,
-                            _NS("Browse...") )
+        ADD_RIGHT_BUTTON(o_button, mainFrame, 0, 0, o_itemTooltip,
+                            _NS("Browse..."))
         [o_button setAutoresizingMask:NSViewMinXMargin ];
         [self addSubview: o_button];
 
         /* build the textfield */
-        if( p_item->value.psz )
+        if (p_item->value.psz)
             o_textfieldString = [NSString stringWithFormat: @"%s", (char *)p_item->value.psz];
         else
-            o_textfieldString = [NSString stringWithString: @""];
-        ADD_TEXTFIELD( o_textfield, mainFrame, 12, 2, mainFrame.size.width -
+            o_textfieldString = @"";
+        ADD_TEXTFIELD(o_textfield, mainFrame, 12, 2, mainFrame.size.width -
                         8 - [o_button frame].size.width,
-                        o_itemTooltip, o_textfieldString )
+                        o_itemTooltip, o_textfieldString)
         [o_textfield setAutoresizingMask:NSViewWidthSizable ];
         [self addSubview: o_textfield];
     }
@@ -1245,31 +1158,18 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     [o_open_panel setAllowsMultipleSelection: NO];
     [o_open_panel setCanChooseFiles: !b_directory];
     [o_open_panel setCanChooseDirectories: b_directory];
-    [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 URLs] objectAtIndex: 0] path];
-        [o_textfield setStringValue: o_path];
-    }
+    [o_open_panel beginSheetModalForWindow:[sender window] completionHandler:^(NSInteger returnCode) {
+        if (returnCode == NSOKButton) {
+            NSString *o_path = [[[o_open_panel URLs] objectAtIndex:0] path];
+            [o_textfield setStringValue: o_path];
+        }        
+    }];
 }
 
 - (char *)stringValue
 {
-    if[[o_textfield stringValue] length] != 0)
-        return strdup( [[o_textfield stringValue] fileSystemRepresentation] );
+    if ([[o_textfield stringValue] length] != 0)
+        return strdup([[o_textfield stringValue] fileSystemRepresentation]);
     else
         return NULL;
 }
@@ -1277,11 +1177,11 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 -(void)resetValues
 {
     NSString *o_textfieldString;
-    char *psz_value = config_GetPsz( VLCIntf, p_item->psz_name );
-    if( psz_value )
+    char *psz_value = config_GetPsz(VLCIntf, p_item->psz_name);
+    if (psz_value)
         o_textfieldString = [NSString stringWithFormat: @"%s", psz_value];
     else
-        o_textfieldString = [NSString stringWithString: @""];
+        o_textfieldString = @"";
 
     free(psz_value);
     [super resetValues];
@@ -1299,27 +1199,24 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_MODULE;
 
-        o_popupTooltip = [[VLCMain sharedInstance] wrapString:
-                          [[VLCMain sharedInstance]
-                           localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_popupTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -1, o_labelString, o_popupTooltip )
+            o_labelString = @"";
+
+        ADD_LABEL(o_label, mainFrame, 0, -1, o_labelString, o_popupTooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the popup */
-        ADD_POPUP( o_popup, mainFrame, [o_label frame].size.width,
-            -2, 0, o_popupTooltip )
+        ADD_POPUP(o_popup, mainFrame, [o_label frame].size.width,
+            -2, 0, o_popupTooltip)
         [o_popup setAutoresizingMask:NSViewWidthSizable ];
         [o_popup addItemWithTitle: _NS("Default")];
         [[o_popup lastItem] setTag: -1];
@@ -1358,114 +1255,69 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     size_t i_module_index;
     module_t *p_parser, **p_list;
 
-    p_list = module_list_get( NULL );
-    for( i_module_index = 0; p_list[i_module_index]; i_module_index++ )
-    {
+    size_t count;
+    p_list = module_list_get(&count);
+    for (i_module_index = 0; i_module_index < count; i_module_index++) {
         p_parser = p_list[i_module_index];
 
-        if( p_item->i_type == CONFIG_ITEM_MODULE )
-        {
-            if( module_provides( p_parser, p_item->psz_type ) )
-            {
-                NSString *o_description = [[VLCMain sharedInstance]
-                    localizedString: module_get_name( p_parser, TRUE )];
-                if( [newval isEqualToString: o_description] )
-                {
-                    returnval = strdup( module_get_object( p_parser ));
+        if (module_is_main(p_parser))
+            continue;
+
+        unsigned int confsize;
+        module_config_t *p_config = module_config_get(p_parser, &confsize);
+        for (size_t i = 0; i < confsize; i++) {
+            module_config_t *p_cfg = p_config + i;
+            /* Hack: required subcategory is stored in i_min */
+            if (p_cfg->i_type == CONFIG_SUBCATEGORY &&
+                p_cfg->value.i == p_cfg->min.i) {
+                NSString *o_description = _NS(module_get_name(p_parser, TRUE));
+                if ([newval isEqualToString: o_description]) {
+                    returnval = strdup(module_get_object(p_parser));
                     break;
                 }
             }
+            module_config_free(p_config);
         }
-        else
-        {
-            int i;
-
-            if( module_is_main( p_parser) )
-                continue;
-            unsigned int confsize, unused;
-            module_config_t *p_config = module_config_get( p_parser, &confsize );
-            for ( i = 0; i < confsize; i++ )
-            {
-                module_config_t *p_item = p_config + i;
-                /* Hack: required subcategory is stored in i_min */
-                if( p_item->i_type == CONFIG_SUBCATEGORY &&
-                    p_item->value.i == p_item->min.i )
-                {
-                    NSString *o_description = [[VLCMain sharedInstance]
-                        localizedString: module_get_name( p_parser, TRUE )];
-                    if( [newval isEqualToString: o_description] )
-                    {
-                        returnval = strdup(module_get_object( p_parser ));
-                        break;
-                    }
-                }
-            }
-            module_config_free( p_config );
-        }
     }
-    module_list_free( p_list );
+    module_list_free(p_list);
+
+    if(returnval == NULL && [newval isEqualToString: _NS("Default")] && p_item->orig.psz != NULL) {
+        returnval = strdup(p_item->orig.psz);
+    }
     return returnval;
 }
 
 -(void)resetValues
 {
     /* build a list of available modules */
-    size_t i_index;
     module_t *p_parser, **p_list;
 
-    p_list = module_list_get( NULL );
-    for( i_index = 0; p_list[i_index]; i_index++ )
-    {
+    size_t count;
+    p_list = module_list_get(&count);
+    for (size_t i_index = 0; i_index < count; i_index++) {
         p_parser = p_list[i_index];
 
-        if( p_item->i_type == CONFIG_ITEM_MODULE )
-        {
-            if( module_provides( p_parser, p_item->psz_type ) )
-            {
-                NSString *o_description = [[VLCMain sharedInstance]
-                    localizedString: module_get_name( p_parser, TRUE )];
+        if (module_is_main(p_parser))
+            continue;
+        unsigned int confsize;
+
+        module_config_t *p_configlist = module_config_get(p_parser, &confsize);
+        for (size_t i = 0; i < confsize; i++) {
+            module_config_t *p_config = &p_configlist[i];
+            /* Hack: required subcategory is stored in i_min */
+            if (p_config->i_type == CONFIG_SUBCATEGORY &&
+                p_config->value.i == p_item->min.i) {
+                NSString *o_description = _NS(module_get_name(p_parser, TRUE));
                 [o_popup addItemWithTitle: o_description];
-                char *psz_value = config_GetPsz( VLCIntf, p_item->psz_name );
 
-                if( psz_value &&
-                    !strcmp( psz_value, module_get_object( p_parser ) ) )
+                if (p_item->value.psz && !strcmp(p_item->value.psz,
+                                                 module_get_object(p_parser)))
                     [o_popup selectItem:[o_popup lastItem]];
-
-                free(psz_value);
-            }
-        }
-        else
-        {
-            int i;
-
-            if( module_is_main( p_parser ) )
-                continue;
-            unsigned int confsize;
-            unsigned int unused;
-            module_config_t *p_configlist = module_config_get( p_parser, &confsize );
-            for ( i = 0; i < confsize; i++ )
-            {
-                module_config_t *p_config = &p_configlist[i];
-                /* Hack: required subcategory is stored in i_min */
-                if( p_config->i_type == CONFIG_SUBCATEGORY &&
-                    config_GetInt( VLCIntf, p_item->psz_name) == p_item->min.i )
-                {
-                    NSString *o_description = [[VLCMain sharedInstance]
-                        localizedString: module_get_name( p_parser, TRUE )];
-                    [o_popup addItemWithTitle: o_description];
-                    char *psz_value = config_GetPsz( VLCIntf, p_item->psz_name );
-
-                    if( psz_value && !strcmp(psz_value,
-                                            module_get_object( p_parser )) )
-                        [o_popup selectItem:[o_popup lastItem]];
-
-                    free( psz_value );
-                }
             }
-            module_config_free( p_configlist );
         }
+        module_config_free(p_configlist);
     }
-    module_list_free( p_list );
+    module_list_free(p_list);
     [super resetValues];
 }
 @end
@@ -1481,33 +1333,29 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_INTEGER;
 
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-            [[VLCMain sharedInstance]
-                localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the stepper */
-        ADD_STEPPER( o_stepper, mainFrame, mainFrame.size.width - 19,
+        ADD_STEPPER(o_stepper, mainFrame, mainFrame.size.width - 19,
             0, o_tooltip, -100000, 100000)
         [o_stepper setIntValue: p_item->value.i];
         [o_stepper setAutoresizingMask:NSViewMaxXMargin ];
         [self addSubview: o_stepper];
 
-        ADD_TEXTFIELD( o_textfield, mainFrame, mainFrame.size.width - 19 - 52,
-            1, 49, o_tooltip, @"" )
+        ADD_TEXTFIELD(o_textfield, mainFrame, mainFrame.size.width - 19 - 52,
+            1, 49, o_tooltip, @"")
         [o_textfield setIntValue: p_item->value.i];
         [o_textfield setDelegate: self];
         [[NSNotificationCenter defaultCenter] addObserver: self
@@ -1578,37 +1426,29 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
-        int i_index;
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_STRING_LIST;
 
-        o_textfieldTooltip = [[VLCMain sharedInstance] wrapString:
-                              [[VLCMain sharedInstance]
-                               localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];        
+        o_textfieldTooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_textfieldTooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the textfield */
-        ADD_COMBO( o_combo, mainFrame, [o_label frame].size.width,
-            -2, 0, o_textfieldTooltip )
-        [o_combo setAutoresizingMask:NSViewWidthSizable ];
-        for( i_index = 0; i_index < p_item->i_list; i_index++ )
-        {
-            if( p_item->value.i == p_item->pi_list[i_index] )
-            {
-                [o_combo selectItemAtIndex: i_index];
-            }
-        }
-        [self addSubview: o_combo];
+        ADD_POPUP(o_popup, mainFrame, [o_label frame].size.width,
+            -2, 0, o_textfieldTooltip)
+        [o_popup setAutoresizingMask:NSViewWidthSizable ];
+
+        /* add items */
+        [self resetValues];
+        
+        [self addSubview: o_popup];
     }
     return self;
 }
@@ -1621,54 +1461,47 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     frame.origin.x = i_xPos - frame.size.width - 3;
     [o_label setFrame:frame];
 
-    frame = [o_combo frame];
+    frame = [o_popup frame];
     frame.origin.x = i_xPos + 2;
     frame.size.width = superFrame.size.width - frame.origin.x + 2;
-    [o_combo setFrame:frame];
+    [o_popup setFrame:frame];
 }
 
 - (void)dealloc
 {
-    [o_combo release];
+    [o_popup release];
     [super dealloc];
 }
 
 - (int)intValue
 {
-    if( [o_combo indexOfSelectedItem] >= 0 )
-        return p_item->pi_list[[o_combo indexOfSelectedItem]];
-    else
-        return [o_combo intValue];
+    NSNumber *p_valueobject = (NSNumber *)[[o_popup selectedItem] representedObject];
+    if (p_valueobject) {
+        assert([p_valueobject isKindOfClass:[NSNumber class]]);
+        return [p_valueobject intValue];
+    } else
+        return 0;
 }
 
 -(void)resetValues
 {
-    int i_index;
-    [o_combo reloadData];
-    for( i_index = 0; i_index < p_item->i_list; i_index++ )
-    {
-        if( config_GetInt( VLCIntf, p_item->psz_name) == p_item->pi_list[i_index] )
-        {
-            [o_combo selectItemAtIndex: i_index];
-        }
-    }
+    [o_popup removeAllItems];
 
-}
-@end
+    int i_current_selection = config_GetInt(VLCIntf, p_item->psz_name);
+    int64_t *values;
+    char **texts;
+    ssize_t count = config_GetIntChoices(VLC_OBJECT(VLCIntf), p_item->psz_name, &values, &texts);
+    for (ssize_t i = 0; i < count; i++) {
+        NSMenuItem *mi = [[NSMenuItem alloc] initWithTitle: toNSStr(texts[i]) action: NULL keyEquivalent: @""];
+        [mi setRepresentedObject:[NSNumber numberWithInt:values[i]]];
+        [[o_popup menu] addItem: [mi autorelease]];
 
-@implementation IntegerListConfigControl (NSComboBoxDataSource)
-- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox
-{
-    return p_item->i_list;
-}
+        if (i_current_selection == values[i])
+            [o_popup selectItem:[o_popup lastItem]];
 
-- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)i_index
-{
-    if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
-        return [[VLCMain sharedInstance]
-                    localizedString: (char *)p_item->ppsz_list_text[i_index]];
-    else
-        return [NSString stringWithFormat: @"%i", p_item->pi_list[i_index]];
+        free(texts[i]);
+    }
+    free(texts);
 }
 @end
 
@@ -1683,27 +1516,23 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_RANGED_INTEGER;
 
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-                     [[VLCMain sharedInstance]
-                      localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the textfield */
-        ADD_TEXTFIELD( o_textfield, mainFrame, [o_label frame].size.width + 2,
-            28, 49, o_tooltip, @"" )
+        ADD_TEXTFIELD(o_textfield, mainFrame, [o_label frame].size.width + 2,
+            28, 49, o_tooltip, @"")
         [o_textfield setIntValue: p_item->value.i];
         [o_textfield setAutoresizingMask:NSViewMaxXMargin ];
         [o_textfield setDelegate: self];
@@ -1714,26 +1543,26 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         [self addSubview: o_textfield];
 
         /* build the mintextfield */
-        ADD_LABEL( o_textfield_min, mainFrame, 12, -30, @"-8888", @"" )
+        ADD_LABEL(o_textfield_min, mainFrame, 12, -30, @"-8888", @"")
         [o_textfield_min setIntValue: p_item->min.i];
         [o_textfield_min setAutoresizingMask:NSViewMaxXMargin ];
         [o_textfield_min setAlignment:NSRightTextAlignment];
         [self addSubview: o_textfield_min];
 
         /* build the maxtextfield */
-        ADD_LABEL( o_textfield_max, mainFrame,
-                    mainFrame.size.width - 31, -30, @"8888", @"" )
+        ADD_LABEL(o_textfield_max, mainFrame,
+                    mainFrame.size.width - 31, -30, @"8888", @"")
         [o_textfield_max setIntValue: p_item->max.i];
         [o_textfield_max setAutoresizingMask:NSViewMinXMargin ];
         [self addSubview: o_textfield_max];
 
         /* build the slider */
-        ADD_SLIDER( o_slider, mainFrame, [o_textfield_min frame].origin.x +
+        ADD_SLIDER(o_slider, mainFrame, [o_textfield_min frame].origin.x +
             [o_textfield_min frame].size.width + 6, -1, mainFrame.size.width -
             [o_textfield_max frame].size.width -
             [o_textfield_max frame].size.width - 14 -
             [o_textfield_min frame].origin.x, o_tooltip,
-            p_item->min.i, p_item->max.i )
+            p_item->min.i, p_item->max.i)
         [o_slider setIntValue: p_item->value.i];
         [o_slider setAutoresizingMask:NSViewWidthSizable ];
         [o_slider setTarget: self];
@@ -1784,7 +1613,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)resetValues
 {
-    int value = config_GetInt( VLCIntf, p_item->psz_name );
+    int value = config_GetInt(VLCIntf, p_item->psz_name);
     [o_textfield setIntValue:value];
     [o_slider setIntValue:value];
     [super resetValues];
@@ -1802,34 +1631,30 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_INTEGER;
 
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-            [[VLCMain sharedInstance]
-                localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -2, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -2, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the stepper */
-        ADD_STEPPER( o_stepper, mainFrame, mainFrame.size.width - 19,
+        ADD_STEPPER(o_stepper, mainFrame, mainFrame.size.width - 19,
             0, o_tooltip, -100000, 100000)
         [o_stepper setFloatValue: p_item->value.f];
         [o_stepper setAutoresizingMask:NSViewMaxXMargin ];
         [self addSubview: o_stepper];
 
         /* build the textfield */
-        ADD_TEXTFIELD( o_textfield, mainFrame, mainFrame.size.width - 19 - 52,
-            1, 49, o_tooltip, @"" )
+        ADD_TEXTFIELD(o_textfield, mainFrame, mainFrame.size.width - 19 - 52,
+            1, 49, o_tooltip, @"")
         [o_textfield setFloatValue: p_item->value.f];
         [o_textfield setDelegate: self];
         [[NSNotificationCenter defaultCenter] addObserver: self
@@ -1882,7 +1707,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)resetValues
 {
-    [o_textfield setFloatValue: config_GetFloat( VLCIntf, p_item->psz_name)];
+    [o_textfield setFloatValue: config_GetFloat(VLCIntf, p_item->psz_name)];
     [super resetValues];
 }
 @end
@@ -1898,27 +1723,23 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_RANGED_INTEGER;
 
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-                     [[VLCMain sharedInstance]
-                      localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];        
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the textfield */
-        ADD_TEXTFIELD( o_textfield, mainFrame, [o_label frame].size.width + 2,
-            28, 49, o_tooltip, @"" )
+        ADD_TEXTFIELD(o_textfield, mainFrame, [o_label frame].size.width + 2,
+            28, 49, o_tooltip, @"")
         [o_textfield setFloatValue: p_item->value.f];
         [o_textfield setAutoresizingMask:NSViewMaxXMargin ];
         [o_textfield setDelegate: self];
@@ -1929,26 +1750,26 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         [self addSubview: o_textfield];
 
         /* build the mintextfield */
-        ADD_LABEL( o_textfield_min, mainFrame, 12, -30, @"-8888", @"" )
+        ADD_LABEL(o_textfield_min, mainFrame, 12, -30, @"-8888", @"")
         [o_textfield_min setFloatValue: p_item->min.f];
         [o_textfield_min setAutoresizingMask:NSViewMaxXMargin ];
         [o_textfield_min setAlignment:NSRightTextAlignment];
         [self addSubview: o_textfield_min];
 
         /* build the maxtextfield */
-        ADD_LABEL( o_textfield_max, mainFrame, mainFrame.size.width - 31,
-            -30, @"8888", @"" )
+        ADD_LABEL(o_textfield_max, mainFrame, mainFrame.size.width - 31,
+            -30, @"8888", @"")
         [o_textfield_max setFloatValue: p_item->max.f];
         [o_textfield_max setAutoresizingMask:NSViewMinXMargin ];
         [self addSubview: o_textfield_max];
 
         /* build the slider */
-        ADD_SLIDER( o_slider, mainFrame, [o_textfield_min frame].origin.x +
+        ADD_SLIDER(o_slider, mainFrame, [o_textfield_min frame].origin.x +
             [o_textfield_min frame].size.width + 6, -1, mainFrame.size.width -
             [o_textfield_max frame].size.width -
             [o_textfield_max frame].size.width - 14 -
             [o_textfield_min frame].origin.x, o_tooltip, p_item->min.f,
-            p_item->max.f )
+            p_item->max.f)
         [o_slider setFloatValue: p_item->value.f];
         [o_slider setAutoresizingMask:NSViewWidthSizable ];
         [o_slider setTarget: self];
@@ -2017,27 +1838,21 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_BOOL;
 
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
+        else
+            o_labelString = @"";
+
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
+
         /* add the checkbox */
-        o_tooltip = [[VLCMain sharedInstance]
-            wrapString: [[VLCMain sharedInstance]
-            localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
-        ADD_CHECKBOX( o_checkbox, mainFrame, 0,
-                        0, @"", o_tooltip, p_item->value.i, NSImageLeft)
+        ADD_CHECKBOX(o_checkbox, mainFrame, 0,
+                        0, o_labelString, o_tooltip, p_item->value.i, NSImageLeft)
         [o_checkbox setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_checkbox];
-        /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                                localizedString: (char *)p_item->psz_text];
-        else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, [o_checkbox frame].size.width, 0, o_labelString, o_tooltip )
-        [o_label setAutoresizingMask:NSViewNotSizable ];
-        [self addSubview: o_label];
     }
     return self;
 }
@@ -2055,7 +1870,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)resetValues
 {
-    [o_checkbox setState: config_GetInt( VLCIntf, p_item->psz_name)];
+    [o_checkbox setState: config_GetInt(VLCIntf, p_item->psz_name)];
     [super resetValues];
 }
 @end
@@ -2071,41 +1886,36 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
 
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_KEY;
 
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-                     [[VLCMain sharedInstance]
-                      localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
 
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -1, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -1, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
 
         /* build the popup */
-        ADD_POPUP( o_popup, mainFrame, [o_label frame].origin.x +
+        ADD_POPUP(o_popup, mainFrame, [o_label frame].origin.x +
             [o_label frame].size.width + 3,
-            -2, 0, o_tooltip )
+            -2, 0, o_tooltip)
         [o_popup setAutoresizingMask:NSViewWidthSizable ];
 
-        if( o_keys_menu == nil )
-        {
+        if (o_keys_menu == nil) {
             unsigned int i;
             o_keys_menu = [[NSMenu alloc] initWithTitle: @"Keys Menu"];
 #warning This does not work anymore. FIXME.
 #if 0
-            for ( i = 0; i < sizeof(vlc_key) / sizeof(key_descriptor_t); i++)
-                if( vlc_key[i].psz_key_string )
-                    POPULATE_A_KEY( o_keys_menu,
-                        [NSString stringWithUTF8String:vlc_key[i].psz_key_string]
-                        , vlc_key[i].i_key_code)
+            for (i = 0; i < sizeof(vlc_key) / sizeof(key_descriptor_t); i++)
+                if (vlc_key[i].psz_key_string)
+                    POPULATE_A_KEY(o_keys_menu,
+                        [NSString stringWithUTF8String:vlc_key[i].psz_key_string],
+                                   vlc_key[i].i_key_code)
 #endif
         }
         [o_popup setMenu:[o_keys_menu copyWithZone:nil]];
@@ -2143,7 +1953,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)resetValues
 {
-    [o_popup selectItem:[[o_popup menu] itemWithTag:config_GetInt( VLCIntf, p_item->psz_name )]];
+    [o_popup selectItem:[[o_popup menu] itemWithTag:config_GetInt(VLCIntf, p_item->psz_name)]];
     [super resetValues];
 }
 @end
@@ -2152,150 +1962,172 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 - (id) initWithItem: (module_config_t *)_p_item
            withView: (NSView *)o_parent_view
 {
-    if( _p_item->i_type == CONFIG_ITEM_MODULE_LIST )
-        //TODO....
-        return nil;
-    
+    BOOL b_by_cat = _p_item->i_type == CONFIG_ITEM_MODULE_LIST_CAT;
+
     //Fill our array to know how may items we have...
     module_t *p_parser, **p_list;
     size_t i_module_index;
     NSRect mainFrame = [o_parent_view frame];
     NSString *o_labelString, *o_textfieldString, *o_tooltip;
-    
+
     o_modulearray = [[NSMutableArray alloc] initWithCapacity:10];
     /* build a list of available modules */
-    p_list = module_list_get( NULL );
-    for( i_module_index = 0; p_list[i_module_index]; i_module_index++ )
-    {
+    size_t count;
+    p_list = module_list_get(&count);
+    for (i_module_index = 0; i_module_index < count; i_module_index++) {
         int i;
         p_parser = p_list[i_module_index];
-        
-        if( module_is_main( p_parser ) )
+
+        if (module_is_main(p_parser))
             continue;
-        
-        unsigned int confsize;
-        module_config_t *p_configlist = module_config_get( p_parser, &confsize );
-        
-        for ( i = 0; i < confsize; i++ )
-        {
-            unsigned int unused;
-            module_config_t *p_config = &p_configlist[i];
-            NSString *o_modulelongname, *o_modulename;
-            NSNumber *o_moduleenabled = nil;
-            
-            /* Hack: required subcategory is stored in i_min */
-            if( p_config->i_type == CONFIG_SUBCATEGORY &&
-               p_config->value.i == _p_item->min.i )
-            {
-                o_modulelongname = [NSString stringWithUTF8String:
-                                    module_get_name( p_parser, TRUE )];
-                o_modulename = [NSString stringWithUTF8String:
-                                module_get_object( p_parser )];
-                
-                if( _p_item->value.psz &&
-                   strstr( _p_item->value.psz, module_get_object( p_parser ) ) )
-                    o_moduleenabled = [NSNumber numberWithBool:YES];
-                else
-                    o_moduleenabled = [NSNumber numberWithBool:NO];
-                
-                [o_modulearray addObject:[NSMutableArray
-                                          arrayWithObjects: o_modulename, o_modulelongname,
-                                          o_moduleenabled, nil]];
+
+        if (b_by_cat) {
+            unsigned int confsize;
+            module_config_t *p_configlist = module_config_get(p_parser, &confsize);
+
+            for (i = 0; i < confsize; i++) {
+                unsigned int unused;
+                module_config_t *p_config = &p_configlist[i];
+                NSString *o_modulelongname, *o_modulename;
+                NSNumber *o_moduleenabled = nil;
+
+                /* Hack: required subcategory is stored in i_min */
+                if (p_config->i_type == CONFIG_SUBCATEGORY &&
+                    p_config->value.i == _p_item->min.i) {
+
+                    o_modulelongname = [NSString stringWithUTF8String:module_get_name(p_parser, TRUE)];
+                    o_modulename = [NSString stringWithUTF8String:module_get_object(p_parser)];
+
+                    if (_p_item->value.psz &&
+                        strstr(_p_item->value.psz, module_get_object(p_parser)))
+                        o_moduleenabled = [NSNumber numberWithBool:YES];
+                    else
+                        o_moduleenabled = [NSNumber numberWithBool:NO];
+
+                    [o_modulearray addObject:[NSMutableArray
+                                              arrayWithObjects: o_modulename, o_modulelongname,
+                                              o_moduleenabled, nil]];
+                }
+
+                /* Parental Advisory HACK:
+                 * Selecting HTTP, RC and Telnet interfaces is difficult now
+                 * since they are just the lua interface module */
+                if (p_config->i_type == CONFIG_SUBCATEGORY &&
+                    !strcmp(module_get_object(p_parser), "lua") &&
+                    !strcmp(_p_item->psz_name, "extraintf") &&
+                    p_config->value.i == _p_item->min.i) {
+
+#define addLuaIntf(shortname, longname) \
+if (_p_item->value.psz && strstr(_p_item->value.psz, shortname))\
+    o_moduleenabled = [NSNumber numberWithBool:YES];\
+else\
+    o_moduleenabled = [NSNumber numberWithBool:NO];\
+    [o_modulearray addObject:[NSMutableArray arrayWithObjects: @shortname, _NS(longname), o_moduleenabled, nil]]
+
+                    addLuaIntf("http", "Web");
+                    addLuaIntf("telnet", "Telnet");
+                    addLuaIntf("cli", "Console");
+#undef addLuaIntf
+                }
+
             }
+            module_config_free(p_configlist);
+
+
+        } else if (module_provides(p_parser, _p_item->psz_type)) {
+
+            NSString *o_modulelongname = toNSStr(module_get_name(p_parser, TRUE));
+            NSString *o_modulename = toNSStr(module_get_object(p_parser));
+
+            NSNumber *o_moduleenabled = nil;
+            if (_p_item->value.psz &&
+                strstr(_p_item->value.psz, module_get_object(p_parser)))
+                o_moduleenabled = [NSNumber numberWithBool:YES];
+            else
+                o_moduleenabled = [NSNumber numberWithBool:NO];
+
+            [o_modulearray addObject:[NSMutableArray
+                                      arrayWithObjects: o_modulename, o_modulelongname,
+                                      o_moduleenabled, nil]];
         }
-        module_config_free( p_configlist );
-    }
-    module_list_free( p_list );
-    
-    mainFrame.size.height = 30 + 20 * [o_modulearray count];
+
+    } /* FOR i_module_index */
+    module_list_free(p_list);
+
+    // First, initialize and draw the table view to get its height
+    // width is increased a little to fix horizontal auto-sizing
+    NSRect s_rc = NSMakeRect(12, 10, mainFrame.size.width - LEFTMARGIN - RIGHTMARGIN + 18, 50);
+    // height is automatically increased as needed
+    o_tableview = [[NSTableView alloc] initWithFrame : s_rc];
+    [o_tableview setUsesAlternatingRowBackgroundColors:YES];
+    [o_tableview setHeaderView:nil];
+    /* FIXME: support for multiple selection... */
+    //    [o_tableview setAllowsMultipleSelection:YES];
+
+    NSCell *o_headerCell = [[NSCell alloc] initTextCell:@"Enabled"];
+    NSCell *o_dataCell = [[NSButtonCell alloc] init];
+    [(NSButtonCell*)o_dataCell setButtonType:NSSwitchButton];
+    [o_dataCell setTitle:@""];
+    [o_dataCell setFont:[NSFont systemFontOfSize:0]];
+    NSTableColumn *o_tableColumn = [[NSTableColumn alloc]
+                                    initWithIdentifier:@"Enabled"];
+    [o_tableColumn setHeaderCell: o_headerCell];
+    [o_tableColumn setDataCell: o_dataCell];
+    [o_tableColumn setWidth:17];
+    [o_tableview addTableColumn: o_tableColumn];
+
+    o_headerCell = [[NSCell alloc] initTextCell:@"Module Name"];
+    o_dataCell = [[NSTextFieldCell alloc] init];
+    [o_dataCell setFont:[NSFont systemFontOfSize:12]];
+    o_tableColumn = [[NSTableColumn alloc]
+                     initWithIdentifier:@"Module"];
+    [o_tableColumn setHeaderCell: o_headerCell];
+    [o_tableColumn setDataCell: o_dataCell];
+    [o_tableColumn setWidth:s_rc.size.width - 34];
+    [o_tableview addTableColumn: o_tableColumn];
+    [o_tableview registerForDraggedTypes:[NSArray arrayWithObject:@"VLC media player module"]];
+
+    [o_tableview setDataSource:self];
+    [o_tableview setTarget: self];
+    [o_tableview setAction: @selector(tableChanged:)];
+    [o_tableview sendActionOn:NSLeftMouseUpMask | NSLeftMouseDownMask |
+     NSLeftMouseDraggedMask];
+
+    [o_tableview reloadData];
+    [o_tableview setAutoresizingMask: NSViewWidthSizable];
+
+    CGFloat tableview_height = [o_tableview frame].size.height;
+
+    mainFrame.size.height = 40 + tableview_height;
     mainFrame.size.width = mainFrame.size.width - LEFTMARGIN - RIGHTMARGIN;
     mainFrame.origin.x = LEFTMARGIN;
     mainFrame.origin.y = 0;
-    if( [super initWithFrame: mainFrame item: _p_item] != nil )
-    {
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
         i_view_type = CONFIG_ITEM_MODULE_LIST;
-        
-        o_tooltip = [[VLCMain sharedInstance] wrapString:
-                     [[VLCMain sharedInstance]
-                      localizedString: (char *)p_item->psz_longtext ] toWidth: PREFS_WRAP];
-        
+
+        o_tooltip = [[VLCStringUtility sharedInstance] wrapString: _NS((char *)p_item->psz_longtext) toWidth: PREFS_WRAP];
+
         /* add the label */
-        if( p_item->psz_text )
-            o_labelString = [[VLCMain sharedInstance]
-                             localizedString: (char *)p_item->psz_text];
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
         else
-            o_labelString = [NSString stringWithString:@""];
-        ADD_LABEL( o_label, mainFrame, 0, -3, o_labelString, o_tooltip )
+            o_labelString = @"";
+        ADD_LABEL(o_label, mainFrame, 0, -3, o_labelString, o_tooltip)
         [o_label setAutoresizingMask:NSViewNotSizable ];
         [self addSubview: o_label];
-        
+
         /* build the textfield */
-        if( p_item->value.psz )
-            o_textfieldString = [[VLCMain sharedInstance]
-                                 localizedString: (char *)p_item->value.psz];
+        if (p_item->value.psz)
+            o_textfieldString = _NS((char *)p_item->value.psz);
         else
-            o_textfieldString = [NSString stringWithString: @""];
-        ADD_TEXTFIELD( o_textfield, mainFrame, [o_label frame].size.width + 2,
+            o_textfieldString = @"";
+        ADD_TEXTFIELD(o_textfield, mainFrame, [o_label frame].size.width + 2,
                       mainFrame.size.height - 22, mainFrame.size.width -
-                      [o_label frame].size.width - 2, o_tooltip, o_textfieldString )
+                      [o_label frame].size.width - 2, o_tooltip, o_textfieldString)
         [o_textfield setAutoresizingMask:NSViewWidthSizable ];
         [self addSubview: o_textfield];
-        
-        
-        {
-            NSRect s_rc = mainFrame;
-            s_rc.size.height = mainFrame.size.height - 30;
-            s_rc.size.width = mainFrame.size.width - 12;
-            s_rc.origin.x = 12;
-            s_rc.origin.y = 0;
-            o_scrollview = [[[NSScrollView alloc] initWithFrame: s_rc] retain];
-            [o_scrollview setDrawsBackground: NO];
-            [o_scrollview setBorderType: NSBezelBorder];
-            [o_scrollview setAutohidesScrollers:YES];
-            
-            NSTableView *o_tableview;
-            o_tableview = [[NSTableView alloc] initWithFrame : s_rc];
-            [o_tableview setUsesAlternatingRowBackgroundColors:YES];
-            [o_tableview setHeaderView:nil];
-            /* TODO: find a good way to fix the row height and text size*/
-            /* FIXME: support for multiple selection... */
-            //    [o_tableview setAllowsMultipleSelection:YES];
-            
-            NSCell *o_headerCell = [[NSCell alloc] initTextCell:@"Enabled"];
-            NSCell *o_dataCell = [[NSButtonCell alloc] init];
-            [(NSButtonCell*)o_dataCell setButtonType:NSSwitchButton];
-            [o_dataCell setTitle:@""];
-            [o_dataCell setFont:[NSFont systemFontOfSize:0]];
-            NSTableColumn *o_tableColumn = [[NSTableColumn alloc]
-                                            initWithIdentifier:@"Enabled"];
-            [o_tableColumn setHeaderCell: o_headerCell];
-            [o_tableColumn setDataCell: o_dataCell];
-            [o_tableColumn setWidth:17];
-            [o_tableview addTableColumn: o_tableColumn];
-            
-            o_headerCell = [[NSCell alloc] initTextCell:@"Module Name"];
-            o_dataCell = [[NSTextFieldCell alloc] init];
-            [o_dataCell setFont:[NSFont systemFontOfSize:12]];
-            o_tableColumn = [[NSTableColumn alloc]
-                             initWithIdentifier:@"Module"];
-            [o_tableColumn setHeaderCell: o_headerCell];
-            [o_tableColumn setDataCell: o_dataCell];
-            [o_tableColumn setWidth:s_rc.size.width - 34];
-            [o_tableview addTableColumn: o_tableColumn];
-            [o_tableview registerForDraggedTypes:[NSArray arrayWithObjects:
-                                                  @"VLC media player module", nil]];
-            
-            [o_tableview setDataSource:self];
-            [o_tableview setTarget: self];
-            [o_tableview setAction: @selector(tableChanged:)];
-            [o_tableview sendActionOn:NSLeftMouseUpMask | NSLeftMouseDownMask |
-             NSLeftMouseDraggedMask];
-            [o_scrollview setDocumentView: o_tableview];
-        }
-        [o_scrollview setAutoresizingMask:NSViewWidthSizable ];
-        [o_scrollview setAutohidesScrollers:YES];
-        [self addSubview: o_scrollview];
 
+        [self addSubview: o_tableview];
     }
     return self;
 }
@@ -2309,10 +2141,9 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 {
     NSString *o_newstring = @"";
     NSUInteger count = [o_modulearray count];
-    for( NSUInteger i = 0 ; i < count ; i++ )
-        if( [[[o_modulearray objectAtIndex:i] objectAtIndex:2]
-            boolValue] != NO )
-        {
+    for (NSUInteger i = 0 ; i < count ; i++)
+        if ([[[o_modulearray objectAtIndex:i] objectAtIndex:2]
+            boolValue] != NO) {
             o_newstring = [o_newstring stringByAppendingString:
                 [[o_modulearray objectAtIndex:i] objectAtIndex:0]];
             o_newstring = [o_newstring stringByAppendingString:@":"];
@@ -2324,20 +2155,20 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
 - (void)dealloc
 {
-    [o_scrollview release];
+    [o_tableview release];
     [super dealloc];
 }
 
 
 - (char *)stringValue
 {
-    return strdup( [[o_textfield stringValue] UTF8String] );
+    return strdup([[o_textfield stringValue] UTF8String]);
 }
 
 -(void)resetValues
 {
-#warning Reset prefs of the module selector is broken atm. 
-    NSLog( @"don't forget about modulelistconfig" );
+#warning Reset prefs of the module selector is broken atm.
+    msg_Err(VLCIntf, "don't forget about modulelistconfig");
     [super resetValues];
 }
 
@@ -2351,14 +2182,12 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     // We only want to allow dragging of selected rows.
     NSEnumerator    *iter = [rows objectEnumerator];
     NSNumber        *row;
-    while ((row = [iter nextObject]) != nil)
-    {
+    while ((row = [iter nextObject]) != nil) {
         if (![table isRowSelected:[row intValue]])
             return NO;
     }
 
-    [pb declareTypes:[NSArray
-        arrayWithObject:@"VLC media player module"] owner:nil];
+    [pb declareTypes:[NSArray arrayWithObject:@"VLC media player module"] owner:nil];
     [pb setPropertyList:rows forType:@"VLC media player module"];
     return YES;
 }
@@ -2368,8 +2197,7 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
     proposedDropOperation:(NSTableViewDropOperation)op
 {
     // Make drops at the end of the table go to the end.
-    if (row == -1)
-    {
+    if (row == -1) {
         row = [table numberOfRows];
         op = NSTableViewDropAbove;
         [table setDropRow:row dropOperation:op];
@@ -2394,15 +2222,13 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 
         // Intra-table drag - data is the array of rows.
         if (!accepted && (array =
-            [pb propertyListForType:@"VLC media player module"]) != NULL)
-        {
+            [pb propertyListForType:@"VLC media player module"]) != NULL) {
             NSEnumerator *iter = nil;
             id val;
             BOOL isCopy = (srcMask & NSDragOperationMove) ? NO:YES;
             // Move the modules
             iter = [array objectEnumerator];
-            while ((val = [iter nextObject]) != NULL)
-            {
+            while ((val = [iter nextObject]) != NULL) {
                 NSArray *o_tmp = [[o_modulearray objectAtIndex:
                     [val intValue]] mutableCopyWithZone:nil];
                 [o_modulearray removeObject:o_tmp];
@@ -2444,9 +2270,9 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
 - (id)tableView:(NSTableView *)aTableView
     objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
 {
-    if( [[aTableColumn identifier] isEqualToString: @"Enabled"] )
+    if ([[aTableColumn identifier] isEqualToString: @"Enabled"])
         return [[o_modulearray objectAtIndex:rowIndex] objectAtIndex:2];
-    if( [[aTableColumn identifier] isEqualToString: @"Module"] )
+    if ([[aTableColumn identifier] isEqualToString: @"Module"])
         return [[o_modulearray objectAtIndex:rowIndex] objectAtIndex:1];
 
     return nil;
@@ -2459,3 +2285,44 @@ o_textfield = [[[NSSecureTextField alloc] initWithFrame: s_rc] retain];       \
         withObject: anObject];
 }
 @end
+
+@implementation SectionControl
+
+- (id) initWithItem: (module_config_t *)_p_item
+           withView: (NSView *)o_parent_view
+{
+    NSRect mainFrame = [o_parent_view frame];
+    NSString *o_labelString, *o_tooltip;
+    mainFrame.size.height = 17;
+    mainFrame.size.width = mainFrame.size.width - LEFTMARGIN - RIGHTMARGIN;
+    mainFrame.origin.x = LEFTMARGIN;
+    mainFrame.origin.y = 0;
+
+    if ([super initWithFrame: mainFrame item: _p_item] != nil) {
+        
+        /* add the label */
+        if (p_item->psz_text)
+            o_labelString = _NS((char *)p_item->psz_text);
+        else
+            o_labelString = @"";
+
+        NSDictionary *boldAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
+                        [NSFont boldSystemFontOfSize:[NSFont systemFontSize]],
+                        NSFontAttributeName,
+                        nil];
+        NSAttributedString *o_bold_string = [[NSAttributedString alloc] initWithString: o_labelString attributes: boldAttributes];
+
+        ADD_LABEL(o_label, mainFrame, 1, 0, @"", @"")
+        [o_label setAttributedStringValue: o_bold_string];
+        [o_label sizeToFit];
+
+        [o_bold_string release];
+        
+        [o_label setAutoresizingMask:NSViewNotSizable];
+        [self addSubview: o_label];
+    }
+    return self;
+}
+
+@end
+