GH-1031 include icon in exported instance if it is custom

This commit is contained in:
Petr Mrázek
2015-06-01 01:19:12 +02:00
parent 96c497f654
commit 405cea1778
6 changed files with 92 additions and 7 deletions

View File

@@ -28,6 +28,8 @@
#include <QSaveFile>
#include "MMCStrings.h"
#include "SeparatorPrefixTree.h"
#include "Env.h"
#include <icons/IconList.h>
class PackIgnoreProxy : public QSortFilterProxyModel
{
@@ -333,6 +335,51 @@ ExportInstanceDialog::~ExportInstanceDialog()
delete ui;
}
/// Save icon to instance's folder is needed
void SaveIcon(InstancePtr m_instance)
{
auto iconKey = m_instance->iconKey();
auto iconList = ENV.icons();
auto mmcIcon = iconList->icon(iconKey);
if(mmcIcon)
{
bool saveIcon = false;
switch(mmcIcon->type())
{
case MMCIcon::FileBased:
case MMCIcon::Transient:
saveIcon = true;
default:
break;
}
if(saveIcon)
{
auto & image = mmcIcon->m_images[mmcIcon->type()];
auto & icon = image.icon;
auto sizes = icon.availableSizes();
if(sizes.size() == 0)
{
return;
}
auto areaOf = [](QSize size)
{
return size.width() * size.height();
};
QSize largest = sizes[0];
// find variant with largest area
for(auto size: sizes)
{
if(areaOf(largest) < areaOf(size))
{
largest = size;
}
}
auto pixmap = icon.pixmap(largest);
pixmap.save(PathCombine(m_instance->instanceRoot(), iconKey + ".png"));
}
}
}
bool ExportInstanceDialog::doExport()
{
auto name = RemoveInvalidFilenameChars(m_instance->name());
@@ -356,6 +403,8 @@ bool ExportInstanceDialog::doExport()
}
}
SaveIcon(m_instance);
if (!MMCZip::compressDir(output, m_instance->instanceRoot(), name, &proxyModel->blockedPaths()))
{
QMessageBox::warning(this, tr("Error"), tr("Unable to export instance"));

View File

@@ -65,7 +65,7 @@ NewInstanceDialog::NewInstanceDialog(QWidget *parent)
layout()->setSizeConstraint(QLayout::SetFixedSize);
setSelectedVersion(MMC->minecraftlist()->getRecommended(), true);
InstIconKey = "infinity";
InstIconKey = "default";
ui->iconButton->setIcon(ENV.icons()->getIcon(InstIconKey));
ui->modpackEdit->setValidator(new UrlValidator(ui->modpackEdit));

View File

@@ -41,10 +41,6 @@
</item>
<item>
<widget class="QToolButton" name="iconButton">
<property name="icon">
<iconset>
<normaloff>:/icons/instances/infinity</normaloff>:/icons/instances/infinity</iconset>
</property>
<property name="iconSize">
<size>
<width>80</width>