In progress: [ Issue 40 ] Add support for import resolution across multiple folders
https://code.google.com/p/protobuf-dt/issues/detail?id=40

Adding a preference page for import paths.
diff --git a/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties b/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
index 6feb38a..dbc0008 100644
--- a/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
+++ b/com.google.eclipse.protobuf.ui/OSGI-INF/l10n/bundle.properties
@@ -6,7 +6,7 @@
 page.name.0 = Syntax Coloring
 page.name.1 = Templates
 page.name.2 = Compiler
-page.name.3 = Protocol Buffer Compiler
+page.name.3 = Paths
 keyword.label = Protocol Buffer
 command.description = Trigger expensive validation
 command.name = Validate
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index dc50779..75efb54 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -48,7 +48,7 @@
   </extension>
   <extension point="org.eclipse.ui.preferencePages">
     <page
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.RootPreferencePage"
       id="com.google.eclipse.protobuf.Protobuf" name="%page.name">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
@@ -67,6 +67,11 @@
       id="com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage" name="%page.name.2">
       <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
     </page>
+    <page category="com.google.eclipse.protobuf.Protobuf"
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
+      id="com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage" name="%page.name.3">
+      <keywordReference id="com.google.eclipse.protobuf.ui.keyword_Protobuf" />
+    </page>
   </extension>
   <extension point="org.eclipse.ui.keywords">
     <keyword id="com.google.eclipse.protobuf.ui.keyword_Protobuf" label="%keyword.label" />
@@ -161,8 +166,23 @@
   </extension>
   <extension point="org.eclipse.ui.propertyPages">
     <page
-      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
-      id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage" name="%page.name.3" selectionFilter="single">
+      class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.RootPreferencePage"
+      id="com.google.eclipse.protobuf.Protobuf"
+      name="%page.name" selectionFilter="single">
+    </page>
+    <page
+          category="com.google.eclipse.protobuf.Protobuf"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.compiler.PreferencePage"
+          id="com.google.eclipse.protobuf.ui.properties.compiler.PropertyPage"
+          name="%page.name.2"
+          selectionFilter="single">
+    </page>
+    <page
+          category="com.google.eclipse.protobuf.Protobuf"
+          class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:com.google.eclipse.protobuf.ui.preferences.paths.PreferencePage"
+          id="com.google.eclipse.protobuf.ui.properties.paths.PropertyPage"
+          name="%page.name.3"
+          selectionFilter="single">
     </page>
   </extension>
   <extension point="org.eclipse.xtext.builder.participant">
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
index ebae962..0891d2e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceAndPropertyPage.java
@@ -23,8 +23,7 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.*;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.inject.Inject;
@@ -173,4 +172,17 @@
   protected final boolean areProjectSettingsActive() {
     return btnEnableProjectSettings.getSelection();
   }
+
+  /** {@inheritDoc} */
+  public void init(IWorkbench workbench) {}
+
+  @Override public final boolean performOk() {
+    savePreferences();
+    return true;
+  }
+
+  /**
+   * Saves the current settings.
+   */
+  protected abstract void savePreferences();
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java
new file mode 100644
index 0000000..559cfb6
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/RootPreferencePage.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class RootPreferencePage extends PreferenceAndPropertyPage {
+
+  private static final String PREFERENCE_PAGE_ID = RootPreferencePage.class.getName();
+  
+  @Inject public RootPreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+    super(preferenceStoreAccess);
+  }
+
+  /** {@inheritDoc} */
+  @Override protected Control createContents(Composite parent) {
+    // generated by WindowBuilder
+    Composite contents = super.contentsComposite(parent);
+    Label label = new Label(contents, SWT.NONE);
+    label.setText("General Settings.");
+    return contents;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void onProjectSettingsActivation(boolean active) {}
+
+  /** {@inheritDoc} */
+  @Override protected String preferencePageId() {
+    return PREFERENCE_PAGE_ID;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void savePreferences() {}
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
index 78dbdf7..2b1326b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PreferencePage.java
@@ -24,7 +24,6 @@
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.IWorkbench;
 import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
 
 import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
@@ -69,7 +68,6 @@
   @Override protected Control createContents(Composite parent) {
     // generated by WindowBuilder
     Composite contents = contentsComposite(parent);
-    contents.setLayout(new GridLayout(3, false));
 
     btnCompileProtoFiles = new Button(contents, SWT.CHECK);
     btnCompileProtoFiles.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
@@ -358,14 +356,7 @@
   }
 
   /** {@inheritDoc} */
-  public void init(IWorkbench workbench) {}
-
-  @Override public boolean performOk() {
-    savePreferences();
-    return true;
-  }
-
-  private void savePreferences() {
+  @Override protected void savePreferences() {
     IPreferenceStore store = getPreferenceStore();
     if (isPropertyPage()) {
       store.setValue(ENABLE_PROJECT_SETTINGS, areProjectSettingsActive());
@@ -384,8 +375,8 @@
   }
   
   /** {@inheritDoc} */
-  @Override protected void onProjectSettingsActivation(boolean projectSettingsEnabled) {
-    setProjectSpecificOptionsEnabled(projectSettingsEnabled);
+  @Override protected void onProjectSettingsActivation(boolean active) {
+    setProjectSpecificOptionsEnabled(active);
     setCompilerOptionsEnabled(isEnabledAndSelected(btnCompileProtoFiles));
   }
   
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
new file mode 100644
index 0000000..9513c36
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/PreferencePage.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences.paths;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+import com.google.eclipse.protobuf.ui.preferences.PreferenceAndPropertyPage;
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ *
+ */
+public class PreferencePage extends PreferenceAndPropertyPage {
+
+  private static final String PREFERENCE_PAGE_ID = PreferencePage.class.getName();
+
+  private Group grpResolutionOfImported;
+  private Button btnOneFolderFor;
+  private Button btnLookForImported;
+  private Text txtFolderNames;
+
+  @Inject public PreferencePage(IPreferenceStoreAccess preferenceStoreAccess) {
+    super(preferenceStoreAccess);
+  }
+
+  /** {@inheritDoc} */
+  @Override protected Control createContents(Composite parent) {
+    // generated by WindowBuilder
+    Composite contents = contentsComposite(parent);
+    
+    grpResolutionOfImported = new Group(contents, SWT.NONE);
+    grpResolutionOfImported.setLayout(new GridLayout(1, false));
+    grpResolutionOfImported.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
+    grpResolutionOfImported.setText("Resolution of imported files");
+    
+    btnOneFolderFor = new Button(grpResolutionOfImported, SWT.RADIO);
+    btnOneFolderFor.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+    btnOneFolderFor.setText("One folder for all .proto files");
+    
+    btnLookForImported = new Button(grpResolutionOfImported, SWT.RADIO);
+    btnLookForImported.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+    btnLookForImported.setText("Look for imported files in folders:");
+    
+    txtFolderNames = new Text(grpResolutionOfImported, SWT.BORDER);
+    txtFolderNames.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+    new Label(contents, SWT.NONE);
+    return contents;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void onProjectSettingsActivation(boolean active) {
+    // TODO Auto-generated method stub
+
+  }
+
+  /** {@inheritDoc} */
+  @Override protected String preferencePageId() {
+    return PREFERENCE_PAGE_ID;
+  }
+
+  /** {@inheritDoc} */
+  @Override protected void savePreferences() {
+    // TODO Auto-generated method stub
+    
+  }
+
+}