Creating an Eclipse View (2)

[b][size=18]下一个例子:The Word View[/size][/b]
[b][size=12]添加一个view extension到plugin.xml中去[/size][/b]
与上面例子相似,这个extension拥有id,name, icon 和class。此外,extension还包括category元素。category用于对view进行分组,分组的结果在Show view对话框里面显示。
[code]
<extension point = "org.eclipse.ui.views">
<category id = "org.eclipse.ui.article" name = "Articlle">
</category>
<view id = "org.eclipse.ui.articles.views.wordview"
name = "World View"
icon = "icons\view.gif"
category = "org.eclipse.ui.article"
class = "org.eclipse.ui.articles.views.WordView"/>
</extension>
[/code]
[b][size=12]在插件里面为该extension定义一个View Class[/size][/b]
该类继承了类ViewPart
[code]
public class WordView extends ViewPart
{
WordFile input;
ListViewer viewer;
Action addItemAction, deleteItemAction, selectAllAction;
IMemento memento;

public WordView(){
super();
input = new WordFile(new File("list.lst"));
}
/**
* @see IViewPart.int(IViewSite)
*/
public void init(IViewSite site) throws PartInitException{
super.init(site);
//Nomally we might do other stuff here.
}


public void createPartControl(Composite parent){
// Create viewer.
viewer = new ListViewer(parent);
viewer.setContentProvider (new WordContentProvider());
viewer.setLabelProvider(new LabelProvider());
viewer.setInput(input);

//Create menu and toolbars.
createAction();
createMenu();
createToolbar();
createContextMenu();
hookGlobalActions();

//Restore state from the previous session.
restoreState();
}

public void setFocus(){
viewer.getConstrol().setFocus();
}
}
[/code]

[b][size=12]Menus and Toolbars[/size][/b]
每个view都有一个局部菜单和局部工具条(local menu & local toolbar)。局部工具条位于view标题条的右边。局部菜单在最初是没有显示出来,但是当你点击菜单按钮的时候菜单就会显示出来,局部菜单位于关闭按钮的左边。例子如下图:
[img]http://www.eclipse.org/articles/viewArticle/menus.jpg[/img]
view的菜单和工具条控件最初是空的和不可见的。只有当往工具条和菜单加入元素时,它们才变得可见。View同样可以往位于父窗体底部的状态条(status bar)添加元素。总之,局部菜单、局部工具条和状态条统称为[i]动作条(action bars)[/i]。

在代码里面,是通过[i]view site[/i]来访问动作条[i]动作条(action bars)[/i]。[i]view site[/i]是[i]view part[/i]和[i]viewPart外部世界[/i]的主要接口。如果你的view是[i]ViewPart[/i]的直接子类,那么可以通过[b]ViewPart.getViewSite[/b]方法来获得[b]view site[/b]。如果不是[i]ViewPart[/i]的子类,则需要你自己控制好[b]site[/b]数据的保存和提取,这些数据要被传进去通过[i]IViewPart.init()[/i]。通过[b]site[/b],你就可以调用[i]site[/i]的[i]getActionBars().getMenumanager[/i]来获取[b]IMenuManager[/b]。或通过[i]getActionBars.getToolBarManager()[/i]来获取[b]IToolBarManager[/b]。

其中,[b]IMenuManager[/b]和[b]IToolBarManager[/b]接口是JFace的抽象。它们包装了SWT菜单和工具条对象,所以作为插件开发者,可以把这种设计为动作和动作实现。一个动作表示一个用户可以通过菜单和工具条激活的命令。在JFace里面,要创建菜单和工具条,需要通过创建[i]org.eclipse.jface.action.IAction[/i]的实例,并把实例添加到[i]IMenuManager[/i]或[i]IToolBarManager[/i]。

[b][size=12]定义动作[/size][/b]
在Word view例子里,我们将要局部工具条条里加入“Add...”和“Delete”两个动作,往局部菜单里加入“Select All"动作。[b]通常情况下,view的最初动作的实现是通过java code来实现,而其他插件开发者要扩展此局部菜单和局部工具条则需要XML来实现[/b]。word view 例子动作是[b]org.eclipse.jface.actions.Action[/b]的匿名子类。
[code]
public void createActions(){
addItemAction = new Action("Add...."){
public void run(){
addItem()
}
};
addItemAction.setImageDescriptor(getImageDescription("add.gif"));

deleteItemAction = new Action("Delecte"){
public void run(){
deleteItem();
}
};
deleteItemActon.setImageDescripton(getImageDescription("delete.gif");

selectAllAction = new Action("Select All") {
public void run() {
selectAll();
}
};

//Add selection listener;
viewer.addSelectionChangedListener(new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent e){
updateActionEnablement();
}
});
}
[/code]
获取图片的方法:
[code]
/**
*Return the image descriptor with the given relative path
*/
public ImageDescriptor getImageDescriptor(String relativePath){
String iconPath = "icons/";
try{
ViewsPlugin plugin = ViewsPlugin.getDefault();
URL installURL = plugin.getDescriptor().getInstallURL();
URL url = new URL(installURL, iconPath+relativePath);
return ImageDescriptor.createFromURL(url);
}catch (MalformedURLException e){
return ImageDescriptor.getMissingImageDescriptor();
}
}
private void updateActionEnablement() {
IStructuredSelection sel =
(IStructuredSelection)viewer.getSelection();
deleteItemAction.setEnabled(sel.size() > 0);
}
[/code]


[b][size=12]Adding Actions[/size][/b]
[code]
/**
* Create menu.
*/
private void createMenu() {
IMenuManager mgr = getViewSite().getActionBars().getMenuManager();
mgr.add(selectAllAction);
}

/**
* Create toolbar.
*/
private void createToolbar() {
IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
mgr.add(addItemAction);
mgr.add(deleteItemAction);
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值