more work on the MoveHistory
authorArun Persaud <arun@nubati.net>
Wed, 20 Jan 2010 07:38:57 +0000 (23:38 -0800)
committerArun Persaud <arun@nubati.net>
Wed, 20 Jan 2010 07:38:57 +0000 (23:38 -0800)
clicking on a move almost works... crashed when clicking on a black move. Need to implement keys still.

Also some better debug info in for gtk-builder in main.

gtk-interface.xml
xboard.c
xhistory.c

index 3b2f986..c1bb87f 100644 (file)
                 <property name="events">GDK_BUTTON_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
                 <property name="model">MoveHistoryStore</property>
                 <property name="headers_clickable">False</property>
+                <property name="rules_hint">True</property>
                 <property name="enable_search">False</property>
                 <property name="search_column">0</property>
+                <property name="hover_selection">True</property>
+                <signal name="button_press_event" handler="HistoryMoveProc"/>
+                <signal name="key_press_event" handler="HistoryMoveProc"/>
                 <child>
                   <object class="GtkTreeViewColumn" id="Move">
                     <property name="title">Move</property>
index 2e7d470..343e0e6 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -1445,57 +1445,57 @@ main(argc, argv)
     /* test if everything worked ok */
 
     GUI_Window = GTK_WIDGET (gtk_builder_get_object (builder, "MainWindow"));
-    if(!GUI_Window) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Window) printf("Error: gtk_builder didn't work (MainWindow)!\n");
 
     GUI_Aspect = GTK_WIDGET (gtk_builder_get_object (builder, "Aspectframe"));
-    if(!GUI_Aspect) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Aspect) printf("Error: gtk_builder didn't work (Aspectframe)!\n");
 
     GUI_Menubar  = GTK_WIDGET (gtk_builder_get_object (builder, "MenuBar"));
-    if(!GUI_Menubar) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Menubar) printf("Error: gtk_builder didn't work (MenuBar)!\n");
     GUI_Timer  = GTK_WIDGET (gtk_builder_get_object (builder, "Timer"));
-    if(!GUI_Timer) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Timer) printf("Error: gtk_builder didn't work (Timer)!\n");
     GUI_Buttonbar  = GTK_WIDGET (gtk_builder_get_object (builder, "ButtonBar"));
-    if(!GUI_Buttonbar) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Buttonbar) printf("Error: gtk_builder didn't work (ButtonBar)!\n");
     GUI_Board  = GTK_WIDGET (gtk_builder_get_object (builder, "Board"));
-    if(!GUI_Board) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Board) printf("Error: gtk_builder didn't work (Board)!\n");
 
     GUI_Whiteclock  = GTK_WIDGET (gtk_builder_get_object (builder, "WhiteClock"));
-    if(!GUI_Whiteclock) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Whiteclock) printf("Error: gtk_builder didn't work (WhiteClock)!\n");
 
     GUI_Blackclock  = GTK_WIDGET (gtk_builder_get_object (builder, "BlackClock"));
-    if(!GUI_Blackclock) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_Blackclock) printf("Error: gtk_builder didn't work (BlackClock)!\n");
 
     /* GTK lists stores*/
     LIST_MoveHistory = GTK_LIST_STORE (gtk_builder_get_object (builder, "MoveHistoryStore"));
-    if(!LIST_MoveHistory) printf("Error: gtk_builder didn't work!\n");
+    if(!LIST_MoveHistory) printf("Error: gtk_builder didn't work (MoveHistoryStore)!\n");
 
     LIST_GameList = GTK_LIST_STORE (gtk_builder_get_object (builder, "GameListStore"));
-    if(!LIST_GameList) printf("Error: gtk_builder didn't work!\n");
+    if(!LIST_GameList) printf("Error: gtk_builder didn't work (GameListStore)!\n");
 
     /* EditTags window */
     GUI_EditTags = GTK_WIDGET (gtk_builder_get_object (builder, "EditTags"));
-    if(!GUI_EditTags) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_EditTags) printf("Error: gtk_builder didn't work (EditTags)!\n");
     
     GUI_EditTagsTextArea = GTK_WIDGET (gtk_builder_get_object (builder, "EditTagsTextArea"));
-    if(!GUI_EditTagsTextArea) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_EditTagsTextArea) printf("Error: gtk_builder didn't work(EditTagsTextArea)!\n");
 
     /* move history and game list windows */
     GUI_History = GTK_WIDGET (gtk_builder_get_object (builder, "MoveHistory"));
-    if(!GUI_History) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_History) printf("Error: gtk_builder didn't work (MoveHistory)!\n");
 
     TREE_History = GTK_TREE_VIEW (gtk_builder_get_object (builder, "MoveHistoryView"));
-    if(!TREE_History) printf("Error: gtk_builder didn't work!\n");
+    if(!TREE_History) printf("Error: gtk_builder didn't work (MoveHistoryView)!\n");
 
     GUI_GameList = GTK_WIDGET (gtk_builder_get_object (builder, "GameList"));
-    if(!GUI_GameList) printf("Error: gtk_builder didn't work!\n");
+    if(!GUI_GameList) printf("Error: gtk_builder didn't work (GameList)!\n");
 
     TREE_Game = GTK_TREE_VIEW (gtk_builder_get_object (builder, "GameListView"));
-    if(!TREE_Game) printf("Error: gtk_builder didn't work!\n");
+    if(!TREE_Game) printf("Error: gtk_builder didn't work (GameListView)!\n");
 
 
     /* connect lists to views */
-    gtk_tree_view_set_model(TREE_History,GTK_TREE_MODEL(LIST_MoveHistory));
-    gtk_tree_view_set_model(TREE_Game,GTK_TREE_MODEL(LIST_GameList));
+    gtk_tree_view_set_model(TREE_History, GTK_TREE_MODEL(LIST_MoveHistory));
+    gtk_tree_view_set_model(TREE_Game,    GTK_TREE_MODEL(LIST_GameList));
 
     gtk_builder_connect_signals (builder, NULL);
 
index cd572db..fda7290 100644 (file)
@@ -61,6 +61,7 @@ extern char *getenv();
 
 extern GtkWidget               *GUI_History;
 extern GtkListStore            *LIST_MoveHistory;
+extern GtkTreeView             *TREE_History;
 
 String dots=" ... ";
 Position gameHistoryX, gameHistoryY;
@@ -77,20 +78,52 @@ HistoryPopDown(object, user_data)
   return;
 }
 
-void HistoryMoveProc(Widget w, XtPointer closure, XtPointer call_data)
+void 
+HistoryMoveProc(window, event, data)
+     GtkWindow *window;
+     GdkEvent *event;
+     gpointer data;
 {
-    int to;
-    /*
-    XawListReturnStruct *R = (XawListReturnStruct *) call_data;
-    if (w == hist->mvn || w == hist->mvw) {
-      to=2*R->list_index-1;
-      ToNrEvent(to);
-    }
-    else if (w == hist->mvb) {
-      to=2*R->list_index;
-      ToNrEvent(to);
+  int to; /* the move we want to go to */
+  
+  /* check if the mouse was clicked */
+  if(event->type == GDK_BUTTON_PRESS)
+    {  
+      GtkTreeViewColumn *column;
+      GtkTreePath *path;
+      GList *cols;
+      gint *indices;
+      gint row,col;
+      
+      /* can we convert this into an element of the history list? */
+      if(gtk_tree_view_get_path_at_pos(TREE_History,
+                                      (gint)event->button.x, (gint)event->button.y,
+                                      &path,&column,NULL,NULL))
+       {
+         /* find out which row and column the user clicked on */
+         indices = gtk_tree_path_get_indices(path);
+         row     = indices[0];
+         cols    = gtk_tree_view_get_columns(GTK_TREE_VIEW(column->tree_view));
+         col     = g_list_index(cols,(gpointer)column);
+         g_list_free(cols);
+         gtk_tree_path_free(path);
+         
+         printf("DEBUG: row %d col %d\n",row,col);
+
+
+         if(col)
+           {
+             /* user didn't click on the move number */
+
+             to = 2*row + col;
+             printf("DEBUG: going to %d\n",to);fflush(stdout);
+
+             /* set board to that move */
+             ToNrEvent(to);
+           }
+       }
     }
-    */
+  return;
 }
 
 
@@ -103,6 +136,8 @@ void HistorySet(char movelist[][2*MOVE_LEN],int first,int last,int current)
   /* TODO need to add highlights for current move */
   /* TODO need to add navigation by keyboard or mouse (double click on move) */
 
+  strcpy(movewhite,"");
+  strcpy(moveblack,"");
 
   /* first clear everything, do we need this? */
   gtk_list_store_clear(LIST_MoveHistory);