/* * XScrabble - X version of the popular board game, for 1 to 4 players. * * This software comes with NO warranty whatsoever. I therefore take no * responsibility for any damages, losses or problems caused through use * or misuse of this program. * * I hereby grant permission for this program to be freely copied and * distributed by any means, provided no charge is made for it. * * Matthew Chapman, csuoq@csv.warwick.ac.uk * Oct 1994. */ /* widgets.c - define widgets */ #include "scrab.h" #include "globals.h" #include "dot.xbm" void set_board(Widget top,int dnum) { Dimension width; int ac,dn,bn,i,j,ind; char wname[6],lett[3]; Widget sur[BOARDSIZE*2],edg[BOARDSIZE*2]; Widget boardw; String modestr, startstr; all = XtVaCreateManagedWidget("all", formWidgetClass,top, NULL); title = XtVaCreateManagedWidget("title", labelWidgetClass, all, NULL); boardw = XtVaCreateManagedWidget("board", formWidgetClass, all, NULL); SetupHelp(all,dnum); SetupMenu(all,dnum); /* board surround */ for (ac=0; ac0) XtVaSetValues(sur[ac],XtNfromHoriz,sur[ac-1], XtNhorizDistance,0,NULL); /* else XtVaSetValues(sur[ac],XtNhorizDistance,30,NULL); */ } /* squares on board */ for (dn=0; dn0) XtVaSetValues(edg[dn],XtNfromVert,edg[dn-1],NULL); else XtVaSetValues(edg[dn],XtNfromVert,sur[0],NULL); for (ac=0; ac0) XtVaSetValues(sq[dnum][ac][dn],XtNfromHoriz,sq[dnum][ac-1][dn],NULL); else XtVaSetValues(sq[dnum][ac][dn],XtNfromHoriz,edg[dn],NULL); if (dn>0) XtVaSetValues(sq[dnum][ac][dn],XtNfromVert,sq[dnum][ac][dn-1],NULL); else XtVaSetValues(sq[dnum][ac][dn],XtNfromVert,sur[ac],NULL); } edg[dn+BOARDSIZE]=XtVaCreateManagedWidget("edg",labelWidgetClass,boardw, XtNlabel,lett,XtNfromHoriz,sq[dnum][BOARDSIZE-1][dn],NULL); if (dn>0) XtVaSetValues(edg[dn+BOARDSIZE],XtNfromVert,edg[dn+BOARDSIZE-1],NULL); else XtVaSetValues(edg[dn+BOARDSIZE],XtNfromVert,sur[0],NULL); } /* board surround */ for (ac=0; ac0) XtVaSetValues(sur[ac+BOARDSIZE],XtNfromHoriz,sur[ac+BOARDSIZE-1], XtNhorizDistance,0,NULL); /* else XtVaSetValues(sur[ac+BOARDSIZE],XtNhorizDistance,30,NULL); */ } scoretitle = XtVaCreateManagedWidget("scoretitle", labelWidgetClass, all, NULL); scorebox[dnum] = XtVaCreateManagedWidget("scorebox", labelWidgetClass, all, NULL); tilesleft[dnum] = XtVaCreateManagedWidget("tilesleft", labelWidgetClass, all, NULL); barw[dnum] = XtVaCreateManagedWidget("bar", formWidgetClass, all, NULL); message[dnum] = XtVaCreateManagedWidget("message", labelWidgetClass, all, NULL); /* squares in bar */ for (bn=0; bn0) XtVaSetValues(br[dnum][bn],XtNfromHoriz,br[dnum][bn-1],NULL); } exitButton[dnum] = XtVaCreateManagedWidget("exit",commandWidgetClass, all,NULL); XtAddCallback(exitButton[dnum],XtNcallback,Quit,all); /* set square colours */ for (dn=0; dn0) timeleft[dnum] = XtVaCreateManagedWidget("timeleft", xfwfCircularPercentageWidgetClass,all,NULL); /* move buttons */ finish[dnum] = XtVaCreateManagedWidget("finish", commandWidgetClass,all, XtNsensitive,False,NULL); change[dnum] = XtVaCreateManagedWidget("change", commandWidgetClass,all, XtNsensitive,False,NULL); pass[dnum] = XtVaCreateManagedWidget("pass", commandWidgetClass,all, XtNsensitive,False,NULL); evaluate[dnum] = XtVaCreateManagedWidget("evaluate", commandWidgetClass,all, XtNsensitive,False,NULL); /* extra buttons */ revert[dnum] = XtVaCreateManagedWidget("revert",commandWidgetClass,all,XtNsensitive,False,NULL); juggle[dnum] = XtVaCreateManagedWidget("juggle",commandWidgetClass,all,XtNsensitive,False,NULL); /* for buttons around board */ XtAddCallback(finish[dnum],XtNcallback,FinishGo,top); XtAddCallback(evaluate[dnum],XtNcallback,FinishGo,top); XtAddCallback(change[dnum],XtNcallback,ChangePopup,top); XtAddCallback(pass[dnum],XtNcallback,PassGo,top); XtAddCallback(revert[dnum],XtNcallback,RevertToBar,top); XtAddCallback(juggle[dnum],XtNcallback,Juggle,top); } else /* computer player */ { /* if (time_limit>0) XtVaSetValues(timeleft[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(finish[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(evaluate[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(change[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(pass[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(revert[dnum],XtNmappedWhenManaged,False,NULL); XtVaSetValues(juggle[dnum],XtNmappedWhenManaged,False,NULL); */ XtVaSetValues(barw[dnum],XtNmappedWhenManaged,False,NULL); compw[dnum] = XtVaCreateManagedWidget("compthink",xcBarGraphWidgetClass,all,NULL); compshowbar[dnum] = XtVaCreateManagedWidget("showbar",commandWidgetClass,all,NULL); comphidebar[dnum] = XtVaCreateManagedWidget("hidebar",commandWidgetClass,all,NULL); XtAddCallback(compshowbar[dnum],XtNcallback,CompShowBar,top); XtAddCallback(comphidebar[dnum],XtNcallback,CompHideBar,top); } bg_pixmap(all); bg_pixmap(title); CreateLettValuesPopup(dnum); CreateRulesPopup(dnum); CreateHiScoresPopup(dnum); CreateBestgoPopup(dnum); CreateAboutPopup(dnum); CreateKeyPopup(dnum); CreateMess(dnum); CreateSelectBagPopup(dnum); CreateShowBagPopup(dnum); CreateCheckwordPopup(dnum); CreatePlacewordPopup(dnum); CreateListwordPopup(dnum); CreateSuggestionPopup(dnum); } void SetupHelp(Widget top, int dnum) { char entry[8]; int i; markhelp[dnum] = XCreateBitmapFromData(XtDisplay(top),RootWindowOfScreen(XtScreen(top)), (char *)dot_bits,dot_width,dot_height); helpgameButton[dnum] = XtVaCreateManagedWidget("helpButton",menuButtonWidgetClass, top,NULL); helpgame[dnum] = XtVaCreatePopupShell("menu",simpleMenuWidgetClass, helpgameButton[dnum],NULL); for (i=0; i0) XtVaSetValues(changeletts[i],XtNfromHoriz,changeletts[i-1],NULL); } changeconfirm=XtVaCreateManagedWidget("changeconfirm",commandWidgetClass, changef,XtNfromVert,changeletts[0],NULL); changecancel=XtVaCreateManagedWidget("changecancel",commandWidgetClass, changef,XtNfromVert,changeletts[0],XtNfromHoriz,changeconfirm,NULL); XtTranslateCoords(change[curr_player],(Position) -10,(Position) -10, &x, &y); XtVaSetValues(changeshell, XtNx, x, XtNy, y, NULL); /* bg_pixmap(changef);*/ XtPopup(changeshell,XtGrabNonexclusive); XtAddCallback(changeconfirm,XtNcallback,ChangePopdown,topLevel); XtAddCallback(changecancel,XtNcallback,ChangePopdown,topLevel); } void BlankPopup() { Position x, y; int i; char chlet[3]; waiting_for_blank=True; blankshell=XtVaCreatePopupShell("blankshell",transientShellWidgetClass, topl[curr_player],NULL); blankf=XtVaCreateManagedWidget("blankf",formWidgetClass,blankshell, NULL); blanktitle=XtVaCreateManagedWidget("blanktitle",labelWidgetClass,blankf,NULL); for (i=0; i(NUMLETTERS/2)-1) XtVaSetValues(a2z[i],XtNfromVert,a2z[i-(NUMLETTERS/2)],NULL); } XtTranslateCoords(finish[curr_player],(Position) -10,(Position) -10, &x, &y); XtVaSetValues(blankshell, XtNx, x, XtNy, y, NULL); /* bg_pixmap(blankf);*/ XtPopup(blankshell,XtGrabNonexclusive); for (i=0; i0)) { XtVaSetValues(pauseButton[i], XtNmappedWhenManaged, False, NULL); } else { XtVaSetValues(pauseButton[i], XtNlabel, modepause, XtNmappedWhenManaged, True, XtNsensitive, False, XtNstate, False, NULL); } } TilesLeft(); ShowScores(); GotoNextPlayer(); ShowTiles(); ShowBoard(False); } void StartPauseToggle(Widget w, XtPointer client_data, XtPointer call_data) { char mess[256]; int i,j; if(pauseflag==2) { j = curr_player; for (i=0; i