Merge pull request #5633 from Marr11317/metaedit
Add support for deleting (custom) metatags.
This commit is contained in:
commit
ef8b8a05ff
7 changed files with 450 additions and 142 deletions
32
mscore/data/icons/bin.svg
Normal file
32
mscore/data/icons/bin.svg
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<!-- Généré par Microsoft Visio 11.0, SVG Export, v1.0 bin.svg Capa_1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.5in" height="11in" viewBox="0 0 612 792"
|
||||
xml:space="preserve" color-interpolation-filters="sRGB" class="st2">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false"/>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:#3b3f45;stroke:none;stroke-linecap:butt;stroke-width:1.59375}
|
||||
.st2 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<title>Capa_1</title>
|
||||
<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="19" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
|
||||
<g id="group1-1" transform="translate(68.0005,-90)" v:mID="1" v:groupContext="group">
|
||||
<title>Feuille.1</title>
|
||||
<g id="shape2-2" v:mID="2" v:groupContext="shape" transform="translate(33.9995,-3.06954E-012)">
|
||||
<title>Feuille.2</title>
|
||||
<path d="M0 724 C-0 761.57 30.43 792 68 792 L340 792 C377.57 792 408 761.57 408 724 L408 316 L0 316 L0 724 Z"
|
||||
class="st1"/>
|
||||
</g>
|
||||
<g id="shape3-4" v:mID="3" v:groupContext="shape" transform="translate(0,-510)">
|
||||
<title>Feuille.3</title>
|
||||
<path d="M357 724 L323 690 L153 690 L119 724 L0 724 L0 792 L476 792 L476 724 L357 724 Z" class="st1"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -159,6 +159,7 @@ static const char* iconNames[] = {
|
|||
"arrow_down.svg",
|
||||
"mail.svg",
|
||||
"bug.svg",
|
||||
"bin.svg",
|
||||
"note_timewise.svg",
|
||||
"arrowsMoveToTop.svg"
|
||||
};
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace Ms {
|
|||
|
||||
extern void genIcons();
|
||||
|
||||
enum class Icons : signed char { Invalid_ICON = -1,
|
||||
enum class Icons : signed int { Invalid_ICON = -1,
|
||||
longaUp_ICON, brevis_ICON, note_ICON, note2_ICON, note4_ICON, note8_ICON, note16_ICON,
|
||||
note32_ICON, note64_ICON, note128_ICON,
|
||||
natural_ICON, sharp_ICON, sharpsharp_ICON, flat_ICON, flatflat_ICON,
|
||||
|
@ -52,13 +52,12 @@ enum class Icons : signed char { Invalid_ICON = -1,
|
|||
vframe_ICON, hframe_ICON, tframe_ICON, fframe_ICON, measure_ICON, checkmark_ICON,
|
||||
mscz_ICON,
|
||||
helpContents_ICON, goHome_ICON, goPrevious_ICON, goNext_ICON, viewRefresh_ICON,
|
||||
parentheses_ICON,
|
||||
brackets_ICON,
|
||||
parentheses_ICON, brackets_ICON,
|
||||
timesig_allabreve_ICON, timesig_common_ICON, timesig_prolatio01_ICON, timesig_prolatio02_ICON,
|
||||
timesig_prolatio03_ICON, timesig_prolatio04_ICON, timesig_prolatio05_ICON, timesig_prolatio07_ICON,
|
||||
timesig_prolatio08_ICON, timesig_prolatio10_ICON, timesig_prolatio11_ICON, edit_ICON, reset_ICON, close_ICON,
|
||||
arrowUp_ICON, arrowDown_ICON,
|
||||
mail_ICON, bug_ICON,
|
||||
mail_ICON, bug_ICON, bin_ICON,
|
||||
noteTimewise_ICON,
|
||||
arrowsMoveToTop_ICON,
|
||||
voice1_ICON, voice2_ICON, voice3_ICON, voice4_ICON,
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#include "libmscore/score.h"
|
||||
#include "libmscore/undo.h"
|
||||
#include "musescore.h"
|
||||
#include "preferences.h"
|
||||
#include "icons.h"
|
||||
|
||||
namespace Ms {
|
||||
|
||||
|
@ -28,18 +30,21 @@ namespace Ms {
|
|||
// MetaEditDialog
|
||||
//---------------------------------------------------------
|
||||
|
||||
MetaEditDialog::MetaEditDialog(Score* s, QWidget* parent)
|
||||
: QDialog(parent)
|
||||
MetaEditDialog::MetaEditDialog(Score* score, QWidget* parent)
|
||||
: QDialog(parent),
|
||||
m_score(score),
|
||||
m_dirty(false)
|
||||
{
|
||||
setObjectName("MetaEditDialog");
|
||||
setupUi(this);
|
||||
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
score = s;
|
||||
dirty = false;
|
||||
|
||||
level->setValue(score->mscVersion());
|
||||
version->setText(score->mscoreVersion());
|
||||
int rev = score->mscoreRevision();
|
||||
setupUi(this);
|
||||
QDialog::setWindowFlag(Qt::WindowContextHelpButtonHint, false);
|
||||
QDialog::setWindowFlag(Qt::WindowMinMaxButtonsHint);
|
||||
|
||||
version->setText(m_score->mscoreVersion());
|
||||
level->setText(QString::number(m_score->mscVersion()));
|
||||
|
||||
int rev = m_score->mscoreRevision();
|
||||
if (rev > 99999) // MuseScore 1.3 is decimal 5702, 2.0 and later uses a 7-digit hex SHA
|
||||
revision->setText(QString::number(rev, 16));
|
||||
else
|
||||
|
@ -55,78 +60,209 @@ MetaEditDialog::MetaEditDialog(Score* s, QWidget* parent)
|
|||
tr("initially read from:"), previousFileName));
|
||||
filePath->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||
|
||||
int idx = 0;
|
||||
QMapIterator<QString, QString> i(s->metaTags());
|
||||
QGridLayout* grid = static_cast<QGridLayout*>(scrollWidget->layout());
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
QLabel* l = new QLabel;
|
||||
l->setText(i.key());
|
||||
QLineEdit* text = new QLineEdit(i.value(), 0);
|
||||
connect(text, SIGNAL(textChanged(const QString&)), SLOT(setDirty()));
|
||||
grid->addWidget(l, idx, 0);
|
||||
grid->addWidget(text, idx, 1);
|
||||
++idx;
|
||||
QMapIterator<QString, QString> iterator(score->metaTags());
|
||||
while (iterator.hasNext()) {
|
||||
iterator.next();
|
||||
const QString key = iterator.key();
|
||||
addTag(key, iterator.value(), isBuiltinTag(key));
|
||||
}
|
||||
connect(newButton, SIGNAL(clicked()), SLOT(newClicked()));
|
||||
|
||||
scrollAreaLayout->setColumnStretch(1, 1); // The 'value' column should be expanding
|
||||
|
||||
connect(newButton, &QPushButton::clicked, this, [this]() { newClicked(); });
|
||||
connect(saveButton, &QPushButton::clicked, this, &MetaEditDialog::save);
|
||||
MuseScore::restoreGeometry(this);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// newClicked
|
||||
// addTag
|
||||
/// Add a tag to the displayed list
|
||||
/// returns a pair of widget corresponding to the key and value:
|
||||
/// QPair<QLineEdit* key, QLineEdit* value>
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MetaEditDialog::newClicked()
|
||||
{
|
||||
QString s = QInputDialog::getText(this,
|
||||
tr("Input Tag Name"),
|
||||
tr("New tag name:")
|
||||
);
|
||||
QGridLayout* grid = static_cast<QGridLayout*>(scrollWidget->layout());
|
||||
if (!s.isEmpty()) {
|
||||
int idx = grid->rowCount();
|
||||
QLabel* l = new QLabel;
|
||||
l->setText(s);
|
||||
QLineEdit* text = new QLineEdit;
|
||||
grid->addWidget(l, idx, 0);
|
||||
grid->addWidget(text, idx, 1);
|
||||
QPair<QLineEdit*, QLineEdit*> MetaEditDialog::addTag(const QString& key, const QString& value, const bool builtinTag)
|
||||
{
|
||||
QLineEdit* tagWidget = new QLineEdit(key);
|
||||
QLineEdit* valueWidget = new QLineEdit(value);
|
||||
|
||||
connect(valueWidget, &QLineEdit::textChanged, this, [this]() { setDirty(); });
|
||||
|
||||
const int numFlags = scrollAreaLayout->rowCount();
|
||||
if (builtinTag) {
|
||||
tagWidget->setReadOnly(true);
|
||||
// Make it clear that builtin tags are not editable
|
||||
tagWidget->setStyleSheet("QLineEdit { background: transparent; }");
|
||||
tagWidget->setFrame(false);
|
||||
tagWidget->setFocusPolicy(Qt::NoFocus);
|
||||
tagWidget->setToolTip(tr("This is a builtin tag. Its name cannot be modified."));
|
||||
}
|
||||
dirty = true;
|
||||
else {
|
||||
tagWidget->setPlaceholderText(tr("Name"));
|
||||
QToolButton* deleteButton = new QToolButton();
|
||||
deleteButton->setIcon(*icons[int (Icons::bin_ICON)]);
|
||||
|
||||
// follow gui scaling. The '+ 2' at the end is the margin. (2 * 1px).for top and bottoms.
|
||||
const double size = preferences.getInt(PREF_UI_THEME_ICONWIDTH) * guiScaling * .5 + 2;
|
||||
deleteButton->setIconSize(QSize(size, size));
|
||||
|
||||
connect(tagWidget, &QLineEdit::textChanged, this, [this]() { setDirty(); });
|
||||
connect(deleteButton, &QToolButton::clicked, this,
|
||||
[this, tagWidget, valueWidget, deleteButton]() { setDirty();
|
||||
tagWidget->deleteLater();
|
||||
valueWidget->deleteLater();
|
||||
deleteButton->deleteLater(); });
|
||||
|
||||
scrollAreaLayout->addWidget(deleteButton, numFlags, 2);
|
||||
}
|
||||
scrollAreaLayout->addWidget(tagWidget, numFlags, 0);
|
||||
scrollAreaLayout->addWidget(valueWidget, numFlags, 1);
|
||||
|
||||
return QPair<QLineEdit*, QLineEdit*>(tagWidget, valueWidget);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// newClicked
|
||||
/// When the 'New' button is clicked, a new tag is appended,
|
||||
/// and focus is set to the QLineEdit corresponding to its name.
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MetaEditDialog::newClicked() {
|
||||
QPair<QLineEdit*, QLineEdit*> pair = addTag("", "", false);
|
||||
|
||||
pair.first->setFocus();
|
||||
pair.second->setPlaceholderText(tr("Value"));
|
||||
// scroll down to see the newly created tag.
|
||||
// ugly workaround because scrolling to maximum doesn't completely scroll
|
||||
// to the maximum, for some unknow reason.
|
||||
// See https://www.qtcentre.org/threads/32852-How-can-I-always-keep-the-scroll-bar-at-the-bottom-of-a-QScrollArea
|
||||
QScrollBar* scrollBar = scrollArea->verticalScrollBar();
|
||||
scrollBar->setMaximum(scrollBar->maximum() + 1);
|
||||
scrollBar->setValue(scrollBar->maximum());
|
||||
|
||||
setDirty();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// isBuiltinTag
|
||||
/// returns true if the tag is one of Musescore's builtin tags
|
||||
/// see also MasterScore::MasterScore()
|
||||
//---------------------------------------------------------
|
||||
|
||||
const bool MetaEditDialog::isBuiltinTag(const QString& tag) const {
|
||||
return (tag == "platform" || tag == "movementNumber" || tag == "movementTitle"
|
||||
|| tag == "workNumber" || tag == "workTitle" || tag == "arranger"
|
||||
|| tag == "composer" || tag == "lyricist" || tag == "poet"
|
||||
|| tag == "translator" || tag == "source" || tag == "copyright"
|
||||
|| tag == "creationDate");
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// setDirty
|
||||
/// Sets the editor as having unsaved changes
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MetaEditDialog::setDirty(const bool dirty)
|
||||
{
|
||||
if (dirty == m_dirty)
|
||||
return;
|
||||
|
||||
saveButton->setEnabled(dirty);
|
||||
setWindowTitle(tr("Score properties: ") + m_score->title() + (dirty ? "*" : ""));
|
||||
|
||||
m_dirty = dirty;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// save
|
||||
/// Save the currently displayed metatags
|
||||
//---------------------------------------------------------
|
||||
|
||||
const bool MetaEditDialog::save()
|
||||
{
|
||||
if (m_dirty) {
|
||||
const int idx = scrollAreaLayout->rowCount();
|
||||
QMap<QString, QString> map;
|
||||
for (int i = 0; i < idx; ++i) {
|
||||
QLayoutItem *tagItem = scrollAreaLayout->itemAtPosition(i, 0);
|
||||
QLayoutItem *valueItem = scrollAreaLayout->itemAtPosition(i, 1);
|
||||
if (tagItem && valueItem) {
|
||||
QLineEdit *tag = static_cast<QLineEdit*>(tagItem->widget());
|
||||
QLineEdit *value = static_cast<QLineEdit*>(valueItem->widget());
|
||||
|
||||
QString tagText = tag->text();
|
||||
if (tagText.isEmpty()) {
|
||||
QMessageBox::warning(this, tr("MuseScore"),
|
||||
tr("Tags can't have empty names."),
|
||||
QMessageBox::Ok, QMessageBox::Ok);
|
||||
tag->setFocus();
|
||||
return false;
|
||||
}
|
||||
if (map.contains(tagText)) {
|
||||
if (isBuiltinTag(tagText)) {
|
||||
QMessageBox::warning(this, tr("MuseScore"),
|
||||
tagText + tr(" is a reserved builtin tag.\n"
|
||||
"It can't be used."),
|
||||
QMessageBox::Ok, QMessageBox::Ok);
|
||||
tag->setFocus();
|
||||
return false;
|
||||
}
|
||||
QMessageBox::warning(this, tr("MuseScore"),
|
||||
tr("You have multiple fields with the same name."),
|
||||
QMessageBox::Ok, QMessageBox::Ok);
|
||||
tag->setFocus();
|
||||
return false;
|
||||
}
|
||||
map.insert(tagText, value->text());
|
||||
}
|
||||
else
|
||||
qDebug("MetaEditDialog: abnormal configuration: %i", i);
|
||||
}
|
||||
m_score->undo(new ChangeMetaTags(m_score, map));
|
||||
setDirty(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// accept
|
||||
/// Reimplemented to save modifications before closing the dialog.
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MetaEditDialog::accept()
|
||||
{
|
||||
if (dirty) {
|
||||
QGridLayout* grid = static_cast<QGridLayout*>(scrollWidget->layout());
|
||||
int idx = grid->rowCount();
|
||||
QMap<QString, QString> m;
|
||||
for (int i = 0; i < idx; ++i) {
|
||||
QLayoutItem* labelItem = grid->itemAtPosition(i, 0);
|
||||
QLayoutItem* dataItem = grid->itemAtPosition(i, 1);
|
||||
if (labelItem && dataItem) {
|
||||
QLabel* l = static_cast<QLabel*>(labelItem->widget());
|
||||
QLineEdit* le = static_cast<QLineEdit*>(dataItem->widget());
|
||||
m.insert(l->text(), le->text());
|
||||
}
|
||||
}
|
||||
score->undo(new ChangeMetaTags(score, m));
|
||||
}
|
||||
if (!save())
|
||||
return;
|
||||
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------
|
||||
// hideEvent
|
||||
/// Reimplemented to notify the user that he/she is quitting without saving
|
||||
//---------------------------------------------------------
|
||||
|
||||
void MetaEditDialog::hideEvent(QHideEvent* event)
|
||||
void MetaEditDialog::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
if (m_dirty) {
|
||||
QMessageBox::StandardButton button = QMessageBox::warning(this, tr("MuseScore"),
|
||||
tr("You have unsaved changes.\nSave?"),
|
||||
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,
|
||||
QMessageBox::Save);
|
||||
if (button == QMessageBox::Save) {
|
||||
if (!save()) {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (button == QMessageBox::Cancel) {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
}
|
||||
MuseScore::saveGeometry(this);
|
||||
QWidget::hideEvent(event);
|
||||
event->accept();
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace Ms
|
||||
|
||||
|
|
|
@ -28,27 +28,33 @@ class Score;
|
|||
|
||||
//---------------------------------------------------------
|
||||
// MetaEditDialog
|
||||
/// Dialog for editing metatags.
|
||||
/// NOTE: Right now, builtin metatags cannot be deleted by the user,
|
||||
/// because they are automatically created when a MasterScore is instantiated.
|
||||
/// This means that if they get deleted, they are simply readded (but empty)
|
||||
/// when the score is reopened.
|
||||
/// see also MasterScore::MasterScore()
|
||||
//---------------------------------------------------------
|
||||
|
||||
class MetaEditDialog : public QDialog, public Ui::MetaEditDialog {
|
||||
Q_OBJECT
|
||||
|
||||
Score* score;
|
||||
Score* m_score; /// the current score
|
||||
bool m_dirty; /// wheter the editor has unsaved changes or not
|
||||
|
||||
bool dirty;
|
||||
virtual void closeEvent(QCloseEvent*) override;
|
||||
|
||||
virtual void hideEvent(QHideEvent*);
|
||||
const bool isBuiltinTag(const QString& tag) const;
|
||||
QPair<QLineEdit*, QLineEdit*> addTag(const QString& key, const QString& value, const bool builtinTag);
|
||||
|
||||
private slots:
|
||||
const bool save();
|
||||
void newClicked();
|
||||
void setDirty() { dirty = true; }
|
||||
|
||||
public slots:
|
||||
virtual void accept();
|
||||
void setDirty(const bool dirty = true);
|
||||
|
||||
public:
|
||||
MetaEditDialog(Score*, QWidget* parent = 0);
|
||||
};
|
||||
MetaEditDialog(Score* score, QWidget* parent = nullptr);
|
||||
virtual void accept();
|
||||
};
|
||||
|
||||
|
||||
} // namespace Ms
|
||||
|
|
|
@ -6,10 +6,13 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>668</width>
|
||||
<height>373</height>
|
||||
<width>682</width>
|
||||
<height>406</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Score Properties</string>
|
||||
</property>
|
||||
|
@ -19,72 +22,154 @@
|
|||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="version">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>MuseScore Version:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<widget class="QLineEdit" name="revision">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Revision:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<widget class="QLabel" name="labelLevel">
|
||||
<property name="text">
|
||||
<string>API-Level:</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="6">
|
||||
<widget class="QLabel" name="filePath">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Where this score is saved on your computer.</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string>Where this score is saved on your computer.</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>The document has not been saved yet.</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5">
|
||||
<widget class="QSpinBox" name="level">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<widget class="QLabel" name="level">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>51</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
<property name="toolTip">
|
||||
<string>API-Level</string>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>99999</number>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>No level</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="version">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>The MuseScore version with which this score was last saved.</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string>The MuseScore version with which this score was last saved.</string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>No version</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="labelRevision">
|
||||
<property name="text">
|
||||
<string>Revision:</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="labelVersion">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>MuseScore Version:</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelFilePath">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>File Path:</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::NoTextInteraction</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="5">
|
||||
<widget class="QLabel" name="filePath"/>
|
||||
<item row="1" column="3">
|
||||
<widget class="QLabel" name="revision">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>No revision</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
@ -93,39 +178,81 @@
|
|||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollWidget">
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>646</width>
|
||||
<height>238</height>
|
||||
<width>662</width>
|
||||
<height>302</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="verticalSpacing">
|
||||
<number>1</number>
|
||||
<layout class="QGridLayout" name="scrollAreaLayout">
|
||||
<property name="spacing">
|
||||
<number>3</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<layout class="QHBoxLayout" name="buttonLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="newButton">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Add a tag to this score.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">+</string>
|
||||
<string>New...</string>
|
||||
</property>
|
||||
<property name="autoRepeat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="autoRepeatDelay">
|
||||
<number>500</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="okButton">
|
||||
<property name="text">
|
||||
<string>Ok</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="cancelButton">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="saveButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -133,37 +260,43 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>newButton</tabstop>
|
||||
<tabstop>saveButton</tabstop>
|
||||
<tabstop>okButton</tabstop>
|
||||
<tabstop>cancelButton</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<sender>okButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>MetaEditDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
<x>499</x>
|
||||
<y>395</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
<x>435</x>
|
||||
<y>389</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<sender>cancelButton</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>MetaEditDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
<x>585</x>
|
||||
<y>395</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
<x>546</x>
|
||||
<y>405</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
|
|
|
@ -185,5 +185,6 @@
|
|||
<file>data/icons/triangleUp.svg</file>
|
||||
<file>data/icons/arrowsMoveToTop.svg</file>
|
||||
<file>data/win_opengl_buglist.json</file>
|
||||
<file>data/icons/bin.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
Loading…
Reference in a new issue