main.cpp

来自「一个用C++Builder写的XML编辑器」· C++ 代码 · 共 1,226 行 · 第 1/3 页

CPP
1,226
字号
   MenuInsAttrib->Enabled        = State ;

   ToolButtonSave->Enabled       = State ;
   ToolButtonUndo->Enabled       = false ;
   ToolButtonDel->Enabled        = State ;
   ToolButtonCut->Enabled        = State ;
   ToolButtonCopy->Enabled       = State ;
   ToolButtonPaste->Enabled      = State ;
   ToolButtonFind->Enabled       = State ;
   ToolButtonProview->Enabled    = State ;

   ToolButtonIns->Enabled        = State ;
   ToolButtonRenAttrib->Enabled  = State ;
   ToolButtonExpand->Enabled     = State ;
   ToolButtonCollapse->Enabled   = State ;

   if ( State )
     Caption = AnsiString("XMLEdit 1.0 作者:王莹莉    " )+ AnsiString("[文件名:" ) + XMLFileName + AnsiString("]" );
   else
     Caption = "XMLEdit 1.0 作者:王莹莉    " ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonNewClick(TObject *Sender)
{
  // To Do

  if ( !XMLDocumentToEdit->IsEmptyDoc())
  {
     int iRet = Application->MessageBox(AnsiString("文件" + XMLFileName + "还没有保存,是否保存?").c_str(), "警告", MB_YESNO	 );
     if ( iRet == IDYES	 )
     {
        XMLDocumentToEdit->SaveToFile(XMLFileName);
        XMLDocumentToEdit->XML->Clear();
        TreeViewXML->Items->Clear();
        ValueListEditorValue->Strings->Clear();
     }
  }
  else
    XMLDocumentToEdit->XML->Clear();
    
  SaveDialogXML->Title = "新建XML文件" ;
  if ( SaveDialogXML->Execute() )
    XMLFileName = SaveDialogXML->FileName ;
  else
    return ;
  if ( FileExists( XMLFileName ))
  {
     int iRet = Application->MessageBox(AnsiString("文件" + XMLFileName + "已经存在,是否覆盖?").c_str(), "警告", MB_YESNO	 );
     if ( iRet != IDYES	 )
       return ;
  }

  XMLDocumentToEdit->Active   = true;
  //<!-- 金软交通处理系统工程文件 -->" )
  //XMLDocumentToEdit->LoadFromXML( AnsiString("<!-- 金软交通处理系统工程文件 -->" ));

  _di_IXMLDocument XMLDoc = NewXMLDocument();

  XMLDoc->Active   = true;
  XMLDoc->Encoding = "GB2312";
  XMLDoc->Version  = "1.0";


  //_di_IXMLNode XMLNode = XMLDoc->CreateElement("Root0","");
  //XMLDoc->AddChild("Root");
  //XMLDoc->LoadFromXML(WideString("<?xml version=\"1.0\" encoding=\"utf-8\" ?> <!-- 金软交通处理系统工程文件 -->"));

  //_di_IXMLNode XMLNode = XMLDoc->CreateNode("金软交通处理系统工程文件",ntComment );
  //XMLNode->SetText( "金软交通处理系统工程文件") ;

  //XMLDoc->AddChild("Root");
  //XMLDoc->DocumentElement->AddChild("Root001");
  //XMLDoc->DocumentElement->AddChild("Root002");
  //XMLDoc->DocumentElement->AddChild("Root003");
  //XMLDoc->DocumentElement->AddChild("Root004");


  //XMLDoc->SaveToFile("D:\\demo.xml") ;

  XMLDocumentToEdit->Version  = "1.0";
  XMLDocumentToEdit->Encoding = "GB2312" ;


  IXMLNode *NewNode;
  //NewNode = XMLDocumentToEdit->CreateNode(WideString("NewNode"),ntAttribute	, WideString("1234"));
  //NewNode->SetAttribute(WideString("NewNode"),WideString("1111") );
  //NewNode = XMLDocumentToEdit->CreateElement(WideString("NewNode"),WideString("1234"));
  //NewNode->SetAttribute("NewValue1","1234");

  NewNode = XMLDocumentToEdit->AddChild("Root");

  //XMLDocumentToEdit->LoadFromXML( AnsiString("<?xml version=\"1.0\" encoding=\"utf-8\" ?>" ));

  XMLDocumentToEdit->SaveToFile(XMLFileName) ;
  EnableAll(true);

  AddNode(NULL,XMLDocumentToEdit->DocumentElement);


  XMLDocumentToEdit->Active = true ;
  RootXMLNode = XMLDocumentToEdit->DocumentElement;

  //设置最近打开的文件菜单
  SaveRecent();
  LoadRecent();


}
//---------------------------------------------------------------------------
void  __fastcall TFormXMLEdit::CreateNode()
{

  _di_IXMLDocument XMLDoc = NewXMLDocument();

  _di_IXMLNodeList ChildNodes;
  if(XMLDoc)
    {
        XMLDoc->Active   = true;
        XMLDoc->Encoding = "UTF-8";
        XMLDoc->Version  = "1.0";

        //_di_IXMLNode XMLNode = XMLDoc->AddChild("root");

        _di_IXMLNode XMLNode = XMLDoc->CreateElement("Root0","");
        if(XMLNode)
        {   ChildNodes = XMLNode->ChildNodes;

            _di_IXMLNode XMLChild0 = XMLDoc->CreateElement("node0","");
            XMLChild0->SetAttribute("a1",String("11"));
            ChildNodes->Add(XMLChild0);

            _di_IXMLNode XMLChild = XMLNode->AddChild("node1");
            if(XMLChild)
                XMLChild->Text  = "123";

        }
//        XMLDoc->DocumentElement =   XMLDocument1->DocumentElement;
        XMLDoc->DocumentElement = XMLNode;
        XMLDoc->SaveToFile("D:\\t2.xml");
        XMLDoc->Active   = false;
    }

   delete XMLDoc;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::MenuFileCloseFileClick(TObject *Sender)
{
  // To Do
  XMLDocumentToEdit->SaveToFile(XMLFileName);
  XMLDocumentToEdit->XML->Clear();
  TreeViewXML->Items->Clear();
  ValueListEditorValue->Strings->Clear();

  EnableAll();
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::FormClose(TObject *Sender,
      TCloseAction &Action)
{
  // To Do
  if ( !XMLDocumentToEdit->IsEmptyDoc())
    XMLDocumentToEdit->SaveToFile(XMLFileName);

}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ValueListEditorValueKeyUp(TObject *Sender,
      WORD &Key, TShiftState Shift)
{
  // To Do
  if ( TreeViewXML->Items->Count < 1 )
     return ;

  if (! SelectedXMLNode )
    return ;
    
  if( SelectedXMLNode->NodeName.IsEmpty() )
    return;

  if ( !RenKeyFlag )
  {
    //IXMLNode *CurrentNode =  (IXMLNode * )TreeViewXML->Selected->Data ;
    IXMLNode *CurrentNode =  SelectedXMLNode ;

    AnsiString KeyStr, TempStr;
    WideString ValueStr;
    CurrentNode->ReadOnly = false;
    for(int i = 1; i<= ValueListEditorValue ->Strings->Count ; i++ )
    {
     KeyStr = ValueListEditorValue->Keys[i];
     ValueStr = KeyStr.Trim() ;
     if (  ValueStr.IsEmpty() )
     {
       randomize();
       AnsiString NewName = "新属性"  + IntToStr( random (1000) );
       KeyStr = ValueStr = InputBox("新元素", "新元素的名字:", NewName);
       ValueListEditorValue->Keys[i] = NewName ;
       CurrentNode->SetAttribute(WideString(NewName ), "") ;
     }

     TempStr  = ValueListEditorValue->Values[KeyStr];
     CurrentNode->Attributes[ValueStr ] = TempStr;
    }
  }

  if ( RenKeyFlag )
  {

    IXMLNode *CurrentXMLNode =  SelectedXMLNode ;

    AnsiString CurXMLNodeName  =  CurrentXMLNode->NodeName ;
    CurrentXMLNode->ReadOnly = false;

    AnsiString KeyStr,TempStr;
    WideString ValueStr;

    IXMLNodeList *CurXMLNodeList = CurrentXMLNode->AttributeNodes ;
    CurXMLNodeList->Clear();


    for(int i = 1; i<= ValueListEditorValue ->Strings->Count ; i++ )
    {
      KeyStr = ValueListEditorValue->Keys[i];
      ValueStr = KeyStr.Trim() ;
      if (  ValueStr.IsEmpty() )
      {
       randomize();
       AnsiString NewName = "新属性"  + IntToStr( random (1000) );
       KeyStr = ValueStr = InputBox("新元素", "新元素的名字:", NewName);
       ValueListEditorValue->Keys[i] = NewName ;
       CurrentXMLNode->SetAttribute(WideString(NewName ), "") ;
      }

      TempStr  = ValueListEditorValue->Values[KeyStr];

      CurrentXMLNode->SetAttribute(ValueStr,TempStr) ;

    }

    //CurParentXMLNodeList->Add(NewXMLNode) ;
    //AddNode( SelectedTreeNode ,  NewXMLNode );
    //BrushAttribute(NewXMLNode);
  }

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonProviewClick(TObject *Sender)
{
  // To Do
  ShellExecute(Application->Handle,"open",XMLFileName.c_str(),NULL,NULL,SW_SHOW);

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::MenuViewSourceClick(TObject *Sender)
{
  // To Do
  TStrings *XMLText = XMLDocumentToEdit->XML;

  char  szFileName[256];
  fnsplit(XMLFileName.c_str(), NULL, NULL, szFileName, NULL);

  AnsiString XMLTXTFileName  = AnsiString( szFileName ) ;

  char TempPath[256];
  GetTempPath( 256 ,TempPath   );
  XMLTXTFileName = AnsiString(TempPath) + XMLTXTFileName + ".Txt";

  XMLText->SaveToFile(XMLTXTFileName);

  ShellExecute(Application->Handle,"open",XMLTXTFileName.c_str(),NULL,NULL,SW_SHOW);



}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuEditClearClick(TObject *Sender)
{
  // To Do

  XMLDocumentToEdit->Active = true ;
  XMLDocumentToEdit->XML->Clear();

  TreeViewXML->Items->Clear();
  ValueListEditorValue->Strings->Clear();


  XMLDocumentToEdit->LoadFromXML(WideString(""));
  XMLDocumentToEdit->Version  = "1.0";
  XMLDocumentToEdit->Encoding = "GB2312" ;

  XMLDocumentToEdit->AddChild("Root");

  XMLDocumentToEdit->SaveToFile(XMLFileName);
  EnableAll(true);

  AddNode(NULL,XMLDocumentToEdit->DocumentElement);
  XMLDocumentToEdit->Active = true ;
  RootXMLNode = XMLDocumentToEdit->DocumentElement;



}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuFileSaveAsClick(TObject *Sender)
{
  // To Do
  if ( !XMLDocumentToEdit->IsEmptyDoc())
    XMLDocumentToEdit->SaveToFile(XMLFileName);
  else
    return ;

  AnsiString NewXMLFileName ;
  SaveDialogXML->Title = "另存XML文件为" ;
  if ( SaveDialogXML->Execute() )
    NewXMLFileName = SaveDialogXML->FileName ;
  else
    return ;

  if ( FileExists( NewXMLFileName ))
  {
     int iRet = Application->MessageBox(AnsiString("文件" + NewXMLFileName + "已经存在,是否覆盖?").c_str(), "警告", MB_YESNO	 );
     if ( iRet != IDYES	 )
       return ;
  }
  XMLFileName =  NewXMLFileName ;
  XMLDocumentToEdit->SaveToFile(XMLFileName);
  
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::PopupMenuCutClick(TObject *Sender)
{
  // To Do
 try
 {
  BufferXMLNode  =  (IXMLNode * )TreeViewXML->Selected->Data ;
  BufferTreeNode = TreeViewXML->Selected;

  EditType = etCut ;
  
  }
  catch(Exception &e)
  {
    Application->MessageBox( AnsiString("删除"" + BufferXMLNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
    return;
  }


}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::PopupMenuCopyClick(TObject *Sender)
{
 // To Do
 try
 {
  BufferXMLNode  =  (IXMLNode * )TreeViewXML->Selected->Data ;
  BufferTreeNode = TreeViewXML->Selected;

  EditType = etCopy ;
  }
  catch(Exception &e)
  {
    Application->MessageBox( AnsiString("删除"" + BufferXMLNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
    return;
  }

}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuPasteClick(TObject *Sender)
{
 // To Do
 try
 {
  if ( !BufferXMLNode )
    return ;

  if ( !BufferTreeNode )
    return ;

  IXMLNode  *SelectedNode =  (IXMLNode * )TreeViewXML->Selected->Data ;
  TTreeNode *SelectedTreeNode = TreeViewXML->Selected;


  //IXMLNode  *ParentNode  =  SelectedNode->ParentNode;
  IXMLNodeList *ChildNodeList = SelectedNode->ChildNodes ;

  if ( EditType == etCopy )
  {
   //copy node
   //_di_IXMLNode ACopyXMLNode ,ToBeCopiedXMLNode = (_di_IXMLNode)BufferXMLNode ;
   _di_IXMLNode ACopyXMLNode = BufferXMLNode->CloneNode(true) ;//  CloneNode(false);  //ToBeCopiedXMLNode->
   //AnsiString aNodeName = ACopyXMLNode->NodeName ;
   ChildNodeList->Add(ACopyXMLNode);
  }

  TTreeNode *tNode = TreeViewXML->Items->AddChild(SelectedTreeNode, BufferXMLNode->NodeName );
  tNode->Assign(BufferTreeNode) ;
  //AddNode(SelectedTreeNode,BufferTreeNode);

  BufferTreeNode = NULL;
  BufferXMLNode  = NULL;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?