Esempio n. 1
0
GInput::GInput(GViewI *parent, const char *InitStr, const char *Msg, const char *Title, bool Password, GInputCallback callback, void *callbackparam)
{
	Callback = callback;
	CallbackParam = callbackparam;

	GText *Txt = new GText(-1, 5, 5, -1, -1, Msg);
	GDisplayString MsgDs(SysFont, ValidStr(InitStr)?InitStr:"A");
	int Dx = LgiApp->GetMetric(LGI_MET_DECOR_X) + 10;
	int Dy = LgiApp->GetMetric(LGI_MET_DECOR_Y);
	
	int ContextX = 400;
	ContextX = max(ContextX, MsgDs.X() + 40);
	ContextX = min(ContextX, (int)(GdcD->X() * 0.8));
	int EditX = ContextX;
	int CallbackX = callback ? GBUTTON_MIN_X + 20 : 0;
	ContextX = max(ContextX, Txt->X() + CallbackX);

	GRect r(0, 0, ContextX + CallbackX + Dx, 70 + Txt->Y() + Dy);

	SetParent(parent);
	Name(Title);
	SetPos(r);
	MoveToCenter();

	GRect c = GetClient();
	Children.Insert(Txt);
	Children.Insert(Edit = new GEdit(IDC_EDIT, 5, Txt->GetPos().y2 + 5, EditX - 1, MsgDs.Y()+7, InitStr));
	if (Edit)
	{
		Edit->Password(Password);
		Edit->Focus(true);
		if (Callback)
		{
			GRect e = Edit->GetPos();
			Children.Insert(new GButton(IDC_CALLBACK, c.X() - (CallbackX-5) - 6, e.y1, CallbackX-5, e.Y()-1, "..."));
		}
	}

	GButton *Ok = new GButton(IDOK, 0, 0, -1, -1, LgiLoadString(L_BTN_OK, "Ok"));
	GButton *Cancel = new GButton(IDCANCEL, 0, 0, -1, -1, LgiLoadString(L_BTN_CANCEL, "Cancel"));
	int BtnX = max(Ok->X(), Cancel->X());
	int BtnY = Edit->GetPos().y2 + 11;
	
	GRect p = Cancel->GetPos();
	p.x2 = p.x1 + BtnX - 1;
	p.Offset(c.X() - Cancel->X() - 5, BtnY);
	Cancel->SetPos(p);
	
	p = Ok->GetPos();
	p.x2 = p.x1 + BtnX - 1;
	p.Offset(Cancel->GetPos().x1 - p.X() - 5, BtnY);
	Ok->SetPos(p);

	Children.Insert(Ok);
	Children.Insert(Cancel);
	Ok->Default(true);
}
Esempio n. 2
0
GAlert::GAlert(	GViewI *parent,
				const char *Title,
				const char *Text,
				const char *Btn1,
				const char *Btn2,
				const char *Btn3)
{
	GText *t = 0;
	Children.Insert(t = new GText(-1, 8, 8, -1, -1, (char*)Text));
	if (t)
	{
		// Setup dialog
		SetParent(parent);
		Name((char*)Title);

		List<GButton> Btns;
		List<const char> Names;
		if (Btn1) Names.Insert(Btn1);
		if (Btn2) Names.Insert(Btn2);
		if (Btn3) Names.Insert(Btn3);
		int i = 1, Tx = 0;
		for (const char *n=Names.First(); n; n=Names.Next())
		{
			GDisplayString ds(SysFont, (char*)n);
			int x = ds.X();
			GButton *v;
			Btns.Insert(v = new GButton(CMD_BASE + i++,
										0, 0,
										(int) ((30.0f + x) * BTN_SCALE),
										(int) (20.0f * BTN_SCALE),
										(char*)n));
			Tx += v->X() + ((i>1) ? 10 : 0);
		}
		
		int x = LgiApp->GetMetric(LGI_MET_DECOR_X) + 16;
		int y = LgiApp->GetMetric(LGI_MET_DECOR_Y) + 20 + 8 + 16;
		GRect r;
		if (t)
		{
			x += max(Tx, t->X());
			y += t->Y();
			r.ZOff(x, y);
		}
		SetPos(r);
		MoveToCenter();

		// Setup controls
		int Cx = X() / 2;
		int Bx = Cx - (Tx / 2);
		for (GButton *b=Btns.First(); b; b=Btns.Next())
		{
			GRect r;
			r.ZOff(b->X()-1, b->Y()-1);
			r.Offset(Bx, t->GetPos().y2 + 8);
			b->SetPos(r);
			Children.Insert(b);
			Bx += b->X() + 10;
		}
	}
}