X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=2049a097ca354b54e69297fcbc48d91753b7d528;hb=84afe881653a02a16b19d4da37435b8701b1a826;hp=23c865427f64ecc2971695db553567908cb870ff;hpb=c85958d34fac175452fe420ff24ea82f26d6f1f3;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index 23c8654..2049a09 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -30,23 +30,25 @@ #include "about.h" #include "blockwidget.h" -#include "dimension.h" +//#include "dimension.h" #include "drawingview.h" -#include "drawarcaction.h" -#include "drawcircleaction.h" -#include "drawdimensionaction.h" -#include "drawlineaction.h" -#include "drawsplineaction.h" +//#include "drawarcaction.h" +//#include "drawcircleaction.h" +//#include "drawdimensionaction.h" +//#include "drawlineaction.h" +//#include "drawsplineaction.h" #include "fileio.h" #include "generaltab.h" -#include "geometry.h" +//#include "geometry.h" +#include "global.h" #include "layerwidget.h" -#include "line.h" -#include "mirroraction.h" +//#include "line.h" +//#include "mirroraction.h" #include "painter.h" -#include "rotateaction.h" +//#include "rotateaction.h" #include "settingsdialog.h" -#include "trimaction.h" +//#include "triangulateaction.h" +//#include "trimaction.h" // Class variables @@ -94,7 +96,7 @@ ApplicationWindow::ApplicationWindow(): ReadSettings(); setUnifiedTitleAndToolBarOnMac(true); - Object::SetFont(new QFont("Verdana", 15, QFont::Bold)); + Global::font = new QFont("Verdana", 15, QFont::Bold); connect(lw, SIGNAL(LayerSelected(int)), drawing, SLOT(SetCurrentLayer(int))); } @@ -111,7 +113,8 @@ void ApplicationWindow::closeEvent(QCloseEvent * event) void ApplicationWindow::FileNew(void) { // Should warn the user if drawing hasn't been saved... - drawing->document.Clear(); +// drawing->document.Clear(); + drawing->document.objects.empty(); drawing->update(); documentName.clear(); setWindowTitle("Architektonas - Untitled"); @@ -128,7 +131,7 @@ void ApplicationWindow::FileOpen(void) if (filename.isEmpty()) return; - FILE * file = fopen(filename.toAscii().data(), "r"); + FILE * file = fopen(filename.toUtf8().data(), "r"); if (file == 0) { @@ -139,7 +142,7 @@ void ApplicationWindow::FileOpen(void) return; } - Container container(Vector(0, 0)); + Container container;//(Vector(0, 0)); bool successful = FileIO::LoadAtnsFile(file, &container); fclose(file); @@ -167,7 +170,7 @@ void ApplicationWindow::FileSave(void) documentName = QFileDialog::getSaveFileName(this, tr("Save Drawing"), "", tr("Architektonas drawings (*.drawing)")); - FILE * file = fopen(documentName.toAscii().data(), "w"); + FILE * file = fopen(documentName.toUtf8().data(), "w"); if (file == 0) { @@ -188,7 +191,7 @@ 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.toUtf8().data()); QFile::remove(documentName); return; } @@ -213,19 +216,19 @@ void ApplicationWindow::FileSaveAs(void) void ApplicationWindow::SnapToGridTool(void) { - Object::SetSnapMode(snapToGridAct->isChecked()); + Global::snapToGrid = snapToGridAct->isChecked(); } void ApplicationWindow::FixAngle(void) { - Object::SetFixedAngle(fixAngleAct->isChecked()); + Global::fixedAngle = fixAngleAct->isChecked(); } void ApplicationWindow::FixLength(void) { - Object::SetFixedLength(fixLengthAct->isChecked()); + Global::fixedLength = fixLengthAct->isChecked(); } @@ -234,6 +237,7 @@ void ApplicationWindow::DeleteTool(void) { // For this tool, we check first to see if anything is selected. If so, we // delete those and *don't* select the delete tool. +#if 0 if (drawing->document.ItemsSelected() > 0) { drawing->document.DeleteSelectedItems(); @@ -241,6 +245,7 @@ void ApplicationWindow::DeleteTool(void) deleteAct->setChecked(false); return; } +#endif // Otherwise, toggle the state of the tool ClearUIToolStatesExcept(deleteAct); @@ -276,6 +281,13 @@ void ApplicationWindow::TrimTool(void) } +void ApplicationWindow::TriangulateTool(void) +{ + ClearUIToolStatesExcept(triangulateAct); + SetInternalToolStates(); +} + + void ApplicationWindow::AddLineTool(void) { ClearUIToolStatesExcept(addLineAct); @@ -332,20 +344,20 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin. //printf("Zoom in... Center=%.2f,%.2f; ", center.x, center.y); center = Painter::QtToCartesianCoords(center); //printf("(%.2f,%.2f); origin=%.2f,%.2f; ", center.x, center.y, Painter::origin.x, Painter::origin.y); - Vector newOrigin = center - ((center - Painter::origin) / zoomFactor); + Vector newOrigin = center - ((center - Global::origin) / zoomFactor); //printf("newOrigin=%.2f,%.2f;\n", newOrigin.x, newOrigin.y); - Painter::origin = newOrigin; + Global::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] - Painter::zoom *= zoomFactor; - Object::gridSpacing = drawing->gridPixels / Painter::zoom; + Global::zoom *= zoomFactor; + Global::gridSpacing = drawing->gridPixels / Global::zoom; drawing->UpdateGridBackground(); drawing->update(); - zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing)); - baseUnitInput->setText(QString("%1").arg(Object::gridSpacing)); + zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Global::gridSpacing)); + baseUnitInput->setText(QString("%1").arg(Global::gridSpacing)); } @@ -372,19 +384,19 @@ x 2 = (-426, -301) //printf("(%.2f,%.2f); origin=%.2f,%.2f; ", center.x, center.y, Painter::origin.x, Painter::origin.y); // Vector newOrigin = (center - Painter::origin) * zoomFactor; // Vector newOrigin = center - (Painter::origin * zoomFactor); - Vector newOrigin = center + ((Painter::origin - center) * zoomFactor); + Vector newOrigin = center + ((Global::origin - center) * zoomFactor); //printf("newOrigin=%.2f,%.2f;\n", newOrigin.x, newOrigin.y); - Painter::origin = newOrigin; + Global::origin = newOrigin; //printf("Zoom out...\n"); // This just zooms leaving origin intact... should zoom out at the current // center! [DONE] - Painter::zoom /= zoomFactor; - Object::gridSpacing = drawing->gridPixels / Painter::zoom; + Global::zoom /= zoomFactor; + Global::gridSpacing = drawing->gridPixels / Global::zoom; drawing->UpdateGridBackground(); drawing->update(); - zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Object::gridSpacing)); - baseUnitInput->setText(QString("%1").arg(Object::gridSpacing)); + zoomIndicator->setText(QString("Grid: %1\", BU: Inch").arg(Global::gridSpacing)); + baseUnitInput->setText(QString("%1").arg(Global::gridSpacing)); } @@ -419,22 +431,26 @@ void ApplicationWindow::ClearUIToolStatesExcept(QAction * exception) if (exception != trimAct) trimAct->setChecked(false); + + if (exception != triangulateAct) + triangulateAct->setChecked(false); } void ApplicationWindow::SetInternalToolStates(void) { - Object::SetDeleteActive(deleteAct->isChecked()); - Object::SetDimensionActive(addDimensionAct->isChecked()); + Global::deleteActive = deleteAct->isChecked(); + Global::dimensionActive = addDimensionAct->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 // old tool needs to be deleted. +#if 0 if (drawing->toolAction) { delete drawing->toolAction; drawing->toolAction = NULL; - Object::ignoreClicks = false; + Global::ignoreClicks = false; } drawing->SetToolActive(addLineAct->isChecked() ? new DrawLineAction() : NULL); @@ -445,9 +461,11 @@ void ApplicationWindow::SetInternalToolStates(void) drawing->SetToolActive(mirrorAct->isChecked() ? new MirrorAction() : NULL); drawing->SetToolActive(rotateAct->isChecked() ? new RotateAction() : NULL); drawing->SetToolActive(trimAct->isChecked() ? new TrimAction() : NULL); + drawing->SetToolActive(triangulateAct->isChecked() ? new TriangulateAction() : NULL); if (drawing->toolAction) - Object::ignoreClicks = true; + Global::ignoreClicks = true; +#endif drawing->update(); } @@ -479,6 +497,7 @@ void ApplicationWindow::Settings(void) // void ApplicationWindow::HandleGrouping(void) { +#if 0 int itemsSelected = drawing->document.ItemsSelected(); // If nothing selected, do nothing @@ -527,6 +546,7 @@ else container->state = OSSelected; statusBar()->showMessage(QString(tr("Grouped %1 objects.")).arg(itemsSelected)); } +#endif drawing->update(); } @@ -534,6 +554,7 @@ else void ApplicationWindow::HandleConnection(void) { +#if 0 //double tt = Geometry::ParameterOfLineAndPoint(Vector(0, 0), Vector(10, 0), Vector(8, 2)); //printf("Parameter of point @ (8,2) of line (0,0), (10,0): %lf\n", tt); int itemsSelected = drawing->document.ItemsSelected(); @@ -596,6 +617,7 @@ printf(" -> intersects = %i, t=%lf, u=%lf\n", intersects, t, u); } } } +#endif } @@ -623,8 +645,8 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text) // drawing->gridSpacing = value; // Painter::zoom = drawing->gridPixels / drawing->gridSpacing; - Object::gridSpacing = value; - Painter::zoom = drawing->gridPixels / Object::gridSpacing; + Global::gridSpacing = value; + Global::zoom = drawing->gridPixels / Global::gridSpacing; drawing->UpdateGridBackground(); drawing->update(); } @@ -640,10 +662,7 @@ void ApplicationWindow::HandleDimensionSize(QString text) if (!ok || value == 0) return; - drawing->document.ResizeAllDimensions(value); -// drawing->gridSpacing = value; -// Painter::zoom = drawing->gridPixels / drawing->gridSpacing; -// drawing->UpdateGridBackground(); +// drawing->document.ResizeAllDimensions(value); drawing->update(); } @@ -730,6 +749,9 @@ void ApplicationWindow::CreateActions(void) trimAct = CreateAction(tr("&Trim"), tr("Trim"), tr("Trim extraneous lines from selected objects."), QIcon(":/res/trim-tool.png"), QKeySequence("t,r"), true); connect(trimAct, SIGNAL(triggered()), this, SLOT(TrimTool())); + triangulateAct = CreateAction(tr("&Triangulate"), tr("Triangulate"), tr("Make triangles from selected lines, preserving their lengths."), QIcon(":/res/triangulate-tool.png"), QKeySequence("t,g"), true); + connect(triangulateAct, SIGNAL(triggered()), this, SLOT(TriangulateTool())); + //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. @@ -801,6 +823,7 @@ void ApplicationWindow::CreateMenus(void) menu->addAction(rotateAct); menu->addAction(mirrorAct); menu->addAction(trimAct); + menu->addAction(triangulateAct); menu->addAction(connectAct); menu->addAction(disconnectAct); menu->addSeparator(); @@ -851,6 +874,7 @@ void ApplicationWindow::CreateToolbars(void) toolbar->addAction(rotateAct); toolbar->addAction(mirrorAct); toolbar->addAction(trimAct); + toolbar->addAction(triangulateAct); toolbar->addAction(deleteAct); toolbar->addAction(connectAct); toolbar->addAction(disconnectAct);