Merge branch 'develop' of github.com:MultiMC/MultiMC5 into develop
This commit is contained in:
		@@ -126,7 +126,7 @@ SET(MultiMC_NEWS_RSS_URL "http://multimc.org/rss.xml" CACHE STRING "URL to fetch
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
######## Set version numbers ########
 | 
			
		||||
SET(MultiMC_VERSION_MAJOR		1)
 | 
			
		||||
SET(MultiMC_VERSION_MAJOR		0)
 | 
			
		||||
SET(MultiMC_VERSION_MINOR		0)
 | 
			
		||||
 | 
			
		||||
# Build number
 | 
			
		||||
@@ -148,7 +148,7 @@ SET(MultiMC_UPDATER false CACHE BOOL "Whether or not the update system is enable
 | 
			
		||||
SET(MultiMC_NOTIFICATION_URL "" CACHE STRING "URL for checking for notifications.")
 | 
			
		||||
 | 
			
		||||
# Build a version string to display in the configure logs.
 | 
			
		||||
SET(MultiMC_VERSION_STRING "${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}")
 | 
			
		||||
SET(MultiMC_VERSION_STRING "5.${MultiMC_VERSION_MAJOR}.${MultiMC_VERSION_MINOR}")
 | 
			
		||||
IF (MultiMC_VERSION_BUILD GREATER -1)
 | 
			
		||||
	SET(MultiMC_VERSION_STRING "${MultiMC_VERSION_STRING}.${MultiMC_VERSION_BUILD}")
 | 
			
		||||
ENDIF ()
 | 
			
		||||
 
 | 
			
		||||
@@ -346,8 +346,10 @@ void MultiMC::initGlobalSettings()
 | 
			
		||||
{
 | 
			
		||||
	m_settings.reset(new INISettingsObject("multimc.cfg", this));
 | 
			
		||||
	// Updates
 | 
			
		||||
	m_settings->registerSetting("UseDevBuilds", false);
 | 
			
		||||
	m_settings->registerSetting("UpdateChannel", version().channel);
 | 
			
		||||
	m_settings->registerSetting("AutoUpdate", true);
 | 
			
		||||
	
 | 
			
		||||
	// Notifications
 | 
			
		||||
	m_settings->registerSetting("ShownNotifications", QString());
 | 
			
		||||
 | 
			
		||||
	// FTB
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ struct MultiMCVersion
 | 
			
		||||
	 */
 | 
			
		||||
	QString toString() const
 | 
			
		||||
	{
 | 
			
		||||
		QString vstr = QString("%1.%2").arg(
 | 
			
		||||
		QString vstr = QString("5.%1.%2").arg(
 | 
			
		||||
				QString::number(major),
 | 
			
		||||
				QString::number(minor));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -166,6 +166,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
 | 
			
		||||
		view->setFrameShape(QFrame::NoFrame);
 | 
			
		||||
		view->setModel(proxymodel);
 | 
			
		||||
 | 
			
		||||
		view->setContextMenuPolicy(Qt::CustomContextMenu);
 | 
			
		||||
		connect(view, SIGNAL(customContextMenuRequested(const QPoint&)),
 | 
			
		||||
			this, SLOT(showInstanceContextMenu(const QPoint&)));
 | 
			
		||||
 | 
			
		||||
		ui->horizontalLayout->addWidget(view);
 | 
			
		||||
	}
 | 
			
		||||
	// The cat background
 | 
			
		||||
@@ -315,6 +319,29 @@ MainWindow::~MainWindow()
 | 
			
		||||
	delete drawer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::showInstanceContextMenu(const QPoint& pos)
 | 
			
		||||
{
 | 
			
		||||
	if(!view->indexAt(pos).isValid())
 | 
			
		||||
	{
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	QList<QAction *> actions = ui->instanceToolBar->actions();
 | 
			
		||||
 | 
			
		||||
	// HACK: Filthy rename button hack because the instance view is getting rewritten anyway
 | 
			
		||||
	QAction *actionRename;
 | 
			
		||||
	actionRename = new QAction(tr("Rename"), this);
 | 
			
		||||
	actionRename->setToolTip(ui->actionRenameInstance->toolTip());
 | 
			
		||||
 | 
			
		||||
	connect(actionRename, SIGNAL(triggered(bool)), SLOT(on_actionRenameInstance_triggered()));
 | 
			
		||||
 | 
			
		||||
	actions.replace(1, actionRename);
 | 
			
		||||
 | 
			
		||||
	QMenu myMenu;
 | 
			
		||||
	myMenu.addActions(actions);
 | 
			
		||||
	myMenu.exec(view->mapToGlobal(pos));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::repopulateAccountsMenu()
 | 
			
		||||
{
 | 
			
		||||
	accountMenu->clear();
 | 
			
		||||
 
 | 
			
		||||
@@ -145,6 +145,8 @@ slots:
 | 
			
		||||
	// called when an icon is changed in the icon model.
 | 
			
		||||
	void iconUpdated(QString);
 | 
			
		||||
 | 
			
		||||
	void showInstanceContextMenu(const QPoint&);
 | 
			
		||||
 | 
			
		||||
public
 | 
			
		||||
slots:
 | 
			
		||||
	void instanceActivated(QModelIndex);
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,8 @@
 | 
			
		||||
#include "logic/lists/JavaVersionList.h"
 | 
			
		||||
#include <logic/JavaChecker.h>
 | 
			
		||||
 | 
			
		||||
#include "logic/updater/UpdateChecker.h"
 | 
			
		||||
 | 
			
		||||
#include <settingsobject.h>
 | 
			
		||||
#include <pathutils.h>
 | 
			
		||||
#include <QFileDialog>
 | 
			
		||||
@@ -48,6 +50,17 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Se
 | 
			
		||||
 | 
			
		||||
	loadSettings(MMC->settings().get());
 | 
			
		||||
	updateCheckboxStuff();
 | 
			
		||||
 | 
			
		||||
	QObject::connect(MMC->updateChecker().get(), &UpdateChecker::channelListLoaded, this, &SettingsDialog::refreshUpdateChannelList);
 | 
			
		||||
 | 
			
		||||
	if (MMC->updateChecker()->hasChannels())
 | 
			
		||||
	{
 | 
			
		||||
		refreshUpdateChannelList();
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
		MMC->updateChecker()->updateChanList();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SettingsDialog::~SettingsDialog()
 | 
			
		||||
@@ -197,30 +210,72 @@ void SettingsDialog::on_buttonBox_rejected()
 | 
			
		||||
	MMC->settings()->set("SettingsGeometry", saveGeometry().toBase64());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SettingsDialog::applySettings(SettingsObject *s)
 | 
			
		||||
void SettingsDialog::refreshUpdateChannelList()
 | 
			
		||||
{
 | 
			
		||||
	// Special cases
 | 
			
		||||
	// Stop listening for selection changes. It's going to change a lot while we update it and we don't need to update the
 | 
			
		||||
	// description label constantly.
 | 
			
		||||
	QObject::disconnect(ui->updateChannelComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateChannelSelectionChanged(int)));
 | 
			
		||||
 | 
			
		||||
	// Warn about dev builds.
 | 
			
		||||
	if (!ui->devBuildsCheckBox->isChecked())
 | 
			
		||||
	QList<UpdateChecker::ChannelListEntry> channelList = MMC->updateChecker()->getChannelList();
 | 
			
		||||
	ui->updateChannelComboBox->clear();
 | 
			
		||||
	int selection = -1;
 | 
			
		||||
	for (int i = 0; i < channelList.count(); i++)
 | 
			
		||||
	{
 | 
			
		||||
		s->set("UseDevBuilds", false);
 | 
			
		||||
	}
 | 
			
		||||
	else if (!s->get("UseDevBuilds").toBool())
 | 
			
		||||
	{
 | 
			
		||||
		auto response = CustomMessageBox::selectable(
 | 
			
		||||
			this, tr("Development builds"),
 | 
			
		||||
			tr("Development builds contain experimental features "
 | 
			
		||||
			   "and may be unstable. Are you sure you want to enable them?"),
 | 
			
		||||
			QMessageBox::Question, QMessageBox::Yes | QMessageBox::No)->exec();
 | 
			
		||||
		if (response == QMessageBox::Yes)
 | 
			
		||||
		UpdateChecker::ChannelListEntry entry = channelList.at(i);
 | 
			
		||||
		
 | 
			
		||||
		// When it comes to selection, we'll rely on the indexes of a channel entry being the same in the
 | 
			
		||||
		// combo box as it is in the update checker's channel list.
 | 
			
		||||
		// This probably isn't very safe, but the channel list doesn't change often enough (or at all) for
 | 
			
		||||
		// this to be a big deal. Hope it doesn't break...
 | 
			
		||||
		ui->updateChannelComboBox->addItem(entry.name);
 | 
			
		||||
 | 
			
		||||
		// If the update channel we just added was the selected one, set the current index in the combo box to it.
 | 
			
		||||
		if (entry.id == m_currentUpdateChannel)
 | 
			
		||||
		{
 | 
			
		||||
			s->set("UseDevBuilds", true);
 | 
			
		||||
			QLOG_DEBUG() << "Selected index" << i << "channel id" << m_currentUpdateChannel;
 | 
			
		||||
			selection = i;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	ui->updateChannelComboBox->setCurrentIndex(selection);
 | 
			
		||||
 | 
			
		||||
	// Start listening for selection changes again and update the description label.
 | 
			
		||||
	QObject::connect(ui->updateChannelComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateChannelSelectionChanged(int)));
 | 
			
		||||
	refreshUpdateChannelDesc();
 | 
			
		||||
 | 
			
		||||
	// Now that we've updated the channel list, we can enable the combo box.
 | 
			
		||||
	// It starts off disabled so that if the channel list hasn't been loaded, it will be disabled.
 | 
			
		||||
	ui->updateChannelComboBox->setEnabled(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SettingsDialog::updateChannelSelectionChanged(int index)
 | 
			
		||||
{
 | 
			
		||||
	refreshUpdateChannelDesc();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SettingsDialog::refreshUpdateChannelDesc()
 | 
			
		||||
{
 | 
			
		||||
	// Get the channel list.
 | 
			
		||||
	QList<UpdateChecker::ChannelListEntry> channelList = MMC->updateChecker()->getChannelList();
 | 
			
		||||
	int selectedIndex = ui->updateChannelComboBox->currentIndex();
 | 
			
		||||
	if (selectedIndex < channelList.count())
 | 
			
		||||
	{
 | 
			
		||||
		// Find the channel list entry with the given index.
 | 
			
		||||
		UpdateChecker::ChannelListEntry selected = channelList.at(selectedIndex);
 | 
			
		||||
 | 
			
		||||
		// Set the description text.
 | 
			
		||||
		ui->updateChannelDescLabel->setText(selected.description);
 | 
			
		||||
 | 
			
		||||
		// Set the currently selected channel ID.
 | 
			
		||||
		m_currentUpdateChannel = selected.id;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SettingsDialog::applySettings(SettingsObject *s)
 | 
			
		||||
{
 | 
			
		||||
	// Updates
 | 
			
		||||
	s->set("AutoUpdate", ui->autoUpdateCheckBox->isChecked());
 | 
			
		||||
	s->set("UpdateChannel", m_currentUpdateChannel);
 | 
			
		||||
 | 
			
		||||
	// FTB
 | 
			
		||||
	s->set("TrackFTBInstances", ui->trackFtbBox->isChecked());
 | 
			
		||||
@@ -288,7 +343,7 @@ void SettingsDialog::loadSettings(SettingsObject *s)
 | 
			
		||||
{
 | 
			
		||||
	// Updates
 | 
			
		||||
	ui->autoUpdateCheckBox->setChecked(s->get("AutoUpdate").toBool());
 | 
			
		||||
	ui->devBuildsCheckBox->setChecked(s->get("UseDevBuilds").toBool());
 | 
			
		||||
	m_currentUpdateChannel = s->get("UpdateChannel").toString();
 | 
			
		||||
 | 
			
		||||
	// FTB
 | 
			
		||||
	ui->trackFtbBox->setChecked(s->get("TrackFTBInstances").toBool());
 | 
			
		||||
@@ -392,3 +447,4 @@ void SettingsDialog::checkFinished(JavaCheckResult result)
 | 
			
		||||
			   "or set the path to the java executable."));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,25 @@ slots:
 | 
			
		||||
	void on_javaBrowseBtn_clicked();
 | 
			
		||||
 | 
			
		||||
	void checkFinished(JavaCheckResult result);
 | 
			
		||||
 | 
			
		||||
	/*!
 | 
			
		||||
	 * Updates the list of update channels in the combo box.
 | 
			
		||||
	 */
 | 
			
		||||
	void refreshUpdateChannelList();
 | 
			
		||||
 | 
			
		||||
	/*!
 | 
			
		||||
	 * Updates the channel description label.
 | 
			
		||||
	 */
 | 
			
		||||
	void refreshUpdateChannelDesc();
 | 
			
		||||
 | 
			
		||||
    void updateChannelSelectionChanged(int index);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	Ui::SettingsDialog *ui;
 | 
			
		||||
	std::shared_ptr<JavaChecker> checker;
 | 
			
		||||
 | 
			
		||||
	/*!
 | 
			
		||||
	 * Stores the currently selected update channel.
 | 
			
		||||
	 */
 | 
			
		||||
	QString m_currentUpdateChannel;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>526</width>
 | 
			
		||||
    <height>628</height>
 | 
			
		||||
    <height>639</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="sizePolicy">
 | 
			
		||||
@@ -77,14 +77,7 @@
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Update Settings</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QVBoxLayout" name="updateSettingsBoxLayout">
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="devBuildsCheckBox">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Use development builds?</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         <layout class="QVBoxLayout" name="verticalLayout_7">
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="autoUpdateCheckBox">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
@@ -92,6 +85,31 @@
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item>
 | 
			
		||||
           <layout class="QVBoxLayout" name="channelVerticalLayout">
 | 
			
		||||
            <item>
 | 
			
		||||
             <widget class="QLabel" name="updateChannelLabel">
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string>Update Channel:</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </widget>
 | 
			
		||||
            </item>
 | 
			
		||||
            <item>
 | 
			
		||||
             <widget class="QComboBox" name="updateChannelComboBox">
 | 
			
		||||
              <property name="enabled">
 | 
			
		||||
               <bool>false</bool>
 | 
			
		||||
              </property>
 | 
			
		||||
             </widget>
 | 
			
		||||
            </item>
 | 
			
		||||
            <item>
 | 
			
		||||
             <widget class="QLabel" name="updateChannelDescLabel">
 | 
			
		||||
              <property name="text">
 | 
			
		||||
               <string>No channel selected.</string>
 | 
			
		||||
              </property>
 | 
			
		||||
             </widget>
 | 
			
		||||
            </item>
 | 
			
		||||
           </layout>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
@@ -644,18 +662,25 @@
 | 
			
		||||
  </layout>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <tabstops>
 | 
			
		||||
  <tabstop>settingsTab</tabstop>
 | 
			
		||||
  <tabstop>buttonBox</tabstop>
 | 
			
		||||
  <tabstop>sortLastLaunchedBtn</tabstop>
 | 
			
		||||
  <tabstop>sortByNameBtn</tabstop>
 | 
			
		||||
  <tabstop>devBuildsCheckBox</tabstop>
 | 
			
		||||
  <tabstop>autoUpdateCheckBox</tabstop>
 | 
			
		||||
  <tabstop>trackFtbBox</tabstop>
 | 
			
		||||
  <tabstop>ftbLauncherBox</tabstop>
 | 
			
		||||
  <tabstop>ftbLauncherBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>ftbBox</tabstop>
 | 
			
		||||
  <tabstop>ftbBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>instDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>modsDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>lwjglDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>instDirBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>modsDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>modsDirBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>lwjglDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>lwjglDirBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>iconsDirTextBox</tabstop>
 | 
			
		||||
  <tabstop>iconsDirBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>jsonEditorTextBox</tabstop>
 | 
			
		||||
  <tabstop>jsonEditorBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>maximizedCheckBox</tabstop>
 | 
			
		||||
  <tabstop>windowWidthSpinBox</tabstop>
 | 
			
		||||
  <tabstop>windowHeightSpinBox</tabstop>
 | 
			
		||||
@@ -665,9 +690,13 @@
 | 
			
		||||
  <tabstop>maxMemSpinBox</tabstop>
 | 
			
		||||
  <tabstop>permGenSpinBox</tabstop>
 | 
			
		||||
  <tabstop>javaPathTextBox</tabstop>
 | 
			
		||||
  <tabstop>javaBrowseBtn</tabstop>
 | 
			
		||||
  <tabstop>javaDetectBtn</tabstop>
 | 
			
		||||
  <tabstop>javaTestBtn</tabstop>
 | 
			
		||||
  <tabstop>jvmArgsTextBox</tabstop>
 | 
			
		||||
  <tabstop>preLaunchCmdTextBox</tabstop>
 | 
			
		||||
  <tabstop>postExitCmdTextBox</tabstop>
 | 
			
		||||
  <tabstop>settingsTabs</tabstop>
 | 
			
		||||
 </tabstops>
 | 
			
		||||
 <resources>
 | 
			
		||||
  <include location="../../graphics.qrc"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,8 @@
 | 
			
		||||
#include <QJsonArray>
 | 
			
		||||
#include <QJsonValue>
 | 
			
		||||
 | 
			
		||||
#include <settingsobject.h>
 | 
			
		||||
 | 
			
		||||
#define API_VERSION 0
 | 
			
		||||
#define CHANLIST_FORMAT 0
 | 
			
		||||
 | 
			
		||||
@@ -69,9 +71,8 @@ void UpdateChecker::checkForUpdate(bool notifyNoUpdate)
 | 
			
		||||
 | 
			
		||||
	m_updateChecking = true;
 | 
			
		||||
 | 
			
		||||
	// Get the URL for the channel we're using.
 | 
			
		||||
	// TODO: Allow user to select channels. For now, we'll just use the current channel.
 | 
			
		||||
	QString updateChannel = m_currentChannel;
 | 
			
		||||
	// Get the channel we're checking.
 | 
			
		||||
	QString updateChannel = MMC->settings()->get("UpdateChannel").toString();
 | 
			
		||||
 | 
			
		||||
	// Find the desired channel within the channel list and get its repo URL. If if cannot be
 | 
			
		||||
	// found, error.
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ public:
 | 
			
		||||
	QList<ChannelListEntry> getChannelList() const;
 | 
			
		||||
 | 
			
		||||
	/*!
 | 
			
		||||
	 * Returns true if the channel list is empty.
 | 
			
		||||
	 * Returns false if the channel list is empty.
 | 
			
		||||
	 */
 | 
			
		||||
	bool hasChannels() const;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user