-
Notifications
You must be signed in to change notification settings - Fork 1
/
TODO.txt
1650 lines (1547 loc) · 85.9 KB
/
TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
----
Hi, I'm been working on my terminal based unicode diagram editor [tinytools](https://github.com/minimapletinytools/tinytools-vty) for about 4 years now 😱. It's been ready to release for some time now but I keep putting it off and adding more features instead! But no more!!
I'm a complete potato when it comes to OSS release/distribution/promotion. Looking for tips/suggestions on other ways to distribute this app.
At the very least, I'll put a binary on github, and upload the latest to cabal, but I'd like it to be easier for folks to use the app.
I've done all my development on mac, so homebrew is a logical choice, however I'm a little concerned of the super long build times as well as the dependency on [https://hackage.haskell.org/package/text-icu](https://hackage.haskell.org/package/text-icu) which cabal often struggles to find.
I haven't thought about windows and linux but I'd like to release there as well.
And I haven't a clue on how to promote this besides making random reddit posts like this one. The software excels in its niche IMO so I expect it to ultimately promote itself for people who care, but I'd love to help push it along.
Thanks in advance.
-----
pet childhood sportsteam
ghc core notes
ghc options
-ddump-to-file
- dump to file
-ddump-simpl
- dump core, you have to find the .dump-simpl file
-dsuppress-coercions
-dsuppress-module-prefixes
-dsuppress-type-applications
-above 3 removes stuff we don't care about
-ddump-ds
-dumps desugar
-dverbose-core2core
-dumps everything (includng all optimization stages)
-drule-check = <rule name>
-----
to enable static linking:
-optl-static -optl-pthread
----------
to get call stacks, first build with:
stack build --profile
then run with:
stack exec --profile -- potato-flow-vty-exe +RTS -xc
stack exec -- potato-flow-vty-exe mycommandlineargs
stack test --test-arguments=' --match "LineDrawer"' --file-watch
[![CircleCI](https://circleci.com/gh/pdlla/potato-flow.svg?style=svg)](https://circleci.com/gh/pdlla/potato-flow)
cabal new-haddock --haddock-for-hackage
cabal test --test-options='--match "/Potato.Flow.Controller.Manipulator.Pan"'
cabal test --test-options='--match "/Potato.Flow.Controller.Manipulator.Layers/Layers/drag_folder2_test"'
cabal run tinytools -- -help
----
nix-shell --packages cabal2nix --run "cabal2nix ." > default.nix
nix-shell --attr tinytools release.nix
----------
normal
ø×Ø⁐₪
↺↻
WIDE
😱
⧬⧭
⨀
⨂
🔓🔒
🔏🔐
📁
📂
👁️
🙈
:: glyph widget spec ::
-unicode char / full art
-should single unicode be separate or no?
-for unicode, how do handle grapheme clusters?
-maybe just encourage folks to use OS-level picker instead?
-allow option to embed in definition file if height is only 1
-toggle option to search for only single char vs art
-separate file for single char glyph database maybe?
character_glpyhs
:: swatch spec ::
:: FUTURE FEATURES
IGNORE-grapheme cluster
-terminals don't support it but browser will
-for terminals, you need grapheme cluster detection to remove those chars
-you may as well add unicode detections as well
-need to update style types to take Text instead of Char to support grapheme clusters
DONE-EMOJIS
DONE-moveable line anchors
DONE-adjustable attachment spec
-support more shapes
-diamond
-ellipse
-probably needs now styling classes, these should probably be presentsonly
-straight line tool spec
-same as autoline (with midpoints) but has fancy line rendering straight lines
-line style picker
-unicode character picker
-lives at params level
-must have a way to paste into text box
-clipart picker
-can choose to generate as text box or free art box
-create link with orignal until modify?
-format for user submitted clipart (prob just read from text file)
-swatches
-fancy type spec
-property of text box, allow you to enter fancy fonts
-other features
-per character width (already a property of TextZipper but you need to pass it in as a function and test it...)
-kerning in general (or just have user use manual spaces)
-height adjustment (some characters go over char box)
-overflow box or crop (some characters go over char box
-need to expand render box
-font data type
-bonus, it seme some fonts have speical rules for renfdering where the font overlaps
-font picker...
-segment style multipoint line spec
-scripting and extensions lol
-background pattern fills
-crop or stop at end of last repeating pattern
-would be cool to have a way to manipulate multiple line midpoints at the same time
-but really you should just switch to segment based midpoints instead..?
-multi-goat
-multi-shepard
-no partial owls!
-except when converting remote changes to llamas
:: MDI REFACTOR NOTES 7/2023
IGNORE!!-get rid of PFWorkspace first
DONE-get rid of lastChanges
YES-or do we keep it? could be nic eplace to store preview list and local llama stack
DONE-handlers should return preview action
-review pRefreshHandler as it will now take update cations
-preview start, preview continue, preview commit, preview cancel
-preview continue is prob unecessary, sending another preview start should implicitly cancel the last preview, but having it as an explicit state might still be nice
-get rid of undofirst stuff
-goat changes
-goat has preview list for each user
DONE-goat has commit preview operation
DONE-you can just directly preview commit to apply an operation without having preview I guess, or have a separate function to apply operation directly which might help with organization
-preview commit could fail
-a client might try and commit a preview that was invalidated
-goat needs to be able to apply several state changes,
-do I need to make any changes to the SuperOwlChanges stuff?
-probably union them all should just be fine, might have some useless info (i.e. do/undo one operation would leave an entry but didn't make any changes) in it but that's not a big deal.
-state changes
-state needs to track preview changes to roll them back and reapply them when applying remote finalized changes
-state needs to track pending (commit but not finaized) changes i.e. CLIENT ROLLBACK so that commit operations can be applied locally and then sent to the network, but these might get overidden by the server
-but this allows you to previwe->apply many operations before receiving updates so this is just better.
-state needs to track change id/# (no # for preview changes)
-edge cases
-handler in middle of preview operation and state update (i.e. refreshing an active handler)
-in this case the refresh might return a preview cancel operation
-conflicting previews
-attaching to something that gets deleted
-we do support attachment to deleted elt right now at the state level, not sure if it's supported at the handler level
-how to handler layers hide/lock?
-note these are not managed as llama actions weird!
-prob easiest just to cancel any previews if anything gets lock/hidden, but maybe we can try and allow the preivew operation to complete, not sure if this is already done or super hard, could eb either!
-however for undo/redo should be able to bypass
-llamastack updates
-undo redo might fail if REltId does not exist.
-note that non-set llama changes do not contain a copy of the element so we can't just recreate it.
-but maybe we can store a copy of the entire element to adjust for these cases?
-but IMO maybe easier just to fail the whole do/undo operation in this case
-gosh sure sucks if collaborator deletes a whole bunch of stuff though?
-do we care that we are undo/redo overriding other peoples changes?
-should be OK with fine grained changes
-will commute op1 op2
-note that if op1 and op2 commute, we hope/expect op1 op2' to commute where op2' is a continuation of op2. But this isn't even strictly necessary and pRefreshHandler should just cancel the operation if it does not commute with some newly added operation
-need to create fine grain updaters rather than ones that set the entire owl to allow for better commuting
-in particular
-we don't want property updates to conflict with transform updates
-we don't want layer hirerachy changes to conflict with other operations
-confirm if PFCMove/add/delete is ok
-the CTag PFCmd stuff needs to be redone as well as we want "set" style as oppose to deltas which don't play well if other changes had been applied on top of th particular fine grained change
-The SLlama_Set stuff needs to be rewritten. Make like a SLlama_Update type deeal
-need to build multi-preview store inside of goat
-???what happens when 2 previews conflict???
-one person should just have their action cancelled I guess
-sucks that you can lock out the entire scene by drag dropping everything
-soft locking elements that are being updated by other users?
-we don't want to block selection because that would suck and we don't want to block params/layers update from other move operations
-so I guess it's really just bblocking drag operations if someone else is dragging anything in our selection?
-highlight other user selection please
-oof, need to make selection rendering a list??
-maybe we can add color to the rendering? And combine it all selection into 1 renderer??
-nah, probbaly better just to have separate renderer for each person
-Maybe there can be fine grain change history that lets you selectively undo and see who made what changes, that would be pretty cool!!!!
-note the main issue here is that if there are a sequence of changes to the same fine-grained thing, it's weird to undo a change from a while ago, but maybe that's just how it is.
-could store this is controller meta? Not really controller meta anymore though, so maybe create a separate object..
-I mean PFWorkspace but I think it's better to store it side by side...
-we do expect the state to be reconstructable from the change log so maybe it make sense to store it together with the state somehow?
-no conflict REltId generator
-easiest just to go to 128 or 256 bits I guess....
-ordering service
-preview -> Goat -> State
-commit -> ordering service -> Goat -> State (rollback previews, apply commit change, apply reviews)
-note this isn't e
-consensus -> ordering service -> finalize commit -> Goat -> State (rollback previews, rollback commit state, apply finalized changes, apply unfinalized commits, apply previews)
-consensus
-just do hardcoded singel authority model for now, this also works well with the cloud model
-need something sophisticated for P2P model :(, would be cool to do PBFT/PaLa but TBH raft is prob best since its tursted/permissioned
-does ordering service need to know about state/non commuting changes
-no it doesn't, goat can just toss out failed changes
:: SHAPE MVP
DONE-generalize object and manipulator refactor likely
DONE-generalize text area
-return text area box
-in the future, it could return per line widths :O
DONE-generalize line connection points
-connection points :: [(x,y)]
-drag_project :: (x,y) -> Maybe (x,y)
IGNORE-generalize Box handler bulk maniplutaion ???
-you need to generalize this for lines too
DONE-shape selt
DONE-support label and text area
-make BoxLabelHandler generic to shapes
-make BoxTextHandler generic to shapes
-finish ShapeModifyHandler when you do the above 2 thing
IGNORE-refactor ShapeDef please...
DONE-connect fully and deprecate BoxLabel/TextHandler
-you can still keep BoxHandler for now as it does multi-select for you
DONE-make poopy ellipse drawer
DONE-add UTs
-add text area to ellipse, maybe add text label?
-make generic shape drawer
-add shape selection menu
:: shape tool spec
-can we generalize box and boxtext handlers to support any shape
-I think you need to consider refactoring box handler whichever way
-NO I think you can just keep overloading...
-parameterize the following
-transform box -> shape -> transform box (when resizing)
-shape -> Maybe text label position
-shape -> Maybe text area
-shape -> starting attachment position
-shape -> attachement projection function
-shape -> drawing function
-tool for creating non box shapes, must support resizing
-allow snapping to only valid sizes?
-however, should it remember what inbetween size it's at (when resizing multiple things) or no?
-design generic format for doing shapes so easy to add custom shapes?
-e.g. shapes
-triangle
-diamond
-hexagon
-octagon
-circle/ellipse
-3d cube (this might be a different handler? requires a 3rd degree of adjustment (could use box handler for creation, and separate handler for modify))
-generic shape render function
-overlay square grid of shape paremeter
-compute entry/exit on each square and assume line is straight
-lookup closest unicode character matching the above
-secondary tools in tools
-[(s)hape] selecting shows secondary list of choices
-some shapes maybe have special handlers that get activated after creation (creation is always using BoxHandler) e.g. triangle with moveable corners
::HIGH PRIORITY::
-BUG double: ()
STDERR
tinytools: Maybe.fromJust: Nothing
CallStack (from HasCallStack):
error, called at libraries/base/Data/Maybe.hs:150:21 in base:Data.Maybe
fromJust, called at src/Potato/Flow/Owl.hs:627:24 in tnytls-0.1.0.7-8994dabb:Potato.Flow.Owl
repro: have folder with abunhc of element, select folder, copy paste folder (into itself, which is already little weird) and then drag inner folder outside of folder
-clean unused dependencies
-figure out how to run dependency detector
-should be more intuitive to get a 1 sided line
-probably do [x] start | [x] end
-default line can be one sided maybe?
-make flip button more clear
-layers improvements
-shift select in layers please ;__;
-selecting multiple items and hitting new folder should put those items in folder maybe
::MID PRIORITY
-test/use PreRender stuff
-if both target and source of line is moved, then move midpoints as well
-fix (search comment) -- THE REASON YOU DID THIS IS TO PREVENT FULLY ATTACHED LINES FROM BEING MOVED
-in order to fix this, you need to change do_deleteElts to update position of attached lines which poses several issues:
-need attachmentMap to do this optimally and it's currently stored in goatState
-when you undo the delete, you ideally would set the line endpoint positions back to their original values (even if it's meaningless)
-so you probably need to move delete into a llama operation where you can cache the original values in the returned undo operaiton
-file stuff
-maybe highlight relevant files instead of * in file explorer
-or just don't show anything that's not relevant...
-UTs
DONE-popupSaveBeforeExit
DONE-popupOpenWindow
-doubleClick
DONE-waitForSecondAfterFirst (move to reflex-potatoes)
DONE-add double click support to file explorer
-need to hook into IO time stuff
-you should be able to select lines where there is text (this is in particular annoying when you try and move several things at once at you can't click on line label to move)
-move all serializable types into Snake for versioning
-folder stuff
-maybe some day you want to implement folder select vs real select
-would be cool to have the folder select OR real select option since folder select might be too much for terminal
-BUG/FEATURE when you select a folder and it auto selects children, you can't click and drag the children
-empty folders should not be expandable? (set to expanded by default)
-BUG click release on lock/hide/collapse on selected element should not deselect
-you might want to consider disallowing selection of locked stuff from folders (directly NOT ok, via parents OK)
-maybe consider doing shift select and ctrl select (to replaec current shift select behavior)
-not sure what happens when you shift select past a folder
-proper configurable theme in Main.hs
-rename
-OwlPFWorkspace -> OwlWorkspace
-OwlPFState -> OwlState
-upgrading ghc somehow broke unicode test
-9.6 fails but 9.2 OK
-did scroll wheel in finder window stop working??
-yes it's a fcous issue ,the mouse input does'nt get sent to the scroll wheel pane, you ned to pass it in if you want to fix it...
-undo_move is probably not very multi-user friendly, you should rewrite using do_move logic
-(so remove all children recursively and then add them back in)
-(this will allow undo_move to work even if some of those childrens or parents have since been deleted I guess)
-shepard P2
-you need to add a random generator to GoatState with sufficient entropy to generate Uuids
-add shepard IDs
-add shift ID
-consider making a `State GoatState` Monad...
-deal with the undofirstsituation
-rename to mouseACtive?
-just get rid of it and instead check if there is an associated local preview?)
-performance pass
-https://medium.com/e-bot7-tech/improving-performance-of-your-haskell-code-with-profiteur-8d2e025b6779
-REFACTOR split goat mouse intput into 2 commands, one for layer and one for canvas
-BUG resizing unattached lines does not work
-BUG
-now you get stuff like this, there's no arrow when there should be one, that's because you messed with determineSeparationForAttachment to not have the extra 1 offset
-really there just a bunch of edge cases here that you need to deeal with based on arrow/now arrow and whether the attachment points are in 1 line or not etc :(
║╚═══════════════════════╝
║ ╚╗
║ v
║╔OwlPFWor═══════════════╗
-maybe make styles references instead of stored per elt
-do label position adjustment when adding midpoints
-text zipper
-you should just rewrite text zipper and add select support..
-BUG wrapping when single word (when word wrapping wont fit anymore) exceeds max width does not seem to handle wide chars correctly (seems to count them as 4 instead of 2?)
-cursor up/down should work with display lines
-right click menu support (send forward/backwards) (do this is tinytools-vty, make sure inputs get captured ug)
-opening file with hidden elements does not hide stuff..
-someway to diff 2 objects for debugging
-you can use aeson diff I guess...
-BUG still getting ? at double back midpoints (the real issue is you have double back midpoints)
-prob just ignore until you do lucid style lines?
-LineDrawer.hs midpoint anchor rendering will double back on itself, you need to force the attach direction to change based on neighbor rather than use AL_ANY
-finish substract lbox (-- TODO crop away mleft/mright from mtop'/mbot')
::????? PRIORITY
-switch layers to use tree (you have a branch for this)
-allow new lines in line labels :O
-BUG foldgoatfn gets called 3 times for each event wtf 😭 (probably due to holdUniqDyns I guess)
-you should fix cuz it makes debugging hard...
-you got it down to 2 :O
-BUG there are still some EoL cursor bugs with unicode characters
-BUG some prelude.!! error somewher ;__;
-should be able to rename elements for you based on first entered text maybe (ugh)
-fix
-- TODO this should be r' not a FIX ME why is stuff even working???
-- TODO there is a bug in cartRotationReflection_apply/cartRotationReflection_invert_apply where we don't actually apply the rotation but somehow this only works with that bug... Maybe the rotations cancel out?
-BUG selecting severals items and moving takes forever :(
-can't repro anymore? at least not from opening a file, maybe it's due to a leak?
-also selecting via folders and moving didn't seem to cause this slowdown
-charwidth needs to be passed in rather than rely on global
-consider using LineAnchorsForRender/sAutoLine_to_lineAnchorsForRenderList for cache instead
-add mouse hover support (for when you do web port)
-FEATURE info/statusbar/output area (right side?)
-TESTS TO ADD
-create box, turn to text box, add some text, turn to regular box
-drag parent folder into a child folder and ensure it does not work
-create folder with children, select folder, attempt to drag via children (doesn't work right now)
-figure out how to change folders into groups for auto-pathing group support
-is it just a folder setting?
-FEATURE options menu
-could you do style defaults in this menu too?
-like ideally following the same model you did in Params.hs....
-FEATURE add anchor repositioning dragging
-add anchor positioning var first
-create interface for dragging anchors in line handler
-maybe design way to directly attach at offset position?
-line anchors for render could highlight the entire box and flash the center point?
-you probably want options to disable this stuff
-insert vs overwrite option for freeform text
-you need some kind of options object to go along side of _setPotatoDefaultParameters_sBoxType
DONE/IGNORE-GHA build and release
DONE/IGNORE-do linux and windoze build
DONE/IGNORE-make a video
DONE-line anchor handlers should not pop up until you start dragging (except in creation mode where they should show from the get go)
IGNORE LOL-get it working on breew
IGNORE-update tutorial file?
DONE/FAIL-upgrade xcode or something to get brew working??
DONE- --tutorial to open tutorial otherwise empty by defaultcd
IGNORE/FAIL/DONE-LHRESS_ChildSelected graphic broken during drag and just in general
-make a deep chain of folders, then in one of the folders have several children, selecting that folder will cause the folder just above it not to be LHRESS_ChildSelected
DONE-BUG asserting `r = fmap (\(i, sall) -> (internal_getSAutoLineLabelPosition (larlist `debugBangBang` _sAutoLineLabel_index sall) sal sall, i, sall)) sortedlls`
-repro is to make a line label with midpoint, add text between midpoint and thene delete the midpoint in either direction
DONE/IGNORE?-line labels still cropping on right side
IGNORE-add render handler name property so you know what the render handler is from its renderhandleroutput
IGNORE-add a visual anchor for the box label so you know you can add one easily
DONE-add upper bounds to all packages
DONE-BUG `invalid = error "toggling of LHS_XXX_InheritTrue elements disallowed"`
-repro is make a chain of folders, select one in the middle and lock
-the issue is we prevent locking/hiding if parent is locked/hidden but not if parents parent etc is
DONE-BUG textarea handler crashes
DONE/IGNORE-add box border toggle
IGONRE-TESTING check for leaks again
DONE-BUG after renaming folder, clicking on canvas pane does not finalize the folder rename action until you click back on the layers pane
-you need some kind of click off pane reset type action to handler
-can you tie this into graceful handling of bad mouse states?
DONE-make new elts get created inside selected folder rather than above it?
DONE-you somehow hit assert `Just (False, _) -> assert (not (pIsHandlerActive next_handler')) $ (refreshedHandler,refreshedLayersHandler) where`
-from playing around with line arrows clikcing back and forth...
DONE-move over to minimaple account?
IGNORE-I tihnk it would be better for SEltDrawer to be created based on an OwlTree rather than return a function that takes an owlTree_addMiniOwlTree
DONE/IGNORE-pregenerate unicode and figure out how to distribute using nix?
IGNORE-Line presets sholud be for start/end
IGNORE-BUG you sometimes hit this assert, need repro
-Just (False, _) -> assert (not (pIsHandlerActive next_handler')) $ (refreshedHandler,refreshedLayersHandler) where
DONE-BUG return key in layers during rename will act like "tab" taking you to params, don't do this
DONE-warning cleanup
DONE-hide stuff
-moving an element into a hidden folder does not hide it right away (ignore this for release)
-this is becaues it gets added to superowlchanges
-moving a hidden folder (in folder hierarchy) shows it (maybe cuz it's selected ,but it does'nt look selected?? and also deselecitng doesn't hide it)
-this is becaues it gets added to superowlchanges
DONE-layers improvements
DONE-when dragging into a folder, the | should then L to the element being moved
DONE-currently not possible to drag the last element in folder outside of that folder if there's something below it
-the trick is if you drag the last element in a folder to the spot below it, you need exception case to move it outside of the folder rather than as the next sibling to itself since that doesn't do anything
DONE-currently not possible to drag below a folder if the folder is thet last sibling :(
-not sure if there's a way around this :(
DONE-DO THIS you might want to consider doing the thing where dragging to the right side of a folder puts it underneath, otherwise it's always a SiblingPosition
DONE-selecting multiple items in layers and click on on should select that one item, but right now it gose into rename mode
DONE/IGNORE-BUG translating lines should translate midpoints too
DONE-text box option that auto goes into edit text box
DONE-render testing utilities
DONE-empty text zipper should return '' span with cursor
-without this, empty cells don't show the cursor...
-NO this is not the issue :()
DONE-clicking on params then clikcing over to layers does not cause focus to go away on params??
DONE-fix return navigation in params (you disabled it because it was breaking return to rename in layers)
-you can/should probably add focusID to paramswidgetfn NBD
DONE-hitting assert checkvalid = assert (pIsHandlerActive canvasHandler /= HAS_Active_Mouse && pIsHandlerActive layersHandler /= HAS_Active_Mouse)
-repro is pan, resive canvas in params without confirming (pressing tab or cilkcing somewhere in params), and then click on canvas area
-you can also repro by pan, resive canvas in params, and confirm by cilkcing within params
-another repro is to pan ,then hit "new"
DONE-style input not support ' ' correctly
DONE-preset style should have ' ' as default fill char, right now it's empty
DONE-if you click on the style params section, it forces the fill char to be space and not empty
DONE-hitting assert when go into text box, type "ee"+return and then click on layers...
DONE-you have a perma broken tt file (see attached)
-rerpo is to pan and save, and open. initial render canvas doesn't account for pan so later tries to render out of bounds inside vty
DONE-BUG cursor not showing at very end of canvas size text entry boxes, also happens in filename widget and justall text boxes
-displayLinesWithAlignment does not add trailingcursor I think
DONE-BUG remove `checkvalid = assert (pIsHandlerActive canvasHandler /= HAS_Active_Mouse && pIsHandlerActive layersHandler /= HAS_Active_Mouse)`
-repro is change canvas size and click in canvas area to confirm
DONE-BUG figure out why you are hiting `in assert (_goatState_focusedArea goatState == GoatFocusedArea_Layers) $ goatState_afterAction `
-repro is to rename a folder, click canvas, click back to folder
DONE-also add a UT for this..
DONE-make screenshot
DONE-BUG resize window after panning is VERY BROKEN
DONE-add a UT for this
DONE-hardcode the xterm text width file?
DONE-make a regular tutorial doc
DONE-remove potato references :(
DONE-get rid of text box tool
IGNORE-fix box converting to text box
DONE-add a UT for this...
DONE-return key while renaming layers should confirm it
DONE- more style presets please (singl eline ascii box)
DONE-cursor dosen't show up at end of layers (probably sam eissu ewith the '' cursor tag from zippers)
DONE-when you do new file ,you don't los ethe file reference from previous session LOL <___< fuck
DONE-add --version command
DONE-go over nix pills
DONE-fix PanSpec...
DONE-enable/disable widechar/grapheme cluster configs
DONE-YOU HAVE 2 WIP CHANGES RIGHT NOW OOPS
DONE-BOX CONSTRAINTS
-broken because the constrainDeltaLBox function is applied to post preview state
-you tried to fix this by setting box size instead, but you still have the same problem
-you can fix by tracking pre-preview state and passing that in as well, but is there a better way?
-I guess you could track the previous transform operation OR mouse position and add that back?
IGNORE-FOLDER DRAG BASED ON X POSITION (broken because you need to handale recursive depth or something like that I'm actually not sure...)
-see branch layerdragbyposition
DONE-BUG inverting boxes is broken (anchors move wrong corners)
-I thought you disallowed inverted boxes? You definitely did, why is this OK again?
DONE-BUG if you undo a folder move from outside to inside another folder, it breaks, I think it's because the depth for the item inside the folder being moved is not being set correctly
DONE/IGNORE-figure out what to do to generate default term width file
-also improve instructions, maybe make term width file a option rather than it's own binary!
DONE-BUG you somehow hit `assert nochildrenifaddingfolder`
-drag folder somewhere and then undo
DONE-properyl return Preview_Commit actions where appropriate
-BoxHandler creation, move
-LineHandler creation, endpoint/midpoint/label move
DONE-make the welcome pop up scrollable
DONE-delete CartLine
IGNORE-introduce "cancelHandler" function
-why would I want to do this?
-gets called from GoatWidget when some higher order operation cancels or replaces the handler
-must distinguish between cases where a handler is replaces vs when a new one gets returned by previous handler
-can this be somehow combined with reset handler?
-exsiting ways ah andler can be canceled
-mousedrag_cancel (actually dosen't cancel, jsut resets the handler so no)
-you get lazy sometimes and just return no handler such that Goat regenerates the handler from selsection and this will now become a cancel
-keyboard escape
-click outside of handler capture area which causes goat to regenrate a new selection handler
-pReseteHandler may clear the handler
-is this what happens when a you delete an object in the layers?
:: Preview Operations Mini Refactor 8/2023
DONE-get rid of controllerswithid->llama->controllerswithid circular nonsense
DONE-in particular, get rid of Llama->ControllersWithId, we work with Llama's directly now!
DONE-remove PFCmd stuff from WSEevent
-this is hard because of usage of lastState in OwlWorkspace. We need a notion of lastState which is state before any preview is applied (or better just the local preview)
-may you can unapply the local preview to generate last state, requires assumption that local preview can always be unapplied which I'm not sure is true or not...
-actually just carry around state before any previews applied? But will that break any assupmtions? Maybe we really just want only the local preview unapplied
-or does this lastState stuff even matter anymore if you use set operations
-I don't think it does, but for cerating new elts you need to call owlPFState_nextId to get the id, but we will have a state-independent uuid generation function now?
DONE-goat refactor warmup
DONE-get rid of GoatCmdTempOutput
DONE-do goatCmd endo refactor, separate routines for each GoatCmd
IGNORE-after moving everything to endo style, you'll need to find a new home for
`goatState = goatState' { _goatState_unbrokenInput = "" }`
-probably add some common routine to every endo fn I guess
DONE-BUG selecting does not auto expand folders
DONE-BUG hiding layers causes crash because broadphase isn't being updated
DONE-split hoa_layers into 2 separate things
DONE-add processHandlerOutput :: PotatoHandlerOutput -> GoatState -> GoatState
DONE-refactor out goat update routines in foldGoatFn
DONE-set selection
DONE-set pan
DONE-update layers state
DONE-apply event
DONE-render / render selection
DONE-update selection
DONE-set handler from selection
DONE-refresh Handler
-this is tricky because we this may cause the handler to send a cancel preview operation which would normally have us refreshing the handler again
-I think you want to reset the handler sooner in the flow (before set handler from selection)
IGNORE-refactor out layers handler in foldGoatFn
DONE-switch HOA_DEPRECATED_PFEvent to HOA_Preview
-remember to do Preview_Commit as needed
-or instead we do the thing where the next Preview_Start commits the last preview?
-no I think you want explicit commits
-actually I think you don't want explicit commits, or make it optional. It's kind of awkward to cancel in some places e.g. keyboard movement
-we could cancel when they leave the handler which would require an additional cancel handler function and would not capture cases where user just went AFK with the handler after making some keyboard changes
DONE-refactor PotatoHandlerOutput to be mutually exclusive
DONE-create preview list (I guess you can just put it in PFWorkspace for now...)
-Map UserKey (Maybe LLama)
-this isn't quite right, because the previews are applied/unapplied in order. so it should probably just be [(UserKey, Llama)]
-question should we store local preview separately and always apply it last/first?
DONE-assert when starting a new handler that there is no local preview action
DONE-handler -> preview -> goat -> pfworkspace -> unapply old previews by that user -> create new state/preview list
IGNORE-pRefreshHandler needs to return an output action and the only possible output is HOA_Preview PreviewCancel (or HOA_Nothing for the layers handler)
-actually maybe it's not unreasonable just to cancel the preview always
DONE-implement PO_CommitAndStart
IGNORE-do PO_Commit on mouse up in all the handlers
DONE-I think you need switching handlers to do a commit as not all handlers have a reliable point to commit
IGNORE-replace pIsHandlerActive with just checking if there is a live preview opeartion or not
-no I think you need/want both, there are some handlers that are active but don't do Previews
-maybe default implementation of pIsHandlerActive could check for a live preview? Can/should previews be associated with handlers for error checking purposes?
-maybe give handlers an Id
IGNORE-I think you may want explicit onReplaceHandler operation. Not every handler wants to commit their changes when they get replaced
-specifically, there's a convert to text box preview operation when you enter text mode on a non-text box, we want a preview to convert it to a text box, and if this handler gets replaced, we don't want to commit the change
-perhaps you can just have a commitOnReplace :: Bool function, that's probably easiest
:: TODO 7/2023
DONE-BUG toggle expand/hide/lock in layers should not alter selection (right now it deselects)
DONE-tests
DONE-endSetFocusedArea test, start renamin,g change focus, ensure rename happened
DONE-auto expand folders after selection
DONE-hide/lock layers and check selection works as expected
DONE-warning cleanup
DONE-figure out why scrolling in file explorer is hecka broken
-I don't think there's anything wrong with code, scrolling freezes input for some reason in vty on mac terminal :|
IGNORE/DONE?-make sure it's not possible to open up a pop up while mouse dragging (or you will break mouse drag pane2 stuff again)
-it's definitely possible to do that but nothing seemed to break???
DONE-auto expand folder after dragging into it
DONE-do proper folder position
DONE-update README.md with usage instructions
DONE-move over to minimaple account
DONE-cursor rendering is broke if there are multiple new lines
DONE-BUG can't enter multiple new lines into text box
-seems to be a bug in TextZipper
DONE-BUG click on eol in text box is kind of broken in general[]
-doesn't always take you to the end
-sometimes takes you to begining of next line (it happened to me when you click the same place past EOL twice in a row)
-this is probably because there is a bug with how you handle the cursor/selected character
DONE-BUG cilcking on auto wrapped lines after the first one does not work
DONE-gotolineposition broken when word is wrapped to next line (still does it based on character level wrapping for some reason)
DONE-disable or fix circleci
DONE-BUG index out of bounds somwhere with wide chars (pretty sure it's in ttvty but may be in zipper)
DONE-add switch start/end button to line params?
DONE/FAIL-make tutorial file, I think you have everythingy ou need now!!!
DONE-finish line endpoint unit tests
DONE-get rid of textbox tools
DONEish-bxoes should be text boxes by default, remove the text tool
-click selected non text box will convert it to text box and clear all text
-it's alittle weird because you singel click text box right now to end text
-toggling text box will behave as before (preserving text)
DONE-tutorial...
DONE-draggable anchors
DONE-change this so it tracks box we were attached to at the beggining for the duration of the AutoLineEndPointHandler drag such that you can detach and reattach
DONE-you can now have lines coming from the same side of the box so you need to handle the both lines in same direction case
DONE-BUG some of the anchors don't match with where the line gets drawn to
-I think basically you need to rewrite a bunch of the linedrawer methods which assumed anchors started from the middle? ug?
DONE-project ratio calculation seems to project to a point that's off by 1 sometimes
-might be due to offset border nonsense?
DONE-break ties use mpreval in projectAttach
DONE-flip arrow button
IGNORE-probbaly remove text ICU dependency :\
DONE-BUG
-this is due to (hsep, vsep) = determineSeparationForAttachment (lbx1, (1,1,1,1)) (lbx2, (1,1,1,1))
╔═════════════╗
║╔GoatState═══║═══════════╗
║║ ║ ║
║║ ║ ║
║║ ║ ║
║║ ║ ║
║╚════════════║═══════════╝
║ ║║
║ ║v
║╔OwlPFWorksp║ce══════════╗
║║ ║ ║
║║ ║ ║
║║ ║ ║
║║ ║ ║
║╚═══════════║════════════╝
╚════════════╝
DONE-strip everything and upload to hackage
DONE-switch to cabal?
-prob need to learn nix first ;__;
DONE/IGNORE-update ChangeLog.md
DONE-empty canvas should have default size of 100x100 not 1x1
DONE-proper command line parsing with --help option
DONE-add version # to serialization (how?)
DONE/IGNORE-add beta title
DONE-probably want pop up error when you try and open a file that is invalid
DONE-add versioning to serialized file
DONE-properly disable grapheme clusters
DONE-disable unicode wide chars too ;__;
DONE-prob best to do this at goat keyboard input processing level
-something like makeInputLessFun :: KeyboardInput -> KeyboardInput
DONE-hook up configuration
DONE-selection rendering of widechars is incorrect
DONE-wide char rendering
-prob best to have RenderedCanvasRegion work with WideChar
-broadphase needs to use expanded unicode boxes rather than logical boxes
DONE-uses ~/.tinytools/ to store unicode width table
DONE-pass cache in through PotatoHandlerInput and use in Select (you could use in Line too)
DONE-update cache to not be intrusive, include elt in the cache
DONE-should be allowed to click on label directly from BoxTextHandler (you need to pass on input to underlying BoxHandler
DONE-BUG fix line bugs
DONE- ^
║
║
║
║
║ ^
╚═════════════╝-----*
|cool |
|features! |
*-----------*
╔═══════════════════════════╗
║this is a placeholder for ║
║the actualy tutorial ║
║ ║
║ ║
║ ║
║ ║
╚═══════════════════════════╝
DONE- ╔═══════════════════════════╗
║this is a placeholder for ║
║the actualy tutorial ║
║ ║
║ ║
║ ║
║ ║
╚═══════════════════════════╝
╔═══════════════════════════╗
║*-----------*
║|cool |
║|features! |
║*-----------*
║ ^
╚══════╝
DONE- ╔═══════════╗
║ v
╔═║═════════════════════════╗
║t║is is a placeholder for ║
║t║e actualy tutorial ║
║ ║ ║
║ ║ ║
║ ║ ║
║ ║ ║
╚═║═════════════════════════╝
║
*-----------* ║
|cool | ║
|features! | ║
*-----------* ║
^ ║
╚════════════╝
DONE-BUG start and end anchors behave differently when attaching and aren't attaching to correct anchor points
-fix with cartRotationReflection_apply_lBox
IGNORE-BUG some bot to bot cases are broken
IGNORE-BUG attach offset seems to be not used correctly in some configurations :(
DONE-BUG
╔══════════╗
║@@@@@@@@@@║
╔║@@@@@@@@@@║══════════╗
║║@@@@@@@@@@║ v
║╚══════════╝══════════════════════╗
║ ^ ║@@@@@@@@@@@@@@@@@@@@@@║
║ ║ ║@@@@@@@@@@@@@@@@@@@@@@║
║ ║ ║@@@@@@@@@@@@@@@@@@@@@@║
║ ║ ╚══════════════════════╝
╚═════╝
IGNORE/DONE?-attach offset of 0 for AL ANY still needs to render the arrow head
:: DONE
DONE-BUG figure out what's going on with cache updated render bugs...
DONE-FEATURE attach point repositioning
DONE-BUG render box for lines with labels might be off by 1 sometimes, if you drag you will leavea trail of letters from the line label sometimes maybe
DONE-FEATURE add line labels
-adding midpoints when line labels exist need to be smarter about reposition line labels
-add line label anchor in text edit mode so that you can easily reposition it
-introduce notion of "selected midpoint/linelabel handler" so that they can be deleted
-bonus, cache line labels
DONE-BUG open double cilkc not work anymore :()
DONE-open tutorial file by defaultcd
DONE-get rid of info box for now
DONE-middle mouse cilck to pan
DONE-don't show RID on layers
DONE-layers should show a little icon indicating what kind of element is there
-try emoji?
DONE-layers should allow punctuation characters
DONE-BUG boxes past a certain point don't show attachments
-- TODO change this to be in canvas space _potatoHandlerInput_screenRegion = LBox 0 _goatState_screenRegion
DONE-BUG need to do size validation on params canvas size stuff
DONE-BUG AutoLineLabelMoverHandler sometimes projects handle with an offset??? Only on Z shaped stuff??
-you have a test case to catch this already
-I think there's a maybe separate issue that is not related to midpoints after you adde creation stuff?
DONE-after clicking on line label, cursor should go to end
DONE-erase empty labels
DONE-BUG rendering first character in line label is wrong
DONE/IGNORE-erase all text to delete line label
DONE-remember to adjust _sAutoLine_labels when deleting midpoints
DONE-if down and up on line manipulator (text portion and not the anchor portion), should be able to edit
DONE-BUG click to edit text inside SAutoLineLabelHandler not working
DONE-SAutoLine -> SAutoLineLabel -> XY
DONE-mouse down up on line label takes you to line label handler
DONE-generate text box for line label handler (don't wrap for now)
-offset anchor by 1 in line label handler
DONE-rendering
-must adjust bounding box to include line labels UGGG
-file stuff
DONE-add scroll bar to fileexplorer
DONE-pageup/down support to filexplorer
DONE-new file button
DONE-open file button
DONE-make alert on unsaved changes generic and save popupmanager
-????
DONE-you must wait for finalSaveEv before actually doing something in case the save fails
-maybe redesign SaveBeforeACtion lesigh
-you can have something like waitForSecondAfterFirst :: Event t a -> Event t b -> m (Event t (a, b))
DONE-ctrl-o to open (should prompt for save first)
DONE-ctrl-n for new file (should prompt for save first)
DONE-open file dialog
DONE-auto focus on filename area?
DONE-up/down arrow works regardless of focus in explorer window
DONE-apply styling
DONE-add highlight on click
DONE-auto add file extension on saving?? (maybe have check box to disable? or maybe disables if user sets their own extension)
DONE/IGNORE-grey out invalid files extensions
DONE-sort files in explorer
DONE-auto add extension on save
DONE-clicking on file with valid extension populates the filename bar
-tests
DONE-very basic midpoint test
DONE-add cancel with no movement test for box and line handler
DONE-add test to make sure cache is actually being used
DONE-test where you delete midpoint by dragging to adjacent midpoint that is adjacent to another mid/endpoint and then drag to tha adjacent point
DONE-setMarker should be analogous to "it" in documenting test cases
DONE-attach line to object, move object delete that object, make sure line is in expected place, modify line again
DONE-create 2 fully attached lines, select them both, ensure not possible to move
:: 2024, some random nix pkg stuff D:
mypkgs = nixpkgs.pkgs.haskell.packages.${compiler}.override {
overrides = self: super: {
reflex-test-host = nixpkgs.pkgs.haskellPackages.callHackageDirect {
pkg = "reflex-test-host";
ver = "0.1.2.3";
sha256 = "9ee3ad9ac4fc58c6dcabcd9fbc6d109a51d8e86ba2682cee8367bc6b452f09ea";
} {};
reflex-vty = nixpkgs.pkgs.haskellPackages.callHackageDirect {
pkg = "reflex-vty";
ver = "0.5.1.0";
sha256 = "ff25d77e771a08214f7e4e699fc31e16a6406bce51d3f35515430b882caafebd";
} {};
tinytools = nixpkgs.pkgs.haskellPackages.callHackageDirect {
pkg = "tinytools";
ver = "0.1.0.7";
sha256 = "ff25d77e771a08214f7e4e699fc31e16a6406bce51d3f35515430b882caafebd";
} {};
};
};
:: MULTI POINT LINE AND LABEL SPEC
DONE-midpoints
DONE-rendered in segments
DONE-midpoints treated as ANY attachments
DONE-ANY attachment style
-pass in neighbors, and direction determined by position of neighbor
-process from left to right, disallow double backing in same direction
DONE-click once to select line
DONE-click + drag end/midpoint to manipulate
DONE-click + drag text label to enter modify mode
-refactor modify stuff out of BoxText and BoxLabel (why didn't you do this correctly the first time...)
DONE-click + release to create new text label
-erase all text to destroy text label
:: DONE 12/2022
DONE-BUG midpoints rendered as ?
DONE-BUG starting dragging from box anchor, attachment stuff for box you are dragging goes away
DONE-line anchors handles should render on top of attachment points and not on the edge of the box
DONE-AL_ANY needs to be a single point and not a box with 4 sides...
-i think this is fixed if you set attachOffset to 0...
-BUG I think this is causing unattached lines to be offset by 1 from where they should be...
DONE-params
DONE-default for line in params should be both instead of start
DONE/IGNORE-line stuff should have aligned spacing to make it easier to click on where the change is
DONE-highlight squares that can be modified
DONE-BUG rename layers, click off, then click back on, then modify params, click off to finalize, it will crash
DONE-BUG cache isn't being set
DONE-TESTING allow foldGoatFn to be tested directyl, get rid of the reflex indirected tests....
-add proper potatoShow for SuperOwl/OwlItem
-add way to label individual tests
-improve labeling of each verify step
DONE-display filename somewhere with * if not saved
-on start, it should pop stack, on exit it should pop stack
DONE-delete layer scrolling support from GoatWidget. I can't remember why I did this anymore
IGNORE-disable selection highlight in some modes????
DONE-no MDI file stuff
DONE-CLI open file
DONE-opens file, sets directory to file's root dir
DONE-no open file
DONE-sets directory to home dir
DONE-figure out if paste is done via repeated inputs or actually via paste event
-repeated inputs lol
DONE-BUG you can stil drag folder into itself which causes crash wtf I thought I fixed thi
IGNORE/DONE-refactor
-refactor SEltMethods/getDrawer stuff
-factor in RenderCache into refactor somehow?? RenderCache is good not just for rendering....
-switch OwlPFCManipulate over to Llama
-consider doing some sort of generic cache method
-options
-generic call to `updateCache` method that gets called before each update operation in Goat as appropriate
-wrap handler in some sort of monad so you can just doUpdateCache
-consider adding available Attachments to PotatoHandlerInput
-why?
DONE-BUG selecting two box and gonig line tool causes crash
DONE-BUG selecting something and pressing v removes the handler???
DONE-BUG create two boxes, copy, paste, delete, observer crash 😱
DONE-BUG changing from text box to no text box crashes
DONE-reset layer handler after `next_handler = case _goatCmdTempOutput_pFEvent goatCmdTempOutput of`
DONE-fix mouse cancel stuff for autline
DONE-finish midpoint stuf
DONE-best guess for ANY attach ends on which attach type to convert to
DONE-file explorer
DONE-getting filename and last folder confused
DONE-add quit button somewhere?
DONE-initialize app with correct folder
DONE-prompt to save if not saved
-would be nice if we had potatooutput state thingy
DONE-typeable file path bar
DONE-double focus between filename and folder
DONE-fix h scrolling in filename input
DONE-ctrl-s to save
IGNORE-multi node lines
DONE-research how lucidchart does it? (they use edge draggers instead of corners (avoids doubling back issue) but this won't look good in vty)
DONE/IGNORE-you really need to design+determine all line types first
IGNORE-cartline needs a SElt type
DONE-decide how to combine Line and CartLine
-click + drag produces reuglar line
-click release in same spot takes you to CartLine
DONE-may as well do attachments while you're at it
-same as regular line except last points auto track to their attaching points, may create some un-editable joints
-how to detach?
-how to attach during creation?
-click on attachment point... attaches
-ctrl click does not attach
DONE-line style
DONE-use different handler color for line start/end so you can tell the diff between the 2
DONE-implement line start/end style rendering
DONE-line picker start/end
DONE-finish implement
DONE-UI (complete start / end)
[x] start | [x] end (the one being modified is highlighted)
custom | preset
....
DONE-preset interface for choosing line ends
DONE-easy way to turn on/off line ends for both sides
DONE-attachment stuff
DONE-use better function to determine if you clicked on lines (you can do this now)
-this should have access to the RenderCache/OwlTree
DONE-attachment handle rendering
-just having line handler selected should not render attachment handles (only when dragging handle end)
DONE-having Line tool selected should highlight attachment points so you can create a line and attach right away
DONE-TODO I think you want to make it so selecting tool changes the handler.. You'll need to update each handler to handle empty (non selection) states though D:
DONE-move no longer makes sense on attached lines, find a way to disable it
-or don't disable it...
-remove it from Box select handler selection?
DONE-lines can't be attached on first drag
DONE?-BUG drag off attachment logic is wrong for Line handler
DONE-just do the controller refactor!! D:
IGNORE-BUG attached lines don't render when you drag in some directions
-I think this is due to an update order, i.e. the AABB is computed from the old line's AABB rather than the new line's AABB (it needs to be both!)
-NO this was also probbaly due to out of date cache or something idk wtf???
-well it's magically fixed now W/E
DONE-Select box + attached lines
DONE-kind of weird that fully attached lines don't move with select box... I guess partially attached lines do?
DONE-selecting multiple fully attached lines should not allow moving?
DONE-selecting fully attached line and something that can be moved.. I guess the box should draw around just the stuff that can be moved
DONE-after DELETING object line is attached to, line should prob reset its endpoint position to where it was attached
-prob makes most sense to scan for all objects
-this might have some weird edge cases in multi user mode but whatever?
-prob better scan for all attached stuff in PFWorkspace then
-was I suppose to put the attachment map inside of the workspace D:
DONE-BUG you can reset handler by pasting or selecting on layers and it doesn't reset the tool back to select
-I guess you also need handler -> set tool?
DONE?-BUG line ends attach at wrong places (off by one)
-this happens in even width one cases
DONE-select box boundary uses origin line endpoints rather than attached points
-need to set box width to infinite
DONE-BUG attach lines sometimes don't render (this is a broadphase box-to-rerender issue probbably)
DONE-when overflowing in boxlabel it will go to next line when it should keep going to the right (and still be invisible)
DONE??-BUG manipulators sometimes don't respect screen pan
-repro is pan and then select via layers and the selection will use the old pan setting
-this does not happen if you pan and select via canvases and fixes the pan setting
DONE-BUG multiselect with text box in selection and then clicking on text box will cause it to try and go into text edit mode and crash becaues it expects only one text box to be there
-you can either disable this or do a second collision to determine which text box you clicked on
DONE-BUG box styles are "contagious" if you multi drag a box, it's style will apply to everything in that selection group...
-this happens because params is triggering (for both ssytle and linestyle) when you click and drag on canvas side
DONE-BUG keyboard hotkey to change tools visually changes tool-s but you are still in select mode...
DONE-backspace should delete too
DONE-after DELETING object line is attached to, line does not get rerendered
DONE-add a regenerateAttachmentMap and verifyAttachmentMap UT
FIXED-it's crashing :(
FIXED?-BUG doing a box select just to the left/top of a box will select it when it shouldn't
DONE-when drag selecting, box should auto resize to +1 so you don't have invisible drag box
IGNORE-I think you need some kind of cache monad
DONE-need another area for tool options
DONE-BUG