//---------------------------------------------------------------------------
#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ImgList.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published: // IDE-managed Components
TTreeView *treeWords;
TImageList *lstImages;
TPanel *pnlRight;
TLabel *lblAddTopLevelNode;
TLabel *lblAddChildNode;
TLabel *lblWordToAdd;
TLabel *lblNodeCount_;
TLabel *lblNodeCount;
TButton *btnAddTopLevelNode;
TButton *btnAddChildNode;
TEdit *edtWordToAdd;
TButton *btnExpandAll;
TButton *btnCollapseAll;
TButton *btnPopulate;
TButton *btnClear;
TButton *btnSimpleDemo;
TGroupBox *grpNodeInfo;
TLabel *lblCaption_;
TLabel *lblIndex_;
TLabel *lblLevel_;
TLabel *lblParent_;
TLabel *lblText;
TLabel *lblIndex;
TLabel *lblLevel;
TLabel *lblParent;
TButton *btnSort;
TButton *btnStop;
TMemo *Memo1;
TTimer *Timer1;
TLabel *lblTime_;
TLabel *lblTime;
void __fastcall btnAddTopLevelNodeClick(TObject *Sender);
void __fastcall btnAddChildNodeClick(TObject *Sender);
void __fastcall btnExpandAllClick(TObject *Sender);
void __fastcall btnCollapseAllClick(TObject *Sender);
void __fastcall btnPopulateClick(TObject *Sender);
void __fastcall btnClearClick(TObject *Sender);
void __fastcall treeWordsKeyUp(TObject *Sender, WORD &Key, TShiftState Shift);
void __fastcall treeWordsDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept);
void __fastcall treeWordsDragDrop(TObject *Sender, TObject *Source, int X, int Y);
void __fastcall btnSimpleDemoClick(TObject *Sender);
void __fastcall treeWordsChange(TObject *Sender, TTreeNode *Node);
void __fastcall FormCreate(TObject *Sender);
void __fastcall treeWordsMouseMove(TObject *Sender, TShiftState Shift, int X, int Y);
void __fastcall treeWordsMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall btnSortClick(TObject *Sender);
void __fastcall btnStopClick(TObject *Sender);
void __fastcall treeWordsDblClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall treeWordsMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
private:
void UpdateCount(void);
void UpdateNodeInfo(TTreeNode *node);
bool IsAncestorNode(TTreeNode *Ancestor, TTreeNode *Child) const;
void MoveTreeNode(TTreeView *tv, TTreeNode *SourceNode, TTreeNode *DestNode);
void CopyTreeNodesRec(TTreeView *tv, TTreeNode *OriginalNode, TTreeNode *SourceNode, TTreeNode *DestNode);
int CatalogFiles(const AnsiString& Directory, const AnsiString& FileSpec, TTreeView* Tree, TTreeNode *parent);
int FindFiles(const AnsiString& Directory, TStringList& FileSpecs, bool IncludeSubdirectories, TTreeView *Tree, TTreeNode *parent);
void AddFiles(const AnsiString &Filename);
void AddSubFiles(TTreeNode *parent, const AnsiString &Directory);
TTreeNode *FindChild(TTreeNode *parent, const AnsiString &str);
void AddData(TTreeNode *node, const AnsiString &path);
void DeleteData(TTreeNode *node);
void ClearNodes(void);
bool AbortProcess;
void __fastcall WMDropFiles(TWMDropFiles &Message);
public:
__fastcall TfrmMain(TComponent* Owner);
// For drag and drop from Windows Explorer
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif