NOISSUE improve icon handling while importing and exporting instances
Now it handles formats other than png.
This commit is contained in:
		@@ -343,43 +343,37 @@ void SaveIcon(InstancePtr m_instance)
 | 
			
		||||
    auto iconKey = m_instance->iconKey();
 | 
			
		||||
    auto iconList = MMC->icons();
 | 
			
		||||
    auto mmcIcon = iconList->icon(iconKey);
 | 
			
		||||
    if(mmcIcon)
 | 
			
		||||
    if(!mmcIcon || mmcIcon->isBuiltIn()) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    auto path = mmcIcon->getFilePath();
 | 
			
		||||
    if(!path.isNull()) {
 | 
			
		||||
        QFileInfo inInfo (path);
 | 
			
		||||
        FS::copy(path, FS::PathCombine(m_instance->instanceRoot(), inInfo.fileName())) ();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    auto & image = mmcIcon->m_images[mmcIcon->type()];
 | 
			
		||||
    auto & icon = image.icon;
 | 
			
		||||
    auto sizes = icon.availableSizes();
 | 
			
		||||
    if(sizes.size() == 0)
 | 
			
		||||
    {
 | 
			
		||||
        bool saveIcon = false;
 | 
			
		||||
        switch(mmcIcon->type())
 | 
			
		||||
        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))
 | 
			
		||||
        {
 | 
			
		||||
            case IconType::FileBased:
 | 
			
		||||
            case IconType::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(FS::PathCombine(m_instance->instanceRoot(), iconKey + ".png"));
 | 
			
		||||
            largest = size;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    auto pixmap = icon.pixmap(largest);
 | 
			
		||||
    pixmap.save(FS::PathCombine(m_instance->instanceRoot(), iconKey + ".png"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ExportInstanceDialog::doExport()
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@
 | 
			
		||||
#include "groupview/InstanceDelegate.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/IconList.h"
 | 
			
		||||
#include "icons/IconUtils.h"
 | 
			
		||||
#include <DesktopServices.h>
 | 
			
		||||
 | 
			
		||||
IconPickerDialog::IconPickerDialog(QWidget *parent)
 | 
			
		||||
@@ -103,8 +104,8 @@ void IconPickerDialog::addNewIcon()
 | 
			
		||||
    //: The title of the select icons open file dialog
 | 
			
		||||
    QString selectIcons = tr("Select Icons");
 | 
			
		||||
    //: The type of icon files
 | 
			
		||||
    QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(),
 | 
			
		||||
                                                          tr("Icons") + "(*.png *.jpg *.jpeg *.ico *.svg *.gif)");
 | 
			
		||||
    auto filter = IconUtils::getIconFilter();
 | 
			
		||||
    QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(), tr("Icons %1").arg(filter));
 | 
			
		||||
    MMC->icons()->installIcons(fileNames);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user