You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iPlot/iPlotBase/ZxEdit.h

153 lines
3.5 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include <QVector>
#include <QRectF>
#include "IxInterface.h"
#include "iPlotBase_global.h"
class QPainter;
class ZxPaintParam;
class ZxRenderItem;
class ZxHandlePolicy;
class ZxPolicy;
class ZxTool;
class ZxRenderView;
class QMenu;
class QPointF;
class QSizeF;
class QKeyEvent;
class I_PLOTBASE_EXPORT ZxEdit
: virtual public IxInterface
{
private:
ZxEdit(ZxRenderItem* pItem);
~ZxEdit();
public:
void updatePolicyHandles();
/// 绘制工具的拖曳线/拖曳框等临时的辅助元素
virtual void onPaint(QPainter* painter, const ZxPaintParam& param);
/// 获取所属的GraphItem
ZxRenderItem* getItem() const;
/// 获取父Item的Edit
ZxEdit* getParentEdit() const;
/// 获取当前工具
ZxTool* getCurrentTool() const;
/// 获取当前视图
ZxRenderView* getCurrentToolView() const;
/// 添加Policy两个接口基本一致
ZxPolicy* add(ZxPolicy* p, bool bAsStatic = false);
ZxPolicy* addPolicy(ZxPolicy* p, bool bAsStatic = false);
/// 移除policy两个接口基本一致
ZxPolicy* remove(ZxPolicy* p);
ZxPolicy* removePolicy(ZxPolicy* p);
//void deletePolicy(ZxPolicy* p);
/// 清除全部Policy
/// @param bClearAll true时清除全部policy, false时只清除动态的policy
void clear(bool bClearAll = false);
/// 判断是否有policy
bool empty() const;
/// 判断是否有动态Policy
/// @note 此方法速度较慢
bool containsDynamicPolicy() const;
/// 判断是否有静态Policy
/// @note 此方法速度较慢
bool containsStaticPolicy() const;
/// 判断是否包含指定policy
bool containsPolicy(ZxPolicy* p) const;
////////////////////////////////////////////
/// 内部使用的遍历器
class I_PLOTBASE_EXPORT const_iterator
{
const ZxEdit* m_pEdit;
int n;
const_iterator(const ZxEdit* pEdit, int n);
public:
ZxPolicy* operator*();
bool operator!=( const const_iterator& ) const;
bool operator==( const const_iterator& ) const;
const_iterator& operator++();
friend class ZxEdit;
};
const_iterator begin() const;
const_iterator end() const;
/// 内部使用的遍历器
class I_PLOTBASE_EXPORT const_reverse_iterator
{
const ZxEdit* m_pEdit;
int n;
const_reverse_iterator(const ZxEdit* pEdit, int n);
public:
ZxPolicy* operator*();
bool operator!=( const const_reverse_iterator& ) const;
bool operator==( const const_reverse_iterator& ) const;
const_reverse_iterator& operator++();
friend class ZxEdit;
};
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
////////////////////////////////////////////
ZxHandlePolicy* getHandlePolicy() const;
void setHandlePolicy(ZxHandlePolicy* p, bool bAsStatic = false);
/// HandlePolicy的数量
int getHandlePoliciesCount() const;
virtual void onPrepareContextMenu(QMenu* pMenu, const QPointF& pos);
virtual void onItemMove(const QPointF& ptOld, const QPointF& ptNew);
virtual void onItemResize(const QSizeF & szOld, const QSizeF & szNew);
/// 键
virtual void onKeyPress(QKeyEvent* event);
virtual void onKeyRelease(QKeyEvent* event);
/// 刷新所有policy
virtual void update();
virtual QRectF getBounds() const;
private:
ZxRenderItem* m_pItem;
QVector<ZxPolicy *> m_vecPolicies;
int m_nHandlePoliciesCount;
friend class ZxRenderItem;
};