-/*\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ならプログレスバーのアニメ開始&WAITカーソル。
+ * falseなら停止&通常カーソル。
+ */
+ 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()を全子フレームにも波及させるべきか
+}