So I decided to Create a class defining a new panel that has wxGridSizer as it layout sizer.
Code: Select all
class SubjectPanel : public wxPanel
{
DECLARE_ABSTRACT_CLASS(SubjectPanel)
public:
SubjectPanel(wxWindow* parent, wxWindowID winid, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxBORDER_NONE);
void SetLayout();
void AddSubject(wxControl* subject);
protected:
wxGridSizer* sizer;
};
Code: Select all
void SubjectPanel::SetLayout()
{
// create sizer to create open space around the subject objects
wxBoxSizer* topsizer = new wxBoxSizer(wxVERTICAL);
// Align the subject objects in a Grid format
sizer = new wxGridSizer(0, 4, 8, 8);
topsizer->Add(sizer, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 5);
// set the sizer as layout controller
SetSizer(topsizer);
topsizer->Fit(this);
topsizer->SetSizeHints(this);
}
void SubjectPanel::AddSubject(wxControl* subject)
{
// Add subject control on page
sizer->Add(subject, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL, 5);
}
Code: Select all
void wxAddSubjectPanel::OnGradeOneSubject(wxCommandEvent& event)
{
// Find users profile account
wxSchoolPage* schoolProfile = (wxSchoolPage*)FindWindow(ID_SCHOOL_PROFILE);
wxString subsimage = subimage->GetImage();
wxString subjectname = subnameCtrl->GetValue();
wxString assignedTeacher = teachercombo->GetValue();
//subject panel
SubjectPanel* pagesforgradeone = (SubjectPanel*)FindWindow(ID_GRADE_ONE_PAGE);
//Creating subject page.
SubObject* subject = new SubObject(this, wxID_ANY, subjectname, assignedTeacher, subsimage, wxDefaultPosition,
wxDefaultSize);
schoolProfile->sub.Add(subject);
pagesforgradeone->AddSubject(subject);
}
Code: Select all
bool wxSizer::AreAnyItemsShown() const
{
wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
while (node)
{
if ( node->GetData()->IsShown() )
return true;
node = node->GetNext();
}
return false;
}