Changeset View
Changeset View
Standalone View
Standalone View
kstars/fitsviewer/fitsview.cpp
Context not available. | |||||
42 | grabGesture(Qt::PinchGesture); | 42 | grabGesture(Qt::PinchGesture); | ||
---|---|---|---|---|---|
43 | 43 | | |||
44 | image_frame.reset(new FITSLabel(this)); | 44 | image_frame.reset(new FITSLabel(this)); | ||
45 | filter = filterType; | 45 | filter = filterType; | ||
46 | mode = fitsMode; | 46 | mode = fitsMode; | ||
47 | 47 | | |||
48 | setBackgroundRole(QPalette::Dark); | 48 | setBackgroundRole(QPalette::Dark); | ||
49 | 49 | | |||
Context not available. | |||||
130 | cursorMode = mode; | 130 | cursorMode = mode; | ||
131 | updateMouseCursor(); | 131 | updateMouseCursor(); | ||
132 | 132 | | |||
133 | if (mode==scopeCursor && imageHasWCS()) | 133 | if (mode == scopeCursor && imageHasWCS()) | ||
134 | { | 134 | { | ||
135 | if(imageData->isWCSLoaded() == false && wcsWatcher.isRunning() == false) | 135 | if (!imageData->isWCSLoaded() && !wcsWatcher.isRunning()) | ||
136 | { | 136 | { | ||
137 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | 137 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | ||
138 | wcsWatcher.setFuture(future); | 138 | wcsWatcher.setFuture(future); | ||
Context not available. | |||||
142 | 142 | | |||
143 | void FITSView::resizeEvent(QResizeEvent *event) | 143 | void FITSView::resizeEvent(QResizeEvent *event) | ||
144 | { | 144 | { | ||
145 | if (!imageData && noImageLabel) | 145 | if ((imageData == nullptr) && noImageLabel != nullptr) | ||
146 | { | 146 | { | ||
147 | noImageLabel->setPixmap( | 147 | noImageLabel->setPixmap( | ||
148 | noImage.scaled(width() - 20, height() - 20, Qt::KeepAspectRatio, Qt::FastTransformation)); | 148 | noImage.scaled(width() - 20, height() - 20, Qt::KeepAspectRatio, Qt::FastTransformation)); | ||
Context not available. | |||||
159 | 159 | | |||
160 | bool FITSView::loadFITS(const QString &inFilename, bool silent) | 160 | bool FITSView::loadFITS(const QString &inFilename, bool silent) | ||
161 | { | 161 | { | ||
162 | if (floatingToolBar) | 162 | if (floatingToolBar != nullptr) | ||
163 | { | ||||
163 | floatingToolBar->setVisible(true); | 164 | floatingToolBar->setVisible(true); | ||
165 | } | ||||
164 | 166 | | |||
165 | QProgressDialog fitsProg(this); | 167 | QProgressDialog fitsProg(this); | ||
166 | 168 | | |||
167 | bool setBayerParams = false; | 169 | bool setBayerParams = false; | ||
168 | 170 | | |||
169 | BayerParams param; | 171 | BayerParams param; | ||
170 | if (imageData && imageData->hasDebayer()) | 172 | if ((imageData != nullptr) && imageData->hasDebayer()) | ||
171 | { | 173 | { | ||
172 | setBayerParams = true; | 174 | setBayerParams = true; | ||
173 | imageData->getBayerParams(¶m); | 175 | imageData->getBayerParams(¶m); | ||
Context not available. | |||||
198 | qApp->processEvents(); | 200 | qApp->processEvents(); | ||
199 | } | 201 | } | ||
200 | 202 | | |||
201 | if (imageData->loadFITS(inFilename, silent) == false) | 203 | if (!imageData->loadFITS(inFilename, silent)) | ||
202 | return false; | 204 | return false; | ||
203 | 205 | | |||
204 | if (mode == FITS_NORMAL) | 206 | if (mode == FITS_NORMAL) | ||
Context not available. | |||||
228 | { | 230 | { | ||
229 | currentZoom = 100; | 231 | currentZoom = 100; | ||
230 | 232 | | |||
231 | if (rescale(ZOOM_FIT_WINDOW)) | 233 | if (rescale(ZOOM_FIT_WINDOW) != 0) | ||
232 | return false; | 234 | return false; | ||
233 | 235 | | |||
234 | firstLoad = false; | 236 | firstLoad = false; | ||
235 | } | 237 | } | ||
236 | else | 238 | else | ||
237 | { | 239 | { | ||
238 | if (rescale(ZOOM_KEEP_LEVEL)) | 240 | if (rescale(ZOOM_KEEP_LEVEL) != 0) | ||
239 | return false; | 241 | return false; | ||
240 | } | 242 | } | ||
241 | 243 | | |||
Context not available. | |||||
253 | setAlignment(Qt::AlignCenter); | 255 | setAlignment(Qt::AlignCenter); | ||
254 | 256 | | |||
255 | // Load WCS data now if selected and image contains valid WCS header | 257 | // Load WCS data now if selected and image contains valid WCS header | ||
256 | if (imageData->hasWCS() && Options::autoWCS() && (mode == FITS_NORMAL || mode == FITS_ALIGN) && wcsWatcher.isRunning() == false) | 258 | if (imageData->hasWCS() && Options::autoWCS() && (mode == FITS_NORMAL || mode == FITS_ALIGN) && !wcsWatcher.isRunning()) | ||
257 | { | 259 | { | ||
258 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | 260 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | ||
259 | wcsWatcher.setFuture(future); | 261 | wcsWatcher.setFuture(future); | ||
Context not available. | |||||
264 | if (isVisible()) | 266 | if (isVisible()) | ||
265 | emit newStatus(QString("%1x%2").arg(image_width).arg(image_height), FITS_RESOLUTION); | 267 | emit newStatus(QString("%1x%2").arg(image_width).arg(image_height), FITS_RESOLUTION); | ||
266 | 268 | | |||
267 | if(showStarProfile){ | 269 | if (showStarProfile) | ||
268 | if(floatingToolBar) | 270 | { | ||
271 | if(floatingToolBar != nullptr) | ||||
269 | toggleProfileAction->setChecked(true); | 272 | toggleProfileAction->setChecked(true); | ||
270 | QTimer::singleShot(100 , this , SLOT(viewStarProfile())); //Need to wait till the Focus module finds stars, if its the Focus module. | 273 | QTimer::singleShot(100 , this , SLOT(viewStarProfile())); //Need to wait till the Focus module finds stars, if its the Focus module. | ||
271 | } | 274 | } | ||
Context not available. | |||||
326 | return cursorMode; | 329 | return cursorMode; | ||
327 | } | 330 | } | ||
328 | 331 | | |||
329 | void FITSView::enterEvent(QEvent *) | 332 | void FITSView::enterEvent(QEvent *event) | ||
330 | { | 333 | { | ||
331 | if (floatingToolBar && imageData) | 334 | Q_UNUSED(event) | ||
335 | | ||||
336 | if ((floatingToolBar != nullptr) && (imageData != nullptr)) | ||||
332 | { | 337 | { | ||
333 | QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this); | 338 | auto *eff = new QGraphicsOpacityEffect(this); | ||
334 | floatingToolBar->setGraphicsEffect(eff); | 339 | floatingToolBar->setGraphicsEffect(eff); | ||
335 | QPropertyAnimation *a = new QPropertyAnimation(eff, "opacity"); | 340 | QPropertyAnimation *a = new QPropertyAnimation(eff, "opacity"); | ||
336 | a->setDuration(500); | 341 | a->setDuration(500); | ||
Context not available. | |||||
341 | } | 346 | } | ||
342 | } | 347 | } | ||
343 | 348 | | |||
344 | void FITSView::leaveEvent(QEvent *) | 349 | void FITSView::leaveEvent(QEvent *event) | ||
345 | { | 350 | { | ||
346 | if (floatingToolBar && imageData) | 351 | Q_UNUSED(event) | ||
352 | | ||||
353 | if ((floatingToolBar != nullptr) && (imageData != nullptr)) | ||||
347 | { | 354 | { | ||
348 | QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this); | 355 | auto *eff = new QGraphicsOpacityEffect(this); | ||
349 | floatingToolBar->setGraphicsEffect(eff); | 356 | floatingToolBar->setGraphicsEffect(eff); | ||
350 | QPropertyAnimation *a = new QPropertyAnimation(eff, "opacity"); | 357 | QPropertyAnimation *a = new QPropertyAnimation(eff, "opacity"); | ||
351 | a->setDuration(500); | 358 | a->setDuration(500); | ||
Context not available. | |||||
393 | imageData->getMinMax(&min, &max); | 400 | imageData->getMinMax(&min, &max); | ||
394 | } | 401 | } | ||
395 | 402 | | |||
396 | T *buffer = reinterpret_cast<T *>(image_buffer); | 403 | auto *buffer = reinterpret_cast<T *>(image_buffer); | ||
397 | 404 | | |||
398 | if (min == max) | 405 | if (min == max) | ||
399 | { | 406 | { | ||
Context not available. | |||||
450 | { | 457 | { | ||
451 | futures.append(QtConcurrent::run([=]() | 458 | futures.append(QtConcurrent::run([=]() | ||
452 | { | 459 | { | ||
453 | QRgb *scanLine = reinterpret_cast<QRgb *>((display_image->scanLine(j))); | 460 | auto *scanLine = reinterpret_cast<QRgb *>((display_image->scanLine(j))); | ||
454 | T *runningBufferR = buffer + j*image_width; | 461 | T *runningBufferR = buffer + j*image_width; | ||
455 | T *runningBufferG = buffer + j*image_width + size; | 462 | T *runningBufferG = buffer + j*image_width + size; | ||
456 | T *runningBufferB = buffer + j*image_width + size*2; | 463 | T *runningBufferB = buffer + j*image_width + size*2; | ||
Context not available. | |||||
518 | double w = baseSize().width() - BASE_OFFSET; | 525 | double w = baseSize().width() - BASE_OFFSET; | ||
519 | double h = baseSize().height() - BASE_OFFSET; | 526 | double h = baseSize().height() - BASE_OFFSET; | ||
520 | 527 | | |||
521 | if (firstLoad == false) | 528 | if (!firstLoad) | ||
522 | { | 529 | { | ||
523 | w = viewport()->rect().width() - BASE_OFFSET; | 530 | w = viewport()->rect().width() - BASE_OFFSET; | ||
524 | h = viewport()->rect().height() - BASE_OFFSET; | 531 | h = viewport()->rect().height() - BASE_OFFSET; | ||
Context not available. | |||||
618 | 625 | | |||
619 | void FITSView::ZoomToFit() | 626 | void FITSView::ZoomToFit() | ||
620 | { | 627 | { | ||
621 | if (display_image) | 628 | if (display_image != nullptr) | ||
622 | { | 629 | { | ||
623 | rescale(ZOOM_FIT_WINDOW); | 630 | rescale(ZOOM_FIT_WINDOW); | ||
624 | updateFrame(); | 631 | updateFrame(); | ||
Context not available. | |||||
639 | else | 646 | else | ||
640 | ok = displayPixmap.convertFromImage(*display_image); | 647 | ok = displayPixmap.convertFromImage(*display_image); | ||
641 | 648 | | |||
642 | if (ok == false) | 649 | if (!ok) | ||
643 | return; | 650 | return; | ||
644 | 651 | | |||
645 | QPainter painter(&displayPixmap); | 652 | QPainter painter(&displayPixmap); | ||
Context not available. | |||||
652 | 659 | | |||
653 | void FITSView::ZoomDefault() | 660 | void FITSView::ZoomDefault() | ||
654 | { | 661 | { | ||
655 | if (image_frame.get()) | 662 | if (image_frame != nullptr) | ||
656 | { | 663 | { | ||
657 | emit actionUpdated("view_zoom_out", true); | 664 | emit actionUpdated("view_zoom_out", true); | ||
658 | emit actionUpdated("view_zoom_in", true); | 665 | emit actionUpdated("view_zoom_in", true); | ||
Context not available. | |||||
679 | if (trackingBoxEnabled && getCursorMode() != FITSView::scopeCursor) | 686 | if (trackingBoxEnabled && getCursorMode() != FITSView::scopeCursor) | ||
680 | drawTrackingBox(painter); | 687 | drawTrackingBox(painter); | ||
681 | 688 | | |||
682 | if (markerCrosshair.isNull() == false) | 689 | if (!markerCrosshair.isNull()) | ||
683 | drawMarker(painter); | 690 | drawMarker(painter); | ||
684 | 691 | | |||
685 | if (showCrosshair) | 692 | if (showCrosshair) | ||
Context not available. | |||||
769 | void FITSView::drawCrosshair(QPainter *painter) | 776 | void FITSView::drawCrosshair(QPainter *painter) | ||
770 | { | 777 | { | ||
771 | float scale = (currentZoom / ZOOM_DEFAULT); | 778 | float scale = (currentZoom / ZOOM_DEFAULT); | ||
772 | QPointF c = QPointF(image_width / 2 * scale, image_height / 2 * scale); | 779 | QPointF c = QPointF((qreal)image_width / 2 * scale, (qreal)image_height / 2 * scale); | ||
773 | float midX = image_width / 2 * scale; | 780 | float midX = (float)image_width / 2 * scale; | ||
774 | float midY = image_height / 2 * scale; | 781 | float midY = (float)image_height / 2 * scale; | ||
775 | float maxX = image_width * scale; | 782 | float maxX = (float)image_width * scale; | ||
776 | float maxY = image_height * scale; | 783 | float maxY = (float)image_height * scale; | ||
777 | float r = 50 * scale; | 784 | float r = 50 * scale; | ||
778 | 785 | | |||
779 | painter->setPen(QPen(QColor(KStarsData::Instance()->colorScheme()->colorNamed("TargetColor")))); | 786 | painter->setPen(QPen(QColor(KStarsData::Instance()->colorScheme()->colorNamed("TargetColor")))); | ||
Context not available. | |||||
842 | 849 | | |||
843 | bool FITSView::imageHasWCS() | 850 | bool FITSView::imageHasWCS() | ||
844 | { | 851 | { | ||
845 | if (imageData) | 852 | if (imageData != nullptr) | ||
846 | return imageData->hasWCS(); | 853 | return imageData->hasWCS(); | ||
847 | return false; | 854 | return false; | ||
848 | } | 855 | } | ||
Context not available. | |||||
872 | if (imageData->hasWCS()) | 879 | if (imageData->hasWCS()) | ||
873 | { | 880 | { | ||
874 | wcs_point *wcs_coord = imageData->getWCSCoord(); | 881 | wcs_point *wcs_coord = imageData->getWCSCoord(); | ||
875 | if (wcs_coord) | 882 | if (wcs_coord != nullptr) | ||
876 | { | 883 | { | ||
877 | int size = image_width * image_height; | 884 | int size = image_width * image_height; | ||
878 | double maxRA = -1000; | 885 | double maxRA = -1000; | ||
Context not available. | |||||
893 | if (dec < minDec) | 900 | if (dec < minDec) | ||
894 | minDec = dec; | 901 | minDec = dec; | ||
895 | } | 902 | } | ||
896 | int minDecMinutes = (int)(minDec * 12); //This will force the Dec Scale to 5 arc minutes in the loop | 903 | auto minDecMinutes = (int)(minDec * 12); //This will force the Dec Scale to 5 arc minutes in the loop | ||
897 | int maxDecMinutes = (int)(maxDec * 12); | 904 | auto maxDecMinutes = (int)(maxDec * 12); | ||
898 | 905 | | |||
899 | int minRAMinutes = | 906 | auto minRAMinutes = | ||
900 | (int)(minRA / 15.0 * | 907 | (int)(minRA / 15.0 * | ||
901 | 120.0); //This will force the scale to 1/2 minutes of RA in the loop from 0 to 50 degrees | 908 | 120.0); //This will force the scale to 1/2 minutes of RA in the loop from 0 to 50 degrees | ||
902 | int maxRAMinutes = (int)(maxRA / 15.0 * 120.0); | 909 | auto maxRAMinutes = (int)(maxRA / 15.0 * 120.0); | ||
903 | 910 | | |||
904 | double raConvert = 15 / 120.0; //This will undo the calculation above to retrieve the actual RA. | 911 | double raConvert = 15 / 120.0; //This will undo the calculation above to retrieve the actual RA. | ||
905 | double decConvert = 1.0 / 12.0; //This will undo the calculation above to retrieve the actual DEC. | 912 | double decConvert = 1.0 / 12.0; //This will undo the calculation above to retrieve the actual DEC. | ||
Context not available. | |||||
1196 | { | 1203 | { | ||
1197 | showEQGrid = !showEQGrid; | 1204 | showEQGrid = !showEQGrid; | ||
1198 | 1205 | | |||
1199 | if (imageData->isWCSLoaded() == false && wcsWatcher.isRunning() == false) | 1206 | if (!imageData->isWCSLoaded() && !wcsWatcher.isRunning()) | ||
1200 | { | 1207 | { | ||
1201 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | 1208 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | ||
1202 | wcsWatcher.setFuture(future); | 1209 | wcsWatcher.setFuture(future); | ||
1203 | return; | 1210 | return; | ||
1204 | } | 1211 | } | ||
1205 | 1212 | | |||
1206 | if (image_frame.get()) | 1213 | if (image_frame != nullptr) | ||
1207 | updateFrame(); | 1214 | updateFrame(); | ||
1208 | } | 1215 | } | ||
1209 | 1216 | | |||
Context not available. | |||||
1211 | { | 1218 | { | ||
1212 | showObjects = !showObjects; | 1219 | showObjects = !showObjects; | ||
1213 | 1220 | | |||
1214 | if (imageData->isWCSLoaded() == false && wcsWatcher.isRunning() == false) | 1221 | if (!imageData->isWCSLoaded() && !wcsWatcher.isRunning()) | ||
1215 | { | 1222 | { | ||
1216 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | 1223 | QFuture<bool> future = QtConcurrent::run(imageData, &FITSData::loadWCS); | ||
1217 | wcsWatcher.setFuture(future); | 1224 | wcsWatcher.setFuture(future); | ||
1218 | return; | 1225 | return; | ||
1219 | } | 1226 | } | ||
1220 | 1227 | | |||
1221 | if (image_frame.get()) | 1228 | if (image_frame != nullptr) | ||
1222 | updateFrame(); | 1229 | updateFrame(); | ||
1223 | } | 1230 | } | ||
1224 | 1231 | | |||
1225 | void FITSView::toggleStars() | 1232 | void FITSView::toggleStars() | ||
1226 | { | 1233 | { | ||
1227 | toggleStars(!markStars); | 1234 | toggleStars(!markStars); | ||
1228 | if (image_frame.get()) | 1235 | if (image_frame != nullptr) | ||
1229 | updateFrame(); | 1236 | updateFrame(); | ||
1230 | } | 1237 | } | ||
1231 | 1238 | | |||
Context not available. | |||||
1345 | { | 1352 | { | ||
1346 | markStars = enable; | 1353 | markStars = enable; | ||
1347 | 1354 | | |||
1348 | if (markStars == true && imageData->areStarsSearched() == false) | 1355 | if (markStars && !imageData->areStarsSearched()) | ||
1349 | { | 1356 | { | ||
1350 | QApplication::setOverrideCursor(Qt::WaitCursor); | 1357 | QApplication::setOverrideCursor(Qt::WaitCursor); | ||
1351 | emit newStatus(i18n("Finding stars..."), FITS_MESSAGE); | 1358 | emit newStatus(i18n("Finding stars..."), FITS_MESSAGE); | ||
Context not available. | |||||
1417 | int x0 = 0; | 1424 | int x0 = 0; | ||
1418 | int y0 = 0; | 1425 | int y0 = 0; | ||
1419 | double scale = (currentZoom / ZOOM_DEFAULT); | 1426 | double scale = (currentZoom / ZOOM_DEFAULT); | ||
1420 | if (markerCrosshair.isNull() == false) | 1427 | if (!markerCrosshair.isNull()) | ||
1421 | { | 1428 | { | ||
1422 | x0 = markerCrosshair.x() * scale; | 1429 | x0 = markerCrosshair.x() * scale; | ||
1423 | y0 = markerCrosshair.y() * scale; | 1430 | y0 = markerCrosshair.y() * scale; | ||
Context not available. | |||||
1483 | bool FITSView::event(QEvent *event) | 1490 | bool FITSView::event(QEvent *event) | ||
1484 | { | 1491 | { | ||
1485 | if (event->type() == QEvent::Gesture) | 1492 | if (event->type() == QEvent::Gesture) | ||
1486 | return gestureEvent(static_cast<QGestureEvent *>(event)); | 1493 | return gestureEvent(dynamic_cast<QGestureEvent *>(event)); | ||
1487 | return QScrollArea::event(event); | 1494 | return QScrollArea::event(event); | ||
1488 | } | 1495 | } | ||
1489 | 1496 | | |||
1490 | bool FITSView::gestureEvent(QGestureEvent *event) | 1497 | bool FITSView::gestureEvent(QGestureEvent *event) | ||
1491 | { | 1498 | { | ||
1492 | if (QGesture *pinch = event->gesture(Qt::PinchGesture)) | 1499 | if (QGesture *pinch = event->gesture(Qt::PinchGesture)) | ||
1493 | pinchTriggered(static_cast<QPinchGesture *>(pinch)); | 1500 | pinchTriggered(dynamic_cast<QPinchGesture *>(pinch)); | ||
1494 | return true; | 1501 | return true; | ||
1495 | } | 1502 | } | ||
1496 | 1503 | | |||
Context not available. | |||||
1541 | 1548 | | |||
1542 | emit wcsToggled(hasWCS); | 1549 | emit wcsToggled(hasWCS); | ||
1543 | 1550 | | |||
1544 | if (toggleEQGridAction) | 1551 | if (toggleEQGridAction != nullptr) | ||
1545 | toggleEQGridAction->setEnabled(hasWCS); | 1552 | toggleEQGridAction->setEnabled(hasWCS); | ||
1546 | if (toggleObjectsAction) | 1553 | if (toggleObjectsAction != nullptr) | ||
1547 | toggleObjectsAction->setEnabled(hasWCS); | 1554 | toggleObjectsAction->setEnabled(hasWCS); | ||
1548 | if (centerTelescopeAction) | 1555 | if (centerTelescopeAction != nullptr) | ||
1549 | centerTelescopeAction->setEnabled(hasWCS); | 1556 | centerTelescopeAction->setEnabled(hasWCS); | ||
1550 | } | 1557 | } | ||
1551 | 1558 | | |||
1552 | void FITSView::createFloatingToolBar() | 1559 | void FITSView::createFloatingToolBar() | ||
1553 | { | 1560 | { | ||
1554 | if (floatingToolBar) | 1561 | if (floatingToolBar != nullptr) | ||
1555 | return; | 1562 | return; | ||
1556 | 1563 | | |||
1557 | floatingToolBar = new QToolBar(this); | 1564 | floatingToolBar = new QToolBar(this); | ||
1558 | QGraphicsOpacityEffect *eff = new QGraphicsOpacityEffect(this); | 1565 | auto *eff = new QGraphicsOpacityEffect(this); | ||
1559 | floatingToolBar->setGraphicsEffect(eff); | 1566 | floatingToolBar->setGraphicsEffect(eff); | ||
1560 | eff->setOpacity(0.2); | 1567 | eff->setOpacity(0.2); | ||
1561 | floatingToolBar->setVisible(false); | 1568 | floatingToolBar->setVisible(false); | ||
Context not available. | |||||
1653 | 1660 | | |||
1654 | void FITSView::updateScopeButton() | 1661 | void FITSView::updateScopeButton() | ||
1655 | { | 1662 | { | ||
1656 | if (centerTelescopeAction) | 1663 | if (centerTelescopeAction != nullptr) | ||
1657 | { | 1664 | { | ||
1658 | if (getCursorMode() == FITSView::scopeCursor) | 1665 | if (getCursorMode() == FITSView::scopeCursor) | ||
1659 | { | 1666 | { | ||
Context not available. | |||||
1699 | void FITSView::setStarsEnabled(bool enable) | 1706 | void FITSView::setStarsEnabled(bool enable) | ||
1700 | { | 1707 | { | ||
1701 | markStars = enable; | 1708 | markStars = enable; | ||
1702 | if (floatingToolBar) | 1709 | if (floatingToolBar != nullptr) | ||
1703 | { | 1710 | { | ||
1704 | foreach (QAction *action, floatingToolBar->actions()) | 1711 | foreach (QAction *action, floatingToolBar->actions()) | ||
1705 | { | 1712 | { | ||
Context not available. |