/*
* This file is part of Code::Blocks Studio, an open-source cross-platform IDE
* Copyright (C) 2003  Yiannis An. Mandravellos
*
* 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* Contact e-mail: Yiannis An. Mandravellos <mandrav@codeblocks.org>
* Program URL   : http://www.codeblocks.org
*
* $Id: classwizard.cpp,v 1.7.2.1 2005/10/25 07:59:00 mandrav Exp $
* $Date: 2005/10/25 07:59:00 $
*/

#include <sdk.h>
#include "classwizard.h"
#include <wx/intl.h>
#include <wx/filename.h>
#include <wx/xrc/xmlres.h>
#include <wx/fs_zip.h>
#include <wx/mdi.h>
#include <wx/msgdlg.h>
#include <manager.h>
#include <configmanager.h>
#include <projectmanager.h>
#include "classwizarddlg.h"
#include <cbproject.h>

CB_IMPLEMENT_PLUGIN(ClassWizard);


ClassWizard::ClassWizard()
{
    wxFileSystem::AddHandler(new wxZipFSHandler);
    wxXmlResource::Get()->InitAllHandlers();
    wxString resPath = ConfigManager::Get()->Read(_T("data_path"), wxEmptyString);
    wxXmlResource::Get()->Load(resPath + _T("/class_wizard.zip#zip:*.xrc"));

    m_PluginInfo.name = _T("ClassWizard");
    m_PluginInfo.title = _("Class wizard");
    m_PluginInfo.version = _("0.2");
    m_PluginInfo.description = _("This plugin provides an easy way to create a " \
                               "new C++ class file pair. It's by no means " \
                               "complete yet but it's here nevertheless;)");
    m_PluginInfo.author = _("Yiannis An. Mandravellos");
    m_PluginInfo.authorEmail = _("info@codeblocks.org");
    m_PluginInfo.authorWebsite = _("www.codeblocks.org");
    m_PluginInfo.thanksTo = _T("");
	m_PluginInfo.hasConfigure = false;
}

ClassWizard::~ClassWizard()
{
}

void ClassWizard::OnAttach()
{
}

void ClassWizard::OnRelease(bool appShutDown)
{
}

int ClassWizard::Execute()
{
    ProjectManager* prjMan = Manager::Get()->GetProjectManager();
    cbProject* prj = prjMan->GetActiveProject();
    if (prj)
        wxSetWorkingDirectory(prj->GetBasePath());

	ClassWizardDlg dlg(Manager::Get()->GetAppWindow());
	if (dlg.ShowModal() == wxID_OK)
	{
		if (!prj)
		{
			wxMessageDialog msg(Manager::Get()->GetAppWindow(),
							_("The new class has been created."),
							_("Information"),
							wxOK | wxICON_INFORMATION);
			msg.ShowModal();
			return 0;
		}

		wxMessageDialog msg(Manager::Get()->GetAppWindow(),
							_("The new class has been created.\n"
							"Do you want to add it to the current project?"),
							_("Add to project?"),
							wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION);
		if (msg.ShowModal() == wxID_YES)
		{
            wxArrayInt targets;
			prjMan->AddFileToProject(dlg.GetHeaderFilename(), prj, targets);
			if (targets.GetCount() != 0)
				prjMan->AddFileToProject(dlg.GetImplementationFilename(), prj, targets);
			prjMan->RebuildTree();
		}
		return 0;
	}

	return -1;
}


syntax highlighted by Code2HTML, v. 0.9.1