kobodl/cfgform.cpp
Ville Lindholm dbc223eb84
Initial commit
Import existing source tree; original VCS history is no longer available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-28 16:35:31 +03:00

153 lines
2.9 KiB
C++

/*(GPL)
------------------------------------------------------------
Kobo Deluxe - An enhanced SDL port of XKobo
------------------------------------------------------------
* Copyright (C) 2001-2003, 2006-2007 David Olofson
*
* 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.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "kobolog.h"
#include "config.h"
#include "cfgform.h"
#include "kobo.h"
#include "sound.h"
#include "vidmodes.h"
int global_status = 0;
config_form_t::config_form_t()
{
prf = NULL;
stat = 0;
}
config_form_t::~config_form_t()
{
}
void config_form_t::open(prefs_t *p)
{
init(gengine);
place(wmain->x(), wmain->y(), wmain->width(), wmain->height());
font(B_NORMAL_FONT);
foreground(wmain->map_rgb(0xffffff));
background(wmain->map_rgb(0x000000));
prf = p;
prfbak = *p;
stat = global_status & (OS_RELOAD | OS_RESTART | OS_UPDATE);
build_all();
}
void config_form_t::close()
{
vmm_Close();
clean();
}
void config_form_t::undo()
{
*prf = prfbak;
undo_hook();
}
int config_form_t::status()
{
return stat;
}
void config_form_t::clearstatus(int mask)
{
stat &= ~mask;
global_status = stat & (OS_RELOAD | OS_RESTART | OS_UPDATE);
}
void config_form_t::setstatus(int mask)
{
stat |= mask;
global_status = stat & (OS_RELOAD | OS_RESTART | OS_UPDATE);
}
/*virtual*/ void config_form_t::change(int delta)
{
kobo_form_t::change(delta);
if(!selected())
return;
if(selected()->tag & OS_CLOSE)
{
if(delta == 0)
{
sound.ui_ok();
setstatus(OS_CLOSE);
}
}
else if(selected()->tag & OS_CANCEL)
{
if(delta == 0)
{
sound.ui_cancel();
undo();
setstatus(OS_CLOSE);
}
}
else
sound.ui_tick();
if(selected()->user)
prf->changed = 1;
setstatus(selected()->tag & (OS_RELOAD | OS_RESTART | OS_UPDATE));
// If a video mode from the table is selected, get the parameters
// from the video mode manager!
if(prf->videomode)
{
VMM_Mode *m = vmm_FindMode(prf->videomode);
if(m)
{
prf->width = m->width;
prf->height = m->height;
prf->aspect = (int)(m->aspect * 1000.0f + .5f);
}
}
if(selected()->tag & OS_REBUILD)
{
int sel = selected_index();
build_all();
select(sel);
}
}
/* virtual */void config_form_t::build()
{
}
/* virtual */ void config_form_t::undo_hook()
{
stat = 0;
global_status = 0;
}