LCOV - code coverage report
Current view: top level - muse/framework/uicomponents/qml/Muse/UiComponents - buttonboxmodel.h Coverage Total Hit
Test: filtered_coverage.info Lines: 0.0 % 6 0
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #pragma once
      24              : 
      25              : #include <QObject>
      26              : #include <QQuickItem>
      27              : #include <qqmlintegration.h>
      28              : 
      29              : #include "translation.h"
      30              : #include "qmllistproperty.h"
      31              : 
      32              : namespace muse::uicomponents {
      33              : class ButtonBoxModel : public QObject
      34              : {
      35              :     Q_OBJECT
      36              :     QML_ELEMENT;
      37              : 
      38              :     Q_PROPERTY(ButtonLayout buttonLayout READ buttonLayout WRITE setButtonLayout NOTIFY buttonLayoutChanged)
      39              : 
      40              :     Q_PROPERTY(QQmlListProperty<QQuickItem> buttonsItems READ buttonsItems NOTIFY buttonsItemsChanged)
      41              : 
      42              : public:
      43              :     explicit ButtonBoxModel(QObject* parent = nullptr);
      44              : 
      45              :     enum ButtonType {
      46              :         NoButton,
      47              :         Ok,
      48              :         Continue,
      49              :         RestoreDefaults,
      50              :         Reset,
      51              :         Apply,
      52              :         Help,
      53              :         Discard,
      54              :         Cancel,
      55              :         Close,
      56              :         Ignore,
      57              :         Retry,
      58              :         Abort,
      59              :         NoToAll,
      60              :         No,
      61              :         YesToAll,
      62              :         Yes,
      63              :         Open,
      64              :         DontSave,
      65              :         SaveAll,
      66              :         Save,
      67              :         Next,
      68              :         Back,
      69              :         Select,
      70              :         Clear,
      71              :         Done,
      72              : 
      73              :         CustomButton,
      74              : 
      75              :         FirstButton       = Ok,
      76              :         LastButton        = CustomButton
      77              :     };
      78            0 :     Q_ENUM(ButtonType)
      79              : 
      80              :     enum ButtonRole { // Keep updated with buttonRoleLayouts
      81              :         AcceptRole,
      82              :         RejectRole,
      83              :         DestructiveRole,
      84              :         ResetRole,
      85              :         ApplyRole,
      86              :         RetryRole,
      87              :         HelpRole,
      88              :         ContinueRole,
      89              :         BackRole,
      90              :         CustomRole
      91              :     };
      92            0 :     Q_ENUM(ButtonRole)
      93              : 
      94              :     enum ButtonLayout {
      95              :         UnknownLayout = -1,
      96              :         WinLayout,
      97              :         MacLayout,
      98              :         LinuxLayout
      99              :     };
     100            0 :     Q_ENUM(ButtonLayout)
     101              : 
     102              :     Q_INVOKABLE QList<int> load();
     103              :     Q_INVOKABLE void setButtons(const QVariantList& buttons);
     104              : 
     105              :     ButtonLayout buttonLayout() const;
     106              :     void setButtonLayout(ButtonLayout newButtonLayout);
     107              : 
     108              :     QQmlListProperty<QQuickItem> buttonsItems();
     109              : 
     110              : signals:
     111              :     void buttonLayoutChanged();
     112              :     void buttonsItemsChanged();
     113              : 
     114              :     void addButton(QString text, int buttonType, ButtonRole buttonRole, bool isAccent, bool isLeftSide);
     115              :     void reloadRequested();
     116              : 
     117              : private:
     118              :     const std::vector<ButtonRole>& chooseButtonLayoutType();
     119              : 
     120              :     struct LayoutButton {
     121              :         QString text;
     122              :         int buttonType = int(ButtonType::NoButton);
     123              :         ButtonRole buttonRole = ButtonRole::CustomRole;
     124              :         bool isAccent = false;
     125              :         bool isLeftSide = false;
     126              : 
     127            0 :         LayoutButton(QString _text, int _buttonType,  ButtonRole _buttonRole, bool _isAccent, bool _isLeftSide = false)
     128            0 :             : text(_text), buttonType(_buttonType),  buttonRole(_buttonRole), isAccent(_isAccent), isLeftSide(_isLeftSide)
     129              :         {
     130            0 :         }
     131              :     };
     132              : 
     133              :     LayoutButton* layoutButton(const QQuickItem* item) const;
     134              : 
     135              :     QHash<ButtonType, LayoutButton*> m_layoutButtons {
     136              :         { NoButton,        new LayoutButton(muse::qtrc("uicomponents", "No button"),        NoButton,        RejectRole,      true) },
     137              :         { Ok,              new LayoutButton(muse::qtrc("uicomponents", "OK"),               Ok,              AcceptRole,      true) },
     138              :         { Save,            new LayoutButton(muse::qtrc("uicomponents", "Save"),             Save,            ApplyRole,       true) },
     139              :         { SaveAll,         new LayoutButton(muse::qtrc("uicomponents", "Save all"),         SaveAll,         ApplyRole,       false) },
     140              :         { DontSave,        new LayoutButton(muse::qtrc("uicomponents", "Don’t save"),       DontSave,        DestructiveRole, false) },
     141              :         { Open,            new LayoutButton(muse::qtrc("uicomponents", "Open"),             Open,            AcceptRole,      true) },
     142              :         { Yes,             new LayoutButton(muse::qtrc("uicomponents", "Yes"),              Yes,             AcceptRole,      true) },
     143              :         { YesToAll,        new LayoutButton(muse::qtrc("uicomponents", "Yes to all"),       YesToAll,        AcceptRole,      false) },
     144              :         { No,              new LayoutButton(muse::qtrc("uicomponents", "No"),               No,              RejectRole,      false) },
     145              :         { NoToAll,         new LayoutButton(muse::qtrc("uicomponents", "No to all"),        NoToAll,         RejectRole,      false) },
     146              :         { Abort,           new LayoutButton(muse::qtrc("uicomponents", "Abort"),            Abort,           RejectRole,      false) },
     147              :         { Retry,           new LayoutButton(muse::qtrc("uicomponents", "Retry"),            Retry,           RetryRole,       false) },
     148              :         { Ignore,          new LayoutButton(muse::qtrc("uicomponents", "Ignore"),           Ignore,          DestructiveRole, false) },
     149              :         { Close,           new LayoutButton(muse::qtrc("uicomponents", "Close"),            Close,           RejectRole,      false) },
     150              :         { Cancel,          new LayoutButton(muse::qtrc("uicomponents", "Cancel"),           Cancel,          RejectRole,      false) },
     151              :         { Discard,         new LayoutButton(muse::qtrc("uicomponents", "Discard"),          Discard,         DestructiveRole, false) },
     152              :         { Help,            new LayoutButton(muse::qtrc("uicomponents", "Help"),             Help,            HelpRole,        false) },
     153              :         { Apply,           new LayoutButton(muse::qtrc("uicomponents", "Apply"),            Apply,           ApplyRole,       false) },
     154              :         { Reset,           new LayoutButton(muse::qtrc("uicomponents", "Reset"),            Reset,           ResetRole,       false) },
     155              :         { RestoreDefaults, new LayoutButton(muse::qtrc("uicomponents", "Restore defaults"), RestoreDefaults, ResetRole,       false) },
     156              :         { Continue,        new LayoutButton(muse::qtrc("uicomponents", "Continue"),         Continue,        ContinueRole,    true) },
     157              :         { Next,            new LayoutButton(muse::qtrc("uicomponents", "Next"),             Next,            ContinueRole,    false) },
     158              :         { Back,            new LayoutButton(muse::qtrc("uicomponents", "Back"),             Back,            BackRole,        false) },
     159              :         { Select,          new LayoutButton(muse::qtrc("uicomponents", "Select"),           Select,          AcceptRole,      true) },
     160              :         { Clear,           new LayoutButton(muse::qtrc("uicomponents", "Clear"),            Clear,           DestructiveRole, false) },
     161              :         { Done,            new LayoutButton(muse::qtrc("uicomponents", "Done"),             Done,            AcceptRole,      true) }
     162              :     };
     163              : 
     164              :     std::vector<std::vector<ButtonRole> > buttonRoleLayouts = {
     165              :         // WinLayout
     166              :         std::vector <ButtonRole> { CustomRole, ResetRole, RetryRole, BackRole, AcceptRole, ApplyRole, ContinueRole, DestructiveRole,
     167              :                                    RejectRole, HelpRole },
     168              : 
     169              :         // MacLayout
     170              :         std::vector <ButtonRole> { CustomRole, HelpRole, RetryRole, DestructiveRole, RejectRole, ResetRole, BackRole, AcceptRole,
     171              :                                    ApplyRole, ContinueRole },
     172              : 
     173              :         // LinuxLayout
     174              :         std::vector <ButtonRole> { CustomRole, HelpRole, RetryRole, DestructiveRole, RejectRole, ResetRole, BackRole, AcceptRole,
     175              :                                    ApplyRole, ContinueRole }
     176              :     };
     177              : 
     178              :     ButtonLayout m_buttonLayout = ButtonLayout::UnknownLayout;
     179              :     QmlListProperty<QQuickItem> m_buttonsItems;
     180              : };
     181              : }
        

Generated by: LCOV version 2.0-1