/* * Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved. * * This Source Code Form is subject to the terms of the Mozilla Public * License, version 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This Source Code Form is "Incompatible With Secondary Licenses", as * defined by the Mozilla Public License, version 2.0. */ package com.trollworks.gcs.app; import com.trollworks.gcs.advantage.AdvantageList; import com.trollworks.gcs.character.GURPSCharacter; import com.trollworks.gcs.equipment.EquipmentList; import com.trollworks.gcs.notes.NoteList; import com.trollworks.gcs.skill.SkillList; import com.trollworks.gcs.spell.SpellList; import com.trollworks.gcs.template.Template; import com.trollworks.toolkit.ui.RetinaIcon; import com.trollworks.toolkit.ui.image.StdImage; import com.trollworks.toolkit.ui.image.StdImageSet; import com.trollworks.toolkit.utility.BundleInfo; import com.trollworks.toolkit.utility.FileType; import com.trollworks.toolkit.utility.cmdline.CmdLine; import com.trollworks.toolkit.utility.cmdline.CmdLineOption; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.jar.Attributes; /** Provides standardized image access. */ @SuppressWarnings("nls") public class GCSImages { static { StdImage.addLocation(GCSImages.class.getResource("images/")); //$NON-NLS-1$ } public static final RetinaIcon getGCalcLogo() { return new RetinaIcon("gcalc_logo"); } /** @return The exotic type icon. */ public static final RetinaIcon getExoticTypeIcon() { return new RetinaIcon("exotic_type"); } /** @return The mental type icon. */ public static final RetinaIcon getMentalTypeIcon() { return new RetinaIcon("mental_type"); } /** @return The physical type icon. */ public static final RetinaIcon getPhysicalTypeIcon() { return new RetinaIcon("physical_type"); } /** @return The social type icon. */ public static final RetinaIcon getSocialTypeIcon() { return new RetinaIcon("social_type"); } /** @return The supernatural type icon. */ public static final RetinaIcon getSupernaturalTypeIcon() { return new RetinaIcon("supernatural_type"); } /** @return The 'about' image. */ public static final StdImage getAbout() { return StdImage.get("about"); } /** @return The application icons. */ public static final StdImageSet getAppIcons() { return StdImageSet.getOrLoad("app"); } /** @return The character sheet icons. */ public static final StdImageSet getCharacterSheetIcons() { return StdImageSet.getOrLoad(GURPSCharacter.EXTENSION); } /** @return The character template icons. */ public static final StdImageSet getTemplateIcons() { return StdImageSet.getOrLoad(Template.EXTENSION); } /** @return The advantages icons. */ public static final StdImageSet getAdvantagesIcons() { return StdImageSet.getOrLoad(AdvantageList.EXTENSION); } /** @return The skills icons. */ public static final StdImageSet getSkillsIcons() { return StdImageSet.getOrLoad(SkillList.EXTENSION); } /** @return The spells icons. */ public static final StdImageSet getSpellsIcons() { return StdImageSet.getOrLoad(SpellList.EXTENSION); } /** @return The equipment icons. */ public static final StdImageSet getEquipmentIcons() { return StdImageSet.getOrLoad(EquipmentList.EXTENSION); } /** @return The note icons. */ public static final StdImageSet getNoteIcons() { return StdImageSet.getOrLoad(NoteList.EXTENSION); } /** @return The character sheet icons. */ public static final StdImageSet getCharacterSheetDocumentIcons() { return getDocumentIcons(GURPSCharacter.EXTENSION); } /** @return The character template icons. */ public static final StdImageSet getTemplateDocumentIcons() { return getDocumentIcons(Template.EXTENSION); } /** @return The advantages icons. */ public static final StdImageSet getAdvantagesDocumentIcons() { return getDocumentIcons(AdvantageList.EXTENSION); } /** @return The skills icons. */ public static final StdImageSet getSkillsDocumentIcons() { return getDocumentIcons(SkillList.EXTENSION); } /** @return The spells icons. */ public static final StdImageSet getSpellsDocumentIcons() { return getDocumentIcons(SpellList.EXTENSION); } /** @return The equipment icons. */ public static final StdImageSet getEquipmentDocumentIcons() { return getDocumentIcons(EquipmentList.EXTENSION); } /** @return The note icons. */ public static final StdImageSet getNoteDocumentIcons() { return getDocumentIcons(NoteList.EXTENSION); } /** @return The PDF icons. */ public static final StdImageSet getPDFDocumentIcons() { return getDocumentIcons(FileType.PDF_EXTENSION); } private static StdImageSet getDocumentIcons(String prefix) { String name = prefix + "_doc"; StdImageSet set = StdImageSet.get(name); if (set == null) { set = new StdImageSet(name, StdImageSet.getOrLoad("document"), StdImageSet.getOrLoad(prefix)); } return set; } /** Utility for creating GCS's icon sets. */ public static void main(String[] args) { String name = "GenerateIcons"; Attributes attributes = new Attributes(); attributes.putValue(BundleInfo.BUNDLE_NAME, name); attributes.putValue(BundleInfo.BUNDLE_VERSION, "1.0"); attributes.putValue(BundleInfo.BUNDLE_COPYRIGHT_OWNER, "Richard A. Wilkes"); attributes.putValue(BundleInfo.BUNDLE_COPYRIGHT_YEARS, "2014"); attributes.putValue(BundleInfo.BUNDLE_LICENSE, "Mozilla Public License 2.0"); BundleInfo.setDefault(new BundleInfo(attributes, name)); CmdLineOption icnsOption = new CmdLineOption("Generate ICNS files", null, "icns"); CmdLineOption icoOption = new CmdLineOption("Generate ICO files", null, "ico"); CmdLineOption appOption = new CmdLineOption("Generate just the 128x128 app icon", null, "app"); CmdLineOption dirOption = new CmdLineOption("The directory to place the generated files into", "DIR", "dir"); CmdLine cmdline = new CmdLine(); cmdline.addOptions(icnsOption, icoOption, appOption, dirOption); cmdline.processArguments(args); boolean icns = cmdline.isOptionUsed(icnsOption); boolean ico = cmdline.isOptionUsed(icoOption); boolean app = cmdline.isOptionUsed(appOption); if (!icns && !ico && !app) { System.err.printf("At least one of %s, %s, or %s must be specified.\n", icnsOption, icoOption, appOption); System.exit(1); } try { File dir = new File(cmdline.isOptionUsed(dirOption) ? cmdline.getOptionArgument(dirOption) : "."); System.out.println("Generating icons into " + dir); dir.mkdirs(); if (app) { File file = new File(dir, "gcs.png"); if (StdImage.writePNG(file, getAppIcons().getImage(128), 72)) { System.out.println("Created: " + file); } else { System.err.println("Unable to create: " + file); } } if (icns || ico) { createIconFiles(getAppIcons(), dir, "app", icns, ico); createIconFiles(getAdvantagesDocumentIcons(), dir, AdvantageList.EXTENSION, icns, ico); createIconFiles(getEquipmentDocumentIcons(), dir, EquipmentList.EXTENSION, icns, ico); createIconFiles(getCharacterSheetDocumentIcons(), dir, GURPSCharacter.EXTENSION, icns, ico); createIconFiles(getTemplateDocumentIcons(), dir, Template.EXTENSION, icns, ico); createIconFiles(getSkillsDocumentIcons(), dir, SkillList.EXTENSION, icns, ico); createIconFiles(getSpellsDocumentIcons(), dir, SpellList.EXTENSION, icns, ico); createIconFiles(getPDFDocumentIcons(), dir, FileType.PDF_EXTENSION, icns, ico); } } catch (Exception exception) { exception.printStackTrace(System.err); } } private static void createIconFiles(StdImageSet set, File dir, String name, boolean generateICNS, boolean generateICO) throws IOException { for (int size : StdImageSet.STD_SIZES) { set.getImage(size); } File file; if (generateICNS) { file = new File(dir, name + ".icns"); try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file))) { set.saveAsIcns(out); System.out.println("Created: " + file); } } if (generateICO) { file = new File(dir, name + ".ico"); try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file))) { set.saveAsIco(out); System.out.println("Created: " + file); } } } }