16#include <QButtonGroup>
20#include <QInputDialog>
23#include <QStandardItemModel>
24#include <QXmlStreamReader>
25#include <QXmlStreamWriter>
26#include <QtCore/QVariant>
27#include <QtWidgets/QApplication>
28#include <QtWidgets/QButtonGroup>
29#include <QtWidgets/QComboBox>
30#include <QtWidgets/QHBoxLayout>
31#include <QtWidgets/QHeaderView>
32#include <QtWidgets/QLabel>
33#include <QtWidgets/QLineEdit>
34#include <QtWidgets/QListView>
35#include <QtWidgets/QPushButton>
36#include <QtWidgets/QRadioButton>
37#include <QtWidgets/QSpacerItem>
38#include <QtWidgets/QTreeView>
39#include <QtWidgets/QVBoxLayout>
40#include <QtWidgets/QWidget>
48 if (cds.size() == 0 && !force) {
52 xml->writeStartElement(
"qx-ribbon-customize");
54 xml->writeStartElement(
"customize-data");
55 xml->writeAttribute(
"type", QString::number(d.actionType()));
56 xml->writeAttribute(
"index", QString::number(d.indexValue));
57 xml->writeAttribute(
"key", d.keyValue);
58 xml->writeAttribute(
"page", d.pageObjNameValue);
59 xml->writeAttribute(
"group", d.groupObjNameValue);
60 xml->writeAttribute(
"row-prop", QString::number(d.actionRowProportionValue));
62 xml->writeEndElement();
64 xml->writeEndElement();
65 if (xml->hasError()) {
66 qWarning() <<
"write has error";
74 while (!xml->atEnd()) {
76 qDebug() <<
"name:" << xml->name() <<
" qualifiedName:" << xml->qualifiedName();
78 if (xml->isStartElement() && (xml->name().toString() ==
"qx-ribbon-customize")) {
83 QList<RibbonCustomizeData> res;
86 while (!xml->atEnd()) {
87 if (xml->isStartElement() && (xml->name().toString() ==
"customize-data")) {
90 QXmlStreamAttributes attrs = xml->attributes();
91 if (!attrs.hasAttribute(
"type")) {
93 xml->readNextStartElement();
97 int v = xml->attributes().value(
"type").toInt(&isOk);
100 xml->readNextStartElement();
105 if (attrs.hasAttribute(
"index")) {
106 v = xml->attributes().value(
"index").toInt(&isOk);
111 if (attrs.hasAttribute(
"key")) {
112 data.
keyValue = attrs.value(
"key").toString();
114 if (attrs.hasAttribute(
"page")) {
117 if (attrs.hasAttribute(
"group")) {
120 if (attrs.hasAttribute(
"row-prop")) {
121 v = xml->attributes().value(
"row-prop").toInt(&isOk);
131 if (xml->hasError()) {
132 qWarning() << xml->errorString();
152class RibbonCustomizeWidgetUi
155 QHBoxLayout *horizontalLayoutMain;
156 QVBoxLayout *verticalLayoutSelect;
157 QLabel *labelSelectAction;
158 QHBoxLayout *horizontalLayoutSearch;
159 QComboBox *comboBoxActionIndex;
160 QLineEdit *lineEditSearchAction;
161 QListView *listViewSelect;
162 QVBoxLayout *verticalLayoutMidButtons;
163 QSpacerItem *verticalSpacerUp;
164 QPushButton *pushButtonAdd;
165 QPushButton *pushButtonDelete;
166 QPushButton *pushButtonReset;
167 QSpacerItem *verticalSpacerDown;
168 QLabel *labelProportion;
169 QComboBox *comboBoxActionProportion;
170 QVBoxLayout *verticalLayoutResult;
171 QLabel *labelCustomize;
172 QHBoxLayout *horizontalLayoutPageSelect;
173 QRadioButton *radioButtonMainPage;
174 QRadioButton *radioButtonAllPage;
175 QButtonGroup *radioButtonGroup;
176 QTreeView *treeViewResult;
177 QHBoxLayout *horizontalLayoutActionOptBtns;
178 QPushButton *pushButtonNewPage;
179 QPushButton *pushButtonNewGroup;
180 QPushButton *pushButtonRename;
181 QVBoxLayout *verticalLayoutRightButtons;
182 QSpacerItem *verticalSpacerUp2;
183 QToolButton *toolButtonUp;
184 QToolButton *toolButtonDown;
185 QSpacerItem *verticalSpacerDown2;
187 void setupUi(QWidget *customizeWidget)
189 if (customizeWidget->objectName().isEmpty()) {
190 customizeWidget->setObjectName(QStringLiteral(
"RibbonCustomizeWidget"));
192 customizeWidget->resize(800, 600);
193 horizontalLayoutMain =
new QHBoxLayout(customizeWidget);
194 horizontalLayoutMain->setContentsMargins(0, 0, 0, 0);
195 horizontalLayoutMain->setObjectName(QStringLiteral(
"horizontalLayoutMain"));
196 verticalLayoutSelect =
new QVBoxLayout();
197 verticalLayoutSelect->setObjectName(QStringLiteral(
"verticalLayoutSelect"));
198 labelSelectAction =
new QLabel(customizeWidget);
199 labelSelectAction->setObjectName(QStringLiteral(
"labelSelectAction"));
201 verticalLayoutSelect->addWidget(labelSelectAction);
203 horizontalLayoutSearch =
new QHBoxLayout();
204 horizontalLayoutSearch->setObjectName(QStringLiteral(
"horizontalLayoutSearch"));
205 comboBoxActionIndex =
new QComboBox(customizeWidget);
206 comboBoxActionIndex->setObjectName(QStringLiteral(
"comboBoxActionIndex"));
207 comboBoxActionIndex->setEditable(
false);
209 horizontalLayoutSearch->addWidget(comboBoxActionIndex);
211 lineEditSearchAction =
new QLineEdit(customizeWidget);
212 lineEditSearchAction->setObjectName(QStringLiteral(
"lineEditSearchAction"));
214 horizontalLayoutSearch->addWidget(lineEditSearchAction);
216 verticalLayoutSelect->addLayout(horizontalLayoutSearch);
218 listViewSelect =
new QListView(customizeWidget);
219 listViewSelect->setObjectName(QStringLiteral(
"listViewSelect"));
221 verticalLayoutSelect->addWidget(listViewSelect);
223 horizontalLayoutMain->addLayout(verticalLayoutSelect);
225 verticalLayoutMidButtons =
new QVBoxLayout();
226 verticalLayoutMidButtons->setObjectName(QStringLiteral(
"verticalLayoutMidButtons"));
227 verticalSpacerUp =
new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
229 verticalLayoutMidButtons->addItem(verticalSpacerUp);
231 pushButtonAdd =
new QPushButton(customizeWidget);
232 pushButtonAdd->setObjectName(QStringLiteral(
"pushButtonAdd"));
233 pushButtonAdd->setEnabled(
false);
235 verticalLayoutMidButtons->addWidget(pushButtonAdd);
237 pushButtonDelete =
new QPushButton(customizeWidget);
238 pushButtonDelete->setObjectName(QStringLiteral(
"pushButtonDelete"));
239 pushButtonDelete->setEnabled(
false);
241 verticalLayoutMidButtons->addWidget(pushButtonDelete);
243 verticalSpacerDown =
new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
245 verticalLayoutMidButtons->addItem(verticalSpacerDown);
247 labelProportion =
new QLabel(customizeWidget);
248 labelProportion->setObjectName(QStringLiteral(
"labelProportion"));
249 verticalLayoutMidButtons->addWidget(labelProportion);
251 comboBoxActionProportion =
new QComboBox(customizeWidget);
252 comboBoxActionProportion->setObjectName(QStringLiteral(
"comboBoxActionProportion"));
253 comboBoxActionProportion->setEditable(
false);
254 verticalLayoutMidButtons->addWidget(comboBoxActionProportion);
255 horizontalLayoutMain->addLayout(verticalLayoutMidButtons);
257 verticalLayoutResult =
new QVBoxLayout();
258 verticalLayoutResult->setObjectName(QStringLiteral(
"verticalLayoutResult"));
259 labelCustomize =
new QLabel(customizeWidget);
260 labelCustomize->setObjectName(QStringLiteral(
"labelCustomize"));
262 verticalLayoutResult->addWidget(labelCustomize);
264 horizontalLayoutPageSelect =
new QHBoxLayout();
265 horizontalLayoutPageSelect->setObjectName(QStringLiteral(
"horizontalLayoutPageSelect"));
266 radioButtonMainPage =
new QRadioButton(customizeWidget);
267 radioButtonMainPage->setObjectName(QStringLiteral(
"radioButtonMainPage"));
268 radioButtonMainPage->setChecked(
false);
270 horizontalLayoutPageSelect->addWidget(radioButtonMainPage);
272 radioButtonAllPage =
new QRadioButton(customizeWidget);
273 radioButtonAllPage->setObjectName(QStringLiteral(
"radioButtonAllPage"));
274 radioButtonAllPage->setChecked(
true);
276 horizontalLayoutPageSelect->addWidget(radioButtonAllPage);
278 radioButtonGroup =
new QButtonGroup(customizeWidget);
279 radioButtonGroup->addButton(radioButtonMainPage);
280 radioButtonGroup->addButton(radioButtonAllPage);
282 verticalLayoutResult->addLayout(horizontalLayoutPageSelect);
284 treeViewResult =
new QTreeView(customizeWidget);
285 treeViewResult->setObjectName(QStringLiteral(
"treeViewResult"));
286 treeViewResult->setHeaderHidden(
true);
287 treeViewResult->setSelectionMode(QAbstractItemView::SingleSelection);
288 treeViewResult->setAnimated(
true);
289 treeViewResult->setEditTriggers(QAbstractItemView::NoEditTriggers);
291 verticalLayoutResult->addWidget(treeViewResult);
293 horizontalLayoutActionOptBtns =
new QHBoxLayout();
294 horizontalLayoutActionOptBtns->setObjectName(QStringLiteral(
"horizontalLayoutActionOptBtns"));
295 pushButtonNewPage =
new QPushButton(customizeWidget);
296 pushButtonNewPage->setObjectName(QStringLiteral(
"pushButtonNewPage"));
298 horizontalLayoutActionOptBtns->addWidget(pushButtonNewPage);
300 pushButtonNewGroup =
new QPushButton(customizeWidget);
301 pushButtonNewGroup->setObjectName(QStringLiteral(
"pushButtonNewGroup"));
302 pushButtonNewGroup->setEnabled(
false);
304 horizontalLayoutActionOptBtns->addWidget(pushButtonNewGroup);
306 pushButtonRename =
new QPushButton(customizeWidget);
307 pushButtonRename->setObjectName(QStringLiteral(
"pushButtonRename"));
308 pushButtonRename->setEnabled(
false);
310 horizontalLayoutActionOptBtns->addWidget(pushButtonRename);
312 pushButtonReset =
new QPushButton(customizeWidget);
313 pushButtonReset->setObjectName(QStringLiteral(
"pushButtonReset"));
314 horizontalLayoutActionOptBtns->addWidget(pushButtonReset);
316 verticalLayoutResult->addLayout(horizontalLayoutActionOptBtns);
318 horizontalLayoutMain->addLayout(verticalLayoutResult);
320 verticalLayoutRightButtons =
new QVBoxLayout();
321 verticalLayoutRightButtons->setObjectName(QStringLiteral(
"verticalLayoutRightButtons"));
322 verticalSpacerUp2 =
new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
324 verticalLayoutRightButtons->addItem(verticalSpacerUp2);
326 toolButtonUp =
new QToolButton(customizeWidget);
327 toolButtonUp->setObjectName(QStringLiteral(
"pushButtonUp"));
328 toolButtonUp->setArrowType(Qt::UpArrow);
329 toolButtonUp->setAutoRaise(
true);
330 toolButtonUp->setEnabled(
false);
332 verticalLayoutRightButtons->addWidget(toolButtonUp);
334 toolButtonDown =
new QToolButton(customizeWidget);
335 toolButtonDown->setObjectName(QStringLiteral(
"pushButtonDown"));
336 toolButtonDown->setArrowType(Qt::DownArrow);
337 toolButtonDown->setAutoRaise(
true);
338 toolButtonDown->setEnabled(
false);
340 verticalLayoutRightButtons->addWidget(toolButtonDown);
342 verticalSpacerDown2 =
new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
344 verticalLayoutRightButtons->addItem(verticalSpacerDown2);
346 horizontalLayoutMain->addLayout(verticalLayoutRightButtons);
348 retranslateUi(customizeWidget);
351 void retranslateUi(QWidget *customizeWidget)
353 customizeWidget->setWindowTitle(
354 QApplication::translate(
"RibbonCustomizeWidget",
"Customize Widget",
Q_NULLPTR));
355 labelSelectAction->setText(
356 QApplication::translate(
"RibbonCustomizeWidget",
"Please Select",
Q_NULLPTR));
357 lineEditSearchAction->setInputMask(QString());
358 lineEditSearchAction->setText(QString());
359 lineEditSearchAction->setPlaceholderText(
360 QApplication::translate(
"RibbonCustomizeWidget",
"Find Command",
Q_NULLPTR));
361 pushButtonAdd->setText(QApplication::translate(
"RibbonCustomizeWidget",
"Add >>",
Q_NULLPTR));
362 pushButtonDelete->setText(
363 QApplication::translate(
"RibbonCustomizeWidget",
"<< Remove",
Q_NULLPTR));
364 labelCustomize->setText(
365 QApplication::translate(
"RibbonCustomizeWidget",
"Customize the Ribbon",
Q_NULLPTR));
366 radioButtonMainPage->setText(
367 QApplication::translate(
"RibbonCustomizeWidget",
"Main Page",
Q_NULLPTR));
368 radioButtonAllPage->setText(
369 QApplication::translate(
"RibbonCustomizeWidget",
"All Page",
Q_NULLPTR));
370 pushButtonNewPage->setText(
371 QApplication::translate(
"RibbonCustomizeWidget",
"New Page",
Q_NULLPTR));
372 pushButtonNewGroup->setText(
373 QApplication::translate(
"RibbonCustomizeWidget",
"New Group",
Q_NULLPTR));
374 pushButtonRename->setText(QApplication::translate(
"RibbonCustomizeWidget",
"Rename",
Q_NULLPTR));
375 pushButtonReset->setText(QApplication::translate(
"RibbonCustomizeWidget",
"reset",
Q_NULLPTR));
376 labelProportion->setText(
377 QApplication::translate(
"RibbonCustomizeWidget",
"proportion:",
Q_NULLPTR));
384class RibbonCustomizeWidgetPrivate
387 RibbonCustomizeWidgetPrivate(RibbonCustomizeWidget *p);
392 static QString makeRandomObjName(
const QString &pre);
394 int itemLevel(QStandardItem *item)
const;
396 bool isCustomizeItem(QStandardItem *item)
const;
399 RibbonPage *itemToPage(QStandardItem *item)
const;
402 RibbonGroup *itemToGroup(QStandardItem *item)
const;
405 QString itemObjectName(QStandardItem *item)
const;
408 bool isItemCanCustomize(QStandardItem *item)
const;
411 QAction *itemToAction(QStandardItem *item)
const;
413 RibbonCustomizeWidget *q;
414 RibbonCustomizeWidget::RibbonTreeShowType m_showType;
415 RibbonBar *m_ribbonBar;
416 RibbonActionsManager *m_actionMgr;
417 RibbonActionsManagerModel *m_acionModel;
418 QStandardItemModel *m_ribbonModel;
419 int m_customizePageCount;
420 int m_customizeGroupCount;
422 QList<RibbonCustomizeData> m_customizeDatas;
423 QList<RibbonCustomizeData> m_oldCustomizeDatas;
426RibbonCustomizeWidgetPrivate::RibbonCustomizeWidgetPrivate(RibbonCustomizeWidget *p)
428 , m_showType(RibbonCustomizeWidget::ShowAllPage)
431 , m_acionModel(new RibbonActionsManagerModel(p))
432 , m_ribbonModel(new QStandardItemModel(p))
433 , m_customizePageCount(0)
434 , m_customizeGroupCount(0)
438void RibbonCustomizeWidgetPrivate::updateModel()
443 m_ribbonModel->clear();
444 RibbonBar *ribbonbar = m_ribbonBar;
445 QList<RibbonPage *> pages = ribbonbar->pages();
447 for (RibbonPage *page : std::as_const(pages)) {
448 if ((m_showType == RibbonCustomizeWidget::ShowMainPage) && page->isPageContext()) {
452 if (page->objectName().isEmpty()) {
455 QStandardItem *pageSI =
new QStandardItem();
456 if (page->isPageContext()) {
457 pageSI->setText(QString(
"[%1]").arg(page->windowTitle()));
459 pageSI->setText(page->windowTitle());
461 if (page->isCanCustomize() && !page->isPageContext()) {
463 pageSI->setCheckable(
true);
464 pageSI->setCheckState(ribbonbar->isPageVisible(page) ? Qt::Checked : Qt::Unchecked);
465 pageSI->setData(
true, RibbonCustomizeWidget::CanCustomizeRole);
467 pageSI->setData(0, RibbonCustomizeWidget::LevelRole);
468 pageSI->setData(QVariant::fromValue<qintptr>(qintptr(page)), RibbonCustomizeWidget::PointerRole);
469 QList<RibbonGroup *> groups = page->groupList();
470 for (RibbonGroup *grp : std::as_const(groups)) {
471 if (grp->objectName().isEmpty()) {
474 QStandardItem *grpSI =
new QStandardItem(grp->windowTitle());
475 grpSI->setData(1, RibbonCustomizeWidget::LevelRole);
476 grpSI->setData(QVariant::fromValue<qintptr>(qintptr(grp)), RibbonCustomizeWidget::PointerRole);
477 if (grp->isCanCustomize()) {
478 grpSI->setData(
true, RibbonCustomizeWidget::CanCustomizeRole);
480 pageSI->appendRow(grpSI);
481 const QList<RibbonGroupItem *> &goupItems = grp->d_ptr->ribbonGroupItems();
482 for (RibbonGroupItem *grpItem : goupItems) {
483 if (grpItem->action->isSeparator()) {
486 QStandardItem *stdItem =
new QStandardItem();
487 if (grpItem->customWidget) {
489 if (grpItem->widget()->windowTitle().isEmpty() ) {
493 stdItem->setText(grpItem->widget()->windowTitle());
494 stdItem->setIcon(grpItem->widget()->windowIcon());
495 if (RibbonCustomizeData::isCanCustomize(grpItem->widget())) {
496 stdItem->setData(
true, RibbonCustomizeWidget::CanCustomizeRole);
500 stdItem->setText(grpItem->action->text());
501 stdItem->setIcon(grpItem->action->icon());
502 if (RibbonCustomizeData::isCanCustomize(grpItem->action)) {
503 stdItem->setData(
true, RibbonCustomizeWidget::CanCustomizeRole);
506 stdItem->setData(2, RibbonCustomizeWidget::LevelRole);
507 stdItem->setData(QVariant::fromValue<qintptr>(qintptr(grpItem)), RibbonCustomizeWidget::PointerRole);
508 grpSI->appendRow(stdItem);
511 m_ribbonModel->appendRow(pageSI);
520QString RibbonCustomizeWidgetPrivate::makeRandomObjName(
const QString &pre)
522 return QString(
"%1_%2").arg(pre).arg(QDateTime::currentMSecsSinceEpoch());
530int RibbonCustomizeWidgetPrivate::itemLevel(QStandardItem *item)
const
532 return item->data(RibbonCustomizeWidget::LevelRole).toInt();
540bool RibbonCustomizeWidgetPrivate::isCustomizeItem(QStandardItem *item)
const
545 return item->data(RibbonCustomizeWidget::CustomizeRole).isValid();
553RibbonPage *RibbonCustomizeWidgetPrivate::itemToPage(QStandardItem *item)
const
555 int level = item->data(RibbonCustomizeWidget::LevelRole).toInt();
560 qintptr p = item->data(RibbonCustomizeWidget::PointerRole).value<qintptr>();
562 return reinterpret_cast<RibbonPage *
>(p);
570RibbonGroup *RibbonCustomizeWidgetPrivate::itemToGroup(QStandardItem *item)
const
572 int level = item->data(RibbonCustomizeWidget::LevelRole).toInt();
577 qintptr p = item->data(RibbonCustomizeWidget::PointerRole).value<qintptr>();
579 return reinterpret_cast<RibbonGroup *
>(p);
587QString RibbonCustomizeWidgetPrivate::itemObjectName(QStandardItem *item)
const
591 if (isCustomizeItem(item)) {
593 objName = item->data(RibbonCustomizeWidget::CustomizeObjNameRole).toString();
596 int level = itemLevel(item);
598 RibbonPage *page = itemToPage(item);
600 objName = page->objectName();
602 }
else if (1 == level) {
603 RibbonGroup *group = itemToGroup(item);
605 objName = group->objectName();
617bool RibbonCustomizeWidgetPrivate::isItemCanCustomize(QStandardItem *item)
const
622 QVariant v = item->data(RibbonCustomizeWidget::CanCustomizeRole);
635QAction *RibbonCustomizeWidgetPrivate::itemToAction(QStandardItem *item)
const
637 if (2 != itemLevel(item)) {
643 if (item->data(RibbonCustomizeWidget::CustomizeRole).toBool()) {
644 act =
reinterpret_cast<QAction *
>(item->data(RibbonCustomizeWidget::PointerRole).value<qintptr>());
646 RibbonGroupItem *grpItem =
647 reinterpret_cast<RibbonGroupItem *
>(item->data(RibbonCustomizeWidget::PointerRole).value<qintptr>());
649 act = grpItem->action;
661RibbonCustomizeWidget::RibbonCustomizeWidget(
RibbonBar *ribbonBar, QWidget *parent, Qt::WindowFlags f)
663 , ui(new RibbonCustomizeWidgetUi)
664 , d(new RibbonCustomizeWidgetPrivate(this))
666 d->m_ribbonBar = ribbonBar;
669 ui->listViewSelect->setModel(d->m_acionModel);
670 ui->treeViewResult->setModel(d->m_ribbonModel);
681void RibbonCustomizeWidget::initConnection()
683#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
684 connect(ui->comboBoxActionIndex, QOverload<int>::of(&QComboBox::currentIndexChanged),
this,
686 connect(ui->radioButtonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked),
this,
689 connect(ui->comboBoxActionIndex,
static_cast<void (QComboBox::*)(
int)
>(&QComboBox::currentIndexChanged),
this,
691 connect(ui->radioButtonGroup,
static_cast<void (QButtonGroup::*)(QAbstractButton *)
>(&QButtonGroup::buttonClicked),
704 connect(ui->lineEditSearchAction, &QLineEdit::textEdited,
this,
718 if (d->m_actionMgr) {
719 d->m_acionModel->uninstallActionsManager();
721 d->m_actionMgr = mgr;
722 d->m_acionModel->setupActionsManager(mgr);
724 ui->comboBoxActionIndex->clear();
726 for (
int tag : tags) {
727 ui->comboBoxActionIndex->addItem(mgr->
tagName(tag), tag);
733 return (d->m_customizeDatas.size() > 0);
742 return d->m_ribbonModel;
751 if (d->m_ribbonBar) {
752 ui->comboBoxActionProportion->clear();
753 if (d->m_ribbonBar->isTwoRowStyle()) {
769 d->m_showType = type;
834 QList<RibbonCustomizeData> res;
836 res = d->m_oldCustomizeDatas + d->m_customizeDatas;
849 if (!f.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) {
853 QXmlStreamWriter xml(&f);
854 xml.setAutoFormatting(
true);
855 xml.setAutoFormattingIndent(2);
856#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
857 xml.setCodec(
"utf-8");
859 xml.writeStartDocument();
860 bool isOK =
toXml(&xml);
861 xml.writeEndDocument();
877 d->m_oldCustomizeDatas = cds;
893 if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
897 QXmlStreamReader xml(&f);
938 d->m_customizeDatas.clear();
965 QItemSelectionModel *m = ui->listViewSelect->selectionModel();
967 if ((
Q_NULLPTR == m) || !m->hasSelection()) {
970 QModelIndex i = m->currentIndex();
972 return d->m_acionModel->indexToAction(i);
982 return d->itemToAction(item);
991 QItemSelectionModel *m = ui->treeViewResult->selectionModel();
993 if ((
Q_NULLPTR == m) || !m->hasSelection()) {
996 QModelIndex i = m->currentIndex();
998 return d->m_ribbonModel->itemFromIndex(i);
1022 return d->itemLevel(item);
1032 QItemSelectionModel *m = ui->treeViewResult->selectionModel();
1037 m->clearSelection();
1042 m->setCurrentIndex(item->index(), QItemSelectionModel::Select);
1044 if (ensureVisible) {
1045 ui->treeViewResult->scrollTo(item->index());
1056 return d->isItemCanCustomize(item);
1071 return d->isCustomizeItem(item);
1081 if (item->parent()) {
1082 item->parent()->removeRow(item->row());
1084 d->m_ribbonModel->removeRow(item->row());
1090 int tag = ui->comboBoxActionIndex->itemData(index).toInt();
1092 d->m_acionModel->setFilter(tag);
1102 int row = d->m_ribbonModel->rowCount();
1103 QItemSelectionModel *m = ui->treeViewResult->selectionModel();
1105 if (m && m->hasSelection()) {
1106 QModelIndex i = m->currentIndex();
1107 while (i.parent().isValid()) {
1113 QStandardItem *ni =
new QStandardItem(tr(
"new page[customize]%1").arg(++(d->m_customizePageCount)));
1116 d->m_ribbonModel->insertRow(row, ni);
1121 ni->text(), ni->row(), RibbonCustomizeWidgetPrivate::makeRandomObjName(
"page"));
1126 d->m_customizeDatas.append(data);
1141 QStandardItem *ni =
new QStandardItem(tr(
"new group[customize]%1").arg(++(d->m_customizeGroupCount)));
1147 item->appendRow(ni);
1148 }
else if (1 == level) {
1150 QStandardItem *pageItem = item->parent();
1154 pageItem->insertRow(item->row() + 1, ni);
1162 QStandardItem *pageItem = ni->parent();
1163 QString pageObjName =
"";
1165 pageObjName = d->itemObjectName(pageItem);
1167 ni->text(), ni->row(), pageObjName, RibbonCustomizeWidgetPrivate::makeRandomObjName(
"group"));
1176 d->m_customizeDatas.append(data);
1193 text = QInputDialog::getText(
this, tr(
"rename"), tr(
"name:"), QLineEdit::Normal, item->text(), &ok);
1195 if (!ok ||
text.isEmpty()) {
1202 QString pageObjName = d->itemObjectName(item);
1204 d->m_customizeDatas.append(data);
1206 qDebug() << QString(
"rename page %1 from %2 to %3").arg(pageObjName, item->text(),
text);
1208 }
else if (1 == level) {
1209 QString pageObjName = d->itemObjectName(item->parent());
1210 QString groupObjName = d->itemObjectName(item);
1212 d->m_customizeDatas.append(data);
1214 qDebug() << QString(
"rename group %1 from %2 to %3").arg(groupObjName, item->text(),
text);
1220 item->setText(
text);
1236 }
else if (2 == level) {
1238 item = item->parent();
1240 QString groupObjName = d->itemObjectName(item);
1241 QString pageObjName = d->itemObjectName(item->parent());
1242 QString key = d->m_actionMgr->key(act);
1247 d->m_customizeDatas.append(data);
1249 QStandardItem *actItem =
new QStandardItem(act->icon(), act->text());
1256 item->appendRow(actItem);
1274 d->m_customizeDatas.append(data);
1275 }
else if (1 == level) {
1277 QString pageObjName = d->itemObjectName(item->parent());
1278 QString groupObjName = d->itemObjectName(item);
1280 d->m_customizeDatas.append(data);
1281 }
else if (2 == level) {
1283 QString pageObjName = d->itemObjectName(item->parent()->parent());
1284 QString groupObjName = d->itemObjectName(item->parent());
1286 QString key = d->m_actionMgr->key(act);
1287 if (key.isEmpty() || pageObjName.isEmpty() || groupObjName.isEmpty()) {
1293 d->m_customizeDatas.append(data);
1325 ui->pushButtonNewGroup->setEnabled(level != 2);
1326 ui->toolButtonUp->setEnabled(item->index().row() != 0);
1328 QStandardItem *parItem = item->parent();
1330 ui->toolButtonDown->setEnabled(item->index().row() + 1 < parItem->rowCount());
1332 ui->toolButtonDown->setEnabled(item->index().row() + 1 < ui->treeViewResult->model()->rowCount());
1340 if ((
Q_NULLPTR == item) || (0 == item->row())) {
1348 d->m_customizeDatas.append(data);
1349 int r = item->row();
1350 item = d->m_ribbonModel->takeItem(r);
1351 d->m_ribbonModel->removeRow(r);
1352 d->m_ribbonModel->insertRow(r - 1, item);
1353 }
else if (1 == level) {
1354 QStandardItem *paritem = item->parent();
1356 d->itemObjectName(item), -1);
1357 d->m_customizeDatas.append(data);
1358 int r = item->row();
1359 item = paritem->takeChild(r);
1360 paritem->removeRow(r);
1361 paritem->insertRow(r - 1, item);
1362 }
else if (2 == level) {
1363 QStandardItem *groupItem = item->parent();
1364 QStandardItem *pageItem = groupItem->parent();
1369 QString key = d->m_actionMgr->key(act);
1371 d->itemObjectName(pageItem), d->itemObjectName(groupItem), key, d->m_actionMgr, -1);
1372 d->m_customizeDatas.append(data);
1373 int r = item->row();
1374 item = groupItem->takeChild(r);
1375 groupItem->removeRow(r);
1376 groupItem->insertRow(r - 1, item);
1389 if (item->parent()) {
1390 count = item->parent()->rowCount();
1392 count = d->m_ribbonModel->rowCount();
1394 if ((
Q_NULLPTR == item) || ((count - 1) == item->row())) {
1402 d->m_customizeDatas.append(data);
1403 int r = item->row();
1404 item = d->m_ribbonModel->takeItem(item->row());
1405 d->m_ribbonModel->removeRow(r);
1406 d->m_ribbonModel->insertRow(r + 1, item);
1407 }
else if (1 == level) {
1408 QStandardItem *paritem = item->parent();
1410 d->itemObjectName(item), 1);
1411 d->m_customizeDatas.append(data);
1412 int r = item->row();
1413 item = paritem->takeChild(r);
1414 paritem->removeRow(r);
1415 paritem->insertRow(r + 1, item);
1416 }
else if (2 == level) {
1417 QStandardItem *groupItem = item->parent();
1418 QStandardItem *pageItem = groupItem->parent();
1423 QString key = d->m_actionMgr->key(act);
1425 d->itemObjectName(pageItem), d->itemObjectName(groupItem), key, d->m_actionMgr, -1);
1426 d->m_customizeDatas.append(data);
1427 int r = item->row();
1428 item = groupItem->takeChild(r);
1429 groupItem->removeRow(r);
1430 groupItem->insertRow(r + 1, item);
1442 if (item->isCheckable()) {
1443 QString objname = d->itemObjectName(item);
1446 d->m_customizeDatas.append(data);
1453 d->m_acionModel->search(
text);
1458 int btn = QMessageBox::warning(
this, tr(
"Warning"), tr(
"Are you sure reset all customize setting?"),
1459 QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
1461 if (btn == QMessageBox::Yes) {
QString tagName(int tag) const
获取tag对应的中文名字
QList< int > actionTags() const
获取所有的标签
RibbonBar 继承 QMenuBar, 在 RibbonWindow 中直接替换了原来的 QMenuBar
static RibbonCustomizeData makeChangeGroupOrderCustomizeData(const QString &pageObjName, const QString &groupObjName, int moveIndex)
对应ChangeGroupOrderActionType
void setActionsManager(RibbonActionsManager *mgr)
QString pageObjNameValue
记录pageObjName,用于定位Page
static QList< RibbonCustomizeData > simplify(const QList< RibbonCustomizeData > &csd)
对QList<RibbonCustomizeData>进行简化操作
static RibbonCustomizeData makeRemoveGroupCustomizeData(const QString &pageObjName, const QString &groupObjName)
static RibbonCustomizeData makeAddPageCustomizeData(const QString &title, int index, const QString &objName)
static RibbonCustomizeData makeAddGroupCustomizeData(const QString &title, int index, const QString &pageObjName, const QString &objName)
创建一个AddGroupActionType的RibbonCustomizeData
static RibbonCustomizeData makeVisiblePageCustomizeData(const QString &pageObjName, bool isShow)
RibbonCustomizeData::makeVisiblePageCustomizeData
static RibbonCustomizeData makeRemovePageCustomizeData(const QString &pageObjName)
QString keyValue
记录标题、索引等参数
static RibbonCustomizeData makeRenamePageCustomizeData(const QString &newName, const QString &pageObjName)
static RibbonCustomizeData makeRenameGroupCustomizeData(const QString &newName, const QString &pageObjName, const QString &groupObjName)
static RibbonCustomizeData makeRemoveActionCustomizeData(const QString &pageObjName, const QString &groupObjName, const QString &key, RibbonActionsManager *mgr)
对应RemoveActionActionType
static RibbonCustomizeData makeChangeActionOrderCustomizeData(const QString &pageObjName, const QString &groupObjName, const QString &key, RibbonActionsManager *mgr, int moveIndex)
对应ChangeActionOrderActionType
QString groupObjNameValue
记录groupObjName,ribbon的Customize索引大部分基于objname
static RibbonCustomizeData makeChangePageOrderCustomizeData(const QString &pageObjName, int moveIndex)
对应ChangePageOrderActionType
static RibbonCustomizeData makeAddActionCustomizeData(const QString &key, RibbonActionsManager *mgr, RibbonGroup::RowProportion rp, const QString &pageObjName, const QString &groupObjName)
添加action
RibbonGroup::RowProportion actionRowProportionValue
void setActionType(ActionType a)
设置CustomizeData的action type
@ Medium
中占比,在 RibbonGroup::groupLayoutMode 为 RibbonGroup::ThreeRowMode 时才会起作用, 且要同一列里两个都是 Medium 时,会在三行中占据两行
@ Small
小占比,占RibbonGroup的一行,Medium在不满足条件时也会变为Small,但不会变为Large
@ Large
大占比,一个widget的高度会充满整个group
int QxRibbonCustomizeDataApply(QList< RibbonCustomizeData > &cds, RibbonBar *bar)
应用QList<RibbonCustomizeData>
bool QxRibbonCustomizeDataSetToXml(QXmlStreamWriter *xml, const QList< RibbonCustomizeData > &cds, bool force=false)
QList< RibbonCustomizeData > QxRibbonCustomizeDataGetFromXml(QXmlStreamReader *xml, RibbonActionsManager *mgr)
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_RIBBON_END_NAMESPACE
#define QX_RIBBON_BEGIN_NAMESPACE