savant-echo 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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>