instAdmin/Cpp/GisDes/SaRibbon/SARibbonBar/SARibbonCategoryLayout.h
2024-10-29 22:24:50 +08:00

95 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef SARIBBONCATEGORYLAYOUT_H
#define SARIBBONCATEGORYLAYOUT_H
#include "SARibbonGlobal.h"
#include <QLayout>
#include <QList>
#include <QMap>
#include "SARibbonCategory.h"
class SARibbonPannel;
class SARibbonCategoryLayoutItem;
class SARibbonSeparatorWidget;
/**
* @brief The SARibbonCategoryLayout class
*/
class SA_RIBBON_EXPORT SARibbonCategoryLayout : public QLayout
{
Q_OBJECT
SA_RIBBON_DECLARE_PRIVATE(SARibbonCategoryLayout)
public:
SARibbonCategoryLayout(SARibbonCategory* parent);
~SARibbonCategoryLayout();
SARibbonCategory* ribbonCategory() const;
virtual void addItem(QLayoutItem* item) Q_DECL_OVERRIDE;
virtual QLayoutItem* itemAt(int index) const Q_DECL_OVERRIDE;
virtual QLayoutItem* takeAt(int index) Q_DECL_OVERRIDE;
SARibbonCategoryLayoutItem* takePannelItem(int index);
SARibbonCategoryLayoutItem* takePannelItem(SARibbonPannel* pannel);
bool takePannel(SARibbonPannel* pannel);
virtual int count() const Q_DECL_OVERRIDE;
void setGeometry(const QRect& rect) Q_DECL_OVERRIDE;
QSize sizeHint() const Q_DECL_OVERRIDE;
QSize minimumSize() const Q_DECL_OVERRIDE;
Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
void invalidate() Q_DECL_OVERRIDE;
// 追加一个pannel
void addPannel(SARibbonPannel* pannel);
// 插入一个pannel
void insertPannel(int index, SARibbonPannel* pannel);
//
QSize categoryContentSize() const;
// 更新尺寸
void updateGeometryArr();
// 执行位置调整
void doLayout();
// 返回所有pannels
QList< SARibbonPannel* > pannels() const;
// 通过obj name获取pannel
SARibbonPannel* pannelByObjectName(const QString& objname) const;
// 通过pannel name获取pannel
SARibbonPannel* pannelByName(const QString& pannelname) const;
// 通过索引找到pannel如果超过索引范围会返回nullptr
SARibbonPannel* pannelByIndex(int i) const;
// 移动pannel
void movePannel(int from, int to);
// pannel的数量
int pannelCount() const;
// pannel的索引
int pannelIndex(SARibbonPannel* p) const;
// 获取所有的pannel
QList< SARibbonPannel* > pannelList() const;
// 执行滚轮事件
void scroll(int px);
// 判断是否有滚动过
bool isScrolled() const;
// category的总宽度
int categoryTotalWidth() const;
// 设置Category的对齐方式
void setCategoryAlignment(SARibbonAlignment al);
SARibbonAlignment categoryAlignment() const;
private Q_SLOTS:
void onLeftScrollButtonClicked();
void onRightScrollButtonClicked();
};
/**
* @brief SARibbonCategoryLayoutItem用于标识SARibbonCategoryLayout的item
*/
class SA_RIBBON_EXPORT SARibbonCategoryLayoutItem : public QWidgetItem
{
public:
SARibbonCategoryLayoutItem(SARibbonPannel* w);
SARibbonSeparatorWidget* separatorWidget;
// 把内部的widget转换为pannel
SARibbonPannel* toPannelWidget();
QRect mWillSetGeometry; ///< pannel将要设置的Geometry
QRect mWillSetSeparatorGeometry; ///< pannel将要设置的Separator的Geometry
};
#endif // SARIBBONCATEGORYLAYOUT_H