@@ -92,11 +92,6 @@ namespace Skylicht
92
92
93
93
for (SGroup* group : m_groups)
94
94
{
95
- for (IObserver* o : group->Observer )
96
- {
97
- delete o;
98
- }
99
-
100
95
delete group;
101
96
}
102
97
m_groups.clear ();
@@ -151,7 +146,6 @@ namespace Skylicht
151
146
152
147
for (SGroup* group : m_groups)
153
148
{
154
- group->releaseObserver ();
155
149
group->GroupUI ->remove ();
156
150
if (group->AssetOwner )
157
151
group->AssetOwner ->closeGUI ();
@@ -459,6 +453,7 @@ namespace Skylicht
459
453
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
460
454
if (group != NULL )
461
455
{
456
+ // when check value change => update ui
462
457
CObserver* onChange = new CObserver ();
463
458
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
464
459
{
@@ -469,16 +464,13 @@ namespace Skylicht
469
464
}
470
465
};
471
466
472
- IObserver* observer = value->addObserver (onChange);
467
+ value->addObserver (onChange, true );
473
468
474
469
// when input text change
475
- input->OnTextChanged = [value, input, observer](GUI::CBase* base) {
470
+ input->OnTextChanged = [value, input, observer = onChange ](GUI::CBase* base) {
476
471
value->set (input->getValue ());
477
472
value->notify (observer);
478
473
};
479
-
480
- // hold observer to release later
481
- group->Observer .push_back (observer);
482
474
}
483
475
}
484
476
@@ -503,6 +495,7 @@ namespace Skylicht
503
495
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
504
496
if (group != NULL )
505
497
{
498
+ // when check value change => update ui
506
499
CObserver* onChange = new CObserver ();
507
500
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
508
501
{
@@ -513,16 +506,13 @@ namespace Skylicht
513
506
}
514
507
};
515
508
516
- IObserver* observer = value->addObserver (onChange);
509
+ value->addObserver (onChange, true );
517
510
518
511
// when input text change
519
- input->OnTextChanged = [value, input, observer](GUI::CBase* base) {
512
+ input->OnTextChanged = [value, input, observer = onChange ](GUI::CBase* base) {
520
513
value->set ((int )input->getValue ());
521
514
value->notify (observer);
522
515
};
523
-
524
- // hold observer to release later
525
- group->Observer .push_back (observer);
526
516
}
527
517
}
528
518
@@ -547,6 +537,7 @@ namespace Skylicht
547
537
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
548
538
if (group != NULL )
549
539
{
540
+ // when check value change => update ui
550
541
CObserver* onChange = new CObserver ();
551
542
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
552
543
{
@@ -557,16 +548,13 @@ namespace Skylicht
557
548
}
558
549
};
559
550
560
- IObserver* observer = value->addObserver (onChange);
551
+ value->addObserver (onChange, true );
561
552
562
553
// when input text change
563
- input->OnTextChanged = [value, input, observer](GUI::CBase* base) {
554
+ input->OnTextChanged = [value, input, observer = onChange ](GUI::CBase* base) {
564
555
value->set ((u32 )input->getValue ());
565
556
value->notify (observer);
566
557
};
567
-
568
- // hold observer to release later
569
- group->Observer .push_back (observer);
570
558
}
571
559
}
572
560
@@ -585,6 +573,7 @@ namespace Skylicht
585
573
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
586
574
if (group != NULL )
587
575
{
576
+ // when check value change => update ui
588
577
CObserver* onChange = new CObserver ();
589
578
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
590
579
{
@@ -596,14 +585,11 @@ namespace Skylicht
596
585
};
597
586
598
587
// when input text change
599
- IObserver* observer = value->addObserver (onChange);
600
- input->OnTextChanged = [value, input, observer](GUI::CBase* base) {
588
+ value->addObserver (onChange, true );
589
+ input->OnTextChanged = [value, input, observer = onChange ](GUI::CBase* base) {
601
590
value->set (input->getString ());
602
591
value->notify (observer);
603
592
};
604
-
605
- // hold observer to release later
606
- group->Observer .push_back (observer);
607
593
}
608
594
609
595
boxLayout->endVertical ();
@@ -629,6 +615,7 @@ namespace Skylicht
629
615
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
630
616
if (group != NULL )
631
617
{
618
+ // when check value change => update ui
632
619
CObserver* onChange = new CObserver ();
633
620
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
634
621
{
@@ -640,14 +627,11 @@ namespace Skylicht
640
627
};
641
628
642
629
// when input text change
643
- IObserver* observer = value->addObserver (onChange);
644
- input->OnLostKeyboardFocus = [value, input, observer](GUI::CBase* base) {
630
+ value->addObserver (onChange, true );
631
+ input->OnLostKeyboardFocus = [value, input, observer = onChange ](GUI::CBase* base) {
645
632
value->set (input->getValueInt ());
646
633
value->notify (observer);
647
634
};
648
-
649
- // hold observer to release later
650
- group->Observer .push_back (observer);
651
635
}
652
636
653
637
boxLayout->endVertical ();
@@ -670,7 +654,7 @@ namespace Skylicht
670
654
CSpaceProperty::SGroup* group = getGroupByLayout (boxLayout);
671
655
if (group != NULL )
672
656
{
673
- // when check value c hange
657
+ // when check value change => update ui
674
658
CObserver* onChange = new CObserver ();
675
659
onChange->Notify = [me = onChange, target = check](ISubject* subject, IObserver* from)
676
660
{
@@ -681,15 +665,12 @@ namespace Skylicht
681
665
}
682
666
};
683
667
684
- // when check control change
685
- IObserver* observer = value->addObserver (onChange);
686
- check->OnChanged = [value, check, observer](GUI::CBase* base) {
668
+ // when check control change => update value
669
+ value->addObserver (onChange, true );
670
+ check->OnChanged = [value, check, observer = onChange ](GUI::CBase* base) {
687
671
value->set (check->getToggle ());
688
672
value->notify (observer);
689
673
};
690
-
691
- // hold observer to release later
692
- group->Observer .push_back (observer);
693
674
}
694
675
695
676
boxLayout->endVertical ();
@@ -708,6 +689,8 @@ namespace Skylicht
708
689
comboBox->setListValue (listValue);
709
690
710
691
CObserver* onChange = new CObserver ();
692
+
693
+ // when check value change => update ui
711
694
onChange->Notify = [me = onChange, target = comboBox](ISubject* subject, IObserver* from)
712
695
{
713
696
if (from != me)
@@ -717,9 +700,9 @@ namespace Skylicht
717
700
}
718
701
};
719
702
720
- // when combobox change
721
- IObserver* observer = value->addObserver (onChange);
722
- comboBox->OnChanged = [value, comboBox, observer](GUI::CBase* base)
703
+ // when combobox change => update value
704
+ value->addObserver (onChange, true );
705
+ comboBox->OnChanged = [value, comboBox, observer = onChange ](GUI::CBase* base)
723
706
{
724
707
value->set (comboBox->getLabel ());
725
708
value->notify (observer);
@@ -743,6 +726,8 @@ namespace Skylicht
743
726
slider->setValue (value->get (), min, max, false );
744
727
745
728
CObserver* onChange = new CObserver ();
729
+
730
+ // when check value change => update ui
746
731
onChange->Notify = [me = onChange, target = slider](ISubject* subject, IObserver* from)
747
732
{
748
733
if (from != me)
@@ -752,9 +737,9 @@ namespace Skylicht
752
737
}
753
738
};
754
739
755
- // when slider change
756
- IObserver* observer = value->addObserver (onChange);
757
- slider->OnTextChanged = [value, slider, observer](GUI::CBase* base) {
740
+ // when slider change => update value
741
+ value->addObserver (onChange, true );
742
+ slider->OnTextChanged = [value, slider, observer = onChange ](GUI::CBase* base) {
758
743
value->set (slider->getValue ());
759
744
value->notify (observer);
760
745
};
@@ -775,6 +760,7 @@ namespace Skylicht
775
760
GUI::CColorPicker* colorPicker = new GUI::CColorPicker (layout);
776
761
colorPicker->setColor (GUI::SGUIColor (c.getAlpha (), c.getRed (), c.getGreen (), c.getBlue ()));
777
762
763
+ // when check value change => update ui
778
764
CObserver* onChange = new CObserver ();
779
765
onChange->Notify = [me = onChange, target = colorPicker](ISubject* subject, IObserver* from)
780
766
{
@@ -786,9 +772,9 @@ namespace Skylicht
786
772
}
787
773
};
788
774
789
- // when color pick change
790
- IObserver* observer = value->addObserver (onChange);
791
- colorPicker->OnChanged = [value, colorPicker, observer](GUI::CBase* base) {
775
+ // when color pick change => update value
776
+ value->addObserver (onChange, true );
777
+ colorPicker->OnChanged = [value, colorPicker, observer = onChange ](GUI::CBase* base) {
792
778
const GUI::SGUIColor& guiColor = colorPicker->getColor ();
793
779
value->set (SColor (guiColor.A , guiColor.R , guiColor.G , guiColor.B ));
794
780
value->notify (observer);
@@ -853,6 +839,7 @@ namespace Skylicht
853
839
return false ;
854
840
};
855
841
842
+ // when check value change => update ui
856
843
CObserver* onChange = new CObserver ();
857
844
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
858
845
{
@@ -864,16 +851,17 @@ namespace Skylicht
864
851
target->setString (L" None" );
865
852
};
866
853
867
- IObserver* observer = value->addObserver (onChange);
868
- input->OnDrop = [s = value, obs = observer](GUI::SDragDropPackage* data, float mouseX, float mouseY)
854
+ // when ui update => change value
855
+ value->addObserver (onChange, true );
856
+ input->OnDrop = [s = value, observer = onChange](GUI::SDragDropPackage* data, float mouseX, float mouseY)
869
857
{
870
858
if (data->Name == " ListFSItem" )
871
859
{
872
860
GUI::CListRowItem* rowItem = (GUI::CListRowItem*)data->UserData ;
873
861
std::string path = rowItem->getTagString ();
874
862
path = CAssetManager::getInstance ()->getShortPath (path.c_str ());
875
863
s->set (path);
876
- s->notify (obs );
864
+ s->notify (observer );
877
865
}
878
866
};
879
867
boxLayout->endVertical ();
@@ -922,6 +910,7 @@ namespace Skylicht
922
910
return false ;
923
911
};
924
912
913
+ // when check value change => update ui
925
914
CObserver* onChange = new CObserver ();
926
915
onChange->Notify = [me = onChange, target = input](ISubject* subject, IObserver* from)
927
916
{
@@ -933,24 +922,24 @@ namespace Skylicht
933
922
target->setString (L" None" );
934
923
};
935
924
936
- IObserver* observer = value->addObserver (onChange);
937
- input->OnDrop = [s = value, obs = observer ](GUI::SDragDropPackage* data, float mouseX, float mouseY)
925
+ value->addObserver (onChange, true );
926
+ input->OnDrop = [s = value, observer = onChange ](GUI::SDragDropPackage* data, float mouseX, float mouseY)
938
927
{
939
928
if (data->Name == " ListFSItem" )
940
929
{
941
930
GUI::CListRowItem* rowItem = (GUI::CListRowItem*)data->UserData ;
942
931
std::string path = rowItem->getTagString ();
943
932
path = CAssetManager::getInstance ()->getShortPath (path.c_str ());
944
933
s->set (path);
945
- s->notify (obs );
934
+ s->notify (observer );
946
935
}
947
936
else if (data->Name == " TreeFSItem" )
948
937
{
949
938
GUI::CTreeNode* node = (GUI::CTreeNode*)data->UserData ;
950
939
std::string path = node->getTagString ();
951
940
path = CAssetManager::getInstance ()->getShortPath (path.c_str ());
952
941
s->set (path);
953
- s->notify (obs );
942
+ s->notify (observer );
954
943
}
955
944
};
956
945
boxLayout->endVertical ();
0 commit comments