gui.cpp

changeset 110
a62ab18d1b80
parent 109
f40b35142586
child 111
125e8031dbf1
equal deleted inserted replaced
109:f40b35142586 110:a62ab18d1b80
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 // ========================================================================= //

mercurial