diff --git a/src/main/java/info/istlab/IoTP/App.java b/src/main/java/info/istlab/IoTP/App.java index 9e97b73..92b828d 100644 --- a/src/main/java/info/istlab/IoTP/App.java +++ b/src/main/java/info/istlab/IoTP/App.java @@ -32,7 +32,6 @@ public static Path execPath; public static String downloadurl = "https://cit.istlab.info/IoTP/target/"; - static { userhome = System.getProperty("user.home"); } @@ -48,19 +47,14 @@ iotDirs = new ArrayList(); findDotGitFileRecursive(new File(userhome), iotDirs, 0); // 指定フォルダ以下の.gitを探索する - if (iotDirs.size() == 1) { - workingDir = iotDirs.get(0).getAbsolutePath(); - System.out.println(workingDir); - new Launcher(iotDirs.get(0)).setVisible(true); - } else if (iotDirs.size() > 1){ - System.out.println("フォルダが複数みつかりました"); - for(File f: iotDirs){ - System.out.println(f.getAbsolutePath()); - } - } else { - - } - + FolderSelector fs = new FolderSelector(iotDirs, "フォルダが複数みつかりました。フォルダを選択してください。", + "フォルダが1つもみつかりませんでした"); + File ret = fs.getSelectedItem(); + if (ret == null) + System.exit(0); + workingDir = ret.getAbsolutePath(); + System.out.println(ret); + new Launcher(ret).setVisible(true); } public static void findDotGitFileRecursive(File dir, ArrayList iotDirs, int level) { @@ -84,7 +78,6 @@ } } - public static Path getApplicationPath(Class cls) throws URISyntaxException { ProtectionDomain pd = cls.getProtectionDomain(); CodeSource cs = pd.getCodeSource(); @@ -150,7 +143,7 @@ try { processBuilder.start(); System.exit(0); - }catch(Exception ex){ + } catch (Exception ex) { } } diff --git a/src/main/java/info/istlab/IoTP/Editor.java b/src/main/java/info/istlab/IoTP/Editor.java index a79063a..9702068 100644 --- a/src/main/java/info/istlab/IoTP/Editor.java +++ b/src/main/java/info/istlab/IoTP/Editor.java @@ -237,7 +237,7 @@ @Override public void keyPressed(KeyEvent e) { - System.out.println(e.getKeyCode()); + // System.out.println(e.getKeyCode()); if (e.isControlDown() || e.isAltDown() || e.isAltGraphDown() || e.isMetaDown()) { if (e.getKeyCode() == 83) { // Save diff --git a/src/main/java/info/istlab/IoTP/FolderSelector.java b/src/main/java/info/istlab/IoTP/FolderSelector.java new file mode 100644 index 0000000..f4239fa --- /dev/null +++ b/src/main/java/info/istlab/IoTP/FolderSelector.java @@ -0,0 +1,92 @@ +package info.istlab.IoTP; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Hashtable; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +public class FolderSelector extends JDialog implements ActionListener { + ArrayList options; + Hashtable hash; + String messageIfZero; + boolean okClicked = false; + E selectedItem; + + public FolderSelector(ArrayList opts, String message, String _messageIfZero) { + super(new JFrame(), message, true); + options = opts; + messageIfZero = _messageIfZero; + + getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); + + // add(new JLabel(message)); + hash = new Hashtable(); + for (E obj : options) { + String label = obj.toString(); + JButton b = new JButton(label); + b.addActionListener(this); + add(b); + hash.put(label, obj); + } + JButton cancelB; + cancelB = new JButton("cancel"); + cancelB.addActionListener(e -> { + okClicked = false; + System.out.println("Cancel is clicked."); + dispose(); + }); + add(cancelB); + pack(); + setLocation(SerialWindow.centerOfScreen(getSize())); + } + + public boolean showDialog() { + okClicked = false; + setVisible(true); + return okClicked; + } + + public E getSelectedItem() { + if (showDialog()) { + if (options.size() == 0) { + JOptionPane.showMessageDialog(null, messageIfZero); + return null; + } else if (options.size() == 1) { + return options.get(0); + } else { + return selectedItem; + } + } + return null; + } + + @Override + public void actionPerformed(ActionEvent e) { + selectedItem = hash.get(e.getActionCommand()); + okClicked = true; + dispose(); + // SerialPort selectedsp = SerialPort.getCommPort(e.getActionCommand()); + // SerialWindow sw = new SerialWindow(selectedsp); + // SerialWindow.hash.put(selectedsp.getSystemPortName(), sw); + + // frame.setVisible(false); + } + + // public static void show(ArrayList opts) { + // JFrame jf = frame = new JFrame("Select SerialPort"); + // jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + // jf.getContentPane().add(new FolderSelector(opts)); + // jf.pack(); // 内容物でサイズを自動設定する + + // Dimension winSize = jf.getSize(); + // jf.setLocation(SerialWindow.centerOfScreen(winSize)); + // jf.setVisible(true); + // } +} diff --git a/src/main/java/info/istlab/IoTP/Launcher.java b/src/main/java/info/istlab/IoTP/Launcher.java index 6f865e6..530c17f 100644 --- a/src/main/java/info/istlab/IoTP/Launcher.java +++ b/src/main/java/info/istlab/IoTP/Launcher.java @@ -13,7 +13,6 @@ import java.util.Enumeration; import java.util.Hashtable; -import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; @@ -31,10 +30,8 @@ // JPanel mainP; File root; JTree tree; - JCheckBoxMenuItem jcbmi; Hashtable file2editor; - // all generated processes (maybe alive only) public static ArrayList allProcs = new ArrayList(); public Launcher(File _root) { @@ -175,7 +172,7 @@ } public void reloadFiles() { - FileTreeModel model = new FileTreeModel(root, jcbmi.isSelected()); + FileTreeModel model = new FileTreeModel(root, false); tree.setModel(model); } @@ -185,7 +182,7 @@ // if () { if (isLatest) { JOptionPane.showMessageDialog(this, - "すでに最新版です : v" + version + "\n(download folder: " + App.execPath.getParent().toString() + ")"); + "最新版です : v" + version + "\n(download folder: " + App.execPath.getParent().toString() + ")"); } else { int res = JOptionPane.showConfirmDialog(this, "最新版 \n(" + App.latestVersion + ") をダウンロードする?\n(download folder: " + App.execPath.getParent().toString() + ")"); diff --git a/src/main/java/info/istlab/IoTP/MyDialog.java b/src/main/java/info/istlab/IoTP/MyDialog.java new file mode 100644 index 0000000..5496b50 --- /dev/null +++ b/src/main/java/info/istlab/IoTP/MyDialog.java @@ -0,0 +1,84 @@ +package info.istlab.IoTP; + +import java.awt.BorderLayout; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; + +public class MyDialog extends JDialog { + private JTextField textField; + private JButton okButton, cancelButton; + private boolean okClicked; + + public MyDialog(JFrame parent) { + super(new JFrame(), "モードレスダイアログ", true); + + // ダイアログのコンポーネントを設定する + JLabel label = new JLabel("名前を入力してください:"); + textField = new JTextField(10); + JPanel panel = new JPanel(); + panel.add(label); + panel.add(textField); + + okButton = new JButton("OK"); + cancelButton = new JButton("キャンセル"); + JPanel buttonPanel = new JPanel(); + buttonPanel.add(okButton); + buttonPanel.add(cancelButton); + + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(panel, BorderLayout.CENTER); + getContentPane().add(buttonPanel, BorderLayout.SOUTH); + + // OKボタンが押されたときの処理 + okButton.addActionListener(e -> { + okClicked = true; + dispose(); + }); + + // キャンセルボタンが押されたときの処理 + cancelButton.addActionListener(e -> { + okClicked = false; + dispose(); + }); + + // ダイアログのサイズを設定する + setSize(300, 150); + } + + public boolean showDialog() { + okClicked = false; + setVisible(true); + return okClicked; + } + + public String getInputValue() { + return textField.getText(); + } + + public static void main(String[] args) { + JFrame frame = new JFrame("親ウィンドウ"); + frame.setSize(400, 300); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + // ボタンを追加する + JButton button = new JButton("ダイアログを表示する"); + button.addActionListener(e -> { + MyDialog dialog = new MyDialog(frame); + if (dialog.showDialog()) { + String inputValue = dialog.getInputValue(); + System.out.println("OKボタンが押されました。入力値は" + inputValue + "です。"); + } else { + System.out.println("キャンセルボタンが押されました。"); + } + }); + frame.getContentPane().add(button); + + // ウィンドウを表示する + frame.setVisible(true); + } +}