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); }
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; } } }