Files
create/src/Mod/TechDraw/Gui/QGVPage.h
2025-08-30 11:23:07 +02:00

210 lines
6.0 KiB
C++

/***************************************************************************
* Copyright (c) 2013 Luke Parry <l.parry@warwick.ac.uk> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef TECHDRAWGUI_QGVIEW_H
#define TECHDRAWGUI_QGVIEW_H
#include <Mod/TechDraw/TechDrawGlobal.h>
#include <memory>
#include <QGraphicsView>
#include <QLabel>
#include <QPainterPath>
#include <Base/Type.h>
namespace App
{
class DocumentObject;
}
namespace TechDraw
{
class DrawView;
class DrawViewPart;
class DrawProjGroup;
class DrawViewDimension;
class DrawPage;
class DrawTemplate;
class DrawViewAnnotation;
class DrawViewSymbol;
class DrawViewClip;
class DrawViewCollection;
class DrawViewSpreadsheet;
class DrawViewImage;
class DrawLeaderLine;
class DrawViewBalloon;
class DrawRichAnno;
class DrawWeldSymbol;
}// namespace TechDraw
namespace TechDrawGui
{
class MDIViewPage;
class QGSPage;
class QGIView;
class QGIViewDimension;
class QGITemplate;
class ViewProviderPage;
class QGIViewBalloon;
class QGILeaderLine;
class QGIRichAnno;
class QGITile;
class QGVNavStyle;
class TechDrawHandler;
class TechDrawGuiExport QGVPage: public QGraphicsView
{
Q_OBJECT
public:
enum class RendererType
{
Native,
OpenGL,
Image
};
QGVPage(ViewProviderPage* vpPage, QGSPage* scenePage, QWidget* parent = nullptr);
~QGVPage() override;
void setRenderer(RendererType type = RendererType::Native);
void drawBackground(QPainter* painter, const QRectF& rect) override;
QGSPage* getScene() { return m_scene; }
void startBalloonPlacing(TechDraw::DrawView* parent);
void cancelBalloonPlacing();
TechDraw::DrawPage* getDrawPage();
void makeGrid(int width, int height, double step);
void showGrid(bool state) { m_showGrid = state; }
void updateViewport() { viewport()->repaint(); }
void activateHandler(TechDrawHandler* newHandler);
void deactivateHandler();
bool isHandlerActive() { return toolHandler != nullptr; }
bool isBalloonPlacing() const { return balloonPlacing; }
void setBalloonPlacing(bool isPlacing) { balloonPlacing = isPlacing; }
QLabel* getBalloonCursor() const { return balloonCursor; }
void setBalloonCursor(QLabel* label) { balloonCursor = label; }
void kbPanScroll(int xMove = 1, int yMove = 1);
QPointF getBalloonCursorPos() const { return balloonCursorPos; }
void setBalloonCursorPos(QPoint pos) { balloonCursorPos = pos; }
void activateCursor(QCursor cursor);
void resetCursor();
void setPanCursor();
void setZoomCursor();
void pseudoContextEvent();
void centerOnPage();
TechDraw::DrawView* getBalloonParent() { return m_balloonParent; }
void zoomIn();
void zoomOut();
public Q_SLOTS:
void setHighQualityAntialiasing(bool highQualityAntialiasing);
protected:
void wheelEvent(QWheelEvent* event) override;
void paintEvent(QPaintEvent* event) override;
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
void enterEvent(QEvent* event) override;
#else
void enterEvent(QEnterEvent* event) override;
#endif
void leaveEvent(QEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void focusOutEvent(QFocusEvent* event) override;
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
void contextMenuEvent(QContextMenuEvent* event) override;
QColor getBackgroundColor();
QPixmap prepareCursorPixmap(const char* iconName, QPoint& hotspot);
void drawForeground(QPainter* painter, const QRectF& rect) override;
std::string getNavStyleParameter();
Base::Type getStyleType(std::string model);
void initNavigationStyle();
void setNavigationStyle(std::string navParm);
void createStandardCursors();
private:
RendererType m_renderer;
bool drawBkg;
QBrush* bkgBrush;
QImage m_image;
ViewProviderPage* m_vpPage;
bool m_atCursor;
bool m_invertZoom;
double m_zoomIncrement;
int m_reversePan;
int m_reverseScroll;
QGSPage* m_scene;
bool balloonPlacing;
QLabel* balloonCursor;
QPoint balloonCursorPos;
QPoint balloonHotspot;
TechDraw::DrawView* m_balloonParent;//temp field. used during balloon placing.
QPoint panOrigin;
bool m_showGrid;
QPainterPath m_gridPath;
QGVNavStyle* m_navStyle;
class Private;
std::unique_ptr<Private> d;
QCursor panCursor;
QCursor zoomCursor;
MDIViewPage* m_parentMDI;
QContextMenuEvent* m_saveContextEvent;
std::unique_ptr<TechDrawHandler> toolHandler;
};
}// namespace TechDrawGui
#endif// TECHDRAWGUI_QGVIEW_H