]> granicus.if.org Git - handbrake/commitdiff
LinGui: allow standard presets to be deleted and provide a button to reload
authorjstebbins <jstebbins.hb@gmail.com>
Sat, 23 Aug 2008 20:04:38 +0000 (20:04 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Sat, 23 Aug 2008 20:04:38 +0000 (20:04 +0000)
them.  This makes the lingui conform more closely to the macgui.

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1650 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/callbacks.c
gtk/src/ghb.ui
gtk/src/internal_defaults
gtk/src/internal_defaults.h
gtk/src/preset_xlat.c
gtk/src/settings.c
gtk/src/settings.h
gtk/src/standard_presets

index fe64e276361f22a83a2f03fe6ae564c81f2f1b2e..0043aac2a44fd14be71c3e7dd149a93e0eb88472 100644 (file)
@@ -2012,6 +2012,15 @@ presets_save_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        }
 }
 
+void
+presets_restore_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
+{
+       g_debug("presets_restore_clicked_cb ()\n");
+       // Reload only the standard presets
+       ghb_presets_reload(ud);
+       ghb_presets_list_update(ud);
+}
+
 void
 prefs_dialog_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
@@ -2042,43 +2051,32 @@ presets_remove_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
                GtkWidget *dialog;
 
                gtk_tree_model_get(store, &iter, 0, &preset, -1);
-               if (!ghb_presets_is_standard(preset))
-               {
-                       dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
-                                                                       GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
-                                                                       "Confirm deletion of preset %s.", preset);
-                       response = gtk_dialog_run(GTK_DIALOG(dialog));
-                       gtk_widget_destroy (dialog);
-                       if (response == GTK_RESPONSE_YES)
+               dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
+                                                               GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
+                                                               "Confirm deletion of preset %s.", preset);
+               response = gtk_dialog_run(GTK_DIALOG(dialog));
+               gtk_widget_destroy (dialog);
+               if (response == GTK_RESPONSE_YES)
+               {
+                       GtkTreeIter nextIter = iter;
+                       gchar *nextPreset = NULL;
+                       if (!gtk_tree_model_iter_next(store, &nextIter))
                        {
-                               GtkTreeIter nextIter = iter;
-                               gchar *nextPreset = NULL;
-                               if (!gtk_tree_model_iter_next(store, &nextIter))
-                               {
-                                       if (gtk_tree_model_get_iter_first(store, &nextIter))
-                                       {
-                                               gtk_tree_model_get(store, &nextIter, 0, &nextPreset, -1);
-                                       }
-                               }
-                               else
+                               if (gtk_tree_model_get_iter_first(store, &nextIter))
                                {
                                        gtk_tree_model_get(store, &nextIter, 0, &nextPreset, -1);
                                }
-                               // Remove the selected item
-                               // First unselect it so that selecting the new item works properly
-                               gtk_tree_selection_unselect_iter (selection, &iter);
-                               ghb_presets_remove(ud->settings, preset);
-                               ghb_presets_list_update(ud);
-                               ghb_select_preset(ud->builder, nextPreset);
                        }
-               }
-               else
-               {
-                       dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
-                                                                       GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
-                                                                       "Can not delete standard preset %s.", preset);
-                       response = gtk_dialog_run(GTK_DIALOG(dialog));
-                       gtk_widget_destroy (dialog);
+                       else
+                       {
+                               gtk_tree_model_get(store, &nextIter, 0, &nextPreset, -1);
+                       }
+                       // Remove the selected item
+                       // First unselect it so that selecting the new item works properly
+                       gtk_tree_selection_unselect_iter (selection, &iter);
+                       ghb_presets_remove(ud->settings, preset);
+                       ghb_presets_list_update(ud);
+                       ghb_select_preset(ud->builder, nextPreset);
                }
        }
 }
@@ -2123,18 +2121,14 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
        GtkTreeModel *store;
        GtkTreeIter iter;
        gchar *preset;
-       GtkWidget *widget;
-       gboolean sensitive = FALSE;
        ghb_title_info_t tinfo;
+       GtkWidget *widget;
        
        g_debug("presets_list_selection_changed_cb ()\n");
+       widget = GHB_WIDGET (ud->builder, "presets_remove");
        if (gtk_tree_selection_get_selected(selection, &store, &iter))
        {
                gtk_tree_model_get(store, &iter, 0, &preset, -1);
-               if (!ghb_presets_is_standard(preset))
-               {
-                       sensitive = TRUE;
-               }
                ud->dont_clear_presets = TRUE;
                // Temporarily set the video_quality range to (0,100)
                // This is needed so the video_quality value does not get
@@ -2158,13 +2152,13 @@ presets_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_
                gint vqmin, vqmax;
                ghb_vquality_range(ud, &vqmin, &vqmax);
                gtk_range_set_range (GTK_RANGE(qp), vqmin, vqmax);
+               gtk_widget_set_sensitive(widget, TRUE);
        }
        else
        {
                g_debug("No selection???  Perhaps unselected.\n");
+               gtk_widget_set_sensitive(widget, FALSE);
        }
-       widget = GHB_WIDGET (ud->builder, "presets_remove");
-       gtk_widget_set_sensitive(widget, sensitive);
 }
 
 void
index 9128e7ef883a842c2d0705ae9a4aae04033b9236..9377dc0858a949405d3d63a8b61dbd5369954008 100644 (file)
@@ -3297,6 +3297,25 @@ no-fast-pskip=0:no-dct-decimate=0:cabac=1</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkButton" id="presets_restore">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="tooltip-text" translatable="yes">Reload HandBrakes standard presets</property>
+                                <property name="relief">GTK_RELIEF_NONE</property>
+                                <signal handler="presets_restore_clicked_cb" name="clicked"/>
+                                <child>
+                                  <object class="GtkImage" id="image7">
+                                    <property name="visible">True</property>
+                                    <property name="stock">gtk-refresh</property>
+                                  </object>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">4</property>
+                              </packing>
+                            </child>
                           </object>
                         </child>
                       </object>
index 258653dc45d7fab06bcf58ef99f8a94dd31da559..2cc694195916b878181737aa5edc9bbee69f37f4 100644 (file)
@@ -1,4 +1,5 @@
 [Presets]
+preset_type=1
 preset_description=
 subtitle_lang=none
 forced_subtitles=enable
index f1b6b7e51a22df4df628aa2c04d9368cc85ba611..7751dd2e5119c94ecb41c547b33b6c19ce1002a3 100644 (file)
@@ -1,4 +1,5 @@
 "[Presets]\n"
+"preset_type=1\n"
 "preset_description=\n"
 "subtitle_lang=none\n"
 "forced_subtitles=enable\n"
index e393dbe36a4a531967921508ae327bdde47795f4..c3cd8b993106f8082c9ee1d53a09c95105c3d57a 100644 (file)
@@ -76,6 +76,7 @@ start_element(
 gchar *settings[] = 
 {
        "preset_description",
+       "preset_type",
        "subtitle_lang",
        "forced_subtitles",
        "source_audio_lang",
@@ -578,7 +579,7 @@ static xlat_t keys[] =
        {"PresetDescription", "preset_description"},
        {"Subtitles", "subtitle_lang"},
        {"Subtitles", "subtitle_lang"},
-       {"Type", ""}, // preset type builtin/custom
+       {"Type", "preset_type"}, // preset type builtin/custom
        {"UsesMaxPictureSettings", "autoscale"},
        {"UsesPictureFilters", ""},
        {"UsesPictureSettings", ""},
index da43a98774f6a76c13710220d010d38bc68a8282..f42f9f14f0eff8a54440989acc26cdf3cd0fed73 100644 (file)
@@ -872,30 +872,11 @@ typedef struct
        GKeyFile *keyFile;
 } presets_data_t;
 
-static GKeyFile *standardKeyFile;
-static GKeyFile *customKeyFile;
+static GKeyFile *presetsKeyFile;
 static GKeyFile *internalKeyFile;
 static GKeyFile *prefsKeyFile;
 static GList *presetsList;
 
-static gint
-search_group(const gchar *name, gchar **groups)
-{
-       gint ii;
-
-       //g_debug("search_group\n");
-       if (groups == NULL) return -1;
-       for (ii = 0; groups[ii] != NULL; ii++)
-       {
-               //g_debug("%s cmp %s\n", name, groups[ii]);
-               if (strcmp(name, groups[ii]) == 0)
-               {
-                       return ii;
-               }
-       }
-       return -1;
-}
-
 presets_data_t *
 presets_list_search(GList *list, const gchar *name)
 {
@@ -1192,9 +1173,9 @@ build_presets_list(GHashTable *settings)
 {
        GList *link = presetsList;
        presets_data_t *data;
-       gchar **custom, **standard;
-       gsize clength, slength;
-       gint ii, jj;
+       gchar **presets;
+       gsize length;
+       gint ii;
        
        g_debug("build_presets_list ()\n");
        // First clear out the old presets list
@@ -1210,48 +1191,55 @@ build_presets_list(GHashTable *settings)
        presetsList = NULL;
 
        // Now build up the new list
+       // Make standard presets appear before custom in the list
        const gchar *def_name = ghb_settings_get_string(settings, "default_preset");
-       custom = g_key_file_get_groups(customKeyFile, &clength);
-       standard = g_key_file_get_groups(standardKeyFile, &slength);
-       if ((slength + clength) <= 0) return;
-       jj = 0;
-       for (ii = 0; ii < slength; ii++)
-       {
-               if (search_group(standard[ii], custom) < 0)
-               {
+       presets = g_key_file_get_groups(presetsKeyFile, &length);
+       if (length <= 0) return;
+       for (ii = 0; ii < length; ii++)
+       {
+               gint type;
+               GError *err = NULL;
+               type = g_key_file_get_integer(presetsKeyFile, presets[ii], "preset_type", &err);
+               if (!err && type == 0)
+               {       // Its a standard preset
                        gchar *desc;
                        data = g_malloc(sizeof(presets_data_t));
-                       data->name = g_strdup(standard[ii]);
-                       data->keyFile = standardKeyFile;
+                       data->name = g_strdup(presets[ii]);
+                       data->keyFile = presetsKeyFile;
                        data->custom = FALSE;
                        data->defalt = FALSE;
                        if ((def_name != NULL) && (strcmp(def_name, data->name) == 0))
                        {
                                data->defalt = TRUE;
                        }
-                       desc = g_key_file_get_string(standardKeyFile, standard[ii], "preset_description", NULL);
+                       desc = g_key_file_get_string(presetsKeyFile, presets[ii], "preset_description", NULL);
                        data->description = desc;
                        presetsList = g_list_append(presetsList, data);
                }
        }
-       for (ii = 0; ii < clength; ii++)
+       for (ii = 0; ii < length; ii++)
        {
-               gchar *desc;
-               data = g_malloc(sizeof(presets_data_t));
-               data->name = g_strdup(custom[ii]);
-               data->keyFile = customKeyFile;
-               data->custom = TRUE;
-               data->defalt = FALSE;
-               if ((def_name != NULL) && (strcmp(def_name, data->name) == 0))
-               {
-                       data->defalt = TRUE;
+               gint type;
+               GError *err = NULL;
+               type = g_key_file_get_integer(presetsKeyFile, presets[ii], "preset_type", &err);
+               if (err || type != 0)
+               {       // Its a custom preset
+                       gchar *desc;
+                       data = g_malloc(sizeof(presets_data_t));
+                       data->name = g_strdup(presets[ii]);
+                       data->keyFile = presetsKeyFile;
+                       data->custom = TRUE;
+                       data->defalt = FALSE;
+                       if ((def_name != NULL) && (strcmp(def_name, data->name) == 0))
+                       {
+                               data->defalt = TRUE;
+                       }
+                       desc = g_key_file_get_string(presetsKeyFile, presets[ii], "preset_description", NULL);
+                       data->description = desc;
+                       presetsList = g_list_append(presetsList, data);
                }
-               desc = g_key_file_get_string(customKeyFile, custom[ii], "preset_description", NULL);
-               data->description = desc;
-               presetsList = g_list_append(presetsList, data);
        }
-       g_strfreev(custom);
-       g_strfreev(standard);
+       g_strfreev(presets);
 }
 
 static void
@@ -1488,44 +1476,95 @@ ghb_prefs_load(signal_user_data_t *ud)
 }
 
 void
-ghb_presets_load(signal_user_data_t *ud)
+ghb_presets_reload(signal_user_data_t *ud)
 {
-       const gchar *dir;
        gchar *config;
-       GHashTable *settings = ud->settings;
+       GKeyFile *keyFile;
 
-       g_debug("ghb_presets_load()\n");
-       customKeyFile = g_key_file_new();
-       standardKeyFile = g_key_file_new();
-       dir = g_get_user_config_dir();
-       config = g_strdup_printf ("%s/ghb/custom_presets", dir);
-       if (g_file_test(config, G_FILE_TEST_IS_REGULAR))
+       g_debug("ghb_presets_reload()\n");
+       keyFile = g_key_file_new();
+
+       config = g_strdup_printf ("./standard_presets");
+       if (!g_file_test(config, G_FILE_TEST_IS_REGULAR))
        {
-               g_key_file_load_from_file( customKeyFile, config, 
-                                                                 G_KEY_FILE_KEEP_COMMENTS, NULL);
+               g_free(config);
+       
+               const gchar* const *dirs;
+               gint ii;
+               dirs = g_get_system_data_dirs();
+               if (dirs != NULL)
+               {
+                       for (ii = 0; dirs[ii] != NULL; ii++)
+                       {
+                               config = g_strdup_printf("%s/ghb/standard_presets", dirs[ii]);
+                               if (g_file_test(config, G_FILE_TEST_IS_REGULAR))
+                               {
+                                       break;
+                               }
+                               g_free(config);
+                               config = NULL;
+                       }
+               }
        }
-       g_free(config);
-       // Try current dir first. Makes testing prior to installation easier
-       if (g_file_test("./standard_presets", G_FILE_TEST_IS_REGULAR))
+       if (config != NULL)
        {
-               g_key_file_load_from_file( standardKeyFile, "./standard_presets", 
+               gchar **groups, **keys;
+               gchar *value;
+               gint ii, jj;
+
+               g_key_file_load_from_file( keyFile, config, 
                                                                  G_KEY_FILE_KEEP_COMMENTS, NULL);
+               // Merge the keyfile contents into our presets
+               groups = g_key_file_get_groups(keyFile, NULL);
+               // First remove any existing groups with the same names
+               for (ii = 0; groups[ii] != NULL; ii++)
+               {
+                       g_key_file_remove_group(presetsKeyFile, groups[ii], NULL);
+               }
+               for (ii = 0; groups[ii] != NULL; ii++)
+               {
+                       keys = g_key_file_get_keys(keyFile, groups[ii], NULL, NULL);
+                       for (jj = 0; keys[jj] != NULL; jj++)
+                       {
+                               GError *err = NULL;
+                               value = g_key_file_get_string(
+                                       keyFile, groups[ii], keys[jj], &err);
+                               if (value && !err)
+                               {
+                                       g_key_file_set_string(
+                                               presetsKeyFile, groups[ii], keys[jj], value);
+                               }
+                               if (value) g_free(value);
+                       }
+                       g_strfreev(keys);
+               }
+               g_strfreev(groups);
        }
-       else
+       g_key_file_free(keyFile);
+       build_presets_list(ud->settings);
+}
+
+void
+ghb_presets_load(signal_user_data_t *ud)
+{
+       const gchar *dir;
+       gchar *config;
+
+       g_debug("ghb_presets_load()\n");
+       presetsKeyFile = g_key_file_new();
+       dir = g_get_user_config_dir();
+       config = g_strdup_printf ("%s/ghb/presets", dir);
+
+       if (!g_file_test(config, G_FILE_TEST_IS_REGULAR))
        {
-               // Try users config dir
-               config = g_strdup_printf ("%s/ghb/standard_presets", dir);
-               if (g_file_test(config, G_FILE_TEST_IS_REGULAR))
+               g_free(config);
+               config = g_strdup_printf ("./standard_presets");
+               if (!g_file_test(config, G_FILE_TEST_IS_REGULAR))
                {
-                       g_key_file_load_from_file( standardKeyFile, config, 
-                                                                         G_KEY_FILE_KEEP_COMMENTS, NULL);
                        g_free(config);
-               }
-               else
-               {
+               
                        const gchar* const *dirs;
                        gint ii;
-                       g_free(config);
                        dirs = g_get_system_data_dirs();
                        if (dirs != NULL)
                        {
@@ -1534,23 +1573,27 @@ ghb_presets_load(signal_user_data_t *ud)
                                        config = g_strdup_printf("%s/ghb/standard_presets", dirs[ii]);
                                        if (g_file_test(config, G_FILE_TEST_IS_REGULAR))
                                        {
-                                               g_key_file_load_from_file( standardKeyFile, config, 
-                                                                                                 G_KEY_FILE_KEEP_COMMENTS, NULL);
                                                break;
                                        }
                                        g_free(config);
+                                       config = NULL;
                                }
                        }
                }
        }
-       build_presets_list(settings);
+       if (config != NULL)
+       {
+               g_key_file_load_from_file( presetsKeyFile, config, 
+                                                                 G_KEY_FILE_KEEP_COMMENTS, NULL);
+       }
+       build_presets_list(ud->settings);
 }
 
 static void
 presets_store()
 {
        g_debug("presets_store ()\n");
-       store_key_file(customKeyFile, "custom_presets");
+       store_key_file(presetsKeyFile, "presets");
 }
 
 typedef struct
@@ -1609,7 +1652,7 @@ ghb_settings_save(signal_user_data_t *ud, const gchar *name)
 
        g_debug("ghb_settings_save ()\n");
        ski.name = name;
-       ski.keyFile = customKeyFile;
+       ski.keyFile = presetsKeyFile;
        if (ghb_settings_get_bool(ud->settings, "allow_tweaks"))
        {
                const gchar *str;
@@ -1621,6 +1664,8 @@ ghb_settings_save(signal_user_data_t *ud, const gchar *name)
                        ghb_settings_set_string(ud->settings, "denoise", str);
        }
        ski.autoscale = ghb_settings_get_bool (ud->settings, "autoscale");
+       g_key_file_remove_group(presetsKeyFile, name, NULL);
+       ghb_settings_set_string(ud->settings, "preset_type", "1");
        g_hash_table_foreach(ud->settings, store_to_key_file, &ski);
        presets_store();
        build_presets_list(ud->settings);
@@ -1629,34 +1674,15 @@ ghb_settings_save(signal_user_data_t *ud, const gchar *name)
        ud->dont_clear_presets = FALSE;
 }
 
-// Checks to see if the preset is in standard presets
-// I allow standard to be overridden by adding a preset with the
-// same name to the custom list.  So to determine if the named 
-// preset is standard, I must first check to see if is in the
-// custom list.
-gboolean
-ghb_presets_is_standard(const gchar *name)
-{
-       g_debug("ghb_presets_is_standard()\n");
-       if (g_key_file_has_group(customKeyFile, name))
-       {
-               // The preset is in the custom list, so it
-               // can not be a standard.
-               return FALSE;
-       }
-       return g_key_file_has_group(standardKeyFile, name);
-}
-
-// This function will not remove presets from the standard preset list.
 // Return false if attempt is made.
 gboolean
 ghb_presets_remove(GHashTable *settings, const gchar *name)
 {
        g_debug("ghb_presets_remove()\n");
-       if (g_key_file_has_group(customKeyFile, name))
+       if (g_key_file_has_group(presetsKeyFile, name))
        {
                g_debug("\t removing %s\n", name);
-               g_key_file_remove_group(customKeyFile, name, NULL);
+               g_key_file_remove_group(presetsKeyFile, name, NULL);
                presets_store();
                build_presets_list(settings);
                return TRUE;
index e136a5003781654fb03f238de166b415e8cbbf8e..25b9d6310d5bbd912f0af037636640caf1248202 100644 (file)
@@ -107,13 +107,13 @@ int ghb_ui_update(signal_user_data_t *ud, const gchar *key, const gchar *value);
 int ghb_ui_update_int(signal_user_data_t *ud, const gchar *key, gint ivalue);
 void ghb_settings_save(signal_user_data_t *ud, const gchar *name);
 void ghb_presets_load(signal_user_data_t *ud);
+void ghb_presets_reload(signal_user_data_t *ud);
 void ghb_set_preset(signal_user_data_t *ud, const gchar *name);
 void ghb_update_from_preset( signal_user_data_t *ud, 
                                                        const gchar *name, const gchar *key);
 gchar** ghb_presets_get_names();
 gchar** ghb_presets_get_descriptions();
 const gchar* ghb_presets_get_name(gint index);
-gboolean ghb_presets_is_standard(const gchar *name);
 gboolean ghb_presets_remove(GHashTable *settings, const gchar *name);
 void ghb_presets_revert(signal_user_data_t *ud, const gchar *name);
 GdkColor* ghb_presets_color(gboolean modified);
index b0056bc766cd93973a22532824b8fb0cca443d73..0a8e641f3d88b809b5875d969c5e3f5063f6e284 100755 (executable)
@@ -1,6 +1,7 @@
 
 [Animation]
 preset_description=HandBrake's settings for cartoons, anime, and CGI.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -34,6 +35,7 @@ x264_options=ref=5:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid
 
 [AppleTV]
 preset_description=HandBrake's settings for the AppleTV, including Dolby Digital 5.1 AC3 sound. Provides a good balance between quality and file size, and optimizes performance.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac,ac3
 pref_audio_bitrate=160,160
@@ -66,6 +68,7 @@ x264_options=bframes=3:ref=1:subme=5:me=umh:no-fast-pskip=1:trellis=1:cabac=0
 
 [Bedlam]
 preset_description=HandBrake's settings maxed out for slowest encoding and highest quality. Use at your own risk. So slow it's not just insane...it's a trip to the looney bin.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=ac3
 pref_audio_bitrate=160
@@ -99,6 +102,7 @@ x264_options=ref=16:mixed-refs:bframes=16:bime:weightb:b-rdo:direct=auto:b-pyram
 
 [Blind]
 preset_description=HandBrake's preset for impatient people who don't care about picture quality.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=128
@@ -132,6 +136,7 @@ x264_options=
 
 [Broke]
 preset_description=HandBrake's preset for people without a lot of money to waste on hard drives. Tries to maximize quality for burning to CDs, so you can party like it's 1999.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=128
@@ -165,6 +170,7 @@ x264_options=ref=3:mixed-refs:bframes=16:bime:weightb:b-rdo:b-pyramid:direct=aut
 
 [Classic]
 preset_description=HandBrake's traditional, faster, lower-quality settings.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -197,6 +203,7 @@ x264_options=
 
 [Constant Quality Rate]
 preset_description=HandBrake's preset for consistently excellent quality in one pass, with the downside of entirely unpredictable file sizes and bitrates.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=ac3
 pref_audio_bitrate=160
@@ -230,6 +237,7 @@ x264_options=ref=3:mixed-refs:bframes=3:b-pyramid:b-rdo:bime:weightb:filter=-2,-
 
 [Deux Six Quatre]
 preset_description=HandBrake's preset for true high profile x264 quality. A good balance of quality and speed, based on community standards found in the wild. This preset will give you a much better sense of x264's capabilities than vanilla main profile.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=ac3
 pref_audio_bitrate=160
@@ -263,6 +271,7 @@ x264_options=ref=5:mixed-refs:bframes=3:bime:weightb:b-rdo:b-pyramid:me=umh:subm
 
 [Film]
 preset_description=HandBrake's preset for feature films.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=ac3
 pref_audio_bitrate=160
@@ -296,6 +305,7 @@ x264_options=ref=3:mixed-refs:bframes=6:bime:weightb:b-rdo:direct=auto:b-pyramid
 
 [iPhone / iPod Touch]
 preset_description=HandBrake's settings for the iPhone and iPod Touch.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=128
@@ -329,6 +339,7 @@ x264_options=level=30:cabac=0:ref=1:analyse=all:me=umh:subme=6:no-fast-pskip=1:t
 
 [iPod High-Rez]
 preset_description=HandBrake's high resolution settings for the iPod. Good video quality, great for viewing on a TV using your iPod
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -362,6 +373,7 @@ x264_options=level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:
 
 [iPod Low-Rez]
 preset_description=HandBrake's low resolution settings for the iPod. Optimized for great playback on the iPod screen, with smaller file size.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -395,6 +407,7 @@ x264_options=level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:a
 
 [Normal]
 preset_description=HandBrake's normal, default settings.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -428,6 +441,7 @@ x264_options=ref=2:bframes=2:subme=5:me=umh
 
 [PSP]
 preset_description=HandBrake's settings for the Sony PlayStation Portable.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=128
@@ -460,6 +474,7 @@ x264_options=
 
 [PS3]
 preset_description=HandBrake's settings for the Sony PlayStation 3.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -491,6 +506,7 @@ x264_options=level=41:subme=5:me=umh
 
 [QuickTime]
 preset_description=HandBrake's high quality settings for use with QuickTime. It can be slow, so use it when the Normal preset doesn't look good enough.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -524,6 +540,7 @@ x264_options=ref=3:mixed-refs:bframes=3:bime:weightb:b-rdo:direct=auto:me=umh:su
 
 [Television]
 preset_description=HandBrake's settings for video from television.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160
@@ -557,6 +574,7 @@ x264_options=ref=3:mixed-refs:bframes=6:bime:weightb:direct=auto:b-pyramid:me=um
 
 [Xbox 360]
 preset_description=HandBrake's settings for the Microsoft Xbox 360.
+preset_type=0
 subtitle_lang=none
 pref_audio_codec=faac
 pref_audio_bitrate=160