Updated bridge app to work with windows better

This commit is contained in:
Kevin Santo Cappuccio 2023-12-06 12:29:25 -08:00
parent 2dcbf412bf
commit aa8e8f7127
16 changed files with 838 additions and 82 deletions

Binary file not shown.

View File

@ -0,0 +1,5 @@
fuck https://wokwi.com/projects/369614891595393025
fuck2 https://wokwi.com/projects/367384677537829889
fuck3 https://wokwi.com/projects/369024970682423297
LEDarray https://wokwi.com/projects/370450364106546177

View File

@ -41,7 +41,7 @@ def openSerial():
portSelected = 0
print("\n\r")
print("\n")
while portSelected == False:
autodetected = -1
@ -56,7 +56,7 @@ def openSerial():
if autodetected != -1:
selection = autodetected
print("\n\n\rAutodetected Jumperless at", end=" ")
print("\n\nAutodetected Jumperless at", end=" ")
print(ports[int(selection) - 1].device)
portName = ports[int(selection) - 1].device
@ -66,12 +66,13 @@ def openSerial():
else:
selection = input(
"\n\n\rSelect the port connected to your Jumperless ('r' to rescan)\n\n\r")
"\n\nSelect the port connected to your Jumperless ('r' to rescan)\n\n")
if selection.isdigit() == True and int(selection) <= i:
portName = ports[int(selection) - 1].device
portSelected = True
print(ports[int(selection) - 1].device)
serialconnected = 1
@ -96,27 +97,34 @@ def check_presence(correct_port, interval=.15):
portFound = 0
while True:
if (reading == 0):
portFound = 0
for port in serial.tools.list_ports.comports():
if portName in port.device:
portFound = 1
#print (portFound)
if portFound >= 1:
if portFound == 1:
try:
ser = serial.Serial(portName, 115200, timeout=None)
#print (portName)
#ser = serial.Serial(portName, 115200)
#print (portName)
#ser.open(portName)
justChecked = 1
serialconnected = 1
time.sleep(0.05)
time.sleep(0.1)
justChecked = 0
except:
continue
else:
@ -155,7 +163,7 @@ def openProject():
while (url_selected == 0):
print('\n\n\rChoose from saved projects or paste the link to you Wokwi project:\n\n\r')
print('\n\nChoose from saved projects or paste the link to you Wokwi project:\n\n')
try:
f = open("savedWokwiProjects.txt", "r")
@ -174,7 +182,7 @@ def openProject():
print(line)
linkInput = input('\n\n\r')
linkInput = input('\n\n')
if (linkInput.startswith("http") == True):
entryType = 2
@ -186,7 +194,7 @@ def openProject():
if (otherIndex == int(linkInput)):
idx = idx.rsplit('\t\t')
idxLink = idx[1].rstrip('\n')
#print("\n\n\rRunning project ", end='')
#print("\n\nRunning project ", end='')
#print(idx[0])
entryType = 2
@ -208,9 +216,9 @@ def openProject():
checkurl = ' '
url_link = linkInput
# print("\n\n\r linkInput = ", end='')
# print("\n\n linkInput = ", end='')
# print(linkInput)
# print("\n\n\r url_link = ", end='')
# print("\n\n url_link = ", end='')
# print(url_link)
#checkurl = requests.get(url_link)
@ -222,16 +230,16 @@ def openProject():
url_selected = 1
# break
else:
print("\n\n\rBad Link")
print("\n\nBad Link")
url_link = 0
linkInput = 0
#url_link = input('\n\n\rBad link\n\n\rPaste the link to you Wokwi project here:\n\n\r')
#url_link = input('\n\nBad link\n\nPaste the link to you Wokwi project here:\n\n')
continue
except:
print("\n\n\rBad Link!!!")
print("\n\nBad Link!!!")
url_link = 0
#url_link = input('\n\n\rBad link\n\n\rPaste the link to you Wokwi project here:\n\n\r')
#url_link = input('\n\nBad link\n\nPaste the link to you Wokwi project here:\n\n')
continue
matchFound = 0
@ -250,7 +258,7 @@ def openProject():
if line == linkInput:
#print ( "Match Found at index ", end = '')
matchFound = index
print("\n\n\rRunning project ", end='')
print("\n\nRunning project ", end='')
print(name)
#print (matchFound)
#print (line)
@ -261,13 +269,13 @@ def openProject():
# print(line)
if matchFound == 0:
name = input("\n\n\rEnter a name for this new project\n\n\r")
name = input("\n\nEnter a name for this new project\n\n")
f.close()
f = open("savedWokwiProjects.txt", "a")
f.write(name)
f.write('\t\t')
f.write(linkInput)
f.write("\n\r")
f.write("\n")
@ -280,7 +288,7 @@ def openProject():
openProject()
print("\n\n\rSave your Wokwi project to update the Jumperless\n\n\rEnter 'menu' for Bridge App menu\n\n\r")
print("\n\nSave your Wokwi project to update the Jumperless\n\nEnter 'menu' for Bridge App menu\n\n")
@ -290,15 +298,15 @@ def bridgeMenu():
while(menuEntered == 1):
print("\t\t\tBridge App Menu\n\n\r")
print("\t\t\tBridge App Menu\n\n")
print("\t\td = Delete Saved Projects\n\r")
print("\t\tr = Restart Bridge App\n\r")
print("\t\ts = Restart Serial\n\r")
print("\t\tl = Load Project\n\r")
print("\t\tj = Go Back To Jumperless\n\r")
print("\t\td = Delete Saved Projects\n")
print("\t\tr = Restart Bridge App\n")
print("\t\ts = Restart Serial\n")
print("\t\tl = Load Project\n")
print("\t\tj = Go Back To Jumperless\n")
menuSelection = input("\n\n\r")
menuSelection = input("\n\n")
if (menuSelection == 's'):
ser.close()
@ -337,7 +345,7 @@ def bridgeMenu():
while (menuSelection == 'd'):
print('\n\n\rEnter the index of the project you\'d like to delete:\n\n\rr = Return To Menu\ta = Delete All\n\n\r')
print('\n\nEnter the index of the project you\'d like to delete:\n\nr = Return To Menu\ta = Delete All\n\n')
try:
f = open("savedWokwiProjects.txt", "r")
@ -356,7 +364,7 @@ def bridgeMenu():
print(line)
linkInput = input('\n\n\r')
linkInput = input('\n\n')
if (linkInput == 'a'):
f.close()
@ -380,7 +388,7 @@ def bridgeMenu():
#del lines[idx+1]
idx = idx.rsplit('\t\t')
idxLink = idx[1].rstrip('\n')
print("\n\n\rDeleting project ", end='')
print("\n\nDeleting project ", end='')
print(idx[0])
break
@ -401,7 +409,7 @@ def bridgeMenu():
break
portNotFound = 1
@ -413,7 +421,7 @@ def serialTermIn():
global justChecked
global reading
global menuEntered
global portNotFound
while True:
readLength = 0
@ -422,12 +430,12 @@ def serialTermIn():
try:
if (ser.in_waiting > 0):
#justChecked = 0
reading = 1
#reading = 1
inputBuffer = b' '
waiting = ser.in_waiting
while True:
while (serialconnected >= 0):
inByte = ser.read()
inputBuffer += inByte
@ -454,34 +462,46 @@ def serialTermIn():
readlength = 0
#justChecked = 0
reading = 0
portNotFound = 0
except:
portNotFound = 1
ser.close()
print("Disconnected")
portNotFound = 1
while (portNotFound == 1):
portFound = 0
time.sleep(0.3)
for port in serial.tools.list_ports.comports():
if portName in port.device:
portFound = 1
portNotFound = 0
#print ("found ")
#print (port.device)
if portFound >= 1:
ser = serial.Serial(portName, 115200, timeout=None)
justChecked = 1
serialconnected = 1
time.sleep(0.05)
justChecked = 0
portNotFound = 0
if portFound == 1:
try:
ser = serial.Serial(portName, 115200, timeout=None)
justChecked = 1
serialconnected = 1
time.sleep(0.2)
justChecked = 0
portNotFound = 0
justreconnected = 1
except:
portFound = 0
portNotFound = 1
time.sleep(0.25)
else:
justreconnected = 1
#justreconnected = 1
justChecked = 0
serialconnected = 0
ser.close()
#ser.close()
portNotFound = 1
time.sleep(.1)
@ -516,7 +536,7 @@ def serialTermOut():
if (serialconnected == 1):
#justChecked = 0
while (justChecked == 0):
time.sleep(0.0001)
time.sleep(0.01)
else:
#print (outputBuffer)
@ -525,7 +545,7 @@ def serialTermOut():
#print (outputBuffer.encode('ascii'))
ser.write(outputBuffer.encode('ascii'))
except:
portNotFound = 1
# portNotFound = 1
while (portNotFound == 1):
portFound = 0
@ -535,11 +555,10 @@ def serialTermOut():
if portName in port.device:
portFound = 1
#print (port.device)
print (port.device)
if portFound >= 1:
ser = serial.Serial(
portName, 115200, timeout=None)
#
justChecked = 1
serialconnected = 1
time.sleep(0.05)
@ -547,7 +566,7 @@ def serialTermOut():
portNotFound = 0
else:
justreconnected = 1
justreconnected = 0
justChecked = 0
serialconnected = 0
@ -572,7 +591,7 @@ port_controller.start()
time.sleep(.75)
while True:
if (menuEntered == 1):
bridgeMenu()
@ -584,15 +603,22 @@ while True:
while (justreconnected == 1):
time.sleep(.01)
#print("just reconnected")
lastDiagram = '-1'
ser.close()
time.sleep(.1)
#if (portNotFound != 1):
#ser = serial.Serial(portName, 115200, timeout=None)
if (serialconnected == 1):
print('Reconnected')
portNotFound = 0
portFound = 1
break
else:
justreconnected = 0
if (serialconnected == 1):
#print ("connected!!!")
result = requests.get(url_link).text
doc = BeautifulSoup(result, "html.parser")
@ -623,17 +649,14 @@ while True:
sketch = str(c)
if debug == True:
print("\n\n\rdiagram.json\n\r")
print("\n\ndiagram.json\n")
print(diagram)
print("\n\n\rsketch.ino\n\r")
print("\n\nsketch.ino\n")
print(sketch)
try:
print("\n\n\rlibraries.txt\n\r")
print(libraries)
except:
print("\n\n\rNo libraries.txt\n\r")
print("\n\nlibraries.txt\n")
print(libraries)
# if (justreconnected == 1):
@ -668,7 +691,7 @@ while True:
elif conn1.endswith('4'):
conn1 = "108"
elif conn1.endswith('5'):
conn1 = "109"
conn1 = "109"
if conn1.startswith("bb1:") == True:
periodIndex = conn1.find('.')
@ -817,4 +840,4 @@ while True:
#print (p)
else:
time.sleep(.5)
time.sleep(.75)

View File

@ -0,0 +1,724 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
<plugIn identifier="com.apple.WebKitIBPlugin" version="21225"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="207" id="210"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject">
<connections>
<outlet property="delegate" destination="207" id="446"/>
</connections>
</customObject>
<customObject id="207" userLabel="SEController" customClass="SEController">
<connections>
<outlet property="aboutMenuItem" destination="232" id="238"/>
<outlet property="dropletBox" destination="494" id="502"/>
<outlet property="dropletDropFilesLabel" destination="499" id="507"/>
<outlet property="dropletMessageTextField" destination="505" id="508"/>
<outlet property="dropletProgressIndicator" destination="496" id="504"/>
<outlet property="dropletShaderView" destination="519" id="w2q-dA-smc"/>
<outlet property="dropletWindow" destination="490" id="512"/>
<outlet property="fileMenu" destination="81" id="rcv-iy-bgF"/>
<outlet property="hideMenuItem" destination="134" id="239"/>
<outlet property="openRecentMenuItem" destination="FvD-xH-BRz" id="V8D-h2-Uw1"/>
<outlet property="progressBarCancelButton" destination="206" id="299"/>
<outlet property="progressBarDetailsLabel" destination="290" id="300"/>
<outlet property="progressBarDetailsTriangle" destination="288" id="301"/>
<outlet property="progressBarIndicator" destination="204" id="298"/>
<outlet property="progressBarMessageTextField" destination="205" id="297"/>
<outlet property="progressBarTextView" destination="307" id="516"/>
<outlet property="progressBarWindow" destination="21" id="296"/>
<outlet property="quitMenuItem" destination="136" id="240"/>
<outlet property="textWindow" destination="216" id="dD5-aT-ujC"/>
<outlet property="textWindowCancelButton" destination="220" id="uuU-Xb-xDZ"/>
<outlet property="textWindowMessageTextField" destination="366" id="bT3-oV-9zc"/>
<outlet property="textWindowProgressIndicator" destination="230" id="AXd-F1-wQr"/>
<outlet property="textWindowTextView" destination="225" id="FZy-wJ-th1"/>
<outlet property="viewMenu" destination="ITS-DI-OJD" id="2iy-Fw-JVe"/>
<outlet property="webView" destination="258" id="GEt-Hd-OFL"/>
<outlet property="webViewCancelButton" destination="251" id="i5n-LY-nJs"/>
<outlet property="webViewMessageTextField" destination="509" id="Unv-5h-E6P"/>
<outlet property="webViewProgressIndicator" destination="277" id="Hun-a2-4wC"/>
<outlet property="webViewWindow" destination="247" id="9lw-Pg-xRw"/>
<outlet property="windowMenu" destination="24" id="328"/>
</connections>
</customObject>
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="ProgressBarWindow" animationBehavior="default" tabbingMode="disallowed" id="21" userLabel="ProgressWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="472" y="537" width="438" height="87"/>
<rect key="screenRect" x="0.0" y="0.0" width="1536" height="935"/>
<value key="minSize" type="size" width="438" height="87"/>
<value key="maxSize" type="size" width="600" height="87"/>
<view key="contentView" id="2">
<rect key="frame" x="0.0" y="0.0" width="438" height="87"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<progressIndicator wantsLayer="YES" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" bezeled="NO" indeterminate="YES" style="bar" translatesAutoresizingMaskIntoConstraints="NO" id="204">
<rect key="frame" x="18" y="31" width="310" height="20"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
</progressIndicator>
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="205">
<rect key="frame" x="18" y="59" width="403" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="clipping" sendsActionOnEndEditing="YES" baseWritingDirection="leftToRight" alignment="left" id="472">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="206">
<rect key="frame" x="338" y="24" width="86" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="473">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancel:" target="207" id="215"/>
</connections>
</button>
<button toolTip="Show details" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="288">
<rect key="frame" x="20" y="14" width="13" height="13"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="disclosureTriangle" bezelStyle="disclosure" imagePosition="above" alignment="left" controlSize="small" borderStyle="border" inset="2" id="474">
<behavior key="behavior" pushIn="YES" changeBackground="YES" changeGray="YES" lightByContents="YES"/>
<font key="font" metaFont="smallSystem"/>
</buttonCell>
<connections>
<action selector="toggleDetails:" target="207" id="303"/>
</connections>
</button>
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="290">
<rect key="frame" x="33" y="11" width="41" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Details" id="475">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="304">
<rect key="frame" x="20" y="-208" width="393" height="208"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="2mm-QF-kpX">
<rect key="frame" x="1" y="1" width="391" height="206"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="307" customClass="SETextView">
<rect key="frame" x="0.0" y="0.0" width="391" height="206"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="391" height="206"/>
<size key="maxSize" width="463" height="10000000"/>
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
<connections>
<outlet property="delegate" destination="207" id="489"/>
</connections>
</textView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="481">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="0.39849624060150374" horizontal="NO" id="480">
<rect key="frame" x="323" y="1" width="15" height="200"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="207" id="377"/>
</connections>
<point key="canvasLocation" x="87" y="314.5"/>
</window>
<menu title="MainMenu" systemMenu="main" id="29" userLabel="MainMenu">
<items>
<menuItem title="Application" id="56">
<menu key="submenu" title="Application" systemMenu="apple" id="57">
<items>
<menuItem title="About" id="232">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontStandardAboutPanel:" target="-2" id="237"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="233">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Services" id="235">
<menu key="submenu" title="Services" systemMenu="services" id="234"/>
</menuItem>
<menuItem isSeparatorItem="YES" id="236">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Hide" keyEquivalent="h" id="134">
<connections>
<action selector="hide:" target="-2" id="152"/>
</connections>
</menuItem>
<menuItem title="Hide Others" keyEquivalent="h" id="145">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="hideOtherApplications:" target="-2" id="146"/>
</connections>
</menuItem>
<menuItem title="Show All" id="150">
<connections>
<action selector="unhideAllApplications:" target="-2" id="153"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="149">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Quit" keyEquivalent="q" id="136">
<connections>
<action selector="terminate:" target="-2" id="139"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="File" id="83">
<menu key="submenu" title="File" id="81">
<items>
<menuItem title="Open…" keyEquivalent="o" id="72">
<connections>
<action selector="openFiles:" target="207" id="524"/>
</connections>
</menuItem>
<menuItem title="Open Recent" id="FvD-xH-BRz">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="QHk-NS-To3">
<items>
<menuItem title="Clear Menu" id="CWw-N0-5lz">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem isSeparatorItem="YES" id="xgq-Qk-sfY">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Close" keyEquivalent="w" id="dh0-Fj-ATR">
<connections>
<action selector="performClose:" target="-1" id="0fd-CD-gUG"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="79">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Save…" keyEquivalent="s" id="75">
<connections>
<action selector="saveToFile:" target="207" id="523"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="74">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Page Setup…" keyEquivalent="P" id="77">
<connections>
<action selector="runPageLayout:" target="-1" id="87"/>
</connections>
</menuItem>
<menuItem title="Print…" keyEquivalent="p" id="78">
<connections>
<action selector="print:" target="-1" id="86"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Edit" id="OYz-zT-LAM">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Edit" id="gbe-PM-Daj">
<items>
<menuItem title="Undo" keyEquivalent="z" id="6BN-ih-O2m">
<connections>
<action selector="undo:" target="-1" id="oH0-3R-wus"/>
</connections>
</menuItem>
<menuItem title="Redo" keyEquivalent="z" id="TgQ-5S-p2w">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="redo:" target="-1" id="bxh-7G-6rR"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="ktb-NS-TU3"/>
<menuItem title="Cut" keyEquivalent="x" id="yLq-sd-YR5">
<connections>
<action selector="cut:" target="-1" id="46i-iL-VLK"/>
</connections>
</menuItem>
<menuItem title="Copy" keyEquivalent="c" id="s3v-O1-6pA">
<connections>
<action selector="copy:" target="-1" id="jxG-ij-fh7"/>
</connections>
</menuItem>
<menuItem title="Paste" keyEquivalent="v" id="6Ld-ut-13f">
<connections>
<action selector="paste:" target="-1" id="PGw-sA-Gma"/>
</connections>
</menuItem>
<menuItem title="Paste and Match Style" keyEquivalent="V" id="GyB-HZ-4kH">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="pasteAsPlainText:" target="-1" id="AlS-iZ-R4l"/>
</connections>
</menuItem>
<menuItem title="Delete" id="YkA-TP-1J9">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="delete:" target="-1" id="cE3-5v-CP0"/>
</connections>
</menuItem>
<menuItem title="Select All" keyEquivalent="a" id="z4j-fk-SUb">
<connections>
<action selector="selectAll:" target="-1" id="eM9-h9-WVo"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="FXg-ZR-vZj"/>
<menuItem title="Find" id="amO-Yt-228">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Find" id="9XE-hK-Hbc">
<items>
<menuItem title="Find…" tag="1" keyEquivalent="f" id="yA2-y8-dhZ">
<connections>
<action selector="performFindPanelAction:" target="-1" id="zqc-0l-nEk"/>
</connections>
</menuItem>
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="ceF-be-hip">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<connections>
<action selector="performFindPanelAction:" target="-1" id="Fno-81-Q2N"/>
</connections>
</menuItem>
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="6FX-CW-rwT">
<connections>
<action selector="performFindPanelAction:" target="-1" id="AeZ-8e-DSZ"/>
</connections>
</menuItem>
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="kIR-xV-7pl">
<connections>
<action selector="performFindPanelAction:" target="-1" id="ALM-eS-1XU"/>
</connections>
</menuItem>
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="yTY-2E-Cp9">
<connections>
<action selector="performFindPanelAction:" target="-1" id="Gbj-g6-cYJ"/>
</connections>
</menuItem>
<menuItem title="Jump to Selection" keyEquivalent="j" id="80n-rn-d7I">
<connections>
<action selector="centerSelectionInVisibleArea:" target="-1" id="qfH-cs-Cdv"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Spelling and Grammar" id="uWG-xr-cNT">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Spelling" id="Xoa-7u-7zM">
<items>
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="rZl-3I-YFV">
<connections>
<action selector="showGuessPanel:" target="-1" id="CSh-4b-cGc"/>
</connections>
</menuItem>
<menuItem title="Check Document Now" keyEquivalent=";" id="tjk-pc-YjK">
<connections>
<action selector="checkSpelling:" target="-1" id="O3S-v5-8Ra"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="ohv-rn-e7b"/>
<menuItem title="Check Spelling While Typing" id="E3o-iC-0NO">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleContinuousSpellChecking:" target="-1" id="k4Q-aZ-O6y"/>
</connections>
</menuItem>
<menuItem title="Check Grammar With Spelling" id="mUP-Jd-Tu1">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleGrammarChecking:" target="-1" id="Ypd-WC-IMS"/>
</connections>
</menuItem>
<menuItem title="Correct Spelling Automatically" id="qq3-jk-TYN">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="Ob8-wh-bLR"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Substitutions" id="8Ti-fk-PNH">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Substitutions" id="NeW-07-aln">
<items>
<menuItem title="Show Substitutions" id="DXm-9z-Sle">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="z43-IC-kpA"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="aVP-JA-dKq"/>
<menuItem title="Smart Copy/Paste" id="Pcq-B9-JQ5">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleSmartInsertDelete:" target="-1" id="iu4-Nn-DU4"/>
</connections>
</menuItem>
<menuItem title="Smart Quotes" id="iDT-WP-ISR">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="pnI-ku-LV9"/>
</connections>
</menuItem>
<menuItem title="Smart Dashes" id="QFc-JW-5qE">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="pY9-lv-EM7"/>
</connections>
</menuItem>
<menuItem title="Smart Links" id="opP-BJ-vhR">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticLinkDetection:" target="-1" id="lfD-XD-tfO"/>
</connections>
</menuItem>
<menuItem title="Data Detectors" id="zWu-P7-fpg">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticDataDetection:" target="-1" id="EAz-S6-L7B"/>
</connections>
</menuItem>
<menuItem title="Text Replacement" id="2R8-fL-H32">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="toggleAutomaticTextReplacement:" target="-1" id="7Lb-Uz-uJ9"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Transformations" id="v1A-Fi-A5j">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Transformations" id="B0B-bK-IZ3">
<items>
<menuItem title="Make Upper Case" id="1P0-qI-ZAM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="uppercaseWord:" target="-1" id="cre-Qh-bSZ"/>
</connections>
</menuItem>
<menuItem title="Make Lower Case" id="sK6-Xl-9uz">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="lowercaseWord:" target="-1" id="qid-xu-iAw"/>
</connections>
</menuItem>
<menuItem title="Capitalize" id="zvd-g7-rwM">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="capitalizeWord:" target="-1" id="0tj-lN-nE0"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Speech" id="bsj-0j-07E">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Speech" id="r3p-Q2-qJZ">
<items>
<menuItem title="Start Speaking" id="8Hl-RR-cUq">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="startSpeaking:" target="-1" id="Zbb-Tp-HBE"/>
</connections>
</menuItem>
<menuItem title="Stop Speaking" id="SLa-Tk-XGJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="stopSpeaking:" target="-1" id="Oyc-KO-3qC"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="View" id="KUk-6o-tke">
<menu key="submenu" title="View" id="ITS-DI-OJD">
<items>
<menuItem title="Make Text Bigger" keyEquivalent="+" id="Qae-cV-V7J">
<connections>
<action selector="makeTextBigger:" target="207" id="cHK-EO-JtV"/>
</connections>
</menuItem>
<menuItem title="Make Text Smaller" keyEquivalent="-" id="Gv4-oc-1eL">
<connections>
<action selector="makeTextSmaller:" target="207" id="JTY-6k-ZKY"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="G0T-Im-91a"/>
</items>
</menu>
</menuItem>
<menuItem title="Window" id="19">
<menu key="submenu" title="Window" systemMenu="window" id="24">
<items>
<menuItem title="Zoom" keyEquivalent="z" id="197">
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
<connections>
<action selector="performZoom:" target="-1" id="198"/>
</connections>
</menuItem>
<menuItem title="Minimize" keyEquivalent="m" id="23">
<connections>
<action selector="performMiniaturize:" target="-1" id="37"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="322">
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
</menuItem>
<menuItem title="Bring All to Front" id="5">
<connections>
<action selector="arrangeInFront:" target="-1" id="39"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Help" id="ssS-yx-lud">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Help" systemMenu="help" id="Jc3-NS-beW">
<items>
<menuItem title="Help" keyEquivalent="?" id="By3-00-4mK">
<connections>
<action selector="showHelp:" target="-1" id="ZoJ-wH-vxF"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
<connections>
<outlet property="delegate" destination="207" id="525"/>
</connections>
<point key="canvasLocation" x="36" y="0.0"/>
</menu>
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="TextWindow" animationBehavior="default" tabbingMode="disallowed" id="216" userLabel="TextOutputWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="297" y="408" width="580" height="420"/>
<rect key="screenRect" x="0.0" y="0.0" width="1536" height="935"/>
<value key="minSize" type="size" width="400" height="200"/>
<view key="contentView" id="217">
<rect key="frame" x="0.0" y="0.0" width="580" height="420"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="220">
<rect key="frame" x="488" y="7" width="86" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="476">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancel:" target="207" id="223"/>
</connections>
</button>
<scrollView fixedFrame="YES" autohidesScrollers="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" verticalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="226">
<rect key="frame" x="9" y="45" width="561" height="367"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="Hk1-72-Owa">
<rect key="frame" x="1" y="1" width="559" height="365"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textView editable="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" allowsDocumentBackgroundColorChange="YES" linkDetection="YES" id="225" customClass="SETextView">
<rect key="frame" x="0.0" y="0.0" width="559" height="365"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
<size key="minSize" width="559" height="365"/>
<size key="maxSize" width="561" height="10000000"/>
<color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
<connections>
<outlet property="delegate" destination="207" id="488"/>
</connections>
</textView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="483">
<rect key="frame" x="-100" y="-100" width="87" height="18"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="482">
<rect key="frame" x="-30" y="1" width="15" height="340"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<progressIndicator horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="230">
<rect key="frame" x="15" y="18" width="16" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</progressIndicator>
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="366">
<rect key="frame" x="43" y="17" width="429" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="477">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="207" id="376"/>
</connections>
<point key="canvasLocation" x="-478" y="370"/>
</window>
<window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="WebViewWindow" animationBehavior="default" tabbingMode="disallowed" id="247" userLabel="WebOutputWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
<rect key="contentRect" x="297" y="408" width="580" height="420"/>
<rect key="screenRect" x="0.0" y="0.0" width="1536" height="935"/>
<value key="minSize" type="size" width="400" height="200"/>
<view key="contentView" id="248">
<rect key="frame" x="0.0" y="0.0" width="580" height="420"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="251">
<rect key="frame" x="485" y="6" width="86" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" state="on" borderStyle="border" inset="2" id="478">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
<connections>
<action selector="cancel:" target="207" id="267"/>
</connections>
</button>
<box fixedFrame="YES" boxType="oldStyle" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="257">
<rect key="frame" x="8" y="45" width="563" height="367"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<view key="contentView" id="X4z-hY-QR7">
<rect key="frame" x="1" y="1" width="561" height="365"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<webView fixedFrame="YES" maintainsBackForwardList="NO" translatesAutoresizingMaskIntoConstraints="NO" id="258" customClass="STDragWebView">
<rect key="frame" x="-1" y="0.0" width="562" height="365"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<webPreferences key="preferences" defaultFontSize="12" defaultFixedFontSize="12">
<nil key="identifier"/>
</webPreferences>
<connections>
<outlet property="UIDelegate" destination="207" id="378"/>
<outlet property="downloadDelegate" destination="207" id="382"/>
<outlet property="dragDelegate" destination="207" id="kaI-rz-1Ps"/>
<outlet property="frameLoadDelegate" destination="207" id="381"/>
<outlet property="policyDelegate" destination="207" id="380"/>
<outlet property="resourceLoadDelegate" destination="207" id="379"/>
</connections>
</webView>
</subviews>
</view>
</box>
<progressIndicator horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="277">
<rect key="frame" x="16" y="15" width="16" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</progressIndicator>
<textField verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="509">
<rect key="frame" x="37" y="14" width="429" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" id="510">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="207" id="375"/>
</connections>
<point key="canvasLocation" x="-659" y="-167"/>
</window>
<window title="Droplet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" visibleAtLaunch="NO" frameAutosaveName="DropletWindow" animationBehavior="default" tabbingMode="disallowed" id="490" userLabel="DropletWindow">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<rect key="contentRect" x="157" y="273" width="294" height="280"/>
<rect key="screenRect" x="0.0" y="0.0" width="1536" height="935"/>
<view key="contentView" id="491">
<rect key="frame" x="0.0" y="0.0" width="294" height="280"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField hidden="YES" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="519">
<rect key="frame" x="0.0" y="0.0" width="294" height="280"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" enabled="NO" allowsUndo="NO" sendsActionOnEndEditing="YES" drawsBackground="YES" id="520">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<box autoresizesSubviews="NO" fixedFrame="YES" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="494">
<rect key="frame" x="17" y="16" width="260" height="246"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView" id="q0i-G4-K1a">
<rect key="frame" x="3" y="3" width="254" height="240"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="496">
<rect key="frame" x="112" y="124" width="32" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</progressIndicator>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="67" translatesAutoresizingMaskIntoConstraints="NO" id="499">
<rect key="frame" x="92" y="108" width="71" height="34"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" alignment="center" title="Drop files here" id="500">
<font key="font" metaFont="system"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" preferredMaxLayoutWidth="214" translatesAutoresizingMaskIntoConstraints="NO" id="505">
<rect key="frame" x="18" y="40" width="218" height="76"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" id="506">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="disabledControlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
</view>
</box>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="207" id="RFt-L5-f73"/>
</connections>
<point key="canvasLocation" x="608" y="262"/>
</window>
</objects>
</document>

View File

@ -0,0 +1 @@
/Users/kevinsanto/Documents/GitHub/Jumperless/Jumperless Wokwi Bridge App/JumperlessWokwiBridge.py

View File

@ -1,4 +0,0 @@
fuck https://wokwi.com/projects/369614891595393025
fuck2 https://wokwi.com/projects/367384677537829889
fuck3 https://wokwi.com/projects/369024970682423297

View File

@ -22,6 +22,7 @@
#include <SPI.h>
#define CSI Serial.write("\x1B\x5B");
//#define CSI Serial.write("\033");
#define DAC_RESOLUTION 9
@ -349,8 +350,11 @@ void showMeasurements(int samples)
while (Serial.available() == 0)
{
CSI
Serial.write("2K");
//CSI
//Serial.write("\x1B\x5B 2K");
//Serial.write("2K");
Serial.print("\r \r");
int adc0ReadingUnscaled;
float adc0Reading;
@ -434,7 +438,7 @@ bs+=Serial.print(INA0.getPower_mW());
bs+=Serial.print("mW\t");
}
bs+=Serial.print(" \r");
bs+=Serial.print(" \r");
@ -454,7 +458,7 @@ bs+=Serial.print("mW\t");
// Serial.print("ADC3: ");
// Serial.print(adc3ReadingUnscaled);
// Serial.print("V\n\n\r");
delay(250);
delay(350);
}

View File

@ -130,15 +130,18 @@ dontshowmenu:
{
showReadings++;
chooseShownReadings();
Serial.write("\x1B\x5B");
Serial.write("1F");//scroll up one line
Serial.write("\x1B\x5B");
Serial.write("2K");//clear line
Serial.write("\x1B\x5B");
Serial.write("1F");//scroll up one line
Serial.write("\x1B\x5B");
Serial.write("2K");//clear line
//Serial.write("\033");
//Serial.write("\x1B\x5B");
//Serial.write("1F");//scroll up one line
//Serial.write("\x1B\x5B");
//Serial.write("\033");
//Serial.write("2K");//clear line
//Serial.write("\033");
//Serial.write("\x1B\x5B");
// Serial.write("1F");//scroll up one line
//Serial.write("\x1B\x5B");
//Serial.write("\033");
//Serial.write("2K");//clear line
goto dontshowmenu;
//break;