From c3cf665f5eb3c4b3072acdb8d4f14bf39a6f56a3 Mon Sep 17 00:00:00 2001 From: Andy Fuchs Date: Mon, 2 Jan 2023 19:12:34 +0100 Subject: [PATCH] initial commit --- .gitmodules | 3 + README.md | 134 +++++++----------- images.sketch | Bin 0 -> 60500 bytes .../action/images/actionimage.svg | 1 + .../action/images/image.svg | 1 + .../action/property-inspector/inspector.html | 0 .../category-samples.svg | 1 + .../en.json | 12 ++ .../index.html | 30 ++++ .../index.js | 118 +++++++++++++++ .../layout/customlayout.json | 45 ++++++ .../libs | 1 + .../manifest.json | 54 +++++++ .../pluginIcon.svg | 23 +++ 14 files changed, 337 insertions(+), 86 deletions(-) create mode 100644 .gitmodules create mode 100644 images.sketch create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/action/images/actionimage.svg create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/action/images/image.svg create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/action/property-inspector/inspector.html create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/category-samples.svg create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/en.json create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/index.html create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/index.js create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/layout/customlayout.json create mode 160000 src/com.elgato.sample-textlayout-plugin.sdPlugin/libs create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/manifest.json create mode 100644 src/com.elgato.sample-textlayout-plugin.sdPlugin/pluginIcon.svg diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..0b870c7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/com.elgato.sample-textlayout-plugin.sdPlugin/libs"] + path = src/com.elgato.sample-textlayout-plugin.sdPlugin/libs + url = ../streamdeck-javascript-sdk.git \ No newline at end of file diff --git a/README.md b/README.md index d9aab56..6135fd4 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,54 @@ -# sample-textlayout +# A Sample Text Layout Stream Deck Plugin +This is a sample plugin that demonstrates how to create list of strings as a `layout` shown on Stream Deck's touch-panel. - -## Getting started - -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: +![Screenshot](screenshot.png) ``` -cd existing_repo -git remote add origin https://gitlab.com/elgato2/stream-deck/streamdeck-sdk/samples/sample-textlayout.git -git branch -M main -git push -uf origin main +{ + "id": "com.elgato.sample-textlayout.action.layout", + "items": [ + { + "key": "customtext0", + "type": "text", + "font": { "size": 16, "weight": 500 }, + "rect": [8, 4, 192, 17], + "alignment": "left", + "z-order": 5 + }, + { + "key": "customtext1", + "type": "text", + "rect": [8, 22, 192, 17], + "font": { "size": 16, "weight": 500 }, + "alignment":"left" + }, + { + "key": "customtext2", + "type": "text", + "rect": [8, 40, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line", + "alignment":"left" + }, + { + "key": "customtext3", + "type": "text", + "rect": [8, 58, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line2", + "alignment":"left" + }, + { + "key": "customtext4", + "type": "text", + "rect": [8, 76, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line 3", + "alignment":"left" + } + + ] +} ``` -## Integrate with your tools - -- [ ] [Set up project integrations](https://gitlab.com/elgato2/stream-deck/streamdeck-sdk/samples/sample-textlayout/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/images.sketch b/images.sketch new file mode 100644 index 0000000000000000000000000000000000000000..933442d7345c8d4c39e3e71fec5c5900c9ddde9a GIT binary patch literal 60500 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⋙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 b \ No newline at end of file diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/action/images/image.svg b/src/com.elgato.sample-textlayout-plugin.sdPlugin/action/images/image.svg new file mode 100644 index 0000000..f4baf99 --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/action/images/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/action/property-inspector/inspector.html b/src/com.elgato.sample-textlayout-plugin.sdPlugin/action/property-inspector/inspector.html new file mode 100644 index 0000000..e69de29 diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/category-samples.svg b/src/com.elgato.sample-textlayout-plugin.sdPlugin/category-samples.svg new file mode 100644 index 0000000..3b76480 --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/category-samples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/en.json b/src/com.elgato.sample-textlayout-plugin.sdPlugin/en.json new file mode 100644 index 0000000..fcb127f --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/en.json @@ -0,0 +1,12 @@ +{ + "Description": "Create a test layout.", + "Name": "Sample Text Layout", + "Category": "Samples", + "com.elgato.sample-textlayout.action": { + "Name": "Sample Text Layout", + "Tooltip": "How to create a text layout." + }, + "Localization": { + "None": "None" + } +} diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.html b/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.html new file mode 100644 index 0000000..10b68a4 --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.html @@ -0,0 +1,30 @@ + + + + com.elgato.sample-textlayout-plugin + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.js b/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.js new file mode 100644 index 0000000..026372e --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/index.js @@ -0,0 +1,118 @@ +/// +/// +/// + +/** + * This example shows how to create a custom layout with a list of text-labels for Stream Deck. + * In it's manifest it sets the relative path to the custom layout file (layouts/customlayout.json) + */ + +// Action Cache +const MACTIONS = {}; +const MAXNUMLINES = 5; +const UPDATE_INTERVAL = 5000; +// Utilities +const cycle = (idx, min, max) => (idx > max ? min : idx < min ? max : idx); +const randomDate = () => { + const start = new Date(2020, 0, 1); + const end = new Date(); + return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())).toLocaleDateString([], dateOptions); +}; +const debounce = (func, wait = 100) => { + let timeout; + return function(...args) { + clearTimeout(timeout); + timeout = setTimeout(() => { + func.apply(this, args); + }, wait); + }; +}; +const dateOptions = { + year: "numeric", + month: "short", + day: "numeric", + weekday: "long", +}; + +// Action Events +const sampleTextlayoutAction = new Action('com.elgato.sample-textlayout.action'); + +sampleTextlayoutAction.onWillAppear(({context, payload}) => { + // console.log('will appear', context, payload); + MACTIONS[context] = new SampleAction(context, payload); +}); + +sampleTextlayoutAction.onWillDisappear(({context}) => { + // console.log('will disappear', context); + MACTIONS[context].interval && clearInterval(MACTIONS[context].interval); + delete MACTIONS[context]; +}); + + +sampleTextlayoutAction.onDialPress(({context, payload}) => { + // console.log('dial was pressed', context, payload); + if(payload.pressed === false) { + + } +}); + +sampleTextlayoutAction.onDialRotate(({context, payload}) => { + // console.log('dial was rotated', context, payload.ticks); + if(payload.hasOwnProperty('ticks')) { + MACTIONS[context].dialRotate(payload.ticks); + } +}); + +sampleTextlayoutAction.onTouchTap(({context, payload}) => { + // console.log('touchpanel was tapped', context, payload); + if(payload.hold === false) { + MACTIONS[context].touchTap(); + } +}); + +class SampleAction { + constructor (context, payload) { + this.context = context; + this.interval = null; + this.manualValue = -1; + this.isInteracting = false; + this.debouncedClearInteraction = debounce(this.clearRotation.bind(this), 500); + this.init(); + this.update(); + } + + init() { + const updateFn = this.update; + this.interval = setInterval(() => { + this.update(); + }, UPDATE_INTERVAL); + } + + clearRotation() { + this.isInteracting = false; + } + + dialRotate(ticks, inTitle = 'Dial rotating') { + this.isInteracting = true; + this.manualValue = cycle(this.manualValue + ticks, 0, 100); + const payload = { + customtext0: `${inTitle} : ${this.manualValue}` + }; + $SD.setFeedback(this.context, payload); + this.debouncedClearInteraction(); + } + + touchTap() { + this.manualValue = Math.floor(Math.random() * 100); + this.dialRotate(0, 'TouchTap'); + } + + update() { + if(this.isInteracting) return; + const payload = {}; + [0,1,2,3,4].forEach((i) => { + payload[`customtext${i}`] = randomDate(); + }); + $SD.setFeedback(this.context, payload); + } +}; diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/layout/customlayout.json b/src/com.elgato.sample-textlayout-plugin.sdPlugin/layout/customlayout.json new file mode 100644 index 0000000..2cb411b --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/layout/customlayout.json @@ -0,0 +1,45 @@ +{ + "id": "com.elgato.sample-textlayout.action.layout", + "items": [ + { + "key": "customtext0", + "type": "text", + "font": { "size": 16, "weight": 500 }, + "rect": [8, 4, 192, 17], + "alignment": "left", + "z-order": 5 + }, + { + "key": "customtext1", + "type": "text", + "rect": [8, 22, 192, 17], + "font": { "size": 16, "weight": 500 }, + "alignment":"left" + }, + { + "key": "customtext2", + "type": "text", + "rect": [8, 40, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line", + "alignment":"left" + }, + { + "key": "customtext3", + "type": "text", + "rect": [8, 58, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line2", + "alignment":"left" + }, + { + "key": "customtext4", + "type": "text", + "rect": [8, 76, 192, 17], + "font": { "size": 16, "weight": 500 }, + "value": "Next line 3", + "alignment":"left" + } + + ] +} diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/libs b/src/com.elgato.sample-textlayout-plugin.sdPlugin/libs new file mode 160000 index 0000000..e7b6a2b --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/libs @@ -0,0 +1 @@ +Subproject commit e7b6a2bca33ac3689daf9f421fdd491034912fdf diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/manifest.json b/src/com.elgato.sample-textlayout-plugin.sdPlugin/manifest.json new file mode 100644 index 0000000..614ba90 --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/manifest.json @@ -0,0 +1,54 @@ +{ + "Actions": [ + { + "Icon": "action/images/actionimage", + "Name": "Sample Custom Layout", + "States": [ + { + "Image": "action/images/image" + } + ], + "Controllers": [ + "Encoder" + ], + "Encoder": { + "layout": "layout/customlayout.json", + "Icon": "action/images/dialstack_background.svg", + "StackColor": "#0000FF", + "TriggerDescription": { + "Rotate": "unused", + "Push": "next example", + "Touch": "next example", + "LongTouch": "Unused" + } + }, + "SupportedInMultiActions": false, + "Tooltip": "How to use custom layouts.", + "UUID": "com.elgato.sample-textlayout.action" + } + ], + "SDKVersion": 2, + "Author": "Elgato", + "CodePath": "index.html", + "PropertyInspectorPath": "actions/property-inspector/inspector.html", + "Description": "Use a custom layout.", + "Category": "Samples", + "CategoryIcon": "category-samples", + "Name": "Sample Custom Layout", + "Icon": "pluginIcon", + "URL": "https://www.elgato.com/gaming/stream-deck", + "Version": "0.1.0.02", + "OS": [ + { + "Platform": "mac", + "MinimumVersion": "10.11" + }, + { + "Platform": "windows", + "MinimumVersion": "10" + } + ], + "Software": { + "MinimumVersion": "6" + } +} diff --git a/src/com.elgato.sample-textlayout-plugin.sdPlugin/pluginIcon.svg b/src/com.elgato.sample-textlayout-plugin.sdPlugin/pluginIcon.svg new file mode 100644 index 0000000..4a320e1 --- /dev/null +++ b/src/com.elgato.sample-textlayout-plugin.sdPlugin/pluginIcon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + +