/** * */ package org.korsakow.ide.ui.settings; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.List; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JTextField; import org.korsakow.ide.Application; import org.korsakow.ide.lang.LanguageBundle; import org.korsakow.ide.ui.components.model.KComboboxModel; import org.korsakow.ide.ui.factory.IUIFactory; import org.korsakow.ide.ui.factory.UIFactory; import org.korsakow.ide.util.FileUtil; import org.korsakow.ide.util.UIHelper; import org.korsakow.services.export.IVideoEncodingProfile; public class ExportSettingsPanel extends JPanel implements ISettingsPanel { private JCheckBox exportVideosCheck; private JCheckBox exportSoundsCheck; private JCheckBox exportSubtitlesCheck; private JCheckBox exportImagesCheck; private JCheckBox exportWebFilesCheck; private JTextField exportDirectory; private JButton exportDirectoryButton; private JComboBox videoEncodingProfileCombo; private JCheckBox encodeVideoOnExportCheck; public ExportSettingsPanel() { initUI(); initListeners(); } private void initUI() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); JPanel panel; add(panel = createExportTypesPanel()); panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); add(panel = createVideoPanel()); panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); add(panel = createFolderPanel()); panel.setAlignmentX(JPanel.LEFT_ALIGNMENT); add(Box.createVerticalGlue()); } private JPanel createExportTypesPanel() { JPanel content = new JPanel(); content.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); content.add(new JLabel("Types to export:")); content.add( Box.createVerticalStrut(5) ); Box checkPanel = Box.createVerticalBox(); checkPanel.setAlignmentX(LEFT_ALIGNMENT); checkPanel.setBorder(BorderFactory.createEmptyBorder(0,20,0,0)); checkPanel.add( exportVideosCheck = new JCheckBox("Videos") ); checkPanel.add( Box.createVerticalStrut(5) ); checkPanel.add( exportImagesCheck = new JCheckBox("Images") ); checkPanel.add( Box.createVerticalStrut(5) ); checkPanel.add( exportSoundsCheck = new JCheckBox("Sounds") ); checkPanel.add( Box.createVerticalStrut(5) ); checkPanel.add( exportSubtitlesCheck = new JCheckBox("Subtitles") ); checkPanel.add( Box.createVerticalStrut(5) ); checkPanel.add( exportWebFilesCheck = new JCheckBox("Web Files") ); content.add(checkPanel); content.add( Box.createVerticalStrut(15) ); content.add(new JLabel("Export location")); Box exportPanel = Box.createHorizontalBox(); exportPanel.setAlignmentX(LEFT_ALIGNMENT); exportPanel.add(exportDirectory = new JTextField()); exportDirectory.setMinimumSize(new Dimension(200, 25)); exportDirectory.setMaximumSize(new Dimension(2000, 25)); exportPanel.add(exportDirectoryButton = new JButton("...")); content.add(exportPanel); content.add( Box.createVerticalStrut(10) ); return content; } private JPanel createVideoPanel() { JPanel videoPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); videoPanel.setLayout(new BoxLayout(videoPanel, BoxLayout.Y_AXIS)); videoPanel.setBorder(BorderFactory.createTitledBorder("Video")); videoPanel.add(UIHelper.createLabelPanel("", LanguageBundle.getString("projectsettings.encodeonexport.label"), encodeVideoOnExportCheck = UIFactory.getFactory().createCheckBox(""))); videoPanel.add(UIHelper.createLabelPanel("", "Encoding profile", videoEncodingProfileCombo = UIFactory.getFactory().createComboBox("", new DefaultComboBoxModel(), new VideoEncodingProfileRenderer()))); return videoPanel; } private JPanel createFolderPanel() { IUIFactory fac = UIFactory.getFactory(); JPanel folderPanel = new JPanel(); // Util.list(Component.class, fac.createLabel("Publish"), fac.createTextField("")), // Util.list(Component.class, fac.createLabel("Draft"), fac.createTextField("")) // ); // folderPanel.setBorder(BorderFactory.createTitledBorder("Folders")); // folderPanel.setLayout(new BoxLayout(folderPanel, BoxLayout.Y_AXIS)); // folderPanel.add(UIHelper.createBorderLayoutLabelPanel("Publish Folder", publishFeld = UIFactory.getFactory().createTextField(""))); // folderPanel.add(UIHelper.createBorderLayoutLabelPanel("Draft Folder", draftField = UIFactory.getFactory().createTextField(""))); return folderPanel; } private void initListeners() { encodeVideoOnExportCheck.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { if (!encodeVideoOnExportCheck.isSelected()) Application.getInstance().showOneTimeAlertDialog("EncodeOnExport", ExportSettingsPanel.this, LanguageBundle.getString("projectsettings.encodeonexport.warning.title"), LanguageBundle.getString("projectsettings.encodeonexport.warning.message")); videoEncodingProfileCombo.setEnabled(encodeVideoOnExportCheck.isSelected()); } }); exportDirectoryButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { String currentValue = exportDirectory.getText().trim(); if (currentValue.isEmpty()) currentValue = "index.html"; File file = Application.getInstance().showFileSaveDialog(exportDirectoryButton, new File(currentValue)); if (file != null) { if (FileUtil.isProbablyADirectory(file)) file = new File(file, "index.html"); exportDirectory.setText(file.getPath()); } } }); class Test implements ActionListener { public void actionPerformed(ActionEvent event ) { final JCheckBox source = (JCheckBox)event.getSource(); if (!source.isSelected()) Application.getInstance().showOneTimeAlertDialog("ExportSettings.exportTypes", source, "Reminder", "Please remember to do a full export at least once!"); } } exportVideosCheck.addActionListener(new Test()); exportImagesCheck.addActionListener(new Test()); exportSoundsCheck.addActionListener(new Test()); exportSubtitlesCheck.addActionListener(new Test()); exportWebFilesCheck.addActionListener(new Test()); } public void setVideoEncodingProfileChoices(List<IVideoEncodingProfile> choices) { videoEncodingProfileCombo.setModel(new KComboboxModel(choices)); } public void setVideoEncodingProfile(IVideoEncodingProfile profile) { videoEncodingProfileCombo.setSelectedItem(profile); } public IVideoEncodingProfile getVideoEncodingProfile() { return (IVideoEncodingProfile)videoEncodingProfileCombo.getSelectedItem(); } public void setEncodeVideoOnExport(boolean encode) { encodeVideoOnExportCheck.setSelected(encode); videoEncodingProfileCombo.setEnabled(encodeVideoOnExportCheck.isSelected()); } public boolean getEncodeVideoOnExport() { return encodeVideoOnExportCheck.isSelected(); } public boolean getExportVideos() { return exportVideosCheck.isSelected(); } public void setExportVideos(boolean video) { exportVideosCheck.setSelected(video); } public boolean getExportImages() { return exportImagesCheck.isSelected(); } public void setExportImages(boolean image) { exportImagesCheck.setSelected(image); } public boolean getExportSounds() { return exportSoundsCheck.isSelected(); } public void setExportSounds(boolean sound) { exportSoundsCheck.setSelected(sound); } public boolean getExportSubtitles() { return exportSubtitlesCheck.isSelected(); } public void setExportSubtitles(boolean subtitle) { exportSubtitlesCheck.setSelected(subtitle); } public boolean getExportWebFiles() { return exportWebFilesCheck.isSelected(); } public void setExportWebFiles(boolean web) { exportWebFilesCheck.setSelected(web); } public String getExportDirectory() { return exportDirectory.getText(); } public void setExportDirectory(String dir) { exportDirectory.setText(dir); } public void dispose() { } private static class VideoEncodingProfileRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value != null) setText(((IVideoEncodingProfile)value).getName()); return this; } } }