// SPDX-License-Identifier: LGPL-2.1-or-later
//
// SPDX-FileCopyrightText: 2008 Torsten Rahn <tackat@kde.org>
// SPDX-FileCopyrightText: 2012 Illya Kovalevskyy <illya.kovalevskyy@gmail.com>
//
#ifndef MARBLE_ABSTRACTFLOATITEM_H
#define MARBLE_ABSTRACTFLOATITEM_H
#include <QPointF>
#include <QSizeF>
#include "FrameGraphicsItem.h"
#include "RenderPlugin.h"
#include "marble_export.h"
class QContextMenuEvent;
class QHelpEvent;
class QMenu;
class QWidget;
class QFont;
class QPen;
namespace Marble
{
class AbstractFloatItemPrivate;
/**
* @brief The abstract class for float item plugins
*
* Float Item is a variant of Marble render plugins
* It keeps floating on top of the map at a given screen position
*
* Good examples are Overview Map, License
*
*/
class MARBLE_EXPORT AbstractFloatItem : public RenderPlugin, public FrameGraphicsItem
{
Q_OBJECT
public:
explicit AbstractFloatItem(const MarbleModel *marbleModel, const QPointF &point = QPointF(10.0, 10.0), const QSizeF &size = QSizeF(150.0, 50.0));
~AbstractFloatItem() override;
QHash<QString, QVariant> settings() const override;
void setSettings(const QHash<QString, QVariant> &settings) override;
RenderType renderType() const override;
/**
* @brief current pen for rendering
* @return pen
*/
QPen pen() const;
/**
* @brief setting current pen for rendering
* @param pen
*/
void setPen(const QPen &pen);
/**
* @brief current font for rendering
* @return font
*/
QFont font() const;
/**
* @brief setting current font for rendering
* @param font
*/
void setFont(const QFont &font);
/**
* @brief Paints the float item on the map.
* @deprecated Do not override this method since it won't be called any longer.
* Override one of FrameGraphicsItem's paint methods instead.
*/
MARBLE_DEPRECATED bool
render(GeoPainter *painter, ViewportParams *viewport, const QString &renderPos = QLatin1String("FLOAT_ITEM"), GeoSceneLayer *layer = nullptr) override;
QString renderPolicy() const override;
/**
* @brief Returns the rendering position of this float item.
* @deprecated The return value of method is ignored. The float item's rendering position
* will always be "FLOAT_ITEM".
*/
MARBLE_DEPRECATED QStringList renderPosition() const override;
/**
* @brief Set visibility of the float item
*
* Float items can be visible or invisible.
* It's possible to check visibility with @see visible
*
* @param visible visibility of the item
*/
void setVisible(bool visible);
/**
* @brief Check visibility of the float item
*
* Float items can be visible or invisible.
* It's possible to set visibility with @see setVisible
*
* @return visible or not
*/
bool visible() const;
/**
* @brief Check is position locked
*
* Float Item position can be locked. If it is,
* the item can't be moved with the cursor (in the UI)
*
* To set it use @see setPositionLocked
*
* @return position locked or not
*/
bool positionLocked() const;
public Q_SLOTS:
/**
* @brief Set is position locked
* @param lock is locked?
*
* Float Item position can be locked. If it is,
* item can't be moved with cursor (in UI)
*
* To check it use @see positionLocked
*
*/
void setPositionLocked(bool lock);
/**
* @brief Show the item
*
* If the item was hidden this function will show it
*
*/
void show();
/**
* @brief Hide the item
*
* If the item was shown this function will hide it
*
*/
void hide();
protected:
bool eventFilter(QObject *object, QEvent *e) override;
virtual void contextMenuEvent(QWidget *w, QContextMenuEvent *e);
virtual void toolTipEvent(QHelpEvent *e);
QMenu *contextMenu();
private:
Q_DISABLE_COPY(AbstractFloatItem)
AbstractFloatItemPrivate *const d;
};
}
#endif
|