]> Shamusworld >> Repos - architektonas/blobdiff - src/applicationwindow.cpp
Added ability to translate groups with Lines.
[architektonas] / src / applicationwindow.cpp
index 96b13ca8b6a66964d8094784d17f062d96342ab2..daae37cf0e4fd61898f1eac1998d1184e7c91922 100644 (file)
 #include "settingsdialog.h"
 
 
-ApplicationWindow::ApplicationWindow(): settings("Underground Software", "Architektonas")
+ApplicationWindow::ApplicationWindow():
+       baseUnitInput(new QLineEdit),
+       dimensionSizeInput(new QLineEdit),
+       settings("Underground Software", "Architektonas")
 {
        drawing = new DrawingView(this);
        drawing->setMouseTracking(true);                // We want *all* mouse events...!
@@ -292,11 +295,13 @@ 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 = 12.0 / Painter::zoom;
+       drawing->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));
        drawing->UpdateGridBackground();
        drawing->update();
+
+       baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
 }
 
 
@@ -329,11 +334,13 @@ 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 = 12.0 / Painter::zoom;
+       drawing->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));
        drawing->UpdateGridBackground();
        drawing->update();
+
+       baseUnitInput->setText(QString("%1").arg(drawing->gridSpacing));
 }
 
 
@@ -476,11 +483,30 @@ void ApplicationWindow::HandleGridSizeInBaseUnits(QString text)
        double value = text.toDouble(&ok);
 
        // Nothing parsable to a double, so quit...
-       if (!ok)
+       if (!ok || value == 0)
                return;
 
        drawing->gridSpacing = value;
        Painter::zoom = drawing->gridPixels / drawing->gridSpacing;
+       drawing->UpdateGridBackground();
+       drawing->update();
+}
+
+
+void ApplicationWindow::HandleDimensionSize(QString text)
+{
+       // Parse the text...
+       bool ok;
+       double value = text.toDouble(&ok);
+
+       // Nothing parsable to a double, so quit...
+       if (!ok || value == 0)
+               return;
+
+       drawing->document.ResizeAllDimensions(value);
+//     drawing->gridSpacing = value;
+//     Painter::zoom = drawing->gridPixels / drawing->gridSpacing;
+//     drawing->UpdateGridBackground();
        drawing->update();
 }
 
@@ -552,6 +578,10 @@ void ApplicationWindow::CreateActions(void)
        groupAct = CreateAction(tr("&Group"), tr("Group"), tr("Group/ungroup selected objects."), QIcon(":/res/group-tool.png"), QKeySequence("g"));
        connect(groupAct, SIGNAL(triggered()), this, SLOT(HandleGrouping()));
 
+       connectAct = CreateAction(tr("&Connect"), tr("Connect"), tr("Connect objects at point."), QIcon(":/res/connect-tool.png"), QKeySequence("c,c"));
+
+       disconnectAct = CreateAction(tr("&Disconnect"), tr("Disconnect"), tr("Disconnect objects joined at point."), QIcon(":/res/disconnect-tool.png"), QKeySequence("d,d"));
+
 //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);
@@ -620,6 +650,8 @@ void ApplicationWindow::CreateMenus(void)
        menu->addAction(fixAngleAct);
        menu->addAction(fixLengthAct);
        menu->addAction(rotateAct);
+       menu->addAction(connectAct);
+       menu->addAction(disconnectAct);
        menu->addSeparator();
        menu->addAction(deleteAct);
        menu->addSeparator();
@@ -649,8 +681,9 @@ void ApplicationWindow::CreateToolbars(void)
 
        QSpinBox * spinbox = new QSpinBox;
        toolbar->addWidget(spinbox);
-       QLineEdit * lineedit = new QLineEdit;
-       toolbar->addWidget(lineedit);
+//     QLineEdit * lineedit = new QLineEdit;
+       toolbar->addWidget(baseUnitInput);
+       toolbar->addWidget(dimensionSizeInput);
 
        toolbar = addToolBar(tr("Edit"));
        toolbar->setObjectName("Edit");
@@ -660,6 +693,8 @@ void ApplicationWindow::CreateToolbars(void)
        toolbar->addAction(fixLengthAct);
        toolbar->addAction(rotateAct);
        toolbar->addAction(deleteAct);
+       toolbar->addAction(connectAct);
+       toolbar->addAction(disconnectAct);
        toolbar->addSeparator();
        toolbar->addAction(addLineAct);
        toolbar->addAction(addCircleAct);
@@ -669,9 +704,10 @@ void ApplicationWindow::CreateToolbars(void)
 
        spinbox->setRange(4, 256);
        spinbox->setValue(12);
-       lineedit->setText("12");
+       baseUnitInput->setText("12");
        connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(HandleGridSizeInPixels(int)));
-       connect(lineedit, SIGNAL(textChanged(QString)), this, SLOT(HandleGridSizeInBaseUnits(QString)));
+       connect(baseUnitInput, SIGNAL(textChanged(QString)), this, SLOT(HandleGridSizeInBaseUnits(QString)));
+       connect(dimensionSizeInput, SIGNAL(textChanged(QString)), this, SLOT(HandleDimensionSize(QString)));
 }