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

#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;
};