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

#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ToolWin.hpp>
#include <ImgList.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TfrmMain : public TForm
{
__published:  // IDE-managed Components
  TListView *lstFiles;
  TToolBar *ToolBar1;
  TImageList *lstSmallImages;
  TImageList *lstBigImages;
  TToolButton *btnDetails;
  TToolButton *btnList;
  TToolButton *btnSmallIcons;
  TToolButton *btnBigIcons;
  TToolBar *ToolBar2;
  TListView *lstFiles2;
  TSplitter *Splitter1;
  TToolButton *btnDetails2;
  TToolButton *btnList2;
  TToolButton *btnSmallIcons2;
  TToolButton *btnBigIcons2;
  TPanel *pnlInstructions;
  void __fastcall FormCreate(TObject *Sender);
  void __fastcall FormDestroy(TObject *Sender);
  void __fastcall lstFilesColumnClick(TObject *Sender, TListColumn *Column);
  void __fastcall btnBigIconsClick(TObject *Sender);
  void __fastcall lstFilesDragDrop(TObject *Sender, TObject *Source, int X, int Y);
  void __fastcall lstFilesDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept);
  void __fastcall btnBigIcons2Click(TObject *Sender);
  void __fastcall lstFiles2DragDrop(TObject *Sender, TObject *Source, int X, int Y);
  void __fastcall lstFiles2DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept);

private:
    // Information about a file on the disk
  struct FileInfo
  {
    AnsiString name;
    AnsiString path;
    AnsiString extension;
    __int64 size;
    TDateTime date;
    bool isfolder;
  };

  FileInfo GetFileInfo(const AnsiString &Filename);
  void AddFile(const char *Filename);

    // Sorting callbacks
  void __fastcall CompareTextFields(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall CompareIntegerFields(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);
  void __fastcall CompareDateFields(TObject *Sender, TListItem* Item1, TListItem* Item2, int Data, int& Compare);

    // For dropping files from Windows Explorer
  void __fastcall WMDropFiles(TWMDropFiles &Message);

  void ListViewDragDrop(TListView *Destination, TListView *Source, int X, int Y);

public:
  __fastcall TfrmMain(TComponent* Owner);

  // For dropping files from Windows Explorer
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WMDropFiles)
END_MESSAGE_MAP(TForm)

};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif