/* 
 * GChemPaint GOffice component
 * gofficeapp.cc
 *
 * Copyright (C) 2005-2007 Jean Bréfort <jean.brefort@normalesup.org>
 *
 * 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
 */

#include "gchempaint-config.h"
#include "gchempaint-priv.h"
#include "gofficeapp.h"
#include "gofficewin.h"
#include <lib/document.h>
#include <glib/gi18n-lib.h>

gcpGOfficeApplication::gcpGOfficeApplication (): gcpApplication ()
{
}

gcpGOfficeApplication::~gcpGOfficeApplication ()
{
}

GtkWindow* gcpGOfficeApplication::GetWindow()
{
	return NULL;
}

void gcpGOfficeApplication::ToggleMenu (const string& menuname, bool active)
{
}

gcpDocument *gcpGOfficeApplication::ImportDocument (const string& mime_type, const char* data, int length)
{
	gcpDocument *pDoc = NULL;
	char *old_num_locale, *old_time_locale;
	if (mime_type == "application/x-gchempaint") {
		xmlDocPtr xml;
		if (!(xml = xmlParseMemory(data, length)) ||
			xml->children == NULL ||
			strcmp((char*)xml->children->name, "chemistry"))
			return NULL;
		old_num_locale = g_strdup(setlocale(LC_NUMERIC, NULL));
		setlocale(LC_NUMERIC, "C");
		old_time_locale = g_strdup(setlocale(LC_TIME, NULL));
		setlocale(LC_TIME, "C");
		pDoc = new gcpDocument(this, false);
		pDoc->GetView ()->CreateNewWidget ();
		bool result = pDoc->Load(xml->children);
		setlocale(LC_NUMERIC, old_num_locale);
		g_free(old_num_locale);
		setlocale(LC_TIME, old_time_locale);
		g_free(old_time_locale);
		if (!result)
		{
			delete pDoc;
			return NULL;
		}
	} else {
	}
	return (pDoc);
}

bool gcpGOfficeApplication::EditDocument (GOGChemPaintComponent *gogcp)
{
	gcpGOfficeWindow *win = NULL;
	try {
		win = new gcpGOfficeWindow (this, gogcp);
		if (!win)
			return false;
		win->Show ();	// ensure the window is visible
		return true;
	}
	catch (int i) {
		if (win)
			delete win;
		return false;
	}
}

void gcpGOfficeApplication::OnFileNew (char const *Theme)
{
	gchar tmp[32];
	if (m_pActiveDoc && !m_pActiveDoc->GetView ()->PrepareUnselect ())
		return;
	g_snprintf (tmp, sizeof (tmp), _("Untitled %d"), m_NumWindow++);
	new gcpWindow (this, Theme);
}

void gcpGOfficeApplication::OnFileClose ()
{
}


syntax highlighted by Code2HTML, v. 0.9.1