From: Arun Persaud Date: Wed, 20 Jan 2010 07:38:57 +0000 (-0800) Subject: more work on the MoveHistory X-Git-Tag: gtk-20100206~15 X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=commitdiff_plain;h=4626ea070c35a9c59ae231280f96e215dfc9205f more work on the MoveHistory 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. --- diff --git a/gtk-interface.xml b/gtk-interface.xml index 3b2f986..c1bb87f 100644 --- a/gtk-interface.xml +++ b/gtk-interface.xml @@ -44,8 +44,12 @@ GDK_BUTTON_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK MoveHistoryStore False + True False 0 + True + + Move diff --git a/xboard.c b/xboard.c index 2e7d470..343e0e6 100644 --- 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); diff --git a/xhistory.c b/xhistory.c index cd572db..fda7290 100644 --- a/xhistory.c +++ b/xhistory.c @@ -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);