2017-10-27 13:15:37 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
|
|
|
|
2017-10-30 18:45:46 +01:00
|
|
|
#include "Qt5Widget.hxx"
|
|
|
|
#include <Qt5Widget.moc>
|
2017-10-27 13:15:37 +02:00
|
|
|
|
2017-10-30 18:45:46 +01:00
|
|
|
#include "Qt5Frame.hxx"
|
|
|
|
#include "Qt5Graphics.hxx"
|
2017-10-24 19:49:45 +02:00
|
|
|
#include "Qt5Tools.hxx"
|
2017-10-31 01:07:06 +01:00
|
|
|
|
2017-11-07 13:18:05 +01:00
|
|
|
#include <QtGui/QFocusEvent>
|
2017-10-31 01:07:06 +01:00
|
|
|
#include <QtGui/QImage>
|
2017-11-07 13:18:05 +01:00
|
|
|
#include <QtGui/QKeyEvent>
|
2017-10-30 19:55:18 +01:00
|
|
|
#include <QtGui/QMouseEvent>
|
2017-10-31 01:07:06 +01:00
|
|
|
#include <QtGui/QPainter>
|
|
|
|
#include <QtGui/QPaintEvent>
|
2017-11-07 13:13:10 +01:00
|
|
|
#include <QtGui/QShowEvent>
|
2017-10-30 19:55:18 +01:00
|
|
|
#include <QtGui/QWheelEvent>
|
2018-05-14 15:39:30 +02:00
|
|
|
#include <QtWidgets/QtWidgets>
|
|
|
|
#include <QtWidgets/QMainWindow>
|
2017-10-31 01:07:06 +01:00
|
|
|
|
2017-10-24 19:49:45 +02:00
|
|
|
#include <cairo.h>
|
|
|
|
#include <headless/svpgdi.hxx>
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
class VclQtMixinBase
|
2017-10-27 13:15:37 +02:00
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
public:
|
2018-05-31 12:14:55 +02:00
|
|
|
VclQtMixinBase(Qt5Frame* pFrame) { m_pFrame = pFrame; }
|
2018-05-14 15:39:30 +02:00
|
|
|
|
|
|
|
void mixinFocusInEvent(QFocusEvent*);
|
|
|
|
void mixinFocusOutEvent(QFocusEvent*);
|
|
|
|
void mixinKeyPressEvent(QKeyEvent*);
|
|
|
|
void mixinKeyReleaseEvent(QKeyEvent*);
|
|
|
|
void mixinMouseMoveEvent(QMouseEvent*);
|
|
|
|
void mixinMousePressEvent(QMouseEvent*);
|
|
|
|
void mixinMouseReleaseEvent(QMouseEvent*);
|
|
|
|
void mixinMoveEvent(QMoveEvent*);
|
|
|
|
void mixinPaintEvent(QPaintEvent*, QWidget* widget);
|
|
|
|
void mixinResizeEvent(QResizeEvent*, QSize aSize);
|
|
|
|
void mixinShowEvent(QShowEvent*);
|
|
|
|
void mixinWheelEvent(QWheelEvent*);
|
|
|
|
void mixinCloseEvent(QCloseEvent*);
|
|
|
|
|
|
|
|
private:
|
|
|
|
bool mixinHandleKeyEvent(QKeyEvent*, bool);
|
|
|
|
void mixinHandleMouseButtonEvent(QMouseEvent*, bool);
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
Qt5Frame* m_pFrame;
|
2018-05-14 15:39:30 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
void VclQtMixinBase::mixinPaintEvent(QPaintEvent* pEvent, QWidget* widget)
|
2017-10-31 01:07:06 +01:00
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
QPainter p(widget);
|
2017-11-08 11:28:04 +01:00
|
|
|
if (m_pFrame->m_bUseCairo)
|
2017-10-24 19:49:45 +02:00
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
cairo_surface_t* pSurface = m_pFrame->m_pSurface.get();
|
|
|
|
cairo_surface_flush(pSurface);
|
2017-10-24 19:49:45 +02:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
QImage aImage(cairo_image_surface_get_data(pSurface), widget->size().width(),
|
2018-05-31 12:14:55 +02:00
|
|
|
widget->size().height(), Qt5_DefaultFormat32);
|
2017-11-08 11:28:04 +01:00
|
|
|
p.drawImage(pEvent->rect().topLeft(), aImage, pEvent->rect());
|
2017-10-24 19:49:45 +02:00
|
|
|
}
|
|
|
|
else
|
2017-11-08 11:28:04 +01:00
|
|
|
p.drawImage(pEvent->rect().topLeft(), *m_pFrame->m_pQImage, pEvent->rect());
|
2017-10-31 01:07:06 +01:00
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinResizeEvent(QResizeEvent*, QSize aSize)
|
2017-10-31 01:07:06 +01:00
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
if (m_pFrame->m_bUseCairo)
|
2017-10-24 19:49:45 +02:00
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
int width = aSize.width();
|
|
|
|
int height = aSize.height();
|
2017-11-08 11:28:04 +01:00
|
|
|
cairo_surface_t* pSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
|
|
|
|
cairo_surface_set_user_data(pSurface, SvpSalGraphics::getDamageKey(),
|
|
|
|
&m_pFrame->m_aDamageHandler, nullptr);
|
|
|
|
m_pFrame->m_pSvpGraphics->setSurface(pSurface, basegfx::B2IVector(width, height));
|
|
|
|
m_pFrame->m_pSurface.reset(pSurface);
|
2017-10-24 19:49:45 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
QImage* pImage = new QImage(aSize, Qt5_DefaultFormat32);
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->m_pQt5Graphics->ChangeQImage(pImage);
|
|
|
|
m_pFrame->m_pQImage.reset(pImage);
|
2017-10-24 19:49:45 +02:00
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
m_pFrame->maGeometry.nWidth = aSize.width();
|
|
|
|
m_pFrame->maGeometry.nHeight = aSize.height();
|
2017-12-08 11:37:18 +00:00
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->CallCallback(SalEvent::Resize, nullptr);
|
2017-10-31 01:07:06 +01:00
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinHandleMouseButtonEvent(QMouseEvent* pEvent, bool bReleased)
|
2017-10-30 19:55:18 +01:00
|
|
|
{
|
|
|
|
SalMouseEvent aEvent;
|
2017-11-08 11:28:04 +01:00
|
|
|
switch (pEvent->button())
|
2017-10-30 19:55:18 +01:00
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
case Qt::LeftButton:
|
|
|
|
aEvent.mnButton = MOUSE_LEFT;
|
|
|
|
break;
|
|
|
|
case Qt::MidButton:
|
|
|
|
aEvent.mnButton = MOUSE_MIDDLE;
|
|
|
|
break;
|
|
|
|
case Qt::RightButton:
|
|
|
|
aEvent.mnButton = MOUSE_RIGHT;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return;
|
2017-10-30 19:55:18 +01:00
|
|
|
}
|
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
aEvent.mnTime = pEvent->timestamp();
|
2018-01-12 20:10:40 +01:00
|
|
|
aEvent.mnX = static_cast<long>(pEvent->pos().x());
|
|
|
|
aEvent.mnY = static_cast<long>(pEvent->pos().y());
|
2017-11-08 11:28:04 +01:00
|
|
|
aEvent.mnCode = GetKeyModCode(pEvent->modifiers()) | GetMouseModCode(pEvent->buttons());
|
2017-10-30 19:55:18 +01:00
|
|
|
|
|
|
|
SalEvent nEventType;
|
2017-11-08 11:28:04 +01:00
|
|
|
if (bReleased)
|
2017-10-30 19:55:18 +01:00
|
|
|
nEventType = SalEvent::MouseButtonUp;
|
|
|
|
else
|
|
|
|
nEventType = SalEvent::MouseButtonDown;
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->CallCallback(nEventType, &aEvent);
|
2017-10-30 19:55:18 +01:00
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinMousePressEvent(QMouseEvent* pEvent)
|
|
|
|
{
|
|
|
|
mixinHandleMouseButtonEvent(pEvent, false);
|
|
|
|
}
|
2017-10-30 19:55:18 +01:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinMouseReleaseEvent(QMouseEvent* pEvent)
|
|
|
|
{
|
|
|
|
mixinHandleMouseButtonEvent(pEvent, true);
|
|
|
|
}
|
2017-10-30 19:55:18 +01:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinMouseMoveEvent(QMouseEvent* pEvent)
|
2017-10-30 19:55:18 +01:00
|
|
|
{
|
|
|
|
SalMouseEvent aEvent;
|
|
|
|
aEvent.mnTime = pEvent->timestamp();
|
2017-11-08 11:28:04 +01:00
|
|
|
aEvent.mnX = pEvent->pos().x();
|
|
|
|
aEvent.mnY = pEvent->pos().y();
|
|
|
|
aEvent.mnCode = GetKeyModCode(pEvent->modifiers()) | GetMouseModCode(pEvent->buttons());
|
2017-10-30 19:55:18 +01:00
|
|
|
aEvent.mnButton = 0;
|
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->CallCallback(SalEvent::MouseMove, &aEvent);
|
2017-10-30 19:55:18 +01:00
|
|
|
pEvent->accept();
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinWheelEvent(QWheelEvent* pEvent)
|
2017-10-30 19:55:18 +01:00
|
|
|
{
|
|
|
|
SalWheelMouseEvent aEvent;
|
|
|
|
|
|
|
|
aEvent.mnTime = pEvent->timestamp();
|
2017-11-08 11:28:04 +01:00
|
|
|
aEvent.mnX = pEvent->pos().x();
|
|
|
|
aEvent.mnY = pEvent->pos().y();
|
|
|
|
aEvent.mnCode = GetKeyModCode(pEvent->modifiers()) | GetMouseModCode(pEvent->buttons());
|
2017-10-30 19:55:18 +01:00
|
|
|
|
|
|
|
int nDelta = pEvent->angleDelta().x();
|
|
|
|
aEvent.mbHorz = true;
|
2017-11-08 11:28:04 +01:00
|
|
|
if (!nDelta)
|
2017-10-30 19:55:18 +01:00
|
|
|
{
|
|
|
|
nDelta = pEvent->angleDelta().y();
|
|
|
|
aEvent.mbHorz = false;
|
|
|
|
}
|
2017-11-08 11:28:04 +01:00
|
|
|
if (!nDelta)
|
2017-10-30 19:55:18 +01:00
|
|
|
return;
|
|
|
|
nDelta /= 8;
|
|
|
|
|
|
|
|
aEvent.mnDelta = nDelta;
|
|
|
|
aEvent.mnNotchDelta = nDelta > 0 ? 1 : -1;
|
|
|
|
aEvent.mnScrollLines = 3;
|
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->CallCallback(SalEvent::WheelMouse, &aEvent);
|
2017-10-30 19:55:18 +01:00
|
|
|
pEvent->accept();
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinMoveEvent(QMoveEvent*)
|
|
|
|
{
|
|
|
|
m_pFrame->CallCallback(SalEvent::Move, nullptr);
|
|
|
|
}
|
2017-10-30 19:55:18 +01:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinShowEvent(QShowEvent*)
|
2017-11-07 13:13:10 +01:00
|
|
|
{
|
2018-05-31 12:14:55 +02:00
|
|
|
QSize aSize(m_pFrame->GetQWidget()->size());
|
2017-11-08 11:28:04 +01:00
|
|
|
SalPaintEvent aPaintEvt(0, 0, aSize.width(), aSize.height(), true);
|
|
|
|
m_pFrame->CallCallback(SalEvent::Paint, &aPaintEvt);
|
2017-11-07 13:13:10 +01:00
|
|
|
}
|
2017-10-30 19:55:18 +01:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinCloseEvent(QCloseEvent* /*pEvent*/)
|
2018-04-16 13:30:23 +02:00
|
|
|
{
|
|
|
|
m_pFrame->CallCallback(SalEvent::Close, nullptr);
|
|
|
|
}
|
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
static sal_uInt16 GetKeyCode(int keyval)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
|
|
|
sal_uInt16 nCode = 0;
|
2017-11-08 11:28:04 +01:00
|
|
|
if (keyval >= Qt::Key_0 && keyval <= Qt::Key_9)
|
|
|
|
nCode = KEY_0 + (keyval - Qt::Key_0);
|
|
|
|
else if (keyval >= Qt::Key_A && keyval <= Qt::Key_Z)
|
|
|
|
nCode = KEY_A + (keyval - Qt::Key_A);
|
|
|
|
else if (keyval >= Qt::Key_F1 && keyval <= Qt::Key_F26)
|
2017-11-07 13:18:05 +01:00
|
|
|
nCode = KEY_F1 + (keyval - Qt::Key_F1);
|
|
|
|
else
|
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
switch (keyval)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
case Qt::Key_Down:
|
|
|
|
nCode = KEY_DOWN;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Up:
|
|
|
|
nCode = KEY_UP;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Left:
|
|
|
|
nCode = KEY_LEFT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Right:
|
|
|
|
nCode = KEY_RIGHT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Home:
|
|
|
|
nCode = KEY_HOME;
|
|
|
|
break;
|
|
|
|
case Qt::Key_End:
|
|
|
|
nCode = KEY_END;
|
|
|
|
break;
|
|
|
|
case Qt::Key_PageUp:
|
|
|
|
nCode = KEY_PAGEUP;
|
|
|
|
break;
|
|
|
|
case Qt::Key_PageDown:
|
|
|
|
nCode = KEY_PAGEDOWN;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Return:
|
|
|
|
nCode = KEY_RETURN;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Escape:
|
|
|
|
nCode = KEY_ESCAPE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Tab:
|
|
|
|
nCode = KEY_TAB;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Backspace:
|
|
|
|
nCode = KEY_BACKSPACE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Space:
|
|
|
|
nCode = KEY_SPACE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Insert:
|
|
|
|
nCode = KEY_INSERT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Delete:
|
|
|
|
nCode = KEY_DELETE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Plus:
|
|
|
|
nCode = KEY_ADD;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Minus:
|
|
|
|
nCode = KEY_SUBTRACT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Asterisk:
|
|
|
|
nCode = KEY_MULTIPLY;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Slash:
|
|
|
|
nCode = KEY_DIVIDE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Period:
|
|
|
|
nCode = KEY_POINT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Comma:
|
|
|
|
nCode = KEY_COMMA;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Less:
|
|
|
|
nCode = KEY_LESS;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Greater:
|
|
|
|
nCode = KEY_GREATER;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Equal:
|
|
|
|
nCode = KEY_EQUAL;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Find:
|
|
|
|
nCode = KEY_FIND;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Menu:
|
|
|
|
nCode = KEY_CONTEXTMENU;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Help:
|
|
|
|
nCode = KEY_HELP;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Undo:
|
|
|
|
nCode = KEY_UNDO;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Redo:
|
|
|
|
nCode = KEY_REPEAT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Cancel:
|
|
|
|
nCode = KEY_F11;
|
|
|
|
break;
|
|
|
|
case Qt::Key_AsciiTilde:
|
|
|
|
nCode = KEY_TILDE;
|
|
|
|
break;
|
|
|
|
case Qt::Key_QuoteLeft:
|
|
|
|
nCode = KEY_QUOTELEFT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_BracketLeft:
|
|
|
|
nCode = KEY_BRACKETLEFT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_BracketRight:
|
|
|
|
nCode = KEY_BRACKETRIGHT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Semicolon:
|
|
|
|
nCode = KEY_SEMICOLON;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Copy:
|
|
|
|
nCode = KEY_COPY;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Cut:
|
|
|
|
nCode = KEY_CUT;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Open:
|
|
|
|
nCode = KEY_OPEN;
|
|
|
|
break;
|
|
|
|
case Qt::Key_Paste:
|
|
|
|
nCode = KEY_PASTE;
|
|
|
|
break;
|
2017-11-07 13:18:05 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nCode;
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
bool VclQtMixinBase::mixinHandleKeyEvent(QKeyEvent* pEvent, bool bDown)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
|
|
|
SalKeyEvent aEvent;
|
|
|
|
|
2017-11-08 11:28:04 +01:00
|
|
|
aEvent.mnCharCode = (pEvent->text().isEmpty() ? 0 : pEvent->text().at(0).unicode());
|
|
|
|
aEvent.mnRepeat = 0;
|
|
|
|
aEvent.mnCode = GetKeyCode(pEvent->key());
|
|
|
|
aEvent.mnCode |= GetKeyModCode(pEvent->modifiers());
|
2017-11-07 13:18:05 +01:00
|
|
|
|
|
|
|
bool bStopProcessingKey;
|
2017-11-08 11:28:04 +01:00
|
|
|
if (bDown)
|
|
|
|
bStopProcessingKey = m_pFrame->CallCallback(SalEvent::KeyInput, &aEvent);
|
2017-11-07 13:18:05 +01:00
|
|
|
else
|
2017-11-08 11:28:04 +01:00
|
|
|
bStopProcessingKey = m_pFrame->CallCallback(SalEvent::KeyUp, &aEvent);
|
2017-11-07 13:18:05 +01:00
|
|
|
return bStopProcessingKey;
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinKeyPressEvent(QKeyEvent* pEvent)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
if (mixinHandleKeyEvent(pEvent, true))
|
2017-11-07 13:18:05 +01:00
|
|
|
pEvent->accept();
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinKeyReleaseEvent(QKeyEvent* pEvent)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
2018-05-14 15:39:30 +02:00
|
|
|
if (mixinHandleKeyEvent(pEvent, false))
|
2017-11-07 13:18:05 +01:00
|
|
|
pEvent->accept();
|
|
|
|
}
|
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinFocusInEvent(QFocusEvent*)
|
|
|
|
{
|
|
|
|
m_pFrame->CallCallback(SalEvent::GetFocus, nullptr);
|
|
|
|
}
|
2017-11-07 13:18:05 +01:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
void VclQtMixinBase::mixinFocusOutEvent(QFocusEvent*)
|
2017-11-07 13:18:05 +01:00
|
|
|
{
|
2017-11-08 11:28:04 +01:00
|
|
|
m_pFrame->CallCallback(SalEvent::LoseFocus, nullptr);
|
2017-11-07 13:18:05 +01:00
|
|
|
}
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
template <class ParentClassT> class Qt5Widget : public ParentClassT
|
2018-05-14 15:39:30 +02:00
|
|
|
{
|
|
|
|
//Q_OBJECT
|
|
|
|
|
|
|
|
VclQtMixinBase maMixin;
|
|
|
|
|
|
|
|
virtual void focusInEvent(QFocusEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinFocusInEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void focusOutEvent(QFocusEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinFocusOutEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void keyPressEvent(QKeyEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinKeyPressEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void keyReleaseEvent(QKeyEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinKeyReleaseEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void mouseMoveEvent(QMouseEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinMouseMoveEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void mousePressEvent(QMouseEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinMousePressEvent(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void mouseReleaseEvent(QMouseEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinMouseReleaseEvent(event);
|
|
|
|
}
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
virtual void moveEvent(QMoveEvent* event) override { return maMixin.mixinMoveEvent(event); }
|
2018-05-14 15:39:30 +02:00
|
|
|
|
|
|
|
virtual void paintEvent(QPaintEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinPaintEvent(event, this);
|
|
|
|
}
|
|
|
|
|
|
|
|
virtual void resizeEvent(QResizeEvent* event) override
|
|
|
|
{
|
|
|
|
return maMixin.mixinResizeEvent(event, ParentClassT::size());
|
|
|
|
}
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
virtual void showEvent(QShowEvent* event) override { return maMixin.mixinShowEvent(event); }
|
2018-05-14 15:39:30 +02:00
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
virtual void wheelEvent(QWheelEvent* event) override { return maMixin.mixinWheelEvent(event); }
|
2018-05-14 15:39:30 +02:00
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
virtual void closeEvent(QCloseEvent* event) override { return maMixin.mixinCloseEvent(event); }
|
2018-05-14 15:39:30 +02:00
|
|
|
|
|
|
|
private:
|
2018-05-31 12:14:55 +02:00
|
|
|
Qt5Widget(Qt5Frame& rFrame, QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
|
|
|
|
: QWidget(parent, f)
|
|
|
|
, maMixin(&rFrame)
|
2018-05-14 15:39:30 +02:00
|
|
|
{
|
|
|
|
Init();
|
|
|
|
}
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
Qt5Widget(Qt5Frame& rFrame, Qt::WindowFlags f)
|
|
|
|
: QMainWindow(Q_NULLPTR, f)
|
|
|
|
, maMixin(&rFrame)
|
2018-05-14 15:39:30 +02:00
|
|
|
{
|
|
|
|
Init();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Init()
|
|
|
|
{
|
|
|
|
ParentClassT::create();
|
|
|
|
ParentClassT::setMouseTracking(true);
|
|
|
|
ParentClassT::setFocusPolicy(Qt::StrongFocus);
|
|
|
|
}
|
2018-05-31 12:14:55 +02:00
|
|
|
|
2018-05-14 15:39:30 +02:00
|
|
|
public:
|
2018-05-31 12:14:55 +02:00
|
|
|
virtual ~Qt5Widget() override{};
|
2018-05-14 15:39:30 +02:00
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
friend QWidget* createQt5Widget(Qt5Frame& rFrame, QWidget* parent, Qt::WindowFlags f);
|
2018-05-14 15:39:30 +02:00
|
|
|
};
|
|
|
|
|
2018-05-31 12:14:55 +02:00
|
|
|
QWidget* createQt5Widget(Qt5Frame& rFrame, QWidget* parent, Qt::WindowFlags f)
|
2018-05-14 15:39:30 +02:00
|
|
|
{
|
2018-05-31 12:14:55 +02:00
|
|
|
if (parent)
|
|
|
|
return new Qt5Widget<QWidget>(rFrame, parent, f);
|
2018-05-14 15:39:30 +02:00
|
|
|
else
|
2018-05-31 12:14:55 +02:00
|
|
|
return new Qt5Widget<QMainWindow>(rFrame, f);
|
2018-05-14 15:39:30 +02:00
|
|
|
}
|
|
|
|
|
2017-10-27 13:15:37 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|