在Eclipse RCP开发中利用Trim Areas

来源:互联网 发布:电子记账本软件 编辑:程序博客网 时间:2024/05/13 22:52

Trim Area指Eclipse Workbench的外围空间,共有底部状态栏(toolbar:org.eclipse.ui.trim.status),顶部工具栏(toolbar:org.eclipse.ui.main.toolbar),左上方trim(toolbar:org.eclipse.ui.trim.command1),右上方trim(toolbar:org.eclipse.ui.trim.command2),左边栏trim(toolbar:org.eclipse.ui.trim.vertical1),右边栏trim(toolbar:org.eclipse.ui.trim.vertical1)。

首先给一个底部状态栏trim区域的实例:

图中最右下方的"no internet"就是trim.status,从右向左依次是后台进度状态,编辑器状态,公共状态。每个区域边缘都有虚竖线条,说明这个区域可以拖拽D$D, Drag and Drop。

 

我们今天要做的就是加一个控件到右下方的trim status区域,这个控件的作用是显示当前的互联网连接情况。

这个控件必须继承WorkbenchWindowControlContribution类,并在createControl方法里生成想要达到的效果。

 

上图实例是添加了一个Hyperlink控件,设置为不显示下划线,添加MouseTrackListener,当鼠标进入时显示下划线,离开后不显示;又添加HyperlinkAdapter,当点击链接时,打开互联网配置对话框。

 

如果打开RCP时,状态是no internet, 但是在使用过程中,网络连接上了比如说上海电信,该怎么在程序中修改状态呢?

这个信息在网络上很少,推荐的使用Listener方法,这样程序的耦合性会更好。

假设网络状态的变化触发了Preference的PropertyChangeEvent,那只需要在程序中添加PlatformUI.getPreferenceStore().addPropertyChangeListener,然后在事件中判断哪个属性event.getProperty()发生了变化,如果是网络状态,就可以使用event.getNewValue()设置控件中链接的显示内容。

 

如下图所示,网络状态变成了Shanghai Telecom:

细心的网友会发现,Shanghai Telecom这几个字显示不全,当中被用省略号代替了。

为了让内容显示全,作者也费了不少劲。 首先发现如果把控件拖拽到其他trim area,比如右上方,就显示全了,可是这不是解决方案,也不是用户能接受的。

 

仔细研究WorkbenchWindowControlContribution类,发现它有个isDynamic方法,重写此方法并返回true之后,同时在修改控件内容的地方调用getParent().udpate(true);

结果如下:

 

需要注意的是update(true)会重新执行createControl方法,所以createControl方法里面的代码一定要精简,只需要首次执行并执行一次的,用一个boolean值判断下是否已经初始化。

 

毕竟程序的性能很重要,要避免运行重复的代码。

【完】

原创粉丝点击