package org.herac.tuxguitar.gui.system.icons;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Resource;
import org.herac.tuxguitar.gui.TuxGuitar;
import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
import org.herac.tuxguitar.gui.util.TGFileUtils;
import org.herac.tuxguitar.song.models.TGDuration;
public class IconManager {
private Image aboutAuthors;
private Image aboutDescription;
private Image aboutLicense;
private Image appIcon;
private Image appSplash;
private Image browserBack;
private Image browserFile;
private Image browserFolder;
private Image browserNew;
private Image browserRefresh;
private Image browserRoot;
private Image chord;
private Image compositionRepeatAlternative;
private Image compositionRepeatClose;
private Image compositionRepeatOpen;
private Image compositionTempo;
private Image compositionTimeSignature;
private List<Image> disposableIcons;
private Image divisionType;
private Image durationDotted;
private Image durationDoubleDotted;
private Image[] durations;
private Image dynamicF;
private Image dynamicFF;
private Image dynamicFFF;
private Image dynamicMF;
private Image dynamicMP;
private Image dynamicP;
private Image dynamicPP;
private Image dynamicPPP;
private Image editModeEdition;
private Image editModeEditionNotNatural;
private Image editModeSelection;
private Image editRedo;
private Image editUndo;
private Image editVoice1;
private Image editVoice2;
private Image effectAccentuated;
private Image effectBend;
private Image effectDead;
private Image effectFadeIn;
private Image effectGhost;
private Image effectGrace;
private Image effectHammer;
private Image effectHarmonic;
private Image effectHeavyAccentuated;
private Image effectPalmMute;
private Image effectPopping;
private Image effectSlapping;
private Image effectSlide;
private Image effectStaccato;
private Image effectTapping;
private Image effectTremoloBar;
private Image effectTremoloPicking;
private Image effectTrill;
private Image effectVibrato;
private Image fileNew;
private Image fileOpen;
private Image filePrint;
private Image filePrintPreview;
private Image fileSave;
private Image fileSaveAs;
private Image fretboard;
private Image fretboardFirstFret;
private Image fretboardFret;
private Image layoutCompact;
private Image layoutLinear;
private Image layoutMultitrack;
private Image layoutPage;
private Image layoutScore;
private List<IconLoader> loaders;
private Image markerAdd;
private Image markerFirst;
private Image markerLast;
private Image markerList;
private Image markerNext;
private Image markerPrevious;
private Image markerRemove;
private Image mixer;
private Image noteTied;
private Image optionLanguage;
private Image optionMain;
private Image optionSkin;
private Image optionSound;
private Image optionStyle;
private Image optionToolbars;
private Image paintableGrace;
private Image paintableTempo;
private Image settings;
private Image songProperties;
private String theme;
private Image trackAdd;
private Image trackRemove;
private Image transport;
private Image transportFirst1;
private Image transportFirst2;
private Image transportIconFirst1;
private Image transportIconFirst2;
private Image transportIconLast1;
private Image transportIconLast2;
private Image transportIconNext1;
private Image transportIconNext2;
private Image transportIconPause;
private Image transportIconPlay1;
private Image transportIconPlay2;
private Image transportIconPrevious1;
private Image transportIconPrevious2;
private Image transportIconStop1;
private Image transportIconStop2;
private Image transportLast1;
private Image transportLast2;
private Image transportMetronome;
private Image transportMode;
private Image transportNext1;
private Image transportNext2;
private Image transportPause;
private Image transportPlay1;
private Image transportPlay2;
private Image transportPrevious1;
private Image transportPrevious2;
private Image transportStop1;
private Image transportStop2;
public IconManager() {
this.loaders = new ArrayList<IconLoader>();
this.disposableIcons = new ArrayList<Image>();
this.loadIcons();
}
public void addLoader(IconLoader loader) {
if (!this.loaders.contains(loader)) {
this.loaders.add(loader);
}
}
public void disposeIcons() {
this.disposeIcons(purgeDisposableIcons());
}
public void disposeIcons(List<Resource> resources) {
for (final Resource image: resources) {
image.dispose();
}
}
private void fireChanges() {
for (final IconLoader loader : this.loaders) {
loader.loadIcons();
}
}
public Image getAboutAuthors() {
return this.aboutAuthors;
}
public Image getAboutDescription() {
return this.aboutDescription;
}
public Image getAboutLicense() {
return this.aboutLicense;
}
public Image getAppIcon() {
return this.appIcon;
}
public Image getAppSplash() {
return this.appSplash;
}
public Image getBrowserBack() {
return this.browserBack;
}
public Image getBrowserFile() {
return this.browserFile;
}
public Image getBrowserFolder() {
return this.browserFolder;
}
public Image getBrowserNew() {
return this.browserNew;
}
public Image getBrowserRefresh() {
return this.browserRefresh;
}
public Image getBrowserRoot() {
return this.browserRoot;
}
public Image getChord() {
return this.chord;
}
public Image getCompositionRepeatAlternative() {
return this.compositionRepeatAlternative;
}
public Image getCompositionRepeatClose() {
return this.compositionRepeatClose;
}
public Image getCompositionRepeatOpen() {
return this.compositionRepeatOpen;
}
public Image getCompositionTempo() {
return this.compositionTempo;
}
public Image getCompositionTimeSignature() {
return this.compositionTimeSignature;
}
public Image getDivisionType() {
return this.divisionType;
}
public Image getDuration(int value) {
switch (value) {
case TGDuration.WHOLE:
return this.durations[0];
case TGDuration.HALF:
return this.durations[1];
case TGDuration.QUARTER:
return this.durations[2];
case TGDuration.EIGHTH:
return this.durations[3];
case TGDuration.SIXTEENTH:
return this.durations[4];
case TGDuration.THIRTY_SECOND:
return this.durations[5];
case TGDuration.SIXTY_FOURTH:
return this.durations[6];
}
return null;
}
public Image getDurationDotted() {
return this.durationDotted;
}
public Image getDurationDoubleDotted() {
return this.durationDoubleDotted;
}
public Image getDynamicF() {
return this.dynamicF;
}
public Image getDynamicFF() {
return this.dynamicFF;
}
public Image getDynamicFFF() {
return this.dynamicFFF;
}
public Image getDynamicMF() {
return this.dynamicMF;
}
public Image getDynamicMP() {
return this.dynamicMP;
}
public Image getDynamicP() {
return this.dynamicP;
}
public Image getDynamicPP() {
return this.dynamicPP;
}
public Image getDynamicPPP() {
return this.dynamicPPP;
}
public Image getEditModeEdition() {
return this.editModeEdition;
}
public Image getEditModeEditionNotNatural() {
return this.editModeEditionNotNatural;
}
public Image getEditModeSelection() {
return this.editModeSelection;
}
public Image getEditRedo() {
return this.editRedo;
}
public Image getEditUndo() {
return this.editUndo;
}
public Image getEditVoice1() {
return this.editVoice1;
}
public Image getEditVoice2() {
return this.editVoice2;
}
public Image getEffectAccentuated() {
return this.effectAccentuated;
}
public Image getEffectBend() {
return this.effectBend;
}
public Image getEffectDead() {
return this.effectDead;
}
public Image getEffectFadeIn() {
return this.effectFadeIn;
}
public Image getEffectGhost() {
return this.effectGhost;
}
public Image getEffectGrace() {
return this.effectGrace;
}
public Image getEffectHammer() {
return this.effectHammer;
}
public Image getEffectHarmonic() {
return this.effectHarmonic;
}
public Image getEffectHeavyAccentuated() {
return this.effectHeavyAccentuated;
}
public Image getEffectPalmMute() {
return this.effectPalmMute;
}
public Image getEffectPopping() {
return this.effectPopping;
}
public Image getEffectSlapping() {
return this.effectSlapping;
}
public Image getEffectSlide() {
return this.effectSlide;
}
public Image getEffectStaccato() {
return this.effectStaccato;
}
public Image getEffectTapping() {
return this.effectTapping;
}
public Image getEffectTremoloBar() {
return this.effectTremoloBar;
}
public Image getEffectTremoloPicking() {
return this.effectTremoloPicking;
}
public Image getEffectTrill() {
return this.effectTrill;
}
public Image getEffectVibrato() {
return this.effectVibrato;
}
public Image getFileNew() {
return this.fileNew;
}
public Image getFileOpen() {
return this.fileOpen;
}
public Image getFilePrint() {
return this.filePrint;
}
public Image getFilePrintPreview() {
return this.filePrintPreview;
}
public Image getFileSave() {
return this.fileSave;
}
public Image getFileSaveAs() {
return this.fileSaveAs;
}
public Image getFretboard() {
return this.fretboard;
}
public Image getFretboardFirstFret() {
return this.fretboardFirstFret;
}
public Image getFretboardFret() {
return this.fretboardFret;
}
public Image getLayoutCompact() {
return this.layoutCompact;
}
public Image getLayoutLinear() {
return this.layoutLinear;
}
public Image getLayoutMultitrack() {
return this.layoutMultitrack;
}
public Image getLayoutPage() {
return this.layoutPage;
}
public Image getLayoutScore() {
return this.layoutScore;
}
public Image getMarkerAdd() {
return this.markerAdd;
}
public Image getMarkerFirst() {
return this.markerFirst;
}
public Image getMarkerLast() {
return this.markerLast;
}
public Image getMarkerList() {
return this.markerList;
}
public Image getMarkerNext() {
return this.markerNext;
}
public Image getMarkerPrevious() {
return this.markerPrevious;
}
public Image getMarkerRemove() {
return this.markerRemove;
}
public Image getMixer() {
return this.mixer;
}
public Image getNoteTied() {
return this.noteTied;
}
public Image getOptionLanguage() {
return this.optionLanguage;
}
public Image getOptionMain() {
return this.optionMain;
}
public Image getOptionSkin() {
return this.optionSkin;
}
public Image getOptionSound() {
return this.optionSound;
}
public Image getOptionStyle() {
return this.optionStyle;
}
public Image getOptionToolbars() {
return this.optionToolbars;
}
public Image getPaintableGrace() {
return this.paintableGrace;
}
public Image getPaintableTempo() {
return this.paintableTempo;
}
public Image getSettings() {
return this.settings;
}
public Image getSongProperties() {
return this.songProperties;
}
public Image getTrackAdd() {
return this.trackAdd;
}
public Image getTrackRemove() {
return this.trackRemove;
}
public Image getTransport() {
return this.transport;
}
public Image getTransportFirst1() {
return this.transportFirst1;
}
public Image getTransportFirst2() {
return this.transportFirst2;
}
public Image getTransportIconFirst1() {
return this.transportIconFirst1;
}
public Image getTransportIconFirst2() {
return this.transportIconFirst2;
}
public Image getTransportIconLast1() {
return this.transportIconLast1;
}
public Image getTransportIconLast2() {
return this.transportIconLast2;
}
public Image getTransportIconNext1() {
return this.transportIconNext1;
}
public Image getTransportIconNext2() {
return this.transportIconNext2;
}
public Image getTransportIconPause() {
return this.transportIconPause;
}
public Image getTransportIconPlay1() {
return this.transportIconPlay1;
}
public Image getTransportIconPlay2() {
return this.transportIconPlay2;
}
public Image getTransportIconPrevious1() {
return this.transportIconPrevious1;
}
public Image getTransportIconPrevious2() {
return this.transportIconPrevious2;
}
public Image getTransportIconStop1() {
return this.transportIconStop1;
}
public Image getTransportIconStop2() {
return this.transportIconStop2;
}
public Image getTransportLast1() {
return this.transportLast1;
}
public Image getTransportLast2() {
return this.transportLast2;
}
public Image getTransportMetronome() {
return this.transportMetronome;
}
public Image getTransportMode() {
return this.transportMode;
}
public Image getTransportNext1() {
return this.transportNext1;
}
public Image getTransportNext2() {
return this.transportNext2;
}
public Image getTransportPause() {
return this.transportPause;
}
public Image getTransportPlay1() {
return this.transportPlay1;
}
public Image getTransportPlay2() {
return this.transportPlay2;
}
public Image getTransportPrevious1() {
return this.transportPrevious1;
}
public Image getTransportPrevious2() {
return this.transportPrevious2;
}
public Image getTransportStop1() {
return this.transportStop1;
}
public Image getTransportStop2() {
return this.transportStop2;
}
private Image loadIcon(String name) {
Image image = TGFileUtils.loadImage(this.theme, name);
this.disposableIcons.add(image);
return image;
}
public void loadIcons() {
this.theme = TuxGuitar.instance().getConfig().getStringConfigValue(
TGConfigKeys.SKIN);
this.durations = new Image[] { loadIcon("1.png"), loadIcon("2.png"),
loadIcon("4.png"), loadIcon("8.png"), loadIcon("16.png"),
loadIcon("32.png"), loadIcon("64.png") };
this.paintableTempo = loadIcon("tempo.png");
this.paintableGrace = loadIcon("grace.png");
this.layoutPage = loadIcon("layout_page.png");
this.layoutLinear = loadIcon("layout_linear.png");
this.layoutMultitrack = loadIcon("layout_multitrack.png");
this.layoutScore = loadIcon("layout_score.png");
this.layoutCompact = loadIcon("layout_compact.png");
this.fileNew = loadIcon("new.png");
this.fileOpen = loadIcon("open.png");
this.fileSave = loadIcon("save.png");
this.fileSaveAs = loadIcon("save-as.png");
this.filePrint = loadIcon("print.png");
this.filePrintPreview = loadIcon("print-preview.png");
this.editUndo = loadIcon("edit_undo.png");
this.editRedo = loadIcon("edit_redo.png");
this.editVoice1 = loadIcon("edit_voice_1.png");
this.editVoice2 = loadIcon("edit_voice_2.png");
this.editModeSelection = loadIcon("edit_mode_selection.png");
this.editModeEdition = loadIcon("edit_mode_edition.png");
this.editModeEditionNotNatural = loadIcon("edit_mode_edition_no_natural.png");
this.appIcon = loadIcon("icon.png");
this.appSplash = loadIcon("splash.png");
this.aboutDescription = loadIcon("about_description.png");
this.aboutLicense = loadIcon("about_license.png");
this.aboutAuthors = loadIcon("about_authors.png");
this.optionMain = loadIcon("option_view.png");
this.optionStyle = loadIcon("option_style.png");
this.optionSound = loadIcon("option_sound.png");
this.optionSkin = loadIcon("option_skin.png");
this.optionLanguage = loadIcon("option_language.png");
this.optionToolbars = loadIcon("option_toolbars.png");
this.compositionTimeSignature = loadIcon("timesignature.png");
this.compositionTempo = loadIcon("tempoicon.png");
this.compositionRepeatOpen = loadIcon("openrepeat.png");
this.compositionRepeatClose = loadIcon("closerepeat.png");
this.compositionRepeatAlternative = loadIcon("repeat_alternative.png");
this.songProperties = loadIcon("song_properties.png");
this.trackAdd = loadIcon("track_add.png");
this.trackRemove = loadIcon("track_remove.png");
this.durationDotted = loadIcon("dotted.png");
this.durationDoubleDotted = loadIcon("doubledotted.png");
this.divisionType = loadIcon("division-type.png");
this.fretboard = loadIcon("fretboard.png");
this.fretboardFirstFret = loadIcon("firstfret.png");
this.fretboardFret = loadIcon("fret.png");
this.chord = loadIcon("chord.png");
this.noteTied = loadIcon("tiednote.png");
this.transport = loadIcon("transport.png");
this.transportFirst1 = loadIcon("transport_first_1.png");
this.transportFirst2 = loadIcon("transport_first_2.png");
this.transportLast1 = loadIcon("transport_last_1.png");
this.transportLast2 = loadIcon("transport_last_2.png");
this.transportPrevious1 = loadIcon("transport_previous_1.png");
this.transportPrevious2 = loadIcon("transport_previous_2.png");
this.transportNext1 = loadIcon("transport_next_1.png");
this.transportNext2 = loadIcon("transport_next_2.png");
this.transportStop1 = loadIcon("transport_stop_1.png");
this.transportStop2 = loadIcon("transport_stop_2.png");
this.transportPlay1 = loadIcon("transport_play_1.png");
this.transportPlay2 = loadIcon("transport_play_2.png");
this.transportPause = loadIcon("transport_pause.png");
this.transportIconFirst1 = loadIcon("transport_icon_first_1.png");
this.transportIconFirst2 = loadIcon("transport_icon_first_2.png");
this.transportIconLast1 = loadIcon("transport_icon_last_1.png");
this.transportIconLast2 = loadIcon("transport_icon_last_2.png");
this.transportIconPrevious1 = loadIcon("transport_icon_previous_1.png");
this.transportIconPrevious2 = loadIcon("transport_icon_previous_2.png");
this.transportIconNext1 = loadIcon("transport_icon_next_1.png");
this.transportIconNext2 = loadIcon("transport_icon_next_2.png");
this.transportIconStop1 = loadIcon("transport_icon_stop_1.png");
this.transportIconStop2 = loadIcon("transport_icon_stop_2.png");
this.transportIconPlay1 = loadIcon("transport_icon_play_1.png");
this.transportIconPlay2 = loadIcon("transport_icon_play_2.png");
this.transportIconPause = loadIcon("transport_icon_pause.png");
this.transportMetronome = loadIcon("transport_metronome.png");
this.transportMode = loadIcon("transport_mode.png");
this.markerList = loadIcon("marker_list.png");
this.markerAdd = loadIcon("marker_add.png");
this.markerRemove = loadIcon("marker_remove.png");
this.markerFirst = loadIcon("marker_first.png");
this.markerLast = loadIcon("marker_last.png");
this.markerPrevious = loadIcon("marker_previous.png");
this.markerNext = loadIcon("marker_next.png");
this.mixer = loadIcon("mixer.png");
this.dynamicPPP = loadIcon("dynamic_ppp.png");
this.dynamicPP = loadIcon("dynamic_pp.png");
this.dynamicP = loadIcon("dynamic_p.png");
this.dynamicMP = loadIcon("dynamic_mp.png");
this.dynamicMF = loadIcon("dynamic_mf.png");
this.dynamicF = loadIcon("dynamic_f.png");
this.dynamicFF = loadIcon("dynamic_ff.png");
this.dynamicFFF = loadIcon("dynamic_fff.png");
this.effectDead = loadIcon("effect_dead.png");
this.effectGhost = loadIcon("effect_ghost.png");
this.effectAccentuated = loadIcon("effect_accentuated.png");
this.effectHeavyAccentuated = loadIcon("effect_heavy_accentuated.png");
this.effectHarmonic = loadIcon("effect_harmonic.png");
this.effectGrace = loadIcon("effect_grace.png");
this.effectBend = loadIcon("effect_bend.png");
this.effectTremoloBar = loadIcon("effect_tremolo_bar.png");
this.effectSlide = loadIcon("effect_slide.png");
this.effectHammer = loadIcon("effect_hammer.png");
this.effectVibrato = loadIcon("effect_vibrato.png");
this.effectTrill = loadIcon("effect_trill.png");
this.effectTremoloPicking = loadIcon("effect_tremolo_picking.png");
this.effectPalmMute = loadIcon("effect_palm_mute.png");
this.effectStaccato = loadIcon("effect_staccato.png");
this.effectTapping = loadIcon("effect_tapping.png");
this.effectSlapping = loadIcon("effect_slapping.png");
this.effectPopping = loadIcon("effect_popping.png");
this.effectFadeIn = loadIcon("effect_fade_in.png");
this.browserNew = loadIcon("browser_new.png");
this.browserFile = loadIcon("browser_file.png");
this.browserFolder = loadIcon("browser_folder.png");
this.browserRoot = loadIcon("browser_root.png");
this.browserBack = loadIcon("browser_back.png");
this.browserRefresh = loadIcon("browser_refresh.png");
this.settings = loadIcon("settings.png");
}
private List<Resource> purgeDisposableIcons() {
List<Resource> disposableIcons = new ArrayList<Resource>();
for (final Resource resource : this.disposableIcons) {
disposableIcons.add(resource);
}
this.disposableIcons.clear();
return disposableIcons;
}
public void reloadIcons() {
List<Resource> disposableIcons = purgeDisposableIcons();
this.loadIcons();
this.fireChanges();
this.disposeIcons(disposableIcons);
}
public void removeLoader(IconLoader loader) {
if (this.loaders.contains(loader)) {
this.loaders.remove(loader);
}
}
public boolean shouldReload() {
return (!this.theme.equals(TuxGuitar.instance().getConfig()
.getStringConfigValue(TGConfigKeys.SKIN)));
}
}