Skip to content

Commit

Permalink
Merge pull request #7 from maximiliani/dev
Browse files Browse the repository at this point in the history
Version 1.2.0
  • Loading branch information
maximiliani authored Feb 25, 2023
2 parents 3e34c4d + a28a1bb commit 8b88a5a
Show file tree
Hide file tree
Showing 22 changed files with 1,051 additions and 338 deletions.
38 changes: 34 additions & 4 deletions DMXEditor.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,17 @@
A711E41527BEE9CA009E1205 /* DMXEditorDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = A711E41427BEE9CA009E1205 /* DMXEditorDocument.swift */; };
A711E41927BEE9CB009E1205 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A711E41827BEE9CB009E1205 /* Assets.xcassets */; };
A711E41C27BEE9CB009E1205 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A711E41B27BEE9CB009E1205 /* Preview Assets.xcassets */; };
A74CC46D291E74D70069F387 /* Frame.swift in Sources */ = {isa = PBXBuildFile; fileRef = A74CC46C291E74D70069F387 /* Frame.swift */; };
A74CC471291E8E290069F387 /* FrameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A74CC470291E8E290069F387 /* FrameView.swift */; };
A74CC4772924F7E90069F387 /* DMXTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = A74CC4762924F7E90069F387 /* DMXTransition.swift */; };
A770FBAD285CF06800BBA4AF /* AppleScriptRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = A770FBAC285CF06800BBA4AF /* AppleScriptRunner.swift */; };
A7AAEE8727CD2AC400B7BBA7 /* OLAHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AAEE8627CD2AC400B7BBA7 /* OLAHandler.swift */; };
A7AAEE8927CD36EB00B7BBA7 /* GeneralSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AAEE8827CD36EB00B7BBA7 /* GeneralSettingsView.swift */; };
A7B0345729AA71C900CB9426 /* CurveEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B0345629AA71C900CB9426 /* CurveEditorView.swift */; };
A7B0345929AA7A1C00CB9426 /* StepPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B0345829AA7A1C00CB9426 /* StepPicker.swift */; };
A7E20048292E2DB700676956 /* CurveEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E20047292E2DB700676956 /* CurveEditor.swift */; };
A7E2004A292E2F1200676956 /* GeometryExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E20049292E2F1200676956 /* GeometryExtensions.swift */; };
A7E2004C292E2F1800676956 /* Dragging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E2004B292E2F1800676956 /* Dragging.swift */; };
A7E7BC2627BEEACE000A83BB /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC1927BEEACE000A83BB /* SettingsView.swift */; };
A7E7BC2727BEEACE000A83BB /* MultiSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC1A27BEEACE000A83BB /* MultiSlider.swift */; };
A7E7BC2827BEEACE000A83BB /* DMXData.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC1B27BEEACE000A83BB /* DMXData.swift */; };
Expand All @@ -23,7 +31,6 @@
A7E7BC2C27BEEACE000A83BB /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC1F27BEEACE000A83BB /* Settings.swift */; };
A7E7BC2D27BEEACE000A83BB /* NumberField.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC2027BEEACE000A83BB /* NumberField.swift */; };
A7E7BC2E27BEEACE000A83BB /* SingleSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC2127BEEACE000A83BB /* SingleSlider.swift */; };
A7E7BC2F27BEEACE000A83BB /* SlideView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC2227BEEACE000A83BB /* SlideView.swift */; };
A7E7BC3027BEEACE000A83BB /* Device.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC2327BEEACE000A83BB /* Device.swift */; };
A7E7BC3227BEEACE000A83BB /* RGBPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC2527BEEACE000A83BB /* RGBPicker.swift */; };
A7E7BC3627C13406000A83BB /* MultiSliderEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E7BC3527C13406000A83BB /* MultiSliderEditable.swift */; };
Expand All @@ -40,9 +47,17 @@
A711E41B27BEE9CB009E1205 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
A711E41D27BEE9CB009E1205 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A711E41E27BEE9CB009E1205 /* DMXEditor.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DMXEditor.entitlements; sourceTree = "<group>"; };
A74CC46C291E74D70069F387 /* Frame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Frame.swift; sourceTree = "<group>"; };
A74CC470291E8E290069F387 /* FrameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameView.swift; sourceTree = "<group>"; };
A74CC4762924F7E90069F387 /* DMXTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DMXTransition.swift; sourceTree = "<group>"; };
A770FBAC285CF06800BBA4AF /* AppleScriptRunner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppleScriptRunner.swift; sourceTree = "<group>"; };
A7AAEE8627CD2AC400B7BBA7 /* OLAHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OLAHandler.swift; sourceTree = "<group>"; };
A7AAEE8827CD36EB00B7BBA7 /* GeneralSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsView.swift; sourceTree = "<group>"; };
A7B0345629AA71C900CB9426 /* CurveEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurveEditorView.swift; sourceTree = "<group>"; };
A7B0345829AA7A1C00CB9426 /* StepPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepPicker.swift; sourceTree = "<group>"; };
A7E20047292E2DB700676956 /* CurveEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurveEditor.swift; sourceTree = "<group>"; };
A7E20049292E2F1200676956 /* GeometryExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeometryExtensions.swift; sourceTree = "<group>"; };
A7E2004B292E2F1800676956 /* Dragging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Dragging.swift; sourceTree = "<group>"; };
A7E7BC1927BEEACE000A83BB /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
A7E7BC1A27BEEACE000A83BB /* MultiSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiSlider.swift; sourceTree = "<group>"; };
A7E7BC1B27BEEACE000A83BB /* DMXData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DMXData.swift; sourceTree = "<group>"; };
Expand All @@ -52,7 +67,6 @@
A7E7BC1F27BEEACE000A83BB /* Settings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
A7E7BC2027BEEACE000A83BB /* NumberField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberField.swift; sourceTree = "<group>"; };
A7E7BC2127BEEACE000A83BB /* SingleSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleSlider.swift; sourceTree = "<group>"; };
A7E7BC2227BEEACE000A83BB /* SlideView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SlideView.swift; sourceTree = "<group>"; };
A7E7BC2327BEEACE000A83BB /* Device.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Device.swift; sourceTree = "<group>"; };
A7E7BC2527BEEACE000A83BB /* RGBPicker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RGBPicker.swift; sourceTree = "<group>"; };
A7E7BC3527C13406000A83BB /* MultiSliderEditable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiSliderEditable.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -115,12 +129,16 @@
A711E42427BEEA01009E1205 /* Models */ = {
isa = PBXGroup;
children = (
A7E20049292E2F1200676956 /* GeometryExtensions.swift */,
A7E2004B292E2F1800676956 /* Dragging.swift */,
A711E41427BEE9CA009E1205 /* DMXEditorDocument.swift */,
A7E7BC1D27BEEACE000A83BB /* ProjectData.swift */,
A7E7BC2327BEEACE000A83BB /* Device.swift */,
A7E7BC1B27BEEACE000A83BB /* DMXData.swift */,
A7E7BC1F27BEEACE000A83BB /* Settings.swift */,
A7E7BC1E27BEEACE000A83BB /* Slide.swift */,
A74CC46C291E74D70069F387 /* Frame.swift */,
A74CC4762924F7E90069F387 /* DMXTransition.swift */,
);
name = Models;
sourceTree = "<group>";
Expand All @@ -134,6 +152,9 @@
A7E7BC2127BEEACE000A83BB /* SingleSlider.swift */,
A7E7BC3527C13406000A83BB /* MultiSliderEditable.swift */,
A7E7BC3727C171E6000A83BB /* SingleSliderEditable.swift */,
A7E20047292E2DB700676956 /* CurveEditor.swift */,
A7B0345629AA71C900CB9426 /* CurveEditorView.swift */,
A7B0345829AA7A1C00CB9426 /* StepPicker.swift */,
);
name = Components;
sourceTree = "<group>";
Expand All @@ -143,9 +164,9 @@
children = (
A7E7BC1C27BEEACE000A83BB /* EditView.swift */,
A7E7BC1927BEEACE000A83BB /* SettingsView.swift */,
A7E7BC2227BEEACE000A83BB /* SlideView.swift */,
A7E7BC3927C2C48C000A83BB /* SlideEditView.swift */,
A7AAEE8827CD36EB00B7BBA7 /* GeneralSettingsView.swift */,
A74CC470291E8E290069F387 /* FrameView.swift */,
);
path = Views;
sourceTree = "<group>";
Expand Down Expand Up @@ -234,26 +255,33 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A7E2004C292E2F1800676956 /* Dragging.swift in Sources */,
A7E7BC3D27C5158E000A83BB /* KeynoteHandler.swift in Sources */,
A7AAEE8727CD2AC400B7BBA7 /* OLAHandler.swift in Sources */,
A711E41327BEE9CA009E1205 /* DMXEditorApp.swift in Sources */,
A7E7BC2827BEEACE000A83BB /* DMXData.swift in Sources */,
A7E7BC2627BEEACE000A83BB /* SettingsView.swift in Sources */,
A7B0345729AA71C900CB9426 /* CurveEditorView.swift in Sources */,
A7E7BC3227BEEACE000A83BB /* RGBPicker.swift in Sources */,
A74CC471291E8E290069F387 /* FrameView.swift in Sources */,
A7E7BC3A27C2C48C000A83BB /* SlideEditView.swift in Sources */,
A7E7BC3827C171E6000A83BB /* SingleSliderEditable.swift in Sources */,
A7E7BC2727BEEACE000A83BB /* MultiSlider.swift in Sources */,
A7E7BC2C27BEEACE000A83BB /* Settings.swift in Sources */,
A7E2004A292E2F1200676956 /* GeometryExtensions.swift in Sources */,
A7E7BC3027BEEACE000A83BB /* Device.swift in Sources */,
A74CC46D291E74D70069F387 /* Frame.swift in Sources */,
A7E7BC2927BEEACE000A83BB /* EditView.swift in Sources */,
A7B0345929AA7A1C00CB9426 /* StepPicker.swift in Sources */,
A7E7BC2E27BEEACE000A83BB /* SingleSlider.swift in Sources */,
A74CC4772924F7E90069F387 /* DMXTransition.swift in Sources */,
A7E20048292E2DB700676956 /* CurveEditor.swift in Sources */,
A711E41527BEE9CA009E1205 /* DMXEditorDocument.swift in Sources */,
A7E7BC2D27BEEACE000A83BB /* NumberField.swift in Sources */,
A7E7BC3627C13406000A83BB /* MultiSliderEditable.swift in Sources */,
A7AAEE8927CD36EB00B7BBA7 /* GeneralSettingsView.swift in Sources */,
A770FBAD285CF06800BBA4AF /* AppleScriptRunner.swift in Sources */,
A7E7BC2B27BEEACE000A83BB /* Slide.swift in Sources */,
A7E7BC2F27BEEACE000A83BB /* SlideView.swift in Sources */,
A7E7BC2A27BEEACE000A83BB /* ProjectData.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -404,6 +432,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 1.1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.inckmann.DMXEditor;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -438,6 +467,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 1.1.0;
PRODUCT_BUNDLE_IDENTIFIER = de.inckmann.DMXEditor;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down
42 changes: 42 additions & 0 deletions DMXEditor/CurveEditor.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//
// CurveEditor.swift
// DMXEditor
//
// Created by Maximilian Inckmann on 23.11.22.
//
import Foundation
import SwiftUI

struct CurveEditor: View {
@Binding var controlPoint0: RelativePoint
@Binding var controlPoint1: RelativePoint
@Binding var initialPoint0: CGSize
@Binding var initialPoint1: CGSize

var body: some View {
VStack {
HStack{
Text("Value")
.rotationEffect(Angle(degrees: 270))
.fixedSize()

CurveEditorView(controlPoint0: $controlPoint0, controlPoint1: $controlPoint1, initialPoint0: $initialPoint0, initialPoint1: $initialPoint1)
.border(.white)
.frame(maxWidth: 350, maxHeight: 350)
.aspectRatio(contentMode: .fit)
.padding(.trailing)

Spacer()
}

Text("Time")
}
.frame(width: 370, height: 350)
}
}

struct CurveEditor_Previews: PreviewProvider {
static var previews: some View {
CurveEditor(controlPoint0: .constant(.zero), controlPoint1: .constant(.zero), initialPoint0: .constant(.init(width: 0.4, height: 0.3)), initialPoint1: .constant(.init(width: 0.6, height: 0.6)))
}
}
96 changes: 96 additions & 0 deletions DMXEditor/CurveEditorView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
//
// CurveEditorView.swift
// DMXEditor
//
// Created by Maximilian Inckmann on 25.02.23.
//

import SwiftUI

struct CurveShape: Shape {
let cp0, cp1: RelativePoint
func path(in rect: CGRect) -> Path {
Path { p in
p.move(to: CGPoint(x: 0, y: rect.size.height))
p.addCurve(to: CGPoint(x: rect.size.width, y: 0),
control1: cp0 * rect.size,
control2: cp1 * rect.size)
}
}
}

struct ControlPointHandle: View {
private let size: CGFloat = 20
var body: some View {
Circle()
.frame(width: size, height: size)
.overlay(
Circle()
.stroke(Color.white, lineWidth: 2)
)
.offset(x: -size/2, y: -size/2)
}
}

struct CurveEditorView: View {
@State var offsetPoint0: CGSize = .zero
@State var offsetPoint1: CGSize = .zero
@Binding var controlPoint0: RelativePoint
@Binding var controlPoint1: RelativePoint
@Binding var initialPoint0: CGSize
@Binding var initialPoint1: CGSize

var curvePoint0: RelativePoint {
return (initialPoint0 + offsetPoint0).toPoint
}

var curvePoint1: RelativePoint {
return (initialPoint1 + offsetPoint1).toPoint
}

var body: some View {

let primaryColor = Color.blue
let secondaryColor = primaryColor.opacity(0.7)

return GeometryReader { reader in

CurveShape(cp0: self.curvePoint0, cp1: self.curvePoint1)
.stroke(primaryColor, lineWidth: 4)
.foregroundColor(.teal)

Path { p in
p.move(to: CGPoint(x: 0, y: 1 * reader.size.height))
p.addLine(to: self.curvePoint0 * reader.size)
}.stroke(secondaryColor, lineWidth: 2)

Path { p in
p.move(to: CGPoint(x: 1 * reader.size.width, y: 0))
p.addLine(to: self.curvePoint1 * reader.size)
}.stroke(secondaryColor, lineWidth: 2)

ControlPointHandle()
.offset(self.initialPoint0 * reader.size)
.foregroundColor(primaryColor)
.draggable(onChanged: { (size) in
self.offsetPoint0 = size / reader.size
self.controlPoint0 = self.curvePoint0
})

ControlPointHandle()
.offset(self.initialPoint1 * reader.size)
.foregroundColor(primaryColor)
.draggable(onChanged: { (size) in
self.offsetPoint1 = size / reader.size
self.controlPoint1 = self.curvePoint1
})
}
.aspectRatio(contentMode: .fit)
}
}

struct CurveEditorView_Previews: PreviewProvider {
static var previews: some View {
CurveEditorView(controlPoint0: .constant(.zero), controlPoint1: .constant(.zero), initialPoint0: .constant(.init(width: 0.8, height: 0.9)), initialPoint1: .constant(.init(width: 0.2, height: 0.1)))
}
}
16 changes: 14 additions & 2 deletions DMXEditor/DMXData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,20 @@ import Foundation

struct DMXData: Identifiable, Codable, Hashable {
var id = UUID()
var address: Int
var value: Int
var address: Int { didSet {
if(address > 511){
address = 511
} else if (address < 1){
address = 1
}
}}
var value: Int { didSet {
if(value > 255){
value = 255
} else if (value < 0){
value = 0
}
}}

static func getDefault() -> [DMXData]{
var result: [DMXData] = []
Expand Down
15 changes: 7 additions & 8 deletions DMXEditor/DMXEditorApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,20 @@ import SwiftUI
@main
struct DMXEditorApp: App {
@State private var showSettings = false
@State private var initialPopup = false
@State private var showEditor = false;
@State var controlPoint0: RelativePoint = .init(x: 0.1, y: 0.2)
@State var controlPoint1: RelativePoint = .init(x: 0.3, y: 0.4)
@State var initialPoint0: CGSize = .init(width: 0.1, height: 0.2)
@State var initialPoint1: CGSize = .init(width: 0.3, height: 0.4)

var body: some Scene {
DocumentGroup(newDocument: DMXEditorDocument()) { file in
if(showSettings == false){
EditView(showSettings: $showSettings, data: file.$document.documentData)
.frame(minWidth: 700)
.popover(isPresented: $initialPopup, content: {
VStack{
Text("HI")
}
})
.frame(minWidth: 1000)
} else {
SettingsView(showSettings: $showSettings, data: file.$document.documentData)
.frame(minWidth: 700)
.frame(minWidth: 900)
}
}
}
Expand Down
Loading

0 comments on commit 8b88a5a

Please sign in to comment.