//---------------------------------------------------------------------------

#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#include "FileFindThread.h"
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <ImgList.hpp>

//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published:  // IDE-managed Components
  TStatusBar *barStatus;
  TListView *lstFiles;
  TPanel *pnlControls;
  TLabel *lblFileSpecs_;
  TLabel *lblCount;
  TLabel *lblCount_;
  TComboBox *lstPath1;
  TComboBox *lstPath2;
  TComboBox *lstPath3;
  TButton *btnStart;
  TButton *btnStop1;
  TCheckBox *chkShowOutput;
  TComboBox *lstFileSpecs;
  TImageList *lstSmallImages;
  TButton *btnStop2;
  TButton *btnStop3;
  TButton *btnSuspend1;
  TButton *btnSuspend2;
  TButton *btnSuspend3;
  TButton *btnStart1;
  TButton *btnStart2;
  TButton *btnStart3;
  TButton *btnStopAll;
  TLabel *lblCount1;
  TLabel *lblCount2;
  TLabel *lblCount3;
  TCheckBox *chkRecurseSubdirectories;
  TPanel *pnlState1;
  TPanel *pnlState2;
  TPanel *pnlState3;
  TCheckBox *chkCallbackForEachFile;
  TComboBox *lstPriority1;
  TComboBox *lstPriority2;
  TComboBox *lstPriority3;
  TLabel *lblThreadPriority_;
  TLabel *lblStatus_;
  TLabel *lblPathsToSearch_;
  TLabel *lblFileCount_;
  TLabel *lblInteractiveControls_;
  TButton *btnSuspendAll;
  TRadioGroup *grpFolderShellExecuteVerb;
  TRadioGroup *grpFileShellExecuteVerb;
  void __fastcall btnStartClick(TObject *Sender);
  void __fastcall btnResumeClick(TObject *Sender);
  void __fastcall FormCreate(TObject *Sender);
  void __fastcall lstFilesColumnClick(TObject *Sender, TListColumn *Column);
  void __fastcall btnSuspendClick(TObject *Sender);
  void __fastcall btnStopClick(TObject *Sender);
  void __fastcall btnStopAllClick(TObject *Sender);
  void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
  void __fastcall lstFilesDblClick(TObject *Sender);
  void __fastcall FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
  void __fastcall lstFilesSelectItem(TObject *Sender, TListItem *Item, bool Selected);
  void __fastcall btnSuspendAllClick(TObject *Sender);
private:
    // Callback methods
  void __fastcall ProcessFile(const TFileFindInfo& FInf, long ID);
  void __fastcall ThreadCompleted(long ID);

  int FFileCount;
  TFileFindThread *FThreads[3];
  bool FReverseSortOrder[5];
  int FThreadCount[3];

  TPanel *FStatePanels[3];
  TLabel *FCountLabels[3];
  TStringList *FFileList[3];
  TComboBox *FPriorityList[3];

    // Methods for sorting the columns in the list view
  int __fastcall CompareTextFields(const AnsiString& Item1, const AnsiString& Item2);
  int __fastcall CompareIntegerFields(int Item1, int Item2);
  int __fastcall CompareDateFields(const TDateTime& Item1, const TDateTime& Item2);
  void __fastcall CompareNameField(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall ComparePathField(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall CompareSizeField(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall CompareTypeField(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall CompareDateField(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);

  void AddFile(const TFileFindInfo& FInfo, long ID);
  void PutFilesOnClipboard(TStringList* files);
  void CopySelectedToClipboard(void);

public:
  __fastcall TfrmMain(TComponent* Owner);
  __fastcall ~TfrmMain(void);
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif