[fondue-commits] [SCM] Fondue Font Editor branch, master, updated. cb80ff8c06e34e34cd88cee1e2ba8b569d27ef4f

Eugeniy Meshcheryakov eugen at debian.org
Wed Apr 2 12:16:52 UTC 2008


The following commit has been merged in the master branch:
commit d8ccc8f49f1064be12f041aa7a6256df5ec35b77
Author: Eugeniy Meshcheryakov <eugen at debian.org>
Date:   Wed Apr 2 14:00:43 2008 +0200

    add import menu

diff --git a/gui/mainwindow.cxx b/gui/mainwindow.cxx
index 579cdbc..ff25bfb 100644
--- a/gui/mainwindow.cxx
+++ b/gui/mainwindow.cxx
@@ -38,6 +38,8 @@
 #include "documentinfomodel.h"
 #include "documentinfoeditor.h"
 #include "scriptconsole.h"
+#include "sfdimportfilter.h"
+#include <QDebug>
 
 #include "config.h"
 
@@ -50,6 +52,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
 	addDockWidget(Qt::BottomDockWidgetArea, m_scriptConsole);
 	m_scriptConsole->hide(); // TODO make it adjustable
 
+	setupFilters();
 	createActions();
 	createMenus();
 	createDockWindows();
@@ -68,6 +71,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
 	changeDocumentName(0);
 }
 
+MainWindow::~MainWindow()
+{
+	qDeleteAll(m_importFilters);
+}
+
 void MainWindow::createActions()
 {
 	exitAction = new QAction("E&xit", this);
@@ -84,6 +92,12 @@ void MainWindow::createActions()
 	saveAsAction = new QAction("Save &As...", this);
 	connect(saveAsAction, SIGNAL(triggered()), this, SLOT(saveAs()));
 
+	foreach (ImportFilterBase *filter, m_importFilters) {
+		QAction *act = new QAction(filter->menuName(), this);
+		act->setData(QVariant::fromValue<ImportFilterBase *>(filter));
+		connect(act, SIGNAL(triggered()), this, SLOT(importFile()));
+		importActions << act;
+	}
 	exportTTFAction = new QAction("Export As TTF...", this);
 	connect(exportTTFAction, SIGNAL(triggered()), this, SLOT(exportTTF()));
 
@@ -140,6 +154,11 @@ void MainWindow::createMenus()
 	fileMenu->addAction(openAction);
 	fileMenu->addAction(saveAction);
 	fileMenu->addAction(saveAsAction);
+
+	QMenu *importMenu = fileMenu->addMenu("Import");
+	foreach (QAction *act, importActions)
+		importMenu->addAction(act);
+
 	fileMenu->addAction(exportTTFAction);
 	fileMenu->addSeparator();
 	fileMenu->addAction(exitAction);
@@ -201,16 +220,19 @@ void MainWindow::loadFile(const QString &fileName)
 		return;
 	}
 
-	connect(m_doc, SIGNAL(documentChanged()), this, SLOT(documentChanged()));
+	setupDoc();
+	setCurrentFile(fileName);
+
+	statusBar()->showMessage("File loaded", 2000);
+}
 
+void MainWindow::setupDoc()
+{
+	connect(m_doc, SIGNAL(documentChanged()), this, SLOT(documentChanged()));
 	setupModels();
 	glyphsView->setModel(unicodeProxy);
-
-	setCurrentFile(fileName);
 	changeDocumentName(m_doc->fontName());
-
 	emit documentAvailable(true);
-	statusBar()->showMessage("File loaded", 2000);
 }
 
 void MainWindow::setupModels()
@@ -255,6 +277,54 @@ void MainWindow::open()
 	}
 }
 
+bool MainWindow::importFile()
+{
+	QAction *act = qobject_cast<QAction *>(sender());
+	if (!act) {
+		qDebug() << "importFile() sender is not QAction";
+		return false;
+	}
+	ImportFilterBase *filter = qvariant_cast<ImportFilterBase *>(act->data());
+	Q_ASSERT(filter);
+
+	QString fileName = QFileDialog::getOpenFileName(this, 0, 0, filter->fileMask());
+	if (fileName.isEmpty())
+		return false;
+
+	QFile file(fileName);
+	if (!file.open(QIODevice::ReadOnly)) {
+		QMessageBox::warning(this, "Fondue", QString("Cannot read file %1:\n%2.")
+				.arg(fileName)
+				.arg(file.errorString()));
+		return false;
+	}
+
+	QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+	FontDocument *doc = filter->importFile(&file);
+	QApplication::restoreOverrideCursor();
+	file.close();
+
+	if (!doc) {
+		QMessageBox::warning(this, "Fondue", QString("Cannot import file %1:\n%2")
+			.arg(fileName)
+			.arg(filter->errors().join("\n")));
+		return false;
+	}
+
+	if (!m_doc) {
+		m_doc = doc;
+		setupDoc();
+	}
+	else {
+		MainWindow *other = new MainWindow;
+		other->m_doc = doc;
+		other->setupDoc();
+		other->show();
+	}
+
+	return true;
+}
+
 bool MainWindow::saveFile(const QString &fileName)
 {
 	Q_ASSERT(m_doc);
@@ -502,3 +572,9 @@ void MainWindow::showScriptConsole(bool v)
 		m_scriptConsole->hide();
 	}
 }
+
+void MainWindow::setupFilters()
+{
+	// TODO move list setup somewhere
+	m_importFilters << new SFDImportFilter;
+}
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index b49f867..394ee66 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -29,12 +29,14 @@ class UnicodeProxyModel;
 class DocumentInfoModel;
 class CVTModel;
 class ScriptConsole;
+class ImportFilterBase;
 
 class MainWindow: public QMainWindow {
 	Q_OBJECT
 	Q_PROPERTY(FontDocument *document READ document)
 public:
 	MainWindow(QWidget *parent = 0);
+	~MainWindow();
 
 	void setCurrentFile(const QString &name);
 	QString currentFile() const {return m_currentFile;}
@@ -45,6 +47,7 @@ public slots:
 	void open();
 	bool save();
 	bool saveAs();
+	bool importFile();
 	bool exportTTF();
 
 	void editDocumentInfo();
@@ -73,7 +76,9 @@ private:
 	void createDockWindows();
 	void createStatusBar();
 	bool saveFile(const QString &fileName);
+	void setupDoc();
 	void setupModels();
+	void setupFilters();
 
 	void closeEvent(QCloseEvent *event);
 
@@ -95,6 +100,7 @@ private:
 	QAction *openAction;
 	QAction *saveAction;
 	QAction *saveAsAction;
+	QList<QAction *> importActions;
 	QAction *exportTTFAction;
 
 	QAction *editDocumentInfoAction;
@@ -116,6 +122,8 @@ private:
 	CVTModel *cvtModel;
 
 	ScriptConsole *m_scriptConsole;
+
+	QList<ImportFilterBase *> m_importFilters;
 };
 
 #endif
diff --git a/src/src.rules b/src/src.rules
index 4c0e238..5c5c8d5 100644
--- a/src/src.rules
+++ b/src/src.rules
@@ -10,6 +10,6 @@ bin_PROGRAMS += src/fondue
 
 src_fondue_SOURCES = src/main.cxx
 src_fondue_CPPFLAGS = $(QtCore_CFLAGS) $(QtGui_CFLAGS) $(QtXml_CFLAGS) $(QtScript_CFLAGS)
-src_fondue_LDADD = libfonduegui.a libfonduenongui.a libfondueqscript.a $(QtCore_LIBS) $(QtGui_LIBS) $(QtXml_LIBS) $(QtScript_LIBS)
+src_fondue_LDADD = libfonduegui.a libfonduefilters.a libfonduenongui.a libfondueqscript.a $(QtCore_LIBS) $(QtGui_LIBS) $(QtXml_LIBS) $(QtScript_LIBS)
 
 ## vim:ft=automake

-- 
Fondue Font Editor



More information about the fondue-commits mailing list