OSDN Git Service

Merge branch 'Branch_release-'
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / view / TopView.java
-/*\r
- * Top view\r
- *\r
- * Copyright(c) 2008 olyutorskii\r
- * $Id: TopView.java 888 2009-11-04 06:23:35Z olyutorskii $\r
- */\r
-\r
-package jp.sourceforge.jindolf;\r
-\r
-import java.awt.BorderLayout;\r
-import java.awt.CardLayout;\r
-import java.awt.GridBagConstraints;\r
-import java.awt.GridBagLayout;\r
-import java.awt.Insets;\r
-import javax.swing.BorderFactory;\r
-import javax.swing.JComponent;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-import javax.swing.JProgressBar;\r
-import javax.swing.JScrollPane;\r
-import javax.swing.JSplitPane;\r
-import javax.swing.JTextField;\r
-import javax.swing.JToolBar;\r
-import javax.swing.JTree;\r
-import javax.swing.SwingConstants;\r
-import javax.swing.border.BevelBorder;\r
-import javax.swing.border.Border;\r
-import javax.swing.border.CompoundBorder;\r
-\r
-/**\r
- * 最上位ビュー。\r
- * メインアプリウィンドウのコンポーネントの親コンテナ。\r
- */\r
-@SuppressWarnings("serial")\r
-public class TopView extends JPanel{\r
-\r
-    private static final String INITCARD = "INITCARD";\r
-    private static final String LANDCARD = "LANDINFO";\r
-    private static final String BROWSECARD = "BROWSER";\r
-\r
-    private final JComponent cards;\r
-    private final CardLayout cardLayout = new CardLayout();\r
-\r
-    private final LandsTree landsTreeView = new LandsTree();\r
-\r
-    private final LandInfoPanel landInfo = new LandInfoPanel();\r
-\r
-    private final JTextField sysMessage = new JTextField();\r
-    private final JProgressBar progressBar = new JProgressBar();\r
-\r
-    private final TabBrowser tabBrowser = new TabBrowser();\r
-\r
-    private JComponent browsePanel;\r
-\r
-    /**\r
-     * トップビューを生成する。\r
-     */\r
-    public TopView(){\r
-        super();\r
-\r
-        this.cards = createCards();\r
-        JComponent split = createSplitPane(this.landsTreeView, this.cards);\r
-        JComponent statusBar = createStatusBar();\r
-\r
-        BorderLayout layout = new BorderLayout();\r
-        setLayout(layout);\r
-        add(split, BorderLayout.CENTER);\r
-        add(statusBar, BorderLayout.SOUTH);\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * カードパネルを生成する。\r
-     * @return カードパネル\r
-     */\r
-    private JComponent createCards(){\r
-        this.browsePanel = createBrowsePanel();\r
-\r
-        JPanel panel = new JPanel();\r
-        panel.setLayout(this.cardLayout);\r
-        panel.add(INITCARD, createInitCard());\r
-        panel.add(LANDCARD, createLandInfoCard());\r
-        panel.add(BROWSECARD, this.browsePanel);\r
-\r
-        return panel;\r
-    }\r
-\r
-    /**\r
-     * 初期パネルを生成。\r
-     * @return 初期パネル\r
-     */\r
-    private JComponent createInitCard(){\r
-        JLabel initMessage = new JLabel("← 村を選択してください");\r
-\r
-        StringBuilder acct = new StringBuilder();\r
-        acct.append("※ 参加中の村がある人は<br></br>");\r
-        acct.append("メニューの「アカウント管理」から<br></br>");\r
-        acct.append("ログインしてください");\r
-        acct.insert(0, "<center>").append("</center>");\r
-        acct.insert(0, "<body>")  .append("</body>");\r
-        acct.insert(0, "<html>")  .append("</html>");\r
-        JLabel acctMessage = new JLabel(acct.toString());\r
-\r
-        StringBuilder warn = new StringBuilder();\r
-        warn.append("※ たまにはWebブラウザでアクセスして、");\r
-        warn.append("<br></br>");\r
-        warn.append("運営の動向を確かめようね!");\r
-        warn.insert(0, "<center>").append("</center>");\r
-        warn.insert(0, "<body>")  .append("</body>");\r
-        warn.insert(0, "<html>")  .append("</html>");\r
-        JLabel warnMessage = new JLabel(warn.toString());\r
-\r
-        JPanel panel = new JPanel();\r
-        GridBagLayout layout = new GridBagLayout();\r
-        GridBagConstraints constraints = new GridBagConstraints();\r
-        panel.setLayout(layout);\r
-\r
-        constraints.weightx = 1.0;\r
-        constraints.weighty = 1.0;\r
-        constraints.anchor = GridBagConstraints.CENTER;\r
-        constraints.gridx = GridBagConstraints.REMAINDER;\r
-        panel.add(initMessage, constraints);\r
-        panel.add(acctMessage, constraints);\r
-        panel.add(warnMessage, constraints);\r
-\r
-        JScrollPane scrollPane = new JScrollPane(panel);\r
-\r
-        return scrollPane;\r
-    }\r
-\r
-    /**\r
-     * 国別情報を生成。\r
-     * @return 国別情報\r
-     */\r
-    private JComponent createLandInfoCard(){\r
-        this.landInfo.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));\r
-        JScrollPane scrollPane = new JScrollPane(this.landInfo);\r
-        return scrollPane;\r
-    }\r
-\r
-    /**\r
-     * 内部ブラウザを生成。\r
-     * @return 内部ブラウザ\r
-     */\r
-    private JComponent createBrowsePanel(){\r
-        JPanel panel = new JPanel();\r
-        BorderLayout layout = new BorderLayout();\r
-        panel.setLayout(layout);\r
-\r
-        panel.add(this.tabBrowser, BorderLayout.CENTER);\r
-\r
-        return panel;\r
-    }\r
-\r
-    /**\r
-     * ブラウザ用ツールバーをセットする。\r
-     * @param toolbar ツールバー\r
-     */\r
-    public void setBrowseToolBar(JToolBar toolbar){\r
-        this.browsePanel.add(toolbar, BorderLayout.NORTH);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * SplitPaneを生成。\r
-     * @param left 左コンポーネント\r
-     * @param right 右コンポーネント\r
-     * @return SplitPane\r
-     */\r
-    private JComponent createSplitPane(JComponent left, JComponent right){\r
-        JSplitPane split = new JSplitPane();\r
-        split.setLeftComponent(left);\r
-        split.setRightComponent(right);\r
-        split.setOrientation(JSplitPane.HORIZONTAL_SPLIT);\r
-        split.setContinuousLayout(false);\r
-        split.setOneTouchExpandable(true);\r
-        split.setDividerLocation(200);\r
-\r
-        return split;\r
-    }\r
-\r
-    /**\r
-     * ステータスバーを生成する。\r
-     * @return ステータスバー\r
-     */\r
-    private JComponent createStatusBar(){\r
-        this.sysMessage.setText(\r
-                  Jindolf.TITLE + " " + Jindolf.VERSION\r
-                + " を使ってくれてありがとう!" );\r
-        this.sysMessage.setEditable(false);\r
-        Border inside  = BorderFactory.createBevelBorder(BevelBorder.LOWERED);\r
-        Border outside = BorderFactory.createEmptyBorder(2, 5, 2, 2);\r
-        Border border = new CompoundBorder(inside, outside);\r
-        this.sysMessage.setBorder(border);\r
-\r
-        this.progressBar.setIndeterminate(false);\r
-        this.progressBar.setOrientation(SwingConstants.HORIZONTAL);\r
-        this.progressBar.setMinimum(0);\r
-        this.progressBar.setMaximum(99);\r
-        this.progressBar.setValue(0);\r
-\r
-        JPanel statusBar = new JPanel();\r
-        GridBagLayout layout = new GridBagLayout();\r
-        GridBagConstraints constraints = new GridBagConstraints();\r
-        statusBar.setLayout(layout);\r
-\r
-        constraints.weightx = 1.0;\r
-        constraints.fill = GridBagConstraints.HORIZONTAL;\r
-        statusBar.add(this.sysMessage, constraints);\r
-\r
-        constraints.weightx = 0.0;\r
-        constraints.fill = GridBagConstraints.NONE;\r
-        constraints.insets = new Insets(2, 2, 2, 2);\r
-        statusBar.add(this.progressBar, constraints);\r
-\r
-        return statusBar;\r
-    }\r
-\r
-    /**\r
-     * 国村選択ツリービューを返す。\r
-     * @return 国村選択ツリービュー\r
-     */\r
-    public JTree getTreeView(){\r
-        return this.landsTreeView.getTreeView();\r
-    }\r
-\r
-    /**\r
-     * タブビューを返す。\r
-     * @return タブビュー\r
-     */\r
-    public TabBrowser getTabBrowser(){\r
-        return this.tabBrowser;\r
-    }\r
-\r
-    /**\r
-     * 村一覧ビューを返す。\r
-     * @return 村一番ビュー\r
-     */\r
-    public LandsTree getLandsTree(){\r
-        return this.landsTreeView;\r
-    }\r
-\r
-    /**\r
-     * プログレスバーとカーソルの設定を行う。\r
-     * @param busy trueならプログレスバーのアニメ開始&WAITカーソル。\r
-     *              falseなら停止&通常カーソル。\r
-     */\r
-    public void setBusy(boolean busy){\r
-        this.progressBar.setIndeterminate(busy);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * ステータスバーの更新。\r
-     * @param message 更新文字列\r
-     */\r
-    public void updateSysMessage(String message){\r
-        if(message == null) return;\r
-        String text;\r
-        if(message.length() <= 0) text = " ";\r
-        else                      text = message;\r
-        this.sysMessage.setText(text);   // Thread safe\r
-        GUIUtils.dispatchEmptyAWTEvent();\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 初期パネルを表示する。\r
-     */\r
-    public void showInitPanel(){\r
-        this.cardLayout.show(this.cards, INITCARD);\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 村情報を表示する。\r
-     * @param village 村\r
-     */\r
-    public void showVillageInfo(Village village){\r
-        this.tabBrowser.setVillage(village);\r
-        this.cardLayout.show(this.cards, BROWSECARD);\r
-        this.tabBrowser.repaint();\r
-        this.tabBrowser.revalidate();\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 国情報を表示する。\r
-     * @param land 国\r
-     */\r
-    public void showLandInfo(Land land){\r
-        this.landInfo.update(land);\r
-        this.cardLayout.show(this.cards, LANDCARD);\r
-        return;\r
-    }\r
-\r
-    // TODO setEnabled()を全子フレームにも波及させるべきか\r
-}\r
+/*
+ * Top view
+ *
+ * License : The MIT License
+ * Copyright(c) 2008 olyutorskii
+ */
+
+package jp.sfjp.jindolf.view;
+
+import java.awt.BorderLayout;
+import java.awt.CardLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import javax.swing.BorderFactory;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTextField;
+import javax.swing.JToolBar;
+import javax.swing.JTree;
+import javax.swing.SwingConstants;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.Border;
+import javax.swing.border.CompoundBorder;
+import jp.sfjp.jindolf.VerInfo;
+import jp.sfjp.jindolf.data.Land;
+import jp.sfjp.jindolf.data.Village;
+import jp.sfjp.jindolf.util.GUIUtils;
+
+/**
+ * 最上位ビュー。
+ * メインアプリウィンドウのコンポーネントの親コンテナ。
+ */
+@SuppressWarnings("serial")
+public class TopView extends JPanel{
+
+    private static final String INITCARD = "INITCARD";
+    private static final String LANDCARD = "LANDINFO";
+    private static final String BROWSECARD = "BROWSER";
+
+    private static final String MSG_THANKS =
+            VerInfo.TITLE + "\u0020" + VerInfo.VERSION
+            + "\u0020を使ってくれてありがとう!";
+
+
+    private final JComponent cards;
+    private final CardLayout cardLayout = new CardLayout();
+
+    private final LandsTree landsTreeView = new LandsTree();
+
+    private final LandInfoPanel landInfo = new LandInfoPanel();
+
+    private final JTextField sysMessage = new JTextField("");
+    private final JProgressBar progressBar = new JProgressBar();
+
+    private final TabBrowser tabBrowser = new TabBrowser();
+
+    private JComponent browsePanel;
+
+    /**
+     * トップビューを生成する。
+     */
+    public TopView(){
+        super();
+
+        this.cards = createCards();
+        JComponent split = createSplitPane(this.landsTreeView, this.cards);
+        JComponent statusBar = createStatusBar();
+
+        BorderLayout layout = new BorderLayout();
+        setLayout(layout);
+        add(split, BorderLayout.CENTER);
+        add(statusBar, BorderLayout.SOUTH);
+
+        return;
+    }
+
+    /**
+     * カードパネルを生成する。
+     * @return カードパネル
+     */
+    private JComponent createCards(){
+        this.browsePanel = createBrowsePanel();
+
+        JPanel panel = new JPanel();
+        panel.setLayout(this.cardLayout);
+        panel.add(INITCARD, createInitCard());
+        panel.add(LANDCARD, createLandInfoCard());
+        panel.add(BROWSECARD, this.browsePanel);
+
+        return panel;
+    }
+
+    /**
+     * 初期パネルを生成。
+     * @return 初期パネル
+     */
+    private JComponent createInitCard(){
+        JLabel initMessage = new JLabel("← 村を選択してください");
+
+        StringBuilder acct = new StringBuilder();
+        acct.append("※ 参加中の村がある人は<br></br>");
+        acct.append("メニューの「アカウント管理」から<br></br>");
+        acct.append("ログインしてください");
+        acct.insert(0, "<center>").append("</center>");
+        acct.insert(0, "<body>")  .append("</body>");
+        acct.insert(0, "<html>")  .append("</html>");
+        JLabel acctMessage = new JLabel(acct.toString());
+
+        StringBuilder warn = new StringBuilder();
+        warn.append("※ たまにはWebブラウザでアクセスして、");
+        warn.append("<br></br>");
+        warn.append("運営の動向を確かめようね!");
+        warn.insert(0, "<center>").append("</center>");
+        warn.insert(0, "<body>")  .append("</body>");
+        warn.insert(0, "<html>")  .append("</html>");
+        JLabel warnMessage = new JLabel(warn.toString());
+
+        JPanel panel = new JPanel();
+        GridBagLayout layout = new GridBagLayout();
+        GridBagConstraints constraints = new GridBagConstraints();
+        panel.setLayout(layout);
+
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.anchor = GridBagConstraints.CENTER;
+        constraints.gridx = GridBagConstraints.REMAINDER;
+        panel.add(initMessage, constraints);
+        panel.add(acctMessage, constraints);
+        panel.add(warnMessage, constraints);
+
+        JScrollPane scrollPane = new JScrollPane(panel);
+
+        return scrollPane;
+    }
+
+    /**
+     * 国別情報を生成。
+     * @return 国別情報
+     */
+    private JComponent createLandInfoCard(){
+        this.landInfo.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        JScrollPane scrollPane = new JScrollPane(this.landInfo);
+        return scrollPane;
+    }
+
+    /**
+     * 内部ブラウザを生成。
+     * @return 内部ブラウザ
+     */
+    private JComponent createBrowsePanel(){
+        JPanel panel = new JPanel();
+        BorderLayout layout = new BorderLayout();
+        panel.setLayout(layout);
+
+        panel.add(this.tabBrowser, BorderLayout.CENTER);
+
+        return panel;
+    }
+
+    /**
+     * ブラウザ用ツールバーをセットする。
+     * @param toolbar ツールバー
+     */
+    public void setBrowseToolBar(JToolBar toolbar){
+        this.browsePanel.add(toolbar, BorderLayout.NORTH);
+        return;
+    }
+
+    /**
+     * SplitPaneを生成。
+     * @param left 左コンポーネント
+     * @param right 右コンポーネント
+     * @return SplitPane
+     */
+    private JComponent createSplitPane(JComponent left, JComponent right){
+        JSplitPane split = new JSplitPane();
+        split.setLeftComponent(left);
+        split.setRightComponent(right);
+        split.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
+        split.setContinuousLayout(false);
+        split.setOneTouchExpandable(true);
+        split.setDividerLocation(200);
+
+        return split;
+    }
+
+    /**
+     * ステータスバーを生成する。
+     * @return ステータスバー
+     */
+    private JComponent createStatusBar(){
+        this.sysMessage.setText(MSG_THANKS);
+        this.sysMessage.setEditable(false);
+        Border inside  = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
+        Border outside = BorderFactory.createEmptyBorder(2, 5, 2, 2);
+        Border border = new CompoundBorder(inside, outside);
+        this.sysMessage.setBorder(border);
+
+        this.progressBar.setIndeterminate(false);
+        this.progressBar.setOrientation(SwingConstants.HORIZONTAL);
+        this.progressBar.setMinimum(0);
+        this.progressBar.setMaximum(99);
+        this.progressBar.setValue(0);
+
+        JPanel statusBar = new JPanel();
+        GridBagLayout layout = new GridBagLayout();
+        GridBagConstraints constraints = new GridBagConstraints();
+        statusBar.setLayout(layout);
+
+        constraints.weightx = 1.0;
+        constraints.fill = GridBagConstraints.HORIZONTAL;
+        statusBar.add(this.sysMessage, constraints);
+
+        constraints.weightx = 0.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = new Insets(2, 2, 2, 2);
+        statusBar.add(this.progressBar, constraints);
+
+        return statusBar;
+    }
+
+    /**
+     * 国村選択ツリービューを返す。
+     * @return 国村選択ツリービュー
+     */
+    public JTree getTreeView(){
+        return this.landsTreeView.getTreeView();
+    }
+
+    /**
+     * タブビューを返す。
+     * @return タブビュー
+     */
+    public TabBrowser getTabBrowser(){
+        return this.tabBrowser;
+    }
+
+    /**
+     * 村一覧ビューを返す。
+     * @return 村一番ビュー
+     */
+    public LandsTree getLandsTree(){
+        return this.landsTreeView;
+    }
+
+    /**
+     * プログレスバーとカーソルの設定を行う。
+     * @param busy trueならプログレスバーのアニメ開始&amp;WAITカーソル。
+     *              falseなら停止&amp;通常カーソル。
+     */
+    public void setBusy(boolean busy){
+        this.progressBar.setIndeterminate(busy);
+        return;
+    }
+
+    /**
+     * ステータスバーの更新。
+     * @param message 更新文字列
+     */
+    public void updateSysMessage(String message){
+        String text = message;
+        if(message == null) text = "";
+        this.sysMessage.setText(text);   // Thread safe
+        GUIUtils.dispatchEmptyAWTEvent();
+        return;
+    }
+
+    /**
+     * ステータスバー文字列を返す。
+     * @return ステータスバー文字列
+     */
+    public String getSysMessage(){
+        String result = this.sysMessage.getText();
+        if(result == null) result = "";
+        return result;
+    }
+
+    /**
+     * 初期パネルを表示する。
+     */
+    public void showInitPanel(){
+        this.cardLayout.show(this.cards, INITCARD);
+        return;
+    }
+
+    /**
+     * 村情報を表示する。
+     * @param village 村
+     */
+    public void showVillageInfo(Village village){
+        this.tabBrowser.setVillage(village);
+        this.cardLayout.show(this.cards, BROWSECARD);
+        this.tabBrowser.repaint();
+        this.tabBrowser.revalidate();
+
+        return;
+    }
+
+    /**
+     * 国情報を表示する。
+     * @param land 国
+     */
+    public void showLandInfo(Land land){
+        this.landInfo.update(land);
+        this.cardLayout.show(this.cards, LANDCARD);
+        return;
+    }
+
+    // TODO setEnabled()を全子フレームにも波及させるべきか
+}