📄 saveconfigaction.java
字号:
package abchr.gui;
import abchr.ConfigIOModule;
import abchr.ConfigIOManager;
import abchr.RawTestConfig;
import guiutils.FlexibleGridLayout;
import guiutils.SimpleFileChooser;
import guiutils.SimpleFileFilter;
import jlfgr.GraphicsRepository;
import org.jdom.Document;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileFilter;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
class SaveConfigAction extends AbstractAction {
private static SimpleFileChooser configFileChooser;
private static boolean useRelativePaths=true;
private static final ConfigIOModule[] IO_MODULES;
private static FileFilter[] fileFilters;
private TestSetupDialog parent;
public SaveConfigAction(TestSetupDialog parent) {
super("Save Test Config",GraphicsRepository.getToolbarIcon("general/Save16.gif"));
this.putValue(Action.SHORT_DESCRIPTION,"Saves the current configuration");
this.parent=parent;
}
public void actionPerformed(ActionEvent e) {
initFileChooser();
if(parent.isEncryptionActive()) {
for(int i=0;i<IO_MODULES.length;i++) {
if(!IO_MODULES[i].isReadable()){configFileChooser.setFileFilter(fileFilters[i]);break;}
}
} else {
for(int i=0;i<IO_MODULES.length;i++) {
if(IO_MODULES[i].isReadable()){configFileChooser.setFileFilter(fileFilters[i]);break;}
}
}
File f=configFileChooser.saveFile(parent);
if(f==null){return;}
FileOutputStream stream=null;
RawTestConfig.setRelativePathOutput(useRelativePaths?f.getParentFile():null);
try {
stream=new FileOutputStream(f);
} catch(FileNotFoundException e1) {
JOptionPane.showMessageDialog(parent,"The file "+f+" could not be opened.","Error",JOptionPane.ERROR_MESSAGE);
return;
}
try {
Document doc=parent.getXML();
FileFilter fileFilter=configFileChooser.getFileFilter();
for(int i=0;i<IO_MODULES.length;i++) {
if(((SimpleFileFilter)fileFilter).getExtension().equals('.'+IO_MODULES[i].getExtension())) {
IO_MODULES[i].getConfigIO().writeConfig(stream,doc);
break;
}
}
} catch(IOException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(parent,"File could not be saved: \n"+e1.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
} finally {
try{stream.close();}catch(Exception ex){}
}
}
private static void initFileChooser() {
if(configFileChooser!=null){return;}
configFileChooser=new SimpleFileChooser();
JPanel accessoryPanel=new JPanel(new FlexibleGridLayout(2,2,5,0,true));
JCheckBox relativePathsCheckBox=new JCheckBox("",true);
relativePathsCheckBox.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e){useRelativePaths=((JCheckBox)e.getSource()).isSelected();}
});
accessoryPanel.add(relativePathsCheckBox);
accessoryPanel.add(new JLabel("Use relative paths"));
accessoryPanel.add(new JComponent(){});
accessoryPanel.add(new JLabel("in config file"));
configFileChooser.setAccessory(accessoryPanel);
configFileChooser.setAcceptAllFileFilterUsed(false);
ConfigIOModule[] modules=ConfigIOManager.getInstance().getModules();
fileFilters=new FileFilter[modules.length];
for(int i=0;i<modules.length;i++) {
fileFilters[i]=new SimpleFileFilter('.'+modules[i].getExtension(),modules[i].getDescription()+" (*."+modules[i].getExtension()+')');
configFileChooser.addChoosableFileFilter(fileFilters[i]);
}
}
static{IO_MODULES=ConfigIOManager.getInstance().getModules();}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -