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

📄 frmview.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        frmview.cpp// Purpose:     wxFrameView implementation. NOT USED IN FL.// Author:      Aleksandras Gluchovas// Modified by:// Created:     02/01/99// RCS-ID:      $Id: frmview.cpp,v 1.11 2005/09/23 12:47:42 MR 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/frmview.h"#include "wx/utils.h"/***** Implementation for class wxFrameView *****/BEGIN_EVENT_TABLE( wxFrameView, wxEvtHandler )    EVT_IDLE( wxFrameView::OnIdle )END_EVENT_TABLE()void wxFrameView::OnIdle( wxIdleEvent& event){    event.Skip();    if ( mDoToolUpdates )    {        // TBD::    }}/*** public methods ***/wxFrameView::wxFrameView()    : mpLayout( NULL ),      mpFrameMgr( NULL ){}wxFrameView::~wxFrameView(){    if ( mpLayout ) delete mpLayout;}wxFrame* wxFrameView::GetParentFrame(){    return mpFrameMgr->GetParentFrame();}wxWindow* wxFrameView::GetClientWindow(){    return mpFrameMgr->GetClientWindow();}void wxFrameView::Activate(){    mpFrameMgr->ActivateView( this );}void wxFrameView::Deactivate(){    mpFrameMgr->DeactivateCurrentView();}void wxFrameView::CreateLayout(){    mpLayout = new wxFrameLayout( GetParentFrame(), mpFrameMgr->GetClientWindow(), false );}wxFrameLayout* wxFrameView::GetLayout(){    return mpLayout;}void wxFrameView::SetToolUpdates( bool doToolUpdates ){    mDoToolUpdates = doToolUpdates;}void wxFrameView::SetLayout( wxFrameLayout* pLayout ){    if ( mpLayout ) delete mpLayout;    mpLayout = pLayout;}wxFrameManager& wxFrameView::GetFrameManager(){    return *mpFrameMgr;}void wxFrameView::RegisterMenu( const wxString& topMenuName ){    mTopMenus.Add( topMenuName );}#if 0/***** Implementation for class wxFrameViewSerializer *****/// NOTE:: currently "stipple" property of the brush is not serializedclass wxFrameViewSerializer : public wxEvtHandlerSerializer{    DECLARE_SERIALIZER_CLASS( wxFrameViewSerializer );    static void Serialize( wxObject* pObj, wxObjectStorage& store );};IMPLEMENT_SERIALIZER_CLASS( wxFrameView,                             wxFrameViewSerializer,                            wxFrameViewSerializer::Serialize,                            NO_CLASS_INIT )void wxFrameViewSerializer::Serialize( wxObject* pObj, wxObjectStorage& store ){    // wxFrameViewSerializer is a kind of wxEvtHandler - peform serialization of    // the base class first    info.SerializeInherited( pObj, store );    wxFrameView* pView = (wxFrameView*)pObj;    store.XchgObjPtr( (wxObject**) &pView->mpFrameMgr );    store.XchgObjPtr( (wxObject**) &pView->mpLayout );    store.XchgBool  ( pView->mDoToolUpdates );    // serialize members in derived classes    pView->OnSerialize( store );}#endif/***** Implementation for class wxFrameManager *****/void wxFrameManager::DoSerialize( wxObjectStorage& WXUNUSED(store) ){#if 0    store.AddInitialRef( mpFrameWnd );    store.AddInitialRef( this );    if ( mpClientWnd ) store.AddInitialRef( mpClientWnd );    store.XchgObj( (wxObject*) &mViews );    store.XchgInt( mActiveViewNo );    store.Finalize(); // finish serialization#endif }void wxFrameManager::DestroyViews(){    DeactivateCurrentView();    wxObjectList::compatibility_iterator pNode = mViews.GetFirst();    while ( pNode )    {        delete (wxFrameView*)pNode->GetData();        pNode = pNode->GetNext();    }    if ( mActiveViewNo != -1 && GetParentFrame() )        GetParentFrame()->SetNextHandler( NULL );}int wxFrameManager::GetViewNo( wxFrameView* pView ){    wxObjectList::compatibility_iterator pNode = mViews.GetFirst();    int n = 0;    while ( pNode )    {        if ( (wxFrameView*)pNode->GetData() == pView )            return n;        ++n;        pNode = pNode->GetNext();    }    return -1;}void wxFrameManager::EnableMenusForView( wxFrameView* pView, bool enable ){    wxMenuBar* pMenuBar = GetParentFrame()->GetMenuBar();    int count = pMenuBar->GetMenuCount();    if ( !pMenuBar )        return;    wxStringList::compatibility_iterator pNode = pView->mTopMenus.GetFirst();    int i;    while ( pNode )    {        for ( i = 0; i != count; ++i )        {            if ( pMenuBar->GetMenu(i)->GetTitle() == pNode->GetData() )                pMenuBar->EnableTop( i, enable );        }        pNode = pNode->GetNext();    }}void wxFrameManager::SyncAllMenus(){    wxObjectList::compatibility_iterator pNode = mViews.GetFirst();    int i = 0;    while ( pNode )    {        if ( i != mActiveViewNo )            EnableMenusForView( (wxFrameView*)pNode->GetData(), false );        pNode = pNode->GetNext();    }    EnableMenusForView( GetView( mActiveViewNo ), true );}/*** public methods ***/wxFrameManager::wxFrameManager()    : mpFrameWnd( NULL  ),      mActiveViewNo( -1 ),      mpClientWnd( NULL ){}wxFrameManager::~wxFrameManager(){    SaveViewsNow();    DestroyViews();}void wxFrameManager::Init( wxWindow* pMainFrame, const wxString& settingsFile ){    mSettingsFile = settingsFile;    mpFrameWnd    = pMainFrame;    wxObjectList::compatibility_iterator pNode = mViews.GetFirst();    while ( pNode )    {        wxFrameView* pView = (wxFrameView*)pNode->GetData();        pView->OnInit();        pView->OnInitMenus();        pNode = pNode->GetNext();    }    if ( !ReloadViews() )    {        // if loading of settings file failed (e.g. was not found),         // do recreation of items in each view        pNode = mViews.GetFirst();        while ( pNode )        {            wxFrameView* pView = (wxFrameView*)pNode->GetData();            pView->OnRecreate();            pNode = pNode->GetNext();        }    }    if ( mActiveViewNo >= (int)mViews.GetCount() )        mActiveViewNo = -1;    ActivateView( GetView( ( mActiveViewNo == -1 ) ? 0 : mActiveViewNo ) );    SyncAllMenus();}void wxFrameManager::AddView( wxFrameView* pFrmView ){    mViews.Append( pFrmView );    pFrmView->mpFrameMgr = this; // back ref.}void wxFrameManager::RemoveView( wxFrameView* WXUNUSED(pFrmView) ){    // TBD::    wxFAIL_MSG( _T("wxFrameManager::RemoveView() has not been implemented yet.") );}int wxFrameManager::GetActiveViewNo(){    return mActiveViewNo;}wxFrameView* wxFrameManager::GetActiveView(){    wxObjectList::compatibility_iterator pNode = mViews.Item( mActiveViewNo );    if ( pNode ) return (wxFrameView*)pNode->GetData();            else return NULL;}wxObjectList::compatibility_iterator wxFrameManager::GetActiveViewNode(){    return mViews.Item( mActiveViewNo );}wxFrame* wxFrameManager::GetParentFrame(){    return ((wxFrame*)mpFrameWnd);}wxWindow* wxFrameManager::GetParentWindow(){    return mpFrameWnd;}wxFrameView* wxFrameManager::GetView( int viewNo ){    wxObjectList::compatibility_iterator pNode = mViews.Item( viewNo );    if ( pNode ) return (wxFrameView*)pNode->GetData();            else return NULL;}void wxFrameManager::ActivateView( int viewNo ){    ActivateView( GetView( viewNo ) );}void wxFrameManager::ActivateView( wxFrameView* pFrmView ){    DeactivateCurrentView();    mActiveViewNo = GetViewNo( pFrmView );    if ( pFrmView->mpLayout )        pFrmView->mpLayout->Activate();    // FIXME:: we would have used PushEventHandler(),    //         but wxFrame bypasses attached handlers when    //         handling wxCommand events!    GetParentFrame()->PushEventHandler( pFrmView );    EnableMenusForView( pFrmView, true );}void wxFrameManager::SetClinetWindow( wxWindow* pFrameClient ){    if ( mpClientWnd ) mpClientWnd->Destroy();    mpClientWnd = pFrameClient;}wxWindow* wxFrameManager::GetClientWindow(){    if ( !mpClientWnd )        mpClientWnd = new wxWindow( GetParentFrame(), -1 );    return mpClientWnd;}void wxFrameManager::DeactivateCurrentView(){    if ( mActiveViewNo == -1 )        return;    wxFrameView* pView = GetActiveView();    // FOR NOW::    wxASSERT( GetParentFrame()->GetEventHandler() == pView );    GetParentFrame()->PopEventHandler();    if ( pView->mpLayout )        pView->mpLayout->Deactivate();    EnableMenusForView( pView, false );}void wxFrameManager::SaveViewsNow(){#if 0    if ( mSettingsFile == "" ) return;    wxIOStreamWrapper stm;    stm.CreateForOutput( mSettingsFile );    mStore.SetDataStream( stm );    DoSerialize( mStore );#endif}bool wxFrameManager::ReloadViews(){    return false;    // TBD: ????#if 0    if ( mSettingsFile == "" || !wxFileExists( mSettingsFile ) )         return false;    DestroyViews();    wxIOStreamWrapper stm;    stm.CreateForInput( mSettingsFile );    mStore.SetDataStream( stm );    DoSerialize( mStore );    return true;#endif}bool wxFrameManager::ViewsAreLoaded(){    return ( mViews.GetCount() != 0 );}

⌨️ 快捷键说明

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