Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java')
-rw-r--r--org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java73
1 files changed, 63 insertions, 10 deletions
diff --git a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java
index c6a8bf1..ae4ab20 100644
--- a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java
+++ b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/I18NPage.java
@@ -11,6 +11,7 @@
******************************************************************************/
package org.eclipse.babel.editor.i18n;
+import java.lang.reflect.Constructor;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
@@ -20,8 +21,9 @@ import org.eclipse.babel.core.message.IMessagesBundle;
import org.eclipse.babel.core.message.manager.IMessagesEditorListener;
import org.eclipse.babel.core.message.manager.RBManager;
import org.eclipse.babel.editor.IMessagesEditorChangeListener;
-import org.eclipse.babel.editor.internal.MessagesEditor;
+import org.eclipse.babel.editor.internal.AbstractMessagesEditor;
import org.eclipse.babel.editor.internal.MessagesEditorChangeAdapter;
+import org.eclipse.babel.editor.tree.actions.AbstractRenameKeyAction;
import org.eclipse.babel.editor.util.UIUtils;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -31,8 +33,10 @@ import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
@@ -47,10 +51,10 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
/** Minimum height of text fields. */
private static final int TEXT_MIN_HEIGHT = 90;
- private final MessagesEditor editor;
- private final SideNavComposite keysComposite;
+ protected final AbstractMessagesEditor editor;
+ protected final SideNavComposite keysComposite;
private final Composite valuesComposite;
- private final Map<Locale, I18NEntry> entryComposites = new HashMap<Locale, I18NEntry>();
+ private final Map<Locale, AbstractI18NEntry> entryComposites = new HashMap<Locale, AbstractI18NEntry>();
private Composite entriesComposite;
// private Composite parent;
@@ -69,7 +73,8 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
* @param resourceMediator
* resource manager
*/
- public I18NPage(Composite parent, int style, final MessagesEditor editor) {
+ public I18NPage(Composite parent, int style,
+ final AbstractMessagesEditor editor) {
super(parent, style);
this.editor = editor;
sashForm = new SashForm(this, SWT.SMOOTH);
@@ -127,13 +132,21 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
}
public void onResourceChanged(IMessagesBundle bundle) {
- I18NEntry i18nEntry = entryComposites.get(bundle.getLocale());
+ // [RAP] only update tree, which belongs to this UIThread
+ if (!keysComposite.isDisposed()) {
+ Display display = keysComposite.getTreeViewer().getTree()
+ .getDisplay();
+ if (display.equals(Display.getCurrent())) {
+ AbstractI18NEntry i18nEntry = entryComposites.get(bundle
+ .getLocale());
if (i18nEntry != null && !getSelection().isEmpty()) {
i18nEntry.updateKey(String
.valueOf(((IStructuredSelection) getSelection())
.getFirstElement()));
}
}
+ }
+ }
});
}
@@ -181,7 +194,7 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
locales = UIUtils.filterLocales(locales);
for (int i = 0; i < locales.length; i++) {
Locale locale = locales[i];
- addI18NEntry(editor, locale);
+ addI18NEntry(locale);
}
editor.addChangeListener(new MessagesEditorChangeAdapter() {
@@ -195,17 +208,35 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
return scrolledComposite;
}
- public void addI18NEntry(MessagesEditor editor, Locale locale) {
- I18NEntry i18NEntry = new I18NEntry(entriesComposite, editor, locale);
+ public void addI18NEntry(Locale locale) {
+ AbstractI18NEntry i18NEntry = null;
+ try {
+ Class<?> clazz = Class.forName(AbstractI18NEntry.INSTANCE_CLASS);
+ Constructor<?> cons = clazz.getConstructor(Composite.class,
+ AbstractMessagesEditor.class, Locale.class);
+ i18NEntry = (AbstractI18NEntry) cons.newInstance(entriesComposite,
+ editor, locale);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
// entryComposite.addFocusListener(localBehaviour);
entryComposites.put(locale, i18NEntry);
entriesComposite.layout();
}
+ public void removeI18NEntry(Locale locale) {
+ AbstractI18NEntry i18NEntry = entryComposites.get(locale);
+ if (i18NEntry != null) {
+ i18NEntry.dispose();
+ entryComposites.remove(locale);
+ entriesComposite.layout();
+ }
+ }
+
public void selectLocale(Locale locale) {
Collection<Locale> locales = entryComposites.keySet();
for (Locale entryLocale : locales) {
- I18NEntry entry = entryComposites.get(entryLocale);
+ AbstractI18NEntry entry = entryComposites.get(entryLocale);
// TODO add equivalent method on entry composite
// Text textBox = entry.getTextBox();
@@ -239,4 +270,26 @@ public class I18NPage extends ScrolledComposite implements ISelectionProvider {
public TreeViewer getTreeViewer() {
return keysComposite.getTreeViewer();
}
+
+ @Override
+ public void setEnabled(boolean enabled) {
+ super.setEnabled(enabled);
+ for (AbstractI18NEntry entry : entryComposites.values())
+ entry.setEnabled(enabled);
+ }
+
+ public void setEnabled(boolean enabled, Locale locale) {
+ // super.setEnabled(enabled);
+ for (AbstractI18NEntry entry : entryComposites.values()) {
+ if (locale == entry.getLocale()
+ || (locale != null && locale.equals(entry.getLocale()))) {
+ entry.setEnabled(enabled);
+ break;
+ }
+ }
+ }
+
+ public SideNavTextBoxComposite getSidNavTextBoxComposite() {
+ return keysComposite.getSidNavTextBoxComposite();
+ }
}

Back to the top