📄 main.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <IniFiles.hpp>
#include "main.h"
#include "XMLAbout.h"
#include <shellapi.h>
#include <dir.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TFormXMLEdit *FormXMLEdit;
//---------------------------------------------------------------------------
__fastcall TFormXMLEdit::TFormXMLEdit(TComponent* Owner)
: TForm(Owner)
{
EnableAll();
EditType = etNull ;
BufferXMLNode = NULL;
BufferTreeNode = NULL;
RenKeyFlag = false;
SaveValueListEditor = new TValueListEditor(this);
XMLDocumentToEdit->Options << doAutoSave ;
DateSeparator = '-';
ShortTimeFormat = "hh:mm:ss";
ShortDateFormat = "yyyy-mm-dd";
//初始化状态栏
int lTime = (StrLen("时间:2001-07-25 17:35:00")+1)* StatusBarMain->Font->Size;
StatusBarMain->Width = Width;
StatusBarMain->Panels->Items[0]->Width = Width - lTime ;
StatusBarMain->Panels->Items[1]->Width = lTime;
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::AddNode(TTreeNode *TreeNode,IXMLNode *XMLNode)
{
try
{
AnsiString NodeName = XMLNode->GetNodeName();
TTreeNode *tNode = TreeViewXML->Items->AddChildObject(TreeNode, NodeName,XMLNode);
IXMLNodeList *ChildList = XMLNode->ChildNodes;
for(int i = 0;i < ChildList->Count;i++)
{
AddNode(tNode ,ChildList->Nodes[i]);
}
}
catch( Exception &e)
{
Application->MessageBox(e.Message.c_str(), "警告", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::AddXMLNode(IXMLNode *XMLNodeDest,IXMLNode *XMLNodeSour )
{
try
{
IXMLNodeList *XMLNodeChildList = XMLNodeSour->ChildNodes;
AnsiString tNodeName ;
IXMLNode *tXMLNode, *NewNode;
//IXMLNodeList->Node[0]->NodeName is ' #Text', 所以只从第二个开始,即Index为1
for(int i = 0; i < XMLNodeChildList->Count; i++)
{
tXMLNode = XMLNodeChildList->Nodes[i];
tNodeName = tXMLNode->NodeName;
//bool isNUll = tNodeName.IsEmpty() ;
NewNode = XMLNodeDest->AddChild(tNodeName);
AddXMLNode(NewNode ,tXMLNode);
}
IXMLNodeList *child_Attri_list = XMLNodeSour->AttributeNodes ;
IXMLNode *ANode;
int tCount = child_Attri_list->Count;
AnsiString sNodeName,sNodeValue;
OleVariant OLEValue;
for(int i = 0;i < tCount ; i++)
{
ANode = child_Attri_list->Nodes[i];
sNodeName = ANode->NodeName ;
OLEValue = ANode->NodeValue ;
if(OLEValue.IsNull())
sNodeValue = "";
else
sNodeValue = AnsiString(OLEValue);
XMLNodeDest->SetAttribute(sNodeName,sNodeValue);
}
}
catch( Exception &e)
{
Application->MessageBox(e.Message.c_str(), "警告", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::TreeViewXMLChange(TObject *Sender, TTreeNode *Node)
{
ValueListEditorValue->Strings->Clear();
IXMLNode *cnode = (IXMLNode * )TreeViewXML->Selected->Data ;
IXMLNode *ANode;
if ( !cnode )
{
SelectedXMLNode = NULL ;
return ;
}
if ( cnode->NodeName.IsEmpty() )
{
SelectedXMLNode = NULL ;
return ;
}
SelectedXMLNode = cnode ;
IXMLNodeList *child_Attri_list = cnode->AttributeNodes ;
int tCount = child_Attri_list->Count;
if ( tCount < 1 )
ValueListEditorValue->Enabled = false ;
else
ValueListEditorValue->Enabled = true ;
AnsiString s1,s2;
OleVariant oVa;
try
{
for(int i = 0;i < tCount ; i++)
{
ANode = child_Attri_list->Nodes[i];
s1 = ANode->NodeName ;
oVa = ANode->NodeValue ;
if(oVa.IsNull())
s2 = "";
else
s2 = AnsiString(oVa);
ValueListEditorValue->Strings->Add(s1 + " = " + s2);
}
}
catch( Exception &e)
{
Application->MessageBox(e.Message.c_str(), "警告", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ToolButtonOpenClick(TObject *Sender)
{
if( OpenDialogFile->Execute() )
{
OpenXMLFromFile(OpenDialogFile->FileName) ;
}
}
//---------------------------------------------------------------------------
int __fastcall TFormXMLEdit::OpenXMLFromFile(AnsiString FileName )
{
XMLFileName = FileName ;
XMLDocumentToEdit->Active = false;
XMLDocumentToEdit->LoadFromFile(FileName );
//CppWebBrowser1->LocationName = OpenDialog1->FileName ;
TreeViewXML->Items->Clear() ;
//AnsiString s1 = XMLDocumentToEdit->DocumentElement->GetNodeName();
//IXMLNodeList *child_list = XMLDocumentToEdit->DocumentElement->ChildNodes;
//IXMLNode *cnode = XMLDocumentToEdit->DocumentElement;
//IXMLNode *cnode1 ;
AddNode(NULL,XMLDocumentToEdit->DocumentElement);
XMLDocumentToEdit->Active = true ;
RootXMLNode = XMLDocumentToEdit->DocumentElement;
EnableAll( true );
//设置最近打开的文件菜单
SaveRecent();
LoadRecent();
return 1;
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ToolButtonSaveClick(TObject *Sender)
{
// To Do
XMLDocumentToEdit->SaveToFile(XMLFileName);
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuFileCloseClick(TObject *Sender)
{
if ( !XMLDocumentToEdit->IsEmptyDoc())
XMLDocumentToEdit->SaveToFile(XMLFileName);
Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::TreeViewXMLMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
// To Do
try{
switch ( Button )
{
case mbLeft:
break;
case mbRight:
if ( TreeViewXML->Items->Count > 0 )
{
PopupMenuXML->Popup( X,Y );
}
break;
}
}catch(Exception &e)
{
Application->MessageBox(e.Message.c_str(), "警告", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuInsElementClick(TObject *Sender)
{
//To Do
if ( !TreeViewXML->Selected )
return ;
IXMLNode *SelectedNode = (IXMLNode * )TreeViewXML->Selected->Data ;
randomize();
AnsiString NewName = "新结点" + IntToStr( random (1000) );
AnsiString InputString = InputBox("插入新结点", "新结点的名字:", NewName);
IXMLNode *NewNode = SelectedNode->AddChild(WideString(InputString),"");
AddNode( TreeViewXML->Selected, NewNode );
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuInsAttribClick(TObject *Sender)
{
//To Do
if ( !TreeViewXML->Selected )
return ;
IXMLNode *SelectedNode = (IXMLNode * )TreeViewXML->Selected->Data ;
randomize();
AnsiString NewName = "新属性" + IntToStr( random (1000) );
AnsiString InputString = InputBox("插入新属性", "新属性的名字:", NewName);
randomize();
AnsiString NewValue = "NewValue" + IntToStr( random (65535) );
SelectedNode->SetAttribute(WideString(InputString),WideString(NewValue));
BrushAttribute( SelectedNode );
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuDelClick(TObject *Sender)
{
//To Do
if ( !TreeViewXML->Selected )
return ;
IXMLNode *SelectedNode = (IXMLNode * )TreeViewXML->Selected->Data ;
int ToDel = Application->MessageBox(AnsiString("要删除"" + SelectedNode->NodeName + ""结点吗?").c_str(), "警告", MB_YESNO );
if ( ToDel != IDYES )
return ;
try
{
TTreeNode *SelectedTreeNode = TreeViewXML->Selected;
IXMLNode *ParentNode = SelectedNode->ParentNode;
IXMLNodeList *ChildNodeList = ParentNode->ChildNodes ;
int iRet = ChildNodeList->Delete(SelectedNode->NodeName);
if ( iRet < 0 )
return ;
SelectedTreeNode->DeleteChildren();
TreeViewXML->Items->Delete(SelectedTreeNode) ;
ValueListEditorValue->Strings->Clear();
}
catch(Exception &e)
{
Application->MessageBox( AnsiString("删除"" + SelectedNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::BrushAttribute(IXMLNode *aNode)
{
if ( !aNode )
return ;
ValueListEditorValue->Strings->Clear();
IXMLNodeList *child_Attri_list = aNode->AttributeNodes ;
int tCount = child_Attri_list->Count;
AnsiString s1,s2;
OleVariant oVa;
try
{
for(int i = 0;i < tCount ; i++)
{
aNode = child_Attri_list->Nodes[i];
s1 = aNode->NodeName ;
oVa = aNode->NodeValue ;
if(oVa.IsNull())
s2 = "";
else
s2 = AnsiString(oVa);
ValueListEditorValue->Strings->Add(s1 + " = " + s2);
}
}
catch( Exception &e)
{
Application->MessageBox(e.Message.c_str(), "警告", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ToolButtonInsClick(TObject *Sender)
{
//弹出popup菜单
PopupMenuIns->Popup( this->Left + 256,this->Top + 72 );
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuHelpAboutClick(TObject *Sender)
{
if ( !OKBottomDlgAbout )
OKBottomDlgAbout = new TOKBottomDlgAbout(this);
OKBottomDlgAbout->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::EnableAll(bool State)
{
MenuFileSave->Enabled = State ;
MenuFileSaveAs->Enabled = State ;
MenuFileRecent->Enabled = true ;
MenuFileCloseFile->Enabled = State ;
MenuFileClose->Enabled = true ;
MenuEditCut->Enabled = State ;
MenuEditCopy->Enabled = State ;
MenuEditPaste->Enabled = State ;
MenuEditClear->Enabled = State ;
MenuEditRenNode->Enabled = State ;
MenuEditRenAttrib->Enabled = State ;
MenuEditFind->Enabled = false ;
MenuViewSource->Enabled = State ;
MenuViewPreview->Enabled = State ;
MenuViewExpand->Enabled = State ;
MenuViewCollapse->Enabled = State ;
MenuInsElement->Enabled = State ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -