#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),
{
drawing = new DrawingView(this);
drawing->setMouseTracking(true); // We want *all* mouse events...!
+ drawing->setFocusPolicy(Qt::StrongFocus);
setCentralWidget(drawing);
aboutWin = new AboutWindow(this);
ReadSettings();
setUnifiedTitleAndToolBarOnMac(true);
Object::SetFont(new QFont("Verdana", 15, QFont::Bold));
+
+ connect(lw, SIGNAL(LayerSelected(int)), drawing, SLOT(SetCurrentLayer(int)));
}
}
+void ApplicationWindow::MirrorTool(void)
+{
+ ClearUIToolStatesExcept(mirrorAct);
+ SetInternalToolStates();
+}
+
+
void ApplicationWindow::AddLineTool(void)
{
ClearUIToolStatesExcept(addLineAct);
// 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));
}
//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));
}
if (exception != rotateAct)
rotateAct->setChecked(false);
+
+ if (exception != mirrorAct)
+ mirrorAct->setChecked(false);
}
{
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
{
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();
}
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();
}
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"));
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);
menu->addAction(fixAngleAct);
menu->addAction(fixLengthAct);
menu->addAction(rotateAct);
+ menu->addAction(mirrorAct);
menu->addAction(connectAct);
menu->addAction(disconnectAct);
menu->addSeparator();
{
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");
toolbar->addAction(fixAngleAct);
toolbar->addAction(fixLengthAct);
toolbar->addAction(rotateAct);
+ toolbar->addAction(mirrorAct);
toolbar->addAction(deleteAct);
toolbar->addAction(connectAct);
toolbar->addAction(disconnectAct);