Use ListBox in stead of ComboBox in Match-Options dialog
[xboard.git] / filebrowser / draw.c
index 47efa17..4f8abaa 100644 (file)
@@ -25,8 +25,9 @@
  */
 
 #include <stdio.h>
-#include "selfile.h"
 #include "xstat.h"
+#include "selfile.h"
+#include "config.h"
 #include <X11/StringDefs.h>
 #include <X11/Xaw/Scrollbar.h>
 #include <X11/Xaw/Cardinals.h>
@@ -53,14 +54,25 @@ static XtResource textResources[] = {
                XtOffset(textPtr, fontname), XtRString, SF_DEFAULT_FONT},
 };
 
+#if ENABLE_NLS
+extern XFontSet fontSet; //XXX should really be in a .h file
+#else
 static XFontStruct *SFfont;
+#endif
 
 static int SFcurrentListY;
 
 static XtIntervalId SFscrollTimerId;
 
+void
 SFinitFont()
 {
+#if ENABLE_NLS
+       XFontSetExtents *fse = XExtentsOfFontSet(fontSet);
+       SFcharWidth = fse->max_logical_extent.width;
+       SFcharAscent = -fse->max_logical_extent.y;
+       SFcharHeight = fse->max_logical_extent.height;
+#else
        TextData        *data;
 
        data = XtNew(TextData);
@@ -84,8 +96,11 @@ SFinitFont()
        SFcharWidth = (SFfont->max_bounds.width + SFfont->min_bounds.width) / 2;
        SFcharAscent = SFfont->max_bounds.ascent;
        SFcharHeight = SFcharAscent + SFfont->max_bounds.descent;
+#endif
+       return;
 }
 
+void
 SFcreateGC()
 {
        XGCValues       gcValues;
@@ -122,7 +137,9 @@ SFcreateGC()
 
        gcValues.foreground = SFfore;
        gcValues.background = SFback;
+#if !ENABLE_NLS
        gcValues.font = SFfont->fid;
+#endif
 
        SFtextGC = XCreateGC(
                SFdisplay,
@@ -130,7 +147,9 @@ SFcreateGC()
                (unsigned long)
                        GCForeground            |
                        GCBackground            |
+#if !ENABLE_NLS
                        GCFont                  |
+#endif
                        0,
                &gcValues
        );
@@ -149,8 +168,10 @@ SFcreateGC()
                1,
                Unsorted
        );
+       return;
 }
 
+void
 SFclearList(n, doScroll)
        int     n;
        int     doScroll;
@@ -191,9 +212,10 @@ SFclearList(n, doScroll)
                                (float) 1.0);
                }
        }
+       return;
 }
 
-static
+static void
 SFdeleteEntry(dir, entry)
        SFDir   *dir;
        SFEntry *entry;
@@ -242,15 +264,17 @@ SFdeleteEntry(dir, entry)
                (float) (((double) ((dir->nEntries < SFlistSize) ?
                        dir->nEntries : SFlistSize)) / dir->nEntries)
        );
+       return;
 }
 
-static
+static void
 SFwriteStatChar(name, last, statBuf)
        char            *name;
        int             last;
        struct stat     *statBuf;
 {
        name[last] = SFstatChar(statBuf);
+       return;
 }
 
 static int
@@ -320,7 +344,7 @@ SFstatAndCheck(dir, entry)
        return 0;
 }
 
-static
+static void
 SFdrawStrings(w, dir, from, to)
        register Window w;
        register SFDir  *dir;
@@ -347,6 +371,18 @@ SFdrawStrings(w, dir, from, to)
                                continue;
                        }
                }
+#if ENABLE_NLS
+               XmbDrawImageString(
+                       SFdisplay,
+                       w,
+                       fontSet,
+                       SFtextGC,
+                       x,
+                       SFtextYoffset + i * SFentryHeight,
+                       entry->shown,
+                       strlen(entry->shown)
+               );
+#else
                XDrawImageString(
                        SFdisplay,
                        w,
@@ -356,6 +392,7 @@ SFdrawStrings(w, dir, from, to)
                        entry->shown,
                        strlen(entry->shown)
                );
+#endif
                if (dir->vOrigin + i == dir->beginSelection) {
                        XDrawLine(
                                SFdisplay,
@@ -395,8 +432,10 @@ SFdrawStrings(w, dir, from, to)
                        );
                }
        }
+       return;
 }
 
+void
 SFdrawList(n, doScroll)
        int     n;
        int     doScroll;
@@ -409,6 +448,18 @@ SFdrawList(n, doScroll)
        if (SFdirPtr + (3-NR) + n < SFdirEnd) {
                dir = &(SFdirs[SFdirPtr + n + (3-NR)]);
                w = XtWindow(selFileLists[n]);
+#if ENABLE_NLS
+               XmbDrawImageString(
+                       SFdisplay,
+                       w,
+                       fontSet,
+                       SFtextGC,
+                       SFtextX - dir->hOrigin * SFcharWidth,
+                       SFlineToTextV + SFaboveAndBelowText + SFcharAscent,
+                       dir->dir,
+                       strlen(dir->dir)
+               );
+#else
                XDrawImageString(
                        SFdisplay,
                        w,
@@ -418,10 +469,13 @@ SFdrawList(n, doScroll)
                        dir->dir,
                        strlen(dir->dir)
                );
+#endif
                SFdrawStrings(w, dir, 0, SFlistSize - 1);
        }
+       return;
 }
 
+void
 SFdrawLists(doScroll)
        int     doScroll;
 {
@@ -430,9 +484,10 @@ SFdrawLists(doScroll)
        for (i = 0; i < NR; i++) {
                SFdrawList(i, doScroll);
        }
+       return;
 }
 
-static
+static void
 SFinvertEntry(n)
        register int    n;
 {
@@ -445,6 +500,7 @@ SFinvertEntry(n)
                SFentryWidth,
                SFentryHeight
        );
+       return;
 }
 
 static unsigned long
@@ -486,7 +542,7 @@ SFscrollTimer(p, id)
        int     save;
        int     n;
 
-        n = (int) p;
+        n = (int)(intptr_t) p;
 
        dir = &(SFdirs[SFdirPtr + n]);
        save = dir->vOrigin;
@@ -516,7 +572,7 @@ SFscrollTimer(p, id)
 
        if (SFbuttonPressed) {
                SFscrollTimerId = XtAppAddTimeOut(SFapp,
-                       SFscrollTimerInterval(), SFscrollTimer, (XtPointer) n);
+                       SFscrollTimerInterval(), SFscrollTimer, (XtPointer)(intptr_t) n);
        }
 }
 
@@ -557,7 +613,7 @@ SFnewInvertEntry(n, event)
                                SFscrollTimerAdded = 1;
                                SFscrollTimerId = XtAppAddTimeOut(SFapp,
                                        SFscrollTimerInterval(), SFscrollTimer,
-                                       (XtPointer) n);
+                                       (XtPointer)(intptr_t) n);
                        }
                }
 
@@ -620,20 +676,7 @@ SFmotionList(w, n, event)
                        SFinvertEntry(n);
                }
        }
-}
-
-/* ARGSUSED */
-void
-SFvFloatSliderMovedCallback(w, n, fnew)
-       Widget  w;
-       int     n;
-       float   *fnew;
-{
-       int     new;
-
-       new = (*fnew) * SFdirs[SFdirPtr + n].nEntries;
-
-       SFvSliderMovedCallback(w, n, new);
+       return;
 }
 
 /* ARGSUSED */
@@ -649,7 +692,10 @@ SFvSliderMovedCallback(w, n, new)
 
        dir = &(SFdirs[SFdirPtr + n]);
 
+
        old = dir->vOrigin;
+       if(new == -1) new = old + 1; else if(new == -2) new = old - 1; // [HGM] indicates scroll direction on mousewheel event
+       if(new < 0 || new > dir->nEntries - SFlistSize) return;
        dir->vOrigin = new;
 
        if (old == new) {
@@ -724,6 +770,21 @@ SFvSliderMovedCallback(w, n, new)
 
 /* ARGSUSED */
 void
+SFvFloatSliderMovedCallback(w, n, fnew)
+       Widget  w;
+       int     n;
+       float   *fnew;
+{
+       int     new;
+
+       new = (*fnew) * SFdirs[SFdirPtr + n].nEntries;
+
+       SFvSliderMovedCallback(w, n, new);
+}
+
+
+/* ARGSUSED */
+void
 SFvAreaSelectedCallback(w, n, pnew)
        Widget  w;
        int     n;