savant-scenes 1.0.2 → 1.0.11

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: 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