95 lines
3.1 KiB
C
95 lines
3.1 KiB
C
![]() |
#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
|