package kakuro.gui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.Shape;
import java.util.HashMap;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRootPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import kakuro.server.IServer;
/** A Skeleton szerkesztő és a főképernyő őse, közös szolgáltatásokat tartalmazza. */
public class GuiAncestor {
/** JFrame */
protected JFrame _frame = null;
/** toolbar */
protected JToolBar _toolbar = null;
/** szerver */
protected IServer _server = null;
/** nemcsinálsemmit dummy action */
protected Action nothingAction;
/** Menüsor */
protected JMenuBar _menubar = null;
/** Gombokat tartalmazó map, név alapján tartalmazza őket */
protected HashMap<String, AbstractButton> _buttonMap = new HashMap<String, AbstractButton>();
/** Alap konstruktor */
public GuiAncestor() {
super();
}
/** Kapott képet a kapott komponensre rárajzolja, ha kisebb a kép, mint a komponens, akkor mozaikszerűen
* ismételve.
*
* @param g grafika
* @param me dekorálandó komponens
* @param image kép
* */
protected void drawTile(Graphics g, JComponent me, Image image) {
int tileHeight = image.getHeight(me);
int tileWidth = image.getWidth(me);
Rectangle rb = new Rectangle(0, 0, 1, 1);
me.getBounds(rb);
Insets ri = new Insets(0, 0, 0, 0);
Insets riv = me.getInsets(ri);
rb.translate(riv.left, riv.top);
rb.width -= (riv.left + riv.right);
rb.height -= (riv.top + riv.bottom);
Shape ccache = g.getClip();
g.clipRect(rb.x, rb.y, rb.width, rb.height);
int xp, yp;
for (yp = rb.y; yp < rb.y + rb.height; yp += tileHeight) {
for (xp = rb.x; xp < rb.x + rb.width; xp += tileWidth) {
g.drawImage(image, xp, yp, Color.WHITE, null);
}
}
g.setClip(ccache);
}
/** Action-öket betölt a toolbar-ba.
*
* @param actions action-ök tömbje
* */
protected void loadIntoToolbar(GuiAction[] actions) {
JButton button = null;
for (int i = 0; i < actions.length; i++) {
button = new JButton(actions[i]);
button.setOpaque(false);
button.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
button.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
if (button.getIcon() != null) {
//button.setText("");
}
_toolbar.add(button);
registerAction(actions[i]);
_buttonMap.put(actions[i].getDescription(), button);
}
}
/** Kapott action-t beregisztrálja a különféle input map-ekbe.
*
* @param a action
* */
protected void registerAction(Action a) {
Object o = new Object();
KeyStroke key = (KeyStroke) a.getValue(Action.ACCELERATOR_KEY);
_frame.getRootPane().getInputMap(
JRootPane.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(key, o);
_frame.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW).put(
key, o);
_frame.getRootPane().getActionMap().put(o, a);
}
/** Kapott action-öket belepakolja a kapott JMenu menübe
*
* @param actions action-ök
* @param menu menü
* */
protected void loadIntoMenu(Action[] actions, JMenu menu) {
JMenuItem menuitem = null;
for (int i = 0; i < actions.length; i++) {
menuitem = new JMenuItem(actions[i]);
menuitem.setIcon(((GuiAction) actions[i]).getSmallIcon());
menuitem.setMnemonic(((GuiAction) actions[i]).getMnemonic()
.intValue());
menu.add(menuitem);
}
}
/** Dummy teszt függvény, tesztelésre. */
protected void nothingAction() {
}
}