From f75a18a95e92143c137ae7d7d94dd8fe6f678f5e Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Thu, 17 Jun 2021 10:35:22 -0500 Subject: [PATCH] Initial Commit --- .github/workflows/deploy.yml | 32 ++++ content/images/NovaStar-logo.png | Bin 0 -> 9303 bytes content/novastar.qplug | 277 +++++++++++++++++++++++++++++++ novastar.nuspec | 23 +++ 4 files changed, 332 insertions(+) create mode 100644 .github/workflows/deploy.yml create mode 100644 content/images/NovaStar-logo.png create mode 100644 content/novastar.qplug create mode 100644 novastar.nuspec diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..424a117 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,32 @@ +name: Deploy Package + +on: + push: + branches: + -master + tags: + - '*' + +jobs: + build: + + runs-on: windows-latest + + steps: + - name: Pull Source Files + uses: actions/checkout@v1 + + - name: Setup Nuget.exe + uses: warrenbuckley/Setup-Nuget@v1 + + - name: Update version in .qplug file + run: | + $TAG = $Env:GITHUB_REF.Replace("refs/tags/","") + # Will get exactly the first instance of a .qplug file + $QPLUG = (Get-ChildItem -Path "content" -Include *.qplug -Force -Recurse -File | Select-Object -First 1).Name + ((Get-Content -path content\$QPLUG -Raw) -replace '0.0.0.0-master',$TAG) | Set-Content content\$QPLUG + + + - name: Pack with nuget.exe + run: | + nuget pack -Version $Env:GITHUB_REF.Replace("refs/tags/","") diff --git a/content/images/NovaStar-logo.png b/content/images/NovaStar-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d8238278264f9c2eb10e31fd7ac1708ee52e93ec GIT binary patch literal 9303 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 YO#c`{D)KiIQ7{BhQP7mHmo<<0UmB2v82|tP literal 0 HcmV?d00001 diff --git a/content/novastar.qplug b/content/novastar.qplug new file mode 100644 index 0000000..c09944f --- /dev/null +++ b/content/novastar.qplug @@ -0,0 +1,277 @@ +-- Plugin for Lightware Devices by Solo Works London +-- Built in Lua +-- For source, contact https://soloworks.co.uk + +PluginInfo = { + Name = "NovaStar~VX4S/VX6S/ProHD/ProHDJr/MCTRL4K", -- The tilde here indicates folder structure in the Shematic Elements pane + Version = "0.0.0-master", + Id = "novastar.plugin.0.0.0-master", -- show this is just a unique id. Show some commented out 'fun' unique ids + Description = "Plugin for controlling NovaStar video wall controllers", + ShowDebug = true, + Author = "Joel Wetzell" +} + +-- Once you've drawn your plugin in Designer, you can determine what colors you use a lot. Save yourself some time by putting them in a table, and then simply calling them later. +local Colors = { + White = {255, 255, 255}, + Black = {0, 0, 0}, + Red = {255, 0, 0}, + Green = {0, 255, 0}, + Blue = {0, 0, 255} +} + +-- We can let users determine some of the plugin properties by exposing them here +-- While this function can be very useful, it is completely optional and not always needed. +-- If no Properties are set here, only the position and fill properties of your plugin will show in the Properties pane +function GetProperties() + props = { + { + Name = "host", + Type = "string", + Value = "127.0.0.1" + }, + { + Name = "port", + Type = "integer", + Min = 1024, + Max = 65535, + Value = 9990 + } + } + return props +end + +-- The below function is optional (like GetProperties() is), but it can allow further customization of what users can and can't do with your plugin. +-- In this example, when Model 1 is selected in the properties pane, the ability to modify some of the properties will be hidden, only allowing customization with Model 2 +-- Another application of this is if you have different input/output types for different models, and want those properties to be dynamic in the Properties pane +function RectifyProperties(props) + return props +end + +-- The below function is where you will populate the controls for your plugin. +-- If you've written some of the Runtime code already, simply use the control names you populated in Text Controller/Control Script, and use their Properties to inform the values here +-- ControlType can be Button, Knob, Indicator or Text +-- ButtonType ( ControlType == Button ) can be Momentary, Toggle or Trigger +-- IndicatorType ( ControlType == Indicator ) can be Led, Meter, Text or Status +-- ControlUnit ( ControlType == Knob ) can be Hz, Float, Integer, Pan, Percent, Position or Seconds +function GetControls(props) + ctls = { + -- ControlType == Indicator + { + Name = "IndicatorLed", + ControlType = "Indicator", + IndicatorType = "Led", + PinStyle = "Output", + UserPin = true + }, + { + Name = "IndicatorMeter", + ControlType = "Indicator", + IndicatorType = "Meter", + PinStyle = "Output", + UserPin = true + }, + { + Name = "IndicatorText", + ControlType = "Indicator", + IndicatorType = "Text", + PinStyle = "Output", + UserPin = true + }, + { + Name = "IndicatorStatus", + ControlType = "Indicator", + IndicatorType = "Status", + PinStyle = "Output", + UserPin = true + }, + -- ControlType == Button + { + Name = "ButtonMomentary", + ControlType = "Button", + ButtonType = "Toggle", + PinStyle = "Input", + Count = 1, + UserPin = true + }, + { + Name = "ButtonToggle", + ControlType = "Button", + ButtonType = "Toggle", + PinStyle = "Input", + Count = 1, + UserPin = true + }, + { + Name = "ButtonTrigger", + ControlType = "Button", + ButtonType = "Trigger", + PinStyle = "Input", + Count = 1, + UserPin = true + }, + -- ControlType == Knob + { + Name = "KnobHz", + ControlType = "Knob", + ControlUnit = "Hz", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobFloat", + ControlType = "Knob", + ControlUnit = "Float", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobInteger", + ControlType = "Knob", + ControlUnit = "Integer", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobPan", + ControlType = "Knob", + ControlUnit = "Pan", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobPercent", + ControlType = "Knob", + ControlUnit = "Percent", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobPosition", + ControlType = "Knob", + ControlUnit = "Position", + PinStyle = "Output", + Count = 1, + UserPin = true + }, + { + Name = "KnobSeconds", + ControlType = "Knob", + ControlUnit = "Seconds", + PinStyle = "Output", + Count = 1, + UserPin = true + } + } + return ctls +end + +-- Variable holding Page Names for ease +local pagenames = {"System"} + +-- This function allows you to populate pages in your plugin. +function GetPages(props) + pages = {} + table.insert(pages, {name = pagenames[1]}) + return pages +end + +-- This function allows you to layout pages in your plugin. +function GetControlLayout(props) + -- layout holds representaiton of Controls + local layout = {} + -- graphics holds aesthetic & design items + local graphics = {} + -- ctl_str is a helper string to get around system not indexing single value as [1] + --local ctl_str = tostring(props["SomeValue"].Value == 1 and "" or " " .. PageIndex) + -- x,y allows an easy method of knowing where you are relative to the section being designed + local x, y = 0, 0 + + -- Graphics Section + table.insert( + graphics, + { + Type = "GroupBox", -- This is the overall groupbox that will give the plugin a more 'contained' look + Text = "Design Elements", + HTextAlign = "Left", + Fill = Colors.White, + CornerRadius = 8, + StrokeColor = Colors.Black, + StrokeWidth = 1, + Position = {x, y}, + Size = {220, 140} -- The width of the main GroupBox is dependent on how many channels the user specified. More channels means a wider group box + } + ) + table.insert( + graphics, + { + Type = "Text", + Text = "My Text Field", + Font = "Roboto", + FontSize = 12, + FontStyle = "Bold", + HTextAlign = "Left", + Color = Colors.Black, + Position = {x + 5, y + 20}, + Size = {100, 20} + } + ) + -- Buttons Section + y = y + 150 + table.insert( + graphics, + { + Type = "GroupBox", -- This is the overall groupbox that will give the plugin a more 'contained' look + Text = "Button Elements", + HTextAlign = "Left", + Fill = Colors.White, + CornerRadius = 8, + StrokeColor = Colors.Black, + StrokeWidth = 1, + Position = {x, y}, + Size = {220, 140} -- The width of the main GroupBox is dependent on how many channels the user specified. More channels means a wider group box + } + ) + -- Indicator Section + y = y + 150 + table.insert( + graphics, + { + Type = "GroupBox", -- This is the overall groupbox that will give the plugin a more 'contained' look + Text = "Indicator Elements", + HTextAlign = "Left", + Fill = Colors.White, + CornerRadius = 8, + StrokeColor = Colors.Black, + StrokeWidth = 1, + Position = {x, y}, + Size = {220, 140} -- The width of the main GroupBox is dependent on how many channels the user specified. More channels means a wider group box + } + ) + -- Knob Section + y = y + 150 + table.insert( + graphics, + { + Type = "GroupBox", -- This is the overall groupbox that will give the plugin a more 'contained' look + Text = "Knob Elements", + HTextAlign = "Left", + Fill = Colors.White, + CornerRadius = 8, + StrokeColor = Colors.Black, + StrokeWidth = 1, + Position = {x, y}, + Size = {220, 140} -- The width of the main GroupBox is dependent on how many channels the user specified. More channels means a wider group box + } + ) + + return layout, graphics +end + +if Controls then +end diff --git a/novastar.nuspec b/novastar.nuspec new file mode 100644 index 0000000..129bd6e --- /dev/null +++ b/novastar.nuspec @@ -0,0 +1,23 @@ + + + + + NovaStar + 0.0.0.0-master + NovaStar Controller + Joel Wetzell + Joel Wetzell + GPL-3.0-or-later + https://github.com/jwetzell/q-sys-plugin-novastar + http://content/images/NovaStar-logo.png + false + NovaStar Controller Plugin + AutoGenerateFromGitCommitMessages + Copyright 2021 + NovaStar VX4S VX6S + A plugin for control of NovaStar Video Wall controllers + + + + + \ No newline at end of file