⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbcustom.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        cbcustom.cpp// Purpose:     cbSimpleCustomizationPlugin class declaration// Author:      Aleksandras Gluchovas// Modified by:// Created:     06/09/98// RCS-ID:      $Id: cbcustom.cpp,v 1.8 2005/11/16 17:27:31 ABX Exp $// Copyright:   (c) Aleksandras Gluchovas// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__#pragma hdrstop#endif#ifndef WX_PRECOMP#include "wx/wx.h"#endif#include "wx/fl/cbcustom.h"// helper class to receive menu customization eventclass cbContextMenuHandler : public wxEvtHandler{public:    cbSimpleCustomizationPlugin* mpBackRef;public:    void OnCommandEvents( wxCommandEvent& evt );    DECLARE_EVENT_TABLE()};// FIXME:: is this "safe" ?#define CB_CUSTOMIZE_MENU_FIRST_ITEM_ID 17500/***** Implementation for helper class cbContextMenuHandler *****/BEGIN_EVENT_TABLE( cbContextMenuHandler, wxEvtHandler )    // FIXME:: what is the right range for these ids ? so that they    //         would not collide with user commands?    EVT_COMMAND_RANGE( CB_CUSTOMIZE_MENU_FIRST_ITEM_ID,                       CB_CUSTOMIZE_MENU_FIRST_ITEM_ID + 300,                       wxEVT_COMMAND_MENU_SELECTED,                       cbContextMenuHandler::OnCommandEvents )END_EVENT_TABLE()void cbContextMenuHandler::OnCommandEvents( wxCommandEvent& evt ){    //wxMessageBox("Wowwwww, Yeah!");    mpBackRef->OnMenuItemSelected( evt );}/***** Implementation for class cbSimpleCustomizationPlugin *****/IMPLEMENT_DYNAMIC_CLASS( cbSimpleCustomizationPlugin, cbPluginBase )BEGIN_EVENT_TABLE( cbSimpleCustomizationPlugin, cbPluginBase )    EVT_PL_CUSTOMIZE_BAR   ( cbSimpleCustomizationPlugin::OnCustomizeBar    )    EVT_PL_CUSTOMIZE_LAYOUT( cbSimpleCustomizationPlugin::OnCustomizeLayout )END_EVENT_TABLE()cbSimpleCustomizationPlugin::cbSimpleCustomizationPlugin(void){}cbSimpleCustomizationPlugin::cbSimpleCustomizationPlugin( wxFrameLayout* pPanel, int paneMask )    : cbPluginBase( pPanel, paneMask ){}void cbSimpleCustomizationPlugin::OnCustomizeBar( cbCustomizeBarEvent& event ){    // ingnore bar customization, treat it    // as layout-customization...ugly, eh?    cbCustomizeLayoutEvent clEvt( event.mClickPos );    OnCustomizeLayout( clEvt );}void cbSimpleCustomizationPlugin::OnCustomizeLayout( cbCustomizeLayoutEvent& event ){    wxString helpStr1 = wxT("Select this item to show the corresponding control bar");    wxString helpStr2 = wxT("Select this itme to hide the corresponding control bar");    int id = CB_CUSTOMIZE_MENU_FIRST_ITEM_ID;    wxMenu* pMenu = new wxMenu();    BarArrayT& bars = mpLayout->GetBars();    for( size_t i = 0; i != bars.GetCount(); ++i )    {        cbBarInfo& bar = *bars[i];        bool isHidden = ( bar.mState == wxCBAR_HIDDEN );        wxString* pHelpStr = ( isHidden ) ? &helpStr1 : &helpStr2;        pMenu->Append( id, bar.mName, *pHelpStr, true );        pMenu->Check( id, (isHidden == false) );        ++id;    }    // Customization dialog not implemented, so don't show the menu item#if 0    pMenu->AppendSeparator();    pMenu->Append( id, "Customize...", "Show layout customization dialog", false );#endif    mCustMenuItemId = id;    cbContextMenuHandler* pHandler = new cbContextMenuHandler();    pHandler->mpBackRef            = this;    wxWindow* pFrm = &mpLayout->GetParentFrame();    // FOR NOW FOR NOW:: to work-around wxFrame's (MSW) nasty event-handling bugs!!!    wxWindow* pTmpWnd = new wxWindow( pFrm, wxID_ANY, event.mClickPos, wxSize(0,0) );    pMenu->SetEventHandler( pHandler );    pTmpWnd->PopupMenu( pMenu, 0,0 );    pTmpWnd->Destroy();    delete pMenu;    delete pHandler;    // event is "eaten" by this plugin}void cbSimpleCustomizationPlugin::OnMenuItemSelected( wxCommandEvent& event ){    if ( event.GetId() == mCustMenuItemId )    {        wxMessageBox(wxT("Customization dialog box is not supported by this plugin yet"));        return;    }    else    {        cbBarInfo* pBar = mpLayout->GetBars()[ event.GetId() -  CB_CUSTOMIZE_MENU_FIRST_ITEM_ID ];        wxASSERT( pBar ); // DBG::        // "inverse" bar-visibility of the selected bar        int newState;        if ( pBar->mState == wxCBAR_HIDDEN )        {            if ( pBar->mAlignment == -1 )            {                pBar->mAlignment = 0;       // just remove "-1" marking                newState = wxCBAR_FLOATING;            }            else                if ( pBar->mAlignment == FL_ALIGN_TOP ||                     pBar->mAlignment == FL_ALIGN_BOTTOM )                    newState = wxCBAR_DOCKED_HORIZONTALLY;                else                    newState = wxCBAR_DOCKED_VERTICALLY;        }        else        {            newState = wxCBAR_HIDDEN;            if ( pBar->mState == wxCBAR_FLOATING )                pBar->mAlignment = -1;        }        mpLayout->SetBarState( pBar, newState, true );        if ( newState == wxCBAR_FLOATING )            mpLayout->RepositionFloatedBar( pBar );    }    // menu-item-selected event is "eaten"}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -