|
|
|
@@ -6,7 +6,7 @@
|
|
|
|
|
// Created: 30/11/98 (my 22th birthday :-)
|
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
|
// Copyright: (c) Aleksandras Gluchovas
|
|
|
|
|
// Licence: wxWindows license
|
|
|
|
|
// Licence: wxWindows license
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
#ifdef __GNUG__
|
|
|
|
@@ -49,42 +49,42 @@ IMPLEMENT_DYNAMIC_CLASS( cbBarHintsPlugin, cbPluginBase )
|
|
|
|
|
|
|
|
|
|
BEGIN_EVENT_TABLE( cbBarHintsPlugin, cbPluginBase )
|
|
|
|
|
|
|
|
|
|
EVT_PL_SIZE_BAR_WND ( cbBarHintsPlugin::OnSizeBarWindow )
|
|
|
|
|
EVT_PL_DRAW_BAR_DECOR( cbBarHintsPlugin::OnDrawBarDecorations )
|
|
|
|
|
EVT_PL_SIZE_BAR_WND ( cbBarHintsPlugin::OnSizeBarWindow )
|
|
|
|
|
EVT_PL_DRAW_BAR_DECOR( cbBarHintsPlugin::OnDrawBarDecorations )
|
|
|
|
|
|
|
|
|
|
EVT_PL_LEFT_DOWN( cbBarHintsPlugin::OnLeftDown )
|
|
|
|
|
EVT_PL_LEFT_UP ( cbBarHintsPlugin::OnLeftUp )
|
|
|
|
|
EVT_PL_MOTION ( cbBarHintsPlugin::OnMotion )
|
|
|
|
|
EVT_PL_LEFT_DOWN( cbBarHintsPlugin::OnLeftDown )
|
|
|
|
|
EVT_PL_LEFT_UP ( cbBarHintsPlugin::OnLeftUp )
|
|
|
|
|
EVT_PL_MOTION ( cbBarHintsPlugin::OnMotion )
|
|
|
|
|
|
|
|
|
|
END_EVENT_TABLE()
|
|
|
|
|
|
|
|
|
|
cbBarHintsPlugin::cbBarHintsPlugin(void)
|
|
|
|
|
|
|
|
|
|
: mpPane( 0 ),
|
|
|
|
|
mBtnPressed ( FALSE ),
|
|
|
|
|
mCloseBoxOn ( TRUE ),
|
|
|
|
|
mCollapseBoxOn( TRUE ),
|
|
|
|
|
mGrooveCount ( 2 ),
|
|
|
|
|
mHintGap ( 4 ),
|
|
|
|
|
mXWeight ( 2 )
|
|
|
|
|
: mpPane( 0 ),
|
|
|
|
|
mBtnPressed ( FALSE ),
|
|
|
|
|
mCloseBoxOn ( TRUE ),
|
|
|
|
|
mCollapseBoxOn( TRUE ),
|
|
|
|
|
mGrooveCount ( 2 ),
|
|
|
|
|
mHintGap ( 4 ),
|
|
|
|
|
mXWeight ( 2 )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cbBarHintsPlugin::cbBarHintsPlugin( wxFrameLayout* pLayout, int paneMask )
|
|
|
|
|
|
|
|
|
|
: cbPluginBase( pLayout, paneMask ),
|
|
|
|
|
mpPane( 0 ),
|
|
|
|
|
mBtnPressed ( FALSE ),
|
|
|
|
|
mCloseBoxOn ( TRUE ),
|
|
|
|
|
mCollapseBoxOn( TRUE ),
|
|
|
|
|
mGrooveCount ( 2 ),
|
|
|
|
|
mHintGap ( 5 ),
|
|
|
|
|
mXWeight ( 2 )
|
|
|
|
|
: cbPluginBase( pLayout, paneMask ),
|
|
|
|
|
mpPane( 0 ),
|
|
|
|
|
mBtnPressed ( FALSE ),
|
|
|
|
|
mCloseBoxOn ( TRUE ),
|
|
|
|
|
mCollapseBoxOn( TRUE ),
|
|
|
|
|
mGrooveCount ( 2 ),
|
|
|
|
|
mHintGap ( 5 ),
|
|
|
|
|
mXWeight ( 2 )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = NULL;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -93,31 +93,31 @@ cbBarHintsPlugin::~cbBarHintsPlugin()
|
|
|
|
|
if (mBoxes[CLOSE_BOX_IDX])
|
|
|
|
|
delete mBoxes[CLOSE_BOX_IDX];
|
|
|
|
|
|
|
|
|
|
if (mBoxes[COLLAPSE_BOX_IDX])
|
|
|
|
|
if (mBoxes[COLLAPSE_BOX_IDX])
|
|
|
|
|
delete mBoxes[COLLAPSE_BOX_IDX];
|
|
|
|
|
} // cbBarHintsPlugin destructor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::SetGrooveCount( int nGrooves )
|
|
|
|
|
{
|
|
|
|
|
mGrooveCount = nGrooves;
|
|
|
|
|
mGrooveCount = nGrooves;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::CreateBoxes()
|
|
|
|
|
{
|
|
|
|
|
cbCloseBox* box1 = new cbCloseBox();
|
|
|
|
|
cbCollapseBox* box2 = new cbCollapseBox();
|
|
|
|
|
cbCloseBox* box1 = new cbCloseBox();
|
|
|
|
|
cbCollapseBox* box2 = new cbCollapseBox();
|
|
|
|
|
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = box1;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = box2;
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX] = box1;
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX] = box2;
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->mpLayout = mpLayout;
|
|
|
|
|
mBoxes[i]->mpPlugin = this;
|
|
|
|
|
mBoxes[i]->mpWnd = NULL;
|
|
|
|
|
}
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->mpLayout = mpLayout;
|
|
|
|
|
mBoxes[i]->mpPlugin = this;
|
|
|
|
|
mBoxes[i]->mpWnd = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -130,431 +130,434 @@ void cbBarHintsPlugin::DrawCloseBox( wxDC& dc, const wxPoint& pos, bool pressed
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::DrawCollapseBox( wxDC& dc, const wxPoint& pos,
|
|
|
|
|
bool atLeft, bool disabled, bool pressed )
|
|
|
|
|
bool atLeft, bool disabled, bool pressed )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::DrawGrooves( wxDC& dc, const wxPoint& pos, int length )
|
|
|
|
|
{
|
|
|
|
|
int ofs = 0;
|
|
|
|
|
int ofs = 0;
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != mGrooveCount; ++i, ofs += ( GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP ) )
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
dc.SetPen( mpLayout->mLightPen );
|
|
|
|
|
dc.DrawLine( pos.x + ofs, pos.y, pos.x + ofs, pos.y + length - 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs + 1, pos.y );
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != mGrooveCount; ++i, ofs += ( GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP ) )
|
|
|
|
|
{
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
dc.SetPen( mpLayout->mLightPen );
|
|
|
|
|
dc.DrawLine( pos.x + ofs, pos.y, pos.x + ofs, pos.y + length - 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs + 1, pos.y );
|
|
|
|
|
|
|
|
|
|
dc.SetPen( mpLayout->mDarkPen );
|
|
|
|
|
dc.DrawLine( pos.x + ofs + 2, pos.y, pos.x + ofs + 2, pos.y + length );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs + 1, pos.y + length - 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs, pos.y + length - 1 );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
dc.SetPen( mpLayout->mLightPen );
|
|
|
|
|
dc.DrawLine( pos.x, pos.y + ofs, pos.x + length - 1, pos.y + ofs );
|
|
|
|
|
dc.DrawPoint( pos.x, pos.y + ofs + 1 );
|
|
|
|
|
dc.SetPen( mpLayout->mDarkPen );
|
|
|
|
|
dc.DrawLine( pos.x + ofs + 2, pos.y, pos.x + ofs + 2, pos.y + length );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs + 1, pos.y + length - 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + ofs, pos.y + length - 1 );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
dc.SetPen( mpLayout->mLightPen );
|
|
|
|
|
dc.DrawLine( pos.x, pos.y + ofs, pos.x + length - 1, pos.y + ofs );
|
|
|
|
|
dc.DrawPoint( pos.x, pos.y + ofs + 1 );
|
|
|
|
|
|
|
|
|
|
dc.SetPen( mpLayout->mDarkPen );
|
|
|
|
|
dc.DrawLine( pos.x, pos.y + ofs + 2, pos.x + length, pos.y + ofs + 2 );
|
|
|
|
|
dc.DrawPoint( pos.x + length - 1, pos.y + ofs + 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + length - 1, pos.y + ofs );
|
|
|
|
|
}
|
|
|
|
|
dc.SetPen( mpLayout->mDarkPen );
|
|
|
|
|
dc.DrawLine( pos.x, pos.y + ofs + 2, pos.x + length, pos.y + ofs + 2 );
|
|
|
|
|
dc.DrawPoint( pos.x + length - 1, pos.y + ofs + 1 );
|
|
|
|
|
dc.DrawPoint( pos.x + length - 1, pos.y + ofs );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::ExcludeHints( wxRect& rect, cbBarInfo& info )
|
|
|
|
|
{
|
|
|
|
|
int boxHeight = BTN_BOX_HEIGHT;
|
|
|
|
|
int boxHeight = BTN_BOX_HEIGHT;
|
|
|
|
|
|
|
|
|
|
// collapse and close box are not placed on fixed bars
|
|
|
|
|
// collapse and close box are not placed on fixed bars
|
|
|
|
|
|
|
|
|
|
if ( info.IsFixed() || ( !mCloseBoxOn && !mCollapseBoxOn ) )
|
|
|
|
|
if ( info.IsFixed() || ( !mCloseBoxOn && !mCollapseBoxOn ) )
|
|
|
|
|
|
|
|
|
|
boxHeight = 0;
|
|
|
|
|
boxHeight = 0;
|
|
|
|
|
|
|
|
|
|
int height = wxMax( mGrooveCount*(GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP)
|
|
|
|
|
- GROOVE_TO_GROOVE_GAP,
|
|
|
|
|
boxHeight
|
|
|
|
|
);
|
|
|
|
|
int height = wxMax( mGrooveCount*(GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP)
|
|
|
|
|
- GROOVE_TO_GROOVE_GAP,
|
|
|
|
|
boxHeight
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
rect.x += ( mHintGap*2 + height );
|
|
|
|
|
rect.width -= (height + 2*mHintGap);
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
rect.x += ( mHintGap*2 + height );
|
|
|
|
|
rect.width -= (height + 2*mHintGap);
|
|
|
|
|
|
|
|
|
|
rect.x -= info.mDimInfo.mHorizGap + 2;
|
|
|
|
|
rect.width += info.mDimInfo.mHorizGap + 2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rect.y += (mHintGap*2 + height);
|
|
|
|
|
rect.height -= (height + 2*mHintGap);
|
|
|
|
|
rect.x -= info.mDimInfo.mHorizGap + 2;
|
|
|
|
|
rect.width += info.mDimInfo.mHorizGap + 2;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rect.y += (mHintGap*2 + height);
|
|
|
|
|
rect.height -= (height + 2*mHintGap);
|
|
|
|
|
|
|
|
|
|
rect.y -= info.mDimInfo.mVertGap + 2;
|
|
|
|
|
rect.height += info.mDimInfo.mVertGap + 2;
|
|
|
|
|
}
|
|
|
|
|
rect.y -= info.mDimInfo.mVertGap + 2;
|
|
|
|
|
rect.height += info.mDimInfo.mVertGap + 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::DoDrawHint( wxDC& dc, wxRect& rect,
|
|
|
|
|
int pos, int boxOfs, int grooveOfs,
|
|
|
|
|
bool isFixed )
|
|
|
|
|
int pos, int boxOfs, int grooveOfs,
|
|
|
|
|
bool isFixed )
|
|
|
|
|
{
|
|
|
|
|
if ( !isFixed )
|
|
|
|
|
{
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
if ( !isFixed )
|
|
|
|
|
{
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
|
|
|
|
|
DrawGrooves( dc, wxPoint( rect.x + mHintGap + grooveOfs, pos ),
|
|
|
|
|
rect.height - (pos - rect.y) - mHintGap );
|
|
|
|
|
else
|
|
|
|
|
DrawGrooves( dc, wxPoint( rect.x + mHintGap, rect.y + mHintGap + grooveOfs ),
|
|
|
|
|
(pos - rect.x) - mHintGap );
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Draw( dc );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
|
|
|
|
|
DrawGrooves( dc, wxPoint( rect.x + mHintGap + grooveOfs, pos ),
|
|
|
|
|
rect.height - (pos - rect.y) - mHintGap );
|
|
|
|
|
else
|
|
|
|
|
DrawGrooves( dc, wxPoint( rect.x + mHintGap, rect.y + mHintGap + grooveOfs ),
|
|
|
|
|
(pos - rect.x) - mHintGap );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::GetHintsLayout( wxRect& rect, cbBarInfo& info,
|
|
|
|
|
int& boxOfs, int& grooveOfs, int& pos )
|
|
|
|
|
int& boxOfs, int& grooveOfs, int& pos )
|
|
|
|
|
{
|
|
|
|
|
int boxHeight = BTN_BOX_HEIGHT;
|
|
|
|
|
int boxWidth = BTN_BOX_WIDTH + BOX_TO_GROOVE_GAP + BTN_BOX_WIDTH;
|
|
|
|
|
int boxHeight = BTN_BOX_HEIGHT;
|
|
|
|
|
// int boxWidth = BTN_BOX_WIDTH + BOX_TO_GROOVE_GAP + BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
// collapse and close box are not placed on fixed bars
|
|
|
|
|
// collapse and close box are not placed on fixed bars
|
|
|
|
|
|
|
|
|
|
if ( info.IsFixed() || ( !mCloseBoxOn && !mCollapseBoxOn ) )
|
|
|
|
|
{
|
|
|
|
|
boxHeight = 0;
|
|
|
|
|
boxWidth = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if ( !mCloseBoxOn || !mCollapseBoxOn )
|
|
|
|
|
if ( info.IsFixed() || ( !mCloseBoxOn && !mCollapseBoxOn ) )
|
|
|
|
|
{
|
|
|
|
|
boxHeight = 0;
|
|
|
|
|
// boxWidth = 0;
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
else
|
|
|
|
|
if ( !mCloseBoxOn || !mCollapseBoxOn )
|
|
|
|
|
|
|
|
|
|
boxWidth = BTN_BOX_WIDTH;
|
|
|
|
|
boxWidth = BTN_BOX_WIDTH;
|
|
|
|
|
*/
|
|
|
|
|
int grooveHeight = mGrooveCount*(GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP)
|
|
|
|
|
- GROOVE_TO_GROOVE_GAP;
|
|
|
|
|
|
|
|
|
|
int grooveHeight = mGrooveCount*(GROOVE_WIDTH + GROOVE_TO_GROOVE_GAP)
|
|
|
|
|
- GROOVE_TO_GROOVE_GAP;
|
|
|
|
|
int height = wxMax( grooveHeight, boxHeight );
|
|
|
|
|
|
|
|
|
|
int height = wxMax( grooveHeight, boxHeight );
|
|
|
|
|
// center boxs and groves with respect to each other
|
|
|
|
|
|
|
|
|
|
// center boxs and groves with respect to each other
|
|
|
|
|
boxOfs = ( height - boxHeight ) / 2;
|
|
|
|
|
grooveOfs = ( height - grooveHeight ) / 2;
|
|
|
|
|
|
|
|
|
|
boxOfs = ( height - boxHeight ) / 2;
|
|
|
|
|
grooveOfs = ( height - grooveHeight ) / 2;
|
|
|
|
|
pos = ( mpPane->IsHorizontal() ) ? rect.y + mHintGap
|
|
|
|
|
: rect.x + rect.width - mHintGap;
|
|
|
|
|
|
|
|
|
|
pos = ( mpPane->IsHorizontal() ) ? rect.y + mHintGap
|
|
|
|
|
: rect.x + rect.width - mHintGap;
|
|
|
|
|
// setup positions for boxes
|
|
|
|
|
|
|
|
|
|
// setup positions for boxes
|
|
|
|
|
if ( !info.IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
// what direction "collapse-triangle" should look at?
|
|
|
|
|
|
|
|
|
|
if ( !info.IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
// what direction "collapse-triangle" should look at?
|
|
|
|
|
bool& isAtLeft = ((cbCollapseBox*)(mBoxes[COLLAPSE_BOX_IDX]))->mIsAtLeft;
|
|
|
|
|
|
|
|
|
|
isAtLeft= info.mBounds.x <= mpPane->mPaneWidth - ( info.mBounds.x + info.mBounds.width );
|
|
|
|
|
|
|
|
|
|
bool& isAtLeft = ((cbCollapseBox*)(mBoxes[COLLAPSE_BOX_IDX]))->mIsAtLeft;
|
|
|
|
|
|
|
|
|
|
isAtLeft= info.mBounds.x <= mpPane->mPaneWidth - ( info.mBounds.x + info.mBounds.width );
|
|
|
|
|
if ( info.IsExpanded() )
|
|
|
|
|
{
|
|
|
|
|
isAtLeft = FALSE;
|
|
|
|
|
|
|
|
|
|
if ( info.IsExpanded() )
|
|
|
|
|
{
|
|
|
|
|
isAtLeft = FALSE;
|
|
|
|
|
cbBarInfo* pCur = info.mpPrev;
|
|
|
|
|
|
|
|
|
|
cbBarInfo* pCur = info.mpPrev;
|
|
|
|
|
while( pCur )
|
|
|
|
|
{
|
|
|
|
|
if ( !pCur->IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
isAtLeft = TRUE; break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while( pCur )
|
|
|
|
|
{
|
|
|
|
|
if ( !pCur->IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
isAtLeft = TRUE; break;
|
|
|
|
|
}
|
|
|
|
|
pCur = pCur->mpPrev;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pCur = pCur->mpPrev;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// collapse/expand works only when more not-fixed bars are present in the same row
|
|
|
|
|
|
|
|
|
|
// collapse/expand works only when more not-fixed bars are present in the same row
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Enable( info.mpRow->mNotFixedBarsCnt > 1 );
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->Enable( info.mpRow->mNotFixedBarsCnt > 1 );
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->mpPane = mpPane;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->mPos = wxPoint( rect.x + mHintGap + boxOfs, pos );
|
|
|
|
|
|
|
|
|
|
mBoxes[i]->mpPane = mpPane;
|
|
|
|
|
pos += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) pos += BOX_T_BOX_GAP;
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->mPos = wxPoint( rect.x + mHintGap + boxOfs, pos );
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->mPos = wxPoint( rect.x + mHintGap + boxOfs, pos );
|
|
|
|
|
|
|
|
|
|
pos += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
pos += BTN_BOX_HEIGHT;
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) pos += BOX_T_BOX_GAP;
|
|
|
|
|
pos += BOX_TO_GROOVE_GAP;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
pos -= BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->mPos = wxPoint( rect.x + mHintGap + boxOfs, pos );
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->mPos = wxPoint( pos , rect.y + mHintGap + boxOfs );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pos += BTN_BOX_HEIGHT;
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) pos -= BOX_T_BOX_GAP;
|
|
|
|
|
|
|
|
|
|
pos += BOX_TO_GROOVE_GAP;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
pos -= BTN_BOX_WIDTH;
|
|
|
|
|
pos -= BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
mBoxes[CLOSE_BOX_IDX]->mPos = wxPoint( pos , rect.y + mHintGap + boxOfs );
|
|
|
|
|
}
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->mPos = wxPoint( pos, rect.y + mHintGap + boxOfs );
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) pos -= BOX_T_BOX_GAP;
|
|
|
|
|
|
|
|
|
|
pos -= BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
mBoxes[COLLAPSE_BOX_IDX]->mPos = wxPoint( pos, rect.y + mHintGap + boxOfs );
|
|
|
|
|
|
|
|
|
|
pos -= BOX_TO_GROOVE_GAP;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pos -= BOX_TO_GROOVE_GAP;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static inline bool is_in_box( const wxPoint& rectPos, const wxPoint& mousePos )
|
|
|
|
|
{
|
|
|
|
|
return ( mousePos.x >= rectPos.x &&
|
|
|
|
|
mousePos.y >= rectPos.y &&
|
|
|
|
|
mousePos.x < rectPos.x + BTN_BOX_WIDTH &&
|
|
|
|
|
mousePos.y < rectPos.y + BTN_BOX_HEIGHT );
|
|
|
|
|
return ( mousePos.x >= rectPos.x &&
|
|
|
|
|
mousePos.y >= rectPos.y &&
|
|
|
|
|
mousePos.x < rectPos.x + BTN_BOX_WIDTH &&
|
|
|
|
|
mousePos.y < rectPos.y + BTN_BOX_HEIGHT );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int cbBarHintsPlugin::HitTestHints( cbBarInfo& info, const wxPoint& pos )
|
|
|
|
|
{
|
|
|
|
|
wxPoint inPane = pos;
|
|
|
|
|
mpPane->PaneToFrame( &inPane.x, &inPane.y );
|
|
|
|
|
wxPoint inPane = pos;
|
|
|
|
|
mpPane->PaneToFrame( &inPane.x, &inPane.y );
|
|
|
|
|
|
|
|
|
|
wxRect& rect = info.mBoundsInParent;
|
|
|
|
|
wxRect& rect = info.mBoundsInParent;
|
|
|
|
|
|
|
|
|
|
if ( info.IsFixed() ) return FALSE;
|
|
|
|
|
if ( info.IsFixed() ) return FALSE;
|
|
|
|
|
|
|
|
|
|
int boxOfs, grooveOfs, coord;
|
|
|
|
|
int boxOfs, grooveOfs, coord;
|
|
|
|
|
|
|
|
|
|
GetHintsLayout( rect, info, boxOfs, grooveOfs, coord );
|
|
|
|
|
GetHintsLayout( rect, info, boxOfs, grooveOfs, coord );
|
|
|
|
|
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( is_in_box( wxPoint( rect.x + mHintGap + boxOfs, coord ), inPane ) )
|
|
|
|
|
if ( mpPane->IsHorizontal() )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( is_in_box( wxPoint( rect.x + mHintGap + boxOfs, coord ), inPane ) )
|
|
|
|
|
|
|
|
|
|
return CLOSE_BOX_HITTED;
|
|
|
|
|
return CLOSE_BOX_HITTED;
|
|
|
|
|
|
|
|
|
|
coord += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
coord += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) coord += BOX_T_BOX_GAP;
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) coord += BOX_T_BOX_GAP;
|
|
|
|
|
|
|
|
|
|
if ( is_in_box( wxPoint( rect.x + mHintGap + boxOfs, coord ), inPane ) )
|
|
|
|
|
if ( is_in_box( wxPoint( rect.x + mHintGap + boxOfs, coord ), inPane ) )
|
|
|
|
|
|
|
|
|
|
return COLLAPSE_BOX_HITTED;
|
|
|
|
|
return COLLAPSE_BOX_HITTED;
|
|
|
|
|
|
|
|
|
|
coord += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
coord -= BTN_BOX_WIDTH;
|
|
|
|
|
coord += BTN_BOX_HEIGHT;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
coord -= BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
if ( is_in_box( wxPoint( coord , rect.y + mHintGap + boxOfs ), inPane ) )
|
|
|
|
|
if ( is_in_box( wxPoint( coord , rect.y + mHintGap + boxOfs ), inPane ) )
|
|
|
|
|
|
|
|
|
|
return CLOSE_BOX_HITTED;
|
|
|
|
|
}
|
|
|
|
|
return CLOSE_BOX_HITTED;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) coord -= BOX_T_BOX_GAP;
|
|
|
|
|
coord -= BTN_BOX_WIDTH;
|
|
|
|
|
if ( mCollapseBoxOn )
|
|
|
|
|
{
|
|
|
|
|
if ( mCloseBoxOn ) coord -= BOX_T_BOX_GAP;
|
|
|
|
|
coord -= BTN_BOX_WIDTH;
|
|
|
|
|
|
|
|
|
|
if ( is_in_box( wxPoint( coord, rect.y + mHintGap + boxOfs ), inPane ) )
|
|
|
|
|
if ( is_in_box( wxPoint( coord, rect.y + mHintGap + boxOfs ), inPane ) )
|
|
|
|
|
|
|
|
|
|
return COLLAPSE_BOX_HITTED;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return COLLAPSE_BOX_HITTED;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// handlers for plugin-events
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnSizeBarWindow( cbSizeBarWndEvent& event )
|
|
|
|
|
{
|
|
|
|
|
wxRect& rect = event.mBoundsInParent;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
wxRect& rect = event.mBoundsInParent;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
|
|
|
|
|
ExcludeHints( rect, *event.mpBar );
|
|
|
|
|
ExcludeHints( rect, *event.mpBar );
|
|
|
|
|
|
|
|
|
|
event.Skip(); // pass event to the next plugin in the chain
|
|
|
|
|
event.Skip(); // pass event to the next plugin in the chain
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnDrawBarDecorations( cbDrawBarDecorEvent& event )
|
|
|
|
|
{
|
|
|
|
|
wxRect& rect = event.mBoundsInParent;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
wxRect& rect = event.mBoundsInParent;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
|
|
|
|
|
GetHintsLayout( rect, *event.mpBar, boxOfs, grooveOfs, pos );
|
|
|
|
|
GetHintsLayout( rect, *event.mpBar, boxOfs, grooveOfs, pos );
|
|
|
|
|
|
|
|
|
|
DoDrawHint( *event.mpDc, rect, pos, boxOfs, grooveOfs, event.mpBar->IsFixed() );
|
|
|
|
|
DoDrawHint( *event.mpDc, rect, pos, boxOfs, grooveOfs, event.mpBar->IsFixed() );
|
|
|
|
|
|
|
|
|
|
// let other plugins add on their decorations
|
|
|
|
|
// let other plugins add on their decorations
|
|
|
|
|
|
|
|
|
|
event.Skip();
|
|
|
|
|
event.Skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnLeftDown( cbLeftDownEvent& event )
|
|
|
|
|
{
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
|
|
|
|
|
wxBarIterator iter( mpPane->GetRowList() );
|
|
|
|
|
wxBarIterator iter( mpPane->GetRowList() );
|
|
|
|
|
|
|
|
|
|
mpClickedBar = NULL;
|
|
|
|
|
mpClickedBar = NULL;
|
|
|
|
|
|
|
|
|
|
while ( iter.Next() )
|
|
|
|
|
{
|
|
|
|
|
cbBarInfo& bar = iter.BarInfo();
|
|
|
|
|
while ( iter.Next() )
|
|
|
|
|
{
|
|
|
|
|
cbBarInfo& bar = iter.BarInfo();
|
|
|
|
|
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
|
|
|
|
|
GetHintsLayout( bar.mBoundsInParent, bar, boxOfs, grooveOfs, pos );
|
|
|
|
|
GetHintsLayout( bar.mBoundsInParent, bar, boxOfs, grooveOfs, pos );
|
|
|
|
|
|
|
|
|
|
if ( !bar.IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->OnLeftDown( inFrame );
|
|
|
|
|
if ( !bar.IsFixed() )
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->OnLeftDown( inFrame );
|
|
|
|
|
|
|
|
|
|
if ( mBoxes[i]->mPressed )
|
|
|
|
|
{
|
|
|
|
|
mBtnPressed = TRUE;
|
|
|
|
|
mpClickedBar = &bar;
|
|
|
|
|
if ( mBoxes[i]->mPressed )
|
|
|
|
|
{
|
|
|
|
|
mBtnPressed = TRUE;
|
|
|
|
|
mpClickedBar = &bar;
|
|
|
|
|
|
|
|
|
|
return; // event handled
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return; // event handled
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event.Skip();
|
|
|
|
|
event.Skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnLeftUp( cbLeftUpEvent& event )
|
|
|
|
|
{
|
|
|
|
|
if ( mBtnPressed )
|
|
|
|
|
{
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
if ( mBtnPressed )
|
|
|
|
|
{
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
int boxOfs, grooveOfs, pos;
|
|
|
|
|
|
|
|
|
|
GetHintsLayout( mpClickedBar->mBoundsInParent, *mpClickedBar, boxOfs, grooveOfs, pos );
|
|
|
|
|
GetHintsLayout( mpClickedBar->mBoundsInParent, *mpClickedBar, boxOfs, grooveOfs, pos );
|
|
|
|
|
|
|
|
|
|
int result = HitTestHints( *mpClickedBar, event.mPos );
|
|
|
|
|
int result = HitTestHints( *mpClickedBar, event.mPos );
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->OnLeftUp( inFrame );
|
|
|
|
|
for ( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->OnLeftUp( inFrame );
|
|
|
|
|
|
|
|
|
|
if ( mBoxes[i]->WasClicked() )
|
|
|
|
|
{
|
|
|
|
|
if ( i == 0 )
|
|
|
|
|
if ( mBoxes[i]->WasClicked() )
|
|
|
|
|
{
|
|
|
|
|
if ( i == 0 )
|
|
|
|
|
{
|
|
|
|
|
mpLayout->SetBarState( mpClickedBar, wxCBAR_HIDDEN, TRUE );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mpClickedBar->IsExpanded() )
|
|
|
|
|
mpPane->ContractBar( mpClickedBar );
|
|
|
|
|
else
|
|
|
|
|
mpPane->ExpandBar( mpClickedBar );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpLayout->SetBarState( mpClickedBar, wxCBAR_HIDDEN, TRUE );
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if ( mpClickedBar->IsExpanded() )
|
|
|
|
|
|
|
|
|
|
mpPane->ContractBar( mpClickedBar );
|
|
|
|
|
else
|
|
|
|
|
mpPane->ExpandBar( mpClickedBar );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mBtnPressed = FALSE;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
event.Skip();
|
|
|
|
|
mBtnPressed = FALSE;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
event.Skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnMotion( cbMotionEvent& event )
|
|
|
|
|
{
|
|
|
|
|
if ( mBtnPressed )
|
|
|
|
|
{
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
if ( mBtnPressed )
|
|
|
|
|
{
|
|
|
|
|
wxPoint inFrame = event.mPos;
|
|
|
|
|
mpPane->PaneToFrame( &inFrame.x, &inFrame.y );
|
|
|
|
|
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
mpPane = event.mpPane;
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
|
|
|
|
|
mBoxes[i]->OnMotion( inFrame );
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
event.Skip();
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != BOXES_IN_HINT; ++i )
|
|
|
|
|
{
|
|
|
|
|
mBoxes[i]->OnMotion( inFrame );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
event.Skip();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void cbBarHintsPlugin::OnInitPlugin()
|
|
|
|
|
{
|
|
|
|
|
cbPluginBase::OnInitPlugin();
|
|
|
|
|
cbPluginBase::OnInitPlugin();
|
|
|
|
|
|
|
|
|
|
cbDockPane** panes = mpLayout->GetPanesArray();
|
|
|
|
|
cbDockPane** panes = mpLayout->GetPanesArray();
|
|
|
|
|
|
|
|
|
|
int i;
|
|
|
|
|
for( i = 0; i != MAX_PANES; ++i )
|
|
|
|
|
{
|
|
|
|
|
if ( panes[i]->MatchesMask( mPaneMask ) )
|
|
|
|
|
{
|
|
|
|
|
panes[i]->mProps.mMinCBarDim.x = 25;
|
|
|
|
|
panes[i]->mProps.mMinCBarDim.y = 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CreateBoxes();
|
|
|
|
|
int i;
|
|
|
|
|
for ( i = 0; i != MAX_PANES; ++i )
|
|
|
|
|
{
|
|
|
|
|
if ( panes[i]->MatchesMask( mPaneMask ) )
|
|
|
|
|
{
|
|
|
|
|
panes[i]->mProps.mMinCBarDim.x = 25;
|
|
|
|
|
panes[i]->mProps.mMinCBarDim.y = 16;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CreateBoxes();
|
|
|
|
|
}
|
|
|
|
|