--- menu_trim.module.02-settings	2008-03-31 20:32:14.000000000 -0400
+++ menu_trim.module.03-admin_settings	2008-03-31 22:16:05.000000000 -0400
@@ -68,7 +68,7 @@ function menu_trim_menu($may_cache) {
   if ($may_cache) {
     $items[] = array(
       'path' => 'admin/settings/menu_trim',
-      'title' => t('Menu Trim'),
+      'title' => t('Menu trim'),
       'description' => t('Choose what menus need trimming.'),
       'callback' => 'drupal_get_form',
       'callback arguments' => array('menu_trim_admin_settings'),
@@ -85,22 +85,99 @@ function menu_trim_menu($may_cache) {
  */
 function menu_trim_admin_settings() {
   $menus = menu_get_root_menus();
+  $menu = _menu_trim_settings_filter_menu(_menu_trim_settings_get());
+
+
   foreach ($menus as $mid => $title) {
-    $form['menu_trim']['menu_trim_menu_'. $mid] = array(
-      '#type' => 'select',
+    $form[$mid] = array(
+      '#tree' => TRUE,
+    );
+    $form[$mid]['h_mid'] = array(
+      '#type' => 'hidden',
+      '#value' => $mid,
+    );
+    // Needed for error identification
+    $form[$mid]['h_tt'] = array(
+      '#type' => 'hidden',
+      '#value' => check_plain($title),
+    );
+    $form[$mid]['tt'] = array(
+      '#type' => 'item',
       '#title' => check_plain($title),
+    );
+    $form[$mid]['mthd'] = array(
+      '#type' => 'select',
       '#options' => array(
         MENU_TRIM_DISABLED => t('Never trim this menu'),
         MENU_TRIM_ENABLED_SHOW_MENU_ALWAYS => t('Allow trimming of this menu'),
         MENU_TRIM_ENABLED_SHOW_MENU_ACTIVE => t('Allow trimming of this menu, hide menu when no item is active'),
       ),
-      '#default_value' => variable_get('menu_trim_menu_'. $mid, MENU_TRIM_DISABLED),
-    );
+      '#default_value' => $menu[$mid]['mthd'] ? $menu[$mid]['mthd'] : MENU_TRIM_DISABLED,
+    );
+    $form[$mid]['bl_tt'] = array(
+      '#type' => 'checkbox',
+      '#default_value' => $menu[$mid]['bl_tt'] ? $menu[$mid]['bl_tt'] : FALSE,
+    );
+    $form[$mid]['min_lvl'] = array(
+      '#type' => 'textfield',
+      '#default_value' => $menu[$mid]['min_lvl'],
+      '#size' => 2,
+      '#maxlength' => 2,
+    );
+    $form[$mid]['min_lmt'] = array(
+      '#type' => 'checkbox',
+      '#default_value' => $menu[$mid]['min_lmt'] ? $menu[$mid]['min_lmt'] : FALSE,
+    );
   }
-
+
   return system_settings_form($form);
 }
-
+
+function theme_menu_trim_admin_settings($form) {
+  foreach ($form as $key => $element) {
+    if (is_array($element['h_mid'])) {
+      $rows[] = array(drupal_render($form[$key]['h_mid']), drupal_render($form[$key]['tt']), drupal_render($form[$key]['mthd']), drupal_render($form[$key]['bl_tt']), drupal_render($form[$key]['min_lvl']), drupal_render($form[$key]['min_lmt']));
+    }
+  }
+  // First item must have colspan to include hidden items
+  $header = array(array('data' => t('Menu'), 'colspan' => '2'), array('data' => t('Trim method')), array('data' => t('Block title')), array('data' => t('Min. Level')), array('data' => t('Limit')));
+  $output = theme('table', $header, $rows);
+  $output .= drupal_render($form);
+
+  return $output;
+}
+
+/**
+ * Form API callback to validate the upload settings form.
+ */
+function menu_trim_admin_settings_validate($form_id, $form_values) {
+  foreach ($form_values as $key => $element) {
+    if ($element['min_lvl'] && is_array($element)) {
+      $min_level = $element['min_lvl'];
+      // Validate minimum level field
+      if (!is_numeric($min_level) || ($min_level <= 0)) {
+        form_set_error($key .'][min_lvl', t('The %menu menu minimum level must be an integer greater than zero.', array('%menu' => $element['h_tt'])));
+      }
+    }
+  }
+}
+
+/**
+ * Save language settings in variable
+ */
+function menu_trim_admin_settings_submit($form_id, $form_values) {
+  $menu = array();
+  foreach ($form_values as $element) {
+    // Find appropriate element
+    if (is_array($element) && isset($element['h_mid'])) {
+      $menu[$element['h_mid']] = array('mthd' => $element['mthd'], 'bl_tt' => $element['bl_tt'], 'min_lvl' => $element['min_lvl'], 'min_lmt' => $element['min_lmt']);
+    }
+  }
+  if (!$menu || !_menu_trim_settings_set($menu)) {
+    form_set_error('', t('The settings did not save properly.'));
+  }
+}
+
