2009-08-02 10 views
8

(Ho taggato questa domanda anche come Python poiché ho capito il codice Python, quindi sono benvenuti anche gli esempi in Python!).In erlang: Come faccio ad espandere wxNotebook in un pannello?

Voglio creare una semplice finestra in wxWidgets:
creo un pannello principale, che aggiungo ad una forma
associo un boxsizer al pannello principale (tagliandola in due tronconi, in orizzontale).
aggiungo LeftPanel al boxsizer,
aggiungo RightPanel al boxsizer,
creo una nuova boxsizer (verticale)
creo un'altra boxsizer (orizzontale)
crea un widget Notebook
creo un Panel e metterlo dentro il notebook (addPage)
aggiungo il notebook alla nuova boxsizer (verticale)
aggiungo il sizer verticale quello orizzontale
associo sizer orizzontale alla RightPanel
Aggiungo il pannello sinistro e destro al misuratore principale.

Questo non funziona ...

Forse ho perso qualcosa (blocco mentale su sizers), ma quello che vorrei come di fare è quello di espandere il widget di notebook senza l'uso del sizer verticale all'interno di quello orizzontale (non funziona comunque).

Quindi la mia domanda è. Supponendo che voglio espandere il widget Notebook all'interno di RightPanel per occupare il resto dell'area destra del modulo, come farei per farlo?

Per coloro che capiscono Erlang, questo è quello che ho finora:

mainwindow() -> 
    %% Create new environment 
    X = wx:new(), 

    %% Create the main frame 
    MainFrame = wxFrame:new(X, -1, "Test"), 
    MainPanel = wxPanel:new(MainFrame, [{winid, ?wxID_ANY}]), 
    MainSizer = wxBoxSizer:new(?wxHORIZONTAL), 
    wxWindow:setSizer(MainPanel, MainSizer), 

    %% Left Panel... 
    LeftPanel = wxPanel:new(MainPanel, [{winid, ?wxID_ANY}]), 
    LeftPanelSizer = wxBoxSizer:new(?wxVERTICAL), 
    wxWindow:setSizer(LeftPanel, LeftPanelSizer), 
    wxWindow:setMinSize(LeftPanel, {152, -1}), 

    %% Right Panel 
    RightPanel = wxPanel:new(MainPanel, [{winid, ?wxID_ANY}]), 
    RightPanelVerticalSizer = wxBoxSizer:new(?wxVERTICAL), 
    RightPanelHorizontalSizer = wxBoxSizer:new(?wxHORIZONTAL), 
    wxWindow:setBackgroundColour(RightPanel, {255,0,0}), 

    Notebook = wxNotebook:new(RightPanel, ?wxID_ANY, [{size,{-1,-1}}]), 
    TestPanel1 = wxPanel:new(Notebook, [{size,{-1,-1}},{winid, ?wxID_ANY}]), 
    wxNotebook:addPage(Notebook, TestPanel1, "Testpanel!"), 
    TestPanel2 = wxPanel:new(Notebook, [{size,{-1,-1}},{winid, ?wxID_ANY}]), 
    wxNotebook:addPage(Notebook, TestPanel2, "Testpanel!"), 
    wxSizer:add(RightPanelVerticalSizer, Notebook, [{border,0},{proportion,1}, {flag,?wxEXPAND}]), 
    wxSizer:add(RightPanelHorizontalSizer, RightPanelVerticalSizer, [{proportion,1}, {flag,?wxEXPAND}]), 
    wxWindow:setSizer(RightPanel, RightPanelHorizontalSizer), 

    %% Main Sizer 
    wxSizer:add(MainSizer, LeftPanel, [{border, 2}, {flag,?wxEXPAND bor ?wxALL}]), 
    wxSizer:add(MainSizer, RightPanel, [{border, 2}, {flag,?wxEXPAND bor ?wxTOP bor ?wxRIGHT bor ?wxBOTTOM}]), 

    %% Connect to events 
    wxFrame:connect(MainFrame, close_window), 
    wxWindow:center(MainFrame), 
    wxWindow:show(MainFrame), 
    ... 

risposta

4

sto chiudendo questa domanda (il più presto possibile) dopo che ho capito cosa dovevo fare.

Fondamentalmente ho cambiato la proporzione a 1 di comando add al pannello principale (questo si espanderà il tutto)

Nuovo codice:

%% Main Sizer 
    wxSizer:add(MainSizer, LeftPanel, [{proportion,0},{border, 2}, {flag,?wxEXPAND bor ?wxALL}]), 
    wxSizer:add(MainSizer, RightPanel, [{proportion,1},{border, 2}, {flag,?wxEXPAND bor ?wxTOP bor ?wxRIGHT bor ?wxBOTTOM}]),