@Override
 public boolean isDirty() {
   if (sourcePage.isDirty()) {
     return true;
   }
   return super.isDirty();
 }
  /* (non-Javadoc)
   * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
   */
  @Override
  protected void addPages() {
    interfacePage = new LogicFunctionInterfacePage(null, this, "interface", "½Ó¿Ú");
    try {
      //			addPage(new LogicFunctionBaseInfoPage(this, "baseinfo", "»ù±¾ÐÅÏ¢"));
      addPage(interfacePage);
      //			addPage(new LogicServiceIntenalVarPage(this, "internalvar", "ÄÚ²¿±äÁ¿"));

      // α´úÂëÒ³Ãæ
      final LogicFunction func = (LogicFunction) getInfo();
      sourcePage = new LogicTextEditor(getARESResource());
      TextBasedEditorInput input =
          new TextBasedEditorInput(
              new ITextBased() {
                @Override
                public void setText(String text) {
                  Command command =
                      SetCommand.create(
                          getEditingDomain(),
                          func,
                          AtomPackage.Literals.ATOM_FUNCTION__PSEUDO_CODE,
                          text);
                  getEditingDomain().getCommandStack().execute(command);
                }

                @Override
                public String getText() {
                  return func.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_FUNCTION));

    } catch (PartInitException e) {
      e.printStackTrace();
    }
  }
 @Override
 protected void handleBeforeSave() {
   sourcePage.doSave(new NullProgressMonitor());
   setPartName(getEditorTitle());
 }