Compare commits
39 Commits
4abe51788e
...
main
Author | SHA1 | Date | |
---|---|---|---|
6b07a8e90b | |||
aa2359c468 | |||
69cbe9b235 | |||
76ad31163f | |||
4df1c2b7e1 | |||
5b3b12e613 | |||
f9a3711507 | |||
af803d109e | |||
3214f0c673 | |||
65dd0ca8e0 | |||
83dc04b993 | |||
6f7ac37a05 | |||
5792689842 | |||
1f6e2b5c5a | |||
3b387c66d2 | |||
e07e8ef9ca | |||
8b91c7ad5d | |||
f0a41a6687 | |||
198718e2d2 | |||
03fb521851 | |||
c82a9053bb | |||
b85e2ff66b | |||
66faf94f77 | |||
8149b21855 | |||
2b27dee78f | |||
ec4e876d09 | |||
8c9691e18f | |||
e997380e76 | |||
154e9cdf40 | |||
9c5a750832 | |||
0835a07c52 | |||
4792644b03 | |||
5c983add1c | |||
23d91d1080 | |||
d60d0460cf | |||
3a03e6419f | |||
d03a93f6c9 | |||
e32271e406 | |||
8f4e7ff660 |
27
README.md
27
README.md
@@ -3,9 +3,10 @@
|
||||
A [jsui] replacement for the [preset] object in Cycling'74 Max.
|
||||
|
||||
## Features
|
||||
- Same click + modifier key behavior as the vanilla object to store and delete presets
|
||||
- Drag and drop presets to re-organize
|
||||
- Display presets as a grid or a list
|
||||
- Scrollable (requires Max 8.6.2)
|
||||
- Scrollable list layout (requires Max 8.6.2)
|
||||
- Shows active preset even if recalled directly from pattrstorage
|
||||
- Shows previously active preset, with the ability to ignore preset 0 if it being used as an intermediary step
|
||||
- Shows presets being interpolated (using recall or recallmulti)
|
||||
@@ -14,29 +15,33 @@ A [jsui] replacement for the [preset] object in Cycling'74 Max.
|
||||
- Ability to rewrite json file automatically every time a preset is stored/moved/deleted/renamed/(un)locked
|
||||
- Helps keeping in sync a umenu with the list of stored slotstlet
|
||||
- More look customization
|
||||
- Same click + modifier key behavior as the vanilla object to store or delete presets
|
||||
- Dynamically adapts to resize both in Edit and Presentation mode
|
||||
- Select mode: simple click selects the slot, double click recalls it (allows for organizing presets without recalling them)
|
||||
- Color mode: various ways to colorize preset slots
|
||||
|
||||
## How to install
|
||||
- [Download](https://github.com/Teufeuleu/tc.preset/archive/refs/heads/main.zip) this repository (and please consider donating on the [gumroad page](https://glucose47.gumroad.com/l/tc_preset) if you like this package)
|
||||
- Unzip the downloaded file and place the tc.preset folder in your Max Library package.
|
||||
- Restart Max
|
||||
|
||||
## How to use
|
||||
- Place `tc.preset.js` in the same directory as your patch, or somewhere in the Max search path
|
||||
- Create a [`jsui @filename tc.preset.js`]. You can either add `@jsarguments` followed by the name of the pattrstorage you want to communicate with, or set that later by sending a `pattrstorage` (followed by the pattrstorage name) message to the [jsui].
|
||||
- In your Max patch, reate a [`tc.preset`] object (or a more lenghty [`jsui @filename tc.preset.js`])
|
||||
- Connect the [pattrstorage] outlet to the [jsui] inlet
|
||||
- Set the jsui attribute named "pattrstorage" to the name of the pattrstorage you just connected (or send a message like "pattrstorage my_pattrstorage_name")
|
||||
|
||||
|
||||
## Limitations
|
||||
- Resize doesn't work in Presentation mode (jsui limitation)
|
||||
- Due to the way [pattrstorage] works, some pattrstorage-specific messages should be sent to the [jsui] instead of the [pattrstorage]. Some to both:
|
||||
- `recall`, `delete`: send to [pattrstorage] only
|
||||
- `recall`: send to [pattrstorage] only
|
||||
- `recallmulti`, `slotname`: send to [pattrstorage] first (for better timing), then to the [jsui]
|
||||
- `store`: send to [jsui] only
|
||||
- Some messages to pattrstorage causes the jsui to be out of sync (`clear`, `insert`, `lockall`, `read`, `readagain`, `remove`, `renumber`). If you use any of these messages, make sure to then send a `resync` to the jsui.
|
||||
- Some messages to pattrstorage causes the jsui to be out of sync (`insert`, `lockall`, `read`, `readagain`, `remove`, `renumber`). If you use any of these messages, make sure to then send a `resync` to the jsui.
|
||||
- The js program send a lot of message to the [pattrstorage] (using `maxobj.message()`syntax, so without patch cord), which in return send (using a patch cord) a lot of messages required for the [jsui] to stay in sync. Using one of the above messages incorrectly, or sending `getslotlist`, `getslotnamelist`, or any message that will impact the presets might cause the [pattrstorage] to get out of sync. In case something like that happens, you can send the `resync` message to the [jsui].
|
||||
|
||||
## Desired features (for someday)
|
||||
- Select mode: simple click selects the slot, double click recalls it
|
||||
## Desired features (for someday, if ever)
|
||||
- No need for a patch cord (programmatically create a [send]/[receive] pair?)
|
||||
- Ability to lock/unlock and rename directly in the jsui without the need of external objects
|
||||
- Ability to target a [pattrstorage] in a different patcher level
|
||||
- Accept more pattrstorage messages: (`clear`, `insert`, `lockall`, `read`, `readagain`, `remove`, `renumber`), and act as a passthrough for the ones that don't affect the presets.
|
||||
- Authoring (make a Max package out of this and create `maxref.xml` files)
|
||||
|
||||
## Known bugs
|
||||
- With slot_round > 0, interpolation visualization is a bit wacky
|
||||
|
229
docs/tc.preset.maxref.xml
Normal file
229
docs/tc.preset.maxref.xml
Normal file
@@ -0,0 +1,229 @@
|
||||
<?xml version='1.0' encoding='utf-8' standalone='yes'?>
|
||||
|
||||
<c74object name='tc.preset' category='jsui, preset, pattrstorage'>
|
||||
|
||||
<digest>
|
||||
A jsui replacement for the preset object.
|
||||
</digest>
|
||||
<description>
|
||||
tc.preset is a jsui clone of the preset object, but loaded with more features, such as preset organization through drag and drop, display as a scrollable list, auto-rewrite the saved JSON/XML file after any change.
|
||||
Contrary to the preset object, tc.preset doesn't work alone and has to be used in conjonction with a pattrstorage object.<modification class=""></modification>
|
||||
</description>
|
||||
|
||||
|
||||
<!--METADATA-->
|
||||
|
||||
<metadatalist>
|
||||
<metadata name='author'>Théophile Clet</metadata>
|
||||
<metadata name='tag'>preset</metadata>
|
||||
<metadata name='tag'>pattrstorage</metadata>
|
||||
<metadata name='tag'>jsui</metadata>
|
||||
</metadatalist>
|
||||
|
||||
|
||||
<!--ARGUMENTS-->
|
||||
|
||||
<!-- <objarglist>
|
||||
|
||||
<objarg name='pattrstorage' optional='0' type='symbol'>
|
||||
<digest>Name of the pattrstorage to control</digest>
|
||||
<description>Name of the pattrstorage this object should be linked to.</description>
|
||||
</objarg>
|
||||
|
||||
</objarglist> -->
|
||||
|
||||
|
||||
<!--MESSAGES-->
|
||||
|
||||
<methodlist>
|
||||
<method name="int">
|
||||
<digest>Recall numbered preset</digest>
|
||||
<description>Sending any integer will trigger the preset of the same number</description>
|
||||
</method>
|
||||
<method name="float">
|
||||
<digest>Interpolate between presets</digest>
|
||||
<description>Recalls the data from the preset specified by float. If the number falls between two whole numbers (e.g. 1.5), the pattrstorage object will interpolate between the data stored in the preset corresponding to the integer portion of the float and the data stored at the preset numbered one higher (e.g. 1.5 will cause pattrstorage to interpolate 50% between presets 1 and 2). See the interp message for more information about interpolation modes.</description>
|
||||
</method>
|
||||
<method name="bang">
|
||||
<digest>Recall last recalled preset</digest>
|
||||
<description>When a bang is received, the last triggered preset is triggered again.</description>
|
||||
</method>
|
||||
<!-- <method name="list">
|
||||
<digest>Function depends on inlet</digest>
|
||||
<description>Function depends on inlet</description>
|
||||
</method> -->
|
||||
<method name="color_wheel">
|
||||
<digest>Define color wheel colors</digest>
|
||||
<description>The message "color_wheel", followed by an integer and four float, defines one of the 6 available slot colors when color_mode is enabled.
|
||||
The integer argument, between 1 and 6, defines which color in being modified, and next the four floats define the color in the RGBA format.
|
||||
The message "color_wheel" without argument resets the six colors to their default values.
|
||||
</description>
|
||||
</method>
|
||||
<method name="setcolor">
|
||||
<digest>Set the preset colors</digest>
|
||||
<description>The message "setcolor" allows to set the color of a preset as shown when in color_mode 2 (select) or 3 (custom).
|
||||
With 1 or 2 integer arguments, it allows to set a preset color as seen in color mode 2. With 4 float arguments or 1 integer followed by 4 floats, it allows to set a preset color for the color mode 3.
|
||||
With 1 integer argument, the currently selected preset color wheel's color is set to the argument's value.
|
||||
With two integer arguments, the preset number defined by first argument is set to color wheel's color defined by the second argument.
|
||||
With 4 float arguments, the currently selected preset is set to a custom color defined by the four arguments (in RGBA format).
|
||||
With 1 integer followed by 4 float arguments, the preset number defined by first argument is set to a custom color defined by the four arguments (in RGBA format).
|
||||
The integer argument, between 1 and 6, defines which color in being modifier, and next the four floats define the color in the RGBA format.
|
||||
With no argument, it resets colors for the select preset to default values.
|
||||
</description>
|
||||
</method>
|
||||
<method name="pattrstorage">
|
||||
<digest>Link to named pattrstorage object</digest>
|
||||
<description>The word 'pattrstorage' followed by the name of an existing pattrstorage links the jsui to that pattrstorage.
|
||||
Make sure that pattrstorage outlet is connected to the jsui left inlet prior to send the message.
|
||||
If the word `pattrstorage`is sent alone, the jsui is unlinked from any pattrstorage.
|
||||
</description>
|
||||
</method>
|
||||
<method name="recall_filled">
|
||||
<digest>Recalls nth filled preset</digest>
|
||||
<description>Recalls the nth filled preset. Example: 'recall_filled 3' will recall the third available filled preset from the preset list, regardless of its slot number.
|
||||
</description>
|
||||
</method>
|
||||
<method name="resync">
|
||||
<digest>Resync the jsui to the pattrstorage</digest>
|
||||
<description>The word 'resync' will repopulate the jsui with the current preset list from the pattrstorage. It is usefull in case you add/remove/edit presets without using the jsui.
|
||||
</description>
|
||||
</method>
|
||||
<method name="setlock">
|
||||
<digest>Lock or unlock selected preset</digest>
|
||||
<description>The word 'setlock' followed by a 0 or a 1 respectively unlocks or locks the currently selected preset in the jsui.
|
||||
Note that if select_mode is set to 1, the selected preset is not necessarily the last recalled one.
|
||||
</description>
|
||||
</method>
|
||||
<method name="setslotname">
|
||||
<digest>Set the name of the selected preset</digest>
|
||||
<description>The word 'setslotname' followed by a symbol sets that symbol as the name of the currently selected preset in the jsui.
|
||||
Note that if select_mode is set to 1, the selected preset is not necessarily the last recalled one.
|
||||
</description>
|
||||
</method>
|
||||
<method name="text">
|
||||
<digest>Set the name of the selected preset</digest>
|
||||
<description>Same as setslotname. Allows to connect the leftmost outlet of a textedit to the jsui and use it as an interface to rename the selected presets.
|
||||
</description>
|
||||
</method>
|
||||
|
||||
</methodlist>
|
||||
|
||||
|
||||
<!--ATTRIBUTES-->
|
||||
|
||||
<attributelist>
|
||||
<attribute name='active_slot_color' get='1' set='1' type='list' size='4' >
|
||||
<digest>Active slot color</digest>
|
||||
<description>Color of the last recalled preset</description>
|
||||
</attribute>
|
||||
<attribute name='autowriteagain' get='1' set='1' type='int' size='1' >
|
||||
<digest>Automatic writeagain</digest>
|
||||
<description>When set to 1, the jsui will automatically send a "writeagain" message to its linked pattrstorage anytime a preset have been stored, moved, renamed, (un)locked or deleted, saving any change into the preset file immediately.</description>
|
||||
</attribute>
|
||||
<attribute name='bgcolor' get='1' set='1' type='list' size='4' >
|
||||
<digest>Background color</digest>
|
||||
<description>Sets the background color of the object in RGBA format</description>
|
||||
</attribute>
|
||||
<attribute name='bubblesize' get='1' set='1' type='float' size='1' >
|
||||
<digest>Slot size</digest>
|
||||
<description>Size of the preset slots</description>
|
||||
</attribute>
|
||||
<attribute name='color_mode' get='1' set='1' type='int' size='1' >
|
||||
<digest>Color mode</digest>
|
||||
<description>When set to 0, all preset slots have the same color (same as the preset object) defined by the stored_slot_color attribute.
|
||||
When set to 1, stored preset slots are colored according to one of the six colors of the color wheel, in a repeating pattern.
|
||||
In mode 2, stored preset colors can be freely set to one of the six colors of the color wheel.
|
||||
In mode 3, stored preset color can be set to any color in RGBA format.
|
||||
To define colors of the color wheel for modes 1 and 2, see color_1 to color_6 as well as the color_wheel message.
|
||||
To define preset color as in mode 2 or 3, see the setcolor message. Modes 2 and 3 require a pattr object named 'preset_color' to be at the same patcher level as the tc.preset object.
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='color_1' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 1</digest>
|
||||
<description>Slot color 1 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='color_2' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 2</digest>
|
||||
<description>Slot color 2 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='color_3' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 3</digest>
|
||||
<description>Slot color 3 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='color_4' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 4</digest>
|
||||
<description>Slot color 4 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='color_5' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 5</digest>
|
||||
<description>Slot color 5 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='color_6' get='1' set='1' type='list' size='4' >
|
||||
<digest>Slot color 6</digest>
|
||||
<description>Slot color 6 in RGBA format. Sending this message without arguments resets the color to its default value. Has an effect only when color_mode is enabled.</description>
|
||||
</attribute>
|
||||
<attribute name='display_interp' get='1' set='1' type='int' size='1' >
|
||||
<digest>Display interpolation</digest>
|
||||
<description>When set to 1, the jsui will display the ongoing interpolation between presets when a recall message with three arguments or a recallmulti message with at least one argument are sent to the linked pattrstorage.
|
||||
Notice that the recallmutli message needs to be sent both the pattrstorage and the jsui.</description>
|
||||
</attribute>
|
||||
<attribute name='empty_slot_color' get='1' set='1' type='list' size='4' >
|
||||
<digest>Empty slot color</digest>
|
||||
<description>Sets the empty slot color of the object in RGBA format</description>
|
||||
</attribute>
|
||||
<attribute name='layout' get='1' set='1' type='int' size='1' >
|
||||
<digest>How presets are displayed</digest>
|
||||
<description>When set to 0, the jsui mimics the default preset object: slots are displayed in a grid. When set to 1, they are displayed as a vertical list, with the preset slots on the left and their name on the right.</description>
|
||||
</attribute>
|
||||
<attribute name='margin' get='1' set='1' type='float' size='1' >
|
||||
<digest>Object margin</digest>
|
||||
<description>Defines the size, in pixels, of the margin between the jsui border and the preset slots.</description>
|
||||
</attribute>
|
||||
<attribute name='menu_mode' get='1' set='1' type='int' size='1' >
|
||||
<digest>Menu mode</digest>
|
||||
<description>Populates the umenu connected to 2nd outlet with preset number and name (0), preset number only (1), or name only (2). See recall_filled when using mode 2</description>
|
||||
</attribute>
|
||||
<attribute name='min_rows' get='1' set='1' type='int' size='1' >
|
||||
<digest>Minimum number of rows to display</digest>
|
||||
<description>Defines the minimum number of rows to display if scrollable is enabled and layout is set to 1.
|
||||
If a preset is stored in a slot with a higher value than min_row, then min_row is ignored and presets are displayed up to the highest stored one.
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='scrollable' get='1' set='1' type='int' size='1' >
|
||||
<digest>Scroll through your presets</digest>
|
||||
<description>When set to 1, you can through the jsui to see all your presets, or at least up to the row defined by the min_rows attributes.
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='select_mode' get='1' set='1' type='int' size='1' >
|
||||
<digest>Preset selection mode</digest>
|
||||
<description>When set to 1, a single click on a stored preset selects it without recalling it. It allows to drag it, set its name and lock state while keeping the last recalled preset active.
|
||||
You need to double-click on a stored preset to recall it. If set to 0, stored presets are recalled by a single click (default preset object behavior).
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='slot_round' get='1' set='1' type='float' size='1' >
|
||||
<digest>Slot corner rounding</digest>
|
||||
<description>Defines the rounding of the slots corners. A value of zero means square corners. A value equal or superior to half the bubblesize makes the slots as a circle.
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='spacing' get='1' set='1' type='float' size='1' >
|
||||
<digest>Slot spacing</digest>
|
||||
<description>Defines the spacing, in pixels, between slot bubbles.
|
||||
</description>
|
||||
</attribute>
|
||||
<attribute name='stored_slot_color' get='1' set='1' type='list' size='4' >
|
||||
<digest>Stored slot color</digest>
|
||||
<description>Sets the stored preset color of the object in RGBA format</description>
|
||||
</attribute>
|
||||
</attributelist>
|
||||
|
||||
|
||||
<!--RELATED-->
|
||||
|
||||
<seealsolist>
|
||||
<seealso name='pattrstorage' />
|
||||
<seealso name='preset' />
|
||||
<seealso name='jsui' />
|
||||
</seealsolist>
|
||||
|
||||
|
||||
</c74object>
|
217
extras/tc.preset Launch.maxpat
Normal file
217
extras/tc.preset Launch.maxpat
Normal file
@@ -0,0 +1,217 @@
|
||||
{
|
||||
"patcher" : {
|
||||
"fileversion" : 1,
|
||||
"appversion" : {
|
||||
"major" : 8,
|
||||
"minor" : 6,
|
||||
"revision" : 4,
|
||||
"architecture" : "x64",
|
||||
"modernui" : 1
|
||||
}
|
||||
,
|
||||
"classnamespace" : "box",
|
||||
"rect" : [ 391.0, 289.0, 483.0, 443.0 ],
|
||||
"bglocked" : 0,
|
||||
"openinpresentation" : 0,
|
||||
"default_fontsize" : 12.0,
|
||||
"default_fontface" : 0,
|
||||
"default_fontname" : "Arial",
|
||||
"gridonopen" : 1,
|
||||
"gridsize" : [ 15.0, 15.0 ],
|
||||
"gridsnaponopen" : 1,
|
||||
"objectsnaponopen" : 1,
|
||||
"statusbarvisible" : 2,
|
||||
"toolbarvisible" : 0,
|
||||
"lefttoolbarpinned" : 2,
|
||||
"toptoolbarpinned" : 2,
|
||||
"righttoolbarpinned" : 2,
|
||||
"bottomtoolbarpinned" : 2,
|
||||
"toolbars_unpinned_last_save" : 15,
|
||||
"tallnewobj" : 0,
|
||||
"boxanimatetime" : 200,
|
||||
"enablehscroll" : 0,
|
||||
"enablevscroll" : 0,
|
||||
"devicewidth" : 0.0,
|
||||
"description" : "",
|
||||
"digest" : "",
|
||||
"tags" : "",
|
||||
"style" : "",
|
||||
"subpatcher_template" : "",
|
||||
"assistshowspatchername" : 0,
|
||||
"boxes" : [ {
|
||||
"box" : {
|
||||
"hidden" : 1,
|
||||
"id" : "obj-17",
|
||||
"linecount" : 5,
|
||||
"maxclass" : "message",
|
||||
"numinlets" : 2,
|
||||
"numoutlets" : 1,
|
||||
"outlettype" : [ "" ],
|
||||
"patching_rect" : [ 9.0, 354.0, 116.0, 76.0 ],
|
||||
"text" : ";\rmax launchbrowser https://glucose47.gumroad.com/l/tc_preset"
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"id" : "obj-13",
|
||||
"linecount" : 3,
|
||||
"maxclass" : "comment",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 0,
|
||||
"patching_rect" : [ 166.5, 373.0, 150.0, 47.0 ],
|
||||
"text" : "GPL 3.0\n© Théophile Clet, 2024\nClick here to support",
|
||||
"textcolor" : [ 0.0, 0.0, 0.0, 0.5 ],
|
||||
"textjustification" : 1
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"fontsize" : 16.0,
|
||||
"id" : "obj-11",
|
||||
"maxclass" : "comment",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 0,
|
||||
"patching_rect" : [ 99.0, 81.0, 285.0, 24.0 ],
|
||||
"text" : "A jsui replacement for the preset object"
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"embedstate" : [ [ "spacing", 4 ], [ "color_3", 0.527, 0.459, 0.756, 1 ], [ "text_bg_color", 1, 1, 1, 0.5 ], [ "color_1", 0.743, 0.41, 0.501, 1 ], [ "color_2", 0.679, 0.405, 0.669, 1 ], [ "color_4", 0.367, 0.542, 0.712, 1 ], [ "select_mode", 0 ], [ "scrollable", 0 ], [ "bubblesize", 14 ], [ "margin", 4 ], [ "fontsize", 14 ], [ "color_mode", 0 ], [ "color_5", 0.283, 0.606, 0.559, 1 ], [ "ignoreslotzero", 1 ], [ "min_rows", 10 ], [ "stored_slot_color", 0.502, 0.502, 0.502, 1 ], [ "fontname", "Arial" ], [ "empty_slot_color", 0.349, 0.349, 0.349, 1 ], [ "text_color", 0.129, 0.129, 0.129, 1 ], [ "color_6", 0.316, 0.616, 0.377, 1 ], [ "display_interp", 1 ], [ "bgcolor", 0.2, 0.2, 0.2, 1 ], [ "slot_round", 0 ], [ "interp_slot_color", 1, 1, 1, 0.8 ], [ "active_slot_color", 0.808, 0.898, 0.91, 1 ], [ "autowriteagain", 0 ], [ "layout", 1 ] ],
|
||||
"filename" : "tc.preset",
|
||||
"id" : "obj-8",
|
||||
"maxclass" : "jsui",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 4,
|
||||
"outlettype" : [ "", "", "", "" ],
|
||||
"parameter_enable" : 0,
|
||||
"patching_rect" : [ 254.0, 153.0, 130.0, 58.0 ]
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"hidden" : 1,
|
||||
"id" : "obj-7",
|
||||
"maxclass" : "newobj",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 1,
|
||||
"outlettype" : [ "" ],
|
||||
"patching_rect" : [ 9.0, 301.0, 51.0, 22.0 ],
|
||||
"text" : "pcontrol"
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"hidden" : 1,
|
||||
"id" : "obj-6",
|
||||
"maxclass" : "message",
|
||||
"numinlets" : 2,
|
||||
"numoutlets" : 1,
|
||||
"outlettype" : [ "" ],
|
||||
"patching_rect" : [ 9.0, 274.0, 129.0, 22.0 ],
|
||||
"text" : "load tc.preset.maxhelp"
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"fontsize" : 20.0,
|
||||
"id" : "obj-4",
|
||||
"maxclass" : "textbutton",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 3,
|
||||
"outlettype" : [ "", "", "int" ],
|
||||
"parameter_enable" : 0,
|
||||
"patching_rect" : [ 162.0, 282.0, 159.0, 41.0 ],
|
||||
"text" : "Open helper file"
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"embedstate" : [ [ "spacing", 4 ], [ "color_3", 0.527, 0.459, 0.756, 1 ], [ "text_bg_color", 1, 1, 1, 0.5 ], [ "color_1", 0.743, 0.41, 0.501, 1 ], [ "color_2", 0.679, 0.405, 0.669, 1 ], [ "color_4", 0.367, 0.542, 0.712, 1 ], [ "select_mode", 0 ], [ "scrollable", 0 ], [ "bubblesize", 14 ], [ "margin", 4 ], [ "fontsize", 14 ], [ "color_mode", 0 ], [ "color_5", 0.283, 0.606, 0.559, 1 ], [ "ignoreslotzero", 1 ], [ "min_rows", 10 ], [ "stored_slot_color", 0.502, 0.502, 0.502, 1 ], [ "fontname", "Arial" ], [ "empty_slot_color", 0.349, 0.349, 0.349, 1 ], [ "text_color", 0.129, 0.129, 0.129, 1 ], [ "color_6", 0.316, 0.616, 0.377, 1 ], [ "display_interp", 1 ], [ "bgcolor", 0.2, 0.2, 0.2, 1 ], [ "slot_round", 0 ], [ "interp_slot_color", 1, 1, 1, 0.8 ], [ "active_slot_color", 0.808, 0.898, 0.91, 1 ], [ "autowriteagain", 0 ], [ "layout", 0 ] ],
|
||||
"filename" : "tc.preset",
|
||||
"id" : "obj-3",
|
||||
"maxclass" : "jsui",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 4,
|
||||
"outlettype" : [ "", "", "", "" ],
|
||||
"parameter_enable" : 0,
|
||||
"patching_rect" : [ 99.0, 153.0, 130.0, 58.0 ]
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"fontface" : 1,
|
||||
"fontsize" : 48.0,
|
||||
"id" : "obj-2",
|
||||
"maxclass" : "comment",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 0,
|
||||
"patching_rect" : [ 137.0, 16.0, 209.0, 60.0 ],
|
||||
"text" : "tc.preset",
|
||||
"textjustification" : 1
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"box" : {
|
||||
"bgcolor" : [ 0.2, 0.2, 0.2, 0.0 ],
|
||||
"fontsize" : 20.0,
|
||||
"id" : "obj-15",
|
||||
"maxclass" : "textbutton",
|
||||
"numinlets" : 1,
|
||||
"numoutlets" : 3,
|
||||
"outlettype" : [ "", "", "int" ],
|
||||
"parameter_enable" : 0,
|
||||
"patching_rect" : [ 166.5, 373.0, 150.0, 47.0 ],
|
||||
"text" : "Open helper file",
|
||||
"textoncolor" : [ 0.807843137254902, 0.898039215686275, 0.909803921568627, 0.0 ],
|
||||
"textovercolor" : [ 0.929411764705882, 0.929411764705882, 0.352941176470588, 0.0 ]
|
||||
}
|
||||
|
||||
}
|
||||
],
|
||||
"lines" : [ {
|
||||
"patchline" : {
|
||||
"destination" : [ "obj-17", 0 ],
|
||||
"hidden" : 1,
|
||||
"source" : [ "obj-15", 0 ]
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"patchline" : {
|
||||
"destination" : [ "obj-6", 0 ],
|
||||
"hidden" : 1,
|
||||
"source" : [ "obj-4", 0 ]
|
||||
}
|
||||
|
||||
}
|
||||
, {
|
||||
"patchline" : {
|
||||
"destination" : [ "obj-7", 0 ],
|
||||
"hidden" : 1,
|
||||
"source" : [ "obj-6", 0 ]
|
||||
}
|
||||
|
||||
}
|
||||
],
|
||||
"dependency_cache" : [ {
|
||||
"name" : "tc.preset.js",
|
||||
"bootpath" : "~/Documents/Max 8/Packages/tc.preset/code",
|
||||
"patcherrelativepath" : "../code",
|
||||
"type" : "TEXT",
|
||||
"implicit" : 1
|
||||
}
|
||||
],
|
||||
"autosave" : 0
|
||||
}
|
||||
|
||||
}
|
4801
help/tc.preset.maxhelp
Normal file
4801
help/tc.preset.maxhelp
Normal file
File diff suppressed because it is too large
Load Diff
65
help/test.json
Normal file
65
help/test.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"pattrstorage" : {
|
||||
"name" : "test",
|
||||
"slots" : {
|
||||
"1" : {
|
||||
"id" : 1,
|
||||
"name" : "up",
|
||||
"data" : {
|
||||
"u099005226" : [ -0.714285714285714, -0.714285714285714, -0.6, -0.542857142857143, -0.457142857142857, -0.342857142857143, -0.171428571428571, -0.028571428571429, 0.028571428571428, 0.142857142857143, 0.228571428571429, 0.371428571428571, 0.485714285714286, 0.571428571428571, 0.714285714285714, 0.8 ],
|
||||
"slot colors::colors" : [ 65 ],
|
||||
"appearance::test" : [ -1 ],
|
||||
"snippet::mypat" : [ -1 ],
|
||||
"behavior::test" : [ -1 ],
|
||||
"messages::test" : [ -1 ]
|
||||
}
|
||||
|
||||
}
|
||||
,
|
||||
"2" : {
|
||||
"id" : 2,
|
||||
"name" : "down",
|
||||
"data" : {
|
||||
"u099005226" : [ 0.873015873015873, 0.714285714285714, 0.587301587301587, 0.46031746031746, 0.301587301587302, 0.174603174603175, 0.015873015873016, -0.111111111111111, -0.238095238095238, -0.333333333333333, -0.428571428571429, -0.523809523809524, -0.587301587301587, -0.682539682539683, -0.777777777777778, -0.873015873015873 ],
|
||||
"slot colors::colors" : [ 65 ],
|
||||
"appearance::test" : [ -1 ],
|
||||
"snippet::mypat" : [ -1 ],
|
||||
"behavior::test" : [ -1 ],
|
||||
"messages::test" : [ -1 ]
|
||||
}
|
||||
|
||||
}
|
||||
,
|
||||
"3" : {
|
||||
"id" : 3,
|
||||
"name" : "sine",
|
||||
"data" : {
|
||||
"u099005226" : [ -0.079365079365079, 0.206349206349206, 0.428571428571429, 0.682539682539683, 0.904761904761905, 0.904761904761905, 0.841269841269841, 0.555555555555556, 0.047619047619048, -0.301587301587302, -0.587301587301587, -0.682539682539683, -0.650793650793651, -0.428571428571429, -0.111111111111111, 0.079365079365079 ],
|
||||
"slot colors::colors" : [ 65 ],
|
||||
"appearance::test" : [ -1 ],
|
||||
"snippet::mypat" : [ -1 ],
|
||||
"behavior::test" : [ -1 ],
|
||||
"messages::test" : [ -1 ]
|
||||
}
|
||||
|
||||
}
|
||||
,
|
||||
"4" : {
|
||||
"id" : 4,
|
||||
"name" : "random",
|
||||
"data" : {
|
||||
"u099005226" : [ -0.587301587301587, 0.365079365079365, -0.46031746031746, -0.015873015873016, 0.904761904761905, -0.714285714285714, 0.206349206349206, -0.142857142857143, 0.428571428571429, -0.746031746031746, 0.587301587301587, -0.619047619047619, -0.047619047619048, -0.555555555555556, -0.428571428571429, 0.396825396825397 ],
|
||||
"slot colors::colors" : [ 65 ],
|
||||
"appearance::test" : [ -1 ],
|
||||
"snippet::mypat" : [ -1 ],
|
||||
"behavior::test" : [ -1 ],
|
||||
"messages::test" : [ -1 ]
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
2
init/tc.preset_init.txt
Normal file
2
init/tc.preset_init.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
max objectfile tc.preset tc.preset;
|
||||
max definesubstitution tc.preset jsui @filename tc.preset;
|
File diff suppressed because it is too large
Load Diff
28
package-info.json
Normal file
28
package-info.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"name" : "tc.preset",
|
||||
"displayname" : "",
|
||||
"version" : "0.0.1",
|
||||
"author" : "Théophile Clet",
|
||||
"authors" : [ ],
|
||||
"description" : "A jsui replacement for the preset object",
|
||||
"tags" : ["preset", "pattrstorage", "jsui"],
|
||||
"website" : "https://github.com/Teufeuleu/tc.preset/",
|
||||
"extends" : "",
|
||||
"extensible" : 0,
|
||||
"max_version_min" : "8.6.2",
|
||||
"max_version_max" : "none",
|
||||
"os" : {
|
||||
"macintosh" : {
|
||||
"min_version" : "10.11.x",
|
||||
"platform" : [ "x64", "aarch64" ]
|
||||
}
|
||||
,
|
||||
"windows" : {
|
||||
"min_version" : "10",
|
||||
"platform" : [ "x64" ]
|
||||
}
|
||||
|
||||
}
|
||||
,
|
||||
"homepatcher" : "tc.preset Launch.maxpat"
|
||||
}
|
643
snippets/tc.preset all-in-one-color.maxsnip
Normal file
643
snippets/tc.preset all-in-one-color.maxsnip
Normal file
File diff suppressed because one or more lines are too long
523
snippets/tc.preset all-in-one.maxsnip
Normal file
523
snippets/tc.preset all-in-one.maxsnip
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user