User forums > General (but related to Code::Blocks)

WxSmith generate wrong code with sizer

<< < (2/3) > >>

gst0098:

--- Quote ---Guiseppe,

I tried your code quickly under Kubuntu 14.04 and using wx3.0. Sure enough it caused problems. However I cannot say exactly why. It seems strange that Layout() is called several times (6 times!!) in your main frame constructor. I think somehow you've managed to fool the system.

But your code seems overly complex using FlexGridSizer etc. in many layers. In my experience this can be asking for trouble. I started deleting until it worked, but I couldn't pinpoint the issue directly. I would recommend keeping the number of layers in the GUI design less complicated. One way I have done that is using only wxBoxSizers vertical/horizontal as needed, it tends to work fine (many layers also, but simpler).

But lately, I have started using wxAUI for these things. It looks better, it is easier to use and far more flexible with docking support etc. Generally drop a wxAuiManager into the main frame, and add panels to it.

Whether or not I use AUI, I tend to create custom panels (all the time using wxSmith) and add them to notebooks or AUI. I find that the application structure becomes cleaner (IMHO) that way.

So I think you have to prototype a layout until you find something that works. Test for every new complexity you add, so you are able to identify where problems begin.

--- End quote ---

Thanks for the advice I will try to convert the structure to a less complicated one, nevetherless I believe that there is a bug that should be fixed, I will try to follow your last hint in order to catch the point where the problem arise.

Giuseppe

MortenMacFly:
Sorry, I just realised that I completely missed your answer with the sample....

hermit:
Platform: Distributor ID:   Linuxmint
Description:   Linux Mint 21.3
Release:   21.3
Codename:   virginia

Codeblocks version 20.03

I am similar kind of issue while using wxSmith.


--- Code: ---    Panel1->SetSizer(StaticBoxSizer1);
    SetSizer(StaticBoxSizer1);
    Layout();
    BoxSizer1->Add(Panel1, 1, wxALL|wxEXPAND, 5);
    SetSizer(BoxSizer1);
--- End code ---

it occurs when using StaticBoxSizer. wxFrame > wxBoxSizer > wxPanel:Panel1> wxStaticBoxSizer > wxButton1 wxButton2 ...

Then it generates

--- Code: --- SetSizer(StaticBoxSizer1);
--- End code ---
after commenting SetSizer the code works well

Is there is something i am missing?

Thanks in advance

Regards,
Hermit

Miguel Gimenez:
IIRC this issue was fixed about a year ago. Current trunk generates this code:

--- Code: ---    wxBoxSizer* BoxSizer1;
    wxStaticBoxSizer* StaticBoxSizer1;

    Create(parent, id, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id"));
    SetClientSize(wxDefaultSize);
    Move(wxDefaultPosition);
    BoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
    Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1"));
    StaticBoxSizer1 = new wxStaticBoxSizer(wxHORIZONTAL, Panel1, _("Label"));
    Button1 = new wxButton(Panel1, ID_BUTTON1, _("Label"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1"));
    StaticBoxSizer1->Add(Button1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    Button2 = new wxButton(Panel1, ID_BUTTON2, _("Label"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2"));
    StaticBoxSizer1->Add(Button2, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    Panel1->SetSizer(StaticBoxSizer1);
    BoxSizer1->Add(Panel1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    SetSizer(BoxSizer1);
    BoxSizer1->SetSizeHints(this);

--- End code ---

It runs OK on MSW with wxWidgets 3.2.5

hermit:
Hi,
I was using wxWidgets 3.2.4
Could you please help me out what am i doing wrong?

i build the wxwidgets from the source but i couldnt find 3.2.5.

after your suggestion i tried again to install wxWidgets as per the instructions but i could find only wxwidgets 3.2.4.
I used this link:-
--- Code: ---https://docs.codelite.org/wxWidgets/repo32/
--- End code ---
here is my wxWidgets version :-

--- Code: ---wxWidgets-3.2.4/gtk-build/wx-config --version
3.2.4

--- End code ---

Here is my Build log


--- Code: ---Checking for existence: /home/gunjan/wxWidgets-3.2.4/gtk-build/samples/gunjansample/test_hello/bin/Debug/test_hello
Set variable: LD_LIBRARY_PATH=.:/usr/lib/x86_64-linux-gnu:
Executing: /home/gunjan/wxWidgets-3.2.4/gtk-build/samples/gunjansample/test_hello/bin/Debug/test_hello  (in /home/gunjan/wxWidgets-3.2.4/gtk-build/samples/gunjansample/test_hello/.)
Process terminated with status -11 (0 minute(s), 0 second(s))

--- End code ---


i am still getting the same error here i created small application. At Line 74 you can see SetSizer(StaticBoxSizer1);

--- Code: ---#include "test_helloMain.h"
#include <wx/msgdlg.h>
#include <wx/log.h> // Include wxLog for debugging

//(*InternalHeaders(test_helloFrame)
#include <wx/intl.h>
#include <wx/string.h>
//*)

//helper functions
enum wxbuildinfoformat {
    short_f, long_f };

wxString wxbuildinfo(wxbuildinfoformat format)
{
    wxString wxbuild(wxVERSION_STRING);

    if (format == long_f )
    {
#if defined(__WXMSW__)
        wxbuild << _T("-Windows");
#elif defined(__UNIX__)
        wxbuild << _T("-Linux");
#endif

#if wxUSE_UNICODE
        wxbuild << _T("-Unicode build");
#else
        wxbuild << _T("-ANSI build");
#endif // wxUSE_UNICODE
    }

    return wxbuild;
}

//(*IdInit(test_helloFrame)
const long test_helloFrame::ID_BUTTON1 = wxNewId();
const long test_helloFrame::ID_TEXTCTRL1 = wxNewId();
const long test_helloFrame::ID_PANEL1 = wxNewId();
const long test_helloFrame::idMenuQuit = wxNewId();
const long test_helloFrame::idMenuAbout = wxNewId();
const long test_helloFrame::ID_STATUSBAR1 = wxNewId();
//*)

BEGIN_EVENT_TABLE(test_helloFrame,wxFrame)
    //(*EventTable(test_helloFrame)
    //*)
END_EVENT_TABLE()

test_helloFrame::test_helloFrame(wxWindow* parent,wxWindowID id)
{
    wxLogDebug("test_helloFrame Constructor - Start");
    //(*Initialize(test_helloFrame)
    wxBoxSizer* BoxSizer1;
    wxMenu* Menu1;
    wxMenu* Menu2;
    wxMenuBar* MenuBar1;
    wxMenuItem* MenuItem1;
    wxMenuItem* MenuItem2;
    wxStaticBoxSizer* StaticBoxSizer1;

    Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY"));
    BoxSizer1 = new wxBoxSizer(wxHORIZONTAL);
    Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxSize(185,134), wxTAB_TRAVERSAL, _T("ID_PANEL1"));
    StaticBoxSizer1 = new wxStaticBoxSizer(wxHORIZONTAL, Panel1, _("Label"));
    Button1 = new wxButton(Panel1, ID_BUTTON1, _("Label"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1"));
    StaticBoxSizer1->Add(Button1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    TextCtrl1 = new wxTextCtrl(Panel1, ID_TEXTCTRL1, _("Text"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));
    StaticBoxSizer1->Add(TextCtrl1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    Panel1->SetSizer(StaticBoxSizer1);
    SetSizer(StaticBoxSizer1);
    Layout();
    BoxSizer1->Add(Panel1, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
    SetSizer(BoxSizer1);
    MenuBar1 = new wxMenuBar();
    Menu1 = new wxMenu();
    MenuItem1 = new wxMenuItem(Menu1, idMenuQuit, _("Quit\tAlt-F4"), _("Quit the application"), wxITEM_NORMAL);
    Menu1->Append(MenuItem1);
    MenuBar1->Append(Menu1, _("&File"));
    Menu2 = new wxMenu();
    MenuItem2 = new wxMenuItem(Menu2, idMenuAbout, _("About\tF1"), _("Show info about this application"), wxITEM_NORMAL);
    Menu2->Append(MenuItem2);
    MenuBar1->Append(Menu2, _("Help"));
    SetMenuBar(MenuBar1);
    StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1"));
    int __wxStatusBarWidths_1[1] = { -1 };
    int __wxStatusBarStyles_1[1] = { wxSB_NORMAL };
    StatusBar1->SetFieldsCount(1,__wxStatusBarWidths_1);
    StatusBar1->SetStatusStyles(1,__wxStatusBarStyles_1);
    SetStatusBar(StatusBar1);
    BoxSizer1->Fit(this);
    BoxSizer1->SetSizeHints(this);

    Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&test_helloFrame::OnButton1Click);
    Connect(ID_TEXTCTRL1,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&test_helloFrame::OnTextCtrl1Text);
    Connect(idMenuQuit,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&test_helloFrame::OnQuit);
    Connect(idMenuAbout,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&test_helloFrame::OnAbout);
    //*)
    wxLogDebug("test_helloFrame Constructor - End");
}

test_helloFrame::~test_helloFrame()
{
    wxLogDebug("test_helloFrame Destructor");
    //(*Destroy(test_helloFrame)
    //*)
}

void test_helloFrame::OnQuit(wxCommandEvent& event)
{
    wxLogDebug("OnQuit");
    Close();
}

void test_helloFrame::OnAbout(wxCommandEvent& event)
{
    wxLogDebug("OnAbout");
    wxString msg = wxbuildinfo(long_f);
    wxMessageBox(msg, _("Welcome to..."));
}

void test_helloFrame::OnButton1Click(wxCommandEvent& event)
{
    wxLogDebug("OnButton1Click");
    wxMessageBox(_("Button clicked"), _("Info"));
}

void test_helloFrame::OnTextCtrl1Text(wxCommandEvent& event)
{
    wxLogDebug("OnTextCtrl1Text");
}


--- End code ---




Any help or suggestion or workaround is highly appreciated.
Thanks

Regards,
Hermit

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version