// OverwriteDialog.h

#ifndef __OVERWRITE_DIALOG_H
#define __OVERWRITE_DIALOG_H

#include "../../../Windows/Control/Dialog.h"

#include "DialogSize.h"
#include "OverwriteDialogRes.h"

namespace NOverwriteDialog
{
  struct CFileInfo
  {
    bool SizeIsDefined;
    bool TimeIsDefined;
    UInt64 Size;
    FILETIME Time;
    UString Name;
    
    void SetTime(const FILETIME *t)
    {
      if (t == 0)
        TimeIsDefined = false;
      else
      {
        TimeIsDefined = true;
        Time = *t;
      }
    }
    void SetSize(const UInt64 *size)
    {
      if (size == 0)
        SizeIsDefined = false;
      else
      {
        SizeIsDefined = true;
        Size = *size;
      }
    }
  };
}

class COverwriteDialog: public NWindows::NControl::CModalDialog
{
  bool _isBig;

  void SetFileInfoControl(int textID, int iconID, const NOverwriteDialog::CFileInfo &fileInfo);
  virtual bool OnInit();
  bool OnButtonClicked(int buttonID, HWND buttonHWND);
  void ReduceString(UString &s);

public:
  INT_PTR Create(HWND parent = 0)
  {
    BIG_DIALOG_SIZE(280, 200);
    #ifdef UNDER_CE
    _isBig = isBig;
    #else
    _isBig = true;
    #endif
    return CModalDialog::Create(SIZED_DIALOG(IDD_OVERWRITE), parent);
  }

  NOverwriteDialog::CFileInfo OldFileInfo;
  NOverwriteDialog::CFileInfo NewFileInfo;
};

#endif
