std::string InputBox(const std::string &msg, const std::string &init, int max, chtype out)
{
    CDialog *dialog = CreateBaseDialog(TColorPair(COLOR_GREEN, COLOR_BLUE),
                                       TColorPair(COLOR_WHITE, COLOR_BLUE), 50);
    
    CLabel *label = new CLabel(msg, false);
    label->SetMaxReqWidth(MaxW());
    dialog->AddWidget(label);
    
    CInputField *input = new CInputField(init, CInputField::STRING, max, out);
    dialog->StartPack(input, true, true, 1, 0);
    
    CButton *okbutton = new CButton(GetTranslation("OK")), *cancelbutton = new CButton(GetTranslation("Cancel"));
    dialog->AddButton(okbutton, false, false);
    dialog->AddButton(cancelbutton, false, false);

    TUI.AddGroup(dialog, true);
    
    while (dialog->Run())
        ;
    
    std::string ret;
    if (dialog->ActivatedWidget() != cancelbutton)
        ret = input->Value();
    
    delete dialog;
    
    return ret;
}
bool iProgressDialog::CreateProgressDlg(const iStringT &caption, const iStringT &lbl_text, bool cancel_btn, bool visible)
{
	m_CanCanceled = cancel_btn;
	m_IsCanceled = false;
	
	iSize clsize(300,50);

	iSize wsize(clsize.w + GetSystemMetrics(SM_CXDLGFRAME)*2,clsize.h+GetSystemMetrics(SM_CYSMCAPTION)+GetSystemMetrics(SM_CYDLGFRAME)*2);

	if (m_CanCanceled) wsize.h += (25+5);

	if (!CreateBaseDialog(wsize, caption,DLGSTL_TOOLWINDOW | DLGSTL_TOPMOST, visible)) return false;

	HFONT fnt = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

	RECT lblrect = { 5,5,295,25};
	if (!m_TextLabel.Create(m_hWnd,lblrect,lbl_text.CStr(),SS_CENTER | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS)) return false;
	m_TextLabel.SetFont(fnt);

	RECT prgrect = { 5,25,295,45 };
	if (!m_ProgressCtrl.Create(m_hWnd,prgrect,0,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS)) return false;

	if (m_CanCanceled)
	{
		RECT btnrect = { 100,50,200,75 };
		if (!m_CancelBtn.Create(m_hWnd,btnrect, _T("Cancel"),WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,0,1024)) return false;
		m_CancelBtn.SetFont(fnt);
	}

	return true;
}
void WarningBox(const std::string &msg)
{
    CDialog *dialog = CreateBaseDialog(TColorPair(COLOR_YELLOW, COLOR_RED),
                                       TColorPair(COLOR_WHITE, COLOR_RED), 30, 0, msg);
    
    dialog->AddButton(new CButton(GetTranslation("OK")));
    
    TUI.AddGroup(dialog, true);
    
    while (dialog->Run())
        ;
    
    delete dialog;
}
void MessageBox(const std::string &msg)
{
    CDialog *dialog = CreateBaseDialog(TColorPair(COLOR_GREEN, COLOR_BLUE),
                                       TColorPair(COLOR_WHITE, COLOR_BLUE), 25, 0, msg);
    
    dialog->AddButton(new CButton(GetTranslation("OK")));
    
    TUI.AddGroup(dialog, true);
    
    while (dialog->Run())
        ;
    
    delete dialog;
}
bool YesNoBox(const std::string &msg)
{
    CDialog *dialog = CreateBaseDialog(TColorPair(COLOR_GREEN, COLOR_BLUE), TColorPair(COLOR_WHITE, COLOR_BLUE),
                                       30, 0, msg);
    
    CButton *nobutton = new CButton(GetTranslation("No")), *yesbutton = new CButton(GetTranslation("Yes"));
    dialog->AddButton(yesbutton);
    dialog->AddButton(nobutton);
    
    TUI.AddGroup(dialog, true);
    
    while (dialog->Run())
        ;
    
    bool ret = (dialog->ActivatedWidget() == yesbutton);
    
    delete dialog;
    
    return ret;
}