Change to the linux kernel coding style
[wmaker-crm.git] / WPrefs.app / Configurations.c
dissimilarity index 89%
index 2b53d29..472ffe7 100644 (file)
-/* Configurations.c- misc. configurations
- *
- *  WPrefs - Window Maker Preferences Program
- *
- *  Copyright (c) 1998-2003 Alfredo K. Kojima
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- *  USA.
- */
-
-
-#include "WPrefs.h"
-
-typedef struct _Panel {
-    WMBox *box;
-    char *sectionName;
-
-    char *description;
-
-    CallbackRec callbacks;
-
-    WMWidget *parent;
-
-    WMFrame *icoF;
-    WMButton *icoB[5];
-
-    WMFrame *shaF;
-    WMButton *shaB[5];
-
-    WMFrame *titlF;
-    WMButton *oldsB;
-    WMButton *newsB;
-
-    WMFrame *animF;
-    WMButton *animB;
-    WMButton *supB;
-    WMButton *sfxB;
-    WMLabel *noteL;
-
-    WMFrame *smoF;
-    WMButton *smoB;
-
-    WMFrame *dithF;
-    WMButton *dithB;
-    WMSlider *dithS;
-    WMLabel *dithL;
-    WMLabel *dith1L;
-    WMLabel *dith2L;
-
-    int cmapSize;
-} _Panel;
-
-
-
-#define ICON_FILE      "configs"
-
-#define OLDS_IMAGE     "oldstyle"
-#define NEWS_IMAGE     "newstyle"
-
-#define ANIM_IMAGE     "animations"
-#define SUPERF_IMAGE   "moreanim"
-#define SOUND_IMAGE    "sound"
-#define SMOOTH_IMAGE   "smooth"
-
-#define SPEED_IMAGE    "speed%i"
-#define SPEED_IMAGE_S  "speed%is"
-
-#define ARQUIVO_XIS    "xis"
-
-
-static void updateLabel(WMWidget *self, void *data);
-
-
-static void
-showData(_Panel *panel)
-{
-    WMPerformButtonClick(panel->icoB[GetSpeedForKey("IconSlideSpeed")]);
-
-    WMPerformButtonClick(panel->shaB[GetSpeedForKey("ShadeSpeed")]);
-
-    if (GetBoolForKey("NewStyle")) {
-        WMPerformButtonClick(panel->newsB);
-    } else {
-        WMPerformButtonClick(panel->oldsB);
-    }
-
-    WMSetButtonSelected(panel->animB, !GetBoolForKey("DisableAnimations"));
-
-    WMSetButtonSelected(panel->supB, GetBoolForKey("Superfluous"));
-
-    WMSetButtonSelected(panel->sfxB, !GetBoolForKey("DisableSound"));
-
-    WMSetButtonSelected(panel->smoB, GetBoolForKey("SmoothWorkspaceBack"));
-
-    WMSetButtonSelected(panel->dithB, GetBoolForKey("DisableDithering"));
-
-    WMSetSliderValue(panel->dithS, GetIntegerForKey("ColormapSize"));
-
-    updateLabel(panel->dithS, panel);
-}
-
-
-static void
-updateLabel(WMWidget *self, void *data)
-{
-    WMSlider *sPtr = (WMSlider*)self;
-    _Panel *panel = (_Panel*)data;
-    char buffer[64];
-    float fl;
-
-    fl = WMGetSliderValue(sPtr);
-
-    panel->cmapSize = (int)fl;
-
-    sprintf(buffer, "%i", panel->cmapSize*panel->cmapSize*panel->cmapSize);
-    WMSetLabelText(panel->dithL, buffer);
-}
-
-
-static void
-createImages(WMScreen *scr, RContext *rc, RImage *xis, char *file,
-             WMPixmap **icon1,  WMPixmap **icon2)
-{
-    RImage *icon;
-    char *path;
-    RColor gray = {0xae,0xaa,0xae};
-
-    *icon1 = NULL;
-    *icon2 = NULL;
-
-    path = LocateImage(file);
-    if (!path) {
-        return;
-    }
-
-    *icon1 = WMCreatePixmapFromFile(scr, path);
-    if (!*icon1) {
-        wwarning(_("could not load icon %s"), path);
-        wfree(path);
-        return;
-    }
-    icon = RLoadImage(rc, path, 0);
-    if (!icon) {
-        wwarning(_("could not load icon %s"), path);
-        wfree(path);
-        return;
-    }
-    RCombineImageWithColor(icon, &gray);
-    if (xis) {
-        RCombineImagesWithOpaqueness(icon, xis, 180);
-        if (!(*icon2 = WMCreatePixmapFromRImage(scr, icon, 127)))
-            wwarning(_("could not process icon %s:"), file, RMessageForError(RErrorCode));
-    }
-    RReleaseImage(icon);
-    wfree(path);
-}
-
-
-static void
-createPanel(Panel *p)
-{
-    _Panel *panel = (_Panel*)p;
-    WMScreen *scr = WMWidgetScreen(panel->parent);
-    char *buf1, *buf2;
-    WMPixmap *icon, *altIcon;
-    RImage *xis = NULL;
-    int i;
-    RContext *rc = WMScreenRContext(scr);
-    WMFont *font = WMSystemFontOfSize(scr, 10);
-    char *path;
-
-    path = LocateImage(ARQUIVO_XIS);
-    if (path) {
-        xis = RLoadImage(rc, path, 0);
-        if (!xis) {
-            wwarning(_("could not load image file %s"), path);
-        }
-        wfree(path);
-    }
-
-
-    panel->box = WMCreateBox(panel->parent);
-    WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
-
-    /*********** Icon Slide Speed **********/
-
-    panel->icoF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->icoF, 230, 45);
-    WMMoveWidget(panel->icoF, 15, 10);
-    WMSetFrameTitle(panel->icoF, _("Icon Slide Speed"));
-
-    /*********** Shade Animation Speed **********/
-    panel->shaF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->shaF, 230, 45);
-    WMMoveWidget(panel->shaF, 15, 60);
-    WMSetFrameTitle(panel->shaF, _("Shade Animation Speed"));
-
-
-    buf1 = wmalloc(strlen(SPEED_IMAGE)+1);
-    buf2 = wmalloc(strlen(SPEED_IMAGE_S)+1);
-
-    for (i = 0; i < 5; i++) {
-        panel->icoB[i] = WMCreateCustomButton(panel->icoF, WBBStateChangeMask);
-        panel->shaB[i] = WMCreateCustomButton(panel->shaF, WBBStateChangeMask);
-        WMResizeWidget(panel->icoB[i], 40, 24);
-        WMMoveWidget(panel->icoB[i], 10+(40*i), 15);
-        WMResizeWidget(panel->shaB[i], 40, 24);
-        WMMoveWidget(panel->shaB[i], 10+(40*i), 15);
-        WMSetButtonBordered(panel->icoB[i], False);
-        WMSetButtonImagePosition(panel->icoB[i], WIPImageOnly);
-        if (i > 0) {
-            WMGroupButtons(panel->icoB[0], panel->icoB[i]);
-        }
-        WMSetButtonBordered(panel->shaB[i], False);
-        WMSetButtonImagePosition(panel->shaB[i], WIPImageOnly);
-        if (i > 0) {
-            WMGroupButtons(panel->shaB[0], panel->shaB[i]);
-        }
-        sprintf(buf1, SPEED_IMAGE, i);
-        sprintf(buf2, SPEED_IMAGE_S, i);
-        path = LocateImage(buf1);
-        if (path) {
-            icon = WMCreatePixmapFromFile(scr, path);
-            if (icon) {
-                WMSetButtonImage(panel->icoB[i], icon);
-                WMSetButtonImage(panel->shaB[i], icon);
-                WMReleasePixmap(icon);
-            } else {
-                wwarning(_("could not load icon file %s"), path);
-            }
-            wfree(path);
-        }
-        path = LocateImage(buf2);
-        if (path) {
-            icon = WMCreatePixmapFromFile(scr, path);
-            if (icon) {
-                WMSetButtonAltImage(panel->icoB[i], icon);
-                WMSetButtonAltImage(panel->shaB[i], icon);
-                WMReleasePixmap(icon);
-            } else {
-                wwarning(_("could not load icon file %s"), path);
-            }
-            wfree(path);
-        }
-    }
-    wfree(buf1);
-    wfree(buf2);
-
-
-    WMMapSubwidgets(panel->icoF);
-    WMMapSubwidgets(panel->shaF);
-
-
-    /***************** Smoothed Scaling *****************/
-    panel->smoF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->smoF, 115, 110);
-    WMMoveWidget(panel->smoF, 18, 115);
-    WMSetFrameTitle(panel->smoF, _("Smooth Scaling"));
-    WMSetBalloonTextForView(_("Smooth scaled background images, neutralizing\n"
-                              "the `pixelization' effect. This will slow\n"
-                              "down loading of background images considerably."),
-                            WMWidgetView(panel->smoF));
-
-    panel->smoB = WMCreateButton(panel->smoF, WBTToggle);
-    WMResizeWidget(panel->smoB, 64, 64);
-    WMMoveWidget(panel->smoB, 25, 25);
-    WMSetButtonImagePosition(panel->smoB, WIPImageOnly);
-    path = LocateImage(SMOOTH_IMAGE);
-    if (path) {
-        RImage *image, *scaled;
-
-        image = RLoadImage(WMScreenRContext(scr), path, 0);
-        wfree(path);
-
-        scaled = RScaleImage(image, 61, 61);
-        icon = WMCreatePixmapFromRImage(scr, scaled, 128);
-        RReleaseImage(scaled);
-        if (icon) {
-            WMSetButtonImage(panel->smoB, icon);
-            WMReleasePixmap(icon);
-        }
-
-        scaled = RSmoothScaleImage(image, 61, 61);
-        icon = WMCreatePixmapFromRImage(scr, scaled, 128);
-        RReleaseImage(scaled);
-        if (icon) {
-            WMSetButtonAltImage(panel->smoB, icon);
-            WMReleasePixmap(icon);
-        }
-
-        RReleaseImage(image);
-    }
-
-    WMMapSubwidgets(panel->smoF);
-
-    /***************** Titlebar Style Size ****************/
-    panel->titlF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->titlF, 105, 110);
-    WMMoveWidget(panel->titlF, 140, 115);
-    WMSetFrameTitle(panel->titlF, _("Titlebar Style"));
-
-    panel->newsB = WMCreateButton(panel->titlF, WBTOnOff);
-    WMResizeWidget(panel->newsB, 74, 40);
-    WMMoveWidget(panel->newsB, 15, 20);
-    WMSetButtonImagePosition(panel->newsB, WIPImageOnly);
-    path = LocateImage(NEWS_IMAGE);
-    if (path) {
-        icon = WMCreatePixmapFromFile(scr, path);
-        if (icon) {
-            WMSetButtonImage(panel->newsB, icon);
-            WMReleasePixmap(icon);
-        }
-    }
-
-    panel->oldsB = WMCreateButton(panel->titlF, WBTOnOff);
-    WMResizeWidget(panel->oldsB, 74, 40);
-    WMMoveWidget(panel->oldsB, 15, 60);
-    WMSetButtonImagePosition(panel->oldsB, WIPImageOnly);
-    path = LocateImage(OLDS_IMAGE);
-    if (path) {
-        icon = WMCreatePixmapFromFile(scr, path);
-        if (icon) {
-            WMSetButtonImage(panel->oldsB, icon);
-            WMReleasePixmap(icon);
-        }
-        wfree(path);
-    }
-
-    WMGroupButtons(panel->newsB, panel->oldsB);
-
-    WMMapSubwidgets(panel->titlF);
-
-    /**************** Features ******************/
-
-    panel->animF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->animF, 255, 115);
-    WMMoveWidget(panel->animF, 255, 10);
-    WMSetFrameTitle(panel->animF, _("Animations and Sound"));
-
-    panel->animB = WMCreateButton(panel->animF, WBTToggle);
-    WMResizeWidget(panel->animB, 64, 64);
-    WMMoveWidget(panel->animB, 15, 20);
-    WMSetButtonFont(panel->animB, font);
-    WMSetButtonText(panel->animB, _("Animations"));
-    WMSetButtonImagePosition(panel->animB, WIPAbove);
-    createImages(scr, rc, xis, ANIM_IMAGE, &altIcon, &icon);
-    if (icon) {
-        WMSetButtonImage(panel->animB, icon);
-        WMReleasePixmap(icon);
-    }
-    if (altIcon) {
-        WMSetButtonAltImage(panel->animB, altIcon);
-        WMReleasePixmap(altIcon);
-    }
-    WMSetBalloonTextForView(_("Disable/enable animations such as those shown\n"
-                              "for window miniaturization, shading etc."),
-                            WMWidgetView(panel->animB));
-
-    panel->supB = WMCreateButton(panel->animF, WBTToggle);
-    WMResizeWidget(panel->supB, 64, 64);
-    WMMoveWidget(panel->supB, 95, 20);
-    WMSetButtonFont(panel->supB, font);
-    WMSetButtonText(panel->supB, _("Superfluous"));
-    WMSetButtonImagePosition(panel->supB, WIPAbove);
-    createImages(scr, rc, xis, SUPERF_IMAGE, &altIcon, &icon);
-    if (icon) {
-        WMSetButtonImage(panel->supB, icon);
-        WMReleasePixmap(icon);
-    }
-    if (altIcon) {
-        WMSetButtonAltImage(panel->supB, altIcon);
-        WMReleasePixmap(altIcon);
-    }
-    WMSetBalloonTextForView(_("Disable/enable `superfluous' features and\n"
-                              "animations. These include the `ghosting' of the\n"
-                              "dock when it's being moved to another side and\n"
-                              "the explosion animation when undocking icons."),
-                            WMWidgetView(panel->supB));
-
-    panel->sfxB = WMCreateButton(panel->animF, WBTToggle);
-    WMResizeWidget(panel->sfxB, 64, 64);
-    WMMoveWidget(panel->sfxB, 175, 20);
-    WMSetButtonFont(panel->sfxB, font);
-    WMSetButtonText(panel->sfxB, _("Sounds"));
-    WMSetButtonImagePosition(panel->sfxB, WIPAbove);
-    createImages(scr, rc, xis, SOUND_IMAGE, &altIcon, &icon);
-    if (icon) {
-        WMSetButtonImage(panel->sfxB, icon);
-        WMReleasePixmap(icon);
-    }
-    if (altIcon) {
-        WMSetButtonAltImage(panel->sfxB, altIcon);
-        WMReleasePixmap(altIcon);
-    }
-    WMSetBalloonTextForView(_("Disable/enable support for sound effects played\n"
-                              "for actions like shading and closing a window.\n"
-                              "You will need a module distributed separately\n"
-                              "for this. You can get it at:\n"
-                              "http://largo.windowmaker.info/files.php#WSoundServer"),
-                            WMWidgetView(panel->sfxB));
-
-    panel->noteL = WMCreateLabel(panel->animF);
-    WMResizeWidget(panel->noteL, 235, 28);
-    WMMoveWidget(panel->noteL, 10, 85);
-    WMSetLabelFont(panel->noteL, font);
-    WMSetLabelText(panel->noteL, _("Note: sound requires a module distributed\nseparately"));
-
-    WMMapSubwidgets(panel->animF);
-
-    /*********** Dithering **********/
-    panel->cmapSize = 4;
-
-    panel->dithF = WMCreateFrame(panel->box);
-    WMResizeWidget(panel->dithF, 255, 95);
-    WMMoveWidget(panel->dithF, 255, 130);
-    WMSetFrameTitle(panel->dithF, _("Dithering colormap for 8bpp"));
-
-    WMSetBalloonTextForView(_("Number of colors to reserve for Window Maker\n"
-                              "on displays that support only 8bpp (PseudoColor)."),
-                            WMWidgetView(panel->dithF));
-
-    panel->dithB = WMCreateSwitchButton(panel->dithF);
-    WMResizeWidget(panel->dithB, 235, 32);
-    WMMoveWidget(panel->dithB, 15, 15);
-    WMSetButtonText(panel->dithB, _("Disable dithering in any visual/depth"));
-
-    panel->dithL = WMCreateLabel(panel->dithF);
-    WMResizeWidget(panel->dithL, 75, 16);
-    WMMoveWidget(panel->dithL, 90, 50);
-    WMSetLabelTextAlignment(panel->dithL, WACenter);
-    WMSetLabelText(panel->dithL, "64");
-
-    panel->dithS = WMCreateSlider(panel->dithF);
-    WMResizeWidget(panel->dithS, 95, 16);
-    WMMoveWidget(panel->dithS, 80, 65);
-    WMSetSliderMinValue(panel->dithS, 2);
-    WMSetSliderMaxValue(panel->dithS, 6);
-    WMSetSliderContinuous(panel->dithS, True);
-    WMSetSliderAction(panel->dithS, updateLabel, panel);
-
-    panel->dith1L = WMCreateLabel(panel->dithF);
-    WMResizeWidget(panel->dith1L, 70, 35);
-    WMMoveWidget(panel->dith1L, 5, 50);
-    WMSetLabelTextAlignment(panel->dith1L, WACenter);
-    WMSetLabelFont(panel->dith1L, font);
-    WMSetLabelText(panel->dith1L, _("More colors for\napplications"));
-
-    panel->dith2L = WMCreateLabel(panel->dithF);
-    WMResizeWidget(panel->dith2L, 70, 35);
-    WMMoveWidget(panel->dith2L, 180, 50);
-    WMSetLabelTextAlignment(panel->dith2L, WACenter);
-    WMSetLabelFont(panel->dith2L, font);
-    WMSetLabelText(panel->dith2L, _("More colors for\nWindow Maker"));
-
-    WMMapSubwidgets(panel->dithF);
-
-    WMRealizeWidget(panel->box);
-    WMMapSubwidgets(panel->box);
-
-    if (xis)
-        RReleaseImage(xis);
-    WMReleaseFont(font);
-
-    showData(panel);
-}
-
-
-static void
-storeData(_Panel *panel)
-{
-    int i;
-
-    for (i=0; i<5; i++) {
-        if (WMGetButtonSelected(panel->icoB[i]))
-            break;
-    }
-    SetSpeedForKey(i, "IconSlideSpeed");
-
-
-    for (i=0; i<5; i++) {
-        if (WMGetButtonSelected(panel->shaB[i]))
-            break;
-    }
-    SetSpeedForKey(i, "ShadeSpeed");
-
-    SetBoolForKey(WMGetButtonSelected(panel->newsB), "NewStyle");
-
-    SetBoolForKey(!WMGetButtonSelected(panel->animB), "DisableAnimations");
-    SetBoolForKey(WMGetButtonSelected(panel->supB), "Superfluous");
-    SetBoolForKey(!WMGetButtonSelected(panel->sfxB), "DisableSound");
-
-    SetBoolForKey(WMGetButtonSelected(panel->smoB), "SmoothWorkspaceBack");
-
-    SetBoolForKey(WMGetButtonSelected(panel->dithB), "DisableDithering");
-    SetIntegerForKey(WMGetSliderValue(panel->dithS), "ColormapSize");
-}
-
-
-
-Panel*
-InitConfigurations(WMScreen *scr, WMWidget *parent)
-{
-    _Panel *panel;
-
-    panel = wmalloc(sizeof(_Panel));
-    memset(panel, 0, sizeof(_Panel));
-
-    panel->sectionName = _("Other Configurations");
-
-    panel->description = _("Animation speeds, titlebar styles, various option\n"
-                           "toggling and number of colors to reserve for\n"
-                           "Window Maker on 8bit displays.");
-
-    panel->parent = parent;
-
-    panel->callbacks.createWidgets = createPanel;
-    panel->callbacks.updateDomain = storeData;
-
-    AddSection(panel, ICON_FILE);
-
-    return panel;
-}
-
-
+/* Configurations.c- misc. configurations
+ *
+ *  WPrefs - Window Maker Preferences Program
+ *
+ *  Copyright (c) 1998-2003 Alfredo K. Kojima
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ *  USA.
+ */
+
+#include "WPrefs.h"
+
+typedef struct _Panel {
+       WMBox *box;
+       char *sectionName;
+
+       char *description;
+
+       CallbackRec callbacks;
+
+       WMWidget *parent;
+
+       WMFrame *icoF;
+       WMButton *icoB[5];
+
+       WMFrame *shaF;
+       WMButton *shaB[5];
+
+       WMFrame *titlF;
+       WMButton *oldsB;
+       WMButton *newsB;
+
+       WMFrame *animF;
+       WMButton *animB;
+       WMButton *supB;
+       WMButton *sfxB;
+       WMLabel *noteL;
+
+       WMFrame *smoF;
+       WMButton *smoB;
+
+       WMFrame *dithF;
+       WMButton *dithB;
+       WMSlider *dithS;
+       WMLabel *dithL;
+       WMLabel *dith1L;
+       WMLabel *dith2L;
+
+       int cmapSize;
+} _Panel;
+
+#define ICON_FILE      "configs"
+
+#define OLDS_IMAGE     "oldstyle"
+#define NEWS_IMAGE     "newstyle"
+
+#define ANIM_IMAGE     "animations"
+#define SUPERF_IMAGE   "moreanim"
+#define SOUND_IMAGE    "sound"
+#define SMOOTH_IMAGE   "smooth"
+
+#define SPEED_IMAGE    "speed%i"
+#define SPEED_IMAGE_S  "speed%is"
+
+#define ARQUIVO_XIS    "xis"
+
+static void updateLabel(WMWidget * self, void *data);
+
+static void showData(_Panel * panel)
+{
+       WMPerformButtonClick(panel->icoB[GetSpeedForKey("IconSlideSpeed")]);
+
+       WMPerformButtonClick(panel->shaB[GetSpeedForKey("ShadeSpeed")]);
+
+       if (GetBoolForKey("NewStyle")) {
+               WMPerformButtonClick(panel->newsB);
+       } else {
+               WMPerformButtonClick(panel->oldsB);
+       }
+
+       WMSetButtonSelected(panel->animB, !GetBoolForKey("DisableAnimations"));
+
+       WMSetButtonSelected(panel->supB, GetBoolForKey("Superfluous"));
+
+       WMSetButtonSelected(panel->sfxB, !GetBoolForKey("DisableSound"));
+
+       WMSetButtonSelected(panel->smoB, GetBoolForKey("SmoothWorkspaceBack"));
+
+       WMSetButtonSelected(panel->dithB, GetBoolForKey("DisableDithering"));
+
+       WMSetSliderValue(panel->dithS, GetIntegerForKey("ColormapSize"));
+
+       updateLabel(panel->dithS, panel);
+}
+
+static void updateLabel(WMWidget * self, void *data)
+{
+       WMSlider *sPtr = (WMSlider *) self;
+       _Panel *panel = (_Panel *) data;
+       char buffer[64];
+       float fl;
+
+       fl = WMGetSliderValue(sPtr);
+
+       panel->cmapSize = (int)fl;
+
+       sprintf(buffer, "%i", panel->cmapSize * panel->cmapSize * panel->cmapSize);
+       WMSetLabelText(panel->dithL, buffer);
+}
+
+static void
+createImages(WMScreen * scr, RContext * rc, RImage * xis, char *file, WMPixmap ** icon1, WMPixmap ** icon2)
+{
+       RImage *icon;
+       char *path;
+       RColor gray = { 0xae, 0xaa, 0xae };
+
+       *icon1 = NULL;
+       *icon2 = NULL;
+
+       path = LocateImage(file);
+       if (!path) {
+               return;
+       }
+
+       *icon1 = WMCreatePixmapFromFile(scr, path);
+       if (!*icon1) {
+               wwarning(_("could not load icon %s"), path);
+               wfree(path);
+               return;
+       }
+       icon = RLoadImage(rc, path, 0);
+       if (!icon) {
+               wwarning(_("could not load icon %s"), path);
+               wfree(path);
+               return;
+       }
+       RCombineImageWithColor(icon, &gray);
+       if (xis) {
+               RCombineImagesWithOpaqueness(icon, xis, 180);
+               if (!(*icon2 = WMCreatePixmapFromRImage(scr, icon, 127)))
+                       wwarning(_("could not process icon %s:"), file, RMessageForError(RErrorCode));
+       }
+       RReleaseImage(icon);
+       wfree(path);
+}
+
+static void createPanel(Panel * p)
+{
+       _Panel *panel = (_Panel *) p;
+       WMScreen *scr = WMWidgetScreen(panel->parent);
+       char *buf1, *buf2;
+       WMPixmap *icon, *altIcon;
+       RImage *xis = NULL;
+       int i;
+       RContext *rc = WMScreenRContext(scr);
+       WMFont *font = WMSystemFontOfSize(scr, 10);
+       char *path;
+
+       path = LocateImage(ARQUIVO_XIS);
+       if (path) {
+               xis = RLoadImage(rc, path, 0);
+               if (!xis) {
+                       wwarning(_("could not load image file %s"), path);
+               }
+               wfree(path);
+       }
+
+       panel->box = WMCreateBox(panel->parent);
+       WMSetViewExpandsToParent(WMWidgetView(panel->box), 2, 2, 2, 2);
+
+    /*********** Icon Slide Speed **********/
+
+       panel->icoF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->icoF, 230, 45);
+       WMMoveWidget(panel->icoF, 15, 10);
+       WMSetFrameTitle(panel->icoF, _("Icon Slide Speed"));
+
+    /*********** Shade Animation Speed **********/
+       panel->shaF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->shaF, 230, 45);
+       WMMoveWidget(panel->shaF, 15, 60);
+       WMSetFrameTitle(panel->shaF, _("Shade Animation Speed"));
+
+       buf1 = wmalloc(strlen(SPEED_IMAGE) + 1);
+       buf2 = wmalloc(strlen(SPEED_IMAGE_S) + 1);
+
+       for (i = 0; i < 5; i++) {
+               panel->icoB[i] = WMCreateCustomButton(panel->icoF, WBBStateChangeMask);
+               panel->shaB[i] = WMCreateCustomButton(panel->shaF, WBBStateChangeMask);
+               WMResizeWidget(panel->icoB[i], 40, 24);
+               WMMoveWidget(panel->icoB[i], 10 + (40 * i), 15);
+               WMResizeWidget(panel->shaB[i], 40, 24);
+               WMMoveWidget(panel->shaB[i], 10 + (40 * i), 15);
+               WMSetButtonBordered(panel->icoB[i], False);
+               WMSetButtonImagePosition(panel->icoB[i], WIPImageOnly);
+               if (i > 0) {
+                       WMGroupButtons(panel->icoB[0], panel->icoB[i]);
+               }
+               WMSetButtonBordered(panel->shaB[i], False);
+               WMSetButtonImagePosition(panel->shaB[i], WIPImageOnly);
+               if (i > 0) {
+                       WMGroupButtons(panel->shaB[0], panel->shaB[i]);
+               }
+               sprintf(buf1, SPEED_IMAGE, i);
+               sprintf(buf2, SPEED_IMAGE_S, i);
+               path = LocateImage(buf1);
+               if (path) {
+                       icon = WMCreatePixmapFromFile(scr, path);
+                       if (icon) {
+                               WMSetButtonImage(panel->icoB[i], icon);
+                               WMSetButtonImage(panel->shaB[i], icon);
+                               WMReleasePixmap(icon);
+                       } else {
+                               wwarning(_("could not load icon file %s"), path);
+                       }
+                       wfree(path);
+               }
+               path = LocateImage(buf2);
+               if (path) {
+                       icon = WMCreatePixmapFromFile(scr, path);
+                       if (icon) {
+                               WMSetButtonAltImage(panel->icoB[i], icon);
+                               WMSetButtonAltImage(panel->shaB[i], icon);
+                               WMReleasePixmap(icon);
+                       } else {
+                               wwarning(_("could not load icon file %s"), path);
+                       }
+                       wfree(path);
+               }
+       }
+       wfree(buf1);
+       wfree(buf2);
+
+       WMMapSubwidgets(panel->icoF);
+       WMMapSubwidgets(panel->shaF);
+
+    /***************** Smoothed Scaling *****************/
+       panel->smoF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->smoF, 115, 110);
+       WMMoveWidget(panel->smoF, 18, 115);
+       WMSetFrameTitle(panel->smoF, _("Smooth Scaling"));
+       WMSetBalloonTextForView(_("Smooth scaled background images, neutralizing\n"
+                                 "the `pixelization' effect. This will slow\n"
+                                 "down loading of background images considerably."), WMWidgetView(panel->smoF));
+
+       panel->smoB = WMCreateButton(panel->smoF, WBTToggle);
+       WMResizeWidget(panel->smoB, 64, 64);
+       WMMoveWidget(panel->smoB, 25, 25);
+       WMSetButtonImagePosition(panel->smoB, WIPImageOnly);
+       path = LocateImage(SMOOTH_IMAGE);
+       if (path) {
+               RImage *image, *scaled;
+
+               image = RLoadImage(WMScreenRContext(scr), path, 0);
+               wfree(path);
+
+               scaled = RScaleImage(image, 61, 61);
+               icon = WMCreatePixmapFromRImage(scr, scaled, 128);
+               RReleaseImage(scaled);
+               if (icon) {
+                       WMSetButtonImage(panel->smoB, icon);
+                       WMReleasePixmap(icon);
+               }
+
+               scaled = RSmoothScaleImage(image, 61, 61);
+               icon = WMCreatePixmapFromRImage(scr, scaled, 128);
+               RReleaseImage(scaled);
+               if (icon) {
+                       WMSetButtonAltImage(panel->smoB, icon);
+                       WMReleasePixmap(icon);
+               }
+
+               RReleaseImage(image);
+       }
+
+       WMMapSubwidgets(panel->smoF);
+
+    /***************** Titlebar Style Size ****************/
+       panel->titlF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->titlF, 105, 110);
+       WMMoveWidget(panel->titlF, 140, 115);
+       WMSetFrameTitle(panel->titlF, _("Titlebar Style"));
+
+       panel->newsB = WMCreateButton(panel->titlF, WBTOnOff);
+       WMResizeWidget(panel->newsB, 74, 40);
+       WMMoveWidget(panel->newsB, 15, 20);
+       WMSetButtonImagePosition(panel->newsB, WIPImageOnly);
+       path = LocateImage(NEWS_IMAGE);
+       if (path) {
+               icon = WMCreatePixmapFromFile(scr, path);
+               if (icon) {
+                       WMSetButtonImage(panel->newsB, icon);
+                       WMReleasePixmap(icon);
+               }
+       }
+
+       panel->oldsB = WMCreateButton(panel->titlF, WBTOnOff);
+       WMResizeWidget(panel->oldsB, 74, 40);
+       WMMoveWidget(panel->oldsB, 15, 60);
+       WMSetButtonImagePosition(panel->oldsB, WIPImageOnly);
+       path = LocateImage(OLDS_IMAGE);
+       if (path) {
+               icon = WMCreatePixmapFromFile(scr, path);
+               if (icon) {
+                       WMSetButtonImage(panel->oldsB, icon);
+                       WMReleasePixmap(icon);
+               }
+               wfree(path);
+       }
+
+       WMGroupButtons(panel->newsB, panel->oldsB);
+
+       WMMapSubwidgets(panel->titlF);
+
+    /**************** Features ******************/
+
+       panel->animF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->animF, 255, 115);
+       WMMoveWidget(panel->animF, 255, 10);
+       WMSetFrameTitle(panel->animF, _("Animations and Sound"));
+
+       panel->animB = WMCreateButton(panel->animF, WBTToggle);
+       WMResizeWidget(panel->animB, 64, 64);
+       WMMoveWidget(panel->animB, 15, 20);
+       WMSetButtonFont(panel->animB, font);
+       WMSetButtonText(panel->animB, _("Animations"));
+       WMSetButtonImagePosition(panel->animB, WIPAbove);
+       createImages(scr, rc, xis, ANIM_IMAGE, &altIcon, &icon);
+       if (icon) {
+               WMSetButtonImage(panel->animB, icon);
+               WMReleasePixmap(icon);
+       }
+       if (altIcon) {
+               WMSetButtonAltImage(panel->animB, altIcon);
+               WMReleasePixmap(altIcon);
+       }
+       WMSetBalloonTextForView(_("Disable/enable animations such as those shown\n"
+                                 "for window miniaturization, shading etc."), WMWidgetView(panel->animB));
+
+       panel->supB = WMCreateButton(panel->animF, WBTToggle);
+       WMResizeWidget(panel->supB, 64, 64);
+       WMMoveWidget(panel->supB, 95, 20);
+       WMSetButtonFont(panel->supB, font);
+       WMSetButtonText(panel->supB, _("Superfluous"));
+       WMSetButtonImagePosition(panel->supB, WIPAbove);
+       createImages(scr, rc, xis, SUPERF_IMAGE, &altIcon, &icon);
+       if (icon) {
+               WMSetButtonImage(panel->supB, icon);
+               WMReleasePixmap(icon);
+       }
+       if (altIcon) {
+               WMSetButtonAltImage(panel->supB, altIcon);
+               WMReleasePixmap(altIcon);
+       }
+       WMSetBalloonTextForView(_("Disable/enable `superfluous' features and\n"
+                                 "animations. These include the `ghosting' of the\n"
+                                 "dock when it's being moved to another side and\n"
+                                 "the explosion animation when undocking icons."), WMWidgetView(panel->supB));
+
+       panel->sfxB = WMCreateButton(panel->animF, WBTToggle);
+       WMResizeWidget(panel->sfxB, 64, 64);
+       WMMoveWidget(panel->sfxB, 175, 20);
+       WMSetButtonFont(panel->sfxB, font);
+       WMSetButtonText(panel->sfxB, _("Sounds"));
+       WMSetButtonImagePosition(panel->sfxB, WIPAbove);
+       createImages(scr, rc, xis, SOUND_IMAGE, &altIcon, &icon);
+       if (icon) {
+               WMSetButtonImage(panel->sfxB, icon);
+               WMReleasePixmap(icon);
+       }
+       if (altIcon) {
+               WMSetButtonAltImage(panel->sfxB, altIcon);
+               WMReleasePixmap(altIcon);
+       }
+       WMSetBalloonTextForView(_("Disable/enable support for sound effects played\n"
+                                 "for actions like shading and closing a window.\n"
+                                 "You will need a module distributed separately\n"
+                                 "for this. You can get it at:\n"
+                                 "http://largo.windowmaker.info/files.php#WSoundServer"),
+                               WMWidgetView(panel->sfxB));
+
+       panel->noteL = WMCreateLabel(panel->animF);
+       WMResizeWidget(panel->noteL, 235, 28);
+       WMMoveWidget(panel->noteL, 10, 85);
+       WMSetLabelFont(panel->noteL, font);
+       WMSetLabelText(panel->noteL, _("Note: sound requires a module distributed\nseparately"));
+
+       WMMapSubwidgets(panel->animF);
+
+    /*********** Dithering **********/
+       panel->cmapSize = 4;
+
+       panel->dithF = WMCreateFrame(panel->box);
+       WMResizeWidget(panel->dithF, 255, 95);
+       WMMoveWidget(panel->dithF, 255, 130);
+       WMSetFrameTitle(panel->dithF, _("Dithering colormap for 8bpp"));
+
+       WMSetBalloonTextForView(_("Number of colors to reserve for Window Maker\n"
+                                 "on displays that support only 8bpp (PseudoColor)."),
+                               WMWidgetView(panel->dithF));
+
+       panel->dithB = WMCreateSwitchButton(panel->dithF);
+       WMResizeWidget(panel->dithB, 235, 32);
+       WMMoveWidget(panel->dithB, 15, 15);
+       WMSetButtonText(panel->dithB, _("Disable dithering in any visual/depth"));
+
+       panel->dithL = WMCreateLabel(panel->dithF);
+       WMResizeWidget(panel->dithL, 75, 16);
+       WMMoveWidget(panel->dithL, 90, 50);
+       WMSetLabelTextAlignment(panel->dithL, WACenter);
+       WMSetLabelText(panel->dithL, "64");
+
+       panel->dithS = WMCreateSlider(panel->dithF);
+       WMResizeWidget(panel->dithS, 95, 16);
+       WMMoveWidget(panel->dithS, 80, 65);
+       WMSetSliderMinValue(panel->dithS, 2);
+       WMSetSliderMaxValue(panel->dithS, 6);
+       WMSetSliderContinuous(panel->dithS, True);
+       WMSetSliderAction(panel->dithS, updateLabel, panel);
+
+       panel->dith1L = WMCreateLabel(panel->dithF);
+       WMResizeWidget(panel->dith1L, 70, 35);
+       WMMoveWidget(panel->dith1L, 5, 50);
+       WMSetLabelTextAlignment(panel->dith1L, WACenter);
+       WMSetLabelFont(panel->dith1L, font);
+       WMSetLabelText(panel->dith1L, _("More colors for\napplications"));
+
+       panel->dith2L = WMCreateLabel(panel->dithF);
+       WMResizeWidget(panel->dith2L, 70, 35);
+       WMMoveWidget(panel->dith2L, 180, 50);
+       WMSetLabelTextAlignment(panel->dith2L, WACenter);
+       WMSetLabelFont(panel->dith2L, font);
+       WMSetLabelText(panel->dith2L, _("More colors for\nWindow Maker"));
+
+       WMMapSubwidgets(panel->dithF);
+
+       WMRealizeWidget(panel->box);
+       WMMapSubwidgets(panel->box);
+
+       if (xis)
+               RReleaseImage(xis);
+       WMReleaseFont(font);
+
+       showData(panel);
+}
+
+static void storeData(_Panel * panel)
+{
+       int i;
+
+       for (i = 0; i < 5; i++) {
+               if (WMGetButtonSelected(panel->icoB[i]))
+                       break;
+       }
+       SetSpeedForKey(i, "IconSlideSpeed");
+
+       for (i = 0; i < 5; i++) {
+               if (WMGetButtonSelected(panel->shaB[i]))
+                       break;
+       }
+       SetSpeedForKey(i, "ShadeSpeed");
+
+       SetBoolForKey(WMGetButtonSelected(panel->newsB), "NewStyle");
+
+       SetBoolForKey(!WMGetButtonSelected(panel->animB), "DisableAnimations");
+       SetBoolForKey(WMGetButtonSelected(panel->supB), "Superfluous");
+       SetBoolForKey(!WMGetButtonSelected(panel->sfxB), "DisableSound");
+
+       SetBoolForKey(WMGetButtonSelected(panel->smoB), "SmoothWorkspaceBack");
+
+       SetBoolForKey(WMGetButtonSelected(panel->dithB), "DisableDithering");
+       SetIntegerForKey(WMGetSliderValue(panel->dithS), "ColormapSize");
+}
+
+Panel *InitConfigurations(WMScreen * scr, WMWidget * parent)
+{
+       _Panel *panel;
+
+       panel = wmalloc(sizeof(_Panel));
+       memset(panel, 0, sizeof(_Panel));
+
+       panel->sectionName = _("Other Configurations");
+
+       panel->description = _("Animation speeds, titlebar styles, various option\n"
+                              "toggling and number of colors to reserve for\n" "Window Maker on 8bit displays.");
+
+       panel->parent = parent;
+
+       panel->callbacks.createWidgets = createPanel;
+       panel->callbacks.updateDomain = storeData;
+
+       AddSection(panel, ICON_FILE);
+
+       return panel;
+}