]> Shamusworld >> Repos - ttedit/blobdiff - src/mainwindow.cpp
Added preview window to file loading dialog. :-)
[ttedit] / src / mainwindow.cpp
index ef738e95102f56ae4ec784ecc84b86949b297f2d..173c977a8a04a0fe4cad8e6791d4ace2e418147b 100644 (file)
 #include "mainwindow.h"
 #include "charwindow.h"
 #include "editwindow.h"
+#include "global.h"
+#include "previewfiledialog.h"
 #include "ttedit.h"
 
 
 MainWindow::MainWindow()
 {
-       ((TTEdit *)qApp)->charWnd = new CharWindow(this);
+       Global::charWnd = new CharWindow(this);
        editWnd = new EditWindow(this);
        setCentralWidget(editWnd);
        editWnd->setFocus();
        setWindowIcon(QIcon(":/res/ttedit.png"));
        setWindowTitle("TTEdit! - Untitled");
 
-#if 0
-//     createActions();
-       newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
-       newAct->setShortcuts(QKeySequence::New);
-       newAct->setStatusTip(tr("Create a new file"));
-       connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
-
-       openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
-       openAct->setShortcuts(QKeySequence::Open);
-       openAct->setStatusTip(tr("Open an existing file"));
-       connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
-
-       aboutQtAct = new QAction(tr("About &Qt"), this);
-       aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
-       connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-
-//     createMenus();
-       fileMenu = menuBar()->addMenu(tr("&File"));
-       fileMenu->addAction(newAct);
-       fileMenu->addAction(openAct);
-       fileMenu->addAction(saveAct);
-       fileMenu->addAction(saveAsAct);
-       fileMenu->addSeparator();
-       fileMenu->addAction(exitAct);
-
-       editMenu = menuBar()->addMenu(tr("&Edit"));
-       editMenu->addAction(cutAct);
-       editMenu->addAction(copyAct);
-       editMenu->addAction(pasteAct);
-
-       menuBar()->addSeparator();
-
-       helpMenu = menuBar()->addMenu(tr("&Help"));
-       helpMenu->addAction(aboutAct);
-       helpMenu->addAction(aboutQtAct);
-
-//     createToolBars();
-       fileToolBar = addToolBar(tr("File"));
-       fileToolBar->addAction(newAct);
-       fileToolBar->addAction(openAct);
-       fileToolBar->addAction(saveAct);
-
-       editToolBar = addToolBar(tr("Edit"));
-       editToolBar->addAction(cutAct);
-       editToolBar->addAction(copyAct);
-       editToolBar->addAction(pasteAct);
-#else
        CreateActions();
        CreateMenus();
        CreateToolbars();
-#endif
 
        //      Create status bar
        scaleIndicator = new QLabel("Scale: 100%");
@@ -115,7 +69,7 @@ MainWindow::MainWindow()
 //     setCurrentFile("");
        setUnifiedTitleAndToolBarOnMac(true);
 
-       ((TTEdit *)qApp)->charWnd->show();//eh?
+       Global::charWnd->show();
 }
 
 
@@ -163,7 +117,7 @@ void MainWindow::CreateActions(void)
        saveFileAct = CreateAction("&Save File", "Save File", "Save a glyph file", QIcon(), QKeySequence("ctrl+s"));
        quitAct = CreateAction("&Quit", "Quit", "Exits from the TTEdit application", QIcon(), QKeySequence("ctrl+q"));
        zoomInAct = CreateAction("Zoom In", "Zoom In", "Zoom into the canvas", QIcon(), QKeySequence("+"), QKeySequence("="));
-       zoomOutAct = CreateAction("Zoom Out", "Zoom Out", "Zoom out of canvas", QIcon(), QKeySequence("-"));
+       zoomOutAct = CreateAction("Zoom Out", "Zoom Out", "Zoom out of the canvas", QIcon(), QKeySequence("-"));
 
        connect(newGlyphAct, SIGNAL(triggered()), this, SLOT(NewGlyph()));
        connect(openFileAct, SIGNAL(triggered()), this, SLOT(OpenFile()));
@@ -205,8 +159,9 @@ void MainWindow::closeEvent(QCloseEvent * event)
 void MainWindow::NewGlyph(void)
 {
        editWnd->pts.Clear();
-       ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&(editWnd->pts));
-       ((TTEdit *)qApp)->charWnd->update();
+       Global::charWnd->MakePathFromPoints(&(editWnd->pts));
+       Global::charWnd->update();
+       filename.clear();
 //     editWnd->polyFirstPoint = true;
        editWnd->update();
        setWindowTitle("TTEdit! - Untitled");
@@ -216,8 +171,19 @@ void MainWindow::NewGlyph(void)
 
 void MainWindow::OpenFile(void)
 {
-       QString filename = QFileDialog::getOpenFileName(this, tr("Open Glyph File"),
+#if 0
+       filename = QFileDialog::getOpenFileName(this, tr("Open Glyph File"),
                "./", tr("Glyph files (*.glyph)"));
+#else
+       PreviewFileDialog * pfd = new PreviewFileDialog(this, tr("Open Glyph File"),
+               "./", tr("Glyph files (*.glyph)"));
+       pfd->setAcceptMode(QFileDialog::AcceptOpen);
+
+       if (pfd->exec() == false)
+               return;
+
+       filename = pfd->selectedFiles().at(0);
+#endif
        FILE * file = fopen(filename.toUtf8().data(), "r");
 
        //need to pop an error box here...
@@ -227,8 +193,8 @@ void MainWindow::OpenFile(void)
        editWnd->pts.LoadGlyphFromFile(file);
        fclose(file);
 
-       ((TTEdit *)qApp)->charWnd->MakePathFromPoints(&(editWnd->pts));
-       ((TTEdit *)qApp)->charWnd->update();
+       Global::charWnd->MakePathFromPoints(&(editWnd->pts));
+       Global::charWnd->update();
        editWnd->update();
        setWindowTitle(QString("TTEdit! - %1").arg(filename));
        editWnd->setFocus();
@@ -237,8 +203,10 @@ void MainWindow::OpenFile(void)
 
 void MainWindow::SaveFile(void)
 {
-       QString filename = QFileDialog::getSaveFileName(this, tr("Save Glyph File"),
+       if (filename.isEmpty())
+               filename = QFileDialog::getSaveFileName(this, tr("Save Glyph File"),
                "./", tr("Glyph files (*.glyph)"));
+
        FILE * file = fopen(filename.toUtf8().data(), "w");
 
        //need to pop an error box here...
@@ -248,28 +216,41 @@ void MainWindow::SaveFile(void)
        editWnd->pts.SaveGlyphToFile(file);
        fclose(file);
        setWindowTitle(QString("TTEdit! - %1").arg(filename));
+       statusBar()->showMessage(tr("File saved."));
        editWnd->setFocus();
 }
 
 
 void MainWindow::ZoomIn(void)
 {
-       if (editWnd->scale == 4.0)
+       if (Global::zoom == 4.0)
                return;
 
-       editWnd->scale *= 2.0;
-       scaleIndicator->setText(QString("Scale: %1%").arg(editWnd->scale * 100.0));
+       // Adjust the origin by the width/height by 1/4 (half of the scaled size).
+       // Also, need to adjust for the current zoom level...
+       Vector adjustment = (Global::screenSize / Global::zoom) * 0.25;
+       Global::origin += adjustment;
+
+       Global::zoom *= 2.0;
+
+       scaleIndicator->setText(QString("Scale: %1%").arg(Global::zoom * 100.0));
        editWnd->update();
 }
 
 
 void MainWindow::ZoomOut(void)
 {
-       if (editWnd->scale == 0.25)
+       if (Global::zoom == 0.25)
                return;
 
-       editWnd->scale *= 0.5;
-       scaleIndicator->setText(QString("Scale: %1%").arg(editWnd->scale * 100.0));
+       Global::zoom *= 0.5;
+
+       // Adjust the origin by the width/height by 1/4 (half of the scaled size).
+       // Also, need to adjust for the current zoom level...
+       Vector adjustment = (Global::screenSize / Global::zoom) * 0.25;
+       Global::origin -= adjustment;
+
+       scaleIndicator->setText(QString("Scale: %1%").arg(Global::zoom * 100.0));
        editWnd->update();
 }
 
@@ -283,8 +264,8 @@ void MainWindow::ReadSettings(void)
        move(pos);
        pos = settings.value("charWndPos", QPoint(0, 0)).toPoint();
        size = settings.value("charWndSize", QSize(200, 200)).toSize();
-       ((TTEdit *)qApp)->charWnd->resize(size);
-       ((TTEdit *)qApp)->charWnd->move(pos);
+       Global::charWnd->resize(size);
+       Global::charWnd->move(pos);
 }
 
 
@@ -293,8 +274,8 @@ void MainWindow::WriteSettings(void)
        QSettings settings("Underground Software", "TTEdit");
        settings.setValue("pos", pos());
        settings.setValue("size", size());
-       settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos());
-       settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size());
+       settings.setValue("charWndPos", Global::charWnd->pos());
+       settings.setValue("charWndSize", Global::charWnd->size());
 }