Visual Editor 阅读笔记

1. 如何定制多visual editor 编辑器,集成design editor and java editor.

Note book style (multi tab):

protected void createNotebookEditor(Composite parent, Preferences store) {
// Create a notebook folder
final CTabFolder folder = new CTabFolder(parent, SWT.BOTTOM);
Composite editorParent = new Composite(folder, SWT.NONE);
editorParent.setLayout(new FillLayout());

CTabItem jveTab = new CTabItem(folder, SWT.NONE);
jveTab.setControl(editorParent);
jveTab.setText(CodegenEditorPartMessages.JavaVisualEditorPart_DesignPart);

paletteSplitter = new FlyoutPaletteComposite(editorParent, SWT.NONE, getSite().getPage(), getPaletteViewerProvider(), getPalettePreferences());
paletteSplitter.setGraphicalControl(createPrimaryViewer(paletteSplitter));
if (palettePage != null) {
paletteSplitter.setExternalViewer(palettePage.getPaletteViewer());
palettePage = null;
}

// Create the parent (new tab) for the java text editor.
Composite javaParent = new Composite(folder, SWT.NONE);
javaParent.setLayout(new FillLayout());

CTabItem javaTab = new CTabItem(folder, SWT.NONE);
javaTab.setControl(javaParent);
javaTab.setText(CodegenEditorPartMessages.JavaVisualEditorPart_SourcePart);
// Let the super java text editor fill it in.
super.createPartControl(javaParent);

// Selection must be on the first page otherwise it does not activate correctly
folder.setSelection(jveTab);
increaseSourceSyncTimer();
}

Split style (custom sashform):

protected void createSplitpaneEditor(Composite parent, Preferences store) {
paletteSplitter = new FlyoutPaletteComposite(parent, SWT.NONE, getSite().getPage(), getPaletteViewerProvider(), getPalettePreferences());
// JVE/Text editor split on the right under editorComposite
final CustomSashForm editorParent = new CustomSashForm(paletteSplitter, SWT.VERTICAL|SWT.SMOOTH);
editorSettings.addSetting(new SashSetting(editorParent));
createPrimaryViewer(editorParent);

// Let the super java text editor fill it in.
super.createPartControl(editorParent);
editorParent.setSashBorders(new boolean[] { true, true });
paletteSplitter.setGraphicalControl(editorParent);
if (palettePage != null) {
paletteSplitter.setExternalViewer(palettePage.getPaletteViewer());
palettePage = null;
}
final CustomSashForm.ICustomSashFormListener customSashformlistener = new CustomSashForm.ICustomSashFormListener(){
boolean isMaxed = false;
public void dividerMoved(int firstControlWeight, int secondControlWeight) {
if(firstControlWeight==0){
if(!isMaxed){
isMaxed = true;
increaseSourceSyncTimer();
}
}else{
if(isMaxed){
isMaxed = false;
restoreSourceSyncTimer();
}
}
}
};
editorParent.addCustomSashFormListener(customSashformlistener);
editorParent.addDisposeListener(new DisposeListener(){
public void widgetDisposed(DisposeEvent e) {
editorParent.removeCustomSashFormListener(customSashformlistener);
}
});
}

2. The ve architecture

Visual Editor 阅读笔记