gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnugo-devel] cool view.pike feature


From: Arend Bayer
Subject: [gnugo-devel] cool view.pike feature
Date: Tue, 27 Sep 2005 21:46:28 +0200 (CEST)



This patch allows view.pike to be started with a list of several testcases:
./view.pike owl:1 owl:2

It will then allow to go forward and backward in this list with two (primitive)
buttons.
Also, the text fields "New Engine" and "New Testcase" now react to hitting
Enter.

By the way, is anybody not yet using single_window_mode (the default)?
It would ease code maintainance if we could remove the mode with
separate windows.


Arend

Index: regression/view.pike
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/view.pike,v
retrieving revision 1.20
diff -u -p -r1.20 view.pike
--- regression/view.pike        12 Sep 2005 23:13:43 -0000      1.20
+++ regression/view.pike        27 Sep 2005 09:40:24 -0000
@@ -433,7 +433,7 @@ string font_filename = "";
 
 int main(int argc, array(string) argv)
 {
-    if (argc != 2) {
+    if (argc < 2) {
        werror("Usage: %s TEST-FILE:TEST-NUMBER\n", basename(argv[0]));
        return 1;
     }
@@ -449,13 +449,14 @@ int main(int argc, array(string) argv)
     }
 
     GTK.setup_gtk(argv);
-    Controller controller = Controller(engine, argv[1]);
+    Controller controller = Controller(engine, argv[1..]);
 
     GTK.main();
 
     return 0;
 }
 
+
 array(string) recursive_find_files(string dir, string suffix)
 {
     array(string) found_files = ({});
@@ -1274,12 +1275,16 @@ class Controller
     GTK.Entry sgf_filename_entry, sgf_viewer_entry;
     GTK.Table sgf_stuff;
     GTK.Button new_testcase_button, new_engine_button;
+    GTK.Button next_testcase_button, prev_testcase_button;
     GTK.Entry new_testcase_entry, engine_path_entry, engine_name_entry;
     
     string delta_territory_move = "PASS";
     string move_influence_move = "PASS";
     string first_vertex = "";
 
+    int testcase_index = 0;
+
+    array(string) testcases;
     string testcase_name;
     string testcase_command;
     string result;
@@ -1294,14 +1299,15 @@ class Controller
 
     static mixed nasty_signal_id;
 
-    static void create(SimpleGtp engine_, string testcase)
+    static void create(SimpleGtp engine_, array(string) testcases_)
     {
-       if (!excerpt_testcase(testcase, engine_))
+       testcases = testcases_;
+       if (!excerpt_testcase(testcases[0], engine_))
        {
            werror("Failed to load testcase.\n");
            exit(1);
        }
-       testcase_name = testcase;
+       testcase_name = testcases[0];
 
        testcase_label = (GTK.Label(full_testcase * "\n")
                          ->set_justify(GTK.JUSTIFY_LEFT));
@@ -1343,7 +1349,7 @@ class Controller
                             ->add(controller_notebook));
        }
 
-       main_window->set_title(testcase);
+       main_window->set_title(testcases[0]);
        main_window->signal_connect_new("destroy", quit);
 
        if (has_prefix(testcase_command, "reg_genmove")
@@ -1482,10 +1488,18 @@ class Controller
                     ->attach_defaults(sgf_viewer_entry, 1, 2, 1, 2);
 
        new_testcase_entry = GTK.Entry();
-        new_testcase_entry->set_text(testcase);
+        new_testcase_entry->set_text(testcases[0]);
         new_testcase_entry->set_editable(1);
         new_testcase_button = GTK.Button("Load new testcase");
         new_testcase_button->signal_connect_new("clicked", new_testcase);
+       new_testcase_entry->signal_connect_new("activate", new_testcase);
+       if (sizeof(testcases)) {
+           prev_testcase_button = GTK.Button("Previous testcase");
+           prev_testcase_button->signal_connect_new("clicked", prev_testcase);
+           prev_testcase_button->set_sensitive(0);
+           next_testcase_button = GTK.Button("Next testcase");
+           next_testcase_button->signal_connect_new("clicked", next_testcase);
+       }
        engine_path_entry = GTK.Entry();
        engine_path_entry->set_text("../interface/gnugo");
        engine_path_entry->set_editable(1);
@@ -1496,6 +1510,7 @@ class Controller
            engine_name_entry->set_editable(1);
        }
 
+       engine_path_entry->signal_connect_new("activate", select_new_engine);
        new_engine_button = GTK.Button("Start new engine");
        new_engine_button->signal_connect_new("clicked", select_new_engine);
 
@@ -1573,6 +1588,12 @@ class Controller
                                 ->add(new_engine_button), 0, 0, 0)
                     ->pack_start(new_testcase_entry, 0, 0, 0)
                     ->pack_start(new_testcase_button, 0, 0, 0);
+       if  (sizeof(testcases) > 1) {
+           GTK.Widget next_prev
+               = (GTK.Hbox(0, 12)->pack_start(prev_testcase_button, 0, 0, 0)
+                                 ->pack_start(next_testcase_button, 0, 0, 0));
+           engines_page->pack_start(next_prev, 0, 0, 0);
+       }
        controller_notebook->append_page(engines_page->set_border_width(12),
                                         GTK.Label("engines"));
 
@@ -1847,10 +1868,8 @@ class Controller
        }
     }
 
-
-    static void new_testcase()
+    static void this_new_testcase(string new_testcase)
     {
-        string new_testcase = new_testcase_entry->get_text();
         werror("Trying to load new testcase %s.", new_testcase);
         if (!excerpt_testcase(new_testcase, viewers[0]->engine))
         {
@@ -1868,6 +1887,35 @@ class Controller
            controller_notebook->show_all();
            controller_notebook->set_page(1);
        }
+    }
+
+    static void new_testcase()
+    {
+        this_new_testcase(new_testcase_entry->get_text());
+    }
+
+    static void next_testcase()
+    {
+       if (testcase_index >= sizeof(testcases) - 1)
+           return;
+       testcase_index += 1;
+       prev_testcase_button->set_sensitive(1);
+       if (testcase_index == sizeof(testcases) - 1)
+           next_testcase_button->set_sensitive(0);
+       this_new_testcase(testcases[testcase_index]);
+    }
+
+    static void prev_testcase()
+    {
+       if (testcase_index == 0)
+           return;
+       testcase_index -= 1;
+       if (!testcases)
+           werror("Error handling list of test cases!\n");
+       next_testcase_button->set_sensitive(1);
+       if (testcase_index == 0)
+           prev_testcase_button->set_sensitive(0);
+       this_new_testcase(testcases[testcase_index]);
     }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]