In progress: [ Issue 43 ] Allow code generation in multiple languages simultaneously
https://code.google.com/p/protobuf-dt/issues/detail?id=43
Working on "Compiler" preference page.
diff --git a/com.google.eclipse.protobuf.ui/icons/checked.gif b/com.google.eclipse.protobuf.ui/icons/checked.gif
new file mode 100644
index 0000000..b90c36b
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/checked.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/unchecked.gif b/com.google.eclipse.protobuf.ui/icons/unchecked.gif
new file mode 100644
index 0000000..7ed00d7
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/unchecked.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
index ed7a6c0..7c73fab 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferencePage.java
@@ -22,6 +22,7 @@
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.PluginImageHelper;
import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
@@ -52,6 +53,7 @@
private Button btnRefreshProject;
private Button btnRefreshOutputFolder;
+ @Inject private PluginImageHelper imageHelper;
@Inject private DirectoryNameValidator directoryNameValidator;
@Inject private EventListeners eventListeners;
private TargetLanguageOutputDirectoryEditor targetLanguageOutputDirectoryEditor;
@@ -101,7 +103,7 @@
new Label(grpCompilerLocation, SWT.NONE);
new Label(grpCompilerLocation, SWT.NONE);
- targetLanguageOutputDirectoryEditor = new TargetLanguageOutputDirectoryEditor(cmpMain);
+ targetLanguageOutputDirectoryEditor = new TargetLanguageOutputDirectoryEditor(cmpMain, imageHelper);
targetLanguageOutputDirectoryEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
tbtmRefresh = new TabItem(tabFolder, SWT.NONE);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java
index 38137d6..430357d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguage.java
@@ -17,11 +17,13 @@
*
* @author alruiz@google.com (Alex Ruiz)
*/
-public enum TargetLanguage {
+public class TargetLanguage {
- JAVA("Java"), CPP("C++"), PYTHON("Python");
+ public static final TargetLanguage JAVA = new TargetLanguage("Java");
+ public static final TargetLanguage CPP = new TargetLanguage("C++");
+ public static final TargetLanguage PYTHON = new TargetLanguage("Python");
- private String name;
+ private final String name;
private TargetLanguage(String name) {
this.name = name;
@@ -31,7 +33,7 @@
* Returns this language's name.
* @return this language's name.
*/
- public String languageName() {
+ public String name() {
return name;
}
@@ -43,4 +45,9 @@
if (store.getBoolean(GENERATE_PYTHON_CODE)) return PYTHON;
return JAVA;
}
+
+ // TODO remove
+ public static TargetLanguage[] values() {
+ return new TargetLanguage[] { JAVA, CPP, PYTHON };
+ }
}
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageIsEnabledEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageIsEnabledEditor.java
index 5a318b7..979fb8f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageIsEnabledEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageIsEnabledEditor.java
@@ -18,8 +18,11 @@
*/
class TargetLanguageIsEnabledEditor extends EditingSupport {
+ private final ColumnViewer viewer;
+
TargetLanguageIsEnabledEditor(ColumnViewer viewer) {
super(viewer);
+ this.viewer = viewer;
}
@Override protected CellEditor getCellEditor(Object element) {
@@ -36,5 +39,6 @@
@Override protected void setValue(Object element, Object value) {
((TargetLanguagePreference)element).enabled((Boolean)value);
+ viewer.refresh();
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageOutputDirectoryEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageOutputDirectoryEditor.java
index 477d110..d5b8a19 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageOutputDirectoryEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguageOutputDirectoryEditor.java
@@ -8,11 +8,15 @@
*/
package com.google.eclipse.protobuf.ui.preferences.compiler;
+import static com.google.eclipse.protobuf.ui.preferences.compiler.TargetLanguage.*;
+
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.PluginImageHelper;
/**
* Editor where users can specify which are the target languages for protoc and the location of the output folders for
@@ -21,36 +25,48 @@
* @author alruiz@google.com (Alex Ruiz)
*/
public class TargetLanguageOutputDirectoryEditor extends Composite {
- private Table table;
- /**
- * Creates a new </code>{@link TargetLanguageOutputDirectoryEditor}</code>.
- * @param parent a widget which will be the parent of the new instance (cannot be {@code null}.)
- */
- public TargetLanguageOutputDirectoryEditor(Composite parent) {
+ public TargetLanguageOutputDirectoryEditor(Composite parent, final PluginImageHelper imageHelper) {
super(parent, SWT.NONE);
setLayout(new GridLayout(1, false));
TableViewer tableViewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION);
- table = tableViewer.getTable();
+ Table table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+ TableViewerColumn tblclmnVwrEnabled = new TableViewerColumn(tableViewer, SWT.NONE);
+ TableColumn tblclmnEnabled = tblclmnVwrEnabled.getColumn();
+ tblclmnEnabled.setResizable(false);
+ tblclmnEnabled.setWidth(27);
+ tblclmnVwrEnabled.setLabelProvider(new ColumnLabelProvider() {
+ @Override public String getText(Object element) {
+ return "";
+ }
+
+ @Override public Image getImage(Object element) {
+ boolean enabled = ((TargetLanguagePreference)element).isEnabled();
+ return imageHelper.getImage(enabled ? "checked.gif" : "unchecked.gif");
+ }
+ });
+ tblclmnVwrEnabled.setEditingSupport(new TargetLanguageIsEnabledEditor(tableViewer));
+
TableViewerColumn tblclmnVwrLanguage = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tblclmnLanguage = tblclmnVwrLanguage.getColumn();
+ tblclmnLanguage.setResizable(false);
tblclmnLanguage.setWidth(100);
tblclmnLanguage.setText("Language");
tblclmnVwrLanguage.setLabelProvider(new ColumnLabelProvider() {
@Override public String getText(Object element) {
- return ((TargetLanguagePreference)element).language();
+ return ((TargetLanguagePreference)element).language().name();
}
});
- tblclmnVwrLanguage.setEditingSupport(new TargetLanguageIsEnabledEditor(tableViewer));
TableViewerColumn tblclmnVwrOutputDirectory = new TableViewerColumn(tableViewer, SWT.NONE);
TableColumn tblclmnOutputDirectory = tblclmnVwrOutputDirectory.getColumn();
+ tblclmnOutputDirectory.setResizable(false);
tblclmnOutputDirectory.setWidth(100);
tblclmnOutputDirectory.setText("Output Directory");
tblclmnVwrOutputDirectory.setLabelProvider(new ColumnLabelProvider() {
@@ -65,9 +81,9 @@
private TargetLanguagePreference[] languages() {
TargetLanguagePreference[] languages = new TargetLanguagePreference[3];
- languages[1] = new TargetLanguagePreference(TargetLanguage.JAVA, "", true);
- languages[0] = new TargetLanguagePreference(TargetLanguage.CPP, "", true);
- languages[2] = new TargetLanguagePreference(TargetLanguage.PYTHON, "", true);
+ languages[0] = new TargetLanguagePreference(JAVA, "", true);
+ languages[1] = new TargetLanguagePreference(CPP, "", true);
+ languages[2] = new TargetLanguagePreference(PYTHON, "", true);
return languages;
}
}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguagePreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguagePreference.java
index 4d20757..1af0818 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguagePreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/TargetLanguagePreference.java
@@ -27,11 +27,11 @@
}
/**
- * Returns the name of the language.
- * @return the name of the language.
+ * Returns the language.
+ * @return the language.
*/
- public String language() {
- return language.languageName();
+ public TargetLanguage language() {
+ return language;
}
/**