User forums > General (but related to Code::Blocks)
WxSmith generate wrong code with sizer
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