*** empty log message ***
[m17n/m17n-im-config.git] / src / mim-config.c
index 5c5218a..2fb25fc 100644 (file)
@@ -78,12 +78,14 @@ get_mim_status (MSymbol lang, MSymbol name)
       MPlist *p = mplist_value (plist);
       MSymbol status_symbol;
 
-      status = MIM_STATUS_DEFAULT;
       p = mplist_next (mplist_next (p));
       status_symbol = mplist_value (p);
-      if (status_symbol != Mnil && status_symbol != Minherited)
-       return (status_symbol == Mcustomized
-               ? MIM_STATUS_CUSTOMIZED : MIM_STATUS_MODIFIED);
+      if (status_symbol == Mconfigured)
+       return MIM_STATUS_MODIFIED;
+      if (status_symbol == Mcustomized)
+       status = MIM_STATUS_CUSTOMIZED;
+      else if (status == MIM_STATUS_NO)
+       status = MIM_STATUS_DEFAULT;
     }
   for (plist = minput_get_command (lang, name, Mnil);
        plist && mplist_key (plist) != Mnil; plist = mplist_next (plist))
@@ -91,12 +93,14 @@ get_mim_status (MSymbol lang, MSymbol name)
       MPlist *p = mplist_value (plist);
       MSymbol status_symbol;
 
-      status = MIM_STATUS_DEFAULT;
       p = mplist_next (mplist_next (p));
       status_symbol = mplist_value (p);
-      if (status_symbol != Mnil && status_symbol != Minherited)
-       return (status_symbol == Mcustomized
-               ? MIM_STATUS_CUSTOMIZED : MIM_STATUS_MODIFIED);
+      if (status_symbol == Mconfigured)
+       return MIM_STATUS_MODIFIED;
+      if (status_symbol == Mcustomized)
+       status = MIM_STATUS_CUSTOMIZED;
+      else if (status == MIM_STATUS_NO)
+       status = MIM_STATUS_DEFAULT;
     }
   return status;
 }
@@ -158,61 +162,58 @@ tree_expanded_cb (GtkTreeView *tree, GtkTreeIter *parent,
     }
 }
 
+extern GtkWidget *create_variable_entries (GtkTooltips *tip, MSymbol lang,
+                                              MSymbol name);
+extern GtkWidget *create_command_entries (GtkTooltips *tip, MSymbol lang,
+                                             MSymbol name);
+
 static void
 edit_im (GtkTreeView *tree, MSymbol lang, MSymbol name)
 {
-  GtkWidget *dialog, *label;
+  GtkWidget *dialog, *notebook, *scrolled, *vbox, *label;
+  GtkTooltips *tip = gtk_tooltips_new ();
   gint response;
+  MPlist *plist;
 
   dialog = (gtk_dialog_new_with_buttons
-           (_("Edit"),
+           (name == Mnil ? "global" : msymbol_name (name),
             GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tree))),
             GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
-            _("Default"), 0,
-            GTK_STOCK_REVERT_TO_SAVED, GTK_RESPONSE_NO,
-            GTK_STOCK_EDIT, GTK_RESPONSE_YES,
-            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+            GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
             NULL));
-  label = gtk_label_new (msymbol_name (name));
-  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), label);
-  gtk_widget_show_all (dialog);
-  response = gtk_dialog_run (GTK_DIALOG (dialog));
-  if (response != GTK_RESPONSE_CANCEL
-      && lang == Mt && (name == Mnil || name == msymbol ("unicode")))
-    {
-      MSymbol variable = msymbol (name == Mnil ? "candidates-group-size"
-                                 : "prompt");
+  gtk_widget_set_size_request (dialog, 500, 300);
 
-      if (response == GTK_RESPONSE_NO)
-       {
-         minput_config_variable (lang, name, variable, NULL);
-       }
-      else if (response == 0)
-       {
-         MPlist *plist = mplist ();
-
-         minput_config_variable (lang, name, variable, plist);
-         m17n_object_unref (plist);
-       }
-      else
-       {
-         MPlist *plist = mplist ();
+  notebook = gtk_notebook_new ();
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
 
-         if (name == Mnil)
-           {
-             mplist_add (plist, Minteger, (void *) 3);
-           }
-         else
-           {
-             MText *mt = mtext_from_data (">>", 2, MTEXT_FORMAT_US_ASCII);
-             mplist_add (plist, Mtext, mt);
-             m17n_object_unref (mt);
-           }
-         minput_config_variable (lang, name, variable, plist);
-         m17n_object_unref (plist);
-       }
-    }
+  /* Variables' page */
+  scrolled = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  label = gtk_label_new_with_mnemonic ("_Variables");
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), scrolled, label);
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled),
+                                        vbox);
+  gtk_box_pack_start (GTK_BOX (vbox),
+                     create_variable_entries (tip, lang, name),
+                     FALSE, FALSE, 0);
+
+  /* Commands' pages */
+  scrolled = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  label = gtk_label_new_with_mnemonic ("Co_mmands");
+  gtk_notebook_append_page (GTK_NOTEBOOK (notebook), scrolled, label);
+  vbox = gtk_vbox_new (FALSE, 0);
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled),
+                                        vbox);
+  gtk_box_pack_start (GTK_BOX (vbox),
+                     create_command_entries (tip, lang, name),
+                     FALSE, FALSE, 0);
 
+  gtk_widget_show_all (dialog);
+  gtk_dialog_run (GTK_DIALOG (dialog));
   gtk_widget_destroy (dialog);
 }
 
@@ -515,7 +516,7 @@ mim_config_new (GCallback func, gpointer data)
 
   renderer = gtk_cell_renderer_text_new ();
   column = (gtk_tree_view_column_new_with_attributes
-           (_("status"), renderer, "text", COL_STATUS_STR, NULL));
+           (_("Status"), renderer, "text", COL_STATUS_STR, NULL));
   gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
 
   g_signal_connect (G_OBJECT (tree), "row-expanded",