1 #include "searchComboBox.h"
2 #include "musescore.h"
3 #include "scoreview.h"
4 #include "libmscore/score.h"
5 #include "scoreaccessibility.h"
6
7 namespace Ms {
8
SearchComboBox(QWidget * p)9 SearchComboBox::SearchComboBox(QWidget* p) : QComboBox(p)
10 {
11 setAccessibleName(tr("Search Box"));
12 setAccessibleDescription(tr("Type to search. Press Enter to return to score."));
13 setEditable(true);
14 setInsertPolicy(QComboBox::InsertAtTop);
15 _found = false;
16 _searchType = SearchType::NO_SEARCH;
17 connect(this, SIGNAL(editTextChanged(QString)), this, SLOT(searchTextChanged(QString)));
18 }
19
searchInit()20 void SearchComboBox::searchInit()
21 {
22 _searchType = SearchType::NO_SEARCH;
23 _found = false;
24 }
25
setSearchType(SearchType s)26 void SearchComboBox::setSearchType(SearchType s)
27 {
28 _searchType = s;
29 }
30
searchTextChanged(const QString & s)31 void SearchComboBox::searchTextChanged(const QString& s)
32 {
33 searchInit();
34 if (s.isEmpty())
35 return;
36 ScoreView* cv = mscore->currentScoreView();
37 if (cv == 0)
38 return;
39
40 bool ok;
41
42 int n = s.toInt(&ok);
43 if (ok && n > 0) {
44 setSearchType(SearchType::SEARCH_MEASURE);
45 _found = cv->searchMeasure(n);
46 }
47 else {
48 if (s.size() >= 2 && s[0].toLower() == 'p' && s[1].isNumber()) {
49 n = s.midRef(1).toInt(&ok);
50 if (ok) {
51 setSearchType(SearchType::SEARCH_PAGE);
52 _found = cv->searchPage(n);
53 }
54 }
55
56 if (searchType() != SearchType::SEARCH_PAGE) {
57 setSearchType(SearchType::SEARCH_REHEARSAL_MARK);
58 if (s.size() >= 2 && s[0].toLower() == 'r' && s[1].isNumber())
59 _found = cv->searchRehearsalMark(s.mid(1));
60 else
61 _found = cv->searchRehearsalMark(s);
62 }
63 }
64 //updating status bar
65 ScoreAccessibility::instance()->updateAccessibilityInfo();
66 emit currentSearchFinished();
67 }
68
AccessibleSearchBox(SearchComboBox * comboBox)69 AccessibleSearchBox::AccessibleSearchBox(SearchComboBox *comboBox) : QAccessibleWidget(comboBox)
70 {
71 searchBox = comboBox;
72 }
73
SearchBoxFactory(const QString & classname,QObject * object)74 QAccessibleInterface* AccessibleSearchBox::SearchBoxFactory(const QString &classname, QObject *object)
75 {
76 QAccessibleInterface *iface = 0;
77 if (classname == QLatin1String("Ms::SearchComboBox") && object && object->isWidgetType()){
78 qDebug("Creating interface for SearchComboBox object");
79 SearchComboBox* s = static_cast<SearchComboBox*>(object);
80 AccessibleSearchBox* a = new AccessibleSearchBox(s);
81 QObject::connect(s, SIGNAL(currentSearchFinished()), a, SLOT(searchFinished()));
82 iface = static_cast<QAccessibleInterface*>(a);
83 }
84
85 return iface;
86 }
87
text(QAccessible::Text t) const88 QString AccessibleSearchBox::text(QAccessible::Text t) const
89 {
90 QString type;
91 QString value = searchBox->currentText();
92 if (t == QAccessible::Value) {
93 switch (searchBox->searchType()) {
94 case SearchComboBox::SearchType::NO_SEARCH:
95 return QString();
96 case SearchComboBox::SearchType::SEARCH_MEASURE:
97 type = tr("Measure");
98 break;
99 case SearchComboBox::SearchType::SEARCH_PAGE:
100 type = tr("Page");
101 value = value.mid(1);
102 break;
103 case SearchComboBox::SearchType::SEARCH_REHEARSAL_MARK:
104 type = tr("Rehearsal Mark");
105 break;
106 }
107 QString found = searchBox->found() ? "" : tr("Not found") + " ";
108 return QString("%1 %2 %3%4").arg(type, value, found, mscore->currentScoreView()->score()->accessibleInfo());
109 }
110
111 return QAccessibleWidget::text(t);
112 }
113
searchFinished()114 void AccessibleSearchBox::searchFinished()
115 {
116 QAccessibleValueChangeEvent ev(searchBox, text(QAccessible::Value));
117 QAccessible::updateAccessibility(&ev);
118 }
119
120 }
121