Merge wxQT branch into the trunk.

This merges in the latest sources from GSoC 2014 wxQt project with just a few
minor corrections, mostly undoing wrong changes to common files in that branch
(results of a previous bad merge?) and getting rid of whitespace-only changes.
Also remove debug logging from wxGrid.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@77455 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2014-08-24 01:50:11 +00:00
parent d513d3e2f0
commit df13791078
381 changed files with 24333 additions and 938 deletions

352
src/qt/toolbar.cpp Normal file
View File

@@ -0,0 +1,352 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/qt/toolbar.cpp
// Author: Sean D'Epagnier, Peter Most
// Copyright: (c) Sean D'Epagnier 2014
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/toolbar.h"
#include "wx/qt/private/winevent.h"
#include "wx/qt/private/converter.h"
#if wxUSE_TOOLBAR
#include <QtWidgets/QToolButton>
class wxQtToolButton;
class wxToolBarTool : public wxToolBarToolBase
{
public:
wxToolBarTool(wxToolBar *tbar, int id, const wxString& label, const wxBitmap& bitmap1,
const wxBitmap& bitmap2, wxItemKind kind, wxObject *clientData,
const wxString& shortHelpString, const wxString& longHelpString)
: wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind,
clientData, shortHelpString, longHelpString)
{
m_qtToolButton = NULL;
}
wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label)
: wxToolBarToolBase(tbar, control, label)
{
m_qtToolButton = NULL;
}
virtual void SetLabel( const wxString &label );
virtual void SetDropdownMenu(wxMenu* menu);
void SetIcon();
void ClearToolTip();
void SetToolTip();
wxQtToolButton* m_qtToolButton;
};
class wxQtToolButton : public QToolButton, public wxQtSignalHandler< wxToolBarTool >
{
public:
wxQtToolButton(wxToolBar *parent, wxToolBarTool *handler)
: QToolButton(parent->GetHandle()),
wxQtSignalHandler< wxToolBarTool >( handler ) {
setContextMenuPolicy(Qt::PreventContextMenu);
}
private:
void mouseReleaseEvent( QMouseEvent *event );
void mousePressEvent( QMouseEvent *event );
void enterEvent( QEvent *event );
};
void wxQtToolButton::mouseReleaseEvent( QMouseEvent *event )
{
QToolButton::mouseReleaseEvent(event);
if (event->button() == Qt::LeftButton) {
wxToolBarTool *handler = GetHandler();
wxToolBarBase *toolbar = handler->GetToolBar();
toolbar->OnLeftClick( handler->GetId(), isCheckable() ? 1 : 0 );
}
}
void wxQtToolButton::mousePressEvent( QMouseEvent *event )
{
QToolButton::mousePressEvent(event);
if (event->button() == Qt::RightButton) {
wxToolBarTool *handler = GetHandler();
wxToolBarBase *toolbar = handler->GetToolBar();
toolbar->OnRightClick( handler->GetId(), event->x(), event->y() );
}
}
void wxQtToolButton::enterEvent( QEvent *WXUNUSED(event) )
{
wxToolBarTool *handler = GetHandler();
wxToolBarBase *toolbar = handler->GetToolBar();
toolbar->OnMouseEnter( handler->GetId() );
}
IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl)
void wxToolBarTool::SetLabel( const wxString &label )
{
wxToolBarToolBase::SetLabel( label );
if (m_qtToolButton) {
m_qtToolButton->setText(wxQtConvertString( label ));
}
}
void wxToolBarTool::SetDropdownMenu(wxMenu* menu)
{
wxToolBarToolBase::SetDropdownMenu(menu);
m_qtToolButton->setMenu(menu->GetHandle());
menu->SetInvokingWindow(GetToolBar());
}
void wxToolBarTool::SetIcon()
{
m_qtToolButton->setIcon( QIcon( *GetNormalBitmap().GetHandle() ));
}
void wxToolBarTool::ClearToolTip()
{
m_qtToolButton->setToolTip("");
}
void wxToolBarTool::SetToolTip()
{
m_qtToolButton->setToolTip(wxQtConvertString( GetShortHelp() ));
}
class wxQtToolbar : public wxQtEventSignalHandler< QToolBar, wxToolBar >
{
public:
wxQtToolbar( wxWindow *parent, wxToolBar *handler );
};
wxQtToolbar::wxQtToolbar( wxWindow *parent, wxToolBar *handler )
: wxQtEventSignalHandler< QToolBar, wxToolBar >( parent, handler )
{
}
QToolBar *wxToolBar::GetHandle() const
{
return m_qtToolBar;
}
void wxToolBar::Init()
{
m_qtToolBar = NULL;
}
wxToolBar::~wxToolBar()
{
}
bool wxToolBar::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos,
const wxSize& size, long style, const wxString& name)
{
m_qtToolBar = new wxQtToolbar( parent, this );
m_qtToolBar->setWindowTitle( wxQtConvertString( name ) );
SetWindowStyleFlag(style);
// not calling to wxWindow::Create, so do the rest of initialization:
if (parent)
parent->AddChild( this );
PostCreation();
return wxWindowBase::CreateBase( parent, id, pos, size, style, wxDefaultValidator, name );
}
wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord WXUNUSED(x),
wxCoord WXUNUSED(y)) const
{
// actionAt(x, y);
wxFAIL_MSG( wxT("wxToolBar::FindToolForPosition() not implemented") );
return NULL;
}
void wxToolBar::SetWindowStyleFlag( long style )
{
wxToolBarBase::SetWindowStyleFlag(style);
if ( !m_qtToolBar )
return;
m_qtToolBar->setOrientation( IsVertical() ? Qt::Vertical : Qt::Horizontal);
Qt::ToolButtonStyle buttonStyle = GetButtonStyle();
// bring the initial state of all the toolbar items in line with the
for ( wxToolBarToolsList::const_iterator i = m_tools.begin();
i != m_tools.end(); ++i )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(*i);
if (!tool->m_qtToolButton)
continue;
tool->m_qtToolButton->setToolButtonStyle(buttonStyle);
}
}
bool wxToolBar::Realize()
{
if ( !wxToolBarBase::Realize() )
return false;
// bring the initial state of all the toolbar items in line with the
for ( wxToolBarToolsList::const_iterator i = m_tools.begin();
i != m_tools.end(); ++i )
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(*i);
if (!tool->m_qtToolButton)
continue;
tool->m_qtToolButton->setEnabled(tool->IsEnabled());
tool->m_qtToolButton->setChecked(tool->IsToggled());
if (HasFlag(wxTB_NO_TOOLTIPS))
tool->ClearToolTip();
else
tool->SetToolTip();
}
return true;
}
QActionGroup* wxToolBar::GetActionGroup(size_t pos)
{
QActionGroup *actionGroup = NULL;
if (pos > 0)
actionGroup = GetHandle()->actions().at(pos-1)->actionGroup();
if (actionGroup == NULL && (int)pos < GetHandle()->actions().size() - 1)
actionGroup = GetHandle()->actions().at(pos+1)->actionGroup();
if (actionGroup == NULL)
actionGroup = new QActionGroup(GetHandle());
return actionGroup;
}
bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(toolBase);
QAction *before = NULL;
if (pos >= 0 && pos < (size_t)GetHandle()->actions().size())
before = GetHandle()->actions().at(pos);
QAction *action;
switch ( tool->GetStyle() )
{
case wxTOOL_STYLE_BUTTON:
tool->m_qtToolButton = new wxQtToolButton(this, tool);
tool->m_qtToolButton->setToolButtonStyle(GetButtonStyle());
tool->SetLabel( tool->GetLabel() );
if (!HasFlag(wxTB_NOICONS))
tool->SetIcon();
if (!HasFlag(wxTB_NO_TOOLTIPS))
tool->SetToolTip();
action = GetHandle()->insertWidget(before, tool->m_qtToolButton);
switch (tool->GetKind())
{
default:
wxFAIL_MSG("unknown toolbar child type");
// fall through
case wxITEM_RADIO:
GetActionGroup(pos)->addAction(action);
// fall-through
case wxITEM_CHECK:
tool->m_qtToolButton->setCheckable(true);
case wxITEM_DROPDOWN:
case wxITEM_NORMAL:
break;
}
break;
case wxTOOL_STYLE_SEPARATOR:
if (tool->IsStretchable()) {
QWidget* spacer = new QWidget();
spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
GetHandle()->insertWidget(before, spacer);
} else
GetHandle()->insertSeparator(before);
break;
case wxTOOL_STYLE_CONTROL:
wxWindow* control = tool->GetControl();
GetHandle()->insertWidget(before, control->GetHandle());
break;
}
InvalidateBestSize();
return true;
}
bool wxToolBar::DoDeleteTool(size_t /* pos */, wxToolBarToolBase *toolBase)
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(toolBase);
delete tool->m_qtToolButton;
tool->m_qtToolButton = NULL;
InvalidateBestSize();
return true;
}
void wxToolBar::DoEnableTool(wxToolBarToolBase *toolBase, bool enable)
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(toolBase);
tool->m_qtToolButton->setEnabled(enable);
}
void wxToolBar::DoToggleTool(wxToolBarToolBase *toolBase, bool toggle)
{
wxToolBarTool* tool = static_cast<wxToolBarTool*>(toolBase);
tool->m_qtToolButton->setChecked(toggle);
}
void wxToolBar::DoSetToggle(wxToolBarToolBase * WXUNUSED(tool),
bool WXUNUSED(toggle))
{
// VZ: absolutely no idea about how to do it
wxFAIL_MSG( wxT("not implemented") );
}
wxToolBarToolBase *wxToolBar::CreateTool(int id, const wxString& label, const wxBitmap& bmpNormal,
const wxBitmap& bmpDisabled, wxItemKind kind, wxObject *clientData,
const wxString& shortHelp, const wxString& longHelp)
{
return new wxToolBarTool(this, id, label, bmpNormal, bmpDisabled, kind,
clientData, shortHelp, longHelp);
}
wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control,
const wxString& label)
{
return new wxToolBarTool(this, control, label);
}
Qt::ToolButtonStyle wxToolBar::GetButtonStyle()
{
if (!HasFlag(wxTB_NOICONS)) {
if (HasFlag(wxTB_HORZ_LAYOUT))
return Qt::ToolButtonTextBesideIcon;
else if (HasFlag(wxTB_TEXT))
return Qt::ToolButtonTextUnderIcon;
else
return Qt::ToolButtonIconOnly;
}
return Qt::ToolButtonTextOnly;
}
#endif // wxUSE_TOOLBAR