的保存(5)
时间:2012-01-28 IBM 黄飞
第三步:对视图中树型结点元素进行修饰,当对应的可保存元素发生修改后,其名称以“*”作为后缀,当修改被保存后,后缀“*”号消失。该功能主要通过 org.eclipse.ui.decorators 扩展点实现。
图 7. Decorator 扩展点
在上图中,objectClass 属性指明的是所要修饰对象的类型。class 属性指明的修饰的具体实现类,Eclipse 框架为我们提供了轻量级的修饰机制,只需将 lightweight 属性值指明为 true,同时,将所要提供的修饰类实现 ILightweightLabelDecorator 接口,框架就能对树型结点元素提供前缀、后缀、重叠图片的修饰。在本文的例子中,当模型元素对应的 eidtor 发生修改时,树型导航器上结点的名称将以“*”作为后缀。具体代码如下:
清单 2. 样例代码
public class FileModifiedDecorator extends LabelProvider implements
ILightweightLabelDecorator {
@Override
public void decorate(Object element, IDecoration decoration) {
if (element instanceof TextFile) {
TextFileEditor editor = (TextFileEditor) FolderManager
.getWorkbenchPart((TextFile) element);
if (editor != null && editor.isDirty())
decoration.addSuffix("*");
}
}
public void refreshDecorator(final Object element) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
fireLabelProviderChanged(new LabelProviderChangedEvent(
FileModifiedDecorator.this, element));
}
});
}
}
如何使用Eclipse CNF的Saveable Protocol实现对View的保存(6)
时间:2012-01-28 IBM 黄飞
第四步,关联保存模型与 UI 展示,当所要保存的元素发生改变时,更新 Navigator 视图的标题的状态,同时 Save,SaveAll 菜单项将根据用户选择的结点,更新其状态。具体步骤如下:
当用户通过编辑器对模型元素内空进行修改时,通知编辑器、视图、元素修饰器,使其作出相应的变化,如编辑器与视图标题将以“*”作为前缀,树型结点上的名称将以“*”作为后缀。代码片段如下:
清单 3. 样例代码
public class TextFileEditor extends EditorPart{
@Override
public void doSave(IProgressMonitor monitor) {
dirty = false;
PlatformUI.getWorkbench().getDisplay().asyncExec( new Runnable() {
public void run() {
firePropertyChange(IEditorPart.PROP_DIRTY);
// Notify the decorator;
refreshDecoration();
// Notify the content navigator.
FolderManager.fireSaveablesDirtyChanged();
}
});
}
}
public class FolderManager {
public static void fireSaveablesDirtyChanged() {
final IViewPart view = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage().findView(SaveableView.ID);
if (view != null) {
Display.getDefault().syncExec(new Runnable() {
pu
|