如何使用 Eclipse CNF 的 Saveable Protocol 实现对 View 的保存
2010-05-04 00:00:00 来源:WEB开发网publicabstractvoiddoSave(IProgressMonitor monitor): 在 isDirty 返回 true 的情况下,当用户点击保存或使用快捷键 Ctrl+S 时,该方法会被调用,当保存模型的代码成功执行时,我们需要将编辑器的 dirty 标志位重新设置为 false,同时调用 firePropertyChange() 方法将编辑器的界面状态更新,此时标题栏的星号(*)消失。
publicabstractbooleanisSaveAsAllowed(): 表明编辑器的“另存为”按钮是否可用。
publicabstractvoiddoSaveAs(): 在 isSaveAsAllowed() 返回 true 的情况下,用户点击“另存为”,doSaveAs() 方法将被调用。与 doSave 方法类似,用户可以在该方法里实现对模型的保存逻辑。一般情况下我们可能复用 doSave 的逻辑完成对模型内容的另存为。
protectedvoidfirePropertyChange(finalintpropertyId):当编辑器属性发生变化时,可以通过调用该方法通知所注册的监听器。例如,当修改发生时,在编辑器标题前出现的“*”前缀。
CNF 的 Saveable Protocol 的实现原理
与 Editor 的保存不同,View 往往是及时保存,即 view 上的修改在完成时就保存了,如我们选择了导航器上某个结点,并通过 PropertiesView 修改了结点的属性,例如结点的名字时,此时,属性的修改便及时地反映到导航器上。这是 Eclipse 应用开发所倡导的最佳实践之一,因为视图的主要用于对模型的导航,而不是对模型进行修改。因此,在 ViewPart 的实现上并不提供 doSave(),doSaveAs() 来对模型进行保存。
然而,一些 Eclipse 应用希望通过 view 来完成对模型结点的保存,例如,用户同时在 editor 上对几个不同的结点进行编辑,当编辑结束时,用户只想保存其中几个 editor 的修改,些时,如果只是通过逐一地对每个 editor 进行保存,这将大大地影响操作的效率。由于导航器起着对结点的导航功能,如果能通过在导航器上完成对多个不同结点的保存,将大大方便用户的操作。
更多精彩
赞助商链接