Better unsaved project warning

This commit is contained in:
Jack Andersen 2018-08-29 22:19:53 -10:00
parent 1884e0ca7a
commit 59f99d0b99
6 changed files with 207 additions and 180 deletions

View File

@ -185,10 +185,8 @@ void ADSRView::mousePressEvent(QMouseEvent* ev)
PointDistance(ev->localPos(), points[2])
};
QPointF testPos = ev->localPos();
int minDist = 0;
if (dists[1] < dists[minDist])
if (dists[1] < dists[minDist] + 8.0) /* pt1 overlaps pt0, so include radius in test */
minDist = 1;
if (dists[2] < dists[minDist])
minDist = 2;

View File

@ -613,6 +613,8 @@ bool MainWindow::openEditor(ProjectModel::SampleNode* node, bool appendNav)
bool MainWindow::openEditor(ProjectModel::INode* node, bool appendNav)
{
if (m_uiDisabled)
return false;
switch (node->type())
{
case ProjectModel::INode::Type::SongGroup:
@ -750,13 +752,10 @@ void MainWindow::aboutToDeleteNode(ProjectModel::INode* node)
closeEditor();
}
void MainWindow::closeEvent(QCloseEvent* ev)
bool MainWindow::askAboutSave()
{
if (!m_projectModel)
{
ev->accept();
return;
}
return true;
if (!m_undoStack->isClean())
{
@ -766,23 +765,24 @@ void MainWindow::closeEvent(QCloseEvent* ev)
if (result == QMessageBox::Save)
{
saveAction();
ev->accept();
}
else if (result == QMessageBox::Discard)
{
ev->accept();
}
else
{
ev->ignore();
return true;
}
return result == QMessageBox::Discard;
}
else
{
ev->accept();
return true;
}
}
void MainWindow::closeEvent(QCloseEvent* ev)
{
if (askAboutSave())
ev->accept();
else
ev->ignore();
}
void MainWindow::showEvent(QShowEvent* ev)
{
m_studioSetup->updateWindowPosition();
@ -790,6 +790,9 @@ void MainWindow::showEvent(QShowEvent* ev)
void MainWindow::newAction()
{
if (!askAboutSave())
return;
QString path = QFileDialog::getSaveFileName(this, tr("New Project"));
if (path.isEmpty())
return;
@ -858,6 +861,9 @@ bool MainWindow::openProject(const QString& path)
void MainWindow::openAction()
{
if (!askAboutSave())
return;
QString path = QFileDialog::getExistingDirectory(this, tr("Open Project"));
if (path.isEmpty())
return;
@ -866,6 +872,9 @@ void MainWindow::openAction()
void MainWindow::openRecentFileAction()
{
if (!askAboutSave())
return;
if (QAction *action = qobject_cast<QAction *>(sender()))
if (!openProject(action->data().toString()))
{
@ -898,6 +907,15 @@ void MainWindow::saveAction()
void MainWindow::revertAction()
{
if (m_projectModel && !m_undoStack->isClean())
{
QDir dir(m_projectModel->path());
int result = m_mainMessenger.question(tr("Unsaved Changes"), tr("Discard Changes in %1?").arg(dir.dirName()),
QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel);
if (result == QMessageBox::Cancel)
return;
}
QString path = m_projectModel->path();
closeEditor();
m_undoStack->clear();

View File

@ -188,6 +188,7 @@ public:
void pushUndoCommand(EditorUndoCommand* cmd);
void updateFocus();
void aboutToDeleteNode(ProjectModel::INode* node);
bool askAboutSave();
void closeEvent(QCloseEvent* ev);
void showEvent(QShowEvent* ev);

View File

@ -1275,6 +1275,7 @@ protected:
m_data = g_MainWindow->projectModel()->_delNode(static_cast<ProjectModel::GroupNode*>(m_node.get()), m_nameReg);
setObsolete(true);
g_MainWindow->m_undoStack->clear();
g_MainWindow->m_undoStack->resetClean();
}
public:
explicit GroupNodeUndoCommand(const QString& text, std::unique_ptr<amuse::AudioGroupDatabase>&& data,
@ -2172,6 +2173,7 @@ void ProjectModel::del(const QModelIndex& index)
NameUndoRegistry nameReg;
g_MainWindow->projectModel()->_delNode(static_cast<GroupNode*>(n), nameReg);
g_MainWindow->m_undoStack->clear();
g_MainWindow->m_undoStack->resetClean();
break;
}
case INode::Type::SongGroup:
@ -2208,6 +2210,7 @@ void ProjectModel::del(const QModelIndex& index)
gn->getAudioGroup()->deleteSample(static_cast<SampleNode*>(n)->id());
_delPoolNode(static_cast<SampleNode*>(n), gn, nameReg, gn->getAudioGroup()->getSdir().sampleEntries());
g_MainWindow->m_undoStack->clear();
g_MainWindow->m_undoStack->resetClean();
break;
}
default:

View File

@ -1261,6 +1261,7 @@ void PageTableView::setModel(QAbstractItemModel* model)
PageTableView::PageTableView(QWidget* parent)
: QTableView(parent)
{
setObjectName("amusetable");
setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::ExtendedSelection);
setGridStyle(Qt::NoPen);

View File

@ -4,94 +4,94 @@
<context>
<name>ADSRControls</name>
<message>
<location filename="../ADSREditor.cpp" line="337"/>
<location filename="../ADSREditor.cpp" line="335"/>
<source>Change Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="401"/>
<location filename="../ADSREditor.cpp" line="399"/>
<source>Change Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="465"/>
<location filename="../ADSREditor.cpp" line="463"/>
<source>Change Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="532"/>
<location filename="../ADSREditor.cpp" line="530"/>
<source>Change Attack/Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="610"/>
<location filename="../ADSREditor.cpp" line="608"/>
<source>Change Decay/Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="687"/>
<location filename="../ADSREditor.cpp" line="685"/>
<source>Change Release</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="789"/>
<location filename="../ADSREditor.cpp" line="787"/>
<source>Change DLS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="876"/>
<location filename="../ADSREditor.cpp" line="874"/>
<source>Change Vel To Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="929"/>
<location filename="../ADSREditor.cpp" line="927"/>
<source>Change Key To Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="994"/>
<location filename="../ADSREditor.cpp" line="992"/>
<source>Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1002"/>
<location filename="../ADSREditor.cpp" line="1016"/>
<location filename="../ADSREditor.cpp" line="1041"/>
<location filename="../ADSREditor.cpp" line="1000"/>
<location filename="../ADSREditor.cpp" line="1014"/>
<location filename="../ADSREditor.cpp" line="1039"/>
<source> sec</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1008"/>
<location filename="../ADSREditor.cpp" line="1006"/>
<source>Decay</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1022"/>
<location filename="../ADSREditor.cpp" line="1020"/>
<source>Sustain</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1027"/>
<location filename="../ADSREditor.cpp" line="1025"/>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1033"/>
<location filename="../ADSREditor.cpp" line="1031"/>
<source>Release</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1047"/>
<location filename="../ADSREditor.cpp" line="1045"/>
<source>DLS</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1055"/>
<location filename="../ADSREditor.cpp" line="1053"/>
<source>Vel To Attack</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ADSREditor.cpp" line="1067"/>
<location filename="../ADSREditor.cpp" line="1065"/>
<source>Key To Decay</source>
<translation type="unfinished"></translation>
</message>
@ -427,13 +427,13 @@
<context>
<name>MIDIPlayerWidget</name>
<message>
<location filename="../SongGroupEditor.cpp" line="1387"/>
<location filename="../SongGroupEditor.cpp" line="1388"/>
<source>Stop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1401"/>
<location filename="../SongGroupEditor.cpp" line="1436"/>
<location filename="../SongGroupEditor.cpp" line="1402"/>
<location filename="../SongGroupEditor.cpp" line="1437"/>
<source>Play</source>
<translation type="unfinished"></translation>
</message>
@ -477,13 +477,13 @@
</message>
<message>
<location filename="../MainWindow.cpp" line="272"/>
<location filename="../MainWindow.cpp" line="812"/>
<location filename="../MainWindow.cpp" line="815"/>
<source>The directory at &apos;%1&apos; must not be empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="273"/>
<location filename="../MainWindow.cpp" line="813"/>
<location filename="../MainWindow.cpp" line="816"/>
<source>Directory empty</source>
<translation type="unfinished"></translation>
</message>
@ -533,251 +533,257 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="764"/>
<location filename="../MainWindow.cpp" line="763"/>
<location filename="../MainWindow.cpp" line="913"/>
<source>Unsaved Changes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="764"/>
<location filename="../MainWindow.cpp" line="763"/>
<source>Save Changes in %1?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="793"/>
<location filename="../MainWindow.cpp" line="796"/>
<source>New Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="818"/>
<location filename="../MainWindow.cpp" line="821"/>
<source>The directory at &apos;%1&apos; does not exist.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="819"/>
<location filename="../MainWindow.cpp" line="822"/>
<source>Bad Directory</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="834"/>
<location filename="../MainWindow.cpp" line="837"/>
<source>Opening</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="834"/>
<location filename="../MainWindow.cpp" line="924"/>
<location filename="../MainWindow.cpp" line="1010"/>
<location filename="../MainWindow.cpp" line="1056"/>
<location filename="../MainWindow.cpp" line="1102"/>
<location filename="../MainWindow.cpp" line="837"/>
<location filename="../MainWindow.cpp" line="942"/>
<location filename="../MainWindow.cpp" line="1028"/>
<location filename="../MainWindow.cpp" line="1074"/>
<location filename="../MainWindow.cpp" line="1120"/>
<source>Scanning Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="848"/>
<location filename="../MainWindow.cpp" line="851"/>
<source>Opening %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="861"/>
<location filename="../MainWindow.cpp" line="867"/>
<source>Open Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="924"/>
<location filename="../MainWindow.cpp" line="913"/>
<source>Discard Changes in %1?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="942"/>
<source>Reloading Samples</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="938"/>
<location filename="../MainWindow.cpp" line="956"/>
<source>Scanning %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="948"/>
<location filename="../MainWindow.cpp" line="966"/>
<source>Import Project</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="958"/>
<location filename="../MainWindow.cpp" line="976"/>
<source>The file at &apos;%1&apos; could not be interpreted as a MusyX container.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="959"/>
<location filename="../MainWindow.cpp" line="977"/>
<source>Unsupported MusyX Container</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="964"/>
<location filename="../MainWindow.cpp" line="982"/>
<source>Sample Import Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="965"/>
<location filename="../MainWindow.cpp" line="983"/>
<source>Amuse can import samples as WAV files for ease of editing, import original compressed data for lossless repacking, or both. Exporting the project will prefer whichever version was modified most recently.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="969"/>
<location filename="../MainWindow.cpp" line="987"/>
<source>Import Compressed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="969"/>
<location filename="../MainWindow.cpp" line="987"/>
<source>Import WAVs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="969"/>
<location filename="../MainWindow.cpp" line="987"/>
<source>Import Both</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="985"/>
<location filename="../MainWindow.cpp" line="1003"/>
<source>Raw Import Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="986"/>
<location filename="../MainWindow.cpp" line="1004"/>
<source>Would you like to scan for all MusyX group files in this directory?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="996"/>
<location filename="../MainWindow.cpp" line="1014"/>
<source>Project Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="996"/>
<location filename="../MainWindow.cpp" line="1014"/>
<source>What should this project be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1010"/>
<location filename="../MainWindow.cpp" line="1056"/>
<location filename="../MainWindow.cpp" line="1028"/>
<location filename="../MainWindow.cpp" line="1074"/>
<source>Importing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1022"/>
<location filename="../MainWindow.cpp" line="1065"/>
<location filename="../MainWindow.cpp" line="1040"/>
<location filename="../MainWindow.cpp" line="1083"/>
<source>Importing %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1082"/>
<location filename="../MainWindow.cpp" line="1100"/>
<source>Import Songs</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1102"/>
<location filename="../MainWindow.cpp" line="1120"/>
<source>Exporting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1110"/>
<location filename="../MainWindow.cpp" line="1128"/>
<source>Exporting %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1125"/>
<location filename="../MainWindow.cpp" line="1140"/>
<location filename="../MainWindow.cpp" line="1143"/>
<location filename="../MainWindow.cpp" line="1158"/>
<source>Import C Headers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1126"/>
<location filename="../MainWindow.cpp" line="1144"/>
<source>&lt;p&gt;Importing names from C headers depends on up-to-date, consistent names relative to the sound group data.&lt;/p&gt;&lt;p&gt;Headers are imported on a per-subproject basis from a single directory. Headers must be named with the form &lt;code&gt;&amp;lt;subproject&amp;gt;.h&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Group, Song and SFX definitions are matched according to the following forms:&lt;pre&gt;#define GRP&amp;lt;name&amp;gt; &amp;lt;id&amp;gt;
#define SNG&amp;lt;name&amp;gt; &amp;lt;id&amp;gt;
#define SFX&amp;lt;name&gt; &amp;lt;id&amp;gt;&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;This operation cannot be undone! Is is recommended to make a backup of the project directory before proceeding.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Continue?&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1159"/>
<location filename="../MainWindow.cpp" line="1177"/>
<source>Export C Headers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1385"/>
<location filename="../MainWindow.cpp" line="1403"/>
<source>New Subproject</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1386"/>
<location filename="../MainWindow.cpp" line="1404"/>
<source>What should this subproject be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1401"/>
<location filename="../MainWindow.cpp" line="1419"/>
<source>New SFX Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1402"/>
<location filename="../MainWindow.cpp" line="1420"/>
<source>What should the new SFX group in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1420"/>
<location filename="../MainWindow.cpp" line="1438"/>
<source>New Song Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1421"/>
<location filename="../MainWindow.cpp" line="1439"/>
<source>What should the new Song group in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1462"/>
<location filename="../MainWindow.cpp" line="1480"/>
<source>New ADSR</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1463"/>
<location filename="../MainWindow.cpp" line="1481"/>
<source>What should the new ADSR in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1481"/>
<location filename="../MainWindow.cpp" line="1499"/>
<source>New Curve</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1482"/>
<location filename="../MainWindow.cpp" line="1500"/>
<source>What should the new Curve in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1500"/>
<location filename="../MainWindow.cpp" line="1518"/>
<source>New Keymap</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1501"/>
<location filename="../MainWindow.cpp" line="1519"/>
<source>What should the new Keymap in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1519"/>
<location filename="../MainWindow.cpp" line="1537"/>
<source>New Layers</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1520"/>
<location filename="../MainWindow.cpp" line="1538"/>
<source>What should the new Layers in %1 be named?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1630"/>
<location filename="../MainWindow.cpp" line="1648"/>
<source>About Amuse</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1924"/>
<location filename="../MainWindow.cpp" line="1942"/>
<source>Export Complete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1924"/>
<location filename="../MainWindow.cpp" line="1942"/>
<source>%1?</source>
<translation type="unfinished"></translation>
</message>
@ -1316,234 +1322,234 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1336"/>
<location filename="../ProjectModel.cpp" line="1337"/>
<source>Subproject Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1336"/>
<location filename="../ProjectModel.cpp" line="1337"/>
<source>The subproject %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1343"/>
<location filename="../ProjectModel.cpp" line="1951"/>
<location filename="../ProjectModel.cpp" line="2084"/>
<location filename="../ProjectModel.cpp" line="1344"/>
<location filename="../ProjectModel.cpp" line="1952"/>
<location filename="../ProjectModel.cpp" line="2085"/>
<source>Add Subproject %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1435"/>
<location filename="../ProjectModel.cpp" line="1436"/>
<source>Sound Group Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1435"/>
<location filename="../ProjectModel.cpp" line="1460"/>
<location filename="../ProjectModel.cpp" line="1436"/>
<location filename="../ProjectModel.cpp" line="1461"/>
<source>The group %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1439"/>
<location filename="../ProjectModel.cpp" line="1785"/>
<location filename="../ProjectModel.cpp" line="2092"/>
<location filename="../ProjectModel.cpp" line="1440"/>
<location filename="../ProjectModel.cpp" line="1786"/>
<location filename="../ProjectModel.cpp" line="2093"/>
<source>Add Sound Group %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1460"/>
<location filename="../ProjectModel.cpp" line="1461"/>
<source>Song Group Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1464"/>
<location filename="../ProjectModel.cpp" line="1776"/>
<location filename="../ProjectModel.cpp" line="2100"/>
<location filename="../ProjectModel.cpp" line="1465"/>
<location filename="../ProjectModel.cpp" line="1777"/>
<location filename="../ProjectModel.cpp" line="2101"/>
<source>Add Song Group %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1558"/>
<location filename="../ProjectModel.cpp" line="1559"/>
<source>Sound Macro Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1558"/>
<location filename="../ProjectModel.cpp" line="1559"/>
<source>The macro %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1568"/>
<location filename="../ProjectModel.cpp" line="2110"/>
<location filename="../ProjectModel.cpp" line="1569"/>
<location filename="../ProjectModel.cpp" line="2111"/>
<source>Add Sound Macro %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1589"/>
<location filename="../ProjectModel.cpp" line="1590"/>
<source>ADSR Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1589"/>
<location filename="../ProjectModel.cpp" line="1590"/>
<source>The ADSR %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1595"/>
<location filename="../ProjectModel.cpp" line="1815"/>
<location filename="../ProjectModel.cpp" line="2118"/>
<location filename="../ProjectModel.cpp" line="1596"/>
<location filename="../ProjectModel.cpp" line="1816"/>
<location filename="../ProjectModel.cpp" line="2119"/>
<source>Add ADSR %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1616"/>
<location filename="../ProjectModel.cpp" line="1617"/>
<source>Curve Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1616"/>
<location filename="../ProjectModel.cpp" line="1617"/>
<source>The Curve %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1622"/>
<location filename="../ProjectModel.cpp" line="1824"/>
<location filename="../ProjectModel.cpp" line="2126"/>
<location filename="../ProjectModel.cpp" line="1623"/>
<location filename="../ProjectModel.cpp" line="1825"/>
<location filename="../ProjectModel.cpp" line="2127"/>
<source>Add Curve %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1643"/>
<location filename="../ProjectModel.cpp" line="1644"/>
<source>Keymap Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1643"/>
<location filename="../ProjectModel.cpp" line="1644"/>
<source>The Keymap %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1648"/>
<location filename="../ProjectModel.cpp" line="1843"/>
<location filename="../ProjectModel.cpp" line="2134"/>
<location filename="../ProjectModel.cpp" line="1649"/>
<location filename="../ProjectModel.cpp" line="1844"/>
<location filename="../ProjectModel.cpp" line="2135"/>
<source>Add Keymap %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1669"/>
<location filename="../ProjectModel.cpp" line="1670"/>
<source>Layers Conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1669"/>
<location filename="../ProjectModel.cpp" line="1670"/>
<source>Layers %1 is already defined</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1674"/>
<location filename="../ProjectModel.cpp" line="1863"/>
<location filename="../ProjectModel.cpp" line="2142"/>
<location filename="../ProjectModel.cpp" line="1675"/>
<location filename="../ProjectModel.cpp" line="1864"/>
<location filename="../ProjectModel.cpp" line="2143"/>
<source>Add Layers %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1680"/>
<location filename="../ProjectModel.cpp" line="1690"/>
<location filename="../ProjectModel.cpp" line="1681"/>
<location filename="../ProjectModel.cpp" line="1691"/>
<source>-copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="1796"/>
<location filename="../ProjectModel.cpp" line="1797"/>
<source>Add SoundMacro %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2009"/>
<location filename="../ProjectModel.cpp" line="2010"/>
<source>Cut SongGroup %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2012"/>
<location filename="../ProjectModel.cpp" line="2013"/>
<source>Cut SFXGroup %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2015"/>
<location filename="../ProjectModel.cpp" line="2016"/>
<source>Cut SoundMacro %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2018"/>
<location filename="../ProjectModel.cpp" line="2019"/>
<source>Cut ADSR %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2021"/>
<location filename="../ProjectModel.cpp" line="2022"/>
<source>Cut Curve %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2024"/>
<location filename="../ProjectModel.cpp" line="2025"/>
<source>Cut Keymap %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2027"/>
<location filename="../ProjectModel.cpp" line="2028"/>
<source>Cut Layers %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2165"/>
<location filename="../ProjectModel.cpp" line="2166"/>
<source>Delete Subproject</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2166"/>
<location filename="../ProjectModel.cpp" line="2167"/>
<source>&lt;p&gt;The subproject %1 will be permanently deleted from the project. Sample files will be permanently removed from the file system.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;This action cannot be undone!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Continue?&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2200"/>
<location filename="../ProjectModel.cpp" line="2202"/>
<source>Delete Sample</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2201"/>
<location filename="../ProjectModel.cpp" line="2203"/>
<source>&lt;p&gt;The sample %1 will be permanently deleted from the file system. &lt;p&gt;&lt;strong&gt;This action cannot be undone!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Continue?&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2178"/>
<location filename="../ProjectModel.cpp" line="2180"/>
<source>Delete SongGroup %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2181"/>
<location filename="../ProjectModel.cpp" line="2183"/>
<source>Delete SFXGroup %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2184"/>
<location filename="../ProjectModel.cpp" line="2186"/>
<source>Delete SoundMacro %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2187"/>
<location filename="../ProjectModel.cpp" line="2189"/>
<source>Delete ADSR %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2190"/>
<location filename="../ProjectModel.cpp" line="2192"/>
<source>Delete Curve %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2193"/>
<location filename="../ProjectModel.cpp" line="2195"/>
<source>Delete Keymap %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../ProjectModel.cpp" line="2196"/>
<location filename="../ProjectModel.cpp" line="2198"/>
<source>Delete Layers %1</source>
<translation type="unfinished"></translation>
</message>
@ -1551,7 +1557,7 @@
<context>
<name>QDialogButtonBox</name>
<message>
<location filename="../MainWindow.cpp" line="1956"/>
<location filename="../MainWindow.cpp" line="1974"/>
<source>OK</source>
<translation type="unfinished"></translation>
</message>
@ -1559,12 +1565,12 @@
<context>
<name>QMessageBox</name>
<message>
<location filename="../MainWindow.cpp" line="1613"/>
<location filename="../MainWindow.cpp" line="1631"/>
<source>&lt;h3&gt;About Amuse&lt;/h3&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1617"/>
<location filename="../MainWindow.cpp" line="1635"/>
<source>&lt;p&gt;Amuse is an alternate editor and runtime library for MusyX sound groups.&lt;/p&gt;&lt;p&gt;MusyX originally served as a widely-deployed audio system for developing games on the Nintendo 64, GameCube, and GameBoy Advance.&lt;/p&gt;&lt;p&gt;Amuse is available under the MIT license.&lt;br&gt;Please see &lt;a href=&quot;https://gitlab.axiodl.com/AxioDL/amuse/blob/master/LICENSE&quot;&gt;https://gitlab.axiodl.com/AxioDL/amuse/blob/master/LICENSE&lt;/a&gt; for futher information.&lt;/p&gt;&lt;p&gt;Copyright (C) 2015-2018 Antidote / Jackoalan.&lt;/p&gt;&lt;p&gt;MusyX is a trademark of Factor 5, LLC.&lt;/p&gt;&lt;p&gt;Nintendo 64, GameCube, and GameBoy Advance are trademarks of Nintendo Co., Ltd.&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
@ -1797,12 +1803,12 @@
<context>
<name>SetupTableView</name>
<message>
<location filename="../SongGroupEditor.cpp" line="1309"/>
<location filename="../SongGroupEditor.cpp" line="1310"/>
<source>Delete Setup Entries</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1309"/>
<location filename="../SongGroupEditor.cpp" line="1310"/>
<source>Delete Setup Entry</source>
<translation type="unfinished"></translation>
</message>
@ -1810,37 +1816,37 @@
<context>
<name>SongGroupEditor</name>
<message>
<location filename="../SongGroupEditor.cpp" line="1699"/>
<location filename="../SongGroupEditor.cpp" line="1700"/>
<source>Add new page entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1701"/>
<location filename="../SongGroupEditor.cpp" line="1702"/>
<source>Remove selected page entries</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1668"/>
<location filename="../SongGroupEditor.cpp" line="1669"/>
<source>Normal Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1507"/>
<location filename="../SongGroupEditor.cpp" line="1508"/>
<source>Add Page Entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1519"/>
<location filename="../SongGroupEditor.cpp" line="1520"/>
<source>Add Setup Entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1669"/>
<location filename="../SongGroupEditor.cpp" line="1670"/>
<source>Drum Pages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../SongGroupEditor.cpp" line="1670"/>
<location filename="../SongGroupEditor.cpp" line="1671"/>
<source>MIDI Setups</source>
<translation type="unfinished"></translation>
</message>
@ -2014,52 +2020,52 @@
<context>
<name>TreeDelegate</name>
<message>
<location filename="../MainWindow.cpp" line="1190"/>
<location filename="../MainWindow.cpp" line="1208"/>
<source>Export GameCube Group</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1198"/>
<location filename="../MainWindow.cpp" line="1216"/>
<source>Find Usages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1206"/>
<location filename="../MainWindow.cpp" line="1224"/>
<source>Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1214"/>
<location filename="../MainWindow.cpp" line="1232"/>
<source>Copy</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1222"/>
<location filename="../MainWindow.cpp" line="1240"/>
<source>Paste</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1230"/>
<location filename="../MainWindow.cpp" line="1248"/>
<source>Duplicate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1235"/>
<location filename="../MainWindow.cpp" line="1253"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1243"/>
<location filename="../MainWindow.cpp" line="1261"/>
<source>Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1274"/>
<location filename="../MainWindow.cpp" line="1292"/>
<source>Exporting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../MainWindow.cpp" line="1274"/>
<location filename="../MainWindow.cpp" line="1292"/>
<source>Exporting %1</source>
<translation type="unfinished"></translation>
</message>