CtrlMapper 
  
Using CtrlMapper to edit C++ structure in dialog 
  
  
main.cpp 
  
#include <CtrlLib/CtrlLib.h> 
  
using namespace Upp; 
  
#define LAYOUTFILE <CtrlMapper/CtrlMapper.lay> 
#include <CtrlCore/lay.h> 
  
struct MyStruct { 
    String text; 
    bool   option; 
    double distance; 
}; 
  
struct MyDlg : WithMyDlgLayout<TopWindow> { 
    typedef MyDlg CLASSNAME; 
     
    void Map(CtrlMapper& m, MyStruct& s); 
     
    MyDlg(); 
}; 
  
MyDlg::MyDlg() 
{ 
    CtrlLayoutOK(*this, "My Dialog"); 
} 
  
void MyDlg::Map(CtrlMapper& m, MyStruct& s) 
{ 
    m 
        (text, s.text) 
        (option, s.option) 
        (distance, s.distance, 0.001) 
    ; 
} 
  
GUI_APP_MAIN 
{ 
    MyStruct data; 
    data.text = "Some text"; 
    data.option = true; 
    data.distance = 1700; 
  
    MyDlg dlg; 
    dlg.Map(CtrlMapper().ToCtrls(), data); 
    if(dlg.Run() == IDOK) 
        dlg.Map(CtrlMapper().ToValues(), data); 
     
    PromptOK(String() << "text: [* \1" << data.text << "\1]&" 
                      << "option: [* " << data.option << "]&" 
                      << "distance: [* " << data.distance << " m]"); 
} 
  
  
  
CtrlMapper.lay 
  
LAYOUT(MyDlgLayout, 200, 120) 
    ITEM(Upp::Label, dv___0, SetLabel(t_("Text")).LeftPosZ(8, 32).TopPosZ(8, 19)) 
    ITEM(Upp::EditString, text, LeftPosZ(64, 132).TopPosZ(8, 19)) 
    ITEM(Upp::Option, option, SetLabel(t_("Option")).LeftPosZ(64, 108).TopPosZ(32, 20)) 
    ITEM(Upp::Button, ok, SetLabel(t_("OK")).LeftPosZ(132, 64).TopPosZ(92, 24)) 
    ITEM(Upp::Label, dv___4, SetLabel(t_("Distance")).LeftPosZ(8, 56).TopPosZ(60, 19)) 
    ITEM(Upp::EditDouble, distance, LeftPosZ(64, 72).TopPosZ(60, 19)) 
    ITEM(Upp::Label, dv___6, SetLabel(t_("km")).LeftPosZ(140, 40).TopPosZ(60, 19)) 
END_LAYOUT 
  
  
  
  
CtrlRetriever.lay 
  
LAYOUT(CtrlRetrieverLayout, 200, 88) 
    ITEM(Label, dv___0, SetLabel(t_("Text")).LeftPosZ(8, 32).TopPosZ(8, 19)) 
    ITEM(EditString, text, LeftPosZ(44, 152).TopPosZ(8, 19)) 
    ITEM(Option, option, SetLabel(t_("Option")).LeftPosZ(44, 108).TopPosZ(36, 15)) 
    ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(132, 64).TopPosZ(60, 24)) 
END_LAYOUT 
  
  
  
  
  
 |