构建eclipse plugin 的Preferences

现在正在做一个 rcp 软件,刚刚做好了 Preferences, 总结一下。此方法也适用 eclipse plugin 。在作 ipass 的时候,没有发现有这么简便的方法。
 
以一个配置密码策略的页面为例:
public class PreferencePassPolicyPage extends FieldEditorPreferencePage
              implements IWorkbenchPreferencePage {
       public static final String PASSWORD_CHARS = "passgate.password.chars";
       public static final String ALPHABETIC = "alphabetic";
       public static final String ALPHANUMERIC = "alphanumeric";
       public static final String NUMERIC = "numeric";
       public static final String PASSWORD_CASE = "passgate.password.case";
       public static final String UPPER = "uppercase";
       public static final String LOWER = "lowercase";
       public static final String MIXED = "mixed";
       public static final String PASSWORD_LENGTH = "passgate.password.length";
       public PreferencePassPolicyPage() {
              super(GRID);
              setTitle("Password Policy");
              setImageDescriptor(ImageShop.getDescriptor("category_obj"));
              setPreferenceStore(PwdgatePlugin.getDefault().getPreferenceStore());
       }
       public void init(IWorkbench workbench) {
       }
       protected void createFieldEditors() {
              // characters
              String[][] choose = new String[][] {
                            new String[] { "Use alphabetic only", ALPHABETIC },
                            new String[] { "Use numberic only", NUMERIC },
                            new String[] { "Use alphanumeric only", ALPHANUMERIC } };
              FieldEditor charcterEditor = new RadioGroupFieldEditor(PASSWORD_CHARS,
                            "Characters", 1, choose, getFieldEditorParent(), true);
              addField(charcterEditor);
 
              // case
              choose = new String[][] { new String[] { "Lower case", LOWER },
                            new String[] { "Upper case", UPPER },
                            new String[] { "Mixed", MIXED } };
              FieldEditor caseEditor = new RadioGroupFieldEditor(PASSWORD_CASE,
                            "Case", 1, choose, getFieldEditorParent(), true);
              addField(caseEditor);
 
              FieldEditor lengthEditor = new IntegerFieldEditor(PASSWORD_LENGTH,
                            "Password length", getFieldEditorParent());
              addField(lengthEditor);
       }
}
 
页面继承了FieldEditorPreferencePage,只需要实现createFieldEditors()即可构建自己的Preference结构;实现了IWorkbenchPreferencePage接口,这样eclipse才能够通过plugin.xml中定义的extension point="org.eclipse.ui.preferencePages"加载本页。程序开始的静态常量是本页要用到的key,用来保存相应的属性值。在createFieldEditors()方法中,RadioGroupFieldEditor是一组Radio Button,省去了自己一个一个的常见控件。相应的还有IntegerFieldEditor,BooleanFieldEditor,StringFieldEditor等等可以使用,使用方法十分简单,参考api即可。实现的效果如下:
 
在plugin.xml文件中加入如下内容:
<extension
         point= "org.eclipse.ui.preferencePages" >
      <pag e
            class= "com.mi.pwdgate.dialog.PreferenceEditorPage"
            id= "com.mi.pwdgate.dialog.PreferenceEditorPage"
            name= "PassGate" />
      <page
            category= "com.mi.pwdgate.dialog.PreferenceEditorPage"
            class= "com.mi.pwdgate.dialog.PreferencePassPolicyPage"
            id= "com.mi.pwdgate.dialog.PreferencePassPolicyPage"
            name= "Password Policy" />
</extension>
class为自己编写的preference页面的类,id可以任意取,但必须要使唯一的,一般都用类名,name是用来显示在界面上的名字, category 是当前的 Preference 属于哪个 Preference ,就填写哪个 Preference id 。本例中 Password Policy 的父节点是 PassGate
 
设定Preference 的默认值
       编写PreferenceInitializer.java,在这里设定preference的默认值,必须要继承AbstractPreferenceInitializer类。
public class PreferenceInitializer extends AbstractPreferenceInitializer {
       public void initializeDefaultPreferences() {
              IPreferenceStore store = PwdgatePlugin.getDefault()
                            .getPreferenceStore();
              // for PassPolicy Preference
              store.setDefault(PreferencePassPolicyPage.PASSWORD_CHARS,
                            PreferencePassPolicyPage.ALPHANUMERIC);
              store.setDefault(PreferencePassPolicyPage.PASSWORD_CASE,
                            PreferencePassPolicyPage.LOWER);
              store.setDefault(PreferencePassPolicyPage.PASSWORD_LENGTH, 8);
 
              // for interaction preference
              store.setDefault(PreferenceInteractionPage.DELETE_COMFIRM, true);
              store.setDefault(PreferenceInteractionPage.DELETE_TO_BIN, true);
       }
}
在plugin.xml文件中加入如下内容:
<extension
         point= "org.eclipse.core.runtime.preferences" >
      <initializer class= "com.mi.pwdgate.dialog.PreferenceInitializer" />
</extension>
 
再给一张截图
我喜欢里面自动完成的功能,HOHO 本软件CnPlugin是Allround Automations公司PL/SQL Developer工具的插件,支持PL/SQL Developer 7.0以上版本。增加了PL/SQL Developer工具本身所没有的一些小功能,功能基本一些已有官方插件的整合,以方便Oracle编程开发。 1.5.400现有功能简要说明: 主菜单功能 所有主菜单可在PL/SQL中设置工具栏按钮,以方便调用 CnPlugin / Comment /&Commnet Lines 以“--”注释当前选中的代码 CnPlugin / Comment /&Uncommnet Lines 去除当前选中以“--”注释的代码 CnPlugin / &ReConnect 重连中断的数据库连接 CnPlugin / &ExPaste 对当前选中或剪贴板内空格式化为IN 字符串,如格式化字符串AA,BB,CC为('AA','BB',CC') CnPlugin / &ExCreate 建表时插入COMMENT的字段说明,如CREATE TABLE tt(ID NUMBER --编号);语句,除执行当前建表语句外,会自动生成comment on column TT.ID is '编号'注释语句 CnPlugin / Script / Load From MDB 以列表窗口形式读取已保存在Access数据库中的SQL语句 CnPlugin / Script / Save To MDB 保存当前SQL语句至Access数据库 CnPlugin / Script / Save As To MDB 另存为当前SQL语句至Access数据库 CnPlugin / Toggle Read Only 设置/取消设置当前SQL窗口为直读。 CnPlugin / Find All... 对当前窗口内空查找指定的字符串,列出全部匹配内容,支持正则表达式查找 CnPlugin / &Preferences CnPlugin插件属性设置窗口 CnPlugin / &About' CnPlugin关于窗口 右键菜单功能 Query data using alias 以字段注释字符作为字段名拼出查询SQL语句(选中表名出现) Open in new SQL Window 复制当前窗口选中的SQL语句到新窗口中(选中字符串是出现) Execute in new SQL Window 复制当前窗口选中的SQL语句到新窗口中并执行语句(选中字符串是出现) Generate Word Documentation 导出当前表结构内容至Word文档(选中表名出现) 无菜单功能 快捷键输入功能:如输入s空格,带出'select * from ',支持光标定位 登录时打开或执行指定SQL文件
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值