#include "wx/fl/dyntbar.h"
#include "wx/fl/newbmpbtn.h"
-IMPLEMENT_DYNAMIC_CLASS(wxDynamicToolBar, wxControl )
+IMPLEMENT_DYNAMIC_CLASS( wxDynamicToolBar, wxObject )
-BEGIN_EVENT_TABLE( wxDynamicToolBar, wxControl )
+BEGIN_EVENT_TABLE( wxDynamicToolBar, wxToolBarBase )
EVT_SIZE ( wxDynamicToolBar::OnSize )
EVT_PAINT( wxDynamicToolBar::OnPaint )
END_EVENT_TABLE()
+/***** Implementation for class wxToolLayoutItem *****/
+
+IMPLEMENT_DYNAMIC_CLASS(wxToolLayoutItem, wxObject)
+
+
/***** Implementation for class wxDynToolInfo *****/
IMPLEMENT_DYNAMIC_CLASS(wxDynToolInfo, wxToolLayoutItem)
const wxPoint& pos,
const wxSize& size,
const long style,
- const int orientation, const int RowsOrColumns,
+ const int WXUNUSED(orientation), const int WXUNUSED(RowsOrColumns),
const wxString& name)
{
// cut&pasted from wxtbatsmpl.h
void wxDynamicToolBar::AddTool( int toolIndex,
wxWindow* pToolWindow,
- const wxSize& size
+ const wxSize& WXUNUSED(size)
)
{
wxDynToolInfo* pInfo = new wxDynToolInfo();
wxToolBarToolBase*
wxDynamicToolBar::AddTool(const int toolIndex, const wxBitmap& bitmap,
- const wxBitmap& pushedBitmap,
- const bool toggle, const long xPos,
- const long yPos, wxObject *clientData,
- const wxString& helpString1, const wxString& helpString2)
+ const wxBitmap& WXUNUSED(pushedBitmap),
+ const bool WXUNUSED(toggle), const long WXUNUSED(xPos),
+ const long WXUNUSED(yPos), wxObject *WXUNUSED(clientData),
+ const wxString& helpString1, const wxString& WXUNUSED(helpString2))
{
wxNewBitmapButton* pBmpBtn = new wxNewBitmapButton( bitmap );
pBmpBtn->Reshape();
+#if wxUSE_TOOLTIPS
+ pBmpBtn->SetToolTip( helpString1 );
+#endif // wxUSE_TOOLTIPS
+
AddTool( toolIndex, pBmpBtn );
return NULL;
pInfo->mpToolWnd = pSepartorWnd;
pInfo->mIndex = -1;
- pInfo->mIsSeparator = TRUE;
+ pInfo->mIsSeparator = TRUE;
+ // Do we draw a separator or is a other object?
if ( pSepartorWnd )
{
- pSepartorWnd->Create( this, -1 );
+ // hvl => Is there a way to know if it was already created?
+ // hvl => shouldn't the pSepartorWnd be created? (like one should expect?)
+ // pSepartorWnd->Create( this, -1 );
int x,y;
pSepartorWnd->GetSize( &x, &y );
}
else
{
- pInfo->mRealSize.x = mSepartorSize;
+ // Init x and y to the default.
+ pInfo->mRealSize.x = 0;
pInfo->mRealSize.y = 0;
+ // Init height and width to the normal size of a separator.
pInfo->mRect.width = mSepartorSize;
- pInfo->mRect.height = 0;
+ pInfo->mRect.height = mSepartorSize;
}
mTools.Add( pInfo );
}
-void wxDynamicToolBar::OnEraseBackground( wxEraseEvent& event )
+void wxDynamicToolBar::OnEraseBackground( wxEraseEvent& WXUNUSED(event) )
{
// FOR NOW:: nothing
}
-void wxDynamicToolBar::OnSize( wxSizeEvent& event )
+void wxDynamicToolBar::OnSize( wxSizeEvent& WXUNUSED(event) )
{
//SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ) );
}
}
-void wxDynamicToolBar::OnPaint( wxPaintEvent& event )
+void wxDynamicToolBar::OnPaint( wxPaintEvent& WXUNUSED(event) )
{
// draw separators if any
-
wxPaintDC dc(this);
size_t i;
for( i = 0; i != mTools.Count(); ++i )
-
+ {
if ( mTools[i]->mIsSeparator )
{
// check if separator doesn't have it's own window
// if so, then draw it using built-in drawing method
-
if ( !mTools[i]->mpToolWnd )
-
DrawSeparator( *mTools[i], dc );
}
+ }
}
// FOR NOW:: quick fix
void wxDynamicToolBar::SizeToolWindows()
{
+ bool bStateCheckDone = FALSE;
+ bool bHorzSeparator = FALSE;
+ int maxWidth = 0;
+ int maxHeight = 0;
+
size_t i;
for( i = 0; i != mTools.Count(); ++i )
{
if ( !info.mIsSeparator )
{
-
// center real rectangle within the rectangle
// provided by the layout manager
// FOR NOW FOR NOW:: quick & dirty fix
if ( info.mpToolWnd->IsKindOf( CLASSINFO( wxChoice ) ) )
{
- info.mpToolWnd->SetSize( x,y,
- info.mRealSize.x - 3,
- info.mRealSize.y);
+ info.mpToolWnd->SetSize( x, y,
+ info.mRealSize.x - 3,
+ info.mRealSize.y);
}
else
- info.mpToolWnd->SetSize( x,y,
- info.mRealSize.x,
- info.mRealSize.y );
+ {
+ info.mpToolWnd->SetSize( x, y,
+ info.mRealSize.x,
+ info.mRealSize.y );
+ }
}
+ else
+ {
+ // We performer this code here, so we only execute it when we have
+ // separators and we do it only once (all to do with performance...)
+ if (!bStateCheckDone)
+ {
+ bStateCheckDone = TRUE;
+
+ size_t j;
+ wxDynToolInfo *pInfo = NULL;
+ wxDynToolInfo *pPrevInfo = NULL;
+ int nVertSeparators = 0;
+
+ for( j = 0; j != mTools.Count(); ++j )
+ {
+ pInfo = mTools[j];
+
+ // Count all Vert Separators.
+ if ( pInfo->mIsSeparator )
+ nVertSeparators++;
+
+ // Check if the new row starts with a Separator.
+ if ( pPrevInfo && pInfo->mIsSeparator &&
+ // pPrevInfo->mRect.x >= pInfo->mRect.x &&
+ pPrevInfo->mRect.y < pInfo->mRect.y)
+ {
+ // If the Separator is shown on the next row and it's
+ // the only object on the row it would mean that the
+ // Separator should be shown as Horizontal one.
+ if (j+1 != mTools.Count())
+ {
+ if (pInfo->mRect.y < mTools[j+1]->mRect.y)
+ nVertSeparators--;
+ }
+ else
+ {
+ nVertSeparators--;
+ }
+ }
+
+ pPrevInfo = pInfo;
+
+ maxWidth = wxMax(pInfo->mRect.width, maxWidth);
+ maxHeight = wxMax(pInfo->mRect.height, maxHeight);
+ }
+
+ bHorzSeparator = nVertSeparators == 0;
+ }
+
+ // Check if we should draw Horz or Vert...
+ if ( !bHorzSeparator )
+ {
+ info.mRect.width = mSepartorSize;
+ info.mRect.height = maxHeight;
+ }
+ else
+ {
+ info.mRect.width = maxWidth;
+ info.mRect.height = mSepartorSize;
+ }
+
+ // Do we need to set a new size to a seperator object?
+ if ( info.mpToolWnd )
+ {
+ info.mpToolWnd->SetSize( info.mRect.x,
+ info.mRect.y,
+ info.mRect.width,
+ info.mRect.height);
+ }
- // TBD:: size separator window if present
+ }
}
}
bool wxDynamicToolBar::Layout()
{
- if ( !mpLayoutMan )
- mpLayoutMan = CreateDefaultLayout();
-
int x,y;
GetSize( &x, &y );
wxSize wndDim(x,y);
wxSize result;
-
- wxLayoutItemArrayT items;
-
- // safe conversion
size_t i;
+ wxDynToolInfo *pInfo;
+
+ // Reset the size of separators...
for( i = 0; i != mTools.Count(); ++i )
- items.Add( mTools[i] );
+ {
+ pInfo = mTools[i];
+
+ if ( pInfo->mIsSeparator )
+ {
+ pInfo->mRect.width = mSepartorSize;
+ pInfo->mRect.height = mSepartorSize;
+ }
+ }
- mpLayoutMan->Layout( wndDim, result, items, mVertGap, mHorizGap );;
+ // Calc and set the best layout
+ GetPreferredDim( wndDim, result );
SizeToolWindows();
return TRUE;
for( i = 0; i != mTools.Count(); ++i )
items.Add( mTools[i] );
- mpLayoutMan->Layout( givenDim, prefDim, items, mVertGap, mHorizGap );;
+ mpLayoutMan->Layout( givenDim, prefDim, items, mVertGap, mHorizGap );
}
void wxDynamicToolBar::SetLayout( LayoutManagerBase* pLayout )
Layout();
}
-void wxDynamicToolBar::EnableTool(const int toolIndex, const bool enable )
+void wxDynamicToolBar::EnableTool(int toolIndex, bool enable )
{
wxDynToolInfo* pInfo = GetToolInfo( toolIndex );
wxSize& resultingDim,
wxLayoutItemArrayT& items,
int horizGap,
- int vertGap
+ int vertGap
)
{
int maxWidth = 0;
//////// stuff from 2.1.15 ///////////
-wxToolBarToolBase* wxDynamicToolBar::FindToolForPosition( wxCoord x, wxCoord y ) const
+wxToolBarToolBase* wxDynamicToolBar::FindToolForPosition( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y) ) const
{
return NULL;
}
-bool wxDynamicToolBar::DoInsertTool( size_t pos, wxToolBarToolBase* tool )
+bool wxDynamicToolBar::DoInsertTool( size_t WXUNUSED(pos), wxToolBarToolBase* WXUNUSED(tool) )
{
return TRUE;
}
-bool wxDynamicToolBar::DoDeleteTool( size_t pos, wxToolBarToolBase* tool )
+bool wxDynamicToolBar::DoDeleteTool( size_t WXUNUSED(pos), wxToolBarToolBase* WXUNUSED(tool) )
{
return TRUE;
}
-void wxDynamicToolBar::DoEnableTool( wxToolBarToolBase* tool, bool enable )
+void wxDynamicToolBar::DoEnableTool( wxToolBarToolBase* WXUNUSED(tool), bool WXUNUSED(enable) )
{
}
-void wxDynamicToolBar::DoToggleTool( wxToolBarToolBase* tool, bool toggle )
+void wxDynamicToolBar::DoToggleTool( wxToolBarToolBase* WXUNUSED(tool), bool WXUNUSED(toggle) )
{
}
-void wxDynamicToolBar::DoSetToggle( wxToolBarToolBase* tool, bool toggle )
+void wxDynamicToolBar::DoSetToggle( wxToolBarToolBase* WXUNUSED(tool), bool WXUNUSED(toggle) )
{
}
-wxToolBarToolBase* wxDynamicToolBar::CreateTool( int id, const wxBitmap& bitmap1, const wxBitmap& bitmap2, bool toggle, wxObject* clientData, const wxString& shortHelpString, const wxString& longHelpString )
+wxToolBarToolBase* wxDynamicToolBar::CreateTool( int WXUNUSED(id),
+ const wxString& WXUNUSED(label),
+ const wxBitmap& WXUNUSED(bmpNormal),
+ const wxBitmap& WXUNUSED(bmpDisabled),
+ wxItemKind WXUNUSED(kind),
+ wxObject *WXUNUSED(clientData),
+ const wxString& WXUNUSED(shortHelp),
+ const wxString& WXUNUSED(longHelp)
+ )
{
return NULL;
}
-wxToolBarToolBase* wxDynamicToolBar::CreateTool( wxControl* control )
+wxToolBarToolBase* wxDynamicToolBar::CreateTool( wxControl* WXUNUSED(control) )
{
return NULL;
}