diff --git a/src/main/java/pro/litvinovg/w2phtml/gui/ConfigurationWindow.java b/src/main/java/pro/litvinovg/w2phtml/gui/ConfigurationWindow.java index db46714..9eaa7f5 100644 --- a/src/main/java/pro/litvinovg/w2phtml/gui/ConfigurationWindow.java +++ b/src/main/java/pro/litvinovg/w2phtml/gui/ConfigurationWindow.java @@ -15,6 +15,7 @@ import java.awt.Toolkit; import java.awt.GridLayout; import javax.swing.JTabbedPane; import javax.swing.JMenuBar; +import javax.swing.JOptionPane; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JLabel; @@ -28,6 +29,7 @@ import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.JRadioButton; import javax.swing.JButton; import java.awt.event.ActionListener; +import java.io.File; import java.io.PrintWriter; import java.io.StringWriter; import java.util.HashMap; @@ -382,7 +384,7 @@ public class ConfigurationWindow extends JFrame { JCheckBox cb_convertToPx = new JCheckBox("Convert dimensions to pixels instead of REM (root em)"); configuration.put("convert_to_px", cb_convertToPx); - JLabel lb_FilePath = new JLabel("File path"); + JLabel lb_FilePath = new JLabel("Input file path"); JTextField tf_inputFile = new JTextField(fileName); tf_inputFile.setColumns(10); @@ -391,52 +393,60 @@ public class ConfigurationWindow extends JFrame { JLabel lb_TargetFormat = new JLabel("html5"); configuration.put("targetFormat", lb_TargetFormat); - - JLabel lb_TargetFormat_description = new JLabel("Target format"); + + JButton btnChooseFile = new JButton("Choose file"); + btnChooseFile.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + FileDialog fileDialog = new FileDialog(); + String newFilePath = fileDialog.chooseFile(tf_inputFile.getText()); + if (newFilePath != null && !newFilePath.isEmpty()) { + tf_inputFile.setText(newFilePath); + } + } + }); GroupLayout gl_panel_configHTML = new GroupLayout(panel_configHTML); gl_panel_configHTML.setHorizontalGroup( gl_panel_configHTML.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_configHTML.createSequentialGroup() .addGap(32) .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.LEADING) + .addComponent(cb_UseMathJax, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) + .addGroup(gl_panel_configHTML.createSequentialGroup() + .addComponent(lb_Scale, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(tf_Scale, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) + .addGroup(gl_panel_configHTML.createSequentialGroup() + .addComponent(lb_MaxWidth) + .addGap(18) + .addComponent(tf_MaxWidth, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) + .addGroup(gl_panel_configHTML.createSequentialGroup() + .addComponent(lb_FilterLetterSpacing, GroupLayout.PREFERRED_SIZE, 253, GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(tf_FilterLetterSpacing, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE)) + .addComponent(cb_convertToPx, GroupLayout.PREFERRED_SIZE, 592, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_IgnoreHardLineBreaks, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_IgnoreEmptyParagraphs, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_Greenstone, GroupLayout.PREFERRED_SIZE, 482, GroupLayout.PREFERRED_SIZE) + .addGroup(gl_panel_configHTML.createSequentialGroup() + .addComponent(lb_SplitByLevel, GroupLayout.PREFERRED_SIZE, 295, GroupLayout.PREFERRED_SIZE) + .addGap(42) + .addComponent(tf_SplitByLevel, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) + .addComponent(cb_SplitWholePagesOnly, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_EmbedRaster, GroupLayout.PREFERRED_SIZE, 194, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_EmbedVectorImages, GroupLayout.PREFERRED_SIZE, 214, GroupLayout.PREFERRED_SIZE) + .addComponent(cb_InlineStyles, GroupLayout.PREFERRED_SIZE, 156, GroupLayout.PREFERRED_SIZE) .addGroup(gl_panel_configHTML.createSequentialGroup() .addComponent(lb_TargetFormat_description, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.UNRELATED) - .addComponent(lb_TargetFormat, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addComponent(lb_TargetFormat, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)) .addGroup(gl_panel_configHTML.createSequentialGroup() - .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.LEADING) - .addGroup(gl_panel_configHTML.createSequentialGroup() - .addComponent(lb_FilePath, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) - .addGap(18) - .addComponent(tf_inputFile, GroupLayout.DEFAULT_SIZE, 755, Short.MAX_VALUE)) - .addComponent(cb_UseMathJax, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) - .addGroup(gl_panel_configHTML.createSequentialGroup() - .addComponent(lb_Scale, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) - .addGap(18) - .addComponent(tf_Scale, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) - .addGroup(gl_panel_configHTML.createSequentialGroup() - .addComponent(lb_MaxWidth) - .addGap(18) - .addComponent(tf_MaxWidth, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) - .addGroup(gl_panel_configHTML.createSequentialGroup() - .addComponent(lb_FilterLetterSpacing, GroupLayout.PREFERRED_SIZE, 253, GroupLayout.PREFERRED_SIZE) - .addGap(18) - .addComponent(tf_FilterLetterSpacing, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE)) - .addComponent(cb_convertToPx, GroupLayout.PREFERRED_SIZE, 592, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_IgnoreHardLineBreaks, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_IgnoreEmptyParagraphs, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_Greenstone, GroupLayout.PREFERRED_SIZE, 482, GroupLayout.PREFERRED_SIZE) - .addGroup(gl_panel_configHTML.createSequentialGroup() - .addComponent(lb_SplitByLevel, GroupLayout.PREFERRED_SIZE, 295, GroupLayout.PREFERRED_SIZE) - .addGap(42) - .addComponent(tf_SplitByLevel, GroupLayout.PREFERRED_SIZE, 175, GroupLayout.PREFERRED_SIZE)) - .addComponent(cb_SplitWholePagesOnly, GroupLayout.PREFERRED_SIZE, 303, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_EmbedRaster, GroupLayout.PREFERRED_SIZE, 194, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_EmbedVectorImages, GroupLayout.PREFERRED_SIZE, 214, GroupLayout.PREFERRED_SIZE) - .addComponent(cb_InlineStyles, GroupLayout.PREFERRED_SIZE, 156, GroupLayout.PREFERRED_SIZE)) - .addGap(48)))) + .addComponent(lb_FilePath, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.RELATED) + .addComponent(tf_inputFile, GroupLayout.PREFERRED_SIZE, 616, GroupLayout.PREFERRED_SIZE) + .addPreferredGap(ComponentPlacement.UNRELATED) + .addComponent(btnChooseFile))) + .addContainerGap(68, Short.MAX_VALUE)) ); gl_panel_configHTML.setVerticalGroup( gl_panel_configHTML.createParallelGroup(Alignment.LEADING) @@ -445,13 +455,16 @@ public class ConfigurationWindow extends JFrame { .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.BASELINE) .addComponent(lb_TargetFormat_description) .addComponent(lb_TargetFormat)) - .addGap(22) .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_configHTML.createSequentialGroup() - .addGap(2) + .addGap(24) .addComponent(lb_FilePath)) - .addComponent(tf_inputFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_panel_configHTML.createSequentialGroup() + .addGap(22) + .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.BASELINE) + .addComponent(tf_inputFile, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(btnChooseFile)))) + .addGap(46) .addGroup(gl_panel_configHTML.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_configHTML.createSequentialGroup() .addGap(2) @@ -494,7 +507,7 @@ public class ConfigurationWindow extends JFrame { .addComponent(cb_SplitWholePagesOnly) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(cb_UseMathJax) - .addContainerGap(274, Short.MAX_VALUE)) + .addContainerGap(282, Short.MAX_VALUE)) ); panel_configHTML.setLayout(gl_panel_configHTML); return panel_configHTML; @@ -657,21 +670,28 @@ public class ConfigurationWindow extends JFrame { }); JButton btn_SaveAs = new JButton("Save As"); - + btn_SaveAs.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + JOptionPane.showMessageDialog(singleFrame, "Not implemented, yet."); + } + }); JButton btn_Save = new JButton("Save"); - + btn_Save.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent actionEvent) { + JOptionPane.showMessageDialog(singleFrame, "Not implemented, yet."); + } + }); JButton btn_Convert = new JButton("Convert"); btn_Convert.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { try { ConfigurationReader reader = new ConfigurationReader(configuration, context); Application.main(reader.getCommandLine()); - Debug.printLog("Finish", context); - + JOptionPane.showMessageDialog(singleFrame, "Conversion completed."); } catch(Throwable e) { StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); - Debug.printLog(errors.toString(), context); + JOptionPane.showMessageDialog(singleFrame,errors.toString()); } } @@ -723,7 +743,7 @@ public class ConfigurationWindow extends JFrame { try { ConfigurationWindow frame = new ConfigurationWindow(context,doc); singleFrame = frame; - frame.setBounds(100, 100, 800, 800); + frame.setBounds(100, 100, 1100, 800); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); diff --git a/src/main/java/pro/litvinovg/w2phtml/gui/FileDialog.java b/src/main/java/pro/litvinovg/w2phtml/gui/FileDialog.java new file mode 100644 index 0000000..89c621c --- /dev/null +++ b/src/main/java/pro/litvinovg/w2phtml/gui/FileDialog.java @@ -0,0 +1,47 @@ +package pro.litvinovg.w2phtml.gui; + +import java.awt.Dimension; +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.filechooser.FileNameExtensionFilter; +public class FileDialog extends JFrame { + + /** + * + */ + private static final long serialVersionUID = 1L; + + public static String chooseFile(String lastPath){ + File selected = null; + File currentDirectory = null; + if (lastPath != null && !lastPath.isEmpty()) { + File preselected = new File(lastPath); + if (preselected.exists()) { + if (preselected.isFile()) { + currentDirectory = preselected.getParentFile(); + } else if (preselected.isDirectory()) { + currentDirectory = preselected; + } + } + } + if (currentDirectory == null) { + currentDirectory = new File(System.getProperty("user.home")); + } + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setPreferredSize(new Dimension(800,600)); + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + FileNameExtensionFilter filter = new FileNameExtensionFilter("ODT", "odt"); + fileChooser.setFileFilter(filter); + fileChooser.setCurrentDirectory(currentDirectory); + int result = fileChooser.showOpenDialog(null); + if (result == fileChooser.APPROVE_OPTION){ + selected = fileChooser.getSelectedFile(); + return selected.getAbsolutePath(); + } else { + return ""; + } + + } + +} diff --git a/src/main/oxt2/images/w2phtml.png b/src/main/oxt2/images/w2phtml.png index 586c74c..30c41bd 100644 Binary files a/src/main/oxt2/images/w2phtml.png and b/src/main/oxt2/images/w2phtml.png differ