X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fapplicationwindow.cpp;h=b812e4d8a05e70897b830587af40a456d826df10;hb=bb8d0671717bac2c5350e34024273381be1d8175;hp=efd661c82d2f066a00d9ff12b1561a9d93b02e42;hpb=8ab4e08bd78cb5b07f069e3e6c5bf76944cb14fa;p=architektonas diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index efd661c..b812e4d 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -38,7 +38,10 @@ #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...! @@ -290,11 +293,15 @@ when zooming in, new origin will be (xCenter - origin.x) / 2, (yCenter - origin. //printf("Zoom in... level going from %02f to ", Painter::zoom); // 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; - zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing)); + 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)); } @@ -327,10 +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; - zoomIndicator->setText(QString("Grid: %2\" Zoom: %1%").arg(Painter::zoom * 100.0 * SCREEN_ZOOM).arg(drawing->gridSpacing)); + 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)); } @@ -376,6 +386,7 @@ void ApplicationWindow::SetInternalToolStates(void) drawing->SetAddLineToolActive(addLineAct->isChecked()); drawing->SetAddCircleToolActive(addCircleAct->isChecked()); + drawing->SetAddArcToolActive(addArcAct->isChecked()); drawing->SetAddDimensionToolActive(addDimensionAct->isChecked()); } @@ -459,6 +470,48 @@ else } +void ApplicationWindow::HandleGridSizeInPixels(int size) +{ + drawing->SetGridSize(size); + drawing->update(); +} + + +void ApplicationWindow::HandleGridSizeInBaseUnits(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->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(); +} + + void ApplicationWindow::CreateActions(void) { exitAct = CreateAction(tr("&Quit"), tr("Quit"), tr("Exits the application."), @@ -526,6 +579,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); @@ -594,6 +651,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(); @@ -621,6 +680,12 @@ void ApplicationWindow::CreateToolbars(void) toolbar->addAction(zoomInAct); toolbar->addAction(zoomOutAct); + QSpinBox * spinbox = new QSpinBox; + toolbar->addWidget(spinbox); +// QLineEdit * lineedit = new QLineEdit; + toolbar->addWidget(baseUnitInput); + toolbar->addWidget(dimensionSizeInput); + toolbar = addToolBar(tr("Edit")); toolbar->setObjectName("Edit"); toolbar->addAction(snapToGridAct); @@ -629,12 +694,21 @@ 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); toolbar->addAction(addArcAct); toolbar->addAction(addPolygonAct); toolbar->addAction(addDimensionAct); + + spinbox->setRange(4, 256); + spinbox->setValue(12); + baseUnitInput->setText("12"); + connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(HandleGridSizeInPixels(int))); + connect(baseUnitInput, SIGNAL(textChanged(QString)), this, SLOT(HandleGridSizeInBaseUnits(QString))); + connect(dimensionSizeInput, SIGNAL(textChanged(QString)), this, SLOT(HandleDimensionSize(QString))); } @@ -647,10 +721,6 @@ void ApplicationWindow::ReadSettings(void) resize(size); move(pos); restoreState(settings.value("windowState").toByteArray()); -// pos = settings.value("charWndPos", QPoint(0, 0)).toPoint(); -// size = settings.value("charWndSize", QSize(200, 200)).toSize(); -// ((TTEdit *)qApp)->charWnd->resize(size); -// ((TTEdit *)qApp)->charWnd->move(pos); } @@ -661,7 +731,5 @@ void ApplicationWindow::WriteSettings(void) settings.setValue("windowState", saveState()); settings.setValue("useAntialiasing", drawing->useAntialiasing); settings.setValue("snapToGrid", snapToGridAct->isChecked()); -// settings.setValue("charWndPos", ((TTEdit *)qApp)->charWnd->pos()); -// settings.setValue("charWndSize", ((TTEdit *)qApp)->charWnd->size()); }