package rabbitescape.ui.swing; import static rabbitescape.engine.i18n.Translation.*; import static rabbitescape.ui.swing.SwingConfigSetup.*; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.LayoutManager; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JToggleButton; import rabbitescape.engine.config.Config; import rabbitescape.engine.config.ConfigTools; import rabbitescape.render.BitmapCache; class SideMenu { private static final int ICON_SIZE = 32; public final JToggleButton mute; public final JButton back; public final JButton exit; private final BitmapCache<SwingBitmap> bitmapCache; private final Color backgroundColor; private final Dimension buttonSizeInPixels; private final JPanel panel; public SideMenu( Container contentPane, BitmapCache<SwingBitmap> bitmapCache, Dimension buttonSizeInPixels, Config uiConfig, Color backgroundColor ) { this.bitmapCache = bitmapCache; this.backgroundColor = backgroundColor; this.buttonSizeInPixels = buttonSizeInPixels; this.panel = createPanel( contentPane ); this.mute = addToggleButton( "menu_unmuted", "menu_muted", ConfigTools.getBool( uiConfig, CFG_MUTED ), t( "Mute" ) ); addSpacer(); this.back = addButton( "menu_back", t( "Back" ) ); addSpacer(); this.exit = addButton( "menu_exit", t( "Exit" ) ); panel.setPreferredSize( new Dimension( 8 + buttonSizeInPixels.width, ( 2 * 16 ) // Spacers + ( 3 * ( 16 + buttonSizeInPixels.height ) ) // Buttons ) ); addPanelInScrollPane( contentPane ); } private void addPanelInScrollPane( Container contentPane ) { JScrollPane scrollPane = new JScrollPane( panel ); scrollPane.getVerticalScrollBar().setUnitIncrement( 16 ); contentPane.add( scrollPane, BorderLayout.WEST ); } private JPanel createPanel( Container contentPane ) { LayoutManager layout = new FlowLayout( FlowLayout.CENTER, 4, 4 ); JPanel ret = new JPanel( layout ); ret.setBackground( backgroundColor ); ret.setPreferredSize( new Dimension( buttonSizeInPixels.width + 8, -1 ) ); return ret; } private void addSpacer() { JPanel spacer = new JPanel(); spacer.setBackground( backgroundColor ); panel.add( spacer ); } private JToggleButton addToggleButton( String unSelectedImage, String selectedImage, boolean selected, String description ) { JToggleButton button = new JToggleButton( getIcon( unSelectedImage ) ); button.setBackground( backgroundColor ); button.setBorderPainted( false ); button.setSelected( selected ); button.setToolTipText( description ); if ( selectedImage != null ) { button.setSelectedIcon( getIcon( selectedImage ) ); } panel.add( button ); return button; } private JButton addButton( String image, String description ) { JButton button = new JButton( getIcon( image ) ); button.setBackground( backgroundColor ); button.setBorderPainted( false ); button.setToolTipText( description ); panel.add( button ); return button; } private ImageIcon getIcon( String name ) { return new ImageIcon( bitmapCache.get( name, ICON_SIZE ).image ); } }