[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