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.

95 lines
3.1 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.

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