addressformeditor.java
来自「eclipse开发笔记」· Java 代码 · 共 217 行
JAVA
217 行
package com.plugindev.addressbook.editors;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.plugindev.addressbook.Activator;
import com.plugindev.addressbook.editors.models.IManagerListener;
import com.plugindev.addressbook.editors.models.SimpleFormEditorInput;
import com.plugindev.addressbook.preferences.PreferenceConstants;
//在13.7节实现了IManagerListener接口
public class AddressFormEditor extends FormEditor implements IManagerListener{
/* private StyledText text;*/
private boolean isPageModified;
private boolean sourceChanged;
//获得页面
private MasterDetailsPage mdPage;
private PageWithSubPages pwsPage;
private SourcePage sourcePage;
//在第十六章增加
private final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(PreferenceConstants.P_EDITOR_EDIT_BOOL) ||
event.getProperty().equals(PreferenceConstants.P_EDITOR_PWSP_BOOL) ||
event.getProperty().equals(PreferenceConstants.P_EDITOR_SOURCE_BOOL))
updatePages();
}
};
//结束在第十六章的增加
public AddressFormEditor() {
}
protected void addPages() {
try {
//在16章改变该段代码
mdPage = new MasterDetailsPage(this);
pwsPage = new PageWithSubPages(this);
sourcePage = new SourcePage(this);
addPage(mdPage);
addPage(pwsPage);
addPage(sourcePage);
/* addPage(new MasterDetailsPage(this));
addPage(new PageWithSubPages(this));
addPage(new SourcePage(this));*/
} catch (PartInitException e) {
e.printStackTrace();
}
updateTitle();
//在13.7节中加入此段代码
((SimpleFormEditorInput)getEditorInput()).getManager().addManagerListener(this);
//结束在13.7节中此段代码的加入
//在第十六章增加
updatePages();
Activator.getDefault().getPluginPreferences().
addPropertyChangeListener(propertyChangeListener);
//结束在第十六章的增加
}
void updateTitle(){
IEditorInput input = getEditorInput();
setPartName(input.getName());
setTitleToolTip(input.getToolTipText());
}
protected FormToolkit createToolkit(Display display) {
// Create a toolkit that shares colors between editors.
return new FormToolkit(Activator.getDefault().getFormColors(
display));
}
@Override
public void doSave(IProgressMonitor monitor) {
//在13.7节加入此段代码
if(isPageModified){
//在第十六章修改了该语句
((SimpleFormEditorInput)getEditorInput()).getManager().saveDescriptions();
sourceChanged = true;
}
isPageModified = false;
if(this.getActivePage() == 2)
{
SourcePage page= (SourcePage)getSelectedPage();
page.loadSource();
sourceChanged = false;
}
editorDirtyStateChanged();
updateTitle();
//结束在13.7节对此段代码的加入
}
public boolean isDirty(){
//在13.7节中加入此段代码
return isPageModified||super.isDirty();
//结束在13.7节中此段代码的加入
}
@Override
public void doSaveAs() {
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
public void pageChange(int newPageIndex){
//在13.7节中加入此段代码
switch(newPageIndex){
case 0:
break;
case 1:
if(isPageModified)
{
PageWithSubPages page = (PageWithSubPages)getSelectedPage();
page.updateSelection();
}
break;
case 2:
SourcePage page = (SourcePage)getSelectedPage();
if(sourceChanged == true){
page.loadSource();
sourceChanged = false;
}
break;
}
super.pageChange(newPageIndex);
//结束在13.7节中此段代码的加入
//在13.8节中加入此段代码
IEditorActionBarContributor contributor =
getEditorSite().getActionBarContributor();
if (contributor instanceof AddressFormEditorContributor)
((AddressFormEditorContributor) contributor)
.setActivePage(this, newPageIndex);
//结束在13.8节中此段代码的加入
}
public void dispose(){
/*临时实现,将在13.7小节更改
* ((SimpleFormEditorInput)getEditorInput()).getManager().saveDescriptions();
* */
//在第十六章增加
Activator.getDefault().getPluginPreferences().
removePropertyChangeListener(propertyChangeListener);
//结束在第十六章的增加
super.dispose();
}
public int getActivePage(){
return super.getActivePage();
}
/*
* 在13.7节实现了managerChanged()方法
* @see com.plugindev.addressbook.editors.models.IManagerListener#managerChanged(java.lang.Object[], java.lang.String, java.lang.String, java.lang.String)
*/
public void managerChanged(Object object, String type, String itemType, String key) {
if(isPageModified == false){
isPageModified = true;
editorDirtyStateChanged();
}
}
//在第十六章增加该方法,用来响应跟该编辑器相关的首选项的更改
public void updatePages(){
Preferences prefs = Activator
.getDefault().getPluginPreferences();
boolean showPWSPage = prefs.getBoolean(
PreferenceConstants.P_EDITOR_PWSP_BOOL);
boolean showSourcePage = prefs.getBoolean(
PreferenceConstants.P_EDITOR_SOURCE_BOOL);
FormPage localPwsPage = (FormPage)findPage("pageWithSub");
FormPage localSourcePage = (FormPage)findPage("source");
if(showPWSPage == false && localPwsPage != null)
{
removePage(localPwsPage.getIndex());
}
else if(showPWSPage == true && localPwsPage == null)
{
if(localSourcePage != null)
removePage(localSourcePage.getIndex());
pwsPage = new PageWithSubPages(this);
sourcePage = new SourcePage(this);
try {
addPage(pwsPage);
} catch (PartInitException e) {
e.printStackTrace();
}
}
if(showSourcePage == false && localSourcePage != null){
removePage(localSourcePage.getIndex());
}
else if(showSourcePage == true && localSourcePage == null){
sourcePage = new SourcePage(this);
try {
addPage(sourcePage);
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?