summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-12-31 01:24:28 +0100
committerPetr Mrázek <peterix@gmail.com>2013-12-31 01:32:51 +0100
commit952b63f68de93e8acf7aab81373661dae8d5098b (patch)
treea3be2560a2c34f8827a37998c7baa5a525dde22f /gui
parentc44bcfab4bf4f25a7f39d6154fc366db4c0fcfbc (diff)
downloadMultiMC-952b63f68de93e8acf7aab81373661dae8d5098b.tar
MultiMC-952b63f68de93e8acf7aab81373661dae8d5098b.tar.gz
MultiMC-952b63f68de93e8acf7aab81373661dae8d5098b.tar.lz
MultiMC-952b63f68de93e8acf7aab81373661dae8d5098b.tar.xz
MultiMC-952b63f68de93e8acf7aab81373661dae8d5098b.zip
Refactor icon lists heavily
* Icon list now uses a filesystem watcher for updates * Icon folder is user-customizable * All the little details. ALL OF THEM.
Diffstat (limited to 'gui')
-rw-r--r--gui/MainWindow.cpp31
-rw-r--r--gui/MainWindow.h6
-rw-r--r--gui/dialogs/CopyInstanceDialog.cpp2
-rw-r--r--gui/dialogs/IconPickerDialog.cpp2
-rw-r--r--gui/dialogs/NewInstanceDialog.cpp2
-rw-r--r--gui/dialogs/SettingsDialog.cpp14
-rw-r--r--gui/dialogs/SettingsDialog.h3
-rw-r--r--gui/dialogs/SettingsDialog.ui23
8 files changed, 69 insertions, 14 deletions
diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp
index d16226eb..2ba0d509 100644
--- a/gui/MainWindow.cpp
+++ b/gui/MainWindow.cpp
@@ -66,7 +66,7 @@
#include "logic/lists/InstanceList.h"
#include "logic/lists/MinecraftVersionList.h"
#include "logic/lists/LwjglVersionList.h"
-#include "logic/lists/IconList.h"
+#include "logic/icons/IconList.h"
#include "logic/lists/JavaVersionList.h"
#include "logic/auth/flows/AuthenticateTask.h"
@@ -165,6 +165,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
connect(view->selectionModel(),
SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this,
SLOT(instanceChanged(const QModelIndex &, const QModelIndex &)));
+
+ // track icon changes and update the toolbar!
+ connect(MMC->icons().get(), SIGNAL(iconUpdated(QString)), SLOT(iconUpdated(QString)));
+
// model reset -> selection is invalid. All the instance pointers are wrong.
// FIXME: stop using POINTERS everywhere
connect(MMC->instances().get(), SIGNAL(dataIsInvalid()), SLOT(selectionBad()));
@@ -635,11 +639,27 @@ void MainWindow::on_actionChangeInstIcon_triggered()
if (dlg.result() == QDialog::Accepted)
{
m_selectedInstance->setIconKey(dlg.selectedIconKey);
+ /*
auto ico = MMC->icons()->getIcon(dlg.selectedIconKey);
ui->actionChangeInstIcon->setIcon(ico);
+ */
+ }
+}
+
+void MainWindow::iconUpdated(QString icon)
+{
+ if(icon == m_currentInstIcon)
+ {
+ ui->actionChangeInstIcon->setIcon(MMC->icons()->getIcon(m_currentInstIcon));
}
}
+void MainWindow::updateInstanceToolIcon(QString new_icon)
+{
+ m_currentInstIcon = new_icon;
+ ui->actionChangeInstIcon->setIcon(MMC->icons()->getIcon(m_currentInstIcon));
+}
+
void MainWindow::on_actionChangeInstGroup_triggered()
{
if (!m_selectedInstance)
@@ -1095,7 +1115,6 @@ void MainWindow::instanceChanged(const QModelIndex &current, const QModelIndex &
.value<void *>()))
{
ui->instanceToolBar->setEnabled(true);
- QString iconKey = m_selectedInstance->iconKey();
renameButton->setText(m_selectedInstance->name());
ui->actionChangeInstLWJGLVersion->setEnabled(
m_selectedInstance->menuActionEnabled("actionChangeInstLWJGLVersion"));
@@ -1104,8 +1123,7 @@ void MainWindow::instanceChanged(const QModelIndex &current, const QModelIndex &
ui->actionChangeInstMCVersion->setEnabled(
m_selectedInstance->menuActionEnabled("actionChangeInstMCVersion"));
m_statusLeft->setText(m_selectedInstance->getStatusbarDescription());
- auto ico = MMC->icons()->getIcon(iconKey);
- ui->actionChangeInstIcon->setIcon(ico);
+ updateInstanceToolIcon(m_selectedInstance->iconKey());
MMC->settings()->set("SelectedInstance", m_selectedInstance->id());
}
@@ -1120,12 +1138,11 @@ void MainWindow::instanceChanged(const QModelIndex &current, const QModelIndex &
void MainWindow::selectionBad()
{
m_selectedInstance = nullptr;
- QString iconKey = "infinity";
+
statusBar()->clearMessage();
ui->instanceToolBar->setEnabled(false);
renameButton->setText(tr("Rename Instance"));
- auto ico = MMC->icons()->getIcon(iconKey);
- ui->actionChangeInstIcon->setIcon(ico);
+ updateInstanceToolIcon("infinity");
}
void MainWindow::on_actionEditInstNotes_triggered()
diff --git a/gui/MainWindow.h b/gui/MainWindow.h
index befe93e6..007c2e34 100644
--- a/gui/MainWindow.h
+++ b/gui/MainWindow.h
@@ -145,6 +145,9 @@ slots:
void assetsFailed();
void assetsFinished();
+ // called when an icon is changed in the icon model.
+ void iconUpdated(QString);
+
public
slots:
void instanceActivated(QModelIndex);
@@ -171,6 +174,7 @@ slots:
protected:
bool eventFilter(QObject *obj, QEvent *ev);
void setCatBackground(bool enabled);
+ void updateInstanceToolIcon(QString new_icon);
private:
Ui::MainWindow *ui;
@@ -180,9 +184,9 @@ private:
MinecraftProcess *proc;
ConsoleWindow *console;
LabeledToolButton *renameButton;
- QToolButton *changeIconButton;
BaseInstance *m_selectedInstance;
+ QString m_currentInstIcon;
Task *m_versionLoadTask;
diff --git a/gui/dialogs/CopyInstanceDialog.cpp b/gui/dialogs/CopyInstanceDialog.cpp
index 9d7ac30c..4095408b 100644
--- a/gui/dialogs/CopyInstanceDialog.cpp
+++ b/gui/dialogs/CopyInstanceDialog.cpp
@@ -27,7 +27,7 @@
#include "logic/InstanceFactory.h"
#include "logic/BaseVersion.h"
-#include "logic/lists/IconList.h"
+#include "logic/icons/IconList.h"
#include "logic/lists/MinecraftVersionList.h"
#include "logic/tasks/Task.h"
#include "logic/BaseInstance.h"
diff --git a/gui/dialogs/IconPickerDialog.cpp b/gui/dialogs/IconPickerDialog.cpp
index 99d6dc9a..cb832d95 100644
--- a/gui/dialogs/IconPickerDialog.cpp
+++ b/gui/dialogs/IconPickerDialog.cpp
@@ -25,7 +25,7 @@
#include "gui/Platform.h"
#include "gui/widgets/InstanceDelegate.h"
-#include "logic/lists/IconList.h"
+#include "logic/icons/IconList.h"
IconPickerDialog::IconPickerDialog(QWidget *parent)
: QDialog(parent), ui(new Ui::IconPickerDialog)
diff --git a/gui/dialogs/NewInstanceDialog.cpp b/gui/dialogs/NewInstanceDialog.cpp
index 5b2cd086..c7b273af 100644
--- a/gui/dialogs/NewInstanceDialog.cpp
+++ b/gui/dialogs/NewInstanceDialog.cpp
@@ -19,7 +19,7 @@
#include "logic/InstanceFactory.h"
#include "logic/BaseVersion.h"
-#include "logic/lists/IconList.h"
+#include "logic/icons/IconList.h"
#include "logic/lists/MinecraftVersionList.h"
#include "logic/tasks/Task.h"
diff --git a/gui/dialogs/SettingsDialog.cpp b/gui/dialogs/SettingsDialog.cpp
index 30a973da..569c8f63 100644
--- a/gui/dialogs/SettingsDialog.cpp
+++ b/gui/dialogs/SettingsDialog.cpp
@@ -102,6 +102,18 @@ void SettingsDialog::on_instDirBrowseBtn_clicked()
ui->instDirTextBox->setText(cooked_dir);
}
}
+void SettingsDialog::on_iconsDirBrowseBtn_clicked()
+{
+ QString raw_dir = QFileDialog::getExistingDirectory(this, tr("Icons Directory"),
+ ui->iconsDirTextBox->text());
+ QString cooked_dir = NormalizePath(raw_dir);
+
+ // do not allow current dir - it's dirty. Do not allow dirs that don't exist
+ if (!cooked_dir.isEmpty() && QDir(cooked_dir).exists())
+ {
+ ui->iconsDirTextBox->setText(cooked_dir);
+ }
+}
void SettingsDialog::on_modsDirBrowseBtn_clicked()
{
@@ -205,6 +217,7 @@ void SettingsDialog::applySettings(SettingsObject *s)
s->set("InstanceDir", ui->instDirTextBox->text());
s->set("CentralModsDir", ui->modsDirTextBox->text());
s->set("LWJGLDir", ui->lwjglDirTextBox->text());
+ s->set("IconsDir", ui->iconsDirTextBox->text());
// Editors
QString jsonEditor = ui->jsonEditorTextBox->text();
@@ -271,6 +284,7 @@ void SettingsDialog::loadSettings(SettingsObject *s)
ui->instDirTextBox->setText(s->get("InstanceDir").toString());
ui->modsDirTextBox->setText(s->get("CentralModsDir").toString());
ui->lwjglDirTextBox->setText(s->get("LWJGLDir").toString());
+ ui->iconsDirTextBox->setText(s->get("IconsDir").toString());
// Editors
ui->jsonEditorTextBox->setText(s->get("JsonEditor").toString());
diff --git a/gui/dialogs/SettingsDialog.h b/gui/dialogs/SettingsDialog.h
index 01357c91..bcf57a80 100644
--- a/gui/dialogs/SettingsDialog.h
+++ b/gui/dialogs/SettingsDialog.h
@@ -55,8 +55,11 @@ slots:
void on_lwjglDirBrowseBtn_clicked();
+
void on_jsonEditorBrowseBtn_clicked();
+ void on_iconsDirBrowseBtn_clicked();
+
void on_maximizedCheckBox_clicked(bool checked);
void on_buttonBox_accepted();
diff --git a/gui/dialogs/SettingsDialog.ui b/gui/dialogs/SettingsDialog.ui
index ec4d156e..dbc8ca88 100644
--- a/gui/dialogs/SettingsDialog.ui
+++ b/gui/dialogs/SettingsDialog.ui
@@ -215,6 +215,9 @@
<item row="1" column="1">
<widget class="QLineEdit" name="modsDirTextBox"/>
</item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="lwjglDirTextBox"/>
+ </item>
<item row="1" column="2">
<widget class="QToolButton" name="modsDirBrowseBtn">
<property name="text">
@@ -229,9 +232,6 @@
</property>
</widget>
</item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="lwjglDirTextBox"/>
- </item>
<item row="2" column="2">
<widget class="QToolButton" name="lwjglDirBrowseBtn">
<property name="text">
@@ -239,6 +239,23 @@
</property>
</widget>
</item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="iconsDirTextBox"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="labelIconsDir">
+ <property name="text">
+ <string>Icons:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QToolButton" name="iconsDirBrowseBtn">
+ <property name="text">
+ <string>...</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>