package com.hundsun.ares.studio.logic.ui.editor;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.ui.PartInitException;
import com.hundsun.ares.studio.atom.AtomPackage;
import com.hundsun.ares.studio.biz.ui.editor.page.InterfacePage;
import com.hundsun.ares.studio.logic.LogicPackage;
import com.hundsun.ares.studio.logic.LogicService;
import com.hundsun.ares.studio.logic.compiler.constant.ILogicSkeletonFactoryConstant;
import com.hundsun.ares.studio.logic.ui.pages.LogicPreViewPage;
import com.hundsun.ares.studio.logic.ui.pages.LogicServiceInterfacePage;
import com.hundsun.ares.studio.logic.ui.pages.LogicTextEditor;
import com.hundsun.ares.studio.logic.ui.pages.PreviewUpdater;
import com.hundsun.ares.studio.ui.CommonElementContentProvider;
import com.hundsun.ares.studio.ui.CommonElementLabelProvider;
import com.hundsun.ares.studio.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.blocks.RevisionHistoryListPage;
import com.hundsun.ares.studio.ui.editor.text.TextEditorInput;
import com.hundsun.ares.studio.ui.editor.textbase.ITextBased;
import com.hundsun.ares.studio.ui.editor.textbase.TextBasedEditorInput;
public class LogicServiceEditor extends EMFFormEditor {
private InterfacePage interfacePage;
private LogicTextEditor sourcePage;
private LogicPreViewPage preViewPage;
private int index;
static CommonElementContentProvider cp = new CommonElementContentProvider();
static CommonElementLabelProvider provider = new CommonElementLabelProvider(cp);
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.form.EMFFormEditor#getInfoClass()
*/
@Override
protected EClass getInfoClass() {
return LogicPackage.Literals.LOGIC_SERVICE;
}
/* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormEditor#addPages()
*/
@Override
protected void addPages() {
interfacePage = new LogicServiceInterfacePage(null, this, "interface", "�ӿ�");
try {
// addPage(new LogicServiceBaseInfoPage(this, "baseinfo", "������Ϣ"));
addPage(interfacePage);
// addPage(new LogicServiceIntenalVarPage(this, "internalvar", "�ڲ�����"));
// α����ҳ��
final LogicService serv = (LogicService) getInfo();
sourcePage = new LogicTextEditor(getARESResource());
TextBasedEditorInput input = new TextBasedEditorInput(new ITextBased() {
@Override
public void setText(String text) {
Command command = SetCommand.create(getEditingDomain(), serv, AtomPackage.Literals.ATOM_FUNCTION__PSEUDO_CODE, text);
getEditingDomain().getCommandStack().execute(command);
}
@Override
public String getText() {
return serv.getPseudoCode();
}
}, getARESResource());
index = addPage(sourcePage, input);
sourcePage.setEditor(this);
setPageText(index, "ʵ��-α����");
//Ԥ��ҳ��
addPage(preViewPage =new LogicPreViewPage(this, "preview", "Ԥ��"), new TextEditorInput());
addPage(new RevisionHistoryListPage(this, "revisionHistory", "����Ϣ"));
addPageChangedListener(new PreviewUpdater(ILogicSkeletonFactoryConstant.SKELETONTYPE_LOGIC_SERVICE));
} catch (PartInitException e) {
e.printStackTrace();
}
}
@Override
protected void handleBeforeSave() {
sourcePage.doSave(new NullProgressMonitor());
setPartName(getEditorTitle());
}
@Override
protected void handleAfterSave() {
setPartName(getEditorTitle());
}
@Override
protected String getEditorTitle() {
String partName = provider.getText(getARESResource());
if (isReadOnly()) {
partName += "(ֻ��)";
}
return partName;
}
@Override
public boolean isDirty() {
if (sourcePage.isDirty()) {
return true;
}
return super.isDirty();
}
/* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.FormEditor#pageChange(int)
*/
@Override
protected void pageChange(int newPageIndex) {
if(newPageIndex!=2){//����Ԥ���༭�༭��λ����Ϣ
preViewPage.saveLocation();
}
super.pageChange(newPageIndex);
if (newPageIndex==2){//�ָ�Ԥ���༭�༭��λ��
preViewPage.restoreLocation();
}
}
}