]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Added pen and dropper tools, and printing support.
[architektonas] / src / applicationwindow.cpp
index 773146fa63348865180b5159d56e0e785231313f..4c765cbc4e4e507b2248124b4be7ecf456e52ac4 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "applicationwindow.h"
 
+#include <QPrintPreviewDialog>
 #include "about.h"
 #include "blockwidget.h"
 #include "drawingview.h"
 #include "structs.h"
 #include "utils.h"
 
-
 // Class variables
 DrawingView * ApplicationWindow::drawing;
 
-
 ApplicationWindow::ApplicationWindow():
        baseUnitInput(new QLineEdit),
        dimensionSizeInput(new QLineEdit),
@@ -104,7 +103,6 @@ ApplicationWindow::ApplicationWindow():
        connect(drawing, SIGNAL(NeedZoomUpdate()), this, SLOT(UpdateZoom()));
 }
 
-
 void ApplicationWindow::closeEvent(QCloseEvent * event)
 {
        WriteSettings();
@@ -112,7 +110,6 @@ void ApplicationWindow::closeEvent(QCloseEvent * event)
        //Do we have a memory leak here if we don't delete the font in the Object???
 }
 
-
 void ApplicationWindow::FileNew(void)
 {
        // Warn the user if drawing has changed and hasn't been saved...
@@ -153,7 +150,6 @@ void ApplicationWindow::FileNew(void)
        statusBar()->showMessage(tr("New drawing is ready."));
 }
 
-
 void ApplicationWindow::FileOpen(void)
 {
        QString filename = QFileDialog::getOpenFileName(this, tr("Open Drawing"),
@@ -204,7 +200,6 @@ void ApplicationWindow::FileOpen(void)
        statusBar()->showMessage(tr("Drawing loaded."));
 }
 
-
 void ApplicationWindow::FileSave(void)
 {
        if (documentName.isEmpty())
@@ -243,7 +238,6 @@ void ApplicationWindow::FileSave(void)
        statusBar()->showMessage(tr("Drawing saved."));
 }
 
-
 void ApplicationWindow::FileSaveAs(void)
 {
        QString filename = QFileDialog::getSaveFileName(this, tr("Save Drawing As"),
@@ -256,6 +250,27 @@ void ApplicationWindow::FileSaveAs(void)
        }
 }
 
+void ApplicationWindow::PrintPreview(void)
+{
+       QPrintPreviewDialog * dlg = new QPrintPreviewDialog(this);
+
+       connect(dlg, SIGNAL(paintRequested(QPrinter *)), this, SLOT(HandlePrintRequest(QPrinter *)));
+
+       dlg->exec();
+}
+
+void ApplicationWindow::HandlePrintRequest(QPrinter * printer)
+{
+       QPainter qtPainter(printer);
+       Painter painter(&qtPainter);
+
+       // Do object rendering...
+       for(int i=0; i<Global::numLayers; i++)
+       {
+//             if (Global::layerHidden[i] == false)
+               drawing->RenderObjects(&painter, drawing->document.objects, i);
+       }
+}
 
 void ApplicationWindow::contextMenuEvent(QContextMenuEvent * event)
 {
@@ -266,25 +281,21 @@ void ApplicationWindow::contextMenuEvent(QContextMenuEvent * event)
        menu.exec(event->globalPos());
 }
 
-
 void ApplicationWindow::SnapToGridTool(void)
 {
        Global::snapToGrid = snapToGridAct->isChecked();
 }
 
-
 void ApplicationWindow::FixAngle(void)
 {
        Global::fixedAngle = fixAngleAct->isChecked();
 }
 
-
 void ApplicationWindow::FixLength(void)
 {
        Global::fixedLength = fixLengthAct->isChecked();
 }
 
-
 void ApplicationWindow::DeleteTool(void)
 {
        // For this tool, we check first to see if anything is selected. If so, we
@@ -303,14 +314,12 @@ void ApplicationWindow::DeleteTool(void)
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::DimensionTool(void)
 {
        ClearUIToolStatesExcept(addDimensionAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::RotateTool(void)
 {
        ClearUIToolStatesExcept(rotateAct);
@@ -322,7 +331,6 @@ void ApplicationWindow::RotateTool(void)
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::MirrorTool(void)
 {
        ClearUIToolStatesExcept(mirrorAct);
@@ -334,56 +342,48 @@ void ApplicationWindow::MirrorTool(void)
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::TrimTool(void)
 {
        ClearUIToolStatesExcept(trimAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::TriangulateTool(void)
 {
        ClearUIToolStatesExcept(triangulateAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::AddLineTool(void)
 {
        ClearUIToolStatesExcept(addLineAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::AddCircleTool(void)
 {
        ClearUIToolStatesExcept(addCircleAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::AddArcTool(void)
 {
        ClearUIToolStatesExcept(addArcAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::AddPolygonTool(void)
 {
        ClearUIToolStatesExcept(addPolygonAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::AddSplineTool(void)
 {
        ClearUIToolStatesExcept(addSplineAct);
        SetInternalToolStates();
 }
 
-
 void ApplicationWindow::ZoomInTool(void)
 {
        double zoomFactor = 1.20;
@@ -396,7 +396,6 @@ void ApplicationWindow::ZoomInTool(void)
        UpdateZoom();
 }
 
-
 void ApplicationWindow::ZoomOutTool(void)
 {
        double zoomFactor = 1.20;
@@ -409,7 +408,6 @@ void ApplicationWindow::ZoomOutTool(void)
        UpdateZoom();
 }
 
-
 void ApplicationWindow::UpdateZoom(void)
 {
        // And now, a bunch of heuristics to select the right grid size--autogrid!
@@ -441,7 +439,7 @@ void ApplicationWindow::UpdateZoom(void)
        else
                Global::gridSpacing = 0.015625;
 
-       drawing->SetGridSize((double)(Global::gridSpacing * Global::zoom));
+//     drawing->SetGridSize((double)(Global::gridSpacing * Global::zoom));
        drawing->update();
 
        zoomIndicator->setText(QString("Zoom: %1% Grid: %2\" BU: Inch").arg(Global::zoom * 100.0).arg(Global::gridSpacing));
@@ -450,7 +448,6 @@ void ApplicationWindow::UpdateZoom(void)
 //     baseUnitInput->setText(QString("%1").arg(Global::gridSpacing));
 }
 
-
 void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
 {
        QAction * actionList[] = {
@@ -466,7 +463,6 @@ void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception)
        }
 }
 
-
 void ApplicationWindow::SetInternalToolStates(void)
 {
        // We can be sure that if we've come here, then either an active tool is
@@ -502,13 +498,11 @@ void ApplicationWindow::SetInternalToolStates(void)
        drawing->update();
 }
 
-
 void ApplicationWindow::HelpAbout(void)
 {
        aboutWin->show();
 }
 
-
 void ApplicationWindow::Settings(void)
 {
        SettingsDialog dlg(this);
@@ -522,7 +516,6 @@ void ApplicationWindow::Settings(void)
        WriteSettings();
 }
 
-
 //
 // Group a bunch of selected objects (which can include other groups) together
 // or ungroup a selected group.
@@ -589,7 +582,6 @@ void ApplicationWindow::HandleGrouping(void)
        drawing->update();
 }
 
-
 void ApplicationWindow::HandleConnection(void)
 {
 #if 0
@@ -659,19 +651,16 @@ printf("   -> intersects = %i, t=%lf, u=%lf\n", intersects, t, u);
 #endif
 }
 
-
 void ApplicationWindow::HandleDisconnection(void)
 {
 }
 
-
-void ApplicationWindow::HandleGridSizeInPixels(int size)
+void ApplicationWindow::HandleGridSizeInPixels(int /*size*/)
 {
-       drawing->SetGridSize((uint32_t)size);
+//     drawing->SetGridSize((uint32_t)size);
        drawing->update();
 }
 
-
 void ApplicationWindow::HandleGridSizeInBaseUnits(QString text)
 {
        // Parse the text...
@@ -686,11 +675,10 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text)
 //     Painter::zoom = drawing->gridPixels / drawing->gridSpacing;
        Global::gridSpacing = value;
        Global::zoom = drawing->gridPixels / Global::gridSpacing;
-       drawing->UpdateGridBackground();
+//     drawing->UpdateGridBackground();
        drawing->update();
 }
 
-
 void ApplicationWindow::HandleDimensionSize(QString text)
 {
 /*
@@ -717,7 +705,6 @@ void ApplicationWindow::EditCopy(void)
        }
 }
 
-
 void ApplicationWindow::EditCut(void)
 {
        if (drawing->select.size() > 0)
@@ -728,7 +715,6 @@ void ApplicationWindow::EditCut(void)
        }
 }
 
-
 void ApplicationWindow::EditPaste(void)
 {
        if (clipboard.size() > 0)
@@ -741,7 +727,6 @@ void ApplicationWindow::EditPaste(void)
        }
 }
 
-
 //
 // Select all *visible* objects.  If an object is on a layer that is not
 // visible, skip it.
@@ -753,7 +738,6 @@ void ApplicationWindow::SelectAllObjects(void)
        drawing->update();
 }
 
-
 void ApplicationWindow::CreateActions(void)
 {
        exitAct = CreateAction(tr("&Quit"), tr("Quit"), tr("Exits the application."),
@@ -851,6 +835,9 @@ void ApplicationWindow::CreateActions(void)
        selectAllAct = CreateAction(tr("Select &All"), tr("Select All Objects"), tr("Select all objects in the drawing."), QIcon(), QKeySequence(tr("Ctrl+a")));
        connect(selectAllAct, SIGNAL(triggered()), this, SLOT(SelectAllObjects()));
 
+       printPreviewAct = CreateAction(tr("&Print Preview"), tr("Print Preview"), tr("Shows preview of printing operation."), QIcon(":/res/print-preview.png"), QKeySequence(tr("Ctrl+p")));
+       connect(printPreviewAct, SIGNAL(triggered()), this, SLOT(PrintPreview()));
+
 //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);
@@ -861,7 +848,6 @@ void ApplicationWindow::CreateActions(void)
        group->addAction(addArcAct);//*/
 }
 
-
 //
 // Consolidates action creation from a multi-step process to a single-step one.
 //
@@ -877,7 +863,6 @@ QAction * ApplicationWindow::CreateAction(QString name, QString tooltip,
        return action;
 }
 
-
 //
 // This is essentially the same as the previous function, but this allows more
 // than one key sequence to be added as key shortcuts.
@@ -898,7 +883,6 @@ QAction * ApplicationWindow::CreateAction(QString name, QString tooltip,
        return action;
 }
 
-
 void ApplicationWindow::CreateMenus(void)
 {
        QMenu * menu = menuBar()->addMenu(tr("&File"));
@@ -908,6 +892,8 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(fileSaveAsAct);
        menu->addAction(fileCloseAct);
        menu->addSeparator();
+       menu->addAction(printPreviewAct);
+       menu->addSeparator();
        menu->addAction(exitAct);
 
        menu = menuBar()->addMenu(tr("&View"));
@@ -945,7 +931,6 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(aboutAct);
 }
 
-
 void ApplicationWindow::CreateToolbars(void)
 {
        QToolBar * toolbar = addToolBar(tr("File"));
@@ -1007,10 +992,11 @@ void ApplicationWindow::CreateToolbars(void)
        connect(pw, SIGNAL(WidthSelected(float)), drawing, SLOT(HandlePenWidth(float)));
        connect(pw, SIGNAL(StyleSelected(int)), drawing, SLOT(HandlePenStyle(int)));
        connect(pw, SIGNAL(ColorSelected(uint32_t)), drawing, SLOT(HandlePenColor(uint32_t)));
-       connect(pw, SIGNAL(StampSelected(void)), drawing, SLOT(HandlePenStamp(void)));
+//     connect(pw, SIGNAL(StampSelected(void)), drawing, SLOT(HandlePenStamp(QAction *)));
+       connect(pw->tbStamp, SIGNAL(triggered(QAction *)), drawing, SLOT(HandlePenStamp(QAction *)));
+       connect(pw->tbDropper, SIGNAL(triggered(QAction *)), drawing, SLOT(HandlePenDropper(QAction *)));
 }
 
-
 void ApplicationWindow::ReadSettings(void)
 {
        QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
@@ -1022,7 +1008,6 @@ void ApplicationWindow::ReadSettings(void)
        restoreState(settings.value("windowState").toByteArray());
 }
 
-
 void ApplicationWindow::WriteSettings(void)
 {
        settings.setValue("pos", pos());
@@ -1031,4 +1016,3 @@ void ApplicationWindow::WriteSettings(void)
        settings.setValue("useAntialiasing", drawing->useAntialiasing);
        settings.setValue("snapToGrid", snapToGridAct->isChecked());
 }
-