1 package sourceforge.org.qmc2.options.editor.ui.actions; 2 3 import java.util.Locale; 4 5 import org.eclipse.core.commands.operations.IUndoableOperation; 6 import org.eclipse.jface.dialogs.IInputValidator; 7 import org.eclipse.jface.dialogs.InputDialog; 8 import org.eclipse.jface.window.Window; 9 import org.eclipse.swt.SWT; 10 import org.eclipse.swt.widgets.TreeColumn; 11 12 import sourceforge.org.qmc2.options.editor.ui.QMC2Editor; 13 import sourceforge.org.qmc2.options.editor.ui.operations.AddLanguageOperation; 14 15 public class AddLanguageAction extends BaseAction { 16 AddLanguageAction(QMC2Editor editor)17 public AddLanguageAction(QMC2Editor editor) { 18 super(editor); 19 setAccelerator(SWT.MOD1 + 'A'); 20 setText("&Add Language..."); 21 } 22 23 @Override isEnabled()24 public boolean isEnabled() { 25 return editor.getTemplateFile() != null; 26 } 27 28 @Override run()29 public void run() { 30 InputDialog dialog = new InputDialog(editor.getShell(), "Add language", 31 "Add the new language id", "", new IInputValidator() { 32 33 @Override 34 public String isValid(String newText) { 35 String errorMsg = null; 36 37 if (newText == null || newText.trim().length() <= 1) { 38 errorMsg = "You must enter a language code from ISO 639"; 39 } 40 41 if (errorMsg == null) { 42 TreeColumn[] columns = editor.getViewer().getTree() 43 .getColumns(); 44 45 for (int i = 0; i < columns.length 46 && errorMsg == null; i++) { 47 if (columns[i].getText().equals( 48 newText.toLowerCase())) { 49 errorMsg = "Language already exists"; 50 } 51 } 52 } 53 54 if (errorMsg == null) { 55 String[] languages = Locale.getISOLanguages(); 56 boolean hasLanguage = false; 57 for (int i = 0; i < languages.length 58 && errorMsg == null; i++) { 59 if (languages[i].toLowerCase().equals( 60 newText.toLowerCase())) { 61 hasLanguage = true; 62 } 63 } 64 if (!hasLanguage) { 65 errorMsg = "You must enter a language code from ISO 639"; 66 } 67 } 68 69 return errorMsg; 70 } 71 }); 72 if (dialog.open() == Window.OK) { 73 String newLang = dialog.getValue(); 74 IUndoableOperation operation = new AddLanguageOperation(editor, 75 newLang); 76 editor.executeOperation(operation); 77 } 78 super.run(); 79 } 80 } 81