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