diff --git a/community-resources/src/idea/IdeaApplicationInfo.xml b/community-resources/src/idea/IdeaApplicationInfo.xml
index 32319c5a4ac1..d3bbd42ad90f 100644
--- a/community-resources/src/idea/IdeaApplicationInfo.xml
+++ b/community-resources/src/idea/IdeaApplicationInfo.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/tools/launcher-generator/.idea/compiler.xml b/tools/launcher-generator/.idea/compiler.xml
index b22c943f13ac..2e800cb0d801 100644
--- a/tools/launcher-generator/.idea/compiler.xml
+++ b/tools/launcher-generator/.idea/compiler.xml
@@ -14,6 +14,7 @@
+
diff --git a/tools/launcher-generator/.idea/libraries/guava_12_0.xml b/tools/launcher-generator/.idea/libraries/guava_12_0.xml
new file mode 100644
index 000000000000..3ccd7bb7e2f7
--- /dev/null
+++ b/tools/launcher-generator/.idea/libraries/guava_12_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tools/launcher-generator/.idea/modules.xml b/tools/launcher-generator/.idea/modules.xml
index 1927ae044a55..002e747e9a7f 100644
--- a/tools/launcher-generator/.idea/modules.xml
+++ b/tools/launcher-generator/.idea/modules.xml
@@ -3,6 +3,7 @@
+
diff --git a/tools/launcher-generator/launcher-generator.iml b/tools/launcher-generator/launcher-generator.iml
index a358b2136eea..37938cabae08 100644
--- a/tools/launcher-generator/launcher-generator.iml
+++ b/tools/launcher-generator/launcher-generator.iml
@@ -10,6 +10,8 @@
+
+
diff --git a/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java b/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java
index c4e8cf7c43dc..55eea2c56aaf 100644
--- a/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java
+++ b/tools/launcher-generator/src/com/pme/exe/res/icon/IconFile.java
@@ -21,10 +21,7 @@ import com.pme.exe.Bin;
import com.pme.exe.res.Level;
import com.pme.exe.res.LevelEntry;
-import java.io.DataInput;
-import java.io.IOException;
-import java.io.File;
-import java.io.RandomAccessFile;
+import java.io.*;
/**
* Date: Apr 27, 2006
@@ -62,12 +59,11 @@ public class IconFile extends Bin.Structure {
try {
super.read(stream);
Word idCount = (Word) ((Bin.Structure) getMember("Header")).getMember("idCount");
- ArrayOfBins iconDirs = new ArrayOfBins("Icon directories", IconDirectory.class, idCount);
+ ArrayOfBins iconDirs = new ArrayOfBins("Icon directories", IconDirectory.class, idCount);
iconDirs.setCountHolder(idCount);
addMember(myImages);
Bin[] array = iconDirs.getArray();
- for (int i = 0; i < array.length; i++) {
- Bin bin = array[i];
+ for (Bin bin : array) {
myImages.addLevelEntry((LevelEntry) bin);
}
myImages.read(stream);
diff --git a/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java b/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java
index 2366f8e757c3..8bc8dc8071d2 100644
--- a/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java
+++ b/tools/launcher-generator/src/com/pme/exe/res/icon/IconResourceInjector.java
@@ -17,13 +17,10 @@
package com.pme.exe.res.icon;
-import com.pme.exe.res.*;
import com.pme.exe.Bin;
+import com.pme.exe.res.*;
-import java.io.File;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
+import java.io.*;
import java.util.ArrayList;
/**
diff --git a/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java b/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java
index 5b43c35b9aab..df4a1d6e68ab 100644
--- a/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java
+++ b/tools/launcher-generator/src/com/pme/launcher/LauncherGenerator.java
@@ -17,6 +17,8 @@
package com.pme.launcher;
+import com.google.common.io.Files;
+import com.google.common.io.InputSupplier;
import com.pme.exe.Bin;
import com.pme.exe.ExeReader;
import com.pme.exe.SectionReader;
@@ -36,11 +38,11 @@ import java.io.*;
*/
public class LauncherGenerator {
private File myTemplate;
- private File myIcon;
private File myExePath;
private StringTableDirectory myStringTableDirectory;
private DirectoryEntry myRoot;
private ExeReader myReader;
+ private VersionInfo myVersionInfo;
public LauncherGenerator(File template, File exePath) {
myTemplate = template;
@@ -58,22 +60,17 @@ public class LauncherGenerator {
myRoot = resourceReader.getRoot();
DirectoryEntry subDir = myRoot.findSubDir("IRD6");
myStringTableDirectory = new StringTableDirectory(subDir);
- }
-
- public void generate() throws IOException {
- myStringTableDirectory.save();
-
- if (myIcon != null) {
- IconResourceInjector iconInjector = new IconResourceInjector();
- iconInjector.injectIcon(myIcon, myRoot, "IRD101");
- }
DirectoryEntry viDir = myRoot.findSubDir("IRD16").findSubDir( "IRD1" );
Bin.Bytes viBytes = viDir.getRawResource( 0 ).getBytes();
ByteArrayInputStream bytesStream = new ByteArrayInputStream(viBytes.getBytes());
- VersionInfo viReader = new VersionInfo();
- viReader.read(new OffsetTrackingInputStream(new DataInputStream(bytesStream)));
+ myVersionInfo = new VersionInfo();
+ myVersionInfo.read(new OffsetTrackingInputStream(new DataInputStream(bytesStream)));
+ }
+
+ public void generate() throws IOException {
+ myStringTableDirectory.save();
myReader.resetOffsets(0);
@@ -93,4 +90,16 @@ public class LauncherGenerator {
RawResource bmpRes = subDirBmp.getRawResource(0);
bmpRes.setBytes(bitmapData);
}
+
+ public void injectIcon(String name, final InputStream iconStream) throws IOException {
+ File f = File.createTempFile("launcher", "ico");
+ Files.copy(new InputSupplier() {
+ @Override
+ public InputStream getInput() throws IOException {
+ return iconStream;
+ }
+ }, f);
+ IconResourceInjector iconInjector = new IconResourceInjector();
+ iconInjector.injectIcon(f, myRoot, "IRD101");
+ }
}
diff --git a/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java b/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java
index b08f4dc6b824..d903e6357a4d 100644
--- a/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java
+++ b/tools/launcher-generator/src/com/pme/launcher/LauncherGeneratorMain.java
@@ -56,7 +56,7 @@ public class LauncherGeneratorMain {
try {
appInfo = new SAXBuilder().build(appInfoStream);
} catch (Exception e) {
- System.err.println("Error loading application info file " + appInfoStream + ": " + e.getMessage());
+ System.err.println("Error loading application info file " + args[1] + ": " + e.getMessage());
System.exit(4);
return;
}
@@ -81,6 +81,17 @@ public class LauncherGeneratorMain {
System.exit(6);
}
+ String icoUrl = appInfo.getRootElement().getChild("icon").getAttributeValue("ico");
+ if (icoUrl == null) {
+ System.err.println(".ico file URL not specified in application info file " + args[1]);
+ System.exit(11);
+ }
+ InputStream iconStream = LauncherGeneratorMain.class.getClassLoader().getResourceAsStream(icoUrl);
+ if (iconStream == null) {
+ System.err.println(".ico file " + icoUrl + " not found");
+ System.exit(12);
+ }
+
Map resourceIDs;
try {
resourceIDs = loadResourceIDs(args[2]);
@@ -121,6 +132,7 @@ public class LauncherGeneratorMain {
}
generator.injectBitmap(resourceIDs.get("IDB_SPLASH"), splashBmpStream.toByteArray());
+ generator.injectIcon(icoUrl, iconStream);
generator.generate();
} catch (IOException e) {