import io.github.olyutorskii.quetexj.HeightKeeper;
import io.github.olyutorskii.quetexj.MaxTracker;
import io.github.olyutorskii.quetexj.MvcFacade;
+import io.github.olyutorskii.quetexj.SwingLogHandler;
import java.awt.Container;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.util.logging.Handler;
import javax.swing.Action;
+import javax.swing.BorderFactory;
+import javax.swing.BoundedRangeModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollBar;
+import javax.swing.JScrollPane;
import javax.swing.JSeparator;
+import javax.swing.JTextArea;
import javax.swing.JToggleButton;
+import javax.swing.border.Border;
+import javax.swing.text.Document;
+import jp.sfjp.jindolf.dxchg.TextPopup;
+import jp.sfjp.jindolf.util.Monodizer;
/**
* ログ表示ウィンドウ。
@SuppressWarnings("serial")
public final class LogFrame extends JDialog {
- private static final String CMD_CLOSELOG = "CMD_CLOSE_LOG";
-
-
private final MvcFacade facade;
- private final LogPanel logPanel;
+ private final JScrollPane scrollPane;
private final JButton clearButton;
private final JButton closeButton;
private final JCheckBox trackButton;
+ private final Handler handler;
+
/**
* コンストラクタ。
this.facade = new MvcFacade();
- this.logPanel = new LogPanel(this.facade);
+ this.scrollPane = buildScrollPane(this.facade);
+
this.clearButton = new JButton();
this.closeButton = new JButton();
this.trackButton = new JCheckBox();
+ setupButtons();
+
+ MaxTracker tracker = this.facade.getMaxTracker();
+ HeightKeeper keeper = this.facade.getHeightKeeper();
+
+ tracker.setTrackingMode(true);
+ keeper.setConditions(5000, 4000);
+
+ Handler logHandler = null;
+ if(LogUtils.hasLoggingPermission()){
+ Document document = this.facade.getDocument();
+ logHandler = new SwingLogHandler(document);
+ }
+ this.handler = logHandler;
+
+ setResizable(true);
+ setLocationByPlatform(true);
+ setModal(false);
+
design();
+ return;
+ }
+
+
+ /**
+ * ログ用スクロール領域を生成する。
+ *
+ * @param facadeArg ファサード
+ * @return スクロール領域
+ */
+ private static JScrollPane buildScrollPane(MvcFacade facadeArg){
+ JScrollPane scrollPane = new JScrollPane();
+
+ JScrollBar vbar = scrollPane.getVerticalScrollBar();
+ BoundedRangeModel rangeModel = facadeArg.getVerticalBoundedRangeModel();
+ vbar.setModel(rangeModel);
+
+ JTextArea textArea = buildTextArea(facadeArg);
+ scrollPane.setViewportView(textArea);
+
+ return scrollPane;
+ }
+
+ /**
+ * ログ用テキストエリアを生成する。
+ *
+ * @param facadeArg ファサード
+ * @return テキストエリア
+ */
+ private static JTextArea buildTextArea(MvcFacade facadeArg){
+ JTextArea textArea = facadeArg.getTextArea();
+
+ textArea.setEditable(false);
+ textArea.setLineWrap(true);
+ Monodizer.monodize(textArea);
+
+ Border border = BorderFactory.createEmptyBorder(3, 3, 3, 3);
+ textArea.setBorder(border);
+
+ JPopupMenu popup = new TextPopup();
+ textArea.setComponentPopupMenu(popup);
+
+ return textArea;
+ }
+
+
+ /**
+ * ボタンの各種設定。
+ */
+ private void setupButtons(){
Action clearAction = this.facade.getClearAction();
this.clearButton.setAction(clearAction);
this.clearButton.setText("クリア");
- this.closeButton.setActionCommand(CMD_CLOSELOG);
this.closeButton.addActionListener(event -> {
- String cmd = event.getActionCommand();
- if(CMD_CLOSELOG.equals(cmd)){
+ if(event.getSource() == this.closeButton){
setVisible(false);
}
});
this.trackButton.setModel(toggleModel);
this.trackButton.setText("末尾に追従");
- MaxTracker tracker = this.facade.getMaxTracker();
- tracker.setTrackingMode(true);
-
- HeightKeeper keeper = this.facade.getHeightKeeper();
- keeper.setConditions(5000, 4000);
-
- setResizable(true);
- setLocationByPlatform(true);
- setModal(false);
-
return;
}
/**
- * デザインを行う。
+ * ã\83¬ã\82¤ã\82¢ã\82¦ã\83\88ã\83\87ã\82¶ã\82¤ã\83³ã\82\92è¡\8cã\81\86ã\80\82
*/
private void design(){
Container content = getContentPane();
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = GridBagConstraints.REMAINDER;
- content.add(this.logPanel, constraints);
+ content.add(this.scrollPane, constraints);
constraints.weighty = 0.0;
constraints.fill = GridBagConstraints.HORIZONTAL;
/**
* ロギングハンドラを返す。
+ *
* @return ロギングハンドラ
*/
public Handler getHandler(){
- return this.logPanel.getHandler();
+ return this.handler;
}
}
+++ /dev/null
-/*
- * Log panel
- *
- * License : The MIT License
- * Copyright(c) 2012 olyutorskii
- */
-
-package jp.sfjp.jindolf.log;
-
-import io.github.olyutorskii.quetexj.MvcFacade;
-import io.github.olyutorskii.quetexj.SwingLogHandler;
-import java.util.logging.Handler;
-import javax.swing.BorderFactory;
-import javax.swing.BoundedRangeModel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollBar;
-import javax.swing.JScrollPane;
-import javax.swing.JTextArea;
-import javax.swing.border.Border;
-import javax.swing.text.Document;
-import jp.sfjp.jindolf.dxchg.TextPopup;
-import jp.sfjp.jindolf.util.Monodizer;
-
-/**
- * スクロールバー付きログ表示パネル。
- *
- * <p>垂直スクロールバーは自動的に最下部へトラックする。
- */
-@SuppressWarnings("serial")
-public final class LogPanel extends JScrollPane {
-
- private final JTextArea textarea;
- private final Document document;
- private final Handler handler;
-
-
- /**
- * コンストラクタ。
- *
- * @param facade MvcFacade
- */
- public LogPanel(MvcFacade facade){
- super();
-
- this.textarea = facade.getTextArea();
- this.document = facade.getDocument();
-
- if(LogUtils.hasLoggingPermission()){
- this.handler = new SwingLogHandler(this.document);
- }else{
- this.handler = null;
- }
-
- this.textarea.setEditable(false);
- this.textarea.setLineWrap(true);
- Monodizer.monodize(this.textarea);
-
- Border border = BorderFactory.createEmptyBorder(3, 3, 3, 3);
- this.textarea.setBorder(border);
-
- JPopupMenu popup = new TextPopup();
- this.textarea.setComponentPopupMenu(popup);
-
- setViewportView(this.textarea);
-
- JScrollBar vbar = getVerticalScrollBar();
- BoundedRangeModel rangeModel = facade.getVerticalBoundedRangeModel();
- vbar.setModel(rangeModel);
-
- return;
- }
-
- /**
- * ロギングハンドラを返す。
- * @return ロギングハンドラ
- */
- public Handler getHandler(){
- return this.handler;
- }
-
-}