|
|
#ifndef SARIBBONGALLERYGROUP_H
|
|
|
#define SARIBBONGALLERYGROUP_H
|
|
|
#include "SARibbonGlobal.h"
|
|
|
#include <QList>
|
|
|
#include <QListView>
|
|
|
#include <QStyledItemDelegate>
|
|
|
#include "SARibbonGalleryItem.h"
|
|
|
|
|
|
///
|
|
|
/// \brief SARibbonGalleryGroup对应的显示代理
|
|
|
///
|
|
|
class SA_RIBBON_EXPORT SARibbonGalleryGroupItemDelegate : public QStyledItemDelegate
|
|
|
{
|
|
|
public:
|
|
|
SARibbonGalleryGroupItemDelegate(SARibbonGalleryGroup* group, QObject* parent = Q_NULLPTR);
|
|
|
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const Q_DECL_OVERRIDE;
|
|
|
|
|
|
virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const Q_DECL_OVERRIDE;
|
|
|
virtual void paintIconOnly(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
|
|
virtual void paintIconWithText(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
|
|
virtual void paintIconWithTextWordWrap(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
|
|
|
|
|
|
private:
|
|
|
SARibbonGalleryGroup* m_group;
|
|
|
};
|
|
|
|
|
|
///
|
|
|
/// \brief SARibbonGalleryGroup对应的model
|
|
|
///
|
|
|
class SA_RIBBON_EXPORT SARibbonGalleryGroupModel : public QAbstractListModel
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
public:
|
|
|
SARibbonGalleryGroupModel(QObject* parent = Q_NULLPTR);
|
|
|
~SARibbonGalleryGroupModel();
|
|
|
virtual int rowCount(const QModelIndex& parent) const Q_DECL_OVERRIDE;
|
|
|
virtual Qt::ItemFlags flags(const QModelIndex& index) const Q_DECL_OVERRIDE;
|
|
|
virtual QVariant data(const QModelIndex& index, int role) const Q_DECL_OVERRIDE;
|
|
|
virtual QModelIndex index(int row, int column, const QModelIndex& parent) const Q_DECL_OVERRIDE;
|
|
|
virtual bool setData(const QModelIndex& index, const QVariant& value, int role) Q_DECL_OVERRIDE;
|
|
|
void clear();
|
|
|
SARibbonGalleryItem* at(int row) const;
|
|
|
void insert(int row, SARibbonGalleryItem* item);
|
|
|
SARibbonGalleryItem* take(int row);
|
|
|
void append(SARibbonGalleryItem* item);
|
|
|
|
|
|
private:
|
|
|
QList< SARibbonGalleryItem* > m_items;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief Gallery的组
|
|
|
*
|
|
|
* 组负责显示管理Gallery Item
|
|
|
*/
|
|
|
class SA_RIBBON_EXPORT SARibbonGalleryGroup : public QListView
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
SA_RIBBON_DECLARE_PRIVATE(SARibbonGalleryGroup)
|
|
|
public:
|
|
|
/**
|
|
|
* @brief GalleryGroup显示的样式
|
|
|
*/
|
|
|
enum GalleryGroupStyle
|
|
|
{
|
|
|
IconWithText, ///< 图标带文字
|
|
|
IconWithWordWrapText, ///< 图标带文字,文字会换行显示,此模式只会对DisplayOneRow生效,如果不是DisplayOneRow,等同IconWithText
|
|
|
IconOnly ///< 只有图标
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* @brief 定义Gallery在一个pannel下面显示的图标行数
|
|
|
*/
|
|
|
enum DisplayRow
|
|
|
{
|
|
|
DisplayOneRow = 1, ///< 显示1行,默认
|
|
|
DisplayTwoRow = 2,
|
|
|
DisplayThreeRow = 3
|
|
|
};
|
|
|
|
|
|
SARibbonGalleryGroup(QWidget* w = 0);
|
|
|
|
|
|
virtual ~SARibbonGalleryGroup();
|
|
|
// 重新计算grid尺寸
|
|
|
void setRecalcGridSizeBlock(bool on = true);
|
|
|
bool isRecalcGridSizeBlock() const;
|
|
|
void recalcGridSize();
|
|
|
void recalcGridSize(int galleryHeight);
|
|
|
// 设置显示的样式
|
|
|
void setGalleryGroupStyle(GalleryGroupStyle style);
|
|
|
GalleryGroupStyle galleryGroupStyle() const;
|
|
|
// 添加一个item
|
|
|
void addItem(const QString& text, const QIcon& icon);
|
|
|
void addItem(SARibbonGalleryItem* item);
|
|
|
// 以一个aciton作为item添加
|
|
|
void addActionItem(QAction* act);
|
|
|
void addActionItemList(const QList< QAction* >& acts);
|
|
|
|
|
|
// 构建一个model,这个model的父类是SARibbonGalleryGroup,如果要共享model,需要手动处理model的父类
|
|
|
void setupGroupModel();
|
|
|
SARibbonGalleryGroupModel* groupModel();
|
|
|
// 标题
|
|
|
void setGroupTitle(const QString& title);
|
|
|
QString groupTitle() const;
|
|
|
void selectByIndex(int i);
|
|
|
// 设置显示的行数
|
|
|
void setDisplayRow(DisplayRow r);
|
|
|
DisplayRow displayRow() const;
|
|
|
// 设置grid最小的宽度,默认为0(不限制),可以限定grid的宽度
|
|
|
void setGridMinimumWidth(int w);
|
|
|
int gridMinimumWidth() const;
|
|
|
// 设置grid最大的宽度,默认为0(不限制),可以限定grid的宽度
|
|
|
void setGridMaximumWidth(int w);
|
|
|
int gridMaximumWidth() const;
|
|
|
// 获取SARibbonGalleryGroup管理的actiongroup
|
|
|
QActionGroup* actionGroup() const;
|
|
|
private slots:
|
|
|
void onItemClicked(const QModelIndex& index);
|
|
|
void onItemEntered(const QModelIndex& index);
|
|
|
signals:
|
|
|
void groupTitleChanged(const QString& title);
|
|
|
/**
|
|
|
* @brief 等同QActionGroup的triggered
|
|
|
* 所有加入SARibbonGalleryGroup的action都会被一个QActionGroup管理,可以通过@sa getActionGroup 获取到对应的actiongroup
|
|
|
* @param action
|
|
|
*/
|
|
|
void triggered(QAction* action);
|
|
|
/**
|
|
|
* @brief 等同QActionGroup的triggered
|
|
|
* 所有加入SARibbonGalleryGroup的action都会被一个QActionGroup管理,可以通过@sa getActionGroup 获取到对应的actiongroup
|
|
|
* @note 此属性需要通过QAbstractItemView::entered(const QModelIndex &index)激活,因此要保证设置了setMouseTracking(true)
|
|
|
* @param action
|
|
|
*/
|
|
|
void hovered(QAction* action);
|
|
|
};
|
|
|
|
|
|
#endif // SARIBBONGALLERYGROUP_H
|