ide: png. editor

git-svn-id: svn://ultimatepp.org/upp/trunk@5072 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2012-06-21 19:25:59 +00:00
parent d768e2a5b0
commit 57a0162305
5 changed files with 212 additions and 209 deletions

View file

@ -0,0 +1,96 @@
#include "IconDes.h"
#include <plugin/bmp/bmp.h>
#include <plugin/png/png.h>
bool IdeIconDes::Load(const char *_filename)
{
Clear();
filename = _filename;
filetime = FileGetTime(filename);
Array<ImlImage> m;
int f;
if(!LoadIml(LoadFile(filename), m, f))
return false;
format = f;
for(int i = 0; i < m.GetCount(); i++)
AddImage(m[i].name, m[i].image, m[i].exp);
return true;
}
void IdeIconDes::Save()
{
if(format == 1) {
for(int i = 0; i < GetCount(); i++) {
Image m = GetImage(i);
Point p = m.Get2ndSpot();
if(m.GetKind() == IMAGE_ALPHA || p.x || p.y) {
if(PromptYesNo("Legacy file format does not support images "
"with full alpha channel or 2nd hotspot - "
"the information would be lost.&"
"Do you wish to convert the file to the new format?")) {
format = 0;
}
break;
}
}
}
StoreToGlobal(*this, "icondes-ctrl");
Array<ImlImage> m;
VectorMap<Size, Image> exp;
String folder = GetFileFolder(filename);
for(int i = 0; i < GetCount(); i++) {
ImlImage& c = m.Add();
c.name = GetName(i);
c.image = GetImage(i);
c.exp = GetExport(i);
if(c.exp) {
Size sz = c.image.GetSize();
exp.GetAdd(sz) = c.image;
PNGEncoder png;
png.SaveFile(AppendFileName(folder, String().Cat() << "icon" << sz.cx << 'x' << sz.cy << ".png"), c.image);
}
}
String d = SaveIml(m, format);
if(!SaveChangedFileFinish(filename, d))
return;
filetime = FileGetTime(filename);
if(exp.GetCount())
SaveFile(AppendFileName(folder, "icon.ico"), WriteIcon(exp.GetValues()));
}
void IdeIconDes::ToolEx(Bar& bar)
{
bar.Separator();
bar.Add("File properties..", IconDesImg::FileProperties(), THISBACK(FileProperties));
}
void IdeIconDes::FileProperties()
{
WithFilePropertiesLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "File properties");
dlg.format <<= format;
if(dlg.Run() == IDOK)
format = ~dlg.format;
}
void IdeIconDes::Serialize(Stream& s)
{
SerializeSettings(s);
}
String IdeIconDes::GetFileName() const
{
return filename;
}
void IdeIconDes::EditMenu(Bar& bar)
{
EditBar(bar);
ToolEx(bar);
bar.Add("List", THISBACK(ListMenu));
bar.Add("Selection", THISBACK(SelectBar));
bar.Add("Image", THISBACK(ImageBar));
bar.Add("Draw", THISBACK(DrawBar));
bar.Add("Settings", THISBACK(SettingBar));
}

View file

@ -29,4 +29,10 @@ struct IdeIconDes : IdeDesigner, IconDes {
IdeIconDes() { format = 0; }
};
struct IdeIconEditPos : IconDes::EditPos, Moveable<IdeIconEditPos> {
Time filetime;
IdeIconEditPos() { filetime = Null; }
};
#endif

View file

@ -6,6 +6,7 @@ uses
file
IconDes.h,
IconDes.cpp,
IdeDes.icpp,
Info readonly separator,
Copying;

View file

@ -1,91 +1,5 @@
#include "IconDes.h"
#include <plugin/bmp/bmp.h>
#include <plugin/png/png.h>
bool IdeIconDes::Load(const char *_filename)
{
Clear();
filename = _filename;
filetime = FileGetTime(filename);
Array<ImlImage> m;
int f;
if(!LoadIml(LoadFile(filename), m, f))
return false;
format = f;
for(int i = 0; i < m.GetCount(); i++)
AddImage(m[i].name, m[i].image, m[i].exp);
return true;
}
void IdeIconDes::Save()
{
if(format == 1) {
for(int i = 0; i < GetCount(); i++) {
Image m = GetImage(i);
Point p = m.Get2ndSpot();
if(m.GetKind() == IMAGE_ALPHA || p.x || p.y) {
if(PromptYesNo("Legacy file format does not support images "
"with full alpha channel or 2nd hotspot - "
"the information would be lost.&"
"Do you wish to convert the file to the new format?")) {
format = 0;
}
break;
}
}
}
StoreToGlobal(*this, "icondes-ctrl");
Array<ImlImage> m;
VectorMap<Size, Image> exp;
String folder = GetFileFolder(filename);
for(int i = 0; i < GetCount(); i++) {
ImlImage& c = m.Add();
c.name = GetName(i);
c.image = GetImage(i);
c.exp = GetExport(i);
if(c.exp) {
Size sz = c.image.GetSize();
exp.GetAdd(sz) = c.image;
PNGEncoder png;
png.SaveFile(AppendFileName(folder, String().Cat() << "icon" << sz.cx << 'x' << sz.cy << ".png"), c.image);
}
}
String d = SaveIml(m, format);
if(!SaveChangedFileFinish(filename, d))
return;
filetime = FileGetTime(filename);
if(exp.GetCount())
SaveFile(AppendFileName(folder, "icon.ico"), WriteIcon(exp.GetValues()));
}
void IdeIconDes::ToolEx(Bar& bar)
{
bar.Separator();
bar.Add("File properties..", IconDesImg::FileProperties(), THISBACK(FileProperties));
}
void IdeIconDes::FileProperties()
{
WithFilePropertiesLayout<TopWindow> dlg;
CtrlLayoutOKCancel(dlg, "File properties");
dlg.format <<= format;
if(dlg.Run() == IDOK)
format = ~dlg.format;
}
void IdeIconDes::Serialize(Stream& s)
{
SerializeSettings(s);
}
struct IdeIconEditPos : IconDes::EditPos, Moveable<IdeIconEditPos> {
Time filetime;
IdeIconEditPos() { filetime = Null; }
};
static VectorMap<String, IdeIconEditPos>& sEP()
{
static VectorMap<String, IdeIconEditPos> x;
@ -133,27 +47,11 @@ void SerializeIconDesPos(Stream& s)
}
}
String IdeIconDes::GetFileName() const
{
return filename;
}
bool IsImlFile(const char *path)
{
return ToLower(GetFileExt(path)) == ".iml";
}
void IdeIconDes::EditMenu(Bar& bar)
{
EditBar(bar);
ToolEx(bar);
bar.Add("List", THISBACK(ListMenu));
bar.Add("Selection", THISBACK(SelectBar));
bar.Add("Image", THISBACK(ImageBar));
bar.Add("Draw", THISBACK(DrawBar));
bar.Add("Settings", THISBACK(SettingBar));
}
struct IconDesModule : public IdeModule {
virtual void CleanUsc() {}
virtual bool ParseUsc(CParser& p) { return false; }

View file

@ -2,6 +2,8 @@
void IdePngDes::Save()
{
if(GetCount())
SaveChangedFile(filename, PNGEncoder().SaveString(GetImage(0)), true);
}
void IdePngDes::Load(const char *_filename)