/*
* jEdit - Programmer's Text Editor
* :tabSize=4:indentSize=4:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2015 jEdit contributors
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.gjt.sp.jedit.gui;
import org.gjt.sp.jedit.AbstractOptionPane;
import org.gjt.sp.jedit.GUIUtilities;
import org.gjt.sp.jedit.jEdit;
import org.gjt.sp.jedit.View;
import org.gjt.sp.jedit.browser.VFSBrowser;
import org.gjt.sp.util.GenericGUIUtilities;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
/** Add Mode dialog.
* @author Dale Anson
*/
public class AddModeDialog extends EnhancedDialog
{
private JTextField modeName;
private JTextField modeFile;
private JButton browse;
private JTextField filenameGlob;
private JTextField firstLineGlob;
private final JButton ok;
private final JButton cancel;
private boolean canceled = false;
public AddModeDialog(View view)
{
super(view, jEdit.getProperty("options.editing.addMode.dialog.title"), true);
JPanel content = new JPanel(new BorderLayout());
content.setBorder(BorderFactory.createEmptyBorder(12, 12, 11, 11));
setContentPane(content);
// main content
AbstractOptionPane mainContent = new AbstractOptionPane("addmode");
mainContent.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
modeName = new JTextField(16);
mainContent.addComponent(jEdit.getProperty("options.editing.addMode.dialog.modeName"), modeName);
modeFile = new JTextField();
browse = new JButton("...");
browse.addActionListener(new ActionHandler());
JPanel browsePanel = new JPanel(new BorderLayout());
browsePanel.add(modeFile, BorderLayout.CENTER);
browsePanel.add(browse, BorderLayout.EAST);
mainContent.addComponent(jEdit.getProperty("options.editing.addMode.dialog.modeFile"), browsePanel);
filenameGlob = new JTextField(16);
mainContent.addComponent(jEdit.getProperty("options.editing.addMode.dialog.filenameGlob"), filenameGlob);
firstLineGlob = new JTextField();
mainContent.addComponent(jEdit.getProperty("options.editing.addMode.dialog.firstLineGlob"), firstLineGlob);
content.add(mainContent);
// buttons
JPanel buttons = new JPanel();
buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
buttons.setBorder(BorderFactory.createEmptyBorder(17, 0, 0, 6));
ok = new JButton(jEdit.getProperty("common.ok"));
ok.addActionListener(new ActionHandler());
getRootPane().setDefaultButton(ok);
cancel = new JButton(jEdit.getProperty("common.cancel"));
cancel.addActionListener(new ActionHandler());
GenericGUIUtilities.makeSameSize(ok, cancel);
buttons.add(Box.createGlue());
buttons.add(ok);
buttons.add(Box.createHorizontalStrut(6));
buttons.add(cancel);
content.add(BorderLayout.SOUTH, buttons);
pack();
setLocationRelativeTo(view);
setVisible(true);
}
public String getModeName()
{
return modeName.getText();
}
public String getModeFile()
{
return modeFile.getText();
}
public String getFilenameGlob()
{
return filenameGlob.getText();
}
public String getFirstLineGlob()
{
return firstLineGlob.getText();
}
public boolean isCanceled()
{
return canceled;
}
@Override
public void ok()
{
// check values
String modeName = getModeName();
if (modeName == null || modeName.isEmpty())
{
JOptionPane.showMessageDialog(jEdit.getActiveView(), jEdit.getProperty("options.editing.addMode.dialog.Mode_name_may_not_be_empty.", "Mode name may not be empty."), jEdit.getProperty("options.editing.addMode.dialog.errorTitle", "Error"), JOptionPane.ERROR_MESSAGE);
return;
}
String modeFile = getModeFile();
if (modeFile == null || modeFile.isEmpty())
{
JOptionPane.showMessageDialog(jEdit.getActiveView(), jEdit.getProperty("options.editing.addMode.dialog.Mode_file_may_not_be_empty.", "Mode file may not be empty."), jEdit.getProperty("options.editing.addMode.dialog.errorTitle", "Error"), JOptionPane.ERROR_MESSAGE);
return;
}
String filenameGlob = getFilenameGlob();
String firstLineGlob = getFirstLineGlob();
if ((filenameGlob == null || filenameGlob.isEmpty()) && (firstLineGlob == null || firstLineGlob.isEmpty()))
{
JOptionPane.showMessageDialog(jEdit.getActiveView(),jEdit.getProperty("options.editing.addMode.dialog.Either_file_name_glob_or_first_line_glob_or_both_must_be_filled_in.", "Either file name glob or first line glob or both must be filled in."), jEdit.getProperty("options.editing.addMode.dialog.errorTitle", "Error"), JOptionPane.ERROR_MESSAGE);
return;
}
canceled = false;
dispose();
}
@Override
public void cancel()
{
canceled = true;
dispose();
}
private class ActionHandler implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if(source == browse)
{
View view = jEdit.getActiveView();
String path = jEdit.getSettingsDirectory();
int type = VFSBrowser.OPEN_DIALOG;
boolean multiSelect = false;
String[] filename = GUIUtilities.showVFSFileDialog(view, path, type, multiSelect);
if (filename != null && filename.length > 0)
{
modeFile.setText(filename[0]);
}
else
{
modeFile.setText("");
}
}
else if (source == ok)
{
ok();
}
else if (source == cancel)
{
cancel();
}
}
}
}