Add option to install mod loader during instance creation
This commit is contained in:
		@@ -59,6 +59,11 @@ VanillaPage::VanillaPage(NewInstanceDialog *dialog, QWidget *parent)
 | 
			
		||||
    connect(ui->releaseFilter, &QCheckBox::stateChanged, this, &VanillaPage::filterChanged);
 | 
			
		||||
    connect(ui->experimentsFilter, &QCheckBox::stateChanged, this, &VanillaPage::filterChanged);
 | 
			
		||||
    connect(ui->refreshBtn, &QPushButton::clicked, this, &VanillaPage::refresh);
 | 
			
		||||
 | 
			
		||||
    connect(ui->loaderVersionList, &VersionSelectWidget::selectedVersionChanged, this, &VanillaPage::setSelectedLoaderVersion);
 | 
			
		||||
    connect(ui->loaderBtnGroup, &QButtonGroup::idToggled, this, &VanillaPage::loaderFilterChanged);
 | 
			
		||||
    connect(ui->loaderRefreshBtn, &QPushButton::clicked, this, &VanillaPage::loaderRefresh);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::openedImpl()
 | 
			
		||||
@@ -80,6 +85,13 @@ void VanillaPage::refresh()
 | 
			
		||||
    ui->versionList->loadList();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::loaderRefresh()
 | 
			
		||||
{
 | 
			
		||||
    if(ui->noneFilter->isChecked())
 | 
			
		||||
        return;
 | 
			
		||||
    ui->loaderVersionList->loadList();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::filterChanged()
 | 
			
		||||
{
 | 
			
		||||
    QStringList out;
 | 
			
		||||
@@ -99,6 +111,38 @@ void VanillaPage::filterChanged()
 | 
			
		||||
    ui->versionList->setFilter(BaseVersionList::TypeRole, new RegexpFilter(regexp, false));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::loaderFilterChanged()
 | 
			
		||||
{
 | 
			
		||||
    if(ui->noneFilter->isChecked())
 | 
			
		||||
    {
 | 
			
		||||
        ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, "AAA"); // empty list
 | 
			
		||||
        // TODO: The below message does not show when the add instance window is first opened. This should be fixed.
 | 
			
		||||
        ui->loaderVersionList->setEmptyString(tr("No mod loader is selected."));
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    else if(ui->forgeFilter->isChecked())
 | 
			
		||||
    {
 | 
			
		||||
        ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, m_selectedVersion->descriptor());
 | 
			
		||||
        m_selectedLoader = "net.minecraftforge";
 | 
			
		||||
    }
 | 
			
		||||
    else if(ui->fabricFilter->isChecked())
 | 
			
		||||
    {
 | 
			
		||||
        ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, "");
 | 
			
		||||
        m_selectedLoader = "net.fabricmc.fabric-loader";
 | 
			
		||||
    }
 | 
			
		||||
    else if(ui->liteLoaderFilter->isChecked())
 | 
			
		||||
    {
 | 
			
		||||
        ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, m_selectedVersion->descriptor());
 | 
			
		||||
        m_selectedLoader = "com.mumfrey.liteloader";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto vlist = APPLICATION->metadataIndex()->get(m_selectedLoader);
 | 
			
		||||
    ui->loaderVersionList->initialize(vlist.get());
 | 
			
		||||
    ui->loaderVersionList->selectRecommended();
 | 
			
		||||
    suggestCurrent();
 | 
			
		||||
    ui->loaderVersionList->setEmptyString(tr("No versions are currently available for Minecraft %1").arg(m_selectedVersion->descriptor()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VanillaPage::~VanillaPage()
 | 
			
		||||
{
 | 
			
		||||
    delete ui;
 | 
			
		||||
@@ -119,6 +163,16 @@ BaseVersionPtr VanillaPage::selectedVersion() const
 | 
			
		||||
    return m_selectedVersion;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BaseVersionPtr VanillaPage::selectedLoaderVersion() const
 | 
			
		||||
{
 | 
			
		||||
    return m_selectedLoaderVersion;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString VanillaPage::selectedLoader() const
 | 
			
		||||
{
 | 
			
		||||
    return m_selectedLoader;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::suggestCurrent()
 | 
			
		||||
{
 | 
			
		||||
    if (!isOpened)
 | 
			
		||||
@@ -132,7 +186,15 @@ void VanillaPage::suggestCurrent()
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dialog->setSuggestedPack(m_selectedVersion->descriptor(), new InstanceCreationTask(m_selectedVersion));
 | 
			
		||||
    // List is empty if either no mod loader is selected, or no versions are available
 | 
			
		||||
    if(!ui->loaderVersionList->hasVersions())
 | 
			
		||||
        dialog->setSuggestedPack(m_selectedVersion->descriptor(), new InstanceCreationTask(m_selectedVersion));
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        dialog->setSuggestedPack(m_selectedVersion->descriptor(),
 | 
			
		||||
                                 new InstanceCreationTask(m_selectedVersion, m_selectedLoader,
 | 
			
		||||
                                                          m_selectedLoaderVersion));
 | 
			
		||||
    }
 | 
			
		||||
    dialog->setSuggestedIcon("default");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -140,4 +202,11 @@ void VanillaPage::setSelectedVersion(BaseVersionPtr version)
 | 
			
		||||
{
 | 
			
		||||
    m_selectedVersion = version;
 | 
			
		||||
    suggestCurrent();
 | 
			
		||||
    loaderFilterChanged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void VanillaPage::setSelectedLoaderVersion(BaseVersionPtr version)
 | 
			
		||||
{
 | 
			
		||||
    m_selectedLoaderVersion = version;
 | 
			
		||||
    suggestCurrent();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -77,15 +77,20 @@ public:
 | 
			
		||||
    void openedImpl() override;
 | 
			
		||||
 | 
			
		||||
    BaseVersionPtr selectedVersion() const;
 | 
			
		||||
    BaseVersionPtr selectedLoaderVersion() const;
 | 
			
		||||
    QString selectedLoader() const;
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
    void setSelectedVersion(BaseVersionPtr version);
 | 
			
		||||
    void setSelectedLoaderVersion(BaseVersionPtr version);
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
    void filterChanged();
 | 
			
		||||
    void loaderFilterChanged();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void refresh();
 | 
			
		||||
    void loaderRefresh();
 | 
			
		||||
    void suggestCurrent();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
@@ -94,4 +99,6 @@ private:
 | 
			
		||||
    Ui::VanillaPage *ui = nullptr;
 | 
			
		||||
    bool m_versionSetByUser = false;
 | 
			
		||||
    BaseVersionPtr m_selectedVersion;
 | 
			
		||||
    BaseVersionPtr m_selectedLoaderVersion;
 | 
			
		||||
    QString m_selectedLoader;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -33,113 +33,221 @@
 | 
			
		||||
       <string notr="true"/>
 | 
			
		||||
      </attribute>
 | 
			
		||||
      <layout class="QGridLayout" name="gridLayout_2">
 | 
			
		||||
       <item row="0" column="1">
 | 
			
		||||
        <layout class="QVBoxLayout" name="verticalLayout">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QLabel" name="label">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Filter</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="alignment">
 | 
			
		||||
            <set>Qt::AlignCenter</set>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="releaseFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Releases</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checked">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="snapshotFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Snapshots</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="oldSnapshotFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Old Snapshots</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="betaFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Betas</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="alphaFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Alphas</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QCheckBox" name="experimentsFilter">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Experiments</string>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="checkable">
 | 
			
		||||
            <bool>true</bool>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <spacer name="verticalSpacer">
 | 
			
		||||
           <property name="orientation">
 | 
			
		||||
            <enum>Qt::Vertical</enum>
 | 
			
		||||
           </property>
 | 
			
		||||
           <property name="sizeHint" stdset="0">
 | 
			
		||||
            <size>
 | 
			
		||||
             <width>20</width>
 | 
			
		||||
             <height>40</height>
 | 
			
		||||
            </size>
 | 
			
		||||
           </property>
 | 
			
		||||
          </spacer>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="QPushButton" name="refreshBtn">
 | 
			
		||||
           <property name="text">
 | 
			
		||||
            <string>Refresh</string>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="0" column="0">
 | 
			
		||||
        <widget class="VersionSelectWidget" name="versionList" native="true">
 | 
			
		||||
       <item row="2" column="0">
 | 
			
		||||
        <widget class="Line" name="line">
 | 
			
		||||
         <property name="sizePolicy">
 | 
			
		||||
          <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 | 
			
		||||
          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 | 
			
		||||
           <horstretch>0</horstretch>
 | 
			
		||||
           <verstretch>0</verstretch>
 | 
			
		||||
          </sizepolicy>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
          <enum>Qt::Horizontal</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="0" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="minecraftLayout">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="VersionSelectWidget" name="versionList" native="true">
 | 
			
		||||
           <property name="sizePolicy">
 | 
			
		||||
            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 | 
			
		||||
             <horstretch>0</horstretch>
 | 
			
		||||
             <verstretch>0</verstretch>
 | 
			
		||||
            </sizepolicy>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <layout class="QVBoxLayout" name="verticalLayout">
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QLabel" name="label">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Filter</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="alignment">
 | 
			
		||||
              <set>Qt::AlignCenter</set>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="releaseFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Releases</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checked">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="snapshotFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Snapshots</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="oldSnapshotFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Old Snapshots</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="betaFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Betas</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="alphaFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Alphas</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QCheckBox" name="experimentsFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Experiments</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checkable">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <spacer name="verticalSpacer">
 | 
			
		||||
             <property name="orientation">
 | 
			
		||||
              <enum>Qt::Vertical</enum>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="sizeHint" stdset="0">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>20</width>
 | 
			
		||||
               <height>40</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
            </spacer>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QPushButton" name="refreshBtn">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Refresh</string>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
          </layout>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item row="4" column="0">
 | 
			
		||||
        <layout class="QHBoxLayout" name="loaderLayout">
 | 
			
		||||
         <item>
 | 
			
		||||
          <widget class="VersionSelectWidget" name="loaderVersionList" native="true">
 | 
			
		||||
           <property name="sizePolicy">
 | 
			
		||||
            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 | 
			
		||||
             <horstretch>0</horstretch>
 | 
			
		||||
             <verstretch>0</verstretch>
 | 
			
		||||
            </sizepolicy>
 | 
			
		||||
           </property>
 | 
			
		||||
          </widget>
 | 
			
		||||
         </item>
 | 
			
		||||
         <item>
 | 
			
		||||
          <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QLabel" name="loaderLabel">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Mod Loader</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="alignment">
 | 
			
		||||
              <set>Qt::AlignCenter</set>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QRadioButton" name="noneFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>None</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="checked">
 | 
			
		||||
              <bool>true</bool>
 | 
			
		||||
             </property>
 | 
			
		||||
             <attribute name="buttonGroup">
 | 
			
		||||
              <string notr="true">loaderBtnGroup</string>
 | 
			
		||||
             </attribute>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QRadioButton" name="forgeFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Forge</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <attribute name="buttonGroup">
 | 
			
		||||
              <string notr="true">loaderBtnGroup</string>
 | 
			
		||||
             </attribute>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QRadioButton" name="fabricFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Fabric</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <attribute name="buttonGroup">
 | 
			
		||||
              <string notr="true">loaderBtnGroup</string>
 | 
			
		||||
             </attribute>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QRadioButton" name="liteLoaderFilter">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>LiteLoader</string>
 | 
			
		||||
             </property>
 | 
			
		||||
             <attribute name="buttonGroup">
 | 
			
		||||
              <string notr="true">loaderBtnGroup</string>
 | 
			
		||||
             </attribute>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <spacer name="verticalSpacer_2">
 | 
			
		||||
             <property name="orientation">
 | 
			
		||||
              <enum>Qt::Vertical</enum>
 | 
			
		||||
             </property>
 | 
			
		||||
             <property name="sizeHint" stdset="0">
 | 
			
		||||
              <size>
 | 
			
		||||
               <width>20</width>
 | 
			
		||||
               <height>40</height>
 | 
			
		||||
              </size>
 | 
			
		||||
             </property>
 | 
			
		||||
            </spacer>
 | 
			
		||||
           </item>
 | 
			
		||||
           <item>
 | 
			
		||||
            <widget class="QPushButton" name="loaderRefreshBtn">
 | 
			
		||||
             <property name="text">
 | 
			
		||||
              <string>Refresh</string>
 | 
			
		||||
             </property>
 | 
			
		||||
            </widget>
 | 
			
		||||
           </item>
 | 
			
		||||
          </layout>
 | 
			
		||||
         </item>
 | 
			
		||||
        </layout>
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
@@ -166,4 +274,7 @@
 | 
			
		||||
 </tabstops>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
 <buttongroups>
 | 
			
		||||
  <buttongroup name="loaderBtnGroup"/>
 | 
			
		||||
 </buttongroups>
 | 
			
		||||
</ui>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user