/*
 * ProgressDialog.h
 * ----------------
 * Purpose: An abortable, progress-indicating dialog, e.g. for showing conversion progress.
 * Notes  : (currently none)
 * Authors: OpenMPT Devs
 * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
 */


#pragma once

#include "openmpt/all/BuildSettings.hpp"

OPENMPT_NAMESPACE_BEGIN

class CProgressDialog : public CDialog
{
private:
	ITaskbarList3 *m_taskBarList = nullptr;
	uint64 m_min = 0, m_max = 0, m_shift = 0;
	const bool m_customDialog;

public:
	bool m_abort = false;

	CProgressDialog(CWnd *parent = nullptr, UINT resourceID = 0);
	~CProgressDialog();

	// Set the window title
	void SetTitle(const TCHAR *title);
	// Set the text on abort button
	void SetAbortText(const TCHAR *abort);
	// Set the text to be displayed along the progress bar.
	void SetText(const TCHAR *text);
	// Set the minimum and maximum value of the progress bar.
	void SetRange(uint64 min, uint64 max);
	// Set the current progress.
	void SetProgress(uint64 progress);
	// Show the progress in the task bar as well
	void EnableTaskbarProgress();
	// Process all queued Windows messages
	void ProcessMessages();
	// Run method for this dialog that must implement the action to be carried out - unless a custom resourceID was provided,
	// in which case the user is responsible for running the dialog and the implementation of this function may be a no-op.
	virtual void Run() = 0;

protected:
	BOOL OnInitDialog() override;
	void OnCancel() override { m_abort = true; }

	DECLARE_MESSAGE_MAP()
};

OPENMPT_NAMESPACE_END