savant-scenes 1.0.2 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce04019a545c83f545f5f5e3085dc83e70fab1b2
4
- data.tar.gz: 25d7a7cd3073350cb970895546ba0005e79e5aa0
3
+ metadata.gz: 8013caf1f3b6d86518e85483a94129473b7b93ad
4
+ data.tar.gz: c170d5ab124b408fcebb8714fd60d562fa571635
5
5
  SHA512:
6
- metadata.gz: 547ef94aa42f319346118b389eaeaceb16cec1275f5cb15790c12201aff149730ebab57bcfde3a5c711cf3a22f312441d0fa1b1aadee00df0f8a0202b81b4407
7
- data.tar.gz: dfefe42335f84bdad9ff1c0bce889e3f84b120b8bb08f3a057a25c36cbf7a0583cf7780719867a6d3542f67417fb41b08a4b0e2f6d8c826660363bef287d0340
6
+ metadata.gz: 7f567f774f64655a3ef3c6f99824223674473d4af888a231ce15c4a625460cdf079d69979ad49555e89518abb1cf73fdaede1c06483247adcfb8f16454ffc046
7
+ data.tar.gz: 3895d15ca2cebed9f83cd131c858d3e6578a99cbc6a70dc2908406dd168874e1cb8942554cd3a5e7f430718908db2aab07ddbc4646efb85f3a758ddde30f1ca9
@@ -6,7 +6,6 @@ require 'socket'
6
6
  require 'timeout'
7
7
  require 'ipaddress'
8
8
  require 'sqlite3'
9
- require 'date'
10
9
 
11
10
 
12
11
  class SceneManager
@@ -17,16 +16,11 @@ class SceneManager
17
16
  def initialize
18
17
  #Initialize the Scenes List view
19
18
  @listviewSavantScenes = VR::ListView.new(:modify => TrueClass, :scene => String, :user => String, :id => String, :image => String, :isGlobal => String, :isActive => String, :isScheduled => String, :hasCustomImage => String, :userSceneOrder => String, :tags => String)
20
-
21
19
  @listviewSavantScenes.col_sortable(true)
22
-
23
20
  @listviewSavantScenes.col_sort_column_id(:scene => @listviewSavantScenes.id(:scene), :user => @listviewSavantScenes.id(:user))
24
-
25
21
  @listviewSavantScenes.col_title(:modify => "", :scene => "Scene Name", :tags => "Zones Affected", :isGlobal => "Global", :isActive => "Active", :isScheduled => "Scheduled", :hasCustomImage => "Custom Image", :userSceneOrder => "User Order")
26
-
27
22
  @listviewSavantScenes.col_xalign(:isGlobal => 0.5, :isActive => 0.5, :isScheduled => 0.5, :hasCustomImage => 0.5, :userSceneOrder => 0.5)
28
23
  @listviewSavantScenes.col_width(:tags => 100, :image => 100)
29
-
30
24
  @listviewSavantScenes.ren_editable(:scene => true, :user => true, :id => true, :isGlobal => String)
31
25
 
32
26
  row = @listviewSavantScenes.add_row
@@ -68,21 +62,6 @@ class SceneManager
68
62
  #
69
63
  # @listviewSavantScenes.renderer(:isActive).edited_callback = Proc.new { |model_sym, row, view |
70
64
  # alert "Scene is scheduled changed to : " + row[:isScheduled].to_s
71
-
72
-
73
-
74
- @listviewAdvanced = VR::ListView.new(:time => VR::Col::CalendarCol, :event => String, :user => String, :deviceName => String, :deviceModel => String, :deviceApp => String, :deviceOS => String, :deviceUID => String, :zone => String, :component => String, :logicalComponent => String, :variantID => String, :serviceID => String, :type => String, :argument => String)
75
-
76
- @listviewAdvanced.col_sortable(true)
77
-
78
- @listviewAdvanced.col_sort_column_id(:time => @listviewAdvanced.id(:time), :event => @listviewAdvanced.id(:event), :user => @listviewAdvanced.id(:user), :deviceName => @listviewAdvanced.id(:deviceName), :deviceUID => @listviewAdvanced.id(:deviceUID), :zone => @listviewAdvanced.id(:zone), :component => @listviewAdvanced.id(:component), :logicalComponent => @listviewAdvanced.id(:logicalComponent), :variantID => @listviewAdvanced.id(:variantID), :serviceID => @listviewAdvanced.id(:serviceID), :type => @listviewAdvanced.id(:type), :argument => @listviewAdvanced.id(:argument))
79
-
80
- @listviewAdvanced.col_title(:time => "Time", :event => "Event", :user => "User", :deviceName => "Device Name", :deviceModel => "Device Model", :deviceApp => "Device App", :deviceOS => "Device OS", :deviceUID => "Device UID", :zone => "Zone", :component => "Component", :logicalComponent => "Logical", :variantID => "Variant", :serviceID => "Service", :type => "Command", :argument => "Argument")
81
-
82
- row = @listviewAdvanced.add_row
83
- row[:event] = ""
84
- @listviewAdvanced.visible = true
85
-
86
65
  # }
87
66
  end
88
67
 
@@ -91,9 +70,6 @@ class SceneManager
91
70
  @savantURL = "192.168.77.40"
92
71
  @login = 'RPM'
93
72
  @password = 'RPM'
94
-
95
- @builder["buttonAdvanced"].hide
96
- @builder["buttonActivateScene"].hide
97
73
 
98
74
  @ftv = VR::FileTreeView.new(Dir.home, File.join(File.dirname(__FILE__), "/../img"), glob = "*", validate_block = nil)
99
75
  @builder["scrolledwindow_BackupRestore"].add(@ftv)
@@ -123,7 +99,7 @@ class SceneManager
123
99
  begin
124
100
  @builder["labelHostInfo"].label = ""
125
101
  Net::SSH.start(ip, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
126
- #Check host type and update sclibridge location
102
+ #Check host type and update sclibridge location for reference, though only Pro Host is supported
127
103
  ssh.open_channel do |ch, success|
128
104
  ch.exec("uname")
129
105
  ch.on_data do |ch, data|
@@ -131,68 +107,76 @@ class SceneManager
131
107
  @scliBridge = "~/Applications/RacePointMedia/sclibridge "
132
108
  @dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/dis/dashboard.sqlite"
133
109
  else
134
- @scliBridge = "source ~/.zshrc && /usr/local/bin/sclibridge "
110
+ @scliBridge = "/usr/local/bin/sclibridge "
135
111
  @dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/dis/dashboard.sqlite"
112
+ alert "smart host"
136
113
  end
137
114
  end
138
- ch.on_extended_data do |ch, type, data|
139
- alert "Error: #{data.inspect}"
140
- end
141
115
  end
142
116
  ssh.loop
143
- #parse the scscredentials.plist from the pro host to get host name and then version
117
+ #parse the rpmSystemInfo.plist form the pro host to get host name
144
118
  if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
145
119
  ssh.open_channel do |ch, success|
146
120
 
147
- ch.exec("plutil -p 'library/application support/racepointmedia/statusfiles/scscredentials.plist'")
121
+ ch.exec("plutil -p 'library/application support/racepointmedia/userconfig.rpmconfig/rpmSystemInfo.plist'")
148
122
  ch.on_data do |ch, data|
149
- if data.to_s.include? 'savantcs.com'
150
- x = data.split(%q{"name" => "})
151
- x = x[1].split(%q{"})
152
- @savantHostName = x[0]
153
- @str = @scliBridge + "readstate \'" + @savantHostName + ".SoftwareVersion\'"
154
- @savantHostVersion = ssh.exec!(@str)
123
+ if data.to_s.include? 'module'
124
+ x = data.split("\"RPMSystemName\" => ")
125
+ x = x[1].split("\n")
126
+ @savantHostName = x[0][1..-2]
127
+ @str = @scliBridge + "readstate \"" + @savantHostName + ".SoftwareVersion\""
155
128
  end
156
129
  end
157
- ch.on_extended_data do |ch, type, data|
158
- alert "Error: #{data.inspect}"
159
- end
160
130
  end
161
131
  ssh.loop
162
- #parse the scscredentials.plist from the smart host to get host name and then version
163
- elsif @scliBridge == "source ~/.zshrc && /usr/local/bin/sclibridge "
132
+ #parse the rpmSystemInfo.plist from the smart host to get host name
133
+ elsif @scliBridge == "/usr/local/bin/sclibridge "
164
134
  ssh.open_channel do |ch, success|
165
- ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/scsCredentials.plist'")
135
+ ch.exec("strings 'GNUstep/Library/ApplicationSupport/RacePointMedia/userConfig.rpmConfig/rpmSystemInfo.plist'")
166
136
  ch.on_data do |ch, data|
167
- if data.to_s.include? 'savantcs.com'
168
- x = data.split("name</key>")
169
- x = x[1].split(%q{</string>})
170
- x = x[0].split(%q{<string>})
171
- @savantHostName = x[1]
172
-
173
- @str = @scliBridge + "readstate \'" + @savantHostName + ".SoftwareVersion\'"
174
- @savantHostVersion = ssh.exec!(@str)
137
+ if data.to_s.include? 'DOCTYPE'
138
+ x = data.split("RPMUserDefinedName</key><string>")
139
+ y = x[1].split("</string>")
140
+ x = x[1].split("VERSION</key><integer>")
141
+ x = x[1].split("</integer>")
142
+ alert("Instant host found at specified IP address. Instant hosts are not supported (even by Savant!)", :parent => self)
143
+ return false
144
+ @instantHost = true
145
+ elsif data.to_s.include? 'module'
146
+ x = data.split('module')
147
+ x = x[1].split("\n")
148
+ @savantHostName = x[0][1..-1]
149
+ @str = @scliBridge + "readstate \"" + @savantHostName + ".SoftwareVersion\""
150
+ alert @str
175
151
  end
176
152
  end
177
-
178
- ch.on_extended_data do |ch, type, data|
179
- alert "Error: #{data.inspect}"
180
- end
181
153
  end
182
154
  ssh.loop
155
+ end
156
+ #Use host name to query SoftwareVersion state from host
157
+ ssh.open_channel do |ch, success|
158
+ alert "in open channel"
159
+ ch.exec(@str)
160
+ ch.on_data do |ch, data|
161
+ alert "data"
162
+ @savantHostVersion = data
163
+ end
164
+ end
165
+ ssh.loop
166
+ end
167
+ alert @savantHostName
168
+ alert @savantHostVersion
169
+ @builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
183
170
 
184
- end
171
+ #return true if version is 8.3 or later
172
+ if @savantHostVersion.to_r > 8.2 && !@savantHostVersion.empty?
173
+ return true
174
+ else
175
+ return false
185
176
  end
186
- unless @savantHostVersion.empty? || @savantHostName.empty?
187
- @builder["labelHostInfo"].text = @savantHostName + " Version : " + @savantHostVersion
188
- #return true if version is 8.3 or later
189
- if @savantHostVersion.to_r > 8.2
190
- return true
191
- else
192
- return false
193
- end
194
- end
177
+
195
178
  rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
179
+
196
180
  end
197
181
  end
198
182
 
@@ -208,11 +192,6 @@ class SceneManager
208
192
  @builder["window1"].show_all
209
193
  unless savantVersion?(@savantURL)
210
194
  @builder["buttonActivateScene"].hide
211
- end
212
- if @savantHostVersion.to_r > 8.0
213
- @builder["buttonAdvanced"].show
214
- else
215
- @builder["buttonAdvanced"].hide
216
195
  end
217
196
  end
218
197
 
@@ -220,8 +199,10 @@ class SceneManager
220
199
  def buttonScanHost__clicked(*argv)
221
200
  @savantURL = @builder["savantURL"].text
222
201
  if is_port_open?(@savantURL,"11263") || is_port_open?(@savantURL,"48664") || is_port_open?(@savantURL,"1124")
202
+ unless savantVersion?(@savantURL)
203
+ @builder["buttonActivateScene"].hide
204
+ end
223
205
  begin
224
- savantVersion?(@savantURL)
225
206
  @listviewSavantScenes.model.clear
226
207
  Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
227
208
  # test to see if remote files exist and transfer them if they do
@@ -390,6 +371,64 @@ class SceneManager
390
371
  end
391
372
  end
392
373
 
374
+ # Duplicate the selected scenes
375
+ # def buttonDuplicateScene__clicked(*argv)
376
+ # get_glade_variables()
377
+ #
378
+ # duplicateIDs = []
379
+ # duplicateScenes = []
380
+ # duplicateUserss = []
381
+ # duplicateImages = []
382
+ # duplicateTags = []
383
+ # duplicateGlobals = []
384
+ # duplicateActives = []
385
+ # duplicateScheduled = []
386
+ # duplicateCustomImages = []
387
+ # duplicateSceneOrders = []
388
+ #
389
+ # count = 0
390
+ # @listviewSavantScenes.each_row do |row|
391
+ # if row[:modify]
392
+ # count += 1
393
+ # duplicateIDs << row[:id]
394
+ # duplicateScenes << row[:scene]
395
+ # duplicateUsers << row[:user]
396
+ # duplicateImages << row[:image]
397
+ # duplicateTags << row[:tags]
398
+ # duplicateGlobals << row[:isGlobal]
399
+ # duplicateActives << row[:isActive]
400
+ # duplicateScheduled << row[:isScheduled]
401
+ # duplicateCustomImages << row[:HasCustomImage]
402
+ # duplicateSceneOrders << row[:userSceneOrder]
403
+ # end
404
+ # end
405
+ # make sure a scene was selected, else alert the user
406
+ # if count > 0
407
+ # confirm the edits should be made
408
+ # strAlert = "Do you want to delete the following scenes from the Savant host?\n\n" + deleteScenes.join("\n")
409
+ # if alert(strAlert, :headline => "Delete Scenes?", :button_yes => "Delete", :button_cancel => "Cancel", :parent => self)
410
+ # edit the database with the updated info
411
+ # deleteIDs.each do |id|
412
+ # stm = @db.prepare( "delete from sceneusermap where sceneIdentifier=?" )
413
+ # stm.bind_param 1, id
414
+ # stm.execute
415
+ # stm.close
416
+ # stm = @db.prepare( "delete from scenes where identifier=?" )
417
+ # stm.bind_param 1, id
418
+ # stm.execute
419
+ # stm.close
420
+ # stm = @db.prepare( "delete from scenedefinitions where sceneIdentifier=?" )
421
+ # stm.bind_param 1, id
422
+ # stm.execute
423
+ # stm.close
424
+ # end
425
+ # updateDatabase()
426
+ # buttonScanHost__clicked()
427
+ # end
428
+ # else
429
+ # alert("Please select at least 1 row to modify.", :parent => self)
430
+ # end
431
+ # end
393
432
 
394
433
  # #
395
434
  # BACKUP AND RESTORE #
@@ -467,110 +506,4 @@ class SceneManager
467
506
  @builder["window1"].destroy
468
507
  end
469
508
 
470
-
471
-
472
- def buttonAdvanced__clicked(*argv)
473
- @savantURL = @builder["savantURL"].text
474
- unless @scliBridge == "~/Applications/RacePointMedia/sclibridge "
475
- @builder["buttonAnalytics"].hide
476
- end
477
- @builder["windowAdvanced"].show
478
- end
479
-
480
- def buttonAdvancedCancel__clicked(*argv)
481
- @builder["windowAdvanced"].hide
482
- @listviewAdvanced.model.clear
483
- end
484
-
485
- #Rebuild listviewAdvanced window
486
- def repaintAdvanced
487
- @builder["listviewAdvanced"].hide
488
- @builder["listviewAdvanced"].show_all
489
- unless @scliBridge == "~/Applications/RacePointMedia/sclibridge "
490
- @builder["buttonAnalytics"].hide
491
- end
492
- end
493
-
494
- #Scan the specified IP for Analytics
495
- def buttonAnalytics__clicked(*argv)
496
- @builder["labelAdvanced"].label = "<big><b>Analytics</b></big>"
497
- @builder["windowLoading"].show
498
- begin
499
- @listviewAdvanced.model.clear
500
- Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
501
- # test to see if remote files exist and transfer them if they do
502
- if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
503
- @dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/eventHistory.sqlite"
504
- else
505
- @dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/eventHistory.sqlite"
506
- end
507
- fileExists = ssh.exec!("[ -f #{@dis} ] && echo 'true' || echo 'false'")
508
- unless fileExists == 'false'
509
- ssh.scp.download!(@dis, '/tmp/')
510
- #read from sqlite database and add to listview
511
- @db = SQLite3::Database.open('/tmp/eventHistory.sqlite')
512
- @db.execute( "select * from Analytics" ) do |rowData|
513
- row = @listviewAdvanced.add_row
514
- row[:time] = Time.at(rowData[12])
515
- row[:event] = rowData[1]
516
- row[:user] = rowData[3]
517
- row[:deviceName] = rowData[10]
518
- row[:deviceModel] = rowData[9]
519
- row[:deviceApp] = rowData[6]
520
- row[:deviceOS] = rowData[4]
521
- row[:deviceUID] = rowData[5]
522
- end
523
- @listviewAdvanced.col_visible(true)
524
- @listviewAdvanced.col_visible(:zone => false, :component => false, :logicalComponent => false, :variantID => false, :serviceID => false, :type => false, :argument => false)
525
-
526
- repaintAdvanced
527
- end
528
- end
529
- rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
530
- alert("Host not reached.", :parent => self)
531
- end
532
- @builder["windowLoading"].hide
533
- end
534
-
535
- #Scan the specified IP for Events
536
- def buttonEvents__clicked(*argv)
537
- @builder["labelAdvanced"].label = "<big><b>Events</b></big>"
538
- @builder["windowLoading"].show
539
- begin
540
- @listviewAdvanced.model.clear
541
- Net::SSH.start(@savantURL, @login, :password => @password, :paranoid => false, :timeout => 3) do |ssh|
542
- # test to see if remote files exist and transfer them if they do
543
- if @scliBridge == "~/Applications/RacePointMedia/sclibridge "
544
- @dis = "/Users/RPM/Library/Application Support/RacePointMedia/statusfiles/eventHistory.sqlite"
545
- else
546
- @dis = "GNUstep/Library/ApplicationSupport/RacePointMedia/statusfiles/eventHistory.sqlite"
547
- end
548
- fileExists = ssh.exec!("[ -f #{@dis} ] && echo 'true' || echo 'false'")
549
- unless fileExists == 'false'
550
- ssh.scp.download!(@dis, '/tmp/')
551
- #read from sqlite database and add to listview
552
- @db = SQLite3::Database.open('/tmp/eventHistory.sqlite')
553
- @db.execute( "select * from Events" ) do |rowData|
554
- row = @listviewAdvanced.add_row
555
- row[:time] = Time.at(rowData[0].to_i)
556
- row[:user] = rowData[1]
557
- row[:zone] = rowData[5]
558
- row[:component] = rowData[6]
559
- row[:logicalComponent] = rowData[7]
560
- row[:variantID] = rowData[8]
561
- row[:serviceID] = rowData[9]
562
- row[:type] = rowData[2]
563
- row[:argument] = rowData[3]
564
- end
565
- @listviewAdvanced.col_visible(true)
566
- @listviewAdvanced.col_visible(:event => false, :deviceName => false, :deviceModel => false, :deviceApp => false, :deviceOS => false, :deviceUID => false)
567
-
568
- repaintAdvanced
569
- end
570
- end
571
- rescue Net::SSH::ConnectionTimeout, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, Errno::EHOSTDOWN
572
- alert("Host not reached.", :parent => self)
573
- end
574
- @builder["windowLoading"].hide
575
- end
576
509
  end
@@ -172,7 +172,7 @@
172
172
  <property name="name">30</property>
173
173
  <property name="visible">True</property>
174
174
  <property name="can_focus">False</property>
175
- <property name="margin_left">180</property>
175
+ <property name="margin_left">240</property>
176
176
  <property name="margin_top">12</property>
177
177
  <property name="margin_bottom">12</property>
178
178
  <property name="column_spacing">3</property>
@@ -246,18 +246,6 @@
246
246
  <property name="top_attach">0</property>
247
247
  </packing>
248
248
  </child>
249
- <child>
250
- <object class="GtkButton" id="buttonAdvanced">
251
- <property name="label" translatable="yes">Advanced</property>
252
- <property name="visible">True</property>
253
- <property name="can_focus">True</property>
254
- <property name="receives_default">True</property>
255
- </object>
256
- <packing>
257
- <property name="left_attach">4</property>
258
- <property name="top_attach">0</property>
259
- </packing>
260
- </child>
261
249
  </object>
262
250
  <packing>
263
251
  <property name="left_attach">0</property>
@@ -294,9 +282,7 @@
294
282
  <property name="label" translatable="yes"> Savant scene manager copies the dashboard.sqlite file from the host to a temporary folder and lists all scenes from all users on that host.
295
283
  You can backup and restore this database, as well as delete scenes or edit certain properties: Scene Name, user email, and if the scene is Global.
296
284
 
297
- If the host is running 8.x, you can see Event History.
298
- If the host is a Pro Host, you can see Analytics Data.
299
- If the host is running at least 8.3, you can Activate Scenes.</property>
285
+ If the host is running at least 8.3, you can also activate scenes.</property>
300
286
  <property name="justify">center</property>
301
287
  <property name="wrap">True</property>
302
288
  <property name="wrap_mode">word-char</property>
@@ -311,148 +297,6 @@ If the host is running at least 8.3, you can Activate Scenes.</property>
311
297
  </object>
312
298
  </child>
313
299
  </object>
314
- <object class="GtkWindow" id="windowAdvanced">
315
- <property name="can_focus">False</property>
316
- <property name="modal">True</property>
317
- <property name="window_position">center-on-parent</property>
318
- <property name="gravity">center</property>
319
- <property name="transient_for">window1</property>
320
- <child>
321
- <object class="GtkGrid">
322
- <property name="visible">True</property>
323
- <property name="can_focus">False</property>
324
- <child>
325
- <object class="GtkLabel" id="labelAdvanced">
326
- <property name="visible">True</property>
327
- <property name="can_focus">False</property>
328
- <property name="margin_top">12</property>
329
- <property name="margin_bottom">12</property>
330
- <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Advanced&lt;/b&gt;&lt;/big&gt;</property>
331
- <property name="use_markup">True</property>
332
- </object>
333
- <packing>
334
- <property name="left_attach">0</property>
335
- <property name="top_attach">0</property>
336
- </packing>
337
- </child>
338
- <child>
339
- <object class="GtkScrolledWindow" id="listviewAdvanced">
340
- <property name="visible">True</property>
341
- <property name="can_focus">True</property>
342
- <property name="margin_left">12</property>
343
- <property name="margin_right">12</property>
344
- <property name="margin_top">12</property>
345
- <property name="margin_bottom">12</property>
346
- <property name="shadow_type">in</property>
347
- <property name="min_content_width">600</property>
348
- <property name="min_content_height">300</property>
349
- <property name="propagate_natural_width">True</property>
350
- <child>
351
- <placeholder/>
352
- </child>
353
- </object>
354
- <packing>
355
- <property name="left_attach">0</property>
356
- <property name="top_attach">1</property>
357
- </packing>
358
- </child>
359
- <child>
360
- <object class="GtkGrid">
361
- <property name="visible">True</property>
362
- <property name="can_focus">False</property>
363
- <property name="margin_left">12</property>
364
- <property name="margin_right">12</property>
365
- <property name="margin_top">12</property>
366
- <property name="margin_bottom">12</property>
367
- <property name="hexpand">True</property>
368
- <property name="column_spacing">12</property>
369
- <property name="column_homogeneous">True</property>
370
- <child>
371
- <object class="GtkButton" id="buttonAnalytics">
372
- <property name="label" translatable="yes">Analytics</property>
373
- <property name="visible">True</property>
374
- <property name="can_focus">True</property>
375
- <property name="receives_default">True</property>
376
- </object>
377
- <packing>
378
- <property name="left_attach">0</property>
379
- <property name="top_attach">0</property>
380
- </packing>
381
- </child>
382
- <child>
383
- <object class="GtkButton" id="buttonEvents">
384
- <property name="label" translatable="yes">Event History</property>
385
- <property name="visible">True</property>
386
- <property name="can_focus">True</property>
387
- <property name="receives_default">True</property>
388
- </object>
389
- <packing>
390
- <property name="left_attach">1</property>
391
- <property name="top_attach">0</property>
392
- </packing>
393
- </child>
394
- <child>
395
- <object class="GtkButton" id="buttonAdvancedCancel">
396
- <property name="label" translatable="yes">Cancel</property>
397
- <property name="visible">True</property>
398
- <property name="can_focus">True</property>
399
- <property name="receives_default">True</property>
400
- </object>
401
- <packing>
402
- <property name="left_attach">3</property>
403
- <property name="top_attach">0</property>
404
- </packing>
405
- </child>
406
- <child>
407
- <object class="GtkAlignment">
408
- <property name="visible">True</property>
409
- <property name="can_focus">False</property>
410
- <child>
411
- <placeholder/>
412
- </child>
413
- </object>
414
- <packing>
415
- <property name="left_attach">2</property>
416
- <property name="top_attach">0</property>
417
- </packing>
418
- </child>
419
- </object>
420
- <packing>
421
- <property name="left_attach">0</property>
422
- <property name="top_attach">2</property>
423
- </packing>
424
- </child>
425
- </object>
426
- </child>
427
- </object>
428
- <object class="GtkWindow" id="windowLoading">
429
- <property name="width_request">100</property>
430
- <property name="height_request">100</property>
431
- <property name="can_focus">False</property>
432
- <property name="resizable">False</property>
433
- <property name="modal">True</property>
434
- <property name="window_position">center-on-parent</property>
435
- <property name="default_width">100</property>
436
- <property name="default_height">100</property>
437
- <property name="urgency_hint">True</property>
438
- <property name="decorated">False</property>
439
- <property name="deletable">False</property>
440
- <property name="gravity">center</property>
441
- <property name="transient_for">windowAdvanced</property>
442
- <child>
443
- <object class="GtkAlignment">
444
- <property name="visible">True</property>
445
- <property name="can_focus">False</property>
446
- <child>
447
- <object class="GtkLabel">
448
- <property name="visible">True</property>
449
- <property name="can_focus">False</property>
450
- <property name="label" translatable="yes">Loading....</property>
451
- </object>
452
- </child>
453
- </object>
454
- </child>
455
- </object>
456
300
  <object class="GtkWindow" id="windowBackupRestore">
457
301
  <property name="width_request">300</property>
458
302
  <property name="height_request">300</property>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: savant-scenes
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Miller
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir:
10
10
  - bin
11
11
  cert_chain: []
12
- date: 2017-05-12 00:00:00.000000000 Z
12
+ date: 2017-05-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3