X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=71e8a087d5618225543d37438e1e5b8c23986d53;hb=921bf050ffe5fc81a9ab377e634180e659ee5d5d;hp=c51000044ba82085b214772d0c2740d521b5349d;hpb=86caae9cadd6e1877a4e6226533521ef0d1c6389;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index c510000..71e8a08 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -38,10 +38,16 @@ #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))); } @@ -242,6 +251,13 @@ void ApplicationWindow::RotateTool(void) } +void ApplicationWindow::MirrorTool(void) +{ + ClearUIToolStatesExcept(mirrorAct); + SetInternalToolStates(); +} + + void ApplicationWindow::AddLineTool(void) { ClearUIToolStatesExcept(addLineAct); @@ -299,13 +315,16 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin. // This just zooms leaving origin intact... should zoom in at the current center! [DONE] // This should actually be calculated by drawing->gridPixels / grid size. Painter::zoom *= zoomFactor; - drawing->gridSpacing = drawing->gridPixels / Painter::zoom; +// 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(drawing->gridSpacing)); + zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing)); drawing->UpdateGridBackground(); drawing->update(); - baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing)); +// baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing)); + baseUnitInput->setText(QString("%1").arg(Object::gridSpacing)); } @@ -338,13 +357,16 @@ x 2 = (-426, -301) //printf("Zoom out...\n"); // This just zooms leaving origin intact... should zoom out at the current center! [DONE] Painter::zoom /= zoomFactor; - drawing->gridSpacing = drawing->gridPixels / Painter::zoom; +// 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(drawing->gridSpacing)); + zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing)); drawing->UpdateGridBackground(); drawing->update(); - baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing)); +// baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing)); + baseUnitInput->setText(QString("%1").arg(Object::gridSpacing)); } @@ -370,6 +392,9 @@ void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception) if (exception != rotateAct) rotateAct->setChecked(false); + + if (exception != mirrorAct) + mirrorAct->setChecked(false); } @@ -377,7 +402,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 @@ -386,21 +410,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(); } @@ -500,8 +523,10 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text) if (!ok || value == 0) return; - drawing->gridSpacing = value; - Painter::zoom = drawing->gridPixels / drawing->gridSpacing; +// drawing->gridSpacing = value; +// Painter::zoom = drawing->gridPixels / drawing->gridSpacing; + Object::gridSpacing = value; + Painter::zoom = drawing->gridPixels / Object::gridSpacing; drawing->UpdateGridBackground(); drawing->update(); } @@ -572,21 +597,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")); @@ -596,6 +621,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); @@ -664,6 +693,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(); @@ -686,7 +716,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"); @@ -706,6 +741,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);