From: Arun Persaud Date: Mon, 18 Jan 2010 19:45:11 +0000 (-0800) Subject: started a bit on the GameList window X-Git-Tag: gtk-20100118~3 X-Git-Url: http://winboard.nl/cgi-bin?p=xboard.git;a=commitdiff_plain;h=585fc255780c435342bccf7edf2aba86bdf945ac started a bit on the GameList window --- diff --git a/gtk-interface.xml b/gtk-interface.xml index d5ef22a..3b2f986 100644 --- a/gtk-interface.xml +++ b/gtk-interface.xml @@ -12,6 +12,16 @@ + + + + + + + + + + 5 normal @@ -1364,4 +1374,119 @@ button2 + + 5 + normal + False + + + True + vertical + 2 + + + True + True + automatic + automatic + + + True + True + GDK_BUTTON_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + GameListStore + False + False + 0 + + + Game + + + + 1 + + + + + + + + + 1 + + + + + True + end + + + Load + True + True + True + + + False + False + 0 + + + + + Prev + True + True + True + + + False + False + 1 + + + + + Next + True + True + True + + + False + False + 2 + + + + + gtk-close + True + True + True + True + + + False + False + 3 + + + + + False + end + 0 + + + + + + LoadButton + PrevButton + NextButton + CloseButton + + diff --git a/interface.h b/interface.h index 38db60d..3ee8d15 100644 --- a/interface.h +++ b/interface.h @@ -4,6 +4,7 @@ GtkBuilder *builder=NULL; GtkWidget *GUI_Window=NULL; GtkWidget *GUI_Aspect=NULL; GtkWidget *GUI_History=NULL; +GtkWidget *GUI_GameList=NULL; GtkWidget *GUI_Board=NULL; GtkWidget *GUI_Whiteclock=NULL; GtkWidget *GUI_Blackclock=NULL; @@ -15,6 +16,7 @@ GtkWidget *GUI_EditTags=NULL; GtkWidget *GUI_EditTagsTextArea=NULL; GtkListStore *LIST_MoveHistory=NULL; +GtkListStore *LIST_GameList=NULL; gint boardWidth; gint boardHeight; diff --git a/xboard.c b/xboard.c index 6750a6f..a25dcdf 100644 --- a/xboard.c +++ b/xboard.c @@ -1453,6 +1453,9 @@ main(argc, argv) GUI_History = GTK_WIDGET (gtk_builder_get_object (builder, "MoveHistory")); if(!GUI_History) printf("Error: gtk_builder didn't work!\n"); + GUI_GameList = GTK_WIDGET (gtk_builder_get_object (builder, "GameList")); + if(!GUI_GameList) printf("Error: gtk_builder didn't work!\n"); + GUI_Menubar = GTK_WIDGET (gtk_builder_get_object (builder, "MenuBar")); if(!GUI_Menubar) printf("Error: gtk_builder didn't work!\n"); GUI_Timer = GTK_WIDGET (gtk_builder_get_object (builder, "Timer")); @@ -1471,6 +1474,9 @@ main(argc, argv) LIST_MoveHistory = GTK_LIST_STORE (gtk_builder_get_object (builder, "MoveHistoryStore")); if(!LIST_MoveHistory) printf("Error: gtk_builder didn't work!\n"); + LIST_GameList = GTK_LIST_STORE (gtk_builder_get_object (builder, "GameListStore")); + if(!LIST_GameList) printf("Error: gtk_builder didn't work!\n"); + /* EditTags window */ GUI_EditTags = GTK_WIDGET (gtk_builder_get_object (builder, "EditTags")); if(!GUI_EditTags) printf("Error: gtk_builder didn't work!\n"); @@ -3899,8 +3905,11 @@ int LoadGamePopUp(f, gameNumber, title) else if (!ListEmpty(&gameList) && ((ListGame *) gameList.tailPred)->number > 1) { - // TODO convert to GTK - // GameListPopUp(f, title); + /* we need an answer which game to load, so let's make it modal for a while*/ + gtk_window_set_modal(GTK_WINDOW(GUI_GameList) , TRUE); + GameListPopUp(f, title); + gtk_window_set_modal(GTK_WINDOW(GUI_GameList) , FALSE); + return TRUE; }; diff --git a/xgamelist.c b/xgamelist.c index 40294af..51827b6 100644 --- a/xgamelist.c +++ b/xgamelist.c @@ -22,6 +22,7 @@ #include "config.h" +#include #include #include #include @@ -90,6 +91,9 @@ extern char *getenv(); # define N_(s) s #endif +extern GtkWidget *GUI_GameList; +extern GtkListStore *LIST_GameList; + extern Widget formWidget, boardWidget, menuBarWidget, gameListShell; extern int squareSize; @@ -121,153 +125,7 @@ GameListCreate(name, callback, client_data) XtCallbackProc callback; XtPointer client_data; { - Arg args[16]; - Widget shell, form, viewport, listwidg, layout; - Widget b_load, b_loadprev, b_loadnext, b_close; - Dimension fw_width; - int j; - GameListClosure *glc = (GameListClosure *) client_data; - - j = 0; - XtSetArg(args[j], XtNwidth, &fw_width); j++; - XtGetValues(formWidget, args, j); - - j = 0; - XtSetArg(args[j], XtNresizable, True); j++; - XtSetArg(args[j], XtNallowShellResize, True); j++; -#if TOPLEVEL -// shell = gameListShell = -// XtCreatePopupShell(name, topLevelShellWidgetClass, -// shellWidget, args, j); -#else -// shell = gameListShell = -// XtCreatePopupShell(name, transientShellWidgetClass, -// shellWidget, args, j); -#endif - layout = - XtCreateManagedWidget(layoutName, formWidgetClass, shell, - layoutArgs, XtNumber(layoutArgs)); - j = 0; - XtSetArg(args[j], XtNborderWidth, 0); j++; - form = - XtCreateManagedWidget("form", formWidgetClass, layout, args, j); - - j = 0; - XtSetArg(args[j], XtNtop, XtChainTop); j++; - XtSetArg(args[j], XtNbottom, XtChainBottom); j++; - XtSetArg(args[j], XtNleft, XtChainLeft); j++; - XtSetArg(args[j], XtNright, XtChainRight); j++; - XtSetArg(args[j], XtNresizable, False); j++; - XtSetArg(args[j], XtNwidth, fw_width); j++; - XtSetArg(args[j], XtNallowVert, True); j++; - viewport = - XtCreateManagedWidget("viewport", viewportWidgetClass, form, args, j); - - j = 0; - XtSetArg(args[j], XtNlist, glc->strings); j++; - XtSetArg(args[j], XtNdefaultColumns, 1); j++; - XtSetArg(args[j], XtNforceColumns, True); j++; - XtSetArg(args[j], XtNverticalList, True); j++; - listwidg = - XtCreateManagedWidget("list", listWidgetClass, viewport, args, j); - XawListHighlight(listwidg, 0); - XtAugmentTranslations(listwidg, - XtParseTranslationTable(gameListTranslations)); - - j = 0; - XtSetArg(args[j], XtNfromVert, viewport); j++; - XtSetArg(args[j], XtNtop, XtChainBottom); j++; - XtSetArg(args[j], XtNbottom, XtChainBottom); j++; - XtSetArg(args[j], XtNleft, XtChainLeft); j++; - XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_load = - XtCreateManagedWidget(_("load"), commandWidgetClass, form, args, j); - XtAddCallback(b_load, XtNcallback, callback, client_data); - - j = 0; - XtSetArg(args[j], XtNfromVert, viewport); j++; - XtSetArg(args[j], XtNfromHoriz, b_load); j++; - XtSetArg(args[j], XtNtop, XtChainBottom); j++; - XtSetArg(args[j], XtNbottom, XtChainBottom); j++; - XtSetArg(args[j], XtNleft, XtChainLeft); j++; - XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_loadprev = - XtCreateManagedWidget(_("prev"), commandWidgetClass, form, args, j); - XtAddCallback(b_loadprev, XtNcallback, callback, client_data); - - j = 0; - XtSetArg(args[j], XtNfromVert, viewport); j++; - XtSetArg(args[j], XtNfromHoriz, b_loadprev); j++; - XtSetArg(args[j], XtNtop, XtChainBottom); j++; - XtSetArg(args[j], XtNbottom, XtChainBottom); j++; - XtSetArg(args[j], XtNleft, XtChainLeft); j++; - XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_loadnext = - XtCreateManagedWidget(_("next"), commandWidgetClass, form, args, j); - XtAddCallback(b_loadnext, XtNcallback, callback, client_data); - - j = 0; - XtSetArg(args[j], XtNfromVert, viewport); j++; - XtSetArg(args[j], XtNfromHoriz, b_loadnext); j++; - XtSetArg(args[j], XtNtop, XtChainBottom); j++; - XtSetArg(args[j], XtNbottom, XtChainBottom); j++; - XtSetArg(args[j], XtNleft, XtChainLeft); j++; - XtSetArg(args[j], XtNright, XtChainLeft); j++; - b_close = - XtCreateManagedWidget(_("close"), commandWidgetClass, form, args, j); - XtAddCallback(b_close, XtNcallback, callback, client_data); - - if(wpGameList.width > 0) { - glc->x = wpGameList.x; - glc->y = wpGameList.y; - glc->w = wpGameList.width; - glc->h = wpGameList.height; - } - - if (glc->x == -1) { - Position y1; - Dimension h1; - int xx, yy; - Window junk; - - j = 0; - XtSetArg(args[j], XtNheight, &h1); j++; - XtSetArg(args[j], XtNy, &y1); j++; - XtGetValues(boardWidget, args, j); - glc->w = fw_width * 3/4; - glc->h = squareSize * 3; - - // XSync(xDisplay, False); -#ifdef NOTDEF - /* This code seems to tickle an X bug if it is executed too soon - after xboard starts up. The coordinates get transformed as if - the main window was positioned at (0, 0). - */ -// XtTranslateCoords(shellWidget, (fw_width - glc->w) / 2, -// y1 + (h1 - glc->h + appData.borderYoffset) / 2, -// &glc->x, &glc->y); -#else /*!NOTDEF*/ -// XTranslateCoordinates(xDisplay, XtWindow(shellWidget), -// RootWindowOfScreen(XtScreen(shellWidget)), -// (fw_width - glc->w) / 2, -// y1 + (h1 - glc->h + appData.borderYoffset) / 2, -// &xx, &yy, &junk); - glc->x = xx; - glc->y = yy; -#endif /*!NOTDEF*/ - if (glc->y < 0) glc->y = 0; /*avoid positioning top offscreen*/ - } - j = 0; - XtSetArg(args[j], XtNheight, glc->h); j++; - XtSetArg(args[j], XtNwidth, glc->w); j++; - XtSetArg(args[j], XtNx, glc->x - appData.borderXoffset); j++; - XtSetArg(args[j], XtNy, glc->y - appData.borderYoffset); j++; - XtSetValues(shell, args, j); - - XtRealizeWidget(shell); - // CatchDeleteWindow(shell, "GameListPopDown"); - - return shell; + return; } void @@ -328,75 +186,48 @@ GameListPopUp(fp, filename) FILE *fp; char *filename; { - Arg args[16]; - int j, nstrings; - Widget listwidg; - ListGame *lg; - char **st; - - if (glc == NULL) { - glc = (GameListClosure *) calloc(1, sizeof(GameListClosure)); - glc->x = glc->y = -1; - } - - if (glc->strings != NULL) { - st = glc->strings; - while (*st) { - free(*st++); - } - free(glc->strings); + GtkTreeIter iter; + int i=0,nstrings; + ListGame *lg; + + /* first clear everything, do we need this? */ + gtk_list_store_clear(LIST_GameList); + + /* fill list with information */ + lg = (ListGame *) gameList.head; + nstrings = ((ListGame *) gameList.tailPred)->number; + while (nstrings--) + { + gtk_list_store_append (LIST_GameList, &iter); + gtk_list_store_set (LIST_GameList, &iter, + 0, StrSave(filename), + 1, GameListLine(lg->number, &lg->gameInfo), + 2, fp, + -1); + lg = (ListGame *) lg->node.succ; } - nstrings = ((ListGame *) gameList.tailPred)->number; - glc->strings = (char **) malloc((nstrings + 1) * sizeof(char *)); - st = glc->strings; - lg = (ListGame *) gameList.head; - while (nstrings--) { - *st++ = GameListLine(lg->number, &lg->gameInfo); - lg = (ListGame *) lg->node.succ; - } - *st = NULL; - - glc->fp = fp; - if (glc->filename != NULL) free(glc->filename); - glc->filename = StrSave(filename); + /* show widget */ + gtk_widget_show (GUI_GameList); - if (glc->shell == NULL) { - glc->shell = GameListCreate(filename, GameListCallback, glc); - } else { - listwidg = XtNameToWidget(glc->shell, "*form.viewport.list"); - XawListChange(listwidg, glc->strings, 0, 0, True); - XawListHighlight(listwidg, 0); - j = 0; - XtSetArg(args[j], XtNiconName, (XtArgVal) filename); j++; - XtSetArg(args[j], XtNtitle, (XtArgVal) filename); j++; - XtSetValues(glc->shell, args, j); - } +// XtPopup(glc->shell, XtGrabNone); +// glc->up = True; +// j = 0; +// XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++; +// XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Game List"), +// args, j); - XtPopup(glc->shell, XtGrabNone); - glc->up = True; - j = 0; - XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++; - XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Game List"), - args, j); + return; } void GameListDestroy() { - if (glc == NULL) return; - GameListPopDown(); - if (glc->strings != NULL) { - char **st; - st = glc->strings; - while (*st) { - free(*st++); - } - free(glc->strings); - } - free(glc); - glc = NULL; + GameListPopDown(); + + gtk_list_store_clear(LIST_GameList); + return; } void @@ -451,27 +282,10 @@ LoadSelectedProc(w, event, prms, nprms) void GameListPopDown() { - Arg args[16]; - int j; + /* hides the history window */ - if (glc == NULL) return; - j = 0; - XtSetArg(args[j], XtNx, &glc->x); j++; - XtSetArg(args[j], XtNy, &glc->y); j++; - XtSetArg(args[j], XtNheight, &glc->h); j++; - XtSetArg(args[j], XtNwidth, &glc->w); j++; - XtGetValues(glc->shell, args, j); - wpGameList.x = glc->x - 4; - wpGameList.y = glc->y - 23; - wpGameList.width = glc->w; - wpGameList.height = glc->h; - XtPopdown(glc->shell); -// XtSetKeyboardFocus(shellWidget, formWidget); - glc->up = False; - j = 0; - XtSetArg(args[j], XtNleftBitmap, None); j++; - XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Show Game List"), - args, j); + gtk_widget_hide (GUI_GameList); + return; } void @@ -487,5 +301,7 @@ GameListHighlight(index) Boolean GameListIsUp() { - return glc && glc->up; + /* return status of history window */ + + return gtk_widget_get_visible (GUI_GameList); }