/*
 * Copyright (C) 2004-2012 Geometer Plus <contact@geometerplus.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA.
 */

#include <tqapplication.h>
#include <tqmessagebox.h>
#include <tqfiledialog.h>
#include <tqclipboard.h>

#include "ZLTQtDialogManager.h"
#include "ZLTQtDialog.h"
#include "ZLTQtOptionsDialog.h"
#include "ZLTQtOpenFileDialog.h"
#include "ZLTQtDialogContent.h"
#include "ZLTQtProgressDialog.h"
#include "ZLTQtUtil.h"

#include "../image/ZLTQtImageManager.h"

shared_ptr<ZLDialog> ZLTQtDialogManager::createDialog(const ZLResourceKey &key) const {
	return new ZLTQtDialog(resource()[key]);
}

shared_ptr<ZLOptionsDialog> ZLTQtDialogManager::createOptionsDialog(const ZLResourceKey &key, shared_ptr<ZLRunnable> applyAction, bool showApplyButton) const {
	return new ZLTQtOptionsDialog(resource()[key], applyAction, showApplyButton);
}

shared_ptr<ZLOpenFileDialog> ZLTQtDialogManager::createOpenFileDialog(const ZLResourceKey &key, const std::string &directoryPath, const std::string &filePath, const ZLOpenFileDialog::Filter &filter) const {
	return new ZLTQtOpenFileDialog(dialogTitle(key), directoryPath, filePath, filter);
}

shared_ptr<ZLTreeDialog> ZLTQtDialogManager::createTreeDialog(const ZLResource &resource) const {
	//return new ZLTQtTreeDialog(resource, myApplicationWindow);
	return nullptr;
}

void ZLTQtDialogManager::informationBox(const std::string &title, const std::string &message) const {
	TQMessageBox::information(
		tqApp->mainWidget(),
		::qtString(title),
		::qtString(message),
		::qtButtonName(OK_BUTTON)
	);
}

void ZLTQtDialogManager::errorBox(const ZLResourceKey &key, const std::string &message) const {
	TQMessageBox::critical(
		tqApp->mainWidget(),
		::qtString(dialogTitle(key)),
		::qtString(message),
		::qtButtonName(OK_BUTTON)
	);
}

int ZLTQtDialogManager::questionBox(const ZLResourceKey &key, const std::string &message, const ZLResourceKey &button0, const ZLResourceKey &button1, const ZLResourceKey &button2) const {
	return TQMessageBox::question(
		tqApp->mainWidget(),
		::qtString(dialogTitle(key)),
		::qtString(message),
		::qtButtonName(button0),
		::qtButtonName(button1),
		::qtButtonName(button2)
	);
}

shared_ptr<ZLProgressDialog> ZLTQtDialogManager::createProgressDialog(const ZLResourceKey &key, bool _) const {
	return new ZLTQtProgressDialog(key);
}

bool ZLTQtDialogManager::isClipboardSupported(ClipboardType type) const {
	return true;
}

void ZLTQtDialogManager::setClipboardText(const std::string &text, ClipboardType type) const {
	if (!text.empty()) {
		tqApp->clipboard()->setText(
			::qtString(text),
			(type == CLIPBOARD_MAIN) ? TQClipboard::Clipboard : TQClipboard::Selection
		);
	}
}

void ZLTQtDialogManager::setClipboardImage(const ZLImageData &imageData, ClipboardType type) const {
	tqApp->clipboard()->setImage(
		(ZLTQtImageData&)imageData,
		(type == CLIPBOARD_MAIN) ? TQClipboard::Clipboard : TQClipboard::Selection
	);
}
