/*
	setup.c

	｢各種設定｣コマンド

	編集画像の大きさが(512,480)未満のときは 1倍表示不可
	★★ zoomrate の1の禁止条件のチェック！
*/

#define DEBUG

#include <stdio.h>
#include <msdos.cf>
#include <memory.h>

#include "ge.h"
#include "dispman.h"
#include "imageman.h"

#if 1

#define	GETITEMXY(n)	menu_getitemxy(NULL,(n),&ix,&iy,NULL,NULL)
#define	GETITEMXYS(n)	menu_getbuttonxy(NULL,(n),&ix,&iy,&ixlen,&iylen)

/*--------------------------------------------------------*/
/*                        内部変数                        */
/*--------------------------------------------------------*/

static	int		para_lat2xlen,para_lat2ylen;
static	int  	_zoomY;

/*--------------------------------------------------------*/
/*                ｢各種設定｣メニューの定義                */
/*--------------------------------------------------------*/

static void dspSetupMenu(),ersSetupMenu();
/*
enum {
	selLat1Sw=0, selLat2Sw, selZoom,
	selCopyop, selMatteAdj, selAreaAdj,
	selSpray, selColModel, selCsrCol, selBackCol
};
*/

#include "setup.md"

#define	IL		setupmenu.itemlist

static void dspSetupMenu()
{
}


static void ersSetupMenu()
{
}


/*--------------------------------------------------------*/
/*                  メニューの更新用関数                  */
/*--------------------------------------------------------*/


static void drwItemCsr(int itemNum)
{
	int ix,iy,ixlen,iylen;
	GETITEMXYS(itemNum);
	grboxline(ix-2,iy-1,ixlen+4,iylen+2,DMgetmenuplt(Black),DrawNORMAL);
}


static void ersItemCsr(int itemNum)
{
	int ix,iy,ixlen,iylen;
	GETITEMXYS(itemNum);
	grboxline(ix-2,iy-1,ixlen+4,iylen+2,DMgetmenuplt(COL_menu),DrawNORMAL);
}


/*--------------------------------------------------------*/
/*           設定メニューの画面モードごとの調整           */
/*--------------------------------------------------------*/


static void makeSetupMenu()
{
	// static ITEM items[] = {
	// 	{ 16,180,0,0,typeSTRe,(int)"透過時の境界補正",NOFNC },	// 34
	// 	{ 160,180,96+32,16,typeSTR,(int)"あり　　　　なし",NOFNC }	// 35
	// };
	// if (mode == MODE32K)
	// 	memcpy(&setupmenu_items[34], &items[0], sizeof(ITEM)*2);
	// else
	// 	memset(&setupmenu_items[34], 0, sizeof(ITEM)*2);

	menu_scrollbar_setvar(menu_scrollbar(&setupmenu,barLAT2XSIZE),para_lat2xlen);
	menu_scrollbar_setvar(menu_scrollbar(&setupmenu,barLAT2YSIZE),para_lat2ylen);
	menu_scrollbar_setvar(menu_scrollbar(&setupmenu,barNIZIMI),blot_depth);
	menu_scrollbar_setvar(menu_scrollbar(&setupmenu,barKOSURE),goshi_para);
	menu_scrollbar_setvar(menu_scrollbar(&setupmenu,barSPRAY),spray_r);
}


/*--------------------------------------------------------*/
/*                   ｢各種設定｣主処理                     */
/*--------------------------------------------------------*/


static SEL_E *selem(int s_id, int e_id)
{
	SEL *s = menu_selector(&setupmenu,s_id);
	SEL_E *e = menu_selector_element(s,e_id);
	return e;
}

static int getselvar(int id)
{
	SEL *s = menu_selector(&setupmenu,id);
	return menu_selector_getvar(s);
}

static void setselvar(int id,int n)
{
	SEL *s = menu_selector(&setupmenu,id);
	menu_selector_setvar(s,n);
}


void commandSetup()
{
	PRINT("commandSetup begin\n");
	bool para_lat1disp,para_lat2disp;
	int	para_zoomrate = DMimage_getzoomrate();
	DMimage_getlatticeswitch(&para_lat1disp, &para_lat2disp);
	KNOW(menu_selector(&setupmenu, selLat1Sw) != NULL);
	setselvar(selLat1Sw, para_lat1disp ? 0 : 1);
	KNOW(menu_selector(&setupmenu, selLat2Sw) != NULL);
	setselvar(selLat2Sw, para_lat2disp ? 0 : 1);
	KNOW(selem(selZoom,seZ1) != NULL);
	menu_selector_element_setavail(selem(selZoom,seZ1),minzoomrate>1?NO:YES);
	setselvar(selZoom,
		para_zoomrate==1 ? 0 :  para_zoomrate==2 ? 1 : 
		para_zoomrate==4 ? 2 :  para_zoomrate==8 ? 3 : 4);
	setselvar(selCopyop,blkop==DrawNORMAL? 0 : blkop == DrawMATTE ? 1 : 0);
	setselvar(selMatteAdj, blkop_edge ? 0 : 1);
	setselvar(selAreaAdj, areaadj ? 0 : 1);
	setselvar(selSpray, (spray_t == 0 ? 0 : 1));
	setselvar(selColModel, colmodel==MODEL_RGB ? 0 : 1);
	setselvar(selCsrCol, csrcol==COL_cursorLight? 0: 1);
	setselvar(selBackCol, whiteback ? 0 : 1);
	setselvar(selPartSave, use_partsave ? 0 : 1);
	setselvar(selLoadMove, use_loadmove ? 0 : 1);
	PRINT("選択子・値設定終了\n");
	DMimage_getlatticesize(&para_lat2xlen, &para_lat2ylen);
	makeSetupMenu();
	menu_disp(&setupmenu);
	for (;;) {
		DMdispcsr(ms.x,ms.y);
		for (;;) {
			ms_get(&ms);
			if (ms.dx!=0 || ms.dy!=0 || ms.btn1!=OFF || ms.btn2!=OFF ||
			 key_chk()!=0)
				break;
		}
		DMerasecsr();
		scrollForCsr(1,1);
		if (ms.btn1 == OFFON) {
			int a; int ax,ay; SCROLLBAR *sbarp;
			a = menu_where(ms.x,ms.y,&setupmenu, &ax,&ay,&sbarp);
			switch (a)
			{
			case itemMoveMenu:
				menu_move();
				break;
			case itemScrollBar:
				menu_touchscrollbar(sbarp, ax,ay);
				break;
			case itemSelector:
				menu_touchselector(&setupmenu);
				break;
			}
		}
		if (ms.btn2 == OFFON)
			break;
		if (key_read() == 27)
			break;
	}
	menu_erase();
	DMimage_setlatticeswitch(NO,NO);
	int dispx,dispy;
	DMimage_getdispxy(&dispx,&dispy);
	int s,t;
	t = getselvar(selZoom);
	para_zoomrate = (t == 0 ? 1 : t == 1 ? 2 : t == 2 ? 4 : t == 3 ? 8 : 16);
	DMimage_setzoomrate(para_zoomrate);
	DMimage_setdispxy(dispx,dispy);
	t = menu_scrollbar_getvar(menu_scrollbar(&setupmenu,barLAT2XSIZE));
	s = menu_scrollbar_getvar(menu_scrollbar(&setupmenu,barLAT2YSIZE));
	DMimage_setlatticesize(t,s);
	blot_depth = menu_scrollbar_getvar(menu_scrollbar(&setupmenu,barNIZIMI));
	goshi_para = menu_scrollbar_getvar(menu_scrollbar(&setupmenu,barKOSURE));
	spray_r    = menu_scrollbar_getvar(menu_scrollbar(&setupmenu,barSPRAY));
	t = getselvar(selLat1Sw);
	s = getselvar(selLat2Sw);
	DMimage_setlatticeswitch(t==0?YES:NO, s==0?YES:NO);
	blkop = (getselvar(selCopyop)==0 ? DrawNORMAL : DrawMATTE);
	blkop_edge = (getselvar(selMatteAdj)==0 ? YES : NO);
	areaadj = (getselvar(selAreaAdj) == 0 ? YES : NO);
	spray_t = (getselvar(selSpray) == 0 ? 0 : 1);
	colmodel = (getselvar(selColModel)==0?MODEL_RGB:MODEL_HLS);
	csrcol=(getselvar(selCsrCol)==0 ? COL_cursorLight:COL_cursorDark);
	whiteback = (getselvar(selBackCol) == 0 ? YES : NO);
	use_partsave = (getselvar(selPartSave) == 0 ? YES : NO);
	use_loadmove = (getselvar(selLoadMove) == 0 ? YES : NO);
	PRINT("commandSetup end\n");
}

/* end of setup.c */



#else

void commandSetup()
{
}

#endif
