Merge gamelistopt sources into gamelist source files
[xboard.git] / xgamelist.c
index f09bdd7..c23bf6f 100644 (file)
@@ -620,3 +620,216 @@ GameListIsUp()
 {
     return glc && glc->up;
 }
+
+//--------------------------------- Game-List options dialog ------------------------------------------
+
+Widget gameListOptShell, listwidg;
+
+char *strings[20];
+int stringPtr;
+
+void GLT_ClearList()
+{
+    strings[0] = NULL;
+    stringPtr = 0;
+}
+
+void GLT_AddToList(char *name)
+{
+    strings[stringPtr++] = name;
+    strings[stringPtr] = NULL;
+}
+
+Boolean GLT_GetFromList(int index, char *name)
+{
+    strcpy(name, strings[index]);
+}
+
+void GLT_DeSelectList()
+{
+    XawListChange(listwidg, strings, 0, 0, True);
+    XawListHighlight(listwidg, 0);
+}
+
+void
+GameListOptionsPopDown()
+{
+    Arg args[16];
+    int j;
+
+    if (gameListOptShell == NULL) return;
+    XtPopdown(gameListOptShell);
+    XtDestroyWidget(gameListOptShell);
+    gameListOptShell = 0;
+    XtSetKeyboardFocus(shellWidget, formWidget);
+}
+
+void
+GameListOptionsCallback(w, client_data, call_data)
+     Widget w;
+     XtPointer client_data, call_data;
+{
+    String name;
+    Arg args[16];
+    int j;
+    Widget listwidg;
+    XawListReturnStruct *rs;
+    int index;
+    char *p;
+
+    j = 0;
+    XtSetArg(args[j], XtNlabel, &name);  j++;
+    XtGetValues(w, args, j);
+
+    if (strcmp(name, _("OK")) == 0) {
+       GLT_ParseList();
+       appData.gameListTags = strdup(lpUserGLT);
+       GameListOptionsPopDown();
+       return;
+    } else
+    if (strcmp(name, _("cancel")) == 0) {
+       GameListOptionsPopDown();
+       return;
+    }
+    listwidg = XtNameToWidget(gameListOptShell, "*form.list");
+    rs = XawListShowCurrent(listwidg);
+    index = rs->list_index;
+    if (index < 0) {
+       DisplayError(_("No tag selected"), 0);
+       return;
+    }
+    p = strings[index];
+    if (strcmp(name, _("down")) == 0) {
+        if(index >= strlen(GLT_ALL_TAGS)) return;
+       strings[index] = strings[index+1];
+       strings[++index] = p;
+    } else
+    if (strcmp(name, _("up")) == 0) {
+        if(index == 0) return;
+       strings[index] = strings[index-1];
+       strings[--index] = p;
+    } else
+    if (strcmp(name, _("factory")) == 0) {
+       strcpy(lpUserGLT, GLT_DEFAULT_TAGS);
+       GLT_TagsToList(lpUserGLT);
+       index = 0;
+    }
+    XawListHighlight(listwidg, index);
+}
+
+Widget
+GameListOptionsCreate()
+{
+    Arg args[16];
+    Widget shell, form, viewport, layout;
+    Widget b_load, b_loadprev, b_loadnext, b_close, b_cancel;
+    Dimension fw_width;
+    XtPointer client_data = NULL;
+    int j;
+
+    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++;
+    shell = gameListOptShell =
+      XtCreatePopupShell("Game-list options", transientShellWidgetClass,
+                        shellWidget, args, j);
+    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], XtNdefaultColumns, 1);  j++;
+    XtSetArg(args[j], XtNforceColumns, True);  j++;
+    XtSetArg(args[j], XtNverticalList, True);  j++;
+    listwidg = viewport =
+      XtCreateManagedWidget("list", listWidgetClass, form, args, j);
+    XawListHighlight(listwidg, 0);
+//    XtAugmentTranslations(listwidg,
+//                       XtParseTranslationTable(gameListOptTranslations));
+
+    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(_("factory"), commandWidgetClass, form, args, j);
+    XtAddCallback(b_load, XtNcallback, GameListOptionsCallback, 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(_("up"), commandWidgetClass, form, args, j);
+    XtAddCallback(b_loadprev, XtNcallback, GameListOptionsCallback, 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(_("down"), commandWidgetClass, form, args, j);
+    XtAddCallback(b_loadnext, XtNcallback, GameListOptionsCallback, 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_cancel =
+      XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);
+    XtAddCallback(b_cancel, XtNcallback, GameListOptionsCallback, client_data);
+
+    j = 0;
+    XtSetArg(args[j], XtNfromVert, viewport);  j++;
+    XtSetArg(args[j], XtNfromHoriz, b_cancel);  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(_("OK"), commandWidgetClass, form, args, j);
+    XtAddCallback(b_close, XtNcallback, GameListOptionsCallback, client_data);
+
+    strcpy(lpUserGLT, appData.gameListTags);
+    GLT_TagsToList(lpUserGLT);
+
+    XtRealizeWidget(shell);
+    CatchDeleteWindow(shell, "GameListOptionsPopDown");
+
+    return shell;
+}
+
+void
+GameListOptionsPopUp(Widget w, XEvent *event, String *prms, Cardinal *nprms)
+{
+    Arg args[16];
+    int j, nstrings;
+    Widget listwidg;
+
+    if (gameListOptShell == NULL) {
+       gameListOptShell = GameListOptionsCreate(); 
+    }
+
+    XtPopup(gameListOptShell, XtGrabNone);
+}
+
+