savant-echo 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d697f91ad2086bedf9e01c21539cede24ef4cf6
4
- data.tar.gz: f751654b48d18c21fd2a9a9a96fb4523fe324c2e
3
+ metadata.gz: 16b0cb3fdff0294e0f8655c9445fa4c55a78df50
4
+ data.tar.gz: 92227adeed112f8ea3dd2dc645ec464a95cf587a
5
5
  SHA512:
6
- metadata.gz: 8e48ac117ce8fba65784726791673c24d34989f347f4b17a4aaf0922c7c18ce5bccc1056ec4381b845929339fd1246ad99f640fd98417987df32e60fa28fed34
7
- data.tar.gz: 2b625506c37558dad6409404d5b5201b31713444d4b20dabc1c7e1c5031101100897071b4309205527f16ed49918918637027ba528cff4562c047fe84ca7a90e
6
+ metadata.gz: 5229747110247cec4d58be9d4529516ca98ceb5d8db530d893d6d27c813dc473559209952a9aaa8f189cef9cc09dab94dfcdbc4f00fd75d22a9397ed1d5809c8
7
+ data.tar.gz: 68471853a9cdf144e291ac565ec77d5814e34b852650162ac419d44851b050346a147a734c777325fc15018d4c5b9aa153a7385c2537754632e1720ce1d727ef
data/bin/src/Savant.rb CHANGED
@@ -26,13 +26,56 @@ class Savant #< VR::ListView
26
26
  @listviewhabridgeDevices = VR::ListView.new(:device => String)
27
27
  end
28
28
 
29
- #####Method to check to see if HA Bridge is running on host#####
29
+ #####Method to check to see if HA Bridge is running on host and check the version and updates available if so#####
30
30
  def up?(ip, port)
31
31
  if IPAddress.valid? ip
32
32
  begin
33
33
  http = Net::HTTP.start(ip, port, {open_timeout: 1, read_timeout: 1})
34
34
  response = http.head("/")
35
35
  if response.code == "200"
36
+
37
+ puts "HA Bridge is online at " + ip + ":" + port
38
+ #Query current habridge version
39
+ habridgeVersionURLstr = "http://" + @savantURL + ":8888/system/habridge/version"
40
+ uri = URI(habridgeVersionURLstr)
41
+ response = Net::HTTP.get(uri)
42
+ @habridgeVersion = response[12..-1]
43
+ @habridgeVersion = @habridgeVersion[0,5]
44
+ puts "Current installed version of ha bridge: " + @habridgeVersion
45
+
46
+
47
+ #Check github for latest version
48
+ uri = URI("https://api.github.com/repos/bwssytems/ha-bridge/releases/latest")
49
+ response = Net::HTTP.get(uri)
50
+ habridgeVersionHash = JSON.parse(response, object_class: OpenStruct)
51
+ @habridgeVersionRemote = habridgeVersionHash["tag_name"]
52
+ @habridgeVersionRemote = @habridgeVersionRemote[1..-1]
53
+
54
+ #Check for minimum required version for updated JSON syntax
55
+ if Gem::Version.new(@habridgeVersion) < Gem::Version.new("4.0.3")
56
+ alert "Please update HA bridge. Version prior to 4.0.0 used a different syntax and will not work with this tool."
57
+ @builder["buttonAdd"].hide
58
+ else
59
+ @builder["buttonAdd"].show
60
+ end
61
+
62
+ #Compare current version to new version and update UI based on result
63
+ if Gem::Version.new(@habridgeVersion) < Gem::Version.new(@habridgeVersionRemote)
64
+ labelHabridgeVersionText = "There is an HA bridge update available.\nInstalled version: " + @habridgeVersion + "\nVersion available: " + @habridgeVersionRemote
65
+ @builder["labelHabridgeVersion"].label = labelHabridgeVersionText
66
+ @builder["labelHabridgeVersion"].show
67
+ @builder["buttonHabridgeVersion"].show
68
+ else
69
+ labelHabridgeVersionText = "HA Bridge is up to date.\nInstalled version: " + @habridgeVersion + "\nVersion available: " + @habridgeVersionRemote
70
+ @builder["labelHabridgeVersion"].label = labelHabridgeVersionText
71
+ @builder["labelHabridgeVersion"].show
72
+ @builder["buttonHabridgeVersion"].hide
73
+ end
74
+
75
+ @habridgeRemoteFilename = habridgeVersionHash["assets"][0]["name"]
76
+ @habridgeRemoteURL = habridgeVersionHash["assets"][0]["browser_download_url"]
77
+
78
+
36
79
  @builder["buttonHabridgeStatus"].label = "HA Bridge is Online\nClick to open in browser."
37
80
  @builder["buttonBackupRestore"].show
38
81
  if savantVersion?(@savantURL)
@@ -47,6 +90,8 @@ class Savant #< VR::ListView
47
90
  @builder["buttonHabridgeStatus"].label = "HA Bridge is Offline\nClick for help."
48
91
  @builder["buttonSceneSync"].hide
49
92
  @builder["buttonBackupRestore"].hide
93
+ @builder["buttonHabridgeVersion"].hide
94
+ @builder["labelHabridgeVersion"].hide
50
95
  @habridgeStatus = "Offline"
51
96
  end
52
97
  end
@@ -277,6 +322,7 @@ class Savant #< VR::ListView
277
322
  def savantURL__changed(*argv)
278
323
  @savantURL = @builder["savantURL"].text
279
324
  up?(@savantURL,"8888")
325
+
280
326
  end
281
327
 
282
328
  #Test to see if habridge is running when IP address is changed
@@ -295,6 +341,53 @@ class Savant #< VR::ListView
295
341
  system("open http://" + @savantURL + ":8888")
296
342
  end
297
343
  end
344
+
345
+
346
+ #####Update HA Bridge if online and there is a newer version available#####
347
+ def buttonHabridgeVersion__clicked(*argv)
348
+ if IPAddress.valid? @savantURL
349
+ if is_port_open?(@savantURL,"11263") || is_port_open?(@savantURL,"48664")
350
+ @builder["dialogInstall"].show
351
+ @builder["installStatus"].label = "Downloading latest version...\n\n"
352
+ clear_events()
353
+ login = 'RPM'
354
+ @password = 'RPM'
355
+ result = ''
356
+ Net::SSH.start(@savantURL, login, :password => @password, :paranoid => false) do |ssh|
357
+
358
+ #unload current bridge
359
+ result = ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridge.plist")
360
+ @builder["installStatus"].label += "Stopped existing ha bridge.\n\n"
361
+ clear_events()
362
+
363
+ #download new bridge
364
+ result = ssh.exec!("curl -L \"https://github.com/bwssytems/ha-bridge/releases/download/v" + @habridgeVersionRemote + "/" + @habridgeRemoteFilename + "\" -o /Users/RPM/habridge/" + @habridgeRemoteFilename)
365
+ @builder["installStatus"].label += "Downloading file...please wait.\n\n"
366
+ clear_events()
367
+
368
+ #update launch agent for new version
369
+ result = ssh.exec!("sed -i '' -e 's/ha-bridge.*jar/ha-bridge-" + @habridgeVersionRemote + ".jar/' /Users/RPM/Library/LaunchAgents/com.habridge.plist")
370
+ @builder["installStatus"].label += "Updating launch agent.\n\n"
371
+ clear_events()
372
+ sleep 1
373
+
374
+ #reload bridge
375
+ result = ssh.exec!("launchctl load /Users/RPM/Library/LaunchAgents/com.habridge.plist")
376
+ @builder["installStatus"].label += "Launching updated bridge.\n\n"
377
+ clear_events()
378
+ sleep 2
379
+
380
+ up?(@savantURL,"8888")
381
+ @builder["dialogInstall"].hide
382
+ alert "HA Bridge current version is now " + @habridgeVersion
383
+ end
384
+ else
385
+ alert "Racepoint services not running at specified IP Address. Target for installation must be a Savant Pro Host."
386
+ end
387
+ else
388
+ alert "Invalid IP Address."
389
+ end
390
+ end
298
391
 
299
392
  ##### #####
300
393
  ##### Help and installation window #####
@@ -613,6 +706,8 @@ class Savant #< VR::ListView
613
706
  uri = URI(@haURLstr)
614
707
  response = Net::HTTP.get(uri)
615
708
  habridgeArray = JSON.parse(response, object_class: OpenStruct)
709
+
710
+
616
711
 
617
712
  #build array of habridge device names
618
713
  unless habridgeArray.to_s.empty?
@@ -715,7 +810,13 @@ you need to update the SCLI bridge on the next screen."
715
810
  #Skip scenes that are already on the habridge
716
811
  if !(@duplicateScenes.include? @sceneNameArray[0].downcase)
717
812
  #build json string
718
- @haScene = %q{\{'name' : '} + @sceneNameArray[0] + %q{','deviceType' : 'custom','onUrl' : '} + @savantURLstr + %q{/activateScene%20\'} + @sceneNameArray[0].gsub(" ", "%20") + %q{\'%20\'} + @sceneIDArray[0] + %q{\'%20\'} + @sceneUserArray[0] + %q{\''\}}
813
+ #old method @haScene = %q{\{'name' : '} + @sceneNameArray[0] + %q{','deviceType' : 'custom','onUrl' : '} + @savantURLstr + %q{/activateScene%20\'} + @sceneNameArray[0].gsub(" ", "%20") + %q{\'%20\'} + @sceneIDArray[0] + %q{\'%20\'} + @sceneUserArray[0] + %q{\''\}}
814
+
815
+
816
+ @haScene = %q{\{'name' : '} + @sceneNameArray[0] + %q{','deviceType' : 'custom',} + "\'onUrl\' : \'\[\{\\\"item\\\":\\\"" + @savantURLstr + %q{/activateScene%20\'} + @sceneNameArray[0].gsub(" ", "%20") + %q{\'%20\'} + @sceneIDArray[0] + %q{\'%20\'} + @sceneUserArray[0] + %q{\'\",\"type\":\"httpDevice\"} + "}]\'}"
817
+
818
+ puts "\n\nPOST:" + @haScene
819
+
719
820
  #post device to habridge
720
821
  uri = URI.parse(@haURLstr)
721
822
  begin
@@ -921,7 +1022,12 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
921
1022
  @requestOnArray = @savantRequestOn.split(/:/)
922
1023
  #Add escapes and formatting to pass through JSON to Ha Bridge
923
1024
  @requestOnCmd = @requestOnArray.shift.gsub!(/[- ']/, '-' => '\\\'-\\\'', ' ' => '%20')
924
- @strRequestOn = %q{'onUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOnCmd + %q{\'}
1025
+
1026
+ #old version @strRequestOn = %q{'onUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOnCmd + %q{\'}
1027
+
1028
+ @strRequestOn = "\'onUrl\' : \'\[\{\\\"item\\\":\\\"" + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOnCmd + %q{\'}
1029
+
1030
+
925
1031
  else
926
1032
  @error = "Not a valid On workflow."
927
1033
  end
@@ -933,7 +1039,8 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
933
1039
  elsif @savantRequestOff.to_s.include?(":") || @savantRequestOff.to_s.include?("-")
934
1040
  @requestOffArray = @savantRequestOff.split(/:/)
935
1041
  @requestOffCmd = @requestOffArray.shift.gsub!(/[- ']/, '-' => '\\\'-\\\'', ' ' => '%20')
936
- @strRequestOff = %q{'offUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOffCmd + %q{\'}
1042
+ #old version @strRequestOff = %q{'offUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOffCmd + %q{\'}
1043
+ @strRequestOff = "\'offUrl\' : \'\[\{\\\"item\\\":\\\"" + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestOffCmd + %q{\'}
937
1044
  else
938
1045
  @error = "Not a valid Off workflow."
939
1046
  end
@@ -945,7 +1052,8 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
945
1052
  elsif @savantRequestDim.to_s.include?(":") || @savantRequestDim.to_s.include?("-")
946
1053
  @requestDimArray = @savantRequestDim.split(/:/)
947
1054
  @requestDimCmd = @requestDimArray.shift.gsub!(/[- ']/, '-' => '\\\'-\\\'', ' ' => '%20')
948
- @strRequestDim = %q{'dimUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestDimCmd + %q{\'}
1055
+ #old version @strRequestDim = %q{'dimUrl' : '} + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestDimCmd + %q{\'}
1056
+ @strRequestDim = "\'dimUrl\' : \'\[\{\\\"item\\\":\\\"" + @savantURLstr + %q{/servicerequestcommand%20\'} + @requestDimCmd + %q{\'}
949
1057
  else
950
1058
  @error = "Not a valid Dim workflow."
951
1059
  end
@@ -1023,7 +1131,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1023
1131
  else
1024
1132
  #Add JSON quote terminator is string is not empty
1025
1133
  if !@savantRequestOn.to_s.empty?
1026
- @strRequestOn += %q{'}
1134
+ @strRequestOn += %q{\",\"type\":\"httpDevice\"} + '}]\''
1027
1135
  end
1028
1136
  @requestOnComplex = 0
1029
1137
  end
@@ -1092,7 +1200,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1092
1200
  else
1093
1201
  @requestOffComplex = 0
1094
1202
  if !@savantRequestOff.to_s.empty?
1095
- @strRequestOff += %q{'}
1203
+ @strRequestOff += %q{\",\"type\":\"httpDevice\"} + '}]\''
1096
1204
  end
1097
1205
  end
1098
1206
 
@@ -1160,7 +1268,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1160
1268
  else
1161
1269
  @requestDimComplex = 0
1162
1270
  if !@savantRequestDim.to_s.empty?
1163
- @strRequestDim += %q{'}
1271
+ @strRequestDim += %q{\",\"type\":\"httpDevice\"} + '}]\''
1164
1272
  end
1165
1273
  end
1166
1274
 
@@ -1259,7 +1367,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1259
1367
 
1260
1368
  #Create On request string by joining each arg/val from array with proper JSON syntax
1261
1369
  @strRequestOn += '%20\\\'' + requestOnValues.join('\\\'%20\\\'') + '\\\''
1262
- @strRequestOn += %q{'}
1370
+ @strRequestOn += %q{\",\"type\":\"httpDevice\"} + '}]\''
1263
1371
 
1264
1372
  #Hide On parameter window and check to see if Off or Dim commands had parameters, then show them. Else, send the string to the HA Bridge.
1265
1373
  @builder["dialogOn"].hide
@@ -1340,7 +1448,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1340
1448
  requestOffValues.push(@requestOffValue9)
1341
1449
  end
1342
1450
  @strRequestOff += '%20\\\'' + requestOffValues.join('\\\'%20\\\'') + '\\\''
1343
- @strRequestOff += %q{'}
1451
+ @strRequestOff += %q{\",\"type\":\"httpDevice\"} + '}]\''
1344
1452
  @builder["dialogOff"].hide
1345
1453
  if @requestDimComplex == 1
1346
1454
  @builder["dialogDim"].show
@@ -1418,7 +1526,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1418
1526
  requestDimValues.push(@requestDimValue9)
1419
1527
  end
1420
1528
  @strRequestDim += '%20\\\'' + requestDimValues.join('\\\'%20\\\'') + '\\\''
1421
- @strRequestDim += %q{'}
1529
+ @strRequestDim += %q{\",\"type\":\"httpDevice\"} + '}]\''
1422
1530
  @builder["dialogDim"].hide
1423
1531
  sendHaRequest()
1424
1532
  end
@@ -1453,7 +1561,7 @@ ssh.exec!("launchctl unload /Users/RPM/Library/LaunchAgents/com.habridgescenesyn
1453
1561
  end
1454
1562
  @haRequest += %q{\}}
1455
1563
 
1456
- #Debug alert "Host address = " + @savantURLstr + "\n\nHA Bridge address = " + @haURLstr + "\n\nDevice name = " + @haName + "\n\nOnCommand = " + @strRequestOn + "\n\nOffCommand = " + @strRequestOff + "\n\nDimCommand = " + @strRequestDim + "\n\nRequest String = " + @haRequest
1564
+ puts "\n\nHost SCLI bridge address = " + @savantURLstr + "\n\nHA Bridge address = " + @haURLstr + "\n\nDevice name = " + @haName + "\n\nOnCommand = " + @strRequestOn + "\n\nOffCommand = " + @strRequestOff + "\n\nDimCommand = " + @strRequestDim + "\n\nRequest String = " + @haRequest
1457
1565
 
1458
1566
 
1459
1567
  #Send JSON string to specified host IP. Alert user of any errors or success.
@@ -0,0 +1,2248 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated with glade 3.20.0 -->
3
+ <interface>
4
+ <requires lib="gtk+" version="3.0"/>
5
+ <object class="GtkWindow" id="window1">
6
+ <property name="width_request">800</property>
7
+ <property name="can_focus">False</property>
8
+ <property name="has_focus">True</property>
9
+ <property name="modal">True</property>
10
+ <property name="window_position">center-always</property>
11
+ <property name="urgency_hint">True</property>
12
+ <property name="has_resize_grip">True</property>
13
+ <child>
14
+ <object class="GtkGrid">
15
+ <property name="visible">True</property>
16
+ <property name="can_focus">False</property>
17
+ <property name="margin_left">12</property>
18
+ <property name="margin_right">12</property>
19
+ <child>
20
+ <object class="GtkLabel">
21
+ <property name="visible">True</property>
22
+ <property name="can_focus">False</property>
23
+ <property name="margin_top">12</property>
24
+ <property name="margin_bottom">12</property>
25
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Savant Echo Integration&lt;/b&gt;&lt;/big&gt;</property>
26
+ <property name="use_markup">True</property>
27
+ </object>
28
+ <packing>
29
+ <property name="left_attach">0</property>
30
+ <property name="top_attach">0</property>
31
+ </packing>
32
+ </child>
33
+ <child>
34
+ <object class="GtkFrame">
35
+ <property name="visible">True</property>
36
+ <property name="can_focus">False</property>
37
+ <property name="hexpand">True</property>
38
+ <property name="label_xalign">0</property>
39
+ <property name="shadow_type">none</property>
40
+ <child>
41
+ <object class="GtkAlignment">
42
+ <property name="visible">True</property>
43
+ <property name="can_focus">False</property>
44
+ <property name="hexpand">True</property>
45
+ <property name="left_padding">12</property>
46
+ <child>
47
+ <object class="GtkGrid">
48
+ <property name="visible">True</property>
49
+ <property name="can_focus">False</property>
50
+ <child>
51
+ <object class="GtkEntry" id="savantURL">
52
+ <property name="visible">True</property>
53
+ <property name="can_focus">True</property>
54
+ <property name="has_focus">True</property>
55
+ <property name="is_focus">True</property>
56
+ <property name="halign">start</property>
57
+ <property name="margin_right">12</property>
58
+ <property name="width_chars">50</property>
59
+ </object>
60
+ <packing>
61
+ <property name="left_attach">0</property>
62
+ <property name="top_attach">0</property>
63
+ </packing>
64
+ </child>
65
+ <child>
66
+ <object class="GtkButton" id="buttonHabridgeStatus">
67
+ <property name="label" translatable="yes">button</property>
68
+ <property name="visible">True</property>
69
+ <property name="can_focus">True</property>
70
+ <property name="receives_default">True</property>
71
+ <property name="halign">end</property>
72
+ <property name="hexpand">True</property>
73
+ <property name="image_position">right</property>
74
+ </object>
75
+ <packing>
76
+ <property name="left_attach">1</property>
77
+ <property name="top_attach">0</property>
78
+ </packing>
79
+ </child>
80
+ </object>
81
+ </child>
82
+ </object>
83
+ </child>
84
+ <child type="label">
85
+ <object class="GtkLabel">
86
+ <property name="visible">True</property>
87
+ <property name="can_focus">False</property>
88
+ <property name="margin_left">12</property>
89
+ <property name="margin_top">8</property>
90
+ <property name="margin_bottom">8</property>
91
+ <property name="label" translatable="yes">Savant Pro Host IP Address</property>
92
+ </object>
93
+ </child>
94
+ </object>
95
+ <packing>
96
+ <property name="left_attach">0</property>
97
+ <property name="top_attach">1</property>
98
+ </packing>
99
+ </child>
100
+ <child>
101
+ <object class="GtkFrame">
102
+ <property name="visible">True</property>
103
+ <property name="can_focus">False</property>
104
+ <property name="hexpand">True</property>
105
+ <property name="label_xalign">0</property>
106
+ <property name="shadow_type">none</property>
107
+ <child>
108
+ <object class="GtkAlignment">
109
+ <property name="visible">True</property>
110
+ <property name="can_focus">False</property>
111
+ <property name="hexpand">True</property>
112
+ <property name="left_padding">12</property>
113
+ <child>
114
+ <object class="GtkGrid">
115
+ <property name="visible">True</property>
116
+ <property name="can_focus">False</property>
117
+ <child>
118
+ <object class="GtkEntry" id="haName">
119
+ <property name="visible">True</property>
120
+ <property name="can_focus">True</property>
121
+ <property name="halign">start</property>
122
+ <property name="width_chars">50</property>
123
+ </object>
124
+ <packing>
125
+ <property name="left_attach">0</property>
126
+ <property name="top_attach">0</property>
127
+ </packing>
128
+ </child>
129
+ <child>
130
+ <object class="GtkButton" id="buttonSceneSync">
131
+ <property name="label" translatable="yes">button</property>
132
+ <property name="visible">True</property>
133
+ <property name="can_focus">True</property>
134
+ <property name="receives_default">True</property>
135
+ <property name="halign">end</property>
136
+ <property name="hexpand">True</property>
137
+ <property name="image_position">right</property>
138
+ </object>
139
+ <packing>
140
+ <property name="left_attach">1</property>
141
+ <property name="top_attach">0</property>
142
+ </packing>
143
+ </child>
144
+ </object>
145
+ </child>
146
+ </object>
147
+ </child>
148
+ <child type="label">
149
+ <object class="GtkLabel">
150
+ <property name="visible">True</property>
151
+ <property name="can_focus">False</property>
152
+ <property name="margin_left">12</property>
153
+ <property name="margin_top">8</property>
154
+ <property name="margin_bottom">8</property>
155
+ <property name="label" translatable="yes">Device Name for Alexa Keyword</property>
156
+ </object>
157
+ </child>
158
+ </object>
159
+ <packing>
160
+ <property name="left_attach">0</property>
161
+ <property name="top_attach">2</property>
162
+ </packing>
163
+ </child>
164
+ <child>
165
+ <object class="GtkFrame">
166
+ <property name="visible">True</property>
167
+ <property name="can_focus">False</property>
168
+ <property name="hexpand">True</property>
169
+ <property name="label_xalign">0</property>
170
+ <property name="shadow_type">none</property>
171
+ <child>
172
+ <object class="GtkGrid">
173
+ <property name="visible">True</property>
174
+ <property name="can_focus">False</property>
175
+ <child>
176
+ <object class="GtkAlignment">
177
+ <property name="visible">True</property>
178
+ <property name="can_focus">False</property>
179
+ <property name="hexpand">True</property>
180
+ <property name="left_padding">12</property>
181
+ <child>
182
+ <object class="GtkEntry" id="savantRequestOn">
183
+ <property name="visible">True</property>
184
+ <property name="can_focus">True</property>
185
+ <property name="margin_right">12</property>
186
+ <property name="hexpand">True</property>
187
+ </object>
188
+ </child>
189
+ </object>
190
+ <packing>
191
+ <property name="left_attach">0</property>
192
+ <property name="top_attach">0</property>
193
+ </packing>
194
+ </child>
195
+ <child>
196
+ <object class="GtkCheckButton" id="buttonOnZoneOnly">
197
+ <property name="label" translatable="yes">Zone Request</property>
198
+ <property name="visible">True</property>
199
+ <property name="can_focus">True</property>
200
+ <property name="receives_default">False</property>
201
+ <property name="margin_right">12</property>
202
+ <property name="draw_indicator">True</property>
203
+ </object>
204
+ <packing>
205
+ <property name="left_attach">1</property>
206
+ <property name="top_attach">0</property>
207
+ </packing>
208
+ </child>
209
+ </object>
210
+ </child>
211
+ <child type="label">
212
+ <object class="GtkLabel">
213
+ <property name="visible">True</property>
214
+ <property name="can_focus">False</property>
215
+ <property name="margin_left">12</property>
216
+ <property name="margin_top">8</property>
217
+ <property name="margin_bottom">8</property>
218
+ <property name="label" translatable="yes">"On" 3rd Party Request</property>
219
+ </object>
220
+ </child>
221
+ </object>
222
+ <packing>
223
+ <property name="left_attach">0</property>
224
+ <property name="top_attach">3</property>
225
+ </packing>
226
+ </child>
227
+ <child>
228
+ <object class="GtkFrame">
229
+ <property name="visible">True</property>
230
+ <property name="can_focus">False</property>
231
+ <property name="hexpand">True</property>
232
+ <property name="label_xalign">0</property>
233
+ <property name="shadow_type">none</property>
234
+ <child>
235
+ <object class="GtkAlignment">
236
+ <property name="visible">True</property>
237
+ <property name="can_focus">False</property>
238
+ <property name="hexpand">True</property>
239
+ <property name="left_padding">12</property>
240
+ <child>
241
+ <object class="GtkGrid">
242
+ <property name="visible">True</property>
243
+ <property name="can_focus">False</property>
244
+ <child>
245
+ <object class="GtkEntry" id="savantRequestOff">
246
+ <property name="visible">True</property>
247
+ <property name="can_focus">True</property>
248
+ <property name="margin_right">12</property>
249
+ <property name="hexpand">True</property>
250
+ </object>
251
+ <packing>
252
+ <property name="left_attach">0</property>
253
+ <property name="top_attach">0</property>
254
+ </packing>
255
+ </child>
256
+ <child>
257
+ <object class="GtkCheckButton" id="buttonOffZoneOnly">
258
+ <property name="label" translatable="yes">Zone Request</property>
259
+ <property name="visible">True</property>
260
+ <property name="can_focus">True</property>
261
+ <property name="receives_default">False</property>
262
+ <property name="margin_right">12</property>
263
+ <property name="draw_indicator">True</property>
264
+ </object>
265
+ <packing>
266
+ <property name="left_attach">1</property>
267
+ <property name="top_attach">0</property>
268
+ </packing>
269
+ </child>
270
+ </object>
271
+ </child>
272
+ </object>
273
+ </child>
274
+ <child type="label">
275
+ <object class="GtkLabel">
276
+ <property name="visible">True</property>
277
+ <property name="can_focus">False</property>
278
+ <property name="margin_left">12</property>
279
+ <property name="margin_top">8</property>
280
+ <property name="margin_bottom">8</property>
281
+ <property name="label" translatable="yes">"Off" 3rd Party Request</property>
282
+ </object>
283
+ </child>
284
+ </object>
285
+ <packing>
286
+ <property name="left_attach">0</property>
287
+ <property name="top_attach">4</property>
288
+ </packing>
289
+ </child>
290
+ <child>
291
+ <object class="GtkFrame">
292
+ <property name="visible">True</property>
293
+ <property name="can_focus">False</property>
294
+ <property name="hexpand">True</property>
295
+ <property name="label_xalign">0</property>
296
+ <property name="shadow_type">none</property>
297
+ <child>
298
+ <object class="GtkAlignment">
299
+ <property name="visible">True</property>
300
+ <property name="can_focus">False</property>
301
+ <property name="hexpand">True</property>
302
+ <property name="left_padding">12</property>
303
+ <child>
304
+ <object class="GtkGrid">
305
+ <property name="visible">True</property>
306
+ <property name="can_focus">False</property>
307
+ <child>
308
+ <object class="GtkEntry" id="savantRequestDim">
309
+ <property name="visible">True</property>
310
+ <property name="can_focus">True</property>
311
+ <property name="margin_right">12</property>
312
+ <property name="hexpand">True</property>
313
+ </object>
314
+ <packing>
315
+ <property name="left_attach">0</property>
316
+ <property name="top_attach">0</property>
317
+ </packing>
318
+ </child>
319
+ <child>
320
+ <object class="GtkCheckButton" id="buttonDimZoneOnly">
321
+ <property name="label" translatable="yes">Zone Request</property>
322
+ <property name="visible">True</property>
323
+ <property name="can_focus">True</property>
324
+ <property name="receives_default">False</property>
325
+ <property name="margin_right">12</property>
326
+ <property name="draw_indicator">True</property>
327
+ </object>
328
+ <packing>
329
+ <property name="left_attach">1</property>
330
+ <property name="top_attach">0</property>
331
+ </packing>
332
+ </child>
333
+ </object>
334
+ </child>
335
+ </object>
336
+ </child>
337
+ <child type="label">
338
+ <object class="GtkLabel">
339
+ <property name="visible">True</property>
340
+ <property name="can_focus">False</property>
341
+ <property name="margin_left">12</property>
342
+ <property name="margin_top">8</property>
343
+ <property name="margin_bottom">8</property>
344
+ <property name="label" translatable="yes">"Dim" 3rd Party Request</property>
345
+ </object>
346
+ </child>
347
+ </object>
348
+ <packing>
349
+ <property name="left_attach">0</property>
350
+ <property name="top_attach">5</property>
351
+ </packing>
352
+ </child>
353
+ <child>
354
+ <object class="GtkGrid">
355
+ <property name="visible">True</property>
356
+ <property name="can_focus">False</property>
357
+ <property name="margin_left">12</property>
358
+ <property name="margin_right">12</property>
359
+ <property name="column_homogeneous">True</property>
360
+ <child>
361
+ <object class="GtkButtonBox">
362
+ <property name="visible">True</property>
363
+ <property name="can_focus">False</property>
364
+ <property name="margin_top">12</property>
365
+ <property name="margin_bottom">12</property>
366
+ <property name="spacing">7</property>
367
+ <property name="layout_style">end</property>
368
+ <child>
369
+ <object class="GtkButton" id="buttonAdd">
370
+ <property name="label" translatable="yes">Add</property>
371
+ <property name="visible">True</property>
372
+ <property name="can_focus">True</property>
373
+ <property name="receives_default">True</property>
374
+ </object>
375
+ <packing>
376
+ <property name="expand">True</property>
377
+ <property name="fill">True</property>
378
+ <property name="position">0</property>
379
+ </packing>
380
+ </child>
381
+ <child>
382
+ <object class="GtkButton" id="buttonExit">
383
+ <property name="label" translatable="yes">Exit</property>
384
+ <property name="visible">True</property>
385
+ <property name="can_focus">True</property>
386
+ <property name="receives_default">True</property>
387
+ </object>
388
+ <packing>
389
+ <property name="expand">True</property>
390
+ <property name="fill">True</property>
391
+ <property name="position">1</property>
392
+ </packing>
393
+ </child>
394
+ </object>
395
+ <packing>
396
+ <property name="left_attach">1</property>
397
+ <property name="top_attach">0</property>
398
+ </packing>
399
+ </child>
400
+ <child>
401
+ <object class="GtkButtonBox">
402
+ <property name="visible">True</property>
403
+ <property name="can_focus">False</property>
404
+ <property name="layout_style">start</property>
405
+ <child>
406
+ <object class="GtkButton" id="buttonBackupRestore">
407
+ <property name="label" translatable="yes">Backup/Restore</property>
408
+ <property name="visible">True</property>
409
+ <property name="can_focus">True</property>
410
+ <property name="receives_default">True</property>
411
+ </object>
412
+ <packing>
413
+ <property name="expand">True</property>
414
+ <property name="fill">True</property>
415
+ <property name="position">0</property>
416
+ </packing>
417
+ </child>
418
+ </object>
419
+ <packing>
420
+ <property name="left_attach">0</property>
421
+ <property name="top_attach">0</property>
422
+ </packing>
423
+ </child>
424
+ </object>
425
+ <packing>
426
+ <property name="left_attach">0</property>
427
+ <property name="top_attach">6</property>
428
+ </packing>
429
+ </child>
430
+ </object>
431
+ </child>
432
+ </object>
433
+ <object class="GtkDialog" id="dialogDim">
434
+ <property name="can_focus">False</property>
435
+ <property name="margin_left">6</property>
436
+ <property name="margin_right">6</property>
437
+ <property name="modal">True</property>
438
+ <property name="window_position">center-on-parent</property>
439
+ <property name="default_width">320</property>
440
+ <property name="default_height">260</property>
441
+ <property name="destroy_with_parent">True</property>
442
+ <property name="type_hint">dialog</property>
443
+ <property name="urgency_hint">True</property>
444
+ <property name="transient_for">window1</property>
445
+ <child internal-child="vbox">
446
+ <object class="GtkBox">
447
+ <property name="can_focus">False</property>
448
+ <property name="margin_left">6</property>
449
+ <property name="margin_right">6</property>
450
+ <property name="margin_top">12</property>
451
+ <property name="margin_bottom">12</property>
452
+ <property name="orientation">vertical</property>
453
+ <property name="spacing">2</property>
454
+ <child internal-child="action_area">
455
+ <object class="GtkButtonBox">
456
+ <property name="can_focus">False</property>
457
+ <property name="layout_style">end</property>
458
+ <child>
459
+ <object class="GtkButton" id="buttonAcceptDim">
460
+ <property name="label" translatable="yes">Accept</property>
461
+ <property name="visible">True</property>
462
+ <property name="can_focus">True</property>
463
+ <property name="receives_default">True</property>
464
+ <property name="margin_top">6</property>
465
+ </object>
466
+ <packing>
467
+ <property name="expand">True</property>
468
+ <property name="fill">True</property>
469
+ <property name="position">0</property>
470
+ </packing>
471
+ </child>
472
+ <child>
473
+ <object class="GtkButton" id="buttonCancelDim">
474
+ <property name="label" translatable="yes">Cancel</property>
475
+ <property name="visible">True</property>
476
+ <property name="can_focus">True</property>
477
+ <property name="receives_default">True</property>
478
+ <property name="margin_right">6</property>
479
+ <property name="margin_top">6</property>
480
+ </object>
481
+ <packing>
482
+ <property name="expand">True</property>
483
+ <property name="fill">True</property>
484
+ <property name="position">1</property>
485
+ </packing>
486
+ </child>
487
+ </object>
488
+ <packing>
489
+ <property name="expand">False</property>
490
+ <property name="fill">False</property>
491
+ <property name="position">0</property>
492
+ </packing>
493
+ </child>
494
+ <child>
495
+ <object class="GtkGrid">
496
+ <property name="visible">True</property>
497
+ <property name="can_focus">False</property>
498
+ <child>
499
+ <object class="GtkLabel">
500
+ <property name="visible">True</property>
501
+ <property name="can_focus">False</property>
502
+ <property name="margin_bottom">5</property>
503
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;"Dim" Action Arguments&lt;/b&gt;&lt;/big&gt;
504
+
505
+ Enter "percent" to derive 0-100 value from voice command.</property>
506
+ <property name="use_markup">True</property>
507
+ <property name="justify">center</property>
508
+ </object>
509
+ <packing>
510
+ <property name="left_attach">0</property>
511
+ <property name="top_attach">0</property>
512
+ </packing>
513
+ </child>
514
+ <child>
515
+ <object class="GtkFrame" id="frameDimArg1">
516
+ <property name="visible">True</property>
517
+ <property name="can_focus">False</property>
518
+ <property name="hexpand">True</property>
519
+ <property name="label_xalign">0</property>
520
+ <property name="shadow_type">none</property>
521
+ <child>
522
+ <object class="GtkAlignment">
523
+ <property name="visible">True</property>
524
+ <property name="can_focus">False</property>
525
+ <property name="left_padding">12</property>
526
+ <child>
527
+ <object class="GtkEntry" id="requestDimValue1">
528
+ <property name="visible">True</property>
529
+ <property name="can_focus">True</property>
530
+ </object>
531
+ </child>
532
+ </object>
533
+ </child>
534
+ <child type="label">
535
+ <object class="GtkLabel" id="requestDimArg1">
536
+ <property name="name">12</property>
537
+ <property name="visible">True</property>
538
+ <property name="can_focus">False</property>
539
+ <property name="margin_top">10</property>
540
+ </object>
541
+ </child>
542
+ </object>
543
+ <packing>
544
+ <property name="left_attach">0</property>
545
+ <property name="top_attach">1</property>
546
+ </packing>
547
+ </child>
548
+ <child>
549
+ <object class="GtkFrame" id="frameDimArg2">
550
+ <property name="visible">True</property>
551
+ <property name="can_focus">False</property>
552
+ <property name="label_xalign">0</property>
553
+ <property name="shadow_type">none</property>
554
+ <child>
555
+ <object class="GtkAlignment">
556
+ <property name="visible">True</property>
557
+ <property name="can_focus">False</property>
558
+ <property name="left_padding">12</property>
559
+ <child>
560
+ <object class="GtkEntry" id="requestDimValue2">
561
+ <property name="visible">True</property>
562
+ <property name="can_focus">True</property>
563
+ </object>
564
+ </child>
565
+ </object>
566
+ </child>
567
+ <child type="label">
568
+ <object class="GtkLabel" id="requestDimArg2">
569
+ <property name="name">12</property>
570
+ <property name="visible">True</property>
571
+ <property name="can_focus">False</property>
572
+ <property name="margin_top">10</property>
573
+ </object>
574
+ </child>
575
+ </object>
576
+ <packing>
577
+ <property name="left_attach">0</property>
578
+ <property name="top_attach">2</property>
579
+ </packing>
580
+ </child>
581
+ <child>
582
+ <object class="GtkFrame" id="frameDimArg3">
583
+ <property name="visible">True</property>
584
+ <property name="can_focus">False</property>
585
+ <property name="label_xalign">0</property>
586
+ <property name="shadow_type">none</property>
587
+ <child>
588
+ <object class="GtkAlignment">
589
+ <property name="visible">True</property>
590
+ <property name="can_focus">False</property>
591
+ <property name="left_padding">12</property>
592
+ <child>
593
+ <object class="GtkEntry" id="requestDimValue3">
594
+ <property name="visible">True</property>
595
+ <property name="can_focus">True</property>
596
+ </object>
597
+ </child>
598
+ </object>
599
+ </child>
600
+ <child type="label">
601
+ <object class="GtkLabel" id="requestDimArg3">
602
+ <property name="name">12</property>
603
+ <property name="visible">True</property>
604
+ <property name="can_focus">False</property>
605
+ <property name="margin_top">10</property>
606
+ </object>
607
+ </child>
608
+ </object>
609
+ <packing>
610
+ <property name="left_attach">0</property>
611
+ <property name="top_attach">3</property>
612
+ </packing>
613
+ </child>
614
+ <child>
615
+ <object class="GtkFrame" id="frameDimArg4">
616
+ <property name="visible">True</property>
617
+ <property name="can_focus">False</property>
618
+ <property name="label_xalign">0</property>
619
+ <property name="shadow_type">none</property>
620
+ <child>
621
+ <object class="GtkAlignment">
622
+ <property name="visible">True</property>
623
+ <property name="can_focus">False</property>
624
+ <property name="left_padding">12</property>
625
+ <child>
626
+ <object class="GtkEntry" id="requestDimValue4">
627
+ <property name="visible">True</property>
628
+ <property name="can_focus">True</property>
629
+ </object>
630
+ </child>
631
+ </object>
632
+ </child>
633
+ <child type="label">
634
+ <object class="GtkLabel" id="requestDimArg4">
635
+ <property name="name">12</property>
636
+ <property name="visible">True</property>
637
+ <property name="can_focus">False</property>
638
+ <property name="margin_top">10</property>
639
+ </object>
640
+ </child>
641
+ </object>
642
+ <packing>
643
+ <property name="left_attach">0</property>
644
+ <property name="top_attach">4</property>
645
+ </packing>
646
+ </child>
647
+ <child>
648
+ <object class="GtkFrame" id="frameDimArg5">
649
+ <property name="visible">True</property>
650
+ <property name="can_focus">False</property>
651
+ <property name="label_xalign">0</property>
652
+ <property name="shadow_type">none</property>
653
+ <child>
654
+ <object class="GtkAlignment">
655
+ <property name="visible">True</property>
656
+ <property name="can_focus">False</property>
657
+ <property name="left_padding">12</property>
658
+ <child>
659
+ <object class="GtkEntry" id="requestDimValue5">
660
+ <property name="visible">True</property>
661
+ <property name="can_focus">True</property>
662
+ </object>
663
+ </child>
664
+ </object>
665
+ </child>
666
+ <child type="label">
667
+ <object class="GtkLabel" id="requestDimArg5">
668
+ <property name="name">12</property>
669
+ <property name="visible">True</property>
670
+ <property name="can_focus">False</property>
671
+ <property name="margin_top">10</property>
672
+ </object>
673
+ </child>
674
+ </object>
675
+ <packing>
676
+ <property name="left_attach">0</property>
677
+ <property name="top_attach">5</property>
678
+ </packing>
679
+ </child>
680
+ <child>
681
+ <object class="GtkFrame" id="frameDimArg6">
682
+ <property name="visible">True</property>
683
+ <property name="can_focus">False</property>
684
+ <property name="label_xalign">0</property>
685
+ <property name="shadow_type">none</property>
686
+ <child>
687
+ <object class="GtkAlignment">
688
+ <property name="visible">True</property>
689
+ <property name="can_focus">False</property>
690
+ <property name="left_padding">12</property>
691
+ <child>
692
+ <object class="GtkEntry" id="requestDimValue6">
693
+ <property name="visible">True</property>
694
+ <property name="can_focus">True</property>
695
+ </object>
696
+ </child>
697
+ </object>
698
+ </child>
699
+ <child type="label">
700
+ <object class="GtkLabel" id="requestDimArg6">
701
+ <property name="name">12</property>
702
+ <property name="visible">True</property>
703
+ <property name="can_focus">False</property>
704
+ <property name="margin_top">10</property>
705
+ </object>
706
+ </child>
707
+ </object>
708
+ <packing>
709
+ <property name="left_attach">0</property>
710
+ <property name="top_attach">6</property>
711
+ </packing>
712
+ </child>
713
+ <child>
714
+ <object class="GtkFrame" id="frameDimArg7">
715
+ <property name="visible">True</property>
716
+ <property name="can_focus">False</property>
717
+ <property name="label_xalign">0</property>
718
+ <property name="shadow_type">none</property>
719
+ <child>
720
+ <object class="GtkAlignment">
721
+ <property name="visible">True</property>
722
+ <property name="can_focus">False</property>
723
+ <property name="left_padding">12</property>
724
+ <child>
725
+ <object class="GtkEntry" id="requestDimValue7">
726
+ <property name="visible">True</property>
727
+ <property name="can_focus">True</property>
728
+ </object>
729
+ </child>
730
+ </object>
731
+ </child>
732
+ <child type="label">
733
+ <object class="GtkLabel" id="requestDimArg7">
734
+ <property name="name">12</property>
735
+ <property name="visible">True</property>
736
+ <property name="can_focus">False</property>
737
+ <property name="margin_top">10</property>
738
+ </object>
739
+ </child>
740
+ </object>
741
+ <packing>
742
+ <property name="left_attach">0</property>
743
+ <property name="top_attach">7</property>
744
+ </packing>
745
+ </child>
746
+ <child>
747
+ <object class="GtkFrame" id="frameDimArg8">
748
+ <property name="visible">True</property>
749
+ <property name="can_focus">False</property>
750
+ <property name="label_xalign">0</property>
751
+ <property name="shadow_type">none</property>
752
+ <child>
753
+ <object class="GtkAlignment">
754
+ <property name="visible">True</property>
755
+ <property name="can_focus">False</property>
756
+ <property name="left_padding">12</property>
757
+ <child>
758
+ <object class="GtkEntry" id="requestDimValue8">
759
+ <property name="visible">True</property>
760
+ <property name="can_focus">True</property>
761
+ </object>
762
+ </child>
763
+ </object>
764
+ </child>
765
+ <child type="label">
766
+ <object class="GtkLabel" id="requestDimArg8">
767
+ <property name="name">12</property>
768
+ <property name="visible">True</property>
769
+ <property name="can_focus">False</property>
770
+ <property name="margin_top">10</property>
771
+ </object>
772
+ </child>
773
+ </object>
774
+ <packing>
775
+ <property name="left_attach">0</property>
776
+ <property name="top_attach">8</property>
777
+ </packing>
778
+ </child>
779
+ <child>
780
+ <object class="GtkFrame" id="frameDimArg9">
781
+ <property name="visible">True</property>
782
+ <property name="can_focus">False</property>
783
+ <property name="label_xalign">0</property>
784
+ <property name="shadow_type">none</property>
785
+ <child>
786
+ <object class="GtkAlignment">
787
+ <property name="visible">True</property>
788
+ <property name="can_focus">False</property>
789
+ <property name="left_padding">12</property>
790
+ <child>
791
+ <object class="GtkEntry" id="requestDimValue9">
792
+ <property name="visible">True</property>
793
+ <property name="can_focus">True</property>
794
+ </object>
795
+ </child>
796
+ </object>
797
+ </child>
798
+ <child type="label">
799
+ <object class="GtkLabel" id="requestDimArg9">
800
+ <property name="name">12</property>
801
+ <property name="visible">True</property>
802
+ <property name="can_focus">False</property>
803
+ <property name="margin_top">10</property>
804
+ </object>
805
+ </child>
806
+ </object>
807
+ <packing>
808
+ <property name="left_attach">0</property>
809
+ <property name="top_attach">9</property>
810
+ </packing>
811
+ </child>
812
+ </object>
813
+ <packing>
814
+ <property name="expand">False</property>
815
+ <property name="fill">True</property>
816
+ <property name="position">1</property>
817
+ </packing>
818
+ </child>
819
+ </object>
820
+ </child>
821
+ </object>
822
+ <object class="GtkDialog" id="dialogHelp">
823
+ <property name="can_focus">False</property>
824
+ <property name="modal">True</property>
825
+ <property name="window_position">center-on-parent</property>
826
+ <property name="destroy_with_parent">True</property>
827
+ <property name="type_hint">dialog</property>
828
+ <property name="urgency_hint">True</property>
829
+ <property name="transient_for">window1</property>
830
+ <child internal-child="vbox">
831
+ <object class="GtkBox">
832
+ <property name="can_focus">False</property>
833
+ <property name="margin_left">12</property>
834
+ <property name="margin_right">12</property>
835
+ <property name="margin_top">6</property>
836
+ <property name="margin_bottom">6</property>
837
+ <property name="orientation">vertical</property>
838
+ <property name="spacing">2</property>
839
+ <child internal-child="action_area">
840
+ <object class="GtkButtonBox">
841
+ <property name="can_focus">False</property>
842
+ <property name="layout_style">end</property>
843
+ <child>
844
+ <object class="GtkButton" id="buttonHelpInstall">
845
+ <property name="label" translatable="yes">Install</property>
846
+ <property name="visible">True</property>
847
+ <property name="can_focus">True</property>
848
+ <property name="receives_default">True</property>
849
+ <property name="margin_top">12</property>
850
+ </object>
851
+ <packing>
852
+ <property name="expand">True</property>
853
+ <property name="fill">True</property>
854
+ <property name="position">0</property>
855
+ </packing>
856
+ </child>
857
+ <child>
858
+ <object class="GtkButton" id="buttonHelpUninstall">
859
+ <property name="label" translatable="yes">Uninstall</property>
860
+ <property name="visible">True</property>
861
+ <property name="can_focus">True</property>
862
+ <property name="receives_default">True</property>
863
+ <property name="margin_top">12</property>
864
+ </object>
865
+ <packing>
866
+ <property name="expand">True</property>
867
+ <property name="fill">True</property>
868
+ <property name="position">1</property>
869
+ </packing>
870
+ </child>
871
+ <child>
872
+ <object class="GtkButton" id="buttonHelpCancel">
873
+ <property name="label" translatable="yes">Cancel</property>
874
+ <property name="visible">True</property>
875
+ <property name="can_focus">True</property>
876
+ <property name="receives_default">True</property>
877
+ <property name="margin_top">12</property>
878
+ </object>
879
+ <packing>
880
+ <property name="expand">True</property>
881
+ <property name="fill">True</property>
882
+ <property name="position">2</property>
883
+ </packing>
884
+ </child>
885
+ </object>
886
+ <packing>
887
+ <property name="expand">False</property>
888
+ <property name="fill">False</property>
889
+ <property name="position">4</property>
890
+ </packing>
891
+ </child>
892
+ <child>
893
+ <object class="GtkLabel">
894
+ <property name="visible">True</property>
895
+ <property name="can_focus">False</property>
896
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Savant Echo Bridge Help&lt;/b&gt;&lt;/big&gt;</property>
897
+ <property name="use_markup">True</property>
898
+ </object>
899
+ <packing>
900
+ <property name="expand">False</property>
901
+ <property name="fill">True</property>
902
+ <property name="position">0</property>
903
+ </packing>
904
+ </child>
905
+ <child>
906
+ <object class="GtkLabel">
907
+ <property name="visible">True</property>
908
+ <property name="can_focus">False</property>
909
+ <property name="label" translatable="yes">
910
+ Savant, Amazon Echo, HA Bridge, and
911
+ SCLI HTTP Bridge Integration by Corey Miller
912
+ Requires installation of SCLI_HTTP ruby script,
913
+ Java JDK, and LaunchAgents on Savant Pro Host.
914
+ Choose install below to setup on host on local network.
915
+
916
+ Click on one of the below links to verify components are
917
+ correctly installed on host on local network.</property>
918
+ <property name="justify">center</property>
919
+ </object>
920
+ <packing>
921
+ <property name="expand">False</property>
922
+ <property name="fill">True</property>
923
+ <property name="position">1</property>
924
+ </packing>
925
+ </child>
926
+ <child>
927
+ <object class="GtkGrid">
928
+ <property name="visible">True</property>
929
+ <property name="can_focus">False</property>
930
+ <property name="margin_top">12</property>
931
+ <property name="margin_bottom">12</property>
932
+ <child>
933
+ <object class="GtkEntry" id="savantHelpURL">
934
+ <property name="visible">True</property>
935
+ <property name="can_focus">True</property>
936
+ <property name="hexpand">True</property>
937
+ </object>
938
+ <packing>
939
+ <property name="left_attach">1</property>
940
+ <property name="top_attach">0</property>
941
+ </packing>
942
+ </child>
943
+ <child>
944
+ <object class="GtkLabel">
945
+ <property name="visible">True</property>
946
+ <property name="can_focus">False</property>
947
+ <property name="label" translatable="yes">Savant Pro Host IP Address: </property>
948
+ <property name="justify">right</property>
949
+ </object>
950
+ <packing>
951
+ <property name="left_attach">0</property>
952
+ <property name="top_attach">0</property>
953
+ </packing>
954
+ </child>
955
+ </object>
956
+ <packing>
957
+ <property name="expand">False</property>
958
+ <property name="fill">True</property>
959
+ <property name="position">2</property>
960
+ </packing>
961
+ </child>
962
+ <child>
963
+ <object class="GtkButton" id="buttonHelpHAbridge">
964
+ <property name="label" translatable="yes">Launch HA Bridge</property>
965
+ <property name="visible">True</property>
966
+ <property name="can_focus">True</property>
967
+ <property name="receives_default">True</property>
968
+ <property name="margin_bottom">6</property>
969
+ </object>
970
+ <packing>
971
+ <property name="expand">False</property>
972
+ <property name="fill">True</property>
973
+ <property name="position">3</property>
974
+ </packing>
975
+ </child>
976
+ <child>
977
+ <object class="GtkButton" id="buttonHelpSCLIbridge">
978
+ <property name="label" translatable="yes">Launch SCLI HTTP Bridge</property>
979
+ <property name="visible">True</property>
980
+ <property name="can_focus">True</property>
981
+ <property name="receives_default">True</property>
982
+ </object>
983
+ <packing>
984
+ <property name="expand">False</property>
985
+ <property name="fill">True</property>
986
+ <property name="position">4</property>
987
+ </packing>
988
+ </child>
989
+ </object>
990
+ </child>
991
+ </object>
992
+ <object class="GtkDialog" id="dialogInstall">
993
+ <property name="can_focus">False</property>
994
+ <property name="modal">True</property>
995
+ <property name="window_position">center-on-parent</property>
996
+ <property name="default_width">320</property>
997
+ <property name="default_height">260</property>
998
+ <property name="destroy_with_parent">True</property>
999
+ <property name="type_hint">dialog</property>
1000
+ <property name="urgency_hint">True</property>
1001
+ <property name="transient_for">dialogHelp</property>
1002
+ <child internal-child="vbox">
1003
+ <object class="GtkBox">
1004
+ <property name="can_focus">False</property>
1005
+ <property name="margin_left">12</property>
1006
+ <property name="margin_right">12</property>
1007
+ <property name="margin_top">12</property>
1008
+ <property name="margin_bottom">12</property>
1009
+ <property name="hexpand">True</property>
1010
+ <property name="vexpand">True</property>
1011
+ <property name="orientation">vertical</property>
1012
+ <property name="spacing">2</property>
1013
+ <child internal-child="action_area">
1014
+ <object class="GtkButtonBox">
1015
+ <property name="can_focus">False</property>
1016
+ <property name="layout_style">end</property>
1017
+ <child>
1018
+ <object class="GtkButton" id="buttonInstallOK">
1019
+ <property name="label" translatable="yes">OK</property>
1020
+ <property name="can_focus">True</property>
1021
+ <property name="receives_default">True</property>
1022
+ </object>
1023
+ <packing>
1024
+ <property name="expand">True</property>
1025
+ <property name="fill">True</property>
1026
+ <property name="position">0</property>
1027
+ </packing>
1028
+ </child>
1029
+ <child>
1030
+ <object class="GtkButton" id="buttonInstallCancel">
1031
+ <property name="label" translatable="yes">Cancel</property>
1032
+ <property name="can_focus">True</property>
1033
+ <property name="receives_default">True</property>
1034
+ </object>
1035
+ <packing>
1036
+ <property name="expand">True</property>
1037
+ <property name="fill">True</property>
1038
+ <property name="position">1</property>
1039
+ </packing>
1040
+ </child>
1041
+ </object>
1042
+ <packing>
1043
+ <property name="expand">False</property>
1044
+ <property name="fill">False</property>
1045
+ <property name="position">0</property>
1046
+ </packing>
1047
+ </child>
1048
+ <child>
1049
+ <object class="GtkFrame">
1050
+ <property name="visible">True</property>
1051
+ <property name="can_focus">False</property>
1052
+ <property name="hexpand">True</property>
1053
+ <property name="vexpand">True</property>
1054
+ <property name="label_xalign">0</property>
1055
+ <property name="shadow_type">none</property>
1056
+ <child>
1057
+ <object class="GtkAlignment">
1058
+ <property name="height_request">80</property>
1059
+ <property name="visible">True</property>
1060
+ <property name="can_focus">False</property>
1061
+ <property name="halign">start</property>
1062
+ <property name="valign">start</property>
1063
+ <property name="margin_top">12</property>
1064
+ <property name="margin_bottom">12</property>
1065
+ <property name="hexpand">True</property>
1066
+ <property name="vexpand">True</property>
1067
+ <property name="left_padding">12</property>
1068
+ <child>
1069
+ <object class="GtkLabel" id="installStatus">
1070
+ <property name="visible">True</property>
1071
+ <property name="app_paintable">True</property>
1072
+ <property name="can_focus">False</property>
1073
+ <property name="hexpand">True</property>
1074
+ <property name="vexpand">True</property>
1075
+ </object>
1076
+ </child>
1077
+ </object>
1078
+ </child>
1079
+ <child type="label">
1080
+ <object class="GtkLabel">
1081
+ <property name="visible">True</property>
1082
+ <property name="can_focus">False</property>
1083
+ <property name="margin_bottom">12</property>
1084
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Installation Progress&lt;/b&gt;&lt;/big&gt;</property>
1085
+ <property name="use_markup">True</property>
1086
+ <property name="justify">center</property>
1087
+ </object>
1088
+ </child>
1089
+ </object>
1090
+ <packing>
1091
+ <property name="expand">False</property>
1092
+ <property name="fill">True</property>
1093
+ <property name="position">1</property>
1094
+ </packing>
1095
+ </child>
1096
+ </object>
1097
+ </child>
1098
+ </object>
1099
+ <object class="GtkDialog" id="dialogOff">
1100
+ <property name="can_focus">False</property>
1101
+ <property name="margin_left">6</property>
1102
+ <property name="margin_right">6</property>
1103
+ <property name="modal">True</property>
1104
+ <property name="window_position">center-on-parent</property>
1105
+ <property name="default_width">320</property>
1106
+ <property name="default_height">260</property>
1107
+ <property name="destroy_with_parent">True</property>
1108
+ <property name="type_hint">dialog</property>
1109
+ <property name="urgency_hint">True</property>
1110
+ <property name="transient_for">window1</property>
1111
+ <child internal-child="vbox">
1112
+ <object class="GtkBox">
1113
+ <property name="can_focus">False</property>
1114
+ <property name="margin_left">6</property>
1115
+ <property name="margin_right">6</property>
1116
+ <property name="margin_top">12</property>
1117
+ <property name="margin_bottom">12</property>
1118
+ <property name="orientation">vertical</property>
1119
+ <property name="spacing">2</property>
1120
+ <child internal-child="action_area">
1121
+ <object class="GtkButtonBox">
1122
+ <property name="can_focus">False</property>
1123
+ <property name="layout_style">end</property>
1124
+ <child>
1125
+ <object class="GtkButton" id="buttonAcceptOff">
1126
+ <property name="label" translatable="yes">Accept</property>
1127
+ <property name="visible">True</property>
1128
+ <property name="can_focus">True</property>
1129
+ <property name="receives_default">True</property>
1130
+ <property name="margin_top">6</property>
1131
+ </object>
1132
+ <packing>
1133
+ <property name="expand">True</property>
1134
+ <property name="fill">True</property>
1135
+ <property name="position">0</property>
1136
+ </packing>
1137
+ </child>
1138
+ <child>
1139
+ <object class="GtkButton" id="buttonCancelOff">
1140
+ <property name="label" translatable="yes">Cancel</property>
1141
+ <property name="visible">True</property>
1142
+ <property name="can_focus">True</property>
1143
+ <property name="receives_default">True</property>
1144
+ <property name="margin_right">6</property>
1145
+ <property name="margin_top">6</property>
1146
+ </object>
1147
+ <packing>
1148
+ <property name="expand">True</property>
1149
+ <property name="fill">True</property>
1150
+ <property name="position">1</property>
1151
+ </packing>
1152
+ </child>
1153
+ </object>
1154
+ <packing>
1155
+ <property name="expand">False</property>
1156
+ <property name="fill">False</property>
1157
+ <property name="position">0</property>
1158
+ </packing>
1159
+ </child>
1160
+ <child>
1161
+ <object class="GtkGrid">
1162
+ <property name="visible">True</property>
1163
+ <property name="can_focus">False</property>
1164
+ <child>
1165
+ <object class="GtkLabel">
1166
+ <property name="visible">True</property>
1167
+ <property name="can_focus">False</property>
1168
+ <property name="margin_bottom">5</property>
1169
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;"Off" Action Arguments&lt;/b&gt;&lt;/big&gt;
1170
+
1171
+ Enter "percent" to derive 0-100 value from voice command.</property>
1172
+ <property name="use_markup">True</property>
1173
+ <property name="justify">center</property>
1174
+ </object>
1175
+ <packing>
1176
+ <property name="left_attach">0</property>
1177
+ <property name="top_attach">0</property>
1178
+ </packing>
1179
+ </child>
1180
+ <child>
1181
+ <object class="GtkFrame" id="frameOffArg1">
1182
+ <property name="visible">True</property>
1183
+ <property name="can_focus">False</property>
1184
+ <property name="hexpand">True</property>
1185
+ <property name="label_xalign">0</property>
1186
+ <property name="shadow_type">none</property>
1187
+ <child>
1188
+ <object class="GtkAlignment">
1189
+ <property name="visible">True</property>
1190
+ <property name="can_focus">False</property>
1191
+ <property name="left_padding">12</property>
1192
+ <child>
1193
+ <object class="GtkEntry" id="requestOffValue1">
1194
+ <property name="visible">True</property>
1195
+ <property name="can_focus">True</property>
1196
+ </object>
1197
+ </child>
1198
+ </object>
1199
+ </child>
1200
+ <child type="label">
1201
+ <object class="GtkLabel" id="requestOffArg1">
1202
+ <property name="name">12</property>
1203
+ <property name="visible">True</property>
1204
+ <property name="can_focus">False</property>
1205
+ <property name="margin_top">10</property>
1206
+ </object>
1207
+ </child>
1208
+ </object>
1209
+ <packing>
1210
+ <property name="left_attach">0</property>
1211
+ <property name="top_attach">1</property>
1212
+ </packing>
1213
+ </child>
1214
+ <child>
1215
+ <object class="GtkFrame" id="frameOffArg2">
1216
+ <property name="visible">True</property>
1217
+ <property name="can_focus">False</property>
1218
+ <property name="label_xalign">0</property>
1219
+ <property name="shadow_type">none</property>
1220
+ <child>
1221
+ <object class="GtkAlignment">
1222
+ <property name="visible">True</property>
1223
+ <property name="can_focus">False</property>
1224
+ <property name="left_padding">12</property>
1225
+ <child>
1226
+ <object class="GtkEntry" id="requestOffValue2">
1227
+ <property name="visible">True</property>
1228
+ <property name="can_focus">True</property>
1229
+ </object>
1230
+ </child>
1231
+ </object>
1232
+ </child>
1233
+ <child type="label">
1234
+ <object class="GtkLabel" id="requestOffArg2">
1235
+ <property name="name">12</property>
1236
+ <property name="visible">True</property>
1237
+ <property name="can_focus">False</property>
1238
+ <property name="margin_top">10</property>
1239
+ </object>
1240
+ </child>
1241
+ </object>
1242
+ <packing>
1243
+ <property name="left_attach">0</property>
1244
+ <property name="top_attach">2</property>
1245
+ </packing>
1246
+ </child>
1247
+ <child>
1248
+ <object class="GtkFrame" id="frameOffArg3">
1249
+ <property name="visible">True</property>
1250
+ <property name="can_focus">False</property>
1251
+ <property name="label_xalign">0</property>
1252
+ <property name="shadow_type">none</property>
1253
+ <child>
1254
+ <object class="GtkAlignment">
1255
+ <property name="visible">True</property>
1256
+ <property name="can_focus">False</property>
1257
+ <property name="left_padding">12</property>
1258
+ <child>
1259
+ <object class="GtkEntry" id="requestOffValue3">
1260
+ <property name="visible">True</property>
1261
+ <property name="can_focus">True</property>
1262
+ </object>
1263
+ </child>
1264
+ </object>
1265
+ </child>
1266
+ <child type="label">
1267
+ <object class="GtkLabel" id="requestOffArg3">
1268
+ <property name="name">12</property>
1269
+ <property name="visible">True</property>
1270
+ <property name="can_focus">False</property>
1271
+ <property name="margin_top">10</property>
1272
+ </object>
1273
+ </child>
1274
+ </object>
1275
+ <packing>
1276
+ <property name="left_attach">0</property>
1277
+ <property name="top_attach">3</property>
1278
+ </packing>
1279
+ </child>
1280
+ <child>
1281
+ <object class="GtkFrame" id="frameOffArg4">
1282
+ <property name="visible">True</property>
1283
+ <property name="can_focus">False</property>
1284
+ <property name="label_xalign">0</property>
1285
+ <property name="shadow_type">none</property>
1286
+ <child>
1287
+ <object class="GtkAlignment">
1288
+ <property name="visible">True</property>
1289
+ <property name="can_focus">False</property>
1290
+ <property name="left_padding">12</property>
1291
+ <child>
1292
+ <object class="GtkEntry" id="requestOffValue4">
1293
+ <property name="visible">True</property>
1294
+ <property name="can_focus">True</property>
1295
+ </object>
1296
+ </child>
1297
+ </object>
1298
+ </child>
1299
+ <child type="label">
1300
+ <object class="GtkLabel" id="requestOffArg4">
1301
+ <property name="name">12</property>
1302
+ <property name="visible">True</property>
1303
+ <property name="can_focus">False</property>
1304
+ <property name="margin_top">10</property>
1305
+ </object>
1306
+ </child>
1307
+ </object>
1308
+ <packing>
1309
+ <property name="left_attach">0</property>
1310
+ <property name="top_attach">4</property>
1311
+ </packing>
1312
+ </child>
1313
+ <child>
1314
+ <object class="GtkFrame" id="frameOffArg5">
1315
+ <property name="visible">True</property>
1316
+ <property name="can_focus">False</property>
1317
+ <property name="label_xalign">0</property>
1318
+ <property name="shadow_type">none</property>
1319
+ <child>
1320
+ <object class="GtkAlignment">
1321
+ <property name="visible">True</property>
1322
+ <property name="can_focus">False</property>
1323
+ <property name="left_padding">12</property>
1324
+ <child>
1325
+ <object class="GtkEntry" id="requestOffValue5">
1326
+ <property name="visible">True</property>
1327
+ <property name="can_focus">True</property>
1328
+ </object>
1329
+ </child>
1330
+ </object>
1331
+ </child>
1332
+ <child type="label">
1333
+ <object class="GtkLabel" id="requestOffArg5">
1334
+ <property name="name">12</property>
1335
+ <property name="visible">True</property>
1336
+ <property name="can_focus">False</property>
1337
+ <property name="margin_top">10</property>
1338
+ </object>
1339
+ </child>
1340
+ </object>
1341
+ <packing>
1342
+ <property name="left_attach">0</property>
1343
+ <property name="top_attach">5</property>
1344
+ </packing>
1345
+ </child>
1346
+ <child>
1347
+ <object class="GtkFrame" id="frameOffArg6">
1348
+ <property name="visible">True</property>
1349
+ <property name="can_focus">False</property>
1350
+ <property name="label_xalign">0</property>
1351
+ <property name="shadow_type">none</property>
1352
+ <child>
1353
+ <object class="GtkAlignment">
1354
+ <property name="visible">True</property>
1355
+ <property name="can_focus">False</property>
1356
+ <property name="left_padding">12</property>
1357
+ <child>
1358
+ <object class="GtkEntry" id="requestOffValue6">
1359
+ <property name="visible">True</property>
1360
+ <property name="can_focus">True</property>
1361
+ </object>
1362
+ </child>
1363
+ </object>
1364
+ </child>
1365
+ <child type="label">
1366
+ <object class="GtkLabel" id="requestOffArg6">
1367
+ <property name="name">12</property>
1368
+ <property name="visible">True</property>
1369
+ <property name="can_focus">False</property>
1370
+ <property name="margin_top">10</property>
1371
+ </object>
1372
+ </child>
1373
+ </object>
1374
+ <packing>
1375
+ <property name="left_attach">0</property>
1376
+ <property name="top_attach">6</property>
1377
+ </packing>
1378
+ </child>
1379
+ <child>
1380
+ <object class="GtkFrame" id="frameOffArg7">
1381
+ <property name="visible">True</property>
1382
+ <property name="can_focus">False</property>
1383
+ <property name="label_xalign">0</property>
1384
+ <property name="shadow_type">none</property>
1385
+ <child>
1386
+ <object class="GtkAlignment">
1387
+ <property name="visible">True</property>
1388
+ <property name="can_focus">False</property>
1389
+ <property name="left_padding">12</property>
1390
+ <child>
1391
+ <object class="GtkEntry" id="requestOffValue7">
1392
+ <property name="visible">True</property>
1393
+ <property name="can_focus">True</property>
1394
+ </object>
1395
+ </child>
1396
+ </object>
1397
+ </child>
1398
+ <child type="label">
1399
+ <object class="GtkLabel" id="requestOffArg7">
1400
+ <property name="name">12</property>
1401
+ <property name="visible">True</property>
1402
+ <property name="can_focus">False</property>
1403
+ <property name="margin_top">10</property>
1404
+ </object>
1405
+ </child>
1406
+ </object>
1407
+ <packing>
1408
+ <property name="left_attach">0</property>
1409
+ <property name="top_attach">7</property>
1410
+ </packing>
1411
+ </child>
1412
+ <child>
1413
+ <object class="GtkFrame" id="frameOffArg8">
1414
+ <property name="visible">True</property>
1415
+ <property name="can_focus">False</property>
1416
+ <property name="label_xalign">0</property>
1417
+ <property name="shadow_type">none</property>
1418
+ <child>
1419
+ <object class="GtkAlignment">
1420
+ <property name="visible">True</property>
1421
+ <property name="can_focus">False</property>
1422
+ <property name="left_padding">12</property>
1423
+ <child>
1424
+ <object class="GtkEntry" id="requestOffValue8">
1425
+ <property name="visible">True</property>
1426
+ <property name="can_focus">True</property>
1427
+ </object>
1428
+ </child>
1429
+ </object>
1430
+ </child>
1431
+ <child type="label">
1432
+ <object class="GtkLabel" id="requestOffArg8">
1433
+ <property name="name">12</property>
1434
+ <property name="visible">True</property>
1435
+ <property name="can_focus">False</property>
1436
+ <property name="margin_top">10</property>
1437
+ </object>
1438
+ </child>
1439
+ </object>
1440
+ <packing>
1441
+ <property name="left_attach">0</property>
1442
+ <property name="top_attach">8</property>
1443
+ </packing>
1444
+ </child>
1445
+ <child>
1446
+ <object class="GtkFrame" id="frameOffArg9">
1447
+ <property name="visible">True</property>
1448
+ <property name="can_focus">False</property>
1449
+ <property name="label_xalign">0</property>
1450
+ <property name="shadow_type">none</property>
1451
+ <child>
1452
+ <object class="GtkAlignment">
1453
+ <property name="visible">True</property>
1454
+ <property name="can_focus">False</property>
1455
+ <property name="left_padding">12</property>
1456
+ <child>
1457
+ <object class="GtkEntry" id="requestOffValue9">
1458
+ <property name="visible">True</property>
1459
+ <property name="can_focus">True</property>
1460
+ </object>
1461
+ </child>
1462
+ </object>
1463
+ </child>
1464
+ <child type="label">
1465
+ <object class="GtkLabel" id="requestOffArg9">
1466
+ <property name="name">12</property>
1467
+ <property name="visible">True</property>
1468
+ <property name="can_focus">False</property>
1469
+ <property name="margin_top">10</property>
1470
+ </object>
1471
+ </child>
1472
+ </object>
1473
+ <packing>
1474
+ <property name="left_attach">0</property>
1475
+ <property name="top_attach">9</property>
1476
+ </packing>
1477
+ </child>
1478
+ </object>
1479
+ <packing>
1480
+ <property name="expand">False</property>
1481
+ <property name="fill">True</property>
1482
+ <property name="position">1</property>
1483
+ </packing>
1484
+ </child>
1485
+ </object>
1486
+ </child>
1487
+ </object>
1488
+ <object class="GtkDialog" id="dialogOn">
1489
+ <property name="can_focus">False</property>
1490
+ <property name="margin_left">6</property>
1491
+ <property name="margin_right">6</property>
1492
+ <property name="modal">True</property>
1493
+ <property name="window_position">center-on-parent</property>
1494
+ <property name="default_width">320</property>
1495
+ <property name="default_height">260</property>
1496
+ <property name="destroy_with_parent">True</property>
1497
+ <property name="type_hint">dialog</property>
1498
+ <property name="urgency_hint">True</property>
1499
+ <property name="transient_for">window1</property>
1500
+ <child internal-child="vbox">
1501
+ <object class="GtkBox">
1502
+ <property name="can_focus">False</property>
1503
+ <property name="margin_left">6</property>
1504
+ <property name="margin_right">6</property>
1505
+ <property name="margin_top">12</property>
1506
+ <property name="margin_bottom">12</property>
1507
+ <property name="orientation">vertical</property>
1508
+ <property name="spacing">2</property>
1509
+ <child internal-child="action_area">
1510
+ <object class="GtkButtonBox">
1511
+ <property name="can_focus">False</property>
1512
+ <property name="layout_style">end</property>
1513
+ <child>
1514
+ <object class="GtkButton" id="buttonAcceptOn">
1515
+ <property name="label" translatable="yes">Accept</property>
1516
+ <property name="visible">True</property>
1517
+ <property name="can_focus">True</property>
1518
+ <property name="receives_default">True</property>
1519
+ <property name="margin_top">6</property>
1520
+ </object>
1521
+ <packing>
1522
+ <property name="expand">True</property>
1523
+ <property name="fill">True</property>
1524
+ <property name="position">0</property>
1525
+ </packing>
1526
+ </child>
1527
+ <child>
1528
+ <object class="GtkButton" id="buttonCancelOn">
1529
+ <property name="label" translatable="yes">Cancel</property>
1530
+ <property name="visible">True</property>
1531
+ <property name="can_focus">True</property>
1532
+ <property name="receives_default">True</property>
1533
+ <property name="margin_right">6</property>
1534
+ <property name="margin_top">6</property>
1535
+ </object>
1536
+ <packing>
1537
+ <property name="expand">True</property>
1538
+ <property name="fill">True</property>
1539
+ <property name="position">1</property>
1540
+ </packing>
1541
+ </child>
1542
+ </object>
1543
+ <packing>
1544
+ <property name="expand">False</property>
1545
+ <property name="fill">False</property>
1546
+ <property name="position">0</property>
1547
+ </packing>
1548
+ </child>
1549
+ <child>
1550
+ <object class="GtkGrid">
1551
+ <property name="visible">True</property>
1552
+ <property name="can_focus">False</property>
1553
+ <child>
1554
+ <object class="GtkLabel">
1555
+ <property name="visible">True</property>
1556
+ <property name="can_focus">False</property>
1557
+ <property name="margin_left">12</property>
1558
+ <property name="margin_bottom">5</property>
1559
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;"On" Action Arguments&lt;/b&gt;&lt;/big&gt;
1560
+
1561
+ Enter "percent" to derive 0-100 value from voice command.</property>
1562
+ <property name="use_markup">True</property>
1563
+ <property name="justify">center</property>
1564
+ </object>
1565
+ <packing>
1566
+ <property name="left_attach">0</property>
1567
+ <property name="top_attach">0</property>
1568
+ </packing>
1569
+ </child>
1570
+ <child>
1571
+ <object class="GtkFrame" id="frameOnArg1">
1572
+ <property name="visible">True</property>
1573
+ <property name="can_focus">False</property>
1574
+ <property name="hexpand">True</property>
1575
+ <property name="label_xalign">0</property>
1576
+ <property name="shadow_type">none</property>
1577
+ <child>
1578
+ <object class="GtkAlignment">
1579
+ <property name="visible">True</property>
1580
+ <property name="can_focus">False</property>
1581
+ <property name="left_padding">12</property>
1582
+ <child>
1583
+ <object class="GtkEntry" id="requestOnValue1">
1584
+ <property name="visible">True</property>
1585
+ <property name="can_focus">True</property>
1586
+ </object>
1587
+ </child>
1588
+ </object>
1589
+ </child>
1590
+ <child type="label">
1591
+ <object class="GtkLabel" id="requestOnArg1">
1592
+ <property name="name">12</property>
1593
+ <property name="visible">True</property>
1594
+ <property name="can_focus">False</property>
1595
+ <property name="margin_left">12</property>
1596
+ <property name="margin_top">10</property>
1597
+ </object>
1598
+ </child>
1599
+ </object>
1600
+ <packing>
1601
+ <property name="left_attach">0</property>
1602
+ <property name="top_attach">1</property>
1603
+ </packing>
1604
+ </child>
1605
+ <child>
1606
+ <object class="GtkFrame" id="frameOnArg2">
1607
+ <property name="visible">True</property>
1608
+ <property name="can_focus">False</property>
1609
+ <property name="label_xalign">0</property>
1610
+ <property name="shadow_type">none</property>
1611
+ <child>
1612
+ <object class="GtkAlignment">
1613
+ <property name="visible">True</property>
1614
+ <property name="can_focus">False</property>
1615
+ <property name="left_padding">12</property>
1616
+ <child>
1617
+ <object class="GtkEntry" id="requestOnValue2">
1618
+ <property name="visible">True</property>
1619
+ <property name="can_focus">True</property>
1620
+ </object>
1621
+ </child>
1622
+ </object>
1623
+ </child>
1624
+ <child type="label">
1625
+ <object class="GtkLabel" id="requestOnArg2">
1626
+ <property name="name">12</property>
1627
+ <property name="visible">True</property>
1628
+ <property name="can_focus">False</property>
1629
+ <property name="margin_left">12</property>
1630
+ <property name="margin_top">10</property>
1631
+ </object>
1632
+ </child>
1633
+ </object>
1634
+ <packing>
1635
+ <property name="left_attach">0</property>
1636
+ <property name="top_attach">2</property>
1637
+ </packing>
1638
+ </child>
1639
+ <child>
1640
+ <object class="GtkFrame" id="frameOnArg3">
1641
+ <property name="visible">True</property>
1642
+ <property name="can_focus">False</property>
1643
+ <property name="label_xalign">0</property>
1644
+ <property name="shadow_type">none</property>
1645
+ <child>
1646
+ <object class="GtkAlignment">
1647
+ <property name="visible">True</property>
1648
+ <property name="can_focus">False</property>
1649
+ <property name="left_padding">12</property>
1650
+ <child>
1651
+ <object class="GtkEntry" id="requestOnValue3">
1652
+ <property name="visible">True</property>
1653
+ <property name="can_focus">True</property>
1654
+ </object>
1655
+ </child>
1656
+ </object>
1657
+ </child>
1658
+ <child type="label">
1659
+ <object class="GtkLabel" id="requestOnArg3">
1660
+ <property name="name">12</property>
1661
+ <property name="visible">True</property>
1662
+ <property name="can_focus">False</property>
1663
+ <property name="margin_left">12</property>
1664
+ <property name="margin_top">10</property>
1665
+ </object>
1666
+ </child>
1667
+ </object>
1668
+ <packing>
1669
+ <property name="left_attach">0</property>
1670
+ <property name="top_attach">3</property>
1671
+ </packing>
1672
+ </child>
1673
+ <child>
1674
+ <object class="GtkFrame" id="frameOnArg4">
1675
+ <property name="visible">True</property>
1676
+ <property name="can_focus">False</property>
1677
+ <property name="label_xalign">0</property>
1678
+ <property name="shadow_type">none</property>
1679
+ <child>
1680
+ <object class="GtkAlignment">
1681
+ <property name="visible">True</property>
1682
+ <property name="can_focus">False</property>
1683
+ <property name="left_padding">12</property>
1684
+ <child>
1685
+ <object class="GtkEntry" id="requestOnValue4">
1686
+ <property name="visible">True</property>
1687
+ <property name="can_focus">True</property>
1688
+ </object>
1689
+ </child>
1690
+ </object>
1691
+ </child>
1692
+ <child type="label">
1693
+ <object class="GtkLabel" id="requestOnArg4">
1694
+ <property name="name">12</property>
1695
+ <property name="visible">True</property>
1696
+ <property name="can_focus">False</property>
1697
+ <property name="margin_left">12</property>
1698
+ <property name="margin_top">10</property>
1699
+ </object>
1700
+ </child>
1701
+ </object>
1702
+ <packing>
1703
+ <property name="left_attach">0</property>
1704
+ <property name="top_attach">4</property>
1705
+ </packing>
1706
+ </child>
1707
+ <child>
1708
+ <object class="GtkFrame" id="frameOnArg5">
1709
+ <property name="visible">True</property>
1710
+ <property name="can_focus">False</property>
1711
+ <property name="label_xalign">0</property>
1712
+ <property name="shadow_type">none</property>
1713
+ <child>
1714
+ <object class="GtkAlignment">
1715
+ <property name="visible">True</property>
1716
+ <property name="can_focus">False</property>
1717
+ <property name="left_padding">12</property>
1718
+ <child>
1719
+ <object class="GtkEntry" id="requestOnValue5">
1720
+ <property name="visible">True</property>
1721
+ <property name="can_focus">True</property>
1722
+ </object>
1723
+ </child>
1724
+ </object>
1725
+ </child>
1726
+ <child type="label">
1727
+ <object class="GtkLabel" id="requestOnArg5">
1728
+ <property name="name">12</property>
1729
+ <property name="visible">True</property>
1730
+ <property name="can_focus">False</property>
1731
+ <property name="margin_left">12</property>
1732
+ <property name="margin_top">10</property>
1733
+ </object>
1734
+ </child>
1735
+ </object>
1736
+ <packing>
1737
+ <property name="left_attach">0</property>
1738
+ <property name="top_attach">5</property>
1739
+ </packing>
1740
+ </child>
1741
+ <child>
1742
+ <object class="GtkFrame" id="frameOnArg6">
1743
+ <property name="visible">True</property>
1744
+ <property name="can_focus">False</property>
1745
+ <property name="label_xalign">0</property>
1746
+ <property name="shadow_type">none</property>
1747
+ <child>
1748
+ <object class="GtkAlignment">
1749
+ <property name="visible">True</property>
1750
+ <property name="can_focus">False</property>
1751
+ <property name="left_padding">12</property>
1752
+ <child>
1753
+ <object class="GtkEntry" id="requestOnValue6">
1754
+ <property name="visible">True</property>
1755
+ <property name="can_focus">True</property>
1756
+ </object>
1757
+ </child>
1758
+ </object>
1759
+ </child>
1760
+ <child type="label">
1761
+ <object class="GtkLabel" id="requestOnArg6">
1762
+ <property name="name">12</property>
1763
+ <property name="visible">True</property>
1764
+ <property name="can_focus">False</property>
1765
+ <property name="margin_left">12</property>
1766
+ <property name="margin_top">10</property>
1767
+ </object>
1768
+ </child>
1769
+ </object>
1770
+ <packing>
1771
+ <property name="left_attach">0</property>
1772
+ <property name="top_attach">6</property>
1773
+ </packing>
1774
+ </child>
1775
+ <child>
1776
+ <object class="GtkFrame" id="frameOnArg7">
1777
+ <property name="visible">True</property>
1778
+ <property name="can_focus">False</property>
1779
+ <property name="label_xalign">0</property>
1780
+ <property name="shadow_type">none</property>
1781
+ <child>
1782
+ <object class="GtkAlignment">
1783
+ <property name="visible">True</property>
1784
+ <property name="can_focus">False</property>
1785
+ <property name="left_padding">12</property>
1786
+ <child>
1787
+ <object class="GtkEntry" id="requestOnValue7">
1788
+ <property name="visible">True</property>
1789
+ <property name="can_focus">True</property>
1790
+ </object>
1791
+ </child>
1792
+ </object>
1793
+ </child>
1794
+ <child type="label">
1795
+ <object class="GtkLabel" id="requestOnArg7">
1796
+ <property name="name">12</property>
1797
+ <property name="visible">True</property>
1798
+ <property name="can_focus">False</property>
1799
+ <property name="margin_top">10</property>
1800
+ </object>
1801
+ </child>
1802
+ </object>
1803
+ <packing>
1804
+ <property name="left_attach">0</property>
1805
+ <property name="top_attach">7</property>
1806
+ </packing>
1807
+ </child>
1808
+ <child>
1809
+ <object class="GtkFrame" id="frameOnArg8">
1810
+ <property name="visible">True</property>
1811
+ <property name="can_focus">False</property>
1812
+ <property name="label_xalign">0</property>
1813
+ <property name="shadow_type">none</property>
1814
+ <child>
1815
+ <object class="GtkAlignment">
1816
+ <property name="visible">True</property>
1817
+ <property name="can_focus">False</property>
1818
+ <property name="left_padding">12</property>
1819
+ <child>
1820
+ <object class="GtkEntry" id="requestOnValue8">
1821
+ <property name="visible">True</property>
1822
+ <property name="can_focus">True</property>
1823
+ </object>
1824
+ </child>
1825
+ </object>
1826
+ </child>
1827
+ <child type="label">
1828
+ <object class="GtkLabel" id="requestOnArg8">
1829
+ <property name="name">12</property>
1830
+ <property name="visible">True</property>
1831
+ <property name="can_focus">False</property>
1832
+ <property name="margin_top">10</property>
1833
+ </object>
1834
+ </child>
1835
+ </object>
1836
+ <packing>
1837
+ <property name="left_attach">0</property>
1838
+ <property name="top_attach">8</property>
1839
+ </packing>
1840
+ </child>
1841
+ <child>
1842
+ <object class="GtkFrame" id="frameOnArg9">
1843
+ <property name="visible">True</property>
1844
+ <property name="can_focus">False</property>
1845
+ <property name="label_xalign">0</property>
1846
+ <property name="shadow_type">none</property>
1847
+ <child>
1848
+ <object class="GtkAlignment">
1849
+ <property name="visible">True</property>
1850
+ <property name="can_focus">False</property>
1851
+ <property name="left_padding">12</property>
1852
+ <child>
1853
+ <object class="GtkEntry" id="requestOnValue9">
1854
+ <property name="visible">True</property>
1855
+ <property name="can_focus">True</property>
1856
+ </object>
1857
+ </child>
1858
+ </object>
1859
+ </child>
1860
+ <child type="label">
1861
+ <object class="GtkLabel" id="requestOnArg9">
1862
+ <property name="name">12</property>
1863
+ <property name="visible">True</property>
1864
+ <property name="can_focus">False</property>
1865
+ <property name="margin_top">10</property>
1866
+ </object>
1867
+ </child>
1868
+ </object>
1869
+ <packing>
1870
+ <property name="left_attach">0</property>
1871
+ <property name="top_attach">9</property>
1872
+ </packing>
1873
+ </child>
1874
+ </object>
1875
+ <packing>
1876
+ <property name="expand">False</property>
1877
+ <property name="fill">True</property>
1878
+ <property name="position">1</property>
1879
+ </packing>
1880
+ </child>
1881
+ </object>
1882
+ </child>
1883
+ </object>
1884
+ <object class="GtkDialog" id="dialogScenes">
1885
+ <property name="width_request">800</property>
1886
+ <property name="can_focus">False</property>
1887
+ <property name="modal">True</property>
1888
+ <property name="window_position">center-on-parent</property>
1889
+ <property name="default_width">320</property>
1890
+ <property name="default_height">260</property>
1891
+ <property name="destroy_with_parent">True</property>
1892
+ <property name="type_hint">dialog</property>
1893
+ <property name="urgency_hint">True</property>
1894
+ <property name="transient_for">window1</property>
1895
+ <child internal-child="vbox">
1896
+ <object class="GtkBox">
1897
+ <property name="can_focus">False</property>
1898
+ <property name="margin_top">12</property>
1899
+ <property name="margin_bottom">12</property>
1900
+ <property name="orientation">vertical</property>
1901
+ <property name="spacing">2</property>
1902
+ <child internal-child="action_area">
1903
+ <object class="GtkButtonBox">
1904
+ <property name="can_focus">False</property>
1905
+ <property name="layout_style">end</property>
1906
+ <child>
1907
+ <object class="GtkButton" id="buttonCancelScenes">
1908
+ <property name="label" translatable="yes">Done</property>
1909
+ <property name="visible">True</property>
1910
+ <property name="can_focus">True</property>
1911
+ <property name="receives_default">True</property>
1912
+ <property name="margin_right">12</property>
1913
+ <property name="margin_top">6</property>
1914
+ </object>
1915
+ <packing>
1916
+ <property name="expand">True</property>
1917
+ <property name="fill">True</property>
1918
+ <property name="position">1</property>
1919
+ </packing>
1920
+ </child>
1921
+ </object>
1922
+ <packing>
1923
+ <property name="expand">False</property>
1924
+ <property name="fill">False</property>
1925
+ <property name="position">0</property>
1926
+ </packing>
1927
+ </child>
1928
+ <child>
1929
+ <object class="GtkGrid">
1930
+ <property name="visible">True</property>
1931
+ <property name="can_focus">False</property>
1932
+ <child>
1933
+ <object class="GtkLabel">
1934
+ <property name="visible">True</property>
1935
+ <property name="can_focus">False</property>
1936
+ <property name="margin_bottom">5</property>
1937
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Savant Scenes&lt;/b&gt;&lt;/big&gt;
1938
+
1939
+ Check the box next to a scene and select "add" to create an Alexa device with name of the scene.
1940
+
1941
+ The following scenes have been found on this host:</property>
1942
+ <property name="use_markup">True</property>
1943
+ <property name="justify">center</property>
1944
+ </object>
1945
+ <packing>
1946
+ <property name="left_attach">0</property>
1947
+ <property name="top_attach">0</property>
1948
+ </packing>
1949
+ </child>
1950
+ <child>
1951
+ <object class="GtkScrolledWindow" id="listviewSavantScenes">
1952
+ <property name="visible">True</property>
1953
+ <property name="can_focus">True</property>
1954
+ <property name="margin_left">12</property>
1955
+ <property name="margin_right">12</property>
1956
+ <property name="margin_bottom">12</property>
1957
+ <property name="hexpand">True</property>
1958
+ <property name="shadow_type">in</property>
1959
+ <property name="min_content_height">200</property>
1960
+ <property name="max_content_height">400</property>
1961
+ <property name="propagate_natural_height">True</property>
1962
+ <child>
1963
+ <placeholder/>
1964
+ </child>
1965
+ </object>
1966
+ <packing>
1967
+ <property name="left_attach">0</property>
1968
+ <property name="top_attach">1</property>
1969
+ </packing>
1970
+ </child>
1971
+ <child>
1972
+ <object class="GtkScrolledWindow" id="listviewhabridgeDevices">
1973
+ <property name="visible">True</property>
1974
+ <property name="can_focus">True</property>
1975
+ <property name="margin_left">12</property>
1976
+ <property name="margin_right">12</property>
1977
+ <property name="margin_top">12</property>
1978
+ <property name="margin_bottom">12</property>
1979
+ <property name="hexpand">True</property>
1980
+ <property name="shadow_type">in</property>
1981
+ <property name="min_content_height">200</property>
1982
+ <property name="max_content_height">400</property>
1983
+ <property name="propagate_natural_height">True</property>
1984
+ <child>
1985
+ <placeholder/>
1986
+ </child>
1987
+ </object>
1988
+ <packing>
1989
+ <property name="left_attach">0</property>
1990
+ <property name="top_attach">4</property>
1991
+ </packing>
1992
+ </child>
1993
+ <child>
1994
+ <object class="GtkLabel">
1995
+ <property name="visible">True</property>
1996
+ <property name="can_focus">False</property>
1997
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Automatic Scenes Sync&lt;/b&gt;&lt;/big&gt;
1998
+
1999
+ Scene sync is a background service that runs on the pro host to automatically sync Savant user scenes to the ha bridge.
2000
+ When a scene is created in Savant, it will be added to the habridge.
2001
+ When a scene is deleted in Savant, it will be deleted from the habridge.
2002
+ The user will simply need to ask Alexa to find devices after creating a scene.
2003
+ To call the scene, use the syntax: Alexa, Turn On (Scene Name).</property>
2004
+ <property name="use_markup">True</property>
2005
+ <property name="justify">center</property>
2006
+ </object>
2007
+ <packing>
2008
+ <property name="left_attach">0</property>
2009
+ <property name="top_attach">5</property>
2010
+ </packing>
2011
+ </child>
2012
+ <child>
2013
+ <object class="GtkGrid">
2014
+ <property name="visible">True</property>
2015
+ <property name="can_focus">False</property>
2016
+ <property name="halign">center</property>
2017
+ <property name="margin_top">12</property>
2018
+ <property name="column_homogeneous">True</property>
2019
+ <child>
2020
+ <object class="GtkButton" id="buttonInstallSceneSync">
2021
+ <property name="label" translatable="yes">Install</property>
2022
+ <property name="visible">True</property>
2023
+ <property name="can_focus">True</property>
2024
+ <property name="receives_default">True</property>
2025
+ <property name="margin_right">12</property>
2026
+ </object>
2027
+ <packing>
2028
+ <property name="left_attach">0</property>
2029
+ <property name="top_attach">0</property>
2030
+ </packing>
2031
+ </child>
2032
+ <child>
2033
+ <object class="GtkButton" id="buttonUninstallSceneSync">
2034
+ <property name="label" translatable="yes">Uninstall</property>
2035
+ <property name="visible">True</property>
2036
+ <property name="can_focus">True</property>
2037
+ <property name="receives_default">True</property>
2038
+ <property name="margin_left">12</property>
2039
+ </object>
2040
+ <packing>
2041
+ <property name="left_attach">1</property>
2042
+ <property name="top_attach">0</property>
2043
+ </packing>
2044
+ </child>
2045
+ </object>
2046
+ <packing>
2047
+ <property name="left_attach">0</property>
2048
+ <property name="top_attach">6</property>
2049
+ </packing>
2050
+ </child>
2051
+ <child>
2052
+ <object class="GtkLabel">
2053
+ <property name="visible">True</property>
2054
+ <property name="can_focus">False</property>
2055
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;HA Bridge Devices&lt;/b&gt;&lt;/big&gt;
2056
+
2057
+ The following devices have been found on this habridge:</property>
2058
+ <property name="use_markup">True</property>
2059
+ <property name="justify">center</property>
2060
+ </object>
2061
+ <packing>
2062
+ <property name="left_attach">0</property>
2063
+ <property name="top_attach">3</property>
2064
+ </packing>
2065
+ </child>
2066
+ <child>
2067
+ <object class="GtkGrid">
2068
+ <property name="visible">True</property>
2069
+ <property name="can_focus">False</property>
2070
+ <property name="margin_left">12</property>
2071
+ <property name="margin_right">12</property>
2072
+ <property name="column_homogeneous">True</property>
2073
+ <child>
2074
+ <object class="GtkButton" id="buttonAddScenes">
2075
+ <property name="label" translatable="yes">Add Scenes</property>
2076
+ <property name="visible">True</property>
2077
+ <property name="can_focus">True</property>
2078
+ <property name="receives_default">True</property>
2079
+ <property name="halign">end</property>
2080
+ <property name="margin_top">6</property>
2081
+ </object>
2082
+ <packing>
2083
+ <property name="left_attach">1</property>
2084
+ <property name="top_attach">0</property>
2085
+ </packing>
2086
+ </child>
2087
+ <child>
2088
+ <object class="GtkButton" id="buttonUpdateSCLI">
2089
+ <property name="label" translatable="yes">Update SCLI</property>
2090
+ <property name="visible">True</property>
2091
+ <property name="can_focus">True</property>
2092
+ <property name="receives_default">True</property>
2093
+ <property name="halign">start</property>
2094
+ <property name="margin_left">12</property>
2095
+ </object>
2096
+ <packing>
2097
+ <property name="left_attach">0</property>
2098
+ <property name="top_attach">0</property>
2099
+ </packing>
2100
+ </child>
2101
+ </object>
2102
+ <packing>
2103
+ <property name="left_attach">0</property>
2104
+ <property name="top_attach">2</property>
2105
+ </packing>
2106
+ </child>
2107
+ </object>
2108
+ <packing>
2109
+ <property name="expand">False</property>
2110
+ <property name="fill">True</property>
2111
+ <property name="position">1</property>
2112
+ </packing>
2113
+ </child>
2114
+ </object>
2115
+ </child>
2116
+ </object>
2117
+ <object class="GtkWindow" id="windowBackupRestore">
2118
+ <property name="width_request">300</property>
2119
+ <property name="height_request">300</property>
2120
+ <property name="can_focus">False</property>
2121
+ <property name="modal">True</property>
2122
+ <property name="window_position">center-on-parent</property>
2123
+ <property name="gravity">center</property>
2124
+ <property name="transient_for">window1</property>
2125
+ <property name="has_resize_grip">True</property>
2126
+ <child>
2127
+ <object class="GtkBox">
2128
+ <property name="visible">True</property>
2129
+ <property name="can_focus">False</property>
2130
+ <property name="orientation">vertical</property>
2131
+ <child>
2132
+ <object class="GtkLabel">
2133
+ <property name="visible">True</property>
2134
+ <property name="can_focus">False</property>
2135
+ <property name="margin_top">20</property>
2136
+ <property name="margin_bottom">20</property>
2137
+ <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Backup and Restore&lt;/b&gt;&lt;/big&gt;</property>
2138
+ <property name="use_markup">True</property>
2139
+ </object>
2140
+ <packing>
2141
+ <property name="expand">False</property>
2142
+ <property name="fill">True</property>
2143
+ <property name="position">0</property>
2144
+ </packing>
2145
+ </child>
2146
+ <child>
2147
+ <object class="GtkLabel">
2148
+ <property name="visible">True</property>
2149
+ <property name="can_focus">False</property>
2150
+ <property name="margin_left">20</property>
2151
+ <property name="margin_right">20</property>
2152
+ <property name="margin_bottom">12</property>
2153
+ <property name="label" translatable="yes"> There are two files to be backed up and restored.
2154
+ The first is device.db that contains all the virtual devices in the habridge.
2155
+ The second is the habridge.config file that contains information about the habridge itself.
2156
+
2157
+ To backup the files, select a destination folder.
2158
+
2159
+ To restore the backed up files to the habridge, select the folder that contains both files. </property>
2160
+ <property name="wrap">True</property>
2161
+ </object>
2162
+ <packing>
2163
+ <property name="expand">False</property>
2164
+ <property name="fill">False</property>
2165
+ <property name="position">1</property>
2166
+ </packing>
2167
+ </child>
2168
+ <child>
2169
+ <object class="GtkScrolledWindow" id="scrolledwindow_BackupRestore">
2170
+ <property name="width_request">300</property>
2171
+ <property name="height_request">300</property>
2172
+ <property name="visible">True</property>
2173
+ <property name="can_focus">True</property>
2174
+ <property name="margin_left">20</property>
2175
+ <property name="margin_right">20</property>
2176
+ <property name="shadow_type">in</property>
2177
+ <property name="min_content_width">300</property>
2178
+ <property name="min_content_height">300</property>
2179
+ <property name="max_content_width">300</property>
2180
+ <property name="max_content_height">300</property>
2181
+ <child>
2182
+ <placeholder/>
2183
+ </child>
2184
+ </object>
2185
+ <packing>
2186
+ <property name="expand">False</property>
2187
+ <property name="fill">False</property>
2188
+ <property name="position">2</property>
2189
+ </packing>
2190
+ </child>
2191
+ <child>
2192
+ <object class="GtkButtonBox">
2193
+ <property name="visible">True</property>
2194
+ <property name="can_focus">False</property>
2195
+ <property name="margin_top">20</property>
2196
+ <property name="margin_bottom">12</property>
2197
+ <property name="layout_style">spread</property>
2198
+ <child>
2199
+ <object class="GtkButton" id="buttonBackup">
2200
+ <property name="label" translatable="yes">Backup</property>
2201
+ <property name="visible">True</property>
2202
+ <property name="can_focus">True</property>
2203
+ <property name="receives_default">True</property>
2204
+ </object>
2205
+ <packing>
2206
+ <property name="expand">True</property>
2207
+ <property name="fill">True</property>
2208
+ <property name="position">0</property>
2209
+ </packing>
2210
+ </child>
2211
+ <child>
2212
+ <object class="GtkButton" id="buttonRestore">
2213
+ <property name="label" translatable="yes">Restore</property>
2214
+ <property name="visible">True</property>
2215
+ <property name="can_focus">True</property>
2216
+ <property name="receives_default">True</property>
2217
+ </object>
2218
+ <packing>
2219
+ <property name="expand">True</property>
2220
+ <property name="fill">True</property>
2221
+ <property name="position">1</property>
2222
+ </packing>
2223
+ </child>
2224
+ <child>
2225
+ <object class="GtkButton" id="buttonBackupRestoreCancel">
2226
+ <property name="label" translatable="yes">Cancel</property>
2227
+ <property name="visible">True</property>
2228
+ <property name="can_focus">True</property>
2229
+ <property name="receives_default">True</property>
2230
+ </object>
2231
+ <packing>
2232
+ <property name="expand">True</property>
2233
+ <property name="fill">True</property>
2234
+ <property name="position">2</property>
2235
+ </packing>
2236
+ </child>
2237
+ </object>
2238
+ <packing>
2239
+ <property name="expand">True</property>
2240
+ <property name="fill">True</property>
2241
+ <property name="pack_type">end</property>
2242
+ <property name="position">3</property>
2243
+ </packing>
2244
+ </child>
2245
+ </object>
2246
+ </child>
2247
+ </object>
2248
+ </interface>