]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Added mouse wheel zoom.
[architektonas] / src / applicationwindow.cpp
index f9362ca5967071d34a0202608d9759249c32b759..cb4f020f5e9ab531217feeef9f62bdd7d076d453 100644 (file)
 #include "fileio.h"
 #include "generaltab.h"
 #include "layerwidget.h"
+#include "mirroraction.h"
 #include "painter.h"
+#include "rotateaction.h"
 #include "settingsdialog.h"
 
 
+// Class variables
+DrawingView * ApplicationWindow::drawing;
+
+
 ApplicationWindow::ApplicationWindow():
        baseUnitInput(new QLineEdit),
        dimensionSizeInput(new QLineEdit),
@@ -49,6 +55,7 @@ ApplicationWindow::ApplicationWindow():
 {
        drawing = new DrawingView(this);
        drawing->setMouseTracking(true);                // We want *all* mouse events...!
+       drawing->setFocusPolicy(Qt::StrongFocus);
        setCentralWidget(drawing);
 
        aboutWin = new AboutWindow(this);
@@ -83,6 +90,8 @@ ApplicationWindow::ApplicationWindow():
        ReadSettings();
        setUnifiedTitleAndToolBarOnMac(true);
        Object::SetFont(new QFont("Verdana", 15, QFont::Bold));
+
+       connect(lw, SIGNAL(LayerSelected(int)), drawing, SLOT(SetCurrentLayer(int)));
 }
 
 
@@ -169,7 +178,8 @@ void ApplicationWindow::FileSave(void)
                msg.setIcon(QMessageBox::Critical);
                msg.exec();
                // In this case, we should unlink the created file, since it's not right...
-               unlink(documentName.toAscii().data());
+//             unlink(documentName.toAscii().data());
+               QFile::remove(documentName);
                return;
        }
 
@@ -242,6 +252,13 @@ void ApplicationWindow::RotateTool(void)
 }
 
 
+void ApplicationWindow::MirrorTool(void)
+{
+       ClearUIToolStatesExcept(mirrorAct);
+       SetInternalToolStates();
+}
+
+
 void ApplicationWindow::AddLineTool(void)
 {
        ClearUIToolStatesExcept(addLineAct);
@@ -296,18 +313,14 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin.
        Painter::origin = newOrigin;
 
 //printf("Zoom in... level going from %02f to ", Painter::zoom);
-       // This just zooms leaving origin intact... should zoom in at the current center! [DONE]
-       // This should actually be calculated by drawing->gridPixels / grid size.
+       // This just zooms leaving origin intact... should zoom in at the current
+       // center! [DONE]
        Painter::zoom *= zoomFactor;
-//     drawing->gridSpacing = drawing->gridPixels / Painter::zoom;
        Object::gridSpacing = drawing->gridPixels / Painter::zoom;
-//     zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing));
-//     zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(drawing->gridSpacing));
-       zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing));
        drawing->UpdateGridBackground();
        drawing->update();
 
-//     baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
+       zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing));
        baseUnitInput->setText(QString("%1").arg(Object::gridSpacing));
 }
 
@@ -339,17 +352,14 @@ x 2 = (-426, -301)
 //printf("newOrigin=%.2f,%.2f;\n", newOrigin.x, newOrigin.y);
        Painter::origin = newOrigin;
 //printf("Zoom out...\n");
-       // This just zooms leaving origin intact... should zoom out at the current center! [DONE]
+       // This just zooms leaving origin intact... should zoom out at the current
+       // center! [DONE]
        Painter::zoom /= zoomFactor;
-//     drawing->gridSpacing = drawing->gridPixels / Painter::zoom;
        Object::gridSpacing = drawing->gridPixels / Painter::zoom;
-//     zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing));
-//     zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(drawing->gridSpacing));
-       zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing));
        drawing->UpdateGridBackground();
        drawing->update();
 
-//     baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
+       zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing));
        baseUnitInput->setText(QString("%1").arg(Object::gridSpacing));
 }
 
@@ -376,6 +386,9 @@ void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
 
        if (exception != rotateAct)
                rotateAct->setChecked(false);
+
+       if (exception != mirrorAct)
+               mirrorAct->setChecked(false);
 }
 
 
@@ -383,7 +396,6 @@ void ApplicationWindow::SetInternalToolStates(void)
 {
        Object::SetDeleteActive(deleteAct->isChecked());
        Object::SetDimensionActive(addDimensionAct->isChecked());
-       drawing->SetRotateToolActive(rotateAct->isChecked());
 
        // We can be sure that if we've come here, then either an active tool is
        // being deactivated, or a new tool is being created. In either case, the
@@ -392,21 +404,20 @@ void ApplicationWindow::SetInternalToolStates(void)
        {
                delete drawing->toolAction;
                drawing->toolAction = NULL;
+               Object::ignoreClicks = false;
        }
 
-#if 0
-       drawing->SetAddLineToolActive(addLineAct->isChecked());
-       drawing->SetAddCircleToolActive(addCircleAct->isChecked());
-       drawing->SetAddArcToolActive(addArcAct->isChecked());
-       drawing->SetAddDimensionToolActive(addDimensionAct->isChecked());
-#else
        drawing->SetToolActive(addLineAct->isChecked() ? new DrawLineAction() : NULL);
        drawing->SetToolActive(addCircleAct->isChecked() ? new DrawCircleAction() : NULL);
        drawing->SetToolActive(addArcAct->isChecked() ? new DrawArcAction() : NULL);
        drawing->SetToolActive(addDimensionAct->isChecked() ? new DrawDimensionAction() : NULL);
-#endif
+       drawing->SetToolActive(mirrorAct->isChecked() ? new MirrorAction() : NULL);
+       drawing->SetToolActive(rotateAct->isChecked() ? new RotateAction() : NULL);
 
-       update();
+       if (drawing->toolAction)
+               Object::ignoreClicks = true;
+
+       drawing->update();
 }
 
 
@@ -580,21 +591,21 @@ void ApplicationWindow::CreateActions(void)
        zoomOutAct = CreateAction(tr("Zoom &Out"), tr("Zoom Out"), tr("Zoom out of the document."), QIcon(":/res/zoom-out.png"), QKeySequence(tr("-")));
        connect(zoomOutAct, SIGNAL(triggered()), this, SLOT(ZoomOutTool()));
 
-       fileNewAct = CreateAction(tr("&New Drawing"), tr("New Drawing"), tr("Creates a new drawing."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+n")));
+       fileNewAct = CreateAction(tr("&New Drawing"), tr("New Drawing"), tr("Creates a new drawing."), QIcon(":/res/file-new.png"), QKeySequence(tr("Ctrl+n")));
        connect(fileNewAct, SIGNAL(triggered()), this, SLOT(FileNew()));
 
-       fileOpenAct = CreateAction(tr("&Open Drawing"), tr("Open Drawing"), tr("Opens an existing drawing from a file."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+o")));
+       fileOpenAct = CreateAction(tr("&Open Drawing"), tr("Open Drawing"), tr("Opens an existing drawing from a file."), QIcon(":/res/file-open.png"), QKeySequence(tr("Ctrl+o")));
        connect(fileOpenAct, SIGNAL(triggered()), this, SLOT(FileOpen()));
 
-       fileSaveAct = CreateAction(tr("&Save Drawing"), tr("Save Drawing"), tr("Saves the current drawing to a file."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+s")));
+       fileSaveAct = CreateAction(tr("&Save Drawing"), tr("Save Drawing"), tr("Saves the current drawing to a file."), QIcon(":/res/file-save.png"), QKeySequence(tr("Ctrl+s")));
        connect(fileSaveAct, SIGNAL(triggered()), this, SLOT(FileSave()));
 
-       fileSaveAsAct = CreateAction(tr("Save Drawing &As"), tr("Save As"), tr("Saves the current drawing to a file with a different name."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+Shift+s")));
+       fileSaveAsAct = CreateAction(tr("Save Drawing &As"), tr("Save As"), tr("Saves the current drawing to a file with a different name."), QIcon(":/res/file-save-as.png"), QKeySequence(tr("Ctrl+Shift+s")));
        connect(fileSaveAsAct, SIGNAL(triggered()), this, SLOT(FileSaveAs()));
 
-       fileCloseAct = CreateAction(tr("&Close Drawing"), tr("Close Drawing"), tr("Closes the current drawing."), QIcon(":/res/generic-tool.png"), QKeySequence(tr("Ctrl+w")));
+       fileCloseAct = CreateAction(tr("&Close Drawing"), tr("Close Drawing"), tr("Closes the current drawing."), QIcon(":/res/file-close.png"), QKeySequence(tr("Ctrl+w")));
 
-       settingsAct = CreateAction(tr("&Settings"), tr("Settings"), tr("Change certain defaults for Architektonas."), QIcon(":/res/generic-tool.png"), QKeySequence());
+       settingsAct = CreateAction(tr("&Settings"), tr("Settings"), tr("Change certain defaults for Architektonas."), QIcon(":/res/settings.png"), QKeySequence());
        connect(settingsAct, SIGNAL(triggered()), this, SLOT(Settings()));
 
        groupAct = CreateAction(tr("&Group"), tr("Group"), tr("Group/ungroup selected objects."), QIcon(":/res/group-tool.png"), QKeySequence("g"));
@@ -604,6 +615,10 @@ void ApplicationWindow::CreateActions(void)
 
        disconnectAct = CreateAction(tr("&Disconnect"), tr("Disconnect"), tr("Disconnect objects joined at point."), QIcon(":/res/disconnect-tool.png"), QKeySequence("d,d"));
 
+       mirrorAct = CreateAction(tr("&Mirror"), tr("Mirror"), tr("Mirror selected objects around a line."), QIcon(":/res/mirror-tool.png"), QKeySequence("m,i"), true);
+       connect(mirrorAct, SIGNAL(triggered()), this, SLOT(MirrorTool()));
+
+
 //Hm. I think we'll have to have separate logic to do the "Radio Group Toolbar" thing...
 // Yup, in order to turn them off, we'd have to have an "OFF" toolbar button. Ick.
 /*     QActionGroup * group = new QActionGroup(this);
@@ -672,6 +687,7 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(fixAngleAct);
        menu->addAction(fixLengthAct);
        menu->addAction(rotateAct);
+       menu->addAction(mirrorAct);
        menu->addAction(connectAct);
        menu->addAction(disconnectAct);
        menu->addSeparator();
@@ -694,7 +710,12 @@ void ApplicationWindow::CreateToolbars(void)
 {
        QToolBar * toolbar = addToolBar(tr("File"));
        toolbar->setObjectName("File"); // Needed for saveState()
-       toolbar->addAction(exitAct);
+       toolbar->addAction(fileNewAct);
+       toolbar->addAction(fileOpenAct);
+       toolbar->addAction(fileSaveAct);
+       toolbar->addAction(fileSaveAsAct);
+       toolbar->addAction(fileCloseAct);
+//     toolbar->addAction(exitAct);
 
        toolbar = addToolBar(tr("View"));
        toolbar->setObjectName("View");
@@ -714,6 +735,7 @@ void ApplicationWindow::CreateToolbars(void)
        toolbar->addAction(fixAngleAct);
        toolbar->addAction(fixLengthAct);
        toolbar->addAction(rotateAct);
+       toolbar->addAction(mirrorAct);
        toolbar->addAction(deleteAct);
        toolbar->addAction(connectAct);
        toolbar->addAction(disconnectAct);