X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5515f252cb0a46c2a200a14f0692e6db7c3aea47..3527f29c8769e09d796c547c0c309f8b86407012:/contrib/src/fl/controlbar.cpp diff --git a/contrib/src/fl/controlbar.cpp b/contrib/src/fl/controlbar.cpp index f00ec60e10..780f9960f8 100644 --- a/contrib/src/fl/controlbar.cpp +++ b/contrib/src/fl/controlbar.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: No names yet. -// Purpose: Contrib. demo +// Name: controlbar.cpp +// Purpose: Implementation for main controlbar classes. // Author: Aleksandras Gluchovas // Modified by: // Created: 06/09/98 @@ -50,7 +50,6 @@ // meet the new event paradigm as of wx2.3.0. Probably we // should find a way to make these be non-global, but this // works for right now. -#if wxCHECK_VERSION(2,3,0) wxEventType cbEVT_PL_LEFT_DOWN = wxNewEventType(); wxEventType cbEVT_PL_LEFT_UP = wxNewEventType(); wxEventType cbEVT_PL_RIGHT_DOWN = wxNewEventType(); @@ -85,7 +84,6 @@ wxEventType cbEVT_PL_CUSTOMIZE_LAYOUT = wxNewEventType(); wxEventType wxCUSTOM_CB_PLUGIN_EVENTS_START_AT = wxNewEventType(); -#endif // #if wxCHECK_VERSION(2,3,0) // some ascii-art, still can't get these *nice* cursors working on wx... :-( @@ -272,11 +270,11 @@ wxFrameLayout::wxFrameLayout(void) : mpFrame ( NULL ), mpFrameClient( NULL ), - mDarkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), - mLightPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHILIGHT), 1, wxSOLID ), - mGrayPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mDarkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), + mLightPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHILIGHT), 1, wxSOLID ), + mGrayPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), mBlackPen ( wxColour( 0, 0, 0), 1, wxSOLID ), - mBorderPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mBorderPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), mNullPen( wxColour(0,0,0), 1, wxTRANSPARENT ), @@ -305,11 +303,11 @@ wxFrameLayout::wxFrameLayout( wxWindow* pParentFrame, wxWindow* pFrameClient, bo : mpFrame( pParentFrame ), mpFrameClient(pFrameClient), - mDarkPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), - mLightPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DHILIGHT), 1, wxSOLID ), - mGrayPen ( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mDarkPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW), 1, wxSOLID ), + mLightPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DHILIGHT), 1, wxSOLID ), + mGrayPen ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), mBlackPen ( wxColour( 0, 0, 0), 1, wxSOLID ), - mBorderPen( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), + mBorderPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ), mNullPen( wxColour(0,0,0), 1, wxTRANSPARENT ), @@ -341,13 +339,13 @@ wxFrameLayout::wxFrameLayout( wxWindow* pParentFrame, wxWindow* pFrameClient, bo // DBG:: set RED color of frame's background for the // prurpose of tracking engine bugs "visually" - GetParentFrame().SetBackgroundColour( wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE) ); + GetParentFrame().SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE) ); } mFloatingOn = CanReparent(); } -// NOTE:: below are the only plaftorm-check "ifdef"s in the docking system! +// NOTE:: below are the only platform-check "ifdef"s in the docking system! bool wxFrameLayout::CanReparent() { @@ -389,7 +387,7 @@ void wxFrameLayout::ReparentWindow( wxWindow* pChild, wxWindow* pNewParent ) pChild->Reparent(pNewParent); return; -#elif defined(__WXGTK__) +#elif defined(__WXGTK__) || defined(__WXX11__) // FOR NOW:: floating with wxGtk still very buggy return; @@ -404,11 +402,11 @@ void wxFrameLayout::ReparentWindow( wxWindow* pChild, wxWindow* pNewParent ) void wxFrameLayout::DestroyBarWindows() { - wxNode* pSpy = mBarSpyList.First(); + wxNode* pSpy = mBarSpyList.GetFirst(); while( pSpy ) { - cbBarSpy& spy = *((cbBarSpy*)pSpy->Data()); + cbBarSpy& spy = *((cbBarSpy*)pSpy->GetData()); if ( spy.mpBarWnd->GetEventHandler() == &spy ) @@ -416,7 +414,7 @@ void wxFrameLayout::DestroyBarWindows() delete &spy; - pSpy = pSpy->Next(); + pSpy = pSpy->GetNext(); } mBarSpyList.Clear(); @@ -434,15 +432,15 @@ void wxFrameLayout::DestroyBarWindows() void wxFrameLayout::ShowFloatedWindows( bool show ) { - wxNode* pNode = mFloatedFrames.First(); + wxNode* pNode = mFloatedFrames.GetFirst(); while( pNode ) { - cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->Data()); + cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->GetData()); pFFrm->Show( show ); - pNode = pNode->Next(); + pNode = pNode->GetNext(); } } @@ -493,11 +491,11 @@ wxFrameLayout::~wxFrameLayout() if ( mpNECursor ) delete mpNECursor; - wxNode* pSpy = mBarSpyList.First(); + wxNode* pSpy = mBarSpyList.GetFirst(); while( pSpy ) { - cbBarSpy& spy = *((cbBarSpy*)pSpy->Data()); + cbBarSpy& spy = *((cbBarSpy*)pSpy->GetData()); if ( spy.mpBarWnd->GetEventHandler() == &spy ) @@ -505,7 +503,7 @@ wxFrameLayout::~wxFrameLayout() delete &spy; - pSpy = pSpy->Next(); + pSpy = pSpy->GetNext(); } for ( i = 0; i != mAllBars.Count(); ++i ) @@ -627,10 +625,10 @@ bool wxFrameLayout::RedockBar( cbBarInfo* pBar, pBarPane->RemoveBar( pBar ); - // FIXME FIXME:: the below recalc. may be a *huge* performance + // FIXME FIXME:: the recalculation below may be a *huge* performance // hit, it could be eliminated though... // but first the "pane-postion-changed" problem - // have to be fixed + // has to be fixed RecalcLayout( FALSE ); @@ -676,7 +674,7 @@ BarArrayT& wxFrameLayout::GetBars() void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow ) { - if ( newState == wxCBAR_FLOATING && !mFloatingOn ) + if ( newState == wxCBAR_FLOATING && !(mFloatingOn && pBar->mFloatingOn)) return; @@ -710,18 +708,18 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow ) if ( pBar->mState == wxCBAR_FLOATING && newState != wxCBAR_FLOATING ) { - // remove bar's window form the containing mini-frame - // and set it's parent to be layout's parent frame + // remove bar's window from the containing mini-frame + // and set its parent to be layout's parent frame if ( pBar->mpBarWnd ) { pBar->mpBarWnd->Show(FALSE); // to avoid flicker upon reparenting - wxNode* pNode = mFloatedFrames.First(); + wxNode* pNode = mFloatedFrames.GetFirst(); while( pNode ) { - cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->Data()); + cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->GetData()); if ( pFFrm->GetBar() == pBar ) { @@ -741,7 +739,7 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow ) pFFrm->Destroy(); break; } - pNode = pNode->Next(); + pNode = pNode->GetNext(); } // FOR NOW:: excessive! @@ -751,6 +749,11 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow ) } } + if ( pBar->mDimInfo.GetDimHandler() ) + { + pBar->mDimInfo.GetDimHandler()->OnChangeBarState( pBar, newState ); + } + pBar->mState = newState; DoSetBarState( pBar ); @@ -821,13 +824,13 @@ void wxFrameLayout::ApplyBarProperties( cbBarInfo* pBar ) void wxFrameLayout::RepositionFloatedBar( cbBarInfo* pBar ) { - if ( !mFloatingOn ) return; + if ( !(mFloatingOn && pBar->mFloatingOn)) return; - wxNode* pNode = mFloatedFrames.First(); + wxNode* pNode = mFloatedFrames.GetFirst(); while( pNode ) { - cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->Data()); + cbFloatedBarWindow* pFFrm = ((cbFloatedBarWindow*)pNode->GetData()); if ( pFFrm->GetBar() == pBar ) { @@ -845,7 +848,7 @@ void wxFrameLayout::RepositionFloatedBar( cbBarInfo* pBar ) break; } - pNode = pNode->Next(); + pNode = pNode->GetNext(); } } @@ -868,7 +871,8 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar ) } else { - if ( !mFloatingOn ) return; + if ( !(mFloatingOn && pBar->mFloatingOn) ) + return; // float it @@ -893,7 +897,9 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar ) pMiniFrm->Create( &GetParentFrame(), -1, pBar->mName, wxPoint( 50,50 ), wxSize ( 0, 0 ), - wxFRAME_FLOAT_ON_PARENT | wxFRAME_TOOL_WINDOW + wxFRAME_FLOAT_ON_PARENT | + wxFRAME_TOOL_WINDOW | + wxFRAME_NO_TASKBAR ); pMiniFrm->SetClient( pBar->mpBarWnd ); @@ -971,7 +977,7 @@ void wxFrameLayout::RemoveBar( cbBarInfo* pBarInfo ) return; } } - wxFAIL_MSG("bar info should be present in the list of all bars of all panes"); + wxFAIL_MSG(wxT("bar info should be present in the list of all bars of all panes")); } bool wxFrameLayout::LocateBar( cbBarInfo* pBarInfo, @@ -1150,9 +1156,17 @@ void wxFrameLayout::PositionPanes() void wxFrameLayout::OnSize( wxSizeEvent& event ) { + mpFrame->ProcessEvent( event ); + event.Skip( FALSE ); // stop its progpagation + if ( event.GetEventObject() == (wxObject*) mpFrame ) - + { + GetUpdatesManager().OnStartChanges(); RecalcLayout(TRUE); + GetUpdatesManager().OnFinishChanges(); + GetUpdatesManager().UpdateNow(); + } + } /*** protected members ***/ @@ -1176,15 +1190,15 @@ void wxFrameLayout::HideBarWindows() void wxFrameLayout::UnhookFromFrame() { // NOTE:: the SetEvtHandlerEnabled() method is not used - // here, since it is assumed, that unhooking layout + // here, since it is assumed that unhooking layout // from window may result destroying of the layout itself // // BUG BUG BUG (wx):: this would not be a problem if - // wxEvtHandler's destructor would check if + // wxEvtHandler's destructor checked if // this handler is currently the top-most // handler of some window, and additionally - // to the reconnecting itself from the chain - // it would also re-setup current event handler + // to the reconnecting itself from the chain. + // It would also re-setup current event handler // of the window using wxWindow::SetEventHandler() // FOR NOW:: @@ -1459,7 +1473,7 @@ void wxFrameLayout::OnPaint( wxPaintEvent& event ) event.Skip(); } -void wxFrameLayout::OnEraseBackground( wxEraseEvent& event ) +void wxFrameLayout::OnEraseBackground( wxEraseEvent& WXUNUSED(event) ) { // do nothing } @@ -1470,7 +1484,7 @@ void wxFrameLayout::OnIdle( wxIdleEvent& event ) if ( !focus && mCheckFocusWhenIdle ) { - wxMessageBox( "Hi, no more focus in this app!" ); + wxMessageBox(wxT("Hi, no more focus in this app!")); mCheckFocusWhenIdle = FALSE; //ShowFloatedWindows( FALSE ); @@ -1482,18 +1496,18 @@ void wxFrameLayout::OnIdle( wxIdleEvent& event ) } -void wxFrameLayout::OnKillFocus( wxFocusEvent& event ) +void wxFrameLayout::OnKillFocus( wxFocusEvent& WXUNUSED(event) ) { //wxMessageBox( "wxFrameLayoutGot Kill Focus!" ); //ShowFloatedWindows( FALSE ); } -void wxFrameLayout::OnSetFocus( wxFocusEvent& event ) +void wxFrameLayout::OnSetFocus( wxFocusEvent& WXUNUSED(event) ) { //ShowFloatedWindows( TRUE ); } -void wxFrameLayout::OnActivate( wxActivateEvent& event ) +void wxFrameLayout::OnActivate( wxActivateEvent& WXUNUSED(event) ) { #if 0 if ( event.GetActive() == FALSE ) @@ -1553,9 +1567,11 @@ void wxFrameLayout::SetPaneBackground( const wxColour& colour ) void wxFrameLayout::RefreshNow( bool recalcLayout ) { - if ( recalcLayout ) RecalcLayout( TRUE ); + if ( recalcLayout ) + RecalcLayout( TRUE ); - if ( mpFrame ) mpFrame->Refresh(); + if ( mpFrame ) + mpFrame->Refresh(); } /*** plugin-related methods ***/ @@ -1606,7 +1622,7 @@ void wxFrameLayout::CaptureEventsForPlugin ( cbPluginBase* pPlugin ) } -void wxFrameLayout::ReleaseEventsFromPlugin( cbPluginBase* pPlugin ) +void wxFrameLayout::ReleaseEventsFromPlugin( cbPluginBase* WXUNUSED(pPlugin) ) { // events should be captured first wxASSERT( mpCaputesInput != NULL ); @@ -1624,7 +1640,7 @@ void wxFrameLayout::CaptureEventsForPane( cbDockPane* toPane ) mpPaneInFocus = toPane; } -void wxFrameLayout::ReleaseEventsFromPane( cbDockPane* fromPane ) +void wxFrameLayout::ReleaseEventsFromPane( cbDockPane* WXUNUSED(fromPane) ) { // cannot release events without capturing them wxASSERT( mpPaneInFocus != NULL ); @@ -2038,7 +2054,7 @@ cbCommonPaneProperties::cbCommonPaneProperties(void) : mRealTimeUpdatesOn ( TRUE ), mOutOfPaneDragOn ( TRUE ), mExactDockPredictionOn( FALSE ), - mNonDestructFirctionOn( FALSE ), + mNonDestructFrictionOn( FALSE ), mShow3DPaneBorderOn ( TRUE ), mBarFloatingOn ( FALSE ), mRowProportionsOn ( FALSE ), @@ -2050,6 +2066,43 @@ cbCommonPaneProperties::cbCommonPaneProperties(void) mResizeHandleSize( 4 ) {} +cbCommonPaneProperties::cbCommonPaneProperties(const cbCommonPaneProperties& props) + + : wxObject(), + mRealTimeUpdatesOn (props.mRealTimeUpdatesOn), + mOutOfPaneDragOn (props.mOutOfPaneDragOn), + mExactDockPredictionOn(props.mExactDockPredictionOn), + mNonDestructFrictionOn(props.mNonDestructFrictionOn), + mShow3DPaneBorderOn (props.mShow3DPaneBorderOn), + mBarFloatingOn (props.mBarFloatingOn), + mRowProportionsOn (props.mRowProportionsOn), + mColProportionsOn (props.mColProportionsOn), + mBarCollapseIconsOn (props.mBarCollapseIconsOn), + mBarDragHintsOn (props.mBarDragHintsOn), + + mMinCBarDim(props.mMinCBarDim), + mResizeHandleSize(props.mResizeHandleSize) +{} + +cbCommonPaneProperties& cbCommonPaneProperties::operator=(const cbCommonPaneProperties& props) +{ + mRealTimeUpdatesOn = props.mRealTimeUpdatesOn; + mOutOfPaneDragOn = props.mOutOfPaneDragOn; + mExactDockPredictionOn = props.mExactDockPredictionOn; + mNonDestructFrictionOn = props.mNonDestructFrictionOn; + mShow3DPaneBorderOn = props.mShow3DPaneBorderOn; + mBarFloatingOn = props.mBarFloatingOn; + mRowProportionsOn = props.mRowProportionsOn; + mColProportionsOn = props.mColProportionsOn; + mBarCollapseIconsOn = props.mBarCollapseIconsOn; + mBarDragHintsOn = props.mBarDragHintsOn; + + mMinCBarDim = props.mMinCBarDim; + mResizeHandleSize = props.mResizeHandleSize; + + return *this; +} + /***** Implementation for class cbRowInfo *****/ IMPLEMENT_DYNAMIC_CLASS( cbRowInfo, wxObject ) @@ -2075,7 +2128,7 @@ IMPLEMENT_DYNAMIC_CLASS( cbBarInfo, wxObject ) cbBarInfo::cbBarInfo(void) : mpRow( NULL ), - + mFloatingOn( TRUE ), mpNext( NULL ), mpPrev( NULL ) {} @@ -2298,7 +2351,7 @@ int cbDockPane::GetNotFixedBarsCount( cbRowInfo* pRow ) void cbDockPane::RemoveBar( cbBarInfo* pBar ) { - bool needsRestoring = mProps.mNonDestructFirctionOn && + bool needsRestoring = mProps.mNonDestructFrictionOn && mpStoredRow == pBar->mpRow; cbRemoveBarEvent evt( pBar, this ); @@ -2447,7 +2500,7 @@ int cbDockPane::GetRowAt( int upperY, int lowerY ) int range = lowerY - upperY; int oneThird = range / 3; - wxNode* pRow = mRows.First(); + wxNode* pRow = mRows.GetFirst(); int row = 0; int curY = 0; @@ -2455,7 +2508,7 @@ int cbDockPane::GetRowAt( int upperY, int lowerY ) while( pRow ) { - int rowHeight = GetRowHeight( (wxList*)pRow->Data() ); + int rowHeight = GetRowHeight( (wxList*)pRow->GetData() ); if ( upperY >= curY && lowerY < curY ) return row; @@ -2474,7 +2527,7 @@ int cbDockPane::GetRowAt( int upperY, int lowerY ) ++row; curY += rowHeight; - pRow = pRow->Next(); + pRow = pRow->GetNext(); } */ @@ -2576,7 +2629,7 @@ void cbDockPane::CalcLengthRatios( cbRowInfo* pInRow ) size_t i = 0; - // clac current-maximal-total-length of all maximized bars + // calc current-maximal-total-length of all maximized bars for ( i = 0; i != pInRow->mBars.GetCount(); ++i ) { @@ -2586,7 +2639,7 @@ void cbDockPane::CalcLengthRatios( cbRowInfo* pInRow ) totalWidth += bar.mBounds.width; } - // set up persentages of occupied space for each maximized bar + // set up percentages of occupied space for each maximized bar for ( i = 0; i != pInRow->mBars.Count(); ++i ) { @@ -2746,7 +2799,7 @@ void cbDockPane::DoInsertBar( cbBarInfo* pBar, int rowNo ) { pRow = mRows[rowNo]; - if ( mProps.mNonDestructFirctionOn == TRUE ) + if ( mProps.mNonDestructFrictionOn == TRUE ) { // store original shape of the row (before the bar is inserted) @@ -2963,7 +3016,7 @@ int cbDockPane::GetRowIndex( cbRowInfo* pRow ) return i; } - wxFAIL_MSG("Row must be present to call cbDockPane::GetRowIndex()"); + wxFAIL_MSG(wxT("Row must be present to call cbDockPane::GetRowIndex()")); return 0; } @@ -3011,7 +3064,7 @@ bool cbDockPane::MatchesMask( int paneMask ) case FL_ALIGN_RIGHT : thisMask = FL_ALIGN_RIGHT_PANE; break; default: - wxFAIL_MSG("Bad FL alignment type detected in cbDockPane::MatchesMask()"); + wxFAIL_MSG(wxT("Bad FL alignment type detected in cbDockPane::MatchesMask()")); } return ( thisMask & paneMask ) != 0; @@ -3436,10 +3489,10 @@ void cbDockPane::GetRowShapeData( cbRowInfo* pRow, wxList* pLst ) void cbDockPane::SetRowShapeData( cbRowInfo* pRow, wxList* pLst ) { - if ( pLst->First() == NULL ) + if ( pLst->GetFirst() == NULL ) return; - wxNode* pData = pLst->First(); + wxNode* pData = pLst->GetFirst(); size_t i; for ( i = 0; i != pRow->mBars.Count(); ++i ) @@ -3448,12 +3501,12 @@ void cbDockPane::SetRowShapeData( cbRowInfo* pRow, wxList* pLst ) cbBarInfo& bar = *pRow->mBars[i];; - cbBarShapeData& data = *((cbBarShapeData*)pData->Data()); + cbBarShapeData& data = *((cbBarShapeData*)pData->GetData()); bar.mBounds = data.mBounds; bar.mLenRatio = data.mLenRatio; - pData = pData->Next(); + pData = pData->GetNext(); } }