package com.quiltplayer.view.swing.frame; import java.awt.Component; import java.awt.Toolkit; import java.awt.event.ComponentEvent; import javax.annotation.PostConstruct; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import net.miginfocom.layout.PlatformDefaults; import net.miginfocom.swing.MigLayout; import org.jdesktop.jxlayer.JXGlassPane; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import com.quiltplayer.external.covers.model.ImageSizes; import com.quiltplayer.model.Album; import com.quiltplayer.properties.Configuration; import com.quiltplayer.utils.ClassPathUtils; import com.quiltplayer.view.swing.ActiveView; import com.quiltplayer.view.swing.ColorConstantsDark; import com.quiltplayer.view.swing.panels.UtilityPanel; import com.quiltplayer.view.swing.panels.controlpanels.AlbumControlPanel; import com.quiltplayer.view.swing.panels.controlpanels.AlfabeticControlPane; import com.quiltplayer.view.swing.panels.controlpanels.ControlPanel; import com.quiltplayer.view.swing.panels.controlpanels.PlayerControlPanel; import com.quiltplayer.view.swing.panels.utility.LyricsUtilityPanel; import com.quiltplayer.view.swing.util.MigProperties; import com.quiltplayer.view.swing.util.ScreenUtils; import com.quiltplayer.view.swing.views.ArtistView; import com.quiltplayer.view.swing.views.ListView; import com.quiltplayer.view.swing.views.View; import com.quiltplayer.view.swing.views.impl.ConfigurationView; import com.quiltplayer.view.swing.window.Keyboard; /** * Main Frame for QuiltPlayer. * * @author Vlado Palczynski */ @org.springframework.stereotype.Component() public class QuiltPlayerFrame extends JFrame { private static final long serialVersionUID = 1L; private Configuration config = Configuration.getInstance(); @Autowired @Qualifier("defaultAlbumView") private ListView<Album> albumView; @Autowired private View searchView; @Autowired @Qualifier("quiltView") private ListView<Album> quiltView; @Autowired @Qualifier("wikiView") private View wikiView; @Autowired @Qualifier("albumArtView") private View albumArtView; @Autowired @Qualifier("defaultArtistView") private ArtistView artistView; @Autowired private ConfigurationView configurationView; @Autowired private View aboutView; @Autowired private ControlPanel controlPanel; private JComponent ui; private ActiveView currentView = ActiveView.ABOUT; @Autowired private Keyboard keyboardPanel; @Autowired public LyricsUtilityPanel lyricsPlaylistPanel; @Autowired private AlfabeticControlPane alfabeticControlPane; @Autowired private AlbumControlPanel albumControlPanel; @Autowired private PlayerControlPanel playerControlPanel; private JPanel glassPane; @Autowired private UtilityPanel utilityPanel; public QuiltPlayerFrame() { setTitle("QuiltPlayer"); setIconImage(ClassPathUtils.getIconFromClasspath("icon/quilticon.gif").getImage()); float swingDPI = Toolkit.getDefaultToolkit().getScreenResolution(); float migDPI = PlatformDefaults.getDefaultDPI(); float scaleFactor = migDPI / swingDPI; System.out.println("Screen size: " + Toolkit.getDefaultToolkit().getScreenSize()); System.out.println("ImageSize large: " + ImageSizes.LARGE.getSize()); System.out.println("ScaleFactor: " + scaleFactor); System.out.println("Large image size in px: " + ImageSizes.LARGE.getSize()); // PlatformDefaults.setHorizontalScaleFactor(scaleFactor); // PlatformDefaults.setVerticalScaleFactor(scaleFactor); PlatformDefaults.setDefaultDPI((int) swingDPI); System.out.println("DPI from PlatformDefaults: " + PlatformDefaults.getDefaultDPI()); System.out.println("DPI from Tookit: " + Toolkit.getDefaultToolkit().getScreenResolution()); getContentPane().setLayout(new MigLayout("fill")); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); ScreenUtils.setScreensize(this); } @PostConstruct public void init() { setupGridGlassPane(); ui = aboutView.getUI(); this.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(ComponentEvent e) { if (!Configuration.getInstance().isFullScreen()) Configuration.getInstance().setSavedDimensionOnFrame(getSize()); repaintComponentsIfResizeAware(); } }); getContentPane().setBackground(ColorConstantsDark.BACKGROUND); updateUI(); } private void setupGridGlassPane() { setGlassPane(new JXGlassPane()); // setGlassPane(new JXGlassPane() { // private static final long serialVersionUID = 1L; // // /* // * (non-Javadoc) // * // * @see org.jdesktop.jxlayer.JXGlassPane#contains(int, int) // */ // @Override // public boolean contains(int x, int y) { // if (y > this.getHeight() - 150) // playerControlPanel.show(); // else // playerControlPanel.hide(); // // return super.contains(x, y); // } // // }); glassPane = (JXGlassPane) this.getGlassPane(); glassPane.setLayout(new MigLayout("insets 0, fill")); glassPane.add(controlPanel, "west, w 1.7cm!"); glassPane.add(albumControlPanel, "east, w 1.7cm!"); glassPane.add(utilityPanel, "east, h 100%"); // glassPane.add(playerControlPanel, "south, wmax 4cm, hmax 4cm, alignx right"); playerControlPanel.show(); glassPane.add(keyboardPanel, "south, alignx center"); glassPane.setVisible(true); } public Component getUI() { return ui; } public void setUI(JComponent ui) { this.ui = ui; } public void updateUI(ActiveView view) { currentView = view; updateUI(); } public void updateUI() { if (ui != null) { remove(ui); glassPane.remove(alfabeticControlPane); } if (currentView.equals(ActiveView.QUILT)) { ui = quiltView.getUI(); addAlfabeticControlPanel(); } else if (currentView.equals(ActiveView.WIKI)) { ui = wikiView.getUI(); } else if (currentView.equals(ActiveView.COVERS)) { ui = albumArtView.getUI(); } else if (currentView.equals(ActiveView.ARTISTS)) { ui = artistView.getUI(); } else if (currentView.equals(ActiveView.ALBUMS)) { ui = albumView.getUI(); controlPanel.updateTab(null); } else if (currentView.equals(ActiveView.SEARCH)) { ui = searchView.getUI(); } else if (currentView.equals(ActiveView.CONFIGURATION)) { ui = configurationView.getUI(); } else if (currentView.equals(ActiveView.ABOUT)) { ui = aboutView.getUI(); } if (currentView.equals(ActiveView.COVERS)) getContentPane().add(ui, "h 100%, w 100%, gapx 0 0"); else if (utilityPanel.playlistPanelVisible) getContentPane().add(ui, "h 100%, w 100%, gapx 0cm " + MigProperties.PLAYLIST_PANEL_WIDTH + "cm"); else getContentPane().add(ui, "h 100%, w 100%, gapx 0cm 0cm"); ui.updateUI(); repaint(); SwingUtilities.updateComponentTreeUI(ui); } private void addAlfabeticControlPanel() { glassPane.add(alfabeticControlPane, "north, h 1.2cm!, gapy 0.75cm"); } public ActiveView getCurrentView() { return currentView; } public Configuration getConfigurationProperties() { return config; } public View getAboutView() { return aboutView; } public View getSearchView() { return searchView; } /** * @param searchView * the searchView to set */ public final void setSearchView(View searchView) { this.searchView = searchView; } protected void repaintComponentsIfResizeAware() { // if (albumPlaylistPanel != null) // albumPlaylistPanel.updateUI(); updateUI(); } public JPanel getUtilityPanel() { return utilityPanel; } public void repaintUi() { ui.repaint(); } }