Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-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 : #ifndef MU_ENGRAVING_ACCESSIBLEITEM_H
23 : #define MU_ENGRAVING_ACCESSIBLEITEM_H
24 :
25 : #include "global/allocator.h"
26 :
27 : #include "accessibility/iaccessible.h"
28 : #include "modularity/ioc.h"
29 : #include "accessibility/iaccessibilitycontroller.h"
30 :
31 : #include "../dom/engravingitem.h"
32 : #include "../dom/textbase.h"
33 :
34 : namespace mu::engraving {
35 : class AccessibleRoot;
36 : class AccessibleItem : public muse::accessibility::IAccessible, public muse::Contextable,
37 : public std::enable_shared_from_this<AccessibleItem>
38 : {
39 0 : OBJECT_ALLOCATOR(engraving, AccessibleItem)
40 :
41 : public:
42 : muse::ContextInject<muse::accessibility::IAccessibilityController> accessibilityController = { this };
43 :
44 : public:
45 : AccessibleItem(EngravingItem* e, Role role = Role::ElementOnScore);
46 : virtual ~AccessibleItem();
47 : virtual AccessibleItem* clone(EngravingItem* e) const;
48 :
49 : virtual void setup();
50 :
51 : AccessibleRoot* accessibleRoot() const;
52 :
53 : const EngravingItem* element() const;
54 :
55 : bool registered() const;
56 :
57 : void notifyAboutFocus(bool focused);
58 :
59 : // IAccessible
60 : const IAccessible* accessibleParent() const override;
61 : size_t accessibleChildCount() const override;
62 : IAccessible* accessibleChild(size_t i) const override;
63 : QWindow* accessibleWindow() const override;
64 : muse::modularity::ContextPtr iocContext() const override;
65 :
66 : Role accessibleRole() const override;
67 : QString accessibleName() const override;
68 : QString accessibleDescription() const override;
69 : bool accessibleState(State st) const override;
70 : QRect accessibleRect() const override;
71 : bool accessibleIgnored() const override;
72 :
73 : QVariant accessibleValue() const override;
74 : QVariant accessibleMaximumValue() const override;
75 : QVariant accessibleMinimumValue() const override;
76 : QVariant accessibleValueStepSize() const override;
77 :
78 : void accessibleSelection(int selectionIndex, int* startOffset, int* endOffset) const override;
79 : int accessibleSelectionCount() const override;
80 :
81 : int accessibleCursorPosition() const override;
82 :
83 : QString accessibleText(int startOffset, int endOffset) const override;
84 : QString accessibleTextBeforeOffset(int offset, TextBoundaryType boundaryType, int* startOffset, int* endOffset) const override;
85 : QString accessibleTextAfterOffset(int offset, TextBoundaryType boundaryType, int* startOffset, int* endOffset) const override;
86 : QString accessibleTextAtOffset(int offset, TextBoundaryType boundaryType, int* startOffset, int* endOffset) const override;
87 : int accessibleCharacterCount() const override;
88 :
89 : // ListView item Interface
90 : int accessibleRowIndex() const override;
91 :
92 : muse::async::Channel<Property, muse::Val> accessiblePropertyChanged() const override;
93 : muse::async::Channel<State, bool> accessibleStateChanged() const override;
94 :
95 : void setState(State state, bool arg) override;
96 : // ---
97 :
98 : static bool enabled;
99 :
100 : private:
101 : TextCursor* textCursor() const;
102 :
103 : protected:
104 :
105 : EngravingItem* m_element = nullptr;
106 : bool m_registred = false;
107 :
108 : Role m_role = Role::ElementOnScore;
109 :
110 : muse::async::Channel<IAccessible::Property, muse::Val> m_accessiblePropertyChanged;
111 : muse::async::Channel<IAccessible::State, bool> m_accessibleStateChanged;
112 : };
113 : using AccessibleItemPtr = std::shared_ptr<AccessibleItem>;
114 : using AccessibleItemWeakPtr = std::weak_ptr<AccessibleItem>;
115 : }
116 :
117 : #endif // MU_ENGRAVING_ACCESSIBLEITEM_H
|