Sophie

Sophie

distrib > * > cooker > x86_64 > by-pkgid > 76cddaa0ea391b2c8611895ac3075a20 > files > 49

einstein-2.0-1.x86_64.rpm

#include "options.h"
#include "storage.h"
#include "main.h"
#include "messages.h"
#include "sound.h"


class OptionsChangedCommand: public Command
{
    private:
        bool &fullscreen;
        bool &niceCursor;
        float &volume;
        Area *area;
    
    public:
        OptionsChangedCommand(Area *a, bool &fs, bool &ns, float &v): 
            fullscreen(fs), niceCursor(ns), volume(v) {
            area = a;
        };

        virtual void doAction() {
            bool oldFullscreen = (getStorage()->get(L"fullscreen", 1) != 0);
            bool oldCursor = (getStorage()->get(L"niceCursor", 1) != 0);
            float oldVolume = (float)getStorage()->get(L"volume", 20) / 100.0f;
            if (fullscreen != oldFullscreen) {
                getStorage()->set(L"fullscreen", fullscreen);
                screen.setMode(VideoMode(800, 600, 24, fullscreen));
            }
#ifndef __APPLE__
            if (niceCursor != oldCursor) {
                getStorage()->set(L"niceCursor", niceCursor);
                screen.setCursor(niceCursor);
            }
#endif
            if (volume != oldVolume) {
                getStorage()->set(L"volume", (int)(volume * 100.0f));
                sound->setVolume(volume);
            }
            getStorage()->flush();
            area->finishEventLoop();
        };
};


#define LABEL(y, s) \
    area.add(new Label(&font, 300, y, 300, 20, Label::ALIGN_LEFT, \
                Label::ALIGN_MIDDLE, 255,255,255, msg(s)));
#define CHECKBOX(y, var) \
    area.add(new Checkbox(265, y, 20, 20, &font, 255,255,255, L"blue.bmp", \
                var));
#define OPTION(y, s, var) LABEL(y, s) CHECKBOX(y, var)

void showOptionsWindow(Area *parentArea)
{
    Font titleFont(L"nova.ttf", 26);
    Font font(L"laudcn2.ttf", 14);

    bool fullscreen = (getStorage()->get(L"fullscreen", 1) != 0);
    bool niceCursor = (getStorage()->get(L"niceCursor", 1) != 0);
    float volume = ((float)getStorage()->get(L"volume", 20)) / 100.0f;
    
    Area area;

    area.add(parentArea);
    area.add(new Window(250, 170, 300, 260, L"blue.bmp"));
    area.add(new Label(&titleFont, 250, 175, 300, 40, Label::ALIGN_CENTER,
                Label::ALIGN_MIDDLE, 255,255,0, msg(L"options")));
    OPTION(260, L"fullscreen", fullscreen);
#ifndef __APPLE__
    OPTION(280, L"niceCursor", niceCursor);
#endif
    
    area.add(new Label(&font, 265, 330, 300, 20, Label::ALIGN_LEFT,
                Label::ALIGN_MIDDLE, 255,255,255, msg(L"volume")));
    area.add(new Slider(360, 332, 160, 16, volume));
    
    ExitCommand exitCmd(area);
    OptionsChangedCommand okCmd(&area, fullscreen, niceCursor, volume);
    area.add(new Button(315, 390, 85, 25, &font, 255,255,0, L"blue.bmp", 
                msg(L"ok"), &okCmd));
    area.add(new Button(405, 390, 85, 25, &font, 255,255,0, L"blue.bmp", 
                msg(L"cancel"), &exitCmd));
    area.add(new KeyAccel(SDLK_ESCAPE, &exitCmd));
    area.add(new KeyAccel(SDLK_RETURN, &okCmd));
    area.run();
}