<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif"><span class="gmail-im" style="color:rgb(80,0,80);font-family:Arial,Helvetica,sans-serif">> 11. What happens with namespace clash? If I save with an object name that already exists, I think it throws an error only if you try to replace.<br><br></span><span style="font-family:Arial,Helvetica,sans-serif">> Not sure what you mean here.</span>  <br></div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Suppose the saved abstraction has the name of an internal or a loaded external. Maybe the user wasn't aware of [rpole~] or [drunk]. What happens?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 1, 2020 at 9:27 AM Jonathan Wilkes <<a href="mailto:jon.w.wilkes@gmail.com">jon.w.wilkes@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, Jul 1, 2020 at 1:07 AM Matt Barber <<a href="mailto:brbrofsvl@gmail.com" target="_blank">brbrofsvl@gmail.com</a>> wrote:<br>
><br>
> Hello,<br>
><br>
> Guillem and I have been discussing what the user should see when converting a subpatch to an abstraction, for his GSOC project. There are many possibilities; here's one scenario I came up with as a starting point (w/ some additions by Guillem):<br>
><br>
> 1. User is in a subpatch window OR has a single [pd ] object selected (Guillem added right-click popup for the latter scenario – extremely convenient, and could have the same thing right-clicking subpatch canvas).<br>
> 2. They hit the hotkey/menu/whatever.<br>
> 3. Up comes the file chooser. Suppose they want to store it in a "Tools" directory, which is in the same directory as the root patch.<br>
> 4. Get path from that selection, and convert to relative path if possible.<br>
<br>
There's a nagging problem with Pd that we have to deal with here, too:<br>
<br>
1. Pd has a nameclash problem<br>
2. The loader's behavior is complicated<br>
<br>
The only way to 100% solve this problem is to use an absolute path.<br>
<br>
So conceptually, I'd start there and only open up other possibilities<br>
if you can get them<br>
so close to 100% that the user becomes unlikely to ever hit an edge case.<br>
<br>
This is hard because even a user armed with a knowledge of all the<br>
[declare] flags<br>
may not understand when and how the clashes can happen. Does "-lib" *actually*<br>
load anything if it's an abstraction? When is the canvas' path<br>
searched vs the global<br>
ones?<br>
<br>
> 5. Bring up new dialog asking if they want to replace the subpatch with the abstraction yes/no, and a toggle to "try to replace every copied instance of this subpatch with abstraction". They hit "yes"<br>
<br>
Use cases<br>
<br>
1. user starts making a subpatch, then decides to turn that particular<br>
subpatch into an abstraction<br>
2. user does some copy-pasting for polyphony or something, then<br>
decides all those subpatches need to be abstractions<br>
3. user clicks the button (for one of a number of reasons), and the<br>
dialog makes them realize they may have pasted this<br>
subpatch several times in various locations<br>
<br>
The question is whether the value to use case 3 outweighs the obstacle<br>
to users in case 1. For case two, I could imagine<br>
the dialog only being shown if there are multiple subpatches selected.<br>
<br>
We can probably get feedback from users once this is implemented to<br>
get a better sense of who is using this for what<br>
purpose.<br>
<br>
> 6. If the Tools path is [declare]ed on the root patch, replace the subpatch with the abstraction basename. Otherwise, [Tools/basename]. If the toggle was selected, run routine to go through the root patch and compare binbuf for replacement.<br>
<br>
loader complexity example: if you declare that path *and* use<br>
[Tools/basename], will it instantiate? I'm pretty sure<br>
I changed "-lib" so that "-lib Tools/basename" will correctly add<br>
"Tools/basename" to the creator table. But I don't know about<br>
the -patch flag.<br>
<br>
> 7. Preserve connections, of course.<br>
> 8. Anything to do about the new abstraction creation arguments? Presumably nothing.<br>
<br>
For a single pd patch to abstraction conversion-- possibly prepopulate<br>
with "arg1 arg2 etc." selected. Could be handy for<br>
new users.<br>
<br>
Or in the dialog an entry for entering the args. Would be even better<br>
if an arg could be an expression: (i * 2 + 400) :)<br>
<br>
> 9. What to do about subpatch recursion? Ico suggested throwing an error like when you try to include an instance of an abstraction in itself.<br>
<br>
FYI: It will already error out, but it's an unhelpful stack overflow<br>
error after the thing fails to load itself 1000 times.<br>
<br>
> 10. What does undo do? I think it must undo the subpatch replacement(s), if any.<br>
<br>
I agree.<br>
<br>
> 11. What happens with namespace clash? If I save with an object name that already exists, I think it throws an error only if you try to replace.<br>
<br>
Not sure what you mean here.<br>
<br>
><br>
> Much of the complexity is due to path. Any way to simplify? Could bring up the secondary dialog to replace subpatches only if the path is at the same level as or deeper than the root patch, so no ../ or absolute paths.<br>
<br>
Yeah, it's a tough one. I'll think more about it and let you know if I<br>
have anything.<br>
<br>
-Jonathan<br>
<br>
><br>
> Matt<br>
> _______________________________________________<br>
> L2Ork-dev mailing list<br>
> <a href="mailto:L2Ork-dev@disis.music.vt.edu" target="_blank">L2Ork-dev@disis.music.vt.edu</a><br>
> <a href="https://disis.music.vt.edu/listinfo/l2ork-dev" rel="noreferrer" target="_blank">https://disis.music.vt.edu/listinfo/l2ork-dev</a><br>
_______________________________________________<br>
L2Ork-dev mailing list<br>
<a href="mailto:L2Ork-dev@disis.music.vt.edu" target="_blank">L2Ork-dev@disis.music.vt.edu</a><br>
<a href="https://disis.music.vt.edu/listinfo/l2ork-dev" rel="noreferrer" target="_blank">https://disis.music.vt.edu/listinfo/l2ork-dev</a></blockquote></div>