RCP:如何把Preferences中的項從一個類別移動到另一個類別


前言

很久沒寫文章了,准備寫一系列關於Eclipse RCP /Plugin的文章。 這些文章都是trouble shooting性質的,不准備寫的很細,當你碰到這樣的問題,google到時,能幫你把問題解決了,這就ok了。另外有些問題我也是不求甚解的,哈。

問題描述

在開發RCP程序時,一些引用的plugin會向Perferences中貢獻一些Perference page,如何刪除這些page已經很很多文章介紹了。本文介紹的是,如果我們希望保留某些Perference page,並且把它們合並到其他plugin貢獻的category中去,那該怎么做呢。

比如,如下圖中,希望把SSH2合並到Team類別下去,SSH2可以用於egit進行源代碼管理,所以把它合並到Team中看上去合情合理。

image

其實需要的技術你可能都會了,只是我們需要創造性的使用它們。

如何刪除一個Perference page或者類別

這是我們需要用到的技術,已經有很多文章介紹了,我這里再簡要介紹下:

1,首先,我們可以通過以下代碼打印根節點下所有的Perference page或者類別的ID:

PreferenceManager pm = PlatformUI.getWorkbench().getPreferenceManager();
		IPreferenceNode[] arr = pm.getRootSubNodes();
		for(IPreferenceNode pn:arr){
		    System.out.println("Label:" + pn.getLabelText() + " ID:" + pn.getId());
		}

 

根據打印的信息,選擇你要刪除的Perference Page或者類別,然后刪除它們,例如:

pm.remove("org.eclipse.ant.ui.AntPreferencePage");
pm.remove("org.eclipse.gmf.graphdef.diagram.general");
pm.remove("org.eclipse.pde.ui.MainPreferencePage");

 

這些代碼可以放在WorkbenchWindowAdvisor postWindowOpen()中執行

 

回到我們的題目

1,首先,如上節所示,我們可以找到SSH2和Team的ID:

org.eclipse.jsch.ui.SSHPreferences
org.eclipse.team.ui.TeamPreferences

2,找到SSH2頁面對應的類,通過Spy(Shift+Alt+F1)找

image

其類為:org.eclipse.jsch.internal.ui.preference.PreferencePage, 貢獻它的plugin為org.eclipse.jsch.ui

3,在plugin.xml的dependencies中添加org.eclipse.jsch.ui的引用。

4,刪除原有的SSH2

pm.remove("org.eclipse.jsch.ui.SSHPreferences");

如果SSH2不是直接在根節點下,可以刪除其所在類別,或者,在其所在類別下刪除它,這里不在累述。

5,把SSH2添加到Team類別下。通過在plugin.xml中添加以下代碼來實現:

<extension
       point="org.eclipse.ui.preferencePages">
    <page
          category="org.eclipse.team.ui.TeamPreferences"
          class="org.eclipse.jsch.internal.ui.preference.PreferencePage"
          id="org.eclipse.jsch.ui.SSHPreferences"
          name="SSH2">
    </page>
 </extension>

 

其中,category和class是前文中獲取的,name和id其實可以隨便填,但是我還是使用了默認的值。

 

大功告成:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM