int DownloadChild::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = QWidget::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: finished(); break;
        case 1: download(); break;
        case 2: setURL((*reinterpret_cast< QString*(*)>(_a[1]))); break;
        case 3: { QString* _r = getURL();
            if (_a[0]) *reinterpret_cast< QString**>(_a[0]) = _r; }  break;
        case 4: setSaveFile((*reinterpret_cast< QString*(*)>(_a[1]))); break;
        case 5: { QString* _r = getSaveFile();
            if (_a[0]) *reinterpret_cast< QString**>(_a[0]) = _r; }  break;
        case 6: setOpt((*reinterpret_cast< QString*(*)>(_a[1]))); break;
        case 7: { QString* _r = getOpt();
            if (_a[0]) *reinterpret_cast< QString**>(_a[0]) = _r; }  break;
        default: ;
        }
        _id -= 8;
    }
    return _id;
}
bool MainWindow::saveDialog()
{
    auto project = mProjectView->getProject();
    if(!project) return false;

    bool ret = true;

    QString startpath = mSaveLocation;
    if(startpath == QString()) startpath = QDir::homePath();
    QString file = QFileDialog::getSaveFileName(this, tr("Save Project As"), startpath, tr("MAudio Project Files (*.maup);;All FIles (*)"));
    if(file == QString()) return false;

    project->setSaveFile(file.toStdString().c_str());
    try{
        project->save();
        mSaveLocation = file;
    }
    catch(std::exception &e){
        ret = false;
    }

    if(ret) mProjectView->setSaved();
    return ret;
}