//**************************************************
// Dialog Control Manipulator
// LABPP 2022
//**************************************************
int iDialog_DCM;
int iListBox_DCM, iButton_Ok_DCM;
int iTable_DCM;
int iEdit_iDescr_DCM;
int iEdit_PosX_DCM, iBarControl_PosX_DCM;
int iEdit_PosY_DCM, iBarControl_PosY_DCM;
int iEdit_Width_DCM, iBarControl_Width_DCM;
int iEdit_Height_DCM, iBarControl_Height_DCM;

int main()
{
	int ires;
	ac_request("clearmessagewindow");

	// Create Dialog
	int x, y, w, h, offset;

	object("create", "ts_dialog", iDialog_DCM);
	ts_dialog(iDialog_DCM, "init_dialog", "palette", 0, 0, 140, 180);
	ts_dialog(iDialog_DCM, "set_as_main_panel");
	ts_dialog(iDialog_DCM, "SetGrowType", 3);

	ts_dialog(iDialog_DCM, "SetTitle", "DControl Manipula");

	x = 10;
	w = 98;
	int delta = 5;
	y = 5;
	h = 22;

	object("create", "ts_dialogcontrol", iEdit_iDescr_DCM);
	ts_dialogcontrol(iEdit_iDescr_DCM, "init_control", "posintedit", iDialog_DCM, x, y, w, h);
	ts_dialogcontrol(iEdit_iDescr_DCM, "settooltip", "iDescription of the manipulated element");
	ts_dialogcontrol(iEdit_iDescr_DCM, "eventreaction", "Event_PosIntEditChanged", "Event_PosIntEditChanged_DCM");
	y = y +h+ delta;
	object("create", "ts_dialogcontrol", iEdit_PosX_DCM);
	ts_dialogcontrol(iEdit_PosX_DCM, "init_control", "posintedit", iDialog_DCM, x, y, w, h);
	ts_dialogcontrol(iEdit_PosX_DCM, "settooltip", "Pos X");
	object("create", "ts_dialogcontrol", iBarControl_PosX_DCM);
	ts_dialogcontrol(iBarControl_PosX_DCM, "init_control", "editspin", iDialog_DCM, x+w, y-1, 20, h+3,iEdit_PosX_DCM);
	ts_dialogcontrol(iEdit_PosX_DCM, "eventreaction", "Event_PosIntEditChanged", "Event_PosIntEditChanged_DCM");

	y = y +h+ delta;
	object("create", "ts_dialogcontrol", iEdit_PosY_DCM);
	ts_dialogcontrol(iEdit_PosY_DCM, "init_control", "posintedit", iDialog_DCM, x, y, w, h);
	object("create", "ts_dialogcontrol", iBarControl_PosY_DCM);
	ts_dialogcontrol(iEdit_PosY_DCM, "settooltip", "Pos Y");
	ts_dialogcontrol(iBarControl_PosY_DCM, "init_control", "editspin", iDialog_DCM, x+w, y-1, 20, h+3,iEdit_PosY_DCM);
	ts_dialogcontrol(iEdit_PosY_DCM, "eventreaction", "Event_PosIntEditChanged", "Event_PosIntEditChanged_DCM");

	y = y +h+ delta;
	object("create", "ts_dialogcontrol", iEdit_Width_DCM);
	ts_dialogcontrol(iEdit_Width_DCM, "init_control", "posintedit", iDialog_DCM, x, y, w, h);
	ts_dialogcontrol(iEdit_Width_DCM, "settooltip", "Width of the dialog control");
	object("create", "ts_dialogcontrol", iBarControl_Width_DCM);
	ts_dialogcontrol(iBarControl_Width_DCM, "init_control", "editspin", iDialog_DCM, x+w, y-1, 20, h+3,iEdit_Width_DCM);
	ts_dialogcontrol(iEdit_Width_DCM, "eventreaction", "Event_PosIntEditChanged", "Event_PosIntEditChanged_DCM");

	y = y +h+ delta;
	object("create", "ts_dialogcontrol", iEdit_Height_DCM);
	ts_dialogcontrol(iEdit_Height_DCM, "init_control", "posintedit", iDialog_DCM, x, y, w, h);
	ts_dialogcontrol(iEdit_Height_DCM, "settooltip", "Height of the dialog control");
	object("create", "ts_dialogcontrol", iBarControl_Height_DCM);
	ts_dialogcontrol(iBarControl_Height_DCM, "init_control", "editspin", iDialog_DCM, x+w, y-1, 20, h+3,iEdit_Height_DCM);
	ts_dialogcontrol(iEdit_Height_DCM, "eventreaction", "Event_PosIntEditChanged", "Event_PosIntEditChanged_DCM");

	y = y + h + delta + 10;
	x = x + 20 + delta;
	object("create", "ts_dialogcontrol", iButton_Ok_DCM, "iButton_Ok_DCM");
	ts_dialogcontrol(iButton_Ok_DCM, "init_control", "button", iDialog_DCM, x, y, w, h);
	ts_dialogcontrol(iButton_Ok_DCM, "eventreaction", "Event_ButtonClicked", "Event_ButtonClicked_DCM");
	ts_dialogcontrol(iButton_Ok_DCM, "settext", "Ok");
	ts_dialogcontrol(iButton_Ok_DCM, "SetAnchorToPanelResize", 0, 0, 0, 0);

	bool bres;
	ts_dialog(iDialog_DCM, "invoke", bres);

	return 0;
}

int Event_ButtonClicked_DCM(int iDescr, string sDescr)
{
	if (sDescr == "iButton_Ok_DCM") {
		ts_dialog(iDialog_DCM, "SendCloseRequest");
	}
}
int Event_PosIntEditChanged_DCM(int iDescr, string sDescr)
{
	int iDescrManipulated;
	int posX, posY, w, h, labppdeltaY, labppdeltaH;
	ts_dialogcontrol(iEdit_PosX_DCM, "GetValue", posX);
	ts_dialogcontrol(iEdit_PosY_DCM, "GetValue", posY);
	ts_dialogcontrol(iEdit_Width_DCM, "GetValue", w);
	ts_dialogcontrol(iEdit_Height_DCM, "GetValue", h);
	ts_dialogcontrol(iEdit_iDescr_DCM, "GetValue", iDescrManipulated);
	ts_dialogcontrol(iDescrManipulated,"GetLabPPDeltaY",labppdeltaY);
	ts_dialogcontrol(iDescrManipulated,"GetLabPPDeltaH",labppdeltaH);
	if (sDescr == "iEdit_iDescr_DCM")
	{
		coutvar << iDescrManipulated;
		ts_dialogcontrol(iDescrManipulated, "GetPosition", posX, posY);
		ts_dialogcontrol(iDescrManipulated, "GetWH", w, h);

		ts_dialogcontrol(iEdit_PosX_DCM, "SetValue", posX);
		posY += labppdeltaY;
		ts_dialogcontrol(iEdit_PosY_DCM, "SetValue", posY);
		ts_dialogcontrol(iEdit_Width_DCM, "SetValue", w);
		h += labppdeltaH;
		ts_dialogcontrol(iEdit_Height_DCM, "SetValue", h);
	}
	else if (sDescr == "iEdit_PosX_DCM") 
	{
		ts_dialogcontrol(iDescrManipulated, "SetPosition", posX, posY);
	}
	else if (sDescr == "iEdit_PosY_DCM") 
	{
		posY -= labppdeltaY;
		ts_dialogcontrol(iDescrManipulated, "SetPosition", posX, posY);
	}
	else if (sDescr == "iEdit_Width_DCM") 
	{
		h -= labppdeltaH;
		ts_dialogcontrol(iDescrManipulated, "SetWH", w, h);
	}
	else if (sDescr == "iEdit_Height_DCM") 
	{
		h -= labppdeltaH;
		ts_dialogcontrol(iDescrManipulated, "SetWH", w, h);
	}
}
