package crm;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ContributionItemFactory;
import org.eclipse.ui.internal.util.SWTResourceUtil;
import org.eclipse.ui.part.ViewPart;
import crm.content.*;
import crm.core.Company;
import crm.core.Customer;
import crm.core.Relation;
import crm.core.impl.*;
import crm.editor.EditorInput;
public class CRMViewPart extends ViewPart {
private Action deleteAction;
private Action addAction;
private Action modifyAction;
private Action saveAction;
private TableViewer viewer;
/*private TreeViewer treeViewer;
private IMenuManager manager;
private CLabel cLabel1;
private CLabel phoneCLable;
private CLabel cLabel3;
private CLabel addressLabel;*/
private IRunnableWithProgress runnable;
//private Label l;
public CRMViewPart() {
// TODO Auto-generated constructor stub
super();
}
@Override
public void createPartControl(Composite parent) {
// TODO Auto-generated method stub
Relation relation = new RelationImpl("123456", "Yunnan");
Company company = new CompanyImpl("Jinfonet", relation);
/*
* Label label = new Label(parent, SWT.NONE); label.setText("This is a
* test of ViewPart.");
*/
// CustonmerContentProvider provider = new CustonmerContentProvider();
viewer = new TableViewer(parent, SWT.NULL | SWT.FULL_SELECTION);
TableColumn nameColumn = new TableColumn(viewer.getTable(), SWT.NONE);
nameColumn.setWidth(80);
TableColumn IdColumn = new TableColumn(viewer.getTable(), SWT.NONE);
IdColumn.setWidth(60);
TableColumn PhoneColumn = new TableColumn(viewer.getTable(), SWT.NONE);
PhoneColumn.setWidth(120);
TableColumn CompanyCloumn = new TableColumn(viewer.getTable(), SWT.NONE);
CompanyCloumn.setWidth(120);
TableColumn AddressCloumn = new TableColumn(viewer.getTable(), SWT.NONE);
AddressCloumn.setWidth(120);
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setLinesVisible(true);
viewer.setContentProvider(new CustonmerContentProvider());
viewer.setLabelProvider(new CustonmerLabelProvider());
viewer.add(new CustomerImpl("Kaifei Ding", "pub8", relation, company));
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
// TODO Auto-generated method stub
Object customer = ((StructuredSelection) viewer.getSelection())
.getFirstElement();
EditorInput in = new EditorInput((Customer) customer);
try {
getSite().getWorkbenchWindow().getActivePage().openEditor(
in, "CRM.editor");
} catch (Exception e) {
e.printStackTrace();
}
}
});
this.makeActions();
this.contributeToActionBars();
this.hookContextMenu();
/*GridLayout parentLayout = new GridLayout();
parentLayout.numColumns = 2;
parent.setLayout(parentLayout);
parent.setSize(416, 270);
{
cLabel1 = new CLabel(parent, SWT.NONE);
GridLayout cLabellLayout = new GridLayout();
cLabellLayout.makeColumnsEqualWidth = true;
cLabellLayout.numColumns = 2;
cLabel1.setLayout(cLabellLayout);
cLabel1.setText("Phone:");
}
{
phoneCLable = new CLabel(parent, SWT.NONE);
GridData cLabel2LData = new GridData();
cLabel2LData.grabExcessHorizontalSpace = true;
cLabel2LData.horizontalAlignment = GridData.FILL;
phoneCLable.setLayoutData(cLabel2LData);
}
{
cLabel3 = new CLabel(parent, SWT.NONE);
cLabel3.setText("Address:");
}
{
addressLabel = new CLabel(parent, SWT.NONE);
GridData cLabel4LData = new GridData();
cLabel4LData.grabExcessHorizontalSpace = true;
cLabel4LData.horizontalAlignment = GridData.FILL;
addressLabel.setLayoutData(cLabel4LData);
}*/
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
private void makeActions() {
deleteAction = new Action() {
public void run() {
boolean canDelete = MessageDialog.openQuestion(viewer.getControl().getShell(), "Question", "是否删除该用户?");
if(canDelete){
Object customer = ((StructuredSelection)viewer.getSelection()).getFirstElement();
if(customer != null){
viewer.remove(customer);
}
else{
MessageBox mb = new MessageBox(new Shell());
mb.setMessage("不可以删除");
mb.open();
}
}
}
};
deleteAction.setText("Delete");
deleteAction.setText("Delete tooltip");
deleteAction.setImageDescriptor(PlatformUI.getWorkbench()
.getSharedImages().getImageDescriptor(
ISharedImages.IMG_OBJS_INFO_TSK));
addAction = new Action() {
public void run() {
MessageBox mb = new MessageBox(new Shell());
mb.setMessage("OK");
mb.open();
}
};
addAction.setText("Add");
addAction.setToolTipText("Add tooltip");
addAction.setImageDescriptor(PlatformUI.getWorkbench()
.getSharedImages().getImageDescriptor(
ISharedImages.IMG_OBJS_INFO_TSK));
modifyAction = new Action() {
public void run() {
Dialog dialog = new Dialog(viewer.getControl().getShell()){
protected Control createDialogArea(Composite parent){
MessageBox mb = new MessageBox(new Shell());
mb.setMessage("对话框");
mb.open();
return parent;
}
};
}
};
modifyAction.setText("Modify");
modifyAction.setToolTipText("Modify tooltip");
modifyAction.setImageDescriptor(PlatformUI.getWorkbench()
.getSharedImages().getImageDescriptor(
ISharedImages.IMG_OBJS_INFO_TSK));
saveAction = new Action() {
public void run() {
runnable = new IRunnableWithProgress(){
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
// TODO Auto-generated method stub
int i = 0;
monitor.beginTask("Saving...", 100);
while (i < 100){
i++;
monitor.worked(i);
monitor.setTaskName("Saving.."+i);
try{
Thread.sleep(50);
}catch(Exception e){
}
一个RCP的简单例子
5星 · 超过95%的资源 需积分: 0 93 浏览量
更新于2008-10-31
收藏 83KB RAR 举报
**RCP(Rich Client Platform)**是Eclipse项目的一个核心组成部分,它提供了一个框架,用于构建功能丰富的桌面应用程序。RCP允许开发者利用Eclipse的强大功能,如插件系统、工作台管理、视图和编辑器,来创建自定义的、模块化的用户界面。在本例子中,我们看到的是一个基于RCP实现的**客户关系管理(CRM)**系统。
CRM系统主要用于企业管理和优化与客户之间的交互,包括销售、市场营销和服务等环节。通过RCP构建的CRM,我们可以期待一个高度定制化、响应迅速且功能强大的用户界面。
源码的提供意味着我们可以深入研究如何利用RCP构建这样的系统。这包括以下几个关键知识点:
1. **工作台(Workbench)**:RCP的工作台是应用程序的核心,它管理窗口、视图和编辑器。开发者需要定义工作台的布局,以及如何在不同视图间切换。
2. **插件(Plugins)**:Eclipse RCP的基础是插件架构,允许模块化开发。每个功能或组件都可以作为一个独立的插件实现,这样可以提高代码的重用性和可扩展性。
3. **模型-视图-控制器(MVC)**:在CRM系统中,数据模型通常包含客户信息、订单、联系历史等。视图负责展示这些数据,而控制器处理用户交互,更新模型和视图。
4. **服务(Services)**:RCP允许通过服务接口来共享功能,比如数据库访问服务、用户认证服务等。这样,不同组件可以透明地使用这些服务,而不必关心其实现细节。
5. **视图(Views)**:视图是用户界面的一部分,显示特定的数据或提供操作。在CRM中,可能有客户列表视图、订单视图和报告视图等。
6. **编辑器(Editors)**:编辑器用于处理和编辑特定类型的文档,比如客户详情编辑器、订单编辑器。它们可以嵌入到视图中,也可以全屏显示。
7. **命令(Commands)**:RCP提供了一种命令框架,使得菜单项、工具栏按钮和其他UI元素的操作行为可以统一管理。
8. **首选项(Preferences)**:用户可以设置系统的某些特性,如界面主题、数据过滤条件等,这些设置可以通过首选项系统进行管理。
9. **团队支持(Team Support)**:如果源码包括版本控制系统集成,那么可能还涉及SVN、Git等团队协作工具的使用,便于代码管理和协同开发。
10. **国际化(Internationalization, i18n)**:对于面向全球用户的软件,国际化是必不可少的,源码可能包含多语言资源文件,以便适应不同地区的用户。
通过分析这个RCP CRM示例的源码,开发者不仅可以学习如何构建这样的系统,还可以了解到如何将Eclipse RCP的强大功能应用到其他类型的应用程序开发中。无论是对RCP的初学者还是经验丰富的开发者,这个实例都提供了宝贵的学习材料。
kaifeiding
- 粉丝: 0
- 资源: 3