cdc588e4eb
This could result in infinite recursion in wxX11, as the test for the new size being different from the old one which was supposed to stop the recursion, failed there in case the new size was 0: as wxX11 can't use 0 size for the window, the actual size was always different and so we kept sending size events to the parent, which kept resizing the toolbar etc. It could be argued that there is a bug in wxX11 and that GetSize() must return the same value as was passed to SetSize(), even if it was 0, and this might even be correct, in theory, but it doesn't seem worth to do it just to accommodate this weird use case, especially because resizing the parent from the child shouldn't be necessary in the first place and none of wxToolBar implementations in the other ports does it. So just remove this code completely. Closes #18554.
136 lines
4.9 KiB
C++
136 lines
4.9 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/univ/toolbar.h
|
|
// Purpose: wxToolBar declaration
|
|
// Author: Robert Roebling
|
|
// Modified by:
|
|
// Created: 10.09.00
|
|
// Copyright: (c) Robert Roebling
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_UNIV_TOOLBAR_H_
|
|
#define _WX_UNIV_TOOLBAR_H_
|
|
|
|
#include "wx/button.h" // for wxStdButtonInputHandler
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxToolBarTool;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// the actions supported by this control
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#define wxACTION_TOOLBAR_TOGGLE wxACTION_BUTTON_TOGGLE
|
|
#define wxACTION_TOOLBAR_PRESS wxACTION_BUTTON_PRESS
|
|
#define wxACTION_TOOLBAR_RELEASE wxACTION_BUTTON_RELEASE
|
|
#define wxACTION_TOOLBAR_CLICK wxACTION_BUTTON_CLICK
|
|
#define wxACTION_TOOLBAR_ENTER wxT("enter") // highlight the tool
|
|
#define wxACTION_TOOLBAR_LEAVE wxT("leave") // unhighlight the tool
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// wxToolBar
|
|
// ----------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxToolBar : public wxToolBarBase
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
wxToolBar() { Init(); }
|
|
wxToolBar(wxWindow *parent,
|
|
wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = 0,
|
|
const wxString& name = wxToolBarNameStr)
|
|
{
|
|
Init();
|
|
|
|
Create(parent, id, pos, size, style, name);
|
|
}
|
|
|
|
bool Create( wxWindow *parent,
|
|
wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = 0,
|
|
const wxString& name = wxToolBarNameStr );
|
|
|
|
virtual ~wxToolBar();
|
|
|
|
virtual bool Realize() wxOVERRIDE;
|
|
|
|
virtual void SetWindowStyleFlag( long style ) wxOVERRIDE;
|
|
|
|
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const wxOVERRIDE;
|
|
|
|
virtual void SetToolShortHelp(int id, const wxString& helpString) wxOVERRIDE;
|
|
|
|
virtual void SetMargins(int x, int y) wxOVERRIDE;
|
|
void SetMargins(const wxSize& size)
|
|
{ SetMargins((int) size.x, (int) size.y); }
|
|
|
|
virtual bool PerformAction(const wxControlAction& action,
|
|
long numArg = -1,
|
|
const wxString& strArg = wxEmptyString) wxOVERRIDE;
|
|
static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef);
|
|
virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) wxOVERRIDE
|
|
{
|
|
return GetStdInputHandler(handlerDef);
|
|
}
|
|
|
|
protected:
|
|
// common part of all ctors
|
|
void Init();
|
|
|
|
// implement base class pure virtuals
|
|
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool) wxOVERRIDE;
|
|
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool) wxOVERRIDE;
|
|
|
|
virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable) wxOVERRIDE;
|
|
virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle) wxOVERRIDE;
|
|
virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle) wxOVERRIDE;
|
|
|
|
virtual wxToolBarToolBase *CreateTool(int id,
|
|
const wxString& label,
|
|
const wxBitmap& bmpNormal,
|
|
const wxBitmap& bmpDisabled,
|
|
wxItemKind kind,
|
|
wxObject *clientData,
|
|
const wxString& shortHelp,
|
|
const wxString& longHelp) wxOVERRIDE;
|
|
virtual wxToolBarToolBase *CreateTool(wxControl *control,
|
|
const wxString& label) wxOVERRIDE;
|
|
|
|
virtual wxSize DoGetBestClientSize() const wxOVERRIDE;
|
|
virtual void DoDraw(wxControlRenderer *renderer) wxOVERRIDE;
|
|
|
|
// get the bounding rect for the given tool
|
|
wxRect GetToolRect(wxToolBarToolBase *tool) const;
|
|
|
|
// redraw the given tool
|
|
void RefreshTool(wxToolBarToolBase *tool);
|
|
|
|
// (re)calculate the tool positions, should only be called if it is
|
|
// necessary to do it, i.e. m_needsLayout == true
|
|
void DoLayout();
|
|
|
|
// get the rect limits depending on the orientation: top/bottom for a
|
|
// vertical toolbar, left/right for a horizontal one
|
|
void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const;
|
|
|
|
private:
|
|
// have we calculated the positions of our tools?
|
|
bool m_needsLayout;
|
|
|
|
// the width of a separator
|
|
wxCoord m_widthSeparator;
|
|
|
|
// the total size of all toolbar elements
|
|
wxCoord m_maxWidth,
|
|
m_maxHeight;
|
|
|
|
private:
|
|
wxDECLARE_DYNAMIC_CLASS(wxToolBar);
|
|
};
|
|
|
|
#endif // _WX_UNIV_TOOLBAR_H_
|