SARibbon 2.5.2
SARibbon wiki
载入中...
搜索中...
未找到
SARibbonBar.h
1#ifndef SARIBBONBAR_H
2#define SARIBBONBAR_H
3#include "SARibbonCategory.h"
4#include "SARibbonContextCategory.h"
5#include "SARibbonGlobal.h"
6#include <QMenuBar>
7#include <QScopedPointer>
8#include <QVariant>
9
10class QAction;
11class QAbstractButton;
13class SARibbonTabBar;
18
170class SA_RIBBON_EXPORT SARibbonBar : public QMenuBar
171{
172 Q_OBJECT
173 SA_RIBBON_DECLARE_PRIVATE(SARibbonBar)
174 friend class SARibbonMainWindow;
175 friend class SARibbonSystemButtonBar;
176 Q_PROPERTY(RibbonStyles ribbonStyle READ currentRibbonStyle WRITE setRibbonStyle)
177 Q_PROPERTY(bool minimumMode READ isMinimumMode WRITE setMinimumMode)
178 Q_PROPERTY(bool minimumModeButton READ haveShowMinimumModeButton WRITE showMinimumModeButton)
179 Q_PROPERTY(QColor windowTitleTextColor READ windowTitleTextColor WRITE setWindowTitleTextColor)
180 Q_PROPERTY(QColor tabBarBaseLineColor READ tabBarBaseLineColor WRITE setTabBarBaseLineColor)
181 Q_PROPERTY(Qt::Alignment windowTitleAligment READ windowTitleAligment WRITE setWindowTitleAligment)
182 Q_PROPERTY(bool enableWordWrap READ isEnableWordWrap WRITE setEnableWordWrap)
183 Q_PROPERTY(bool enableShowPanelTitle READ isEnableShowPanelTitle WRITE setEnableShowPanelTitle)
184 Q_PROPERTY(bool enableIconRightText READ isEnableIconRightText WRITE setEnableIconRightText)
185 Q_PROPERTY(bool tabOnTitle READ isTabOnTitle WRITE setTabOnTitle)
186 Q_PROPERTY(SARibbonPanel::PanelLayoutMode panelLayoutMode READ panelLayoutMode WRITE setPanelLayoutMode)
187
188public:
190 {
191 RibbonStyleLoose = 0x0001, // bit:0000 0001
192 RibbonStyleCompact = 0x0002, // bit:0000 0010
193 RibbonStyleThreeRow = 0x0010, // bit:0001 0000
194 RibbonStyleTwoRow = 0x0020, // bit:0010 0000
195 RibbonStyleSingleRow = 0x0040, // bit:0100 0000
196
197 RibbonStyleLooseThreeRow = RibbonStyleLoose | RibbonStyleThreeRow,
198 RibbonStyleCompactThreeRow = RibbonStyleCompact | RibbonStyleThreeRow,
199 RibbonStyleLooseTwoRow = RibbonStyleLoose | RibbonStyleTwoRow,
200 RibbonStyleCompactTwoRow = RibbonStyleCompact | RibbonStyleTwoRow,
201 RibbonStyleLooseSingleRow = RibbonStyleLoose | RibbonStyleSingleRow,
202 RibbonStyleCompactSingleRow = RibbonStyleCompact | RibbonStyleSingleRow
203 };
204 Q_ENUM(RibbonStyleFlag)
205 Q_DECLARE_FLAGS(RibbonStyles, RibbonStyleFlag)
206 Q_FLAG(RibbonStyles)
207
208
212 {
214 NormalRibbonMode
215 };
216 Q_ENUM(RibbonMode)
217public:
218 using FpCategoryIterate = std::function< bool(SARibbonCategory*) >;
219 using FpPanelIterate = SARibbonCategory::FpPanelIterate;
223 using FpContextCategoryHighlight = std::function< QColor(const QColor&) >;
224
225public:
227 static bool isTwoRowStyle(RibbonStyles s);
229 static bool isThreeRowStyle(RibbonStyles s);
231 static bool isLooseStyle(RibbonStyles s);
233 static bool isCompactStyle(RibbonStyles s);
235 static bool isSingleRowStyle(RibbonStyles s);
237 static QString versionString();
238
240 static QList< QColor > defaultContextCategoryColorList();
241
243 static void initHighDpi();
244
245public:
247 explicit SARibbonBar(QWidget* parent = nullptr);
249 ~SARibbonBar();
251 QAbstractButton* applicationButton();
252
254 void setApplicationButton(QAbstractButton* btn);
255
257 SARibbonTabBar* ribbonTabBar();
258
260 SARibbonCategory* addCategoryPage(const QString& title);
262 void addCategoryPage(SARibbonCategory* category);
263
265 Q_INVOKABLE void addCategoryPage(QWidget* category);
266
268 SARibbonCategory* insertCategoryPage(const QString& title, int index);
270 void insertCategoryPage(SARibbonCategory* category, int index);
271
273 SARibbonCategory* categoryByName(const QString& title) const;
274
276 SARibbonCategory* categoryByObjectName(const QString& objname) const;
277
279 SARibbonCategory* categoryByIndex(int index) const;
280
282 void hideCategory(SARibbonCategory* category);
283
285 void showCategory(SARibbonCategory* category);
286
287 // Batch set categories visible or hidden, only triggers one relayout at the end
288 void setCategoriesVisible(const QList< SARibbonCategory* >& categories, bool visible);
289
291 bool isCategoryVisible(const SARibbonCategory* c) const;
292
294 int categoryIndex(const SARibbonCategory* c) const;
295
297 void moveCategory(int from, int to);
298
300 QList< SARibbonCategory* > categoryPages(bool getAll = true) const;
301
303 void removeCategory(SARibbonCategory* category);
304
307 addContextCategory(const QString& title, const QColor& color = QColor(), const QVariant& id = QVariant());
309 void addContextCategory(SARibbonContextCategory* context);
310
312 void showContextCategory(SARibbonContextCategory* context);
313
315 void hideContextCategory(SARibbonContextCategory* context);
316
318 bool isContextCategoryVisible(SARibbonContextCategory* context);
319
321 void setContextCategoryVisible(SARibbonContextCategory* context, bool visible);
322
324 QList< SARibbonContextCategory* > contextCategoryList() const;
325
327 void destroyContextCategory(SARibbonContextCategory* context);
328
330 QList< int > currentVisibleContextCategoryTabIndexs() const;
331
333 void setMinimumMode(bool isHide);
334
336 bool isMinimumMode() const;
337
339 void showMinimumModeButton(bool isShow = true);
340
342 bool haveShowMinimumModeButton() const;
343
345 QAction* minimumModeAction() const;
346
348 bool isEnableTabDoubleClickToMinimumMode() const;
350 void setTabDoubleClickToMinimumMode(bool on = true) const;
351
353 RibbonMode currentRibbonState() const;
354
356 int tabBarHeight() const;
358 void setTabBarHeight(int h, bool resizeByNow = true);
359
361 int titleBarHeight() const;
363 void setTitleBarHeight(int h, bool resizeByNow = true);
364
366 int categoryHeight() const;
368 void setCategoryHeight(int h, bool resizeByNow = true);
369
371 int normalModeMainBarHeight() const;
372
374 int minimumModeMainBarHeight() const;
375
377 SARibbonButtonGroupWidget* activeRightButtonGroup();
378
380 SARibbonButtonGroupWidget* rightButtonGroup();
381
383 SARibbonQuickAccessBar* activeQuickAccessBar();
384
386 SARibbonQuickAccessBar* quickAccessBar();
387
389 SARibbonTitleIconWidget* titleIconWidget() const;
390
392 void setTitleIconVisible(bool on = true);
394 bool isTitleIconVisible() const;
395
397 void setRibbonStyle(RibbonStyles v);
399 RibbonStyles currentRibbonStyle() const;
400
402 void setCurrentIndex(int index);
403
405 int currentIndex();
406
408 void raiseCategory(SARibbonCategory* category);
409
411 bool isTwoRowStyle() const;
413 bool isThreeRowStyle() const;
414
416 bool isLooseStyle() const;
418 bool isCompactStyle() const;
420 bool isSingleRowStyle() const;
421
423 void updateRibbonGeometry();
424
426 SARibbonPanel::PanelLayoutMode panelLayoutMode() const;
428 void setPanelLayoutMode(SARibbonPanel::PanelLayoutMode m);
429
431 void setTabOnTitle(bool on);
433 bool isTabOnTitle() const;
434
436 void setTabBarBaseLineColor(const QColor& clr);
438 QColor tabBarBaseLineColor() const;
439
441 void setWindowTitleTextColor(const QColor& clr);
443 QColor windowTitleTextColor() const;
444
446 void setTitleVisible(bool on = false);
448 bool isTitleVisible() const;
449
451 void setWindowTitleBackgroundBrush(const QBrush& bk);
453 QBrush windowTitleBackgroundBrush() const;
454
456 void setWindowTitleAligment(Qt::Alignment al);
458 Qt::Alignment windowTitleAligment() const;
459
461 void setEnableWordWrap(bool on);
463 bool isEnableWordWrap() const;
464
466 void setEnableIconRightText(bool on);
468 bool isEnableIconRightText() const;
469
471 void setButtonMaximumAspectRatio(qreal fac = 1.4);
473 qreal buttonMaximumAspectRatio() const;
474
476 void setPanelTitleHeight(int h);
478 int panelTitleHeight() const;
479
481 void setEnableShowPanelTitle(bool on);
483 bool isEnableShowPanelTitle() const;
484
486 void setPanelSpacing(int n);
488 int panelSpacing() const;
489
491 void setPanelToolButtonIconSize(const QSize& smallSize, const QSize& largeSize);
493 QPair< QSize, QSize > panelToolButtonIconSize() const;
494
496 void setPanelLargeIconSize(const QSize& largeSize);
498 QSize panelLargeIconSize() const;
499
501 void setPanelSmallIconSize(const QSize& smallSize);
503 QSize panelSmallIconSize() const;
504
506 SARibbonStackedWidget* ribbonStackedWidget();
507
509 void setContextCategoryColorList(const QList< QColor >& cls);
511 QList< QColor > contextCategoryColorList() const;
512
514 void setContextCategoryTitleTextColor(const QColor& clr);
516 QColor contextCategoryTitleTextColor() const;
517
519 void setContextCategoryColorHighLight(FpContextCategoryHighlight fp);
520
522 void setRibbonAlignment(SARibbonAlignment al);
524 SARibbonAlignment ribbonAlignment() const;
525
527 bool iterateCategory(FpCategoryIterate fp) const;
529 bool iteratePanel(FpPanelIterate fp) const;
530
532 void setCornerWidgetVisible(bool on, Qt::Corner c = Qt::TopLeftCorner);
533
535 void setApplicationButtonVerticalExpansion(bool on = true);
537 bool isApplicationButtonVerticalExpansion() const;
538
540 QList< QAction* > allActions() const;
542 bool isUseRibbonFrame() const;
543Q_SIGNALS:
544
559
571 void currentRibbonTabChanged(int index);
572
585
597 void ribbonStyleChanged(SARibbonBar::RibbonStyles nowStyle);
598
612 void titleBarHeightChanged(int oldHeight, int newHeight);
613
625 void actionTriggered(QAction* action);
626
627protected:
629 bool eventFilter(QObject* obj, QEvent* e) override;
631 int calcMinTabBarWidth() const;
633 void updateCategoryTitleToTabName();
635 void setSystemButtonGroupSize(const QSize& s);
637 void setMainWindowStyles(SARibbonMainWindowStyles s);
638protected Q_SLOTS:
640 void onWindowTitleChanged(const QString& title);
642 void onWindowIconChanged(const QIcon& i);
644 void onCategoryWindowTitleChanged(const QString& title);
646 void onStackWidgetHided();
648 virtual void onCurrentRibbonTabChanged(int index);
650 virtual void onCurrentRibbonTabClicked(int index);
652 virtual void onCurrentRibbonTabDoubleClicked(int index);
654 void onContextsCategoryPageAdded(SARibbonCategory* category);
656 void onContextsCategoryCategoryNameChanged(SARibbonCategory* category, const QString& title);
658 void onTabMoved(int from, int to);
659
660private:
661 int tabIndex(SARibbonCategory* obj);
662 void paintInLooseStyle();
663 void paintInCompactStyle();
664
665 // 刷新所有ContextCategoryManagerData,这个在单独一个Category删除时调用
666 void updateContextCategoryManagerData();
667 void synchronousCategoryData(bool autoUpdate = true);
668 // 把窗口标题文字转换为显示的文字,这里主要针对[*]占位符进行替换
669 QString toDisplayTitleText(const QString& title) const;
670 // 获取标题显示的区域
671 QRect getWindowTitleRect() const;
672
673protected:
677 virtual void paintEvent(QPaintEvent* e) override;
679 virtual void moveEvent(QMoveEvent* e) override;
681 virtual void changeEvent(QEvent* e) override;
682
684 virtual void paintTabbarBaseLine(QPainter& painter);
686 virtual void paintWindowTitle(QPainter& painter, const QString& title, const QRect& titleRegion);
688 virtual void
689 paintContextCategoryTab(QPainter& painter, const QString& title, const QRect& contextRect, const QColor& color);
690#if SA_DEBUG_PRINT_SARIBBONBAR
691 SA_RIBBON_EXPORT friend QDebug operator<<(QDebug debug, const SARibbonBar& ribbon);
692#endif
693};
694Q_DECLARE_OPERATORS_FOR_FLAGS(SARibbonBar::RibbonStyles)
695
696#endif // SARIBBONBAR_H
Definition SARibbonBar.h:171
RibbonMode
定义当前ribbon 的状态
Definition SARibbonBar.h:212
@ MinimumRibbonMode
缩小模式
Definition SARibbonBar.h:213
void ribbonStyleChanged(SARibbonBar::RibbonStyles nowStyle)
void ribbonModeChanged(SARibbonBar::RibbonMode nowState)
std::function< QColor(const QColor &) > FpContextCategoryHighlight
这是针对上下文标签的高亮颜色绘制,用户可以设置一个函数指针,来针对上下文标签的高亮颜色进行调整
Definition SARibbonBar.h:223
void titleBarHeightChanged(int oldHeight, int newHeight)
void currentRibbonTabChanged(int index)
void actionTriggered(QAction *action)
static bool isLooseStyle(RibbonStyles s)
Check if the ribbon style is loose (Office) style
RibbonStyleFlag
Definition SARibbonBar.h:190
void applicationButtonClicked()
void setRibbonMainwindowStyle()
Set ribbon main window style
Definition SARibbonButtonGroupWidget.h:19
Definition SARibbonCategory.h:32
Definition SARibbonContextCategory.h:19
Definition SARibbonElementFactory.h:43
Definition SARibbonMainWindow.h:86
PanelLayoutMode
Layout mode for the panel / 面板的布局模式
Definition SARibbonPanel.h:116
Definition SARibbonQuickAccessBar.h:67
Definition SARibbonStackedWidget.h:34
Definition SARibbonSystemButtonBar.h:41
Definition SARibbonTabBar.h:17
Ribbon风格的标题栏图标控件 模拟Windows原生窗口左上角的程序图标功能,支持右键菜单和窗口控制操作
Definition SARibbonTitleIconWidget.h:13