У меня проблема с использованием wxauinotebook и ленты, моя проблема в том, что я хочу добавить страницу блокнота с помощью кнопки ленты, но до того, как страница будет открыта, я хочу проверить, открыта ли страница уже или нет. Если страница не открыта, страница будет добавлена, а если да, то страница будет выбрана/активна. А это мой код:
Frame.h
#ifndef FRAME_H
#define FRAME_H
#include <wx/wx.h>
#include <wx/aui/aui.h>
#include <wx/ribbon/bar.h>
#include <wx/ribbon/buttonbar.h>
#include <wx/artprov.h>
class MainFrame : public wxFrame
{
public:
MainFrame(const wxString& title);
// Destructor
virtual ~MainFrame();
private:
long notebookStyle;
wxAuiNotebook* ctrl;
// ribbon
wxRibbonBar* appRibbon;
wxRibbonPage* appHome;
wxRibbonPanel* homePanel;
wxRibbonPanel* dataItem;
wxRibbonButtonBar* home;
wxRibbonButtonBar* item;
private:
void OnQuit(wxCommandEvent& WXUNUSED(event));
void OnAbout(wxCommandEvent& WXUNUSED(event));
void OnHomeClicked(wxRibbonButtonBarEvent& event);
private:
wxDECLARE_EVENT_TABLE();
enum
{
BUTTONBAR_home = wxID_HIGHEST + 1
};
};
#endif // FRAME
Frame.cpp
#include "Frame.h"
MainFrame::MainFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(900, 700), wxDEFAULT_FRAME_STYLE | wxSUNKEN_BORDER)
{
// Ribbon
appRibbon = new wxRibbonBar(this, -1, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_FLOW_HORIZONTAL
| wxRIBBON_BAR_SHOW_PAGE_LABELS
| wxRIBBON_BAR_SHOW_PANEL_EXT_BUTTONS
| wxRIBBON_BAR_SHOW_TOGGLE_BUTTON
);
appHome = new wxRibbonPage(appRibbon, wxID_ANY, wxT("Master Data"), wxNullBitmap);
//appHome = new wxRibbonPage(appRibbon, wxID_ANY, wxT("Master Data"),
//wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, wxART_TOOLBAR, wxSize(16,15)));
homePanel = new wxRibbonPanel(appHome, wxID_ANY, wxT("Home"), wxNullBitmap,
wxDefaultPosition, wxDefaultSize,
wxRIBBON_PANEL_NO_AUTO_MINIMISE);
home = new wxRibbonButtonBar(homePanel);
home->AddButton(BUTTONBAR_home, wxT("Home Menu"),
wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, wxART_TOOLBAR, wxSize(16,15)));
dataItem = new wxRibbonPanel(appHome, wxID_ANY, wxT("Data Item"),
wxNullBitmap, wxDefaultPosition, wxDefaultSize,
wxRIBBON_PANEL_NO_AUTO_MINIMISE);
item = new wxRibbonButtonBar(dataItem);
item->AddButton(wxID_ANY, wxT("Daftar Guru"),
wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
item->AddButton(wxID_ANY, wxT("Tambah Guru"),
wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
item->AddButton(wxID_ANY, wxT("Daftar Siswa"),
wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
item->AddButton(wxID_ANY, wxT("Tambah Siswa"),
wxArtProvider::GetBitmap(wxART_QUESTION, wxART_TOOLBAR, wxSize(16,15)));
new wxRibbonPage(appRibbon, wxID_ANY, wxT("Empty Page"), wxNullBitmap);
appRibbon->AddPageHighlight(appRibbon->GetPageCount() - 1);
appRibbon->Realize();
// set style msw provider
appRibbon->DismissExpandedPanel();
appRibbon->SetArtProvider(new wxRibbonMSWArtProvider);
// aui notebook
notebookStyle = wxAUI_NB_CLOSE_BUTTON | wxAUI_NB_SCROLL_BUTTONS;
wxSize client_size = GetClientSize();
ctrl = new wxAuiNotebook(this, wxID_ANY,
wxPoint(client_size.x, client_size.y),
wxSize(430,200),
notebookStyle);
ctrl->Freeze();
wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
ctrl->AddPage(new wxTextCtrl( ctrl, BUTTONBAR_home, wxT("Some text"),
wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Home"), false, page_bmp);
ctrl->AddPage(new wxTextCtrl( ctrl, wxID_ANY, wxT("Some text"),
wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Item 1"), false, page_bmp);
ctrl->SetPageToolTip(0, "Menu utama sistem informasi akademik");
ctrl->Thaw();
// set to sizer
wxSizer* s = new wxBoxSizer(wxVERTICAL);
s->Add(appRibbon, 0, wxEXPAND);
s->Add(ctrl, 1, wxEXPAND);
SetSizer(s);
Centre();
}
BEGIN_EVENT_TABLE(MainFrame, wxFrame)
EVT_RIBBONBUTTONBAR_CLICKED(BUTTONBAR_home, MainFrame::OnHomeClicked)
END_EVENT_TABLE()
void MainFrame::OnHomeClicked(wxRibbonButtonBarEvent& event)
{
// What code in here??
// The page item 1 already openned.
// if not open, I want run this code:
//ctrl->AddPage(new wxTextCtrl( ctrl, wxID_ANY, wxT("Some text"),
//wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxNO_BORDER) , wxT("Item 1"), false, page_bmp);
// if not I want the page is active.
}
MainFrame::~MainFrame() {}