/* * JavaXYQ Source Code * by kylixs * at 2010-5-9 * please visit http://javaxyq.googlecode.com * or mail to kylixs@qq.com */ package com.javaxyq.tools.maker; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import javax.swing.AbstractListModel; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JToolBar; import javax.swing.ListModel; import javax.swing.SwingConstants; import javax.swing.ToolTipManager; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.plaf.BorderUIResource; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.FontUIResource; import org.jdesktop.application.Action; import org.jdesktop.application.FrameView; import com.javaxyq.ui.RoundLineBorder; import com.javaxyq.util.UIUtils; import com.jidesoft.icons.JideIconsFactory; import com.jidesoft.plaf.LookAndFeelFactory; import com.jidesoft.plaf.UIDefaultsLookup; import com.jidesoft.plaf.basic.ThemePainter; import com.jidesoft.plaf.office2003.BasicOffice2003Theme; import com.jidesoft.plaf.office2003.Office2003Painter; import com.jidesoft.utils.PortingUtils; /** * @author Administrator * @date 2010-5-9 create */ public class GameMakerView extends FrameView { /** * �����༭�¼������� */ private class SceneHandler extends MouseAdapter{ public void mouseMoved(MouseEvent e) { setStatus(1,point2String(e.getPoint())); setStatus(2,point2String(sceneEditor.getSelectingCell())); } } private static class RepaintThread extends Thread{ private FrameView view; public RepaintThread(FrameView view) { super("RepaintThread"); setDaemon(true); this.view = view; } @Override public void run() { while(true) { view.getFrame().repaint(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } /** ѡ���ͼ�ļ� */ private static final String ACTION_OPEN_MAP_FILE = "openMapFile"; /** ��ʾ���������� */ private static final String ACTION_TOGGLE_GRID= "toggleGrid"; private JFrame mainFrame; private JFileChooser fileChooser; private int defaultWidth = 800; private int defaultHeight = 600; private SceneEditor sceneEditor; private SceneHandler sceneHandler= new SceneHandler(); private JLabel[] statusLabels; /** * @param application */ public GameMakerView(GameMaker application) { super(application); initGUI(); sceneEditor.setScene("1146"); new RepaintThread(this).start(); } public GameMaker getMaker() { return (GameMaker) super.getApplication(); } public javax.swing.Action getAction(String key) { return getContext().getActionMap(GameMakerView.class,this).get(key); } protected String getProperty(String key) { return getResourceMap().getString(key);//TODO } protected void setProperty(String key,String value) { //TODO __@yoop____$$ } /** * ����ת���ַ��� * @param p * @return */ private String point2String(Point p) { if(p!=null) return p.x+","+p.y; else return "--"; } //---------------- GUI ----------------------------------// /** * */ private void initGUI() { PortingUtils.prerequisiteChecking(); // add an example custom theme BasicOffice2003Theme theme = new BasicOffice2003Theme("Custom"); theme.setBaseColor(new Color(50, 190, 150), true, "default"); ((Office2003Painter) Office2003Painter.getInstance()).addTheme(theme); LookAndFeelFactory.installDefaultLookAndFeelAndExtension(); LookAndFeelFactory.UIDefaultsCustomizer uiDefaultsCustomizer = new LookAndFeelFactory.UIDefaultsCustomizer() { public void customize(UIDefaults defaults) { ThemePainter painter = (ThemePainter) UIDefaultsLookup.get("Theme.painter"); defaults.put("OptionPaneUI", "com.jidesoft.plaf.basic.BasicJideOptionPaneUI"); defaults.put("OptionPane.showBanner", Boolean.TRUE); // show banner or not. default is true defaults.put("OptionPane.bannerIcon", JideIconsFactory.getImageIcon(JideIconsFactory.JIDE50)); defaults.put("OptionPane.bannerFontSize", 13); defaults.put("OptionPane.bannerFontStyle", Font.BOLD); defaults.put("OptionPane.bannerMaxCharsPerLine", 60); defaults.put("OptionPane.bannerForeground", painter != null ? painter.getOptionPaneBannerForeground() : null); // you should adjust this if banner background is not the default gradient paint defaults.put("OptionPane.bannerBorder", null); // use default border // set both bannerBackgroundDk and // set both bannerBackgroundLt to null if you don't want gradient defaults.put("OptionPane.bannerBackgroundDk", painter != null ? painter.getOptionPaneBannerDk() : null); defaults.put("OptionPane.bannerBackgroundLt", painter != null ? painter.getOptionPaneBannerLt() : null); defaults.put("OptionPane.bannerBackgroundDirection", Boolean.TRUE); // default is true // optionally, you can set a Paint object for BannerPanel. If so, the three UIDefaults related to banner background above will be ignored. defaults.put("OptionPane.bannerBackgroundPaint", null); defaults.put("OptionPane.buttonAreaBorder", BorderFactory.createEmptyBorder(6, 6, 6, 6)); defaults.put("OptionPane.buttonOrientation", SwingConstants.RIGHT); } }; uiDefaultsCustomizer.customize(UIManager.getDefaults()); UIManager.put("ToolTip.border", new BorderUIResource(new CompoundBorder( new RoundLineBorder(Color.WHITE,1, 8, 8),new EmptyBorder(3, 3, 3, 3)))); UIManager.put("ToolTip.foreground", new ColorUIResource(Color.WHITE)); UIManager.put("ToolTip.font", new FontUIResource(UIUtils.TEXT_FONT)); ToolTipManager.sharedInstance().setInitialDelay(100); ToolTipManager.sharedInstance().setReshowDelay(500); mainFrame = new JFrame(getResourceMap().getString("Application.title")); mainFrame.setJMenuBar(createMenubar()); mainFrame.add(createToolBar(),BorderLayout.NORTH); mainFrame.add(createMainPanel(),BorderLayout.CENTER); mainFrame.add(createStatusBar(),BorderLayout.SOUTH); mainFrame.setSize(defaultWidth, defaultHeight); mainFrame.setLocationRelativeTo(null); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setFrame(mainFrame); fileChooser = new JFileChooser(); fileChooser.setCurrentDirectory(new File(getProperty("LastOpenDir"))); } /** * @return */ private JMenuBar createMenubar() { JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu ); fileMenu.add(getAction(ACTION_OPEN_MAP_FILE)); return menuBar; } /** * @return */ private Component createToolBar() { JToolBar toolbar = new JToolBar(); toolbar.add(getAction(ACTION_OPEN_MAP_FILE)); toolbar.add(getAction(ACTION_TOGGLE_GRID)); return toolbar; } /** * @return */ private Component createMainPanel() { JTabbedPane main = new JTabbedPane(); main.addTab("����", createOverviewPanel()); main.addTab("����", createScenePanel()); main.addTab("����", createUIPanel()); main.addTab("�ű�", createScriptPanel()); main.addTab("����", createDataPanel()); main.setSelectedIndex(1); return main; } /** * @return */ private Component createDataPanel() { return null; } /** * @return */ private Component createScriptPanel() { return null; } /** * @return */ private Component createUIPanel() { return null; } /** * @return */ private Component createScenePanel() { sceneEditor = new SceneEditor(); sceneEditor.addMouseListener(sceneHandler); sceneEditor.addMouseMotionListener(sceneHandler); JScrollPane scrollpane = new JScrollPane(sceneEditor); scrollpane.getHorizontalScrollBar().setUnitIncrement(sceneEditor.getCellWidth()); scrollpane.getVerticalScrollBar().setUnitIncrement(sceneEditor.getCellHeight()); Component toolkitPanel = createScenePalette(); //JideSplitPane scenePanel = new JideSplitPane(); JSplitPane scenePanel = new JSplitPane(); scenePanel.setDividerLocation(600); scenePanel.setLeftComponent(scrollpane); scenePanel.setRightComponent(toolkitPanel); return scenePanel; } /** * @return */ private Component createScenePalette() { JPanel palette = new JPanel(new BorderLayout()); final String[] characterIds = getMaker().getDataFacade().getAllCharacters(); ListModel characterListModel = new AbstractListModel() { @Override public int getSize() { return characterIds.length; } @Override public Object getElementAt(int index) { return characterIds[index]; } }; final JList list = new JList(characterListModel); list.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) { String charId = (String) list.getSelectedValue(); addNpcToScene(charId); } } }); list.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { String characterId = (String) list.getSelectedValue(); sceneEditor.setCharacterId(characterId); } }); list.setDragEnabled(true); palette.add(list,BorderLayout.CENTER); return new JScrollPane(palette); } /** * @param charId */ protected void addNpcToScene(String characterId) { sceneEditor.setCharacterId(characterId); sceneEditor.createNewNpc(); } /** * @return */ private Component createOverviewPanel() { return null; } //--------------------- StatusBar -----------------------// /** * @return */ private Component createStatusBar() { //StatusBar statusBar = new StatusBar(app, taskMonitor) JToolBar statusBar = new JToolBar("Status"); //statusBar.setLayout(new FlowLayout()); statusLabels = new JLabel[4]; int[] widths = new int[] {300,100,100,100}; for (int i = 0; i < statusLabels.length; i++) { JLabel label = new JLabel(); Dimension d = new Dimension(widths[i], 20); label.setPreferredSize(d); label.setSize(d); label.setMinimumSize(d); label.setMaximumSize(d); statusLabels[i] = label; statusBar.add(label); statusBar.addSeparator(); } return statusBar; } /** * ������ʾ��Ϣ * @param index * @param msg */ private void setStatus(int index, Object msg) { statusLabels[index].setText(msg.toString()); } //------------------------ Actions --------------------------// @Action public void openMapFile() { // int rtn = fileChooser.showOpenDialog(mainFrame); // if(rtn == JFileChooser.APPROVE_OPTION) { // File file = fileChooser.getSelectedFile(); // setProperty("LastOpenDir",file.getParent()); // this.sceneEditor.setMap(file); // this.sceneEditor.getParent().validate(); // } } /** * ��ʾ���������� */ @Action public void toggleGrid() { this.sceneEditor.toggleGrid(); } }