From cfced043b4e28f0ebf5dcc9b8fdaebdce3837b03 Mon Sep 17 00:00:00 2001 From: Fluffik3666 <110257462+Fluffik3666@users.noreply.github.com> Date: Mon, 20 Oct 2025 18:44:00 -0400 Subject: [PATCH] feat: version 1.0.3 --- Promptly.xcodeproj/project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 163761 -> 162607 bytes .../xcschemes/xcschememanagement.plist | 4 +- Promptly/Helpers/MIDIHelpers.swift | 98 ++- Promptly/Models/Script.swift | 18 +- Promptly/Parser/Parser.swift | 11 +- .../Performance Mode/DSMScriptLineView.swift | 15 + .../LivePerforemanceView.swift | 24 +- .../Edit Contents/EditScriptView.swift | 815 ++++++++++++------ 9 files changed, 686 insertions(+), 303 deletions(-) diff --git a/Promptly.xcodeproj/project.pbxproj b/Promptly.xcodeproj/project.pbxproj index fa3a15c..1567add 100644 --- a/Promptly.xcodeproj/project.pbxproj +++ b/Promptly.xcodeproj/project.pbxproj @@ -431,7 +431,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0.2; + MARKETING_VERSION = 1.0.3; PRODUCT_BUNDLE_IDENTIFIER = com.urbanmechanicsltd.Promptly; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; @@ -475,7 +475,7 @@ LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 15.5; - MARKETING_VERSION = 1.0.2; + MARKETING_VERSION = 1.0.3; PRODUCT_BUNDLE_IDENTIFIER = com.urbanmechanicsltd.Promptly; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; diff --git a/Promptly.xcodeproj/project.xcworkspace/xcuserdata/sashabagrov.xcuserdatad/UserInterfaceState.xcuserstate b/Promptly.xcodeproj/project.xcworkspace/xcuserdata/sashabagrov.xcuserdatad/UserInterfaceState.xcuserstate index 06d2da3938e51d10c78fcf9d88f0750e295ec5cf..0ff106725b2f584b4df2661d5ff6e647224fffbb 100644 GIT binary patch literal 162607 zcmeFa2YeLO`aeA9%xsyN&9-bdyXnbpHoHJVdI(BMg(y9tmk^Q#0!cPx6FM?S0TmnA z=t>e$Kmk#T1r;nPpmb2|h=^FRD=5Ct%yJypZ)B{iiJ%i&v*z1CAb%SDdFU*V1J8Sb(yU#7#9nqmhR)|S+|1+>|~eNXX}h6<)El$DC75~$8pB9%lXQz=v` zl}4pg8B`Z)05y;rL={p+)L?1|HIy1g4W~v>wNxE7m6}FPr)E$ysae!)Y7TW1HJ7@B zx|6z#x|_O(x{q2$EvHsf_0(GG5$Z8&6ZI_h9JP~ro_c|LiF%pZOT9t8Nu8wLq28t5 zqu!@ZQ=d?0sn4i$)E|gK2w_Ac1}TsdsgN46h(kQmpb!*_!caJhK#?dGIZy|bh*D7+ z%0k&F2j!wXbR+76`l3QK1Pw)_(HK;M#-SSIMYX67O-0ktbTk9aM+?xc=r(jax(nTn z?nU>Z2hno00Yd*cFp1HKXW!F_Q* z+#e6X1MwhSh==15xEPn?Nq91@z?HZPPscOxOgszE#sa<*--Q?BC3pp1i5qYueiT23 zAIDqpHvA0Ui}&IE_znCfK7bG6L-;U$7r%$!#~(1~;solJM7ucNQ0yV2QnKHZDHk?u#2phwc9=+X2TdJ;XEuAnRF zD!P`gqi53d==t;ldJ(;tzL&m_ew1EEuctTAkI|3Q8|h8-X8H+wEB!S641JV7Mjxk7 z&~MRi((m#Jmyn5oP(W;!#2naRvz z<}wSITbbLKMa*L6US=h;ig}26m}z7lVKy+2F;6jDnQhE=W(V^$vy0iyyu`fByuut{ zjx+BuA2FwxkC{)Iv&sB z6^V)@MY5u+;yT6kihM;cMQ=rcqOW40VvwRxF;X!~FFX8Y*TDk>`*+dct-K8;swR4iamWRJ4jwg{i_-5voX4lqy;kqq3>&s#ujn)j^e{N>+7MU8lNU zm9Ofh>a8kJ^;Hd24Ofj&jZ}?NjaIo;<5d$>6IC^;87iWhuUep5sJdHquj)b7a@7je z!>ZM)r&Z6Wo>e`k+NpY8^@8d})h^X;)k~^9sy9^!R3}t#soqw7q&lVgSoNjqE7jMk zZ&cr_epdaWrqoD{)k?KiZBa+69qJD11a-1HUENhZNL{EdQV&)SQ4duQQx8{

)oP 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

&d$^y6&`+Po zd6K8u$qzx$*Li*21AT{cF>5e`zMtY=>30rcN>GZ*)TSN{X+%8Du#f#(kV1EQ(U*Z_ zFcjzXyO3MCk4Jd|HT8Rr4Q%2Swqg(Z{S*ZK>teS3`!Ry)%wj$==)Z)kkwO2*&}V-$ z>;D?t*uiehtN;6a$j5xc3GC2-LKL9_RjENO>Z8{IdL7UNeGbs$06h*+#{jb%a3f|g z!1)92Viocqa6b>B&jI=wV1EXvXTWyMV8A=y%2-4+{UW}5Ip*$6-jJc)DB;B0S?PR)4()E(wmJY}#eH7|VzY?{j-@wh> z!QGf$y89sgDW1jskZx}2+ptIJa!R*D=^ye52l+e*GD_h38RN)i9+%;qj2l^v>t(D% z?iqGGL+%-Sd5;e`fa_)GJ;Od^=y`AgL%9%j559yY$at`f2g`V{J_hS!us#Mq!P7j4 zvj(rneKq(cJ!0k43XoI-t;34 z`!QrJc4EjxvY10I^SA)@4pHwA^Bp3Op#>;SS;|uheGJ{mTgYMPXB^^dzT*de<|t|# z`WvT%U|2aSQW^6fR-JQE_b_!2vk$}6J*){$>BCfNLCyAD{ zrU$(-_Yv;55wabT$z*0Qn_SLEts~Sk!u3bUW`s;ex<5whXQXpRHlh`-H`2^T4q-U% zw~^=JdLvzLq*;wLtC0&?#FgB|7QW#yKVk+Woiox5Mw-D$=Zy+ckQ&sYF0vmb`%%sx zrN>dpbR>nY=y8;qM)gHKqvSqn4DO#%>KG;aQL-O(Icgbo6KjzBsQY=4=U9gwA0_)y zZ?KK+>)I- z1=)?6j@-t`YfK)OvJ`cXxshAAojZAwr`g12US%uqu$O(j&mq3%TVy^~4Pyr|kaULd zFdy(0r-DFa!MFkxrYOZJh5Kt<1u9bweU8)TIJu0o6XWzcPOsziI?i0irP7_An9Vr* zHf|{oA=h!{KfWSuF|+X(pwIDlv5I@R5BI|Ob-chvUPiy;xAHpr9lxKCIKUU^WxSrp z>v=*LbD7|r32K`lg9+v^K}{3-A&&|2n4s|q6Pbm3VZs8;VnQCvxSXrFmKCUHg6mH# zNhRtbhl$RasP~C!xZcD`%;Z91EXMUF+QW%ga~;>S8ap@fdw${w$2p0)WSUE60SaR- znRTd7ghn)>8O>2cW)Jk3smDyUWSV!Td1uNxb0kx+cbU^sU*=NOk$Drha2pTsEb`CP zZ{`NJ;58^y?wRkgpD(dznKI9mNv4`Jf9G@%WT`u=1f{VPa8^V_uUo$YvTdn8h6Casdl5ze(md=@R5VX%(CJJP0Ps zakAVd%Vu&edY}9hJJ8qU5BQh^=xy@P9OYMjLvJDsrkKeTy-le=WvWq&x-=kyx~F*X z6tzvU2U9LaO;eU&52jqh3T{L$Q#Rqe>~d5miafIAku8Vp!MI+w`DN=hTc6o^T*`9f zn|&3on=RXHeP=(!qpas8He;6AZ?X-2XYb+wM}lCgKBjgimG1PSF9R5a8m10oB=Vbj zJ`2#_)Qhm|Q`Iw7e^d1|^)~KgC2P2k2Y8lssB7wr?ByU|@D<;1oRgg5k03a&I3XS$^t*}ey>HoaPc!H;J=Cm3#LZ;KY(2bs$)wKTDv1xW}+E7L?nmNqn zeCD$dy-w5XG`&t+!g4N0-_suCb-oLN>FS-XuIVzHE~DwUqvz@Skook_IE0?3|Ac<0 z>vu*#0SZ%uFqNo|zGu{-A$pk+Pc!;56X(oO+YGxu!)wkAHO;t&>#*-LR&y^hnejaG zpYal#d4p~2U^jbE&rH{!>7JQ6oJq)GrgLWMedY>WZ{`C$$wppbE3P+lJ3Dy?bDrrw zoK=kS=xJ6}^fgN#v+Uk1yESVLGM^>$SqpI1Ec2Xo5BKvB_Ij4t&U%{X(90~n%yP!8 z_xOO1_=JPxpL>{NoZxr<2!h#h6r>Dlnq85~)F*^0oS3&?KvCd^{?tGvdWyp5U6-pwA~<(D9sQdko_wdL&O9ps+#0dmigd(QX##OWZ&EkqH_KDQ(lkaKP|YElcYH@U8#dk1zZ z_bImEoZMY}jO*nd;aCvNb&t$-&AF~Q*EQ#s!*%Dn?p%8{H;TUJ4rLq{u!tM6M{{L8 z*RIZ$*<5GLmGxZx%$4d}A*@}JiV z`!lZ{_Gg~l=gEEE00uIK$xLNBv&g|r=UvPtEMYm9qyBl1vL5x%Q~x~o+C2B}JhjhL z`@H>ph|K04;9wA(A5eqN3}+I)c>V(9a(*6{vXslXl51Fr-8%ms?&AR-;t?L>3C!yJ z13_?sEH2RF1=F~h*EkUb^JOtVnbyc*en(PBWhmpwVhZ+dz8vPOYkrKyEJN?}uj2-8 z;#O|wL7qbf^LJzS<{#o~zQfGs+n4$Ib^ONZAaLnmK~XAFh3cG39n5cmIv1#KL3eu5 zm;Q`o0%~2L)&*)^Fo(Iwa)ApkFt-IVTp+szcd!PzEqD-_EqEIBE?CD4Y{1+WnA?KG zoD716)u>5r)U&W5jff|KBwEsj_H?2P-RMa+X0UK3>RYJ3h3Z>4AN4J~2-z-_?Lyfu zljc;Vx0<2z(`VJ%$y!V%2E<1bu=J}#8|g`Wq(qDnNS6@8J}B0IjwYs;dc zc zP~XLi@P&)@d9gk(mTTTQ6r~s?F~>al^Yv#!(?+bqB2*=QSEDd$X#xkBvo@Xoj z*w05C;4==P_L%Hq>bpc;m#FKK!Z`nu;*_E+6{t*Ax+0rPZbYV+diWz36et!{~F#8#rr;vz9n($$oy|XUu2GQGVsOAXr)ib6x7}rIo0PewVs$mNp}i zWYn;<1D)x@0PN_}bcXN|d`nc{geJykCWzFfwNbJTkd%7$e zxh}haMdWcQ%W=OgyNYYj>oVsplku`GyoSD)z03Q!50-txK|bdvenIcc^uD|r5#mWe z&dXcVj*jSac{kjP%iV*^$07UWlThRGY0Th!)VN%Y%a?K)S8_EsvywI3$Adh=W2|Kp zudo%hFW<&?_HlsEIKBmhx1@wVumj4!O)@KJrs`u(kq~sfImWTbp_~Z>{;RmFZfUu9fN9 zp7fy~c4n=eS)0L7MqsDcj>YT4+KJ?GH*#6~MG&kjid|Wkj(XNzhy2zlWZin~+Par` zon7ofe(U!05uafG>*ToZE6ji0Nlpd9^Llw+@6Q*Z7_xj`-OsD_d9^*Srsp%6%v5G0 zkLS;40q(=+@5On~{~84ALzF}w>*cXt4(r?Edh62|%>-n-ehSl>iN4mm?)pnvjvm*W z&-yhyfL&j&=k-tXEbCa0omu}b-(ok`|HKiFa}qtipvM;qP#9UhU|uh%?}fV5$IM|T7I56M60(;(PT5cO_oin=zmrXB9l4c$<~2K%+4KQi7hA9-zX zFKyV1`+vhx%x7bWlDOVR^V!&(mgsY1ds0ZHJFdHND5Dt5G-hK?8_(xLE+WRItl(~* zVJ-UGxPeW)!dCRUQC%B%u$wRW2KV;H@A;8mI7WWGX1LJ|H~tX>FRA?{vwNun<8kIo z@_p%T%zaa7+$Wp*GMHhEWHghoXPeZ&N&TDVA*W3XS&rFlx)!tBbPKm*ew$XJ_Du&k z%n^>Gu1)HC*=$}uhcG25MQf&V1vjt?nY=8Mmu2y?dS7h7Xs_oT{yo{P&wNtOYg|r1K`G^CU-PS{V#ZmOJRW@5?^IC7z`I`J+8_5`)`Pv4Y^O~$* zdo>7NuSi|$(~w47$Yor?Rk)8{m)Gm^di^KN;dOI(!@j&R80Wmy z8~S;(JhgGoo6dPN!UC4zoHw2G=GExw&BHk7P3OF6Hg9z&9p}8|oVVou)&o4tT4eW@ z?6#Gp8Z|f-Ck@j zLpdr?nW>zQezrSndmfkItnD{*5BG8(>fWyI?fKVI`*yW&-^y#e&YSGxJ>KU7zT#`t zx!pam{RF@BM-c3YLrpshQ-ubY;f@H6Xhmz<(2kzyb4PFbG8}pC7|Cd+G99_?$YCz$ zb2&G23%7DR5AY~YAfFxUSkDH`eaD;F*&Uy95Sj0g`Hr9Y1+(2@hjtb~4?7ES4t8Z{ zC8|;bv)pNSb~dFM2_({q-RwnPJ7u-=W1P41bIf+JrutU4dcb6J=sbQBIcBx@kE$r?t`Rv(~Uyv(b-#+$s&PTt{N-seL;!CvkDg0J|N@A-)%9Oopbg1}RQ zcM4FLq7d}A*jrjoAedim#zNg0bob`TJ24dIVH`n*g_5BxlgSU7aweN3DH|*$s`>@|W>^GPF>e_D> z``5D}2tKf}9a8OMLJ?5Yu4(j2ceLZLnpSi|o6|f_pRiQfS z{p=$0xCGb#OkqfdUl!tCp2DtuX{KMw?khcfCC9I1_EiI- zEaygUMkZg~5d>eCLXTh9q!x8q%d2eVb?nkNjgj{^ZD~&@u4g5yxrh6M;M?-l#&y1} zPXw8Ldkxp&Ip3PexAOW{Cf~{Ay8`I_yT^HvjcnqTAUN##ht2wME85`f!_GYXC?0?K zN%Z}_=YL-geSdFu-&e()zF)x&IP-fwfByr&BSZfh{NU^#rgA>>S;$2}@MBrdMK3?< zi(r6=Jkure`(6)+>H8vxt+U$;7AqJbVNQ!8WGPj^m;_EM{dDmj~okvqk24AnQGKT zPe<*=QRf`>+@qd*G=U^q(ue+}F^CNGc2sXiM>CcQWHO1F%waC)lgDLT$u+FtM)Yu0 z4@cE?^a0H9sNRo0%{pFSBW8c}vmj7U}B&1NxjIVP85&OUYrcXJQ-@gNVgo(;UjHg>UxeSFBrd`f;@Kl4Wr99P$IbsbmN zadjQ9gi_ishf)8pNBNagL2yFOC+x_HLfEGh zay;Rj6Y4rKim|BaL^jhf?-O&#3R7|2 zlMA_sJg#B|_U7a*IOpWutj6q4+L@D^*vor-fF4hp(Mfro{E~0b?@6_t{3Qr}li_d0 zC_yR8V1~b$;csgGtr|6{MIAaZhD&hfZ?E%x5d2=2=A<#5dCccRF2cV3el6E?6Sr~) zcd?R3d5ULQ#|HHB`zvhWU=W-tgmX@*?UemGRRcAhs!v1g*QwUDL$;>|FbEl+8itvj znt+T?$@r9vPpRjW>z_Kr5Bwekr{!?kIj8l0I)dw+?ugfb)A~D|&JadoZl}lLx~J{n zX}z9y&C_~3t;f@PJZ(m&S9329;NCj@7*Dd5H+YM;*}-ni@U;8v^!t3s#~k2mzC*32 zf8t~i{9#Z3D8xAw#XSEo&p%}J$GOPpkNPwso&*w+%O7*Nn5A6Cm0W}R|4{!Q>i

  • B$DHEPg=X0#`TuJoWU{TWC)6PU?jmT@^( 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 BRc`VLK0GymI|RuLN6gC3j{(oW)q5t%(Y;{ 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 diff --git a/Promptly.xcodeproj/xcuserdata/sashabagrov.xcuserdatad/xcschemes/xcschememanagement.plist b/Promptly.xcodeproj/xcuserdata/sashabagrov.xcuserdatad/xcschemes/xcschememanagement.plist index ac39bd4..da72113 100644 --- a/Promptly.xcodeproj/xcuserdata/sashabagrov.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Promptly.xcodeproj/xcuserdata/sashabagrov.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,12 +7,12 @@ Promptly-WatchOS Watch App.xcscheme_^#shared#^_ orderHint - 1 + 3 Promptly.xcscheme_^#shared#^_ orderHint - 0 + 2 diff --git a/Promptly/Helpers/MIDIHelpers.swift b/Promptly/Helpers/MIDIHelpers.swift index 628e16a..ce44fb0 100644 --- a/Promptly/Helpers/MIDIHelpers.swift +++ b/Promptly/Helpers/MIDIHelpers.swift @@ -2,18 +2,14 @@ // MIDIHelper.swift // MIDIKit • https://github.com/orchetect/MIDIKit // © 2021-2025 Steffan Andrews • Licensed under MIT License -// +// Edited by Sasha Bagrov - 20/10/2025 import MIDIKitIO import SwiftUI -/// Receiving MIDI happens on an asynchronous background thread. That means it cannot update -/// SwiftUI view state directly. Therefore, we need a helper class marked with `@Observable` -/// which contains properties that SwiftUI can use to update views. @Observable final class MIDIHelper { private weak var midiManager: ObservableMIDIManager? - // MIDI Action Types (matching your existing remote actions) enum RemoteAction: String, CaseIterable { case nextLine = "Next Line" case previousLine = "Previous Line" @@ -21,10 +17,7 @@ import SwiftUI case none = "None" } - // User-configurable mapping: Program Change number -> Action var programChangeMapping: [Int: RemoteAction] = [:] - - // Callback to execute remote functions (same pattern as bluetoothManager) var onButtonPress: ((String) -> Void)? public init() { } @@ -42,42 +35,58 @@ import SwiftUI setupConnections() } + // MARK: - Connection Names + static let universalInputConnectionName = "Universal MIDI Input" + static let usbOutputConnectionName = "USB MIDI Output" + static let bleOutputConnectionName = "BLE MIDI Output" + private func setupConnections() { guard let midiManager else { return } do { + print("Creating universal MIDI input connection.") try midiManager.addInputConnection( to: .allOutputs, - tag: "Listener", + tag: Self.universalInputConnectionName, filter: .owned(), - receiver: .events { [weak self] events,_,_ in + receiver: .events { [weak self] events, timeStamp, source in + print("MIDI from source: \(source)") self?.handleMIDIEvents(events) } ) - } catch { - print("Error setting up MIDI connection:", error.localizedDescription) - } - - // Keep your broadcaster - do { + + print("Creating USB MIDI output connection.") + try midiManager.addOutputConnection( + to: .inputs(matching: [.name("IDAM MIDI Host")]), + tag: Self.usbOutputConnectionName + ) + + print("Creating BLE MIDI output connection.") try midiManager.addOutputConnection( to: .allInputs, - tag: "Broadcaster", + tag: Self.bleOutputConnectionName, filter: .owned() ) + } catch { - print("Error setting up broadcaster connection:", error.localizedDescription) + print("Error setting up MIDI connections:", error.localizedDescription) } } + // MARK: - Event Handling private func handleMIDIEvents(_ events: [MIDIEvent]) { for event in events { switch event { case .programChange(let programChange): handleProgramChange(program: programChange.program, channel: programChange.channel) + case .noteOn(let noteOn): + print("Note On: \(noteOn.note) velocity: \(noteOn.velocity)") + case .noteOff(let noteOff): + print("Note Off: \(noteOff.note)") + case .cc(let cc): + print("CC: \(cc.controller) value: \(cc.value)") default: - // Log other events for debugging - print("MIDI Event: \(event)") + print("Other MIDI Event: \(event)") } } } @@ -85,7 +94,6 @@ import SwiftUI private func handleProgramChange(program: UInt7, channel: UInt4) { let programInt = Int(program) - // Only handle program changes 0-32 guard programInt <= 32 else { print("Program change \(programInt) out of range (0-32)") return @@ -93,7 +101,6 @@ import SwiftUI print("Received PC \(programInt) on channel \(channel)") - // Check if user has mapped this program change to an action guard let action = programChangeMapping[programInt], action != .none else { print("No action mapped for PC \(programInt)") @@ -102,26 +109,20 @@ import SwiftUI print("Executing MIDI action: \(action.rawValue)") - // Convert to the same format as your Bluetooth remote let buttonValue: String switch action { - case .previousLine: - buttonValue = "0" - case .nextLine: - buttonValue = "1" - case .goCue: - buttonValue = "2" - case .none: - return + case .previousLine: buttonValue = "0" + case .nextLine: buttonValue = "1" + case .goCue: buttonValue = "2" + case .none: return } - // Execute on main thread using the same callback pattern DispatchQueue.main.async { self.onButtonPress?(buttonValue) } } - // Configuration methods + // MARK: - Configuration func mapProgramChange(_ program: Int, to action: RemoteAction) { guard program >= 0 && program <= 32 else { return } programChangeMapping[program] = action @@ -132,8 +133,33 @@ import SwiftUI programChangeMapping[program] = .none } - func sendTestMIDIEvent() { - let conn = midiManager?.managedOutputConnections["Broadcaster"] - try? conn?.send(event: .cc(.expression, value: .midi1(64), channel: 0)) + // MARK: - Output Methods + var usbOutputConnection: MIDIOutputConnection? { + midiManager?.managedOutputConnections[Self.usbOutputConnectionName] + } + + var bleOutputConnection: MIDIOutputConnection? { + midiManager?.managedOutputConnections[Self.bleOutputConnectionName] + } + + func sendNoteOnUSB() { + try? usbOutputConnection?.send(event: .noteOn(60, velocity: .midi1(127), channel: 0)) + } + + func sendNoteOffUSB() { + try? usbOutputConnection?.send(event: .noteOff(60, velocity: .midi1(0), channel: 0)) + } + + func sendCC1USB() { + try? usbOutputConnection?.send(event: .cc(1, value: .midi1(64), channel: 0)) + } + + func sendTestMIDIEventBLE() { + try? bleOutputConnection?.send(event: .cc(.expression, value: .midi1(64), channel: 0)) + } + + func sendToAll(event: MIDIEvent) { + try? usbOutputConnection?.send(event: event) + try? bleOutputConnection?.send(event: event) } } diff --git a/Promptly/Models/Script.swift b/Promptly/Models/Script.swift index ca9f5d3..bf27fd8 100644 --- a/Promptly/Models/Script.swift +++ b/Promptly/Models/Script.swift @@ -75,16 +75,18 @@ class ScriptLine: Identifiable { var id: UUID var lineNumber: Int var content: String // Raw text content + var flags: [ScriptLineFlags] = [] @Relationship(deleteRule: .cascade) var elements: [LineElement] = [] @Relationship(deleteRule: .cascade) var cues: [Cue] = [] var isMarked: Bool = false var markColor: String? // Hex color for line marking var notes: String = "" - init(id: UUID, lineNumber: Int, content: String) { + init(id: UUID, lineNumber: Int, content: String, flags: [ScriptLineFlags]) { self.id = id self.lineNumber = lineNumber self.content = content + self.flags = flags // Parse content after initialization DispatchQueue.main.async { self.parseContentIntoElements() @@ -115,6 +117,11 @@ class ScriptLine: Identifiable { } } +enum ScriptLineFlags: String, CaseIterable, Codable { + case stageDirection = "stageDirection" + case skip = "skip" +} + @Model class LineElement: Identifiable { var id: UUID @@ -262,6 +269,7 @@ extension ScriptLine { "id": id.uuidString, "lineNumber": lineNumber, "content": content, + "flags": flags.map { $0.rawValue }, // Convert enum cases to strings "elements": elements.map { $0.toDictionary() }, "cues": cues.map { $0.toDictionary() }, "isMarked": isMarked, @@ -351,7 +359,13 @@ extension ScriptLine { return nil } - self.init(id: id, lineNumber: lineNumber, content: content) + // Parse flags from dictionary + var flags: [ScriptLineFlags] = [] + if let flagsArray = dict["flags"] as? [String] { + flags = flagsArray.compactMap { ScriptLineFlags(rawValue: $0) } + } + + self.init(id: id, lineNumber: lineNumber, content: content, flags: flags) if let elementsArray = dict["elements"] as? [[String: Any]] { self.elements = elementsArray.compactMap { LineElement(from: $0) } diff --git a/Promptly/Parser/Parser.swift b/Promptly/Parser/Parser.swift index 4bb185e..a4e6ddc 100644 --- a/Promptly/Parser/Parser.swift +++ b/Promptly/Parser/Parser.swift @@ -110,10 +110,19 @@ class PDFScriptParser: ObservableObject { // Convert to ScriptLine objects for (index, lineText) in scriptLines.enumerated() { + // Auto-detect flags based on line type + let lineType = detectLineType(lineText) + var flags: [ScriptLineFlags] = [] + + if lineType == .stageDirection { + flags.append(.stageDirection) + } + let scriptLine = ScriptLine( id: UUID(), lineNumber: index + 1, - content: lineText + content: lineText, + flags: flags ) script.lines.append(scriptLine) } diff --git a/Promptly/Views/Performance Mode/DSMScriptLineView.swift b/Promptly/Views/Performance Mode/DSMScriptLineView.swift index f29adf3..95da5f0 100644 --- a/Promptly/Views/Performance Mode/DSMScriptLineView.swift +++ b/Promptly/Views/Performance Mode/DSMScriptLineView.swift @@ -13,6 +13,16 @@ struct DSMScriptLineView: View { let onLineTap: () -> Void let calledCues: Set + private let isStageDirection: Bool + + init(line: ScriptLine, isCurrent: Bool, onLineTap: @escaping () -> Void, calledCues: Set) { + self.line = line + self.isCurrent = isCurrent + self.onLineTap = onLineTap + self.calledCues = calledCues + self.isStageDirection = line.flags.contains(.stageDirection) + } + var body: some View { VStack(alignment: .leading, spacing: 8) { Button(action: onLineTap) { @@ -62,6 +72,7 @@ struct DSMScriptLineView: View { return Text(buildLineWithCues(words: words, cuesByIndex: cuesByIndex)) .font(.body) + .italic(isStageDirection) .foregroundColor(isCurrent ? .black : .primary) } @@ -84,6 +95,10 @@ struct DSMScriptLineView: View { } var wordAttr = AttributedString(word + " ") + + if isStageDirection { + wordAttr.inlinePresentationIntent = .emphasized + } result += wordAttr } diff --git a/Promptly/Views/Performance Mode/LivePerforemanceView.swift b/Promptly/Views/Performance Mode/LivePerforemanceView.swift index 831c8a7..ac64afa 100644 --- a/Promptly/Views/Performance Mode/LivePerforemanceView.swift +++ b/Promptly/Views/Performance Mode/LivePerforemanceView.swift @@ -1678,8 +1678,28 @@ extension DSMPerformanceView { private func moveToLine(_ lineNumber: Int) { guard lineNumber >= 1 && lineNumber <= sortedLinesCache.count else { return } - currentLineNumber = lineNumber - self.mqttManager.sendData(to: "shows/\(self.uuidOfShow)/line", message: String(lineNumber)) + + var targetLineNumber = lineNumber + let isMovingForward = targetLineNumber > currentLineNumber + + while targetLineNumber >= 1 && targetLineNumber <= sortedLinesCache.count { + let targetLine = sortedLinesCache[targetLineNumber - 1] + + if targetLine.flags.contains(.skip) { + if isMovingForward { + targetLineNumber += 1 + } else { + targetLineNumber -= 1 + } + } else { + break + } + } + + targetLineNumber = max(1, min(targetLineNumber, sortedLinesCache.count)) + + currentLineNumber = targetLineNumber + self.mqttManager.sendData(to: "shows/\(self.uuidOfShow)/line", message: String(targetLineNumber)) } private func logCall(_ message: String, type: CallLogEntry.CallType = .note) { diff --git a/Promptly/Views/Scripts/Edit Contents/EditScriptView.swift b/Promptly/Views/Scripts/Edit Contents/EditScriptView.swift index 6da9142..6893677 100644 --- a/Promptly/Views/Scripts/Edit Contents/EditScriptView.swift +++ b/Promptly/Views/Scripts/Edit Contents/EditScriptView.swift @@ -38,6 +38,8 @@ struct EditScriptView: View { @State private var pendingSectionNotes = "" @State private var showingLineConfirmation = false @State private var selectedLineForSection: ScriptLine? + @State private var showingFlagEditor = false + @State private var lineBeingFlagged: ScriptLine? @StateObject private var refreshTrigger = RefreshTrigger() var sortedLines: [ScriptLine] { @@ -48,6 +50,12 @@ struct EditScriptView: View { script.sections.sorted { $0.startLineNumber < $1.startLineNumber } } + var selectedLinesArray: [ScriptLine] { + selectedLines.compactMap { id in + sortedLines.first { $0.id == id } + } + } + var body: some View { VStack(spacing: 0) { if isSelectingLineForSection { @@ -111,6 +119,19 @@ struct EditScriptView: View { renumberLines() } } + .sheet(isPresented: $showingFlagEditor) { + if selectedLines.count == 1, let line = lineBeingFlagged { + FlagEditorView(line: line) { + try? modelContext.save() + refreshTrigger.refresh() + } + } else if selectedLines.count > 1 { + BulkFlagEditorView(lines: selectedLinesArray) { + try? modelContext.save() + refreshTrigger.refresh() + } + } + } .sheet(isPresented: $showingAddSection) { SectionDetailsView( pendingTitle: $pendingSectionTitle, @@ -232,173 +253,72 @@ struct EditScriptView: View { .foregroundColor(.blue) } + Button("Edit Flags") { + // For single line, set the line. For multiple, set to nil for bulk mode + if selectedLines.count == 1, + let lineId = selectedLines.first, + let line = sortedLines.first(where: { $0.id == lineId }) { + lineBeingFlagged = line + } else { + lineBeingFlagged = nil // Bulk mode + } + showingFlagEditor = true + } + .foregroundColor(.purple) + Button("Delete") { - checkForCuesBeforeDelete() + confirmDelete() } .foregroundColor(.red) } - Divider() - .frame(height: 20) - - Button("Add Line") { - showingAddLine = true - } - - Button("Add Section") { - showingAddSection = true - } + Spacer() } .padding(.horizontal) } .padding(.vertical, 8) - .background(Color(.secondarySystemBackground)) + .background(Color(.systemGroupedBackground)) } private var scriptContentView: some View { - ScrollViewReader { proxy in - ScrollView { - LazyVStack(alignment: .leading, spacing: 8) { - ForEach(groupLinesBySection(), id: \.stableId) { group in - if let section = group.section { - SectionHeaderView(section: section) - .id("section-\(section.id)") + ScrollView { + LazyVStack(spacing: 8) { + ForEach(sortedLines, id: \.id) { line in + EditableScriptLineView( + line: line, + isEditing: isEditing, + isSelected: selectedLines.contains(line.id), + isEditingText: editingLineId == line.id, + isSelectingForSection: isSelectingLineForSection, + editingText: $editingText + ) { selectedLine in + if isSelectingLineForSection { + selectedLineForSection = selectedLine + showingLineConfirmation = true + isSelectingLineForSection = false + } else { + toggleLineSelection(selectedLine) } - - ForEach(group.lines, id: \.id) { line in - scriptLineView(for: line) - .id("line-\(line.id)") - } - } - } - .padding() - } - .onReceive(NotificationCenter.default.publisher(for: NSNotification.Name("ScrollToSection"))) { notification in - if let sectionId = notification.object as? UUID { - withAnimation(.easeInOut(duration: 0.5)) { - proxy.scrollTo("section-\(sectionId)", anchor: .top) + } onStartTextEdit: { lineToEdit in + startEditing(line: lineToEdit) + } onFinishTextEdit: { newText in + finishEditing(newText: newText) + } onInsertAfter: { lineToInsertAfter in + insertAfterLineNumber = lineToInsertAfter.lineNumber + showingAddLine = true + } onEditFlags: { lineToFlag in + lineBeingFlagged = lineToFlag + showingFlagEditor = true } } } + .padding() } } - private func scriptLineView(for line: ScriptLine) -> some View { - EditableScriptLineView( - line: line, - isEditing: isEditing, - isSelected: selectedLines.contains(line.id), - isEditingText: editingLineId == line.id, - isSelectingForSection: isSelectingLineForSection, - editingText: $editingText, - onToggleSelection: { line in - if isSelectingLineForSection { - selectLineForSection(line: line) - } else { - toggleLineSelection(line: line) - } - refreshTrigger.refresh() - }, - onStartTextEdit: { line in - startTextEditing(line: line) - }, - onFinishTextEdit: { newText in - finishTextEditing(newText: newText) - refreshTrigger.refresh() - }, - onInsertAfter: { line in - insertAfterLineNumber = line.lineNumber - showingAddLine = true - } - ) - } -} - -// MARK: - EditScriptView Extension for Alerts and Sheets -extension EditScriptView { - private struct LineGroup { - let section: ScriptSection? - let lines: [ScriptLine] - - var stableId: String { - if let section = section { - return "section-\(section.id)" - } else { - let lineIds = lines.map { $0.id.uuidString }.joined(separator: "-") - return "unsectioned-\(lineIds.hashValue)" - } - } - } + // MARK: - Actions - private func groupLinesBySection() -> [LineGroup] { - let currentSortedLines = script.lines.sorted { $0.lineNumber < $1.lineNumber } - let currentSortedSections = script.sections.sorted { $0.startLineNumber < $1.startLineNumber } - - var groups: [LineGroup] = [] - var lineIndex = 0 - var sectionIndex = 0 - - while lineIndex < currentSortedLines.count { - let currentLine = currentSortedLines[lineIndex] - - // Check if we're at the start of a section - if sectionIndex < currentSortedSections.count && - currentLine.lineNumber >= currentSortedSections[sectionIndex].startLineNumber { - - let section = currentSortedSections[sectionIndex] - var sectionLines: [ScriptLine] = [] - - // Determine section end - either explicit end or start of next section - let sectionEnd: Int - if let explicitEnd = section.endLineNumber { - sectionEnd = explicitEnd - } else if sectionIndex + 1 < currentSortedSections.count { - sectionEnd = currentSortedSections[sectionIndex + 1].startLineNumber - 1 - } else { - sectionEnd = Int.max // No end, goes to end of script - } - - // Collect all lines for this section - while lineIndex < currentSortedLines.count && - currentSortedLines[lineIndex].lineNumber >= section.startLineNumber && - currentSortedLines[lineIndex].lineNumber <= sectionEnd { - sectionLines.append(currentSortedLines[lineIndex]) - lineIndex += 1 - } - - if !sectionLines.isEmpty { - groups.append(LineGroup(section: section, lines: sectionLines)) - } - - sectionIndex += 1 - } else { - // Handle unsectioned lines - var unsectionedGroup: [ScriptLine] = [] - - // Collect consecutive unsectioned lines - while lineIndex < currentSortedLines.count { - let line = currentSortedLines[lineIndex] - - // Stop if we hit the start of a section - if sectionIndex < currentSortedSections.count && - line.lineNumber >= currentSortedSections[sectionIndex].startLineNumber { - break - } - - unsectionedGroup.append(line) - lineIndex += 1 - } - - if !unsectionedGroup.isEmpty { - groups.append(LineGroup(section: nil, lines: unsectionedGroup)) - } - } - } - - return groups - } - - private func toggleLineSelection(line: ScriptLine) { + private func toggleLineSelection(_ line: ScriptLine) { if selectedLines.contains(line.id) { selectedLines.remove(line.id) } else { @@ -406,157 +326,121 @@ extension EditScriptView { } } - private func startTextEditing(line: ScriptLine) { + private func startEditing(line: ScriptLine) { editingLineId = line.id editingText = line.content } - private func combineSelectedLines() { - let linesToCombine = selectedLines.compactMap { lineId in - script.lines.first { $0.id == lineId } - }.sorted { $0.lineNumber < $1.lineNumber } - - guard linesToCombine.count > 1 else { return } + private func finishEditing(newText: String) { + if let lineId = editingLineId, + let line = script.lines.first(where: { $0.id == lineId }) { + line.content = newText + line.parseContentIntoElements() + try? modelContext.save() + } + editingLineId = nil + editingText = "" + } + + private func confirmDelete() { + linesToDelete = selectedLines.compactMap { id in + script.lines.first { $0.id == id } + } - let firstLine = linesToCombine[0] - let combinedText = linesToCombine.map { $0.content }.joined(separator: " ") + let hasLinesWithCues = linesToDelete.contains { !$0.cues.isEmpty } - var allCues: [Cue] = [] - for line in linesToCombine { - allCues.append(contentsOf: line.cues) + if hasLinesWithCues { + showingCueWarning = true + } else { + showingDeleteAlert = true + } + } + + private func deleteSelectedLines() { + let linesToRemove = selectedLines.compactMap { id in + script.lines.first { $0.id == id } } - firstLine.content = combinedText - firstLine.parseContentIntoElements() - firstLine.cues.append(contentsOf: allCues) - - for line in linesToCombine.dropFirst() { + for line in linesToRemove { script.lines.removeAll { $0.id == line.id } modelContext.delete(line) } selectedLines.removeAll() + linesToDelete.removeAll() renumberLines() - try? modelContext.save() - refreshTrigger.refresh() } - private func getNextSectionStartLine() -> Int { - if let lastSelected = selectedLines.compactMap({ lineId in - script.lines.first { $0.id == lineId } - }).max(by: { $0.lineNumber < $1.lineNumber }) { - return lastSelected.lineNumber + private func combineSelectedLines() { + let linesToCombine = selectedLines.compactMap { id in + script.lines.first { $0.id == id } + }.sorted { $0.lineNumber < $1.lineNumber } + + guard let firstLine = linesToCombine.first else { return } + + let combinedContent = linesToCombine.map { $0.content }.joined(separator: " ") + let allCues = linesToCombine.flatMap { $0.cues } + let allFlags = Array(Set(linesToCombine.flatMap { $0.flags })) + + firstLine.content = combinedContent + firstLine.flags = allFlags + firstLine.parseContentIntoElements() + + for cue in allCues { + cue.lineId = firstLine.id } - return sortedLines.last?.lineNumber ?? 1 - } - - private func selectLineForSection(line: ScriptLine) { - selectedLineForSection = line - showingLineConfirmation = true + + let linesToRemove = Array(linesToCombine.dropFirst()) + for line in linesToRemove { + script.lines.removeAll { $0.id == line.id } + modelContext.delete(line) + } + + selectedLines.removeAll() + renumberLines() + try? modelContext.save() } private func createSectionWithSelectedLine() { - guard let line = selectedLineForSection else { return } + guard let selectedLine = selectedLineForSection else { return } - let section = ScriptSection( + let newSection = ScriptSection( id: UUID(), title: pendingSectionTitle, type: pendingSectionType, - startLineNumber: line.lineNumber + startLineNumber: selectedLine.lineNumber ) - section.notes = pendingSectionNotes - script.sections.append(section) + script.sections.append(newSection) - isSelectingLineForSection = false selectedLineForSection = nil + isSelectingLineForSection = false pendingSectionTitle = "" pendingSectionNotes = "" try? modelContext.save() - refreshTrigger.refresh() - } - - private func finishTextEditing(newText: String) { - guard let lineId = editingLineId, - let line = script.lines.first(where: { $0.id == lineId }) else { return } - - if line.content != newText { - if !line.cues.isEmpty { - line.content = newText - line.parseContentIntoElements() - } else { - line.content = newText - line.parseContentIntoElements() - } - } - - editingLineId = nil - editingText = "" - } - - private func checkForCuesBeforeDelete() { - linesToDelete = selectedLines.compactMap { lineId in - script.lines.first { $0.id == lineId } - } - - let linesWithCues = linesToDelete.filter { !$0.cues.isEmpty } - - if !linesWithCues.isEmpty { - showingCueWarning = true - } else { - showingDeleteAlert = true - } - } - - private func deleteSelectedLines() { - let lineIdsToDelete = Array(selectedLines) - - for lineId in lineIdsToDelete { - if let line = script.lines.first(where: { $0.id == lineId }) { - script.lines.removeAll { $0.id == lineId } - modelContext.delete(line) - } - } - - selectedLines.removeAll() - linesToDelete.removeAll() - renumberLines() - - try? modelContext.save() - refreshTrigger.refresh() } private func renumberLines() { - let sorted = script.lines.sorted { $0.lineNumber < $1.lineNumber } - for (index, line) in sorted.enumerated() { + let sortedLines = script.lines.sorted { $0.lineNumber < $1.lineNumber } + for (index, line) in sortedLines.enumerated() { line.lineNumber = index + 1 } + try? modelContext.save() } - private func resetEditingState() { + private func saveChanges() { + try? modelContext.save() isEditing = false selectedLines.removeAll() - editingLineId = nil - editingText = "" - isSelectingLineForSection = false - selectedLineForSection = nil - - refreshTrigger.refresh() } private func cancelEditing() { - resetEditingState() - } - - private func saveChanges() { - do { - try modelContext.save() - resetEditingState() - } catch { - print("Failed to save: \(error)") - } + isEditing = false + selectedLines.removeAll() + editingLineId = nil + editingText = "" } } @@ -572,6 +456,7 @@ struct EditableScriptLineView: View { let onStartTextEdit: (ScriptLine) -> Void let onFinishTextEdit: (String) -> Void let onInsertAfter: (ScriptLine) -> Void + let onEditFlags: (ScriptLine) -> Void var body: some View { HStack(alignment: .top, spacing: 12) { @@ -613,6 +498,15 @@ struct EditableScriptLineView: View { .disabled(!(isEditing || isSelectingForSection)) } + // Flag indicators + if !line.flags.isEmpty { + HStack(spacing: 4) { + ForEach(line.flags, id: \.self) { flag in + flagBadge(for: flag) + } + } + } + if !line.cues.isEmpty { HStack(spacing: 4) { Image(systemName: "exclamationmark.triangle.fill") @@ -628,6 +522,11 @@ struct EditableScriptLineView: View { if isEditing && isSelected { VStack(spacing: 4) { + Button(action: { onEditFlags(line) }) { + Image(systemName: "flag") + .foregroundColor(.purple) + } + Button(action: { onInsertAfter(line) }) { Image(systemName: "plus.circle") .foregroundColor(.blue) @@ -648,6 +547,47 @@ struct EditableScriptLineView: View { ) } + private func flagBadge(for flag: ScriptLineFlags) -> some View { + HStack(spacing: 2) { + Image(systemName: iconForFlag(flag)) + .font(.caption2) + Text(labelForFlag(flag)) + .font(.caption2) + } + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(colorForFlag(flag)) + .foregroundColor(.white) + .cornerRadius(4) + } + + private func iconForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "theatermasks" + case .skip: + return "forward.fill" + } + } + + private func labelForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Stage" + case .skip: + return "Skip" + } + } + + private func colorForFlag(_ flag: ScriptLineFlags) -> Color { + switch flag { + case .stageDirection: + return .purple + case .skip: + return .red + } + } + private var backgroundColorForLine: Color { if line.isMarked, let colorHex = line.markColor { return Color(hex: colorHex) @@ -680,6 +620,268 @@ struct EditableScriptLineView: View { } } +struct FlagEditorView: View { + @Environment(\.dismiss) private var dismiss + let line: ScriptLine + let onSave: () -> Void + + @State private var selectedFlags: Set = [] + + var body: some View { + NavigationView { + Form { + Section(header: Text("Line \(line.lineNumber)")) { + Text(line.content) + .font(.body) + .foregroundColor(.primary) + } + + Section(header: Text("Flags")) { + ForEach(ScriptLineFlags.allCases, id: \.self) { flag in + HStack { + Button(action: { + toggleFlag(flag) + }) { + HStack { + Image(systemName: selectedFlags.contains(flag) ? "checkmark.circle.fill" : "circle") + .foregroundColor(selectedFlags.contains(flag) ? .blue : .gray) + + HStack(spacing: 8) { + Image(systemName: iconForFlag(flag)) + .foregroundColor(colorForFlag(flag)) + Text(labelForFlag(flag)) + .foregroundColor(.primary) + + Spacer() + + Text(descriptionForFlag(flag)) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .buttonStyle(PlainButtonStyle()) + } + } + } + } + .navigationTitle("Edit Flags") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button("Cancel") { + dismiss() + } + } + + ToolbarItem(placement: .navigationBarTrailing) { + Button("Save") { + saveFlags() + } + } + } + } + .onAppear { + selectedFlags = Set(line.flags) + } + } + + private func toggleFlag(_ flag: ScriptLineFlags) { + if selectedFlags.contains(flag) { + selectedFlags.remove(flag) + } else { + selectedFlags.insert(flag) + } + } + + private func saveFlags() { + line.flags = Array(selectedFlags) + onSave() + dismiss() + } + + private func iconForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "theatermasks" + case .skip: + return "forward.fill" + } + } + + private func labelForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Stage Direction" + case .skip: + return "Skip Line" + } + } + + private func colorForFlag(_ flag: ScriptLineFlags) -> Color { + switch flag { + case .stageDirection: + return .purple + case .skip: + return .red + } + } + + private func descriptionForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Mark as stage direction" + case .skip: + return "Skip during performance" + } + } +} + +struct BulkFlagEditorView: View { + @Environment(\.dismiss) private var dismiss + let lines: [ScriptLine] + let onSave: () -> Void + + var body: some View { + NavigationView { + Form { + Section(header: Text("Selected Lines (\(lines.count))")) { + ForEach(lines.prefix(5), id: \.id) { line in + Text("Line \(line.lineNumber): \(line.content.prefix(50))") + .font(.caption) + .foregroundColor(.secondary) + } + if lines.count > 5 { + Text("... and \(lines.count - 5) more lines") + .font(.caption) + .foregroundColor(.secondary) + } + } + + Section(header: Text("Bulk Flag Operations"), footer: Text("Toggle removes flags from lines that have them, adds to lines that don't")) { + ForEach(ScriptLineFlags.allCases, id: \.self) { flag in + HStack { + Button(action: { + toggleBulkFlag(flag) + }) { + HStack { + let flagStatus = getBulkFlagStatus(for: flag) + Image(systemName: flagStatus.icon) + .foregroundColor(flagStatus.color) + + HStack(spacing: 8) { + Image(systemName: iconForFlag(flag)) + .foregroundColor(colorForFlag(flag)) + + VStack(alignment: .leading) { + Text(labelForFlag(flag)) + .foregroundColor(.primary) + Text(flagStatus.description) + .font(.caption) + .foregroundColor(.secondary) + } + + Spacer() + + Text(descriptionForFlag(flag)) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .buttonStyle(PlainButtonStyle()) + } + } + } + } + .navigationTitle("Bulk Edit Flags") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button("Cancel") { + dismiss() + } + } + + ToolbarItem(placement: .navigationBarTrailing) { + Button("Done") { + dismiss() + } + } + } + } + } + + private func getBulkFlagStatus(for flag: ScriptLineFlags) -> (icon: String, color: Color, description: String) { + let linesWithFlag = lines.filter { $0.flags.contains(flag) } + let linesWithoutFlag = lines.filter { !$0.flags.contains(flag) } + + if linesWithFlag.count == lines.count { + return ("checkmark.circle.fill", .green, "All lines have this flag") + } else if linesWithFlag.isEmpty { + return ("circle", .gray, "No lines have this flag") + } else { + return ("minus.circle.fill", .orange, "\(linesWithFlag.count) of \(lines.count) lines have this flag") + } + } + + private func toggleBulkFlag(_ flag: ScriptLineFlags) { + let linesWithFlag = lines.filter { $0.flags.contains(flag) } + + if linesWithFlag.isEmpty { + // No lines have the flag - add to all + for line in lines { + if !line.flags.contains(flag) { + line.flags.append(flag) + } + } + } else { + // Some lines have the flag - remove from all that have it + for line in linesWithFlag { + line.flags.removeAll { $0 == flag } + } + } + + onSave() + } + + private func iconForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "theatermasks" + case .skip: + return "forward.fill" + } + } + + private func labelForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Stage Direction" + case .skip: + return "Skip Line" + } + } + + private func colorForFlag(_ flag: ScriptLineFlags) -> Color { + switch flag { + case .stageDirection: + return .purple + case .skip: + return .red + } + } + + private func descriptionForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Mark as stage direction" + case .skip: + return "Skip during performance" + } + } +} + struct AddLineView: View { @Environment(\.dismiss) private var dismiss @Environment(\.modelContext) private var modelContext @@ -690,6 +892,7 @@ struct AddLineView: View { @State private var newLineText = "" @State private var lineType: LineType = .dialogue + @State private var selectedFlags: Set = [] enum LineType: String, CaseIterable { case dialogue = "Dialogue" @@ -714,6 +917,15 @@ struct AddLineView: View { case .sceneDescription: return "]" } } + + var suggestedFlags: [ScriptLineFlags] { + switch self { + case .stageDirection: + return [.stageDirection] + default: + return [] + } + } } var body: some View { @@ -731,13 +943,61 @@ struct AddLineView: View { } } .pickerStyle(SegmentedPickerStyle()) + .onChange(of: lineType) { _, newType in + // Auto-select flags based on line type + selectedFlags = Set(newType.suggestedFlags) + } + } + + Section(header: Text("Flags")) { + ForEach(ScriptLineFlags.allCases, id: \.self) { flag in + HStack { + Button(action: { + toggleFlag(flag) + }) { + HStack { + Image(systemName: selectedFlags.contains(flag) ? "checkmark.circle.fill" : "circle") + .foregroundColor(selectedFlags.contains(flag) ? .blue : .gray) + + HStack(spacing: 8) { + Image(systemName: iconForFlag(flag)) + .foregroundColor(colorForFlag(flag)) + Text(labelForFlag(flag)) + .foregroundColor(.primary) + } + + Spacer() + } + } + .buttonStyle(PlainButtonStyle()) + } + } } Section(header: Text("Preview")) { - Text(lineType.prefix + newLineText + lineType.suffix) - .font(.body) - .foregroundColor(.secondary) - .frame(maxWidth: .infinity, alignment: .leading) + VStack(alignment: .leading, spacing: 4) { + Text(lineType.prefix + newLineText + lineType.suffix) + .font(.body) + .foregroundColor(.secondary) + + if !selectedFlags.isEmpty { + HStack { + ForEach(Array(selectedFlags), id: \.self) { flag in + HStack(spacing: 2) { + Image(systemName: iconForFlag(flag)) + .font(.caption2) + Text(labelForFlag(flag)) + .font(.caption2) + } + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(colorForFlag(flag)) + .foregroundColor(.white) + .cornerRadius(4) + } + } + } + } } if let insertAfter = insertAfterLineNumber { @@ -765,6 +1025,17 @@ struct AddLineView: View { } } } + .onAppear { + selectedFlags = Set(lineType.suggestedFlags) + } + } + + private func toggleFlag(_ flag: ScriptLineFlags) { + if selectedFlags.contains(flag) { + selectedFlags.remove(flag) + } else { + selectedFlags.insert(flag) + } } private func addLine() { @@ -778,7 +1049,8 @@ struct AddLineView: View { let newLine = ScriptLine( id: UUID(), lineNumber: newLineNumber, - content: formattedText + content: formattedText, + flags: Array(selectedFlags) ) script.lines.append(newLine) @@ -787,4 +1059,31 @@ struct AddLineView: View { onComplete() dismiss() } + + private func iconForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "theatermasks" + case .skip: + return "forward.fill" + } + } + + private func labelForFlag(_ flag: ScriptLineFlags) -> String { + switch flag { + case .stageDirection: + return "Stage" + case .skip: + return "Skip" + } + } + + private func colorForFlag(_ flag: ScriptLineFlags) -> Color { + switch flag { + case .stageDirection: + return .purple + case .skip: + return .red + } + } }