# Eclispe RCP - Preferences ohne "DefaultPages"



## Saxony (29. Jun 2009)

Hiho,

ich verwende in meiner Anwendung auch den Eclipse eigenen Preferences-Dialog. Diesen habe ich einem Menüpunkt zugeordnet und er wird auch ordnungsgemäß angezeigt. Leider hat dieser einen kleinen Schönheitsfehler - es befinden sich bereits PreferencePages da drin. Dies sind General und Install/Update.

Im Netz habe ich folgenden Tipp gefunden:


```
@Override

public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

//....
	@Override
	public void postWindowOpen() {

		PreferenceManager preferenceManager = PlatformUI.getWorkbench()
				.getPreferenceManager();
		preferenceManager.remove("org.eclipse.ui.preferencePages.Workbench");
	}
}
```

Ist dies die richtige Vorgehensweise um die Preferences zu säubern? Ich möchte im Endeffekt nur meine eigenen Pages da drin haben. Ausserderm entfernt oben genanntes nicht die Page für Install/Update...

vielen Dank
bye Saxony


----------



## stefan. (30. Jun 2009)

Hast du die Preferences über das Template erzeugt? Wenn ja wurden ein paar neue Klassen erstellt, die du leicht bearbeiten kannst.


----------



## Saxony (30. Jun 2009)

Ja das Erstellen von eigenen PreferencePages ist auch kein Problem. Aber in dem zugehörigen PreferenceDialog stehen aber nicht nur meine Pages drinn sondern eben auch noch General und Install/Update - also Seiten, welche zu Eclipse dazu gehören. Diese will ich aber nicht haben! 

bye Saxony


----------



## Koringar (1. Jul 2009)

Hi,

ich bin jetzt mal so frech zu behaupten, das dies ein Bug ist. Habe ich bei mir auch manchmal, wenn ich das PlugIn oder RCP über Eclipse starte, ist aber wie gesagt nicht immer da (nur manchmal). Wenn du dann aber dein PlugIn auslieferst müssten diese dann nicht mehr drin sein, zumindest ist es bei mir so.


----------



## Saxony (1. Jul 2009)

Hiho,

diese Seiten befinden sich auch nach einem Deploy noch im PreferenceDialog...also doch schon sehr nervig.

bye Saxony


----------



## Saxony (15. Okt 2009)

Hiho,

falls es mal noch jemand wissen will:


```
PreferenceManager preferenceManager = PlatformUI.getWorkbench().getPreferenceManager();
				
List preferenceNodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER);


for (Iterator it = preferenceNodes.iterator(); it.hasNext();) {

	IPreferenceNode preferenceNode = (IPreferenceNode) it.next();
		   
	System.out.println(preferenceNode.getId());
}
```

Damit erhält man alle aktuell verfügbaren PreferencePages.


```
// entfernt General Page
preferenceManager.remove("org.eclipse.ui.preferencePages.Workbench");		
// Entfernt Install/Update Page
preferenceManager.remove("org.eclipse.update.internal.ui.preferences.MainPreferencePage");
```

bye Saxony


----------



## Saxony (15. Okt 2009)

Hiho,

leider scheint dies aber nicht mit eigenen Pages zu klappen:


```
preferenceManager.remove("myproject.MySettingsPage");
```

Wenn ich durch alle PreferenceNodes iteriere zeigt es mir meine Pages zwar mit an, aber ein remove bewirkt nichts.
Auch dann nicht, wenn ich remove direkt mit remove(IPreferenceNode) aufrufe anstatt mit String.

bye Saxony


----------



## Gonzo17 (15. Okt 2009)

Also wenn du es etwas einfacher machen willst, dann kannst du das über die Extension "org.eclipse.ui.activities" regeln. Per Plug-In Spy einfach die ID der PreferencePage anschauen und kopieren und dann entsprechend deaktivieren.


----------



## Koringar (15. Okt 2009)

Das mit den Activities funktioniert super. Mann kann bestimmte Punkte von PlugIns unterdrücken oder auch das komplette Plugin.


```
<extension
         point="org.eclipse.ui.activities">
      <activity
            id="de.elena.zss.gui.activities.deactivate"
            name="Deactivate Elemente">
      </activity>
      <activityPatternBinding
            activityId="de.elena.zss.gui.activities.deactivate"
            pattern="[B]org.eclipse.*[/B]">
      </activityPatternBinding>
   </extension>
```

Mit dem Pattern definierst du was du nicht haben willst, dadurch dass das Activity kein 'EnableWhen' hat wird es unterdrückt und nicht angezeigt.


----------



## Saxony (15. Okt 2009)

Hiho,

der Vollständigkeit halber - Wie kann man nun eigentlich eigene Seiten noch ausblenden?

Ich habe hier den Fall, dass wenn sich Nutzer B anmeldet sollen PreferencePages, die Nutzer A sonst sieht ausgeblendet werden.

Zur Zeit versuche ich es über PreferenceManager#remove innerhalb ApplicationWorkbenchWindowAdviser#postWindowOpen - das scheint aber nicht zu klappen (s.o.).

bye Saxony


----------



## Koringar (15. Okt 2009)

Im Grunde genau so, du musst bei Pattern blos dann eben die ID der Page angeben.

Wenn du jedoch in einer Anwendung zwischen zwei Benutzern unterscheiden willst, dann musste die Activitie etwas erweitern. Und zwar um den 'EnableWhen' Zweig, der das dann alles Prüft. Dazu gibt es schon viele Beispiele, die ach hier und da mal gepostet wurden.

Hier der Link: z.B.


----------

