diff --git a/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java b/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java new file mode 100644 index 0000000000..f2a10884a1 --- /dev/null +++ b/Mage.Client/src/main/java/org/mage/plugins/theme/ThemePluginImpl.java @@ -0,0 +1,210 @@ +package org.mage.plugins.theme; + +import mage.components.ImagePanel; +import mage.interfaces.plugin.ThemePlugin; +import mage.client.dialog.PreferencesDialog; +import net.xeoh.plugins.base.annotations.PluginImplementation; +import net.xeoh.plugins.base.annotations.events.Init; +import net.xeoh.plugins.base.annotations.events.PluginLoaded; +import net.xeoh.plugins.base.annotations.meta.Author; +import org.apache.log4j.Logger; + +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.*; +import java.io.InputStream; +import java.util.Map; + +@PluginImplementation +@Author(name = "nantuko") +public class ThemePluginImpl implements ThemePlugin { + + private static final Logger log = Logger.getLogger(ThemePluginImpl.class); + private static BufferedImage background; + private List flist = new List(); + private String BackgroundDir = "plugins" + File.separator + "plugin.data" + File.separator + + "background" + File.separator; + @Init + public void init() { + } + + @PluginLoaded + public void newPlugin(ThemePlugin plugin) { + log.info(plugin.toString() + " has been loaded."); + } + + public String toString() { + return "[Theme plugin, version 0.5]"; + } + + public boolean loadimages(){ + File filedir = new File(BackgroundDir); + File[] filelist = filedir.listFiles(); + if(filelist == null) return false; + if(filelist.length == 0) return false; + for(File f:filelist){ + String filename = f.getName().toLowerCase(); + if(filename != null && (filename.endsWith(".png") || filename.endsWith(".jpg") + || filename.endsWith(".bmp"))){ + flist.add(filename); + } + } + if(flist.getItemCount() == 0) return false; + return true; + } + + public void applyInGame(Map<String, JComponent> ui) { + BufferedImage background; + try { + + if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_DEFAULT, + "true").equals("true")){ + + background = loadbuffer_default(); + + }else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE_RANDOM, + "true").equals("true")){ + + background = loadbuffer_random(); + + }else if(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_BATTLEFIELD_IMAGE, "") != null){ + + background = loadbuffer_selected(); + + }else{ + background = loadbuffer_default(); + } + + + + /* + if(loadimages()){ + int it = (int)Math.abs(Math.random()*(flist.getItemCount())); + filename = BackgroundDir + flist.getItem(it); + background = ImageIO.read(new File(filename)); + }else{ + filename = "/dragon.png"; + InputStream is = this.getClass().getResourceAsStream(filename); + if (is == null) + throw new FileNotFoundException("Couldn't find " + filename + " in resources."); + background = ImageIO.read(is); + } + */ + if (background == null) { + throw new FileNotFoundException("Couldn't find background file in resources."); + } + + if (ui.containsKey("gamePanel") && ui.containsKey("jLayeredPane")) { + ImagePanel bgPanel = new ImagePanel(background, ImagePanel.TILED); + + unsetOpaque(ui.get("jSplitPane1")); + unsetOpaque(ui.get("pnlBattlefield")); + unsetOpaque(ui.get("jPanel3")); + unsetOpaque(ui.get("hand")); + unsetOpaque(ui.get("gameChatPanel")); + unsetOpaque(ui.get("userChatPanel")); + + ui.get("gamePanel").remove(ui.get("jLayeredPane")); + bgPanel.add(ui.get("jLayeredPane")); + ui.get("gamePanel").add(bgPanel); + } else { + log.error("error: no components"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + return; + } + } + + + private BufferedImage loadbuffer_default() throws IOException{ + String filename = "/dragon.png"; + BufferedImage res; + InputStream is = this.getClass().getResourceAsStream(filename); + res = ImageIO.read(is); + return res; + } + + private BufferedImage loadbuffer_random() throws IOException{ + BufferedImage res; + if(loadimages()){ + int it = (int)Math.abs(Math.random()*(flist.getItemCount())); + String filename = BackgroundDir + flist.getItem(it); + res = ImageIO.read(new File(filename)); + return res; + } + return null; + } + + private BufferedImage loadbuffer_selected() throws IOException{ + BufferedImage res; + String path = PreferencesDialog.getCachedValue(PreferencesDialog. + KEY_BATTLEFIELD_IMAGE, ""); + if(path != null){ + res = ImageIO.read(new File(path)); + return res; + } + return null; + } + + + public JComponent updateTable(Map<String, JComponent> ui) { + ImagePanel bgPanel = createImagePanelInstance(); + + unsetOpaque(ui.get("jScrollPane1")); + unsetOpaque(ui.get("jPanel1")); + unsetOpaque(ui.get("tablesPanel")); + JComponent viewport = ui.get("jScrollPane1ViewPort"); + if (viewport != null) { + viewport.setBackground(new Color(255,255,255,50)); + } + return bgPanel; + } + + private ImagePanel createImagePanelInstance() { + if (background == null) { + synchronized (ThemePluginImpl.class) { + if (background == null) { + String filename = "/background.png"; + try { + if(PreferencesDialog.getCachedValue(PreferencesDialog. + KEY_BACKGROUND_IMAGE_DEFAULT, "true").equals("true")){ + InputStream is = this.getClass().getResourceAsStream(filename); + if (is == null) + throw new FileNotFoundException("Couldn't find " + filename + " in resources."); + background = ImageIO.read(is); + }else if(PreferencesDialog.getCachedValue(PreferencesDialog. + KEY_BACKGROUND_IMAGE, "") != null){ + String path = PreferencesDialog.getCachedValue(PreferencesDialog. + KEY_BATTLEFIELD_IMAGE, ""); + if(path != null){ + background = ImageIO.read(new File(path)); + }else{ + InputStream is = this.getClass().getResourceAsStream(filename); + if (is == null) + throw new FileNotFoundException("Couldn't find " + filename + " in resources."); + background = ImageIO.read(is); + } + } + + if (background == null) + throw new FileNotFoundException("Couldn't find " + filename + " in resources."); + } catch (Exception e) { + log.error(e.getMessage(), e); + return null; + } + } + } + } + return new ImagePanel(background, ImagePanel.SCALED); + } + + private void unsetOpaque(JComponent c) { + if (c != null) { + c.setOpaque(false); + } + } +} diff --git a/Mage.Client/src/main/resources/background.png b/Mage.Client/src/main/resources/background.png new file mode 100644 index 0000000000..01acc151f2 Binary files /dev/null and b/Mage.Client/src/main/resources/background.png differ diff --git a/Mage.Client/src/main/resources/dk_gray.jpg b/Mage.Client/src/main/resources/dk_gray.jpg new file mode 100644 index 0000000000..2e0776d606 Binary files /dev/null and b/Mage.Client/src/main/resources/dk_gray.jpg differ diff --git a/Mage.Client/src/main/resources/dragon.png b/Mage.Client/src/main/resources/dragon.png new file mode 100644 index 0000000000..634f56c21c Binary files /dev/null and b/Mage.Client/src/main/resources/dragon.png differ diff --git a/Mage.Client/src/main/resources/green.jpg b/Mage.Client/src/main/resources/green.jpg new file mode 100644 index 0000000000..f570525329 Binary files /dev/null and b/Mage.Client/src/main/resources/green.jpg differ