简体   繁体   English

Wxwidgets。 如何检查/打开wxauinotebook页面

[英]Wxwidgets. How to check wxauinotebook page has been opened/added

I've problem using wxauinotebook and ribbon, my problem is I want add notebook page using ribbon button but before the page is open, I want check the page is already opened or not. 我在使用wxauinotebook和功能区时遇到问题,我的问题是我想使用功能区按钮添加笔记本页面,但是在打开页面之前,我要检查页面是否已打开。 If the page not opened, the page will be add and if yes, the page will be selected/active. 如果未打开页面,则将添加该页面;如果是,则将选择/激活该页面。 And this is my code: 这是我的代码:
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() {}

The problem is solved using this code (from this link ): 使用以下代码(从此链接 )可以解决问题:

void MainFrame:::OnHomeClicked(wxRibbonButtonBarEvent& event)
{
    // sum all page
    int pageCount = ctrl->GetPageCount();
    // set the page exist false
    bool isExist = false;
    // checking the page
    for (int i = 0; i < pageCount; i++) {
        // if the page already exist, so open/focus the page
        if (ctrl->GetPageText(i).Lower() == "item 1") {
            ctrl->SetSelection(i);
            isExist = true;
            break;
        }
    }
    // if page not exist, create new page
    if(!isExist) {
        wxBitmap page_bmp = wxArtProvider::GetBitmap(wxART_NORMAL_FILE, wxART_OTHER, wxSize(16,16));
        ctrl->AddPage(CreateHTMLCtrl(ctrl), wxT("Item 1"), true, page_bmp );
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM