
// BKDEDlg.h : файл заголовка
//

#pragma once
#include "afxcmn.h"
#include "afxwin.h"

#include "Dlgbars.h"
#include "GFResizeDialogHelper.h"
#include "MyListCtrl.h"
#include "Settings.h"
#include "BKParseImage.h"

#define STATUSBAR_POS_IMGNAME 0
#define STATUSBAR_POS_OSTYPE 1
#define STATUSBAR_POS_IMGSIZE 2
#define STATUSBAR_POS_SYSTEM 3
#define STATUSBAR_POS_OPENMODE 4


// диалоговое окно CBKDEDlg
class CBKDEDlg : public CDialogEx
{
// Создание
	public:
		CBKDEDlg(CWnd *pParent = NULL); // стандартный конструктор
// Данные диалогового окна
		enum { IDD = IDD_BKDE_DIALOG };


	protected:
		virtual void DoDataExchange(CDataExchange *pDX);    // поддержка DDX/DDV

// Реализация
	protected:
		HICON           m_hIcon;
		HACCEL          m_hAccelTable;
		CDlgStatusBar   m_StatusBar;
		CDlgToolBar     m_ToolBar;

		BOOL            m_bStatusBarCreated;    //флаг создания строки состояния, чтобы при изменении размеров в OnSize двигать строку состояния только когда она создана
		CMyListCtrl     m_ListControl;      //свой list control
		CButton         m_CheckBinExtract;  //чекбокс, работать с бин файлами или нет.
		CButton         m_CheckLogExtract;  //чекбокс, создавать ли логи извлекаемых файлов
		GFResizeDialogHelper    m_Resizer;
		CSettings       m_oSettings;        //класс для работы с настройками.
		CBKParseImage   m_oParseImage;      //класс парсера образа диска. Приходится создавать объект, т.к. иначе надо будет делать все функции статические

		CString         m_strImgPathDir;    //директория, где хранятся образы
		CString         m_strStorePath;     //путь, по которому сохраняем файлы
		CString         m_strLoadPath;      //путь, по которому берём файлы для загрузки, в идеале он может не совпадать с m_strStorePath
		CString         m_strImgPathName;   //имя образа, который обозреваем
		PARSE_RESULT    m_sParseResult;     //структура:
		/*                                      опознанный тип ФС образа
		                                        размер файла образа
		                                        флаг, признак системного образа
		*/
		void            ShowMessageBox(UINT strID, UINT nType = MB_OK);
		void            ShowMessageBox(CString &str, UINT nType = MB_OK);

		void            OpenImage();

		void            FillStatusBar();
		void            ClearStatusBar();
		BOOL            GetFolder(LPTSTR szPath);
		void            GetFiles();
		static int CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
		void            PreUseLoadSettings();
		void            PreCloseStoreSettings();
		void            ShowAddFileStatus(FILESAVE_STATUS fsst);
		LRESULT         OnMakeDrop(WPARAM wParam, LPARAM lParam);
		LRESULT         OnGetCmdLine(WPARAM wParam, LPARAM lParam);
		LRESULT         OnOutImage(WPARAM wParam, LPARAM lParam);
		LRESULT         OnPutIntoLog(WPARAM wParam, LPARAM lParam);
		LRESULT         OnOutCurrFilePath(WPARAM wParam, LPARAM lParam);
		LRESULT         OnOutCurrDiskInfo(WPARAM wParam, LPARAM lParam);
		LRESULT         OnEnableButtonAdd(WPARAM wParam, LPARAM lParam);
		LRESULT         OnEnableButtonView(WPARAM wParam, LPARAM lParam);
		LRESULT         OnEnableButtonExtract(WPARAM wParam, LPARAM lParam);
		LRESULT         OnSendErrorNum(WPARAM wParam, LPARAM lParam);

		void            DisableControls(void);
		void            EnableButtonADD(BOOL bStatus = FALSE);
		void            EnableButtonExtract(BOOL bStatus = FALSE);
		void            EnableButtonView(BOOL bStatus = FALSE);
		// Созданные функции схемы сообщений
		virtual BOOL OnInitDialog();
		virtual BOOL PreTranslateMessage(MSG *pMsg);
		afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
		afx_msg void OnPaint();
		afx_msg HCURSOR OnQueryDragIcon();
		afx_msg void OnSize(UINT nType, int cx, int cy);
		afx_msg void OnBnClickedButtonOpen();
		afx_msg void OnBnClickedButtonExtract();
		afx_msg void OnBnClickedButtonView();
		afx_msg void OnBnClickedButtonClose();
		afx_msg void OnBnClickedButtonAbout();
		afx_msg void OnBnClickedButtonAdd();
		afx_msg void OnBnClickedButtonViewSprite();
		afx_msg void OnBnClickedCheckBinextract();
		afx_msg void OnBnClickedCheckLogextract();
		afx_msg void OnSetFocus(CWnd *pOldWnd);
		afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMMI);
		afx_msg void OnClose();
		afx_msg void OnDropFiles(HDROP hDropInfo);
		afx_msg BOOL OnToolTipText(UINT nID, NMHDR *pNMHDR, LRESULT *pResult);
		DECLARE_MESSAGE_MAP()
};
