??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品天天看,欧美性视频在线,㊣最新国产の精品bt伙计久久
http://www.aygfsteel.com/wayne-wang/zh-cnTue, 24 Jun 2025 15:20:41 GMTTue, 24 Jun 2025 15:20:41 GMT60- GEF中的property view的?/title>http://www.aygfsteel.com/wayne-wang/archive/2010/07/12/325869.htmlWayne WangWayne WangMon, 12 Jul 2010 08:48:00 GMThttp://www.aygfsteel.com/wayne-wang/archive/2010/07/12/325869.htmlhttp://www.aygfsteel.com/wayne-wang/comments/325869.htmlhttp://www.aygfsteel.com/wayne-wang/archive/2010/07/12/325869.html#Feedback0http://www.aygfsteel.com/wayne-wang/comments/commentRss/325869.htmlhttp://www.aygfsteel.com/wayne-wang/services/trackbacks/325869.htmlGEF作ؓ一个图形框Ӟ对于其中囑Ş元素的属性的讑֮是非帔R要的Q这是因为每一个图形元素的背后都是一个模型,而这些模型可以包含很多业务数据,如果我们最l选定GEF作ؓ我们应用的解x案的话,我们可以利用property view来实现对q些业务数据属性的讑֮Q?/span> q就是我们这里即讨论的问题?br />
Eclipse中property view一共有两种Q普通的property viewQ也是key/valuecd的property view和tabbed property viewQ后者将viewer分成了若q个tab pageQ利用tab page不同的属性分l;从我使用的经验来看,我比较們于前者,因ؓ前者可以解决绝大部分的问题Q即便是我们希望~辑一个非常复杂的属性,也可以自定义属性编辑器来完成。比如我们常用的SWT Designer是使用了第一U方式,当然我们不能否认后一U方式由于可以在property viewer中自定义布局及控Ӟ界面比较炫,但是׃需要三个扩展点的配合,操作hq是比较ȝ的;不过q里我不是要讨论两者的优劣Q而是要讨论如何用这两个东西Q因此还是书归正传吧?
org.eclipse.ui.views.properties.tabbedQ这是绝不能的。只有这P属性页面才能显C出来;
首先要想使用eclipse的property viewQ必d相应的RCPE序或者PluginE序中配|DependenciesQ如果是W一U,需要增加org.eclipse.ui.viewsQ如果是后一U,需要增?br />
其次Q如果应用ؓRCPQ那么可以在视图文g中以“org.eclipse.ui.views.PropertySheet”为id|增加一个viewQ这个id是Eclipse默认的属性页idQ如果你C住,那么用IPageLayout.ID_PROP_SHEET好了Q当然这一步ƈ不是必须的,你可以在自己的WorkbenchWindowAdvisor中配|setShowFastViewBars(true)Q这L序运行时可以通过fast view bar来动态打开q个view了,怎么做随你;我的是两者都要,以防用户属性页关闭了,无法打开Q(题外话是可以Z个Command/Action来打开属性页Q但是我觉得没有必要Q;
l过以上两步Q我们的准备工作完成了Q下面就是如何在我们的Editor炚w了某一个图形元素时Q属性页能够被通知。事实上q里说的囑Ş元素是不切的,而应该是q个囑Ş元素对应的模型元素;让我们把眼光攑־更宽q一点,事实上ƈ不仅仅局限于GEFQQ何实CIPropertySource接口的模型元素都可以被属性页昄出来Q?br />
模型元素实现IPropertySource后需要实C下方法,具体含义׃说了Q?br />
·public Object getEditableValue();
·public IPropertyDescriptor[] getPropertyDescriptors();
·public Object getPropertyValue(Object id);
·public boolean isPropertySet(Object id);
·public void resetPropertyValue(Object id);
·public void setPropertyValue(Object id, Object value);
其中最最重要的是W???个方法;其是第二个Ҏؓ重要。在定义PropertyDescriptorӞEclipse已经提供了两个主要的属性描q类TextPropertyDescriptor和ComboBoxPropertyDescriptorQ分别对应文本框和组合下拉框Q但是如果是比较复杂的属性,例如像字体、颜色这L属性,相应的属性描q类p自己定义了,q时需要承PropertyDescriptorcd义自q属性描q类Q而在定义q个cȝq程中,必须指定相应的CellEditorQ也是属性编辑器c,我的是对于非常复杂的属性,比如属性中包含了很多不同类型的子属性,q些子属性的个数会发生变化等{,那么可以定义一个DialogCellEditor的子c,以对话框的Ş式显C所有的子属性,q在对话框中Ҏ子属性进行显C、操作。也是_
MyPropertyDescriptorQ承PropertyDescriptorQ?-->MyCellEditorQ承CellEditorQ?-->MyDialogQ承DialogQ?-->子属性显C、操作;
l过q些操作对于W一Uproperty view已经_了,在GEF应用中当你选择了某一个图形时Q其属性就能显C出来了。但是对于后者来_q还q远不够Q因为它比较吊!
对于tabbed property view来说Q以上的步骤是不能缺的,除此而外q需要配|org.eclipse.ui.views.properties.tabbed.propertyContributor、org.eclipse.ui.views.properties.tabbed.propertyTabs和org.eclipse.ui.views.properties.tabbed.propertySections三个扩展点;W一个扩展点的最主要作用是通知属性页I竟是workbench part为属性页提供属性,说白了(我的理解Q就是所有我们想最l选择的那些元素放在了哪个workbench part上)Q因此相应的contributorId往往是editor的idQ这里需要超U注意的是对于GEF应用来说Q必要配置typeMapperQ也是定义实现ITypeMapper的类Q如下:
public Class mapType(Object object) {
Class type = object.getClass();
if(object instanceof EditPart) {
type = ((EditPart)object).getModel().getClass();
}
return type;
}
没有q一步,毛也昄不出来;其实我们可以通过以上代码看出Q这个{换就是将控制器{换ؓ模型Q此外相应的editor必须l承ITabbedPropertySheetPageContributor接口Q提供getContributorId()ҎQ也是q回editor的IDQ而且q要重蝲getAdapterҎ提供如下实现Q?br />
public Object getAdapter(Class adapter) {
if(adapter == IPropertySheetPage.class) {
return new TabbedPropertySheetPage(this);
}
return super.getAdapter(adapter);
}
当完成了以上所有步骤之后,分页的属性页显C出来了。具体的Section的定义就不说了,其实不过是定义public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage)q个函数|了Q它和其他的createControl没什么区别,只是我们可以利用getWidgetFactory()来构造界面元素,其他的没有什么新鲜的Q?br />
以上是属性页在GEF中的应用?

]]>
վ֩ģ壺
ϲ|
|
ˮ|
|
|
|
|
ʡ|
|
«|
|
|
ٳ|
|
Ϫ|
䰲|
ƺ|
|
|
ˮ|
ɽ|
|
ˮ|
Դ|
|
ϲ|
˫|
Զ|
Ȩ|
|
ٲ|
־|
|
|
|
̫|
|
ԭƽ|
־|
|
|