void PrefabSelector::handleSelectionChange() { wxDataViewItem item = _treeView->GetSelection(); if (!item.IsOk()) { clearPreview(); return; } wxutil::TreeModel::Row row(item, *_treeView->GetModel()); if (row[_columns.isFolder].getBool()) { clearPreview(); return; } std::string prefabPath = row[_columns.vfspath]; _mapResource = GlobalMapResourceManager().capture(prefabPath); if (_mapResource == NULL) { clearPreview(); return; } _lastPrefab = prefabPath; // Suppress the map loading dialog to avoid user // getting stuck in the "drag filename" operation registry::ScopedKeyChanger<bool> changer( RKEY_MAP_SUPPRESS_LOAD_STATUS_DIALOG, true ); if (_mapResource->load()) { // Get the node from the resource scene::INodePtr root = _mapResource->getNode(); assert(root != NULL); // Set the new rootnode _preview->setRootNode(root); _preview->getWidget()->Refresh(); } else { // Map load failed rWarning() << "Could not load prefab: " << prefabPath << std::endl; clearPreview(); } updateUsageInfo(); }
// this url parameter is useless... it's the url of the current directory. // what for? void KFilePreview::setPreviewWidget(const QWidget *w, const KURL &) { left->setOnlyDoubleClickSelectsFiles( onlyDoubleClickSelectsFiles() ); if (w) { connect(this, SIGNAL( showPreview(const KURL &) ), w, SLOT( showPreview(const KURL &) )); connect( this, SIGNAL( clearPreview() ), w, SLOT( clearPreview() )); } else {
void RS_ActionDimLeader::trigger() { RS_PreviewActionInterface::trigger(); if (points.count()>0) { RS_Leader* leader = new RS_Leader(container, RS_LeaderData(true)); leader->setLayerToActive(); leader->setPenToActive(); for (RS_Vector* v=points.first(); v!=NULL; v=points.next()) { leader->addVertex(*v); } container->addEntity(leader); // upd. undo list: if (document!=NULL) { document->startUndoCycle(); document->addUndoable(leader); document->endUndoCycle(); } deletePreview(); clearPreview(); deleteSnapper(); RS_Vector rz = graphicView->getRelativeZero(); graphicView->moveRelativeZero(RS_Vector(0.0,0.0)); graphicView->drawEntity(leader); graphicView->moveRelativeZero(rz); //drawSnapper(); RS_DEBUG->print("RS_ActionDimLeader::trigger(): leader added: %d", leader->getId()); } }
void RS_ActionDimLeader::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); if (getStatus()==SetEndpoint && points.last()!=NULL) { deletePreview(); clearPreview(); // fill in lines that were already set: RS_Vector last(false); for (RS_Vector* v=points.first(); v!=NULL; v=points.next()) { if (last.valid) { preview->addEntity(new RS_Line(preview, RS_LineData(last, *v))); } last = *v; } RS_Vector p = *points.last(); preview->addEntity(new RS_Line(preview, RS_LineData(p, mouse))); drawPreview(); } RS_DEBUG->print("RS_ActionDimLeader::mouseMoveEvent end"); }
void RS_ActionModifyRound::trigger() { RS_DEBUG->print("RS_ActionModifyRound::trigger()"); if (entity1!=NULL && entity1->isAtomic() && entity2!=NULL && entity2->isAtomic()) { deletePreview(); RS_Modification m(*container, graphicView); m.round(coord2, coord1, (RS_AtomicEntity*)entity1, coord2, (RS_AtomicEntity*)entity2, data); //coord = RS_Vector(false); coord1 = RS_Vector(false); entity1 = NULL; coord2 = RS_Vector(false); entity2 = NULL; setStatus(SetEntity1); clearPreview(); if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->updateSelectionWidget(container->countSelected()); } } }
void RS_ActionDrawText::init(int status) { RS_ActionInterface::init(status); if (RS_DIALOGFACTORY!=NULL) { switch (status) { case ShowDialog: { clearPreview(); reset(); RS_Text tmp(NULL, data); if (RS_DIALOGFACTORY->requestTextDialog(&tmp)) { data = tmp.getData(); preparePreview(); preview->setVisible(false); setStatus(SetPos); showOptions(); } else { hideOptions(); finish(); } graphicView->redraw(); } break; case SetPos: RS_DIALOGFACTORY->requestOptions(this, true, true); break; default: break; } } }
void RS_ActionDrawLinePolygon2::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionDrawLinePolygon2::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetCorner1: break; case SetCorner2: if (corner1.valid) { corner2 = mouse; deletePreview(); clearPreview(); RS_Creation creation(preview, NULL, false); creation.createPolygon2(corner1, corner2, number); drawPreview(); } break; default: break; } }
void RS_ActionDrawText::trigger() { RS_DEBUG->print("RS_ActionDrawText::trigger()"); if (pos.valid) { deletePreview(); clearPreview(); deleteSnapper(); RS_Text* text = new RS_Text(container, data); text->update(); container->addEntity(text); if (document) { document->startUndoCycle(); document->addUndoable(text); document->endUndoCycle(); } graphicView->drawEntity(text); textChanged = true; setStatus(SetPos); } }
void RS_ActionDrawText::preparePreview() { clearPreview(); data.insertionPoint = RS_Vector(0.0,0.0); RS_Text* text = new RS_Text(preview, data); text->update(); //text->setVisible(false); preview->addEntity(text); textChanged = false; }
void KFileMetaPreview::showPreview(const KURL &url) { KMimeType::Ptr mt = KMimeType::findByURL( url ); KPreviewWidgetBase *provider = previewProviderFor( mt->name() ); if ( provider ) { if ( provider != m_stack->visibleWidget() ) // stop the previous preview clearPreview(); m_stack->setEnabled( true ); m_stack->raiseWidget( provider ); provider->showPreview( url ); } else { clearPreview(); m_stack->setEnabled( false ); } }
void VPreviewManager::refreshPreview() { if (!m_previewEnabled) { return; } clearPreview(); // No need to request updating code blocks since this will also update them. requestUpdateImageLinks(); }
void RS_ActionDrawLinePolygon2::mouseReleaseEvent(RS_MouseEvent* e) { if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton) { RS_CoordinateEvent ce(snapPoint(e)); coordinateEvent(&ce); } else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton) { deletePreview(); clearPreview(); deleteSnapper(); init(getStatus()-1); } }
void RS_ActionModifyRound::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionModifyRound::mouseMoveEvent begin"); RS_Vector mouse = graphicView->toGraph(e->x(), e->y()); RS_Entity* se = catchEntity(e, RS2::ResolveAll); switch (getStatus()) { case SetEntity1: entity1 = se; coord1 = mouse; break; case SetEntity2: entity2 = se; coord2 = mouse; if (entity1!=NULL && entity2!=NULL && entity2->isAtomic() && RS_Information::isTrimmable(entity1, entity2)) { deletePreview(); clearPreview(); //preview->addSelectionFrom(*container); //preview->move(targetPoint-referencePoint); RS_Entity* tmp1 = entity1->clone(); RS_Entity* tmp2 = entity2->clone(); tmp1->reparent(preview); tmp2->reparent(preview); preview->addEntity(tmp1); preview->addEntity(tmp2); bool trim = data.trim; data.trim = false; RS_Modification m(*preview, NULL, false); m.round(coord2, coord1, (RS_AtomicEntity*)tmp1, coord2, (RS_AtomicEntity*)tmp2, data); data.trim = trim; preview->removeEntity(tmp1); preview->removeEntity(tmp2); drawPreview(); } break; default: break; } RS_DEBUG->print("RS_ActionModifyRound::mouseMoveEvent end"); }
void RS_ActionDrawLinePolygon2::commandEvent(RS_CommandEvent* e) { RS_String c = e->getCommand().lower(); if (checkCommand("help", c)) { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + getAvailableCommands().join(", ")); } return; } switch (getStatus()) { case SetCorner1: case SetCorner2: if (checkCommand("number", c)) { deleteSnapper(); deletePreview(); clearPreview(); lastStatus = (Status)getStatus(); setStatus(SetNumber); } break; case SetNumber: { bool ok; int n = c.toInt(&ok); if (ok==true) { if (n>0 && n<10000) { number = n; } else { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(tr("Not a valid number. " "Try 1..9999")); } } } else { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression.")); } } if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->requestOptions(this, true, true); } setStatus(lastStatus); } break; default: break; } }
void VPreviewManager::setPreviewEnabled(bool p_enabled) { if (m_previewEnabled != p_enabled) { m_previewEnabled = p_enabled; emit previewEnabledChanged(p_enabled); if (!m_previewEnabled) { clearPreview(); } else { requestUpdateImageLinks(); } } }
void RS_ActionDrawArc3P::mouseMoveEvent(RS_MouseEvent* e) { RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetPoint1: point1 = mouse; break; case SetPoint2: point2 = mouse; if (point1.valid) { RS_Line* line = new RS_Line(preview, RS_LineData(point1, point2)); deletePreview(); clearPreview(); preview->addEntity(line); drawPreview(); } break; case SetPoint3: point3 = mouse; preparePreview(); if (data.isValid()) { RS_Arc* arc = new RS_Arc(preview, data); deletePreview(); clearPreview(); preview->addEntity(arc); drawPreview(); } break; default: break; } }
void RS_ActionDrawLinePolygon2::trigger() { RS_PreviewActionInterface::trigger(); deleteSnapper(); deletePreview(); clearPreview(); RS_Creation creation(container, graphicView); bool ok = creation.createPolygon2(corner1, corner2, number); if (!ok) { RS_DEBUG->print("RS_ActionDrawLinePolygon2::trigger:" " No polygon added\n"); } }
void RS_ActionDrawCircle2P::mouseMoveEvent(RS_MouseEvent* e) { RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetPoint1: point1 = mouse; break; case SetPoint2: point2 = mouse; preparePreview(); if (data.isValid()) { RS_Circle* circle = new RS_Circle(preview, data); deletePreview(); clearPreview(); preview->addEntity(circle); drawPreview(); } break; default: break; } }
// ------------------------------------------------------------------------------- void ExpiredElementsDialog::removeSelectedItemsFromDeletionList( void ) // ------------------------------------------------------------------------------- { if ( NULLPTR == ui.pExpiryList ) return; QList<QTreeWidgetItem*> selectedItemList = ui.pExpiryList->selectedItems(); QTreeWidgetItem* pTreeItem; CInformationElement* pElement; while ( 0 < selectedItemList.count() ) { pTreeItem = selectedItemList.first(); if ( pTreeItem ) { pElement = expiredElementsMap.value( pTreeItem ); if ( pElement ) { pElement->setExpiryDate( false ); // remove expiry date } } expiredElementsMap.remove( pTreeItem ); // remove from dictionary DELETE( pTreeItem ); } clearPreview(); // if list is empty, disable the button if ( 0 == ui.pExpiryList->topLevelItemCount() ) { if ( ui.buttonOk ) ui.buttonOk->setEnabled( false ); } }
void RS_ActionDrawText::commandEvent(RS_CommandEvent* e) { RS_String c = e->getCommand().lower(); if (checkCommand("help", c)) { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + getAvailableCommands().join(", ")); } return; } switch (getStatus()) { case SetPos: if (checkCommand("text", c)) { deleteSnapper(); deletePreview(); clearPreview(); graphicView->disableCoordinateInput(); setStatus(SetText); } break; case SetText: { setText(e->getCommand()); if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->requestOptions(this, true, true); } graphicView->enableCoordinateInput(); setStatus(SetPos); } break; default: break; } }
void KPImageDialogPreview::showPreview(const QUrl& url) { if (!url.isValid()) { clearPreview(); return; } if (url != d->currentUrl) { QString make, model, dateTime, aperture, focalLength, exposureTime, sensitivity; QString unavailable(i18n("<i>unavailable</i>")); clearPreview(); d->currentUrl = url; if (d->iface) { d->iface->thumbnail(d->currentUrl, 256); } else { qCDebug(KIPIPLUGINS_LOG) << "No KIPI interface available : thumbnails will not generated."; } // Try to use Metadata Processor from KIPI host to identify image. if (d->meta && d->meta->load(d->currentUrl) && (d->meta->hasExif() || d->meta->hasXmp())) { make = d->meta->getExifTagString(QLatin1String("Exif.Image.Make")); if (make.isEmpty()) make = d->meta->getXmpTagString(QLatin1String("Xmp.tiff.Make")); model = d->meta->getExifTagString(QLatin1String("Exif.Image.Model")); if (model.isEmpty()) model = d->meta->getXmpTagString(QLatin1String("Xmp.tiff.Model")); if (d->meta->getImageDateTime().isValid()) dateTime = QLocale().toString(d->meta->getImageDateTime(), QLocale::ShortFormat); aperture = d->meta->getExifTagString(QLatin1String("Exif.Photo.FNumber")); if (aperture.isEmpty()) { aperture = d->meta->getExifTagString(QLatin1String("Exif.Photo.ApertureValue")); if (aperture.isEmpty()) { aperture = d->meta->getXmpTagString(QLatin1String("Xmp.exif.FNumber")); if (aperture.isEmpty()) aperture = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ApertureValue")); } } focalLength = d->meta->getExifTagString(QLatin1String("Exif.Photo.FocalLength")); if (focalLength.isEmpty()) focalLength = d->meta->getXmpTagString(QLatin1String("Xmp.exif.FocalLength")); exposureTime = d->meta->getExifTagString(QLatin1String("Exif.Photo.ExposureTime")); if (exposureTime.isEmpty()) { exposureTime = d->meta->getExifTagString(QLatin1String("Exif.Photo.ShutterSpeedValue")); if (exposureTime.isEmpty()) { exposureTime = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ExposureTime")); if (exposureTime.isEmpty()) exposureTime = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ShutterSpeedValue")); } } sensitivity = d->meta->getExifTagString(QLatin1String("Exif.Photo.ISOSpeedRatings")); if (sensitivity.isEmpty()) { sensitivity = d->meta->getExifTagString(QLatin1String("Exif.Photo.ExposureIndex")); if (sensitivity.isEmpty()) { sensitivity = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ISOSpeedRatings")); if (sensitivity.isEmpty()) sensitivity = d->meta->getXmpTagString(QLatin1String("Xmp.exif.ExposureIndex")); } } } if (make.isEmpty()) make = unavailable; if (model.isEmpty()) model = unavailable; if (dateTime.isEmpty()) dateTime = unavailable; if (aperture.isEmpty()) aperture = unavailable; if (focalLength.isEmpty()) focalLength = unavailable; if (exposureTime.isEmpty()) exposureTime = unavailable; if (sensitivity.isEmpty()) sensitivity = unavailable; else sensitivity = i18n("%1 ISO", sensitivity); QString identify(QString::fromLatin1("<qt><center>")); QString cellBeg(QString::fromLatin1("<tr><td><nobr><font size=-1>")); QString cellMid(QString::fromLatin1("</font></nobr></td><td><nobr><font size=-1>")); QString cellEnd(QString::fromLatin1("</font></nobr></td></tr>")); identify += QString::fromLatin1("<table cellspacing=0 cellpadding=0>"); identify += cellBeg + i18n("<i>Make:</i>") + cellMid + make + cellEnd; identify += cellBeg + i18n("<i>Model:</i>") + cellMid + model + cellEnd; identify += cellBeg + i18n("<i>Created:</i>") + cellMid + dateTime + cellEnd; identify += cellBeg + i18n("<i>Aperture:</i>") + cellMid + aperture + cellEnd; identify += cellBeg + i18n("<i>Focal:</i>") + cellMid + focalLength + cellEnd; identify += cellBeg + i18n("<i>Exposure:</i>") + cellMid + exposureTime + cellEnd; identify += cellBeg + i18n("<i>Sensitivity:</i>") + cellMid + sensitivity + cellEnd; identify += QString::fromLatin1("</table></center></qt>"); d->infoLabel->setText(identify); } }
void KPImageDialogPreview::showPreview() { QUrl url(d->currentUrl); clearPreview(); showPreview(url); }
void KPImageDialogPreview::showPreview(const KUrl& url) { if (!url.isValid()) { clearPreview(); return; } if (url != d->currentUrl) { QString make, model, dateTime, aperture, focalLength, exposureTime, sensitivity; QString unavailable(i18n("<i>unavailable</i>")); clearPreview(); d->currentUrl = url; if (d->iface) { d->iface->thumbnail(d->currentUrl, 256); } else { if ( !d->currentUrl.isValid() ) return; #if KDE_IS_VERSION(4,7,0) KFileItemList items; items.append(KFileItem(KFileItem::Unknown, KFileItem::Unknown, d->currentUrl, true)); KIO::PreviewJob* job = KIO::filePreview(items, QSize(256, 256)); #else KIO::PreviewJob* job = KIO::filePreview(d->currentUrl, 256); #endif connect(job, SIGNAL(gotPreview(KFileItem,QPixmap)), this, SLOT(slotKDEPreview(KFileItem,QPixmap))); connect(job, SIGNAL(failed(KFileItem)), this, SLOT(slotKDEPreviewFailed(KFileItem))); } // Try to use libkexiv2 to identify image. if (d->metaIface.load(d->currentUrl.path()) && (d->metaIface.hasExif() || d->metaIface.hasXmp())) { make = d->metaIface.getExifTagString("Exif.Image.Make"); if (make.isEmpty()) make = d->metaIface.getXmpTagString("Xmp.tiff.Make"); model = d->metaIface.getExifTagString("Exif.Image.Model"); if (model.isEmpty()) model = d->metaIface.getXmpTagString("Xmp.tiff.Model"); if (d->metaIface.getImageDateTime().isValid()) dateTime = KGlobal::locale()->formatDateTime(d->metaIface.getImageDateTime(), KLocale::ShortDate, true); aperture = d->metaIface.getExifTagString("Exif.Photo.FNumber"); if (aperture.isEmpty()) { aperture = d->metaIface.getExifTagString("Exif.Photo.ApertureValue"); if (aperture.isEmpty()) { aperture = d->metaIface.getXmpTagString("Xmp.exif.FNumber"); if (aperture.isEmpty()) aperture = d->metaIface.getXmpTagString("Xmp.exif.ApertureValue"); } } focalLength = d->metaIface.getExifTagString("Exif.Photo.FocalLength"); if (focalLength.isEmpty()) focalLength = d->metaIface.getXmpTagString("Xmp.exif.FocalLength"); exposureTime = d->metaIface.getExifTagString("Exif.Photo.ExposureTime"); if (exposureTime.isEmpty()) { exposureTime = d->metaIface.getExifTagString("Exif.Photo.ShutterSpeedValue"); if (exposureTime.isEmpty()) { exposureTime = d->metaIface.getXmpTagString("Xmp.exif.ExposureTime"); if (exposureTime.isEmpty()) exposureTime = d->metaIface.getXmpTagString("Xmp.exif.ShutterSpeedValue"); } } sensitivity = d->metaIface.getExifTagString("Exif.Photo.ISOSpeedRatings"); if (sensitivity.isEmpty()) { sensitivity = d->metaIface.getExifTagString("Exif.Photo.ExposureIndex"); if (sensitivity.isEmpty()) { sensitivity = d->metaIface.getXmpTagString("Xmp.exif.ISOSpeedRatings"); if (sensitivity.isEmpty()) sensitivity = d->metaIface.getXmpTagString("Xmp.exif.ExposureIndex"); } } } else { // Try to use libkdcraw interface to identify image. DcrawInfoContainer info; KDcraw dcrawIface; dcrawIface.rawFileIdentify(info, d->currentUrl.path()); if (info.isDecodable) { if (!info.make.isEmpty()) make = info.make; if (!info.model.isEmpty()) model = info.model; if (info.dateTime.isValid()) dateTime = KGlobal::locale()->formatDateTime(info.dateTime, KLocale::ShortDate, true); if (info.aperture != -1.0) aperture = QString::number(info.aperture); if (info.focalLength != -1.0) focalLength = QString::number(info.focalLength); if (info.exposureTime != -1.0) exposureTime = QString::number(info.exposureTime); if (info.sensitivity != -1) sensitivity = QString::number(info.sensitivity); } else { d->infoLabel->clear(); return; } } if (make.isEmpty()) make = unavailable; if (model.isEmpty()) model = unavailable; if (dateTime.isEmpty()) dateTime = unavailable; if (aperture.isEmpty()) aperture = unavailable; if (focalLength.isEmpty()) focalLength = unavailable; if (exposureTime.isEmpty()) exposureTime = unavailable; if (sensitivity.isEmpty()) sensitivity = unavailable; else sensitivity = i18n("%1 ISO", sensitivity); QString identify("<qt><center>"); QString cellBeg("<tr><td><nobr><font size=-1>"); QString cellMid("</font></nobr></td><td><nobr><font size=-1>"); QString cellEnd("</font></nobr></td></tr>"); identify += "<table cellspacing=0 cellpadding=0>"; identify += cellBeg + i18n("<i>Make:</i>") + cellMid + make + cellEnd; identify += cellBeg + i18n("<i>Model:</i>") + cellMid + model + cellEnd; identify += cellBeg + i18n("<i>Created:</i>") + cellMid + dateTime + cellEnd; identify += cellBeg + i18n("<i>Aperture:</i>") + cellMid + aperture + cellEnd; identify += cellBeg + i18n("<i>Focal:</i>") + cellMid + focalLength + cellEnd; identify += cellBeg + i18n("<i>Exposure:</i>") + cellMid + exposureTime + cellEnd; identify += cellBeg + i18n("<i>Sensitivity:</i>") + cellMid + sensitivity + cellEnd; identify += "</table></center></qt>"; d->infoLabel->setText(identify); } }
void RS_ActionModifyRound::commandEvent(RS_CommandEvent* e) { RS_String c = e->getCommand().lower(); if (checkCommand("help", c)) { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + getAvailableCommands().join(", ")); } return; } switch (getStatus()) { case SetEntity1: case SetEntity2: if (checkCommand("radius", c)) { deleteSnapper(); deletePreview(); clearPreview(); lastStatus = (Status)getStatus(); setStatus(SetRadius); } else if (checkCommand("trim", c)) { /*deleteSnapper(); deletePreview(); clearPreview(); lastStatus = (Status)getStatus(); setStatus(SetTrim); */ data.trim = !data.trim; if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->requestOptions(this, true, true); } } break; case SetRadius: { bool ok; double r = RS_Math::eval(c, &ok); if (ok==true) { data.radius = r; } else { if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression")); } } if (RS_DIALOGFACTORY!=NULL) { RS_DIALOGFACTORY->requestOptions(this, true, true); } setStatus(lastStatus); } break; /*case SetTrim: { if (c==cmdYes.lower() || c==cmdYes2) { data.trim = true; } else if (c==cmdNo.lower() || c==cmdNo2) { data.trim = false; } else { RS_DIALOGFACTORY->commandMessage(tr("Please enter 'Yes' " "or 'No'")); } RS_DIALOGFACTORY->requestOptions(this, true, true); setStatus(lastStatus); } break;*/ default: break; } }
void RS_ActionDrawArc::mouseMoveEvent(RS_MouseEvent* e) { RS_DEBUG->print("RS_ActionDrawArc::mouseMoveEvent begin"); RS_Vector mouse = snapPoint(e); switch (getStatus()) { case SetCenter: data.center = mouse; break; case SetRadius: if (data.center.valid) { data.radius = data.center.distanceTo(mouse); deletePreview(); clearPreview(); preview->addEntity(new RS_Circle(preview, RS_CircleData(data.center, data.radius))); drawPreview(); } break; case SetAngle1: data.angle1 = data.center.angleTo(mouse); if (data.reversed) { data.angle2 = RS_Math::correctAngle(data.angle1-M_PI/3); } else { data.angle2 = RS_Math::correctAngle(data.angle1+M_PI/3); } deletePreview(); clearPreview(); preview->addEntity(new RS_Arc(preview, data)); drawPreview(); break; case SetAngle2: data.angle2 = data.center.angleTo(mouse); deletePreview(); clearPreview(); preview->addEntity(new RS_Arc(preview, data)); drawPreview(); break; case SetIncAngle: data.angle2 = data.angle1 + data.center.angleTo(mouse); deletePreview(); clearPreview(); preview->addEntity(new RS_Arc(preview, data)); drawPreview(); break; case SetChordLength: { double x = data.center.distanceTo(mouse); if (fabs(x/(2*data.radius))<=1.0) { data.angle2 = data.angle1 + asin(x/(2*data.radius)) * 2; deletePreview(); clearPreview(); preview->addEntity(new RS_Arc(preview, data)); drawPreview(); } } break; default: break; } RS_DEBUG->print("RS_ActionDrawArc::mouseMoveEvent end"); }