300 ADD_TOOLBAR_ITEM (moveYPos) |
300 ADD_TOOLBAR_ITEM (moveYPos) |
301 ADD_TOOLBAR_ITEM (moveYNeg) |
301 ADD_TOOLBAR_ITEM (moveYNeg) |
302 ADD_TOOLBAR_ITEM (moveZPos) |
302 ADD_TOOLBAR_ITEM (moveZPos) |
303 ADD_TOOLBAR_ITEM (moveZNeg) |
303 ADD_TOOLBAR_ITEM (moveZNeg) |
304 |
304 |
|
305 addToolBarBreak (Qt::TopToolBarArea); |
|
306 |
305 initSingleToolBar ("Select"); |
307 initSingleToolBar ("Select"); |
306 ADD_TOOLBAR_ITEM (selectByColor) |
308 ADD_TOOLBAR_ITEM (selectByColor) |
307 ADD_TOOLBAR_ITEM (selectByType) |
309 ADD_TOOLBAR_ITEM (selectByType) |
308 |
310 |
309 // ========================================== |
311 // ========================================== |
428 |
430 |
429 // ========================================================================= // |
431 // ========================================================================= // |
430 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
432 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
431 // ========================================================================= // |
433 // ========================================================================= // |
432 void ForgeWindow::deleteSelection (vector<ulong>* ulapIndices, std::vector<LDObject*>* papObjects) { |
434 void ForgeWindow::deleteSelection (vector<ulong>* ulapIndices, std::vector<LDObject*>* papObjects) { |
433 bool const bSelectionEmpty = (paSelection.size() == 0); |
435 if (selection ().size () == 0) |
|
436 return; |
|
437 |
|
438 std::vector<LDObject*> sel = selection (); |
434 |
439 |
435 // Delete the objects that were being selected |
440 // Delete the objects that were being selected |
436 for (LDObject* obj : paSelection) { |
441 for (LDObject* obj : sel) { |
437 if (papObjects && ulapIndices) { |
442 if (papObjects && ulapIndices) { |
438 papObjects->push_back (obj->clone ()); |
443 papObjects->push_back (obj->clone ()); |
439 ulapIndices->push_back (obj->getIndex (g_CurrentFile)); |
444 ulapIndices->push_back (obj->getIndex (g_CurrentFile)); |
440 } |
445 } |
441 |
446 |
442 g_CurrentFile->forgetObject (obj); |
447 g_CurrentFile->forgetObject (obj); |
443 delete obj; |
448 delete obj; |
444 } |
449 } |
445 |
450 |
446 if (bSelectionEmpty == false) |
451 refresh (); |
447 refresh (); |
|
448 } |
452 } |
449 |
453 |
450 // ========================================================================= // |
454 // ========================================================================= // |
451 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
455 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
452 // ========================================================================= // |
456 // ========================================================================= // |
453 void ForgeWindow::buildObjList () { |
457 void ForgeWindow::buildObjList () { |
454 if (!g_CurrentFile) |
458 if (!g_CurrentFile) |
455 return; |
459 return; |
|
460 |
|
461 // Lock the selection while we do this so that refreshing the object list |
|
462 // doesn't trigger selection updating so that the selection doesn't get lost |
|
463 // while this is done |
|
464 g_bSelectionLocked = true; |
456 |
465 |
457 QList<QTreeWidgetItem*> qaItems; |
466 QList<QTreeWidgetItem*> qaItems; |
458 |
467 |
459 qObjList->clear (); |
468 qObjList->clear (); |
460 |
469 |
574 |
583 |
575 qaItems.append (item); |
584 qaItems.append (item); |
576 } |
585 } |
577 |
586 |
578 qObjList->insertTopLevelItems (0, qaItems); |
587 qObjList->insertTopLevelItems (0, qaItems); |
|
588 |
|
589 g_bSelectionLocked = false; |
|
590 updateSelection (); |
579 } |
591 } |
580 |
592 |
581 // ========================================================================= // |
593 // ========================================================================= // |
582 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
594 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
583 // ========================================================================= // |
595 // ========================================================================= // |
676 |
688 |
677 // ========================================================================= // |
689 // ========================================================================= // |
678 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
690 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
679 // ========================================================================= // |
691 // ========================================================================= // |
680 void ForgeWindow::refresh () { |
692 void ForgeWindow::refresh () { |
|
693 printf ("refreshing.. (%lu)\n", paSelection.size ()); |
681 buildObjList (); |
694 buildObjList (); |
682 R->hardRefresh (); |
695 R->hardRefresh (); |
683 } |
696 } |
684 |
697 |
685 // ========================================================================= // |
698 // ========================================================================= // |
711 g_bSelectionLocked = true; |
724 g_bSelectionLocked = true; |
712 |
725 |
713 for (LDObject* obj : paSelection) |
726 for (LDObject* obj : paSelection) |
714 obj->qObjListEntry->setSelected (true); |
727 obj->qObjListEntry->setSelected (true); |
715 |
728 |
|
729 printf ("updateSelection: %lu objects selected\n", paSelection.size ()); |
|
730 |
716 g_bSelectionLocked = false; |
731 g_bSelectionLocked = false; |
717 slot_selectionChanged (); |
732 slot_selectionChanged (); |
718 } |
733 } |
719 |
734 |
720 // ========================================================================= // |
735 // ========================================================================= // |
737 |
752 |
738 for (LDObject* obj : paSelection) { |
753 for (LDObject* obj : paSelection) { |
739 if (obj->dColor == -1) |
754 if (obj->dColor == -1) |
740 continue; // doesn't use color |
755 continue; // doesn't use color |
741 |
756 |
742 if (dResult != -1 && obj->dColor != dResult) { |
757 if (dResult != -1 && obj->dColor != dResult) |
743 // No consensus in object color, therefore we don't have a |
758 return -1; // No consensus in object color |
744 // proper default value to use. |
|
745 dResult = -1; |
|
746 break; |
|
747 } |
|
748 |
759 |
749 if (dResult == -1) |
760 if (dResult == -1) |
750 dResult = obj->dColor; |
761 dResult = obj->dColor; |
751 } |
762 } |
752 |
763 |
753 return dResult; |
764 return dResult; |
|
765 } |
|
766 |
|
767 // ========================================================================= // |
|
768 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
|
769 // ========================================================================= // |
|
770 LDObjectType_e ForgeWindow::getSelectedType () { |
|
771 LDObjectType_e eResult = OBJ_Unidentified; |
|
772 |
|
773 for (LDObject* obj : paSelection) { |
|
774 if (eResult != OBJ_Unidentified && obj->dColor != eResult) |
|
775 return OBJ_Unidentified; |
|
776 |
|
777 if (eResult == OBJ_Unidentified) |
|
778 eResult = obj->getType (); |
|
779 } |
|
780 |
|
781 return eResult; |
754 } |
782 } |
755 |
783 |
756 // ========================================================================= // |
784 // ========================================================================= // |
757 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
785 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // |
758 // ========================================================================= // |
786 // ========================================================================= // |