Class: Win32::VirtualDesktops

Inherits:
Array
  • Object
show all
Defined in:
lib/Win32/VirtualDesktop.rb

Overview

This class holds the array of virtual desktops

Defined Under Namespace

Classes: Configuration

Constant Summary collapse

NUM_NAMES =
["one", "two", "three", "four", "five", "six", "seven", "eight"]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(form, dir_base, icon_id_base, num_desktops, window_manager, *args) ⇒ VirtualDesktops

Returns a new instance of VirtualDesktops.



242
243
244
245
246
247
248
249
250
251
252
253
254
255
# File 'lib/Win32/VirtualDesktop.rb', line 242

def initialize(form, dir_base, icon_id_base, num_desktops, window_manager, *args)
  super(*args)
  @form ||= form
  @active_desktop_index ||= 0
  @window_manager ||= window_manager
  @last_windows ||= get_all_windows
  @all_windows ||= []
  
  NUM_NAMES.each_with_index do |number, index|
    icon_base = dir_base + "/" + number
    self.push(VirtualDesktop.create(self, icon_base + "_up.ico", icon_base + "_down.ico", icon_id_base+index, "Screen #{index+1}", index, index == 0, window_manager))
    break if index+1 >= num_desktops
  end
end

Instance Attribute Details

#active_desktop_indexObject

Returns the value of attribute active_desktop_index.



230
231
232
# File 'lib/Win32/VirtualDesktop.rb', line 230

def active_desktop_index
  @active_desktop_index
end

Class Method Details

.create(*args) ⇒ Object

create is here to allow another program to change how virtual desktops are created (use an object loaded off of disk instead of a freshly created one



236
237
238
# File 'lib/Win32/VirtualDesktop.rb', line 236

def create(*args)
  VirtualDesktops.new(*args)
end

Instance Method Details

#active_desktopObject



269
270
271
# File 'lib/Win32/VirtualDesktop.rb', line 269

def active_desktop
  self[@active_desktop_index]
end

#add_window(window) ⇒ Object



306
307
308
# File 'lib/Win32/VirtualDesktop.rb', line 306

def add_window(window)
  @all_windows.push(window) unless @all_windows.index(window)
end

#change_desktop(icon_id) ⇒ Object



273
274
275
276
277
278
279
280
281
282
283
# File 'lib/Win32/VirtualDesktop.rb', line 273

def change_desktop(icon_id)
  clicked_desktop = self.select{|s| s.icon_id == icon_id}[0]
  $TRACE.debug 5, "change_desktop: #{icon_id} -> #{clicked_desktop} ? #{@active_desktop_index}"
  if clicked_desktop.index != @active_desktop_index then
    $TRACE.debug 5, "changing desktops"
    self.active_desktop_index = clicked_desktop.index

    # save the changed state

    save
  end            
end

#contains_window(window) ⇒ Object



329
330
331
332
333
334
335
336
337
# File 'lib/Win32/VirtualDesktop.rb', line 329

def contains_window(window)
  self.each do |virtual_desktop|
    if virtual_desktop.contains_window(window) then
      return true
    end
  end

  return false
end

#create_trayiconsObject



310
311
312
313
314
# File 'lib/Win32/VirtualDesktop.rb', line 310

def create_trayicons
  self.reverse.each do |desktop|
    desktop.create_trayicon
  end
end

#delete_trayiconsObject



316
317
318
319
320
# File 'lib/Win32/VirtualDesktop.rb', line 316

def delete_trayicons
  self.each do |desktop|
    desktop.delete_trayicon
  end
end

#get_all_windowsObject



322
323
324
325
326
327
# File 'lib/Win32/VirtualDesktop.rb', line 322

def get_all_windows
  # select all non-tooltip windows

  @window_manager.get_all_windows.values.select do |w| 
    !/tooltips/.match(w.class_name)
  end
end

#handle_exitObject



411
412
413
414
415
# File 'lib/Win32/VirtualDesktop.rb', line 411

def handle_exit
  self.each do |desktop|
    desktop.handle_exit
  end
end

#move_window(icon_id) ⇒ Object



285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/Win32/VirtualDesktop.rb', line 285

def move_window(icon_id)
  # if the clicked desktop is not the active desktop then

  clicked_desktop = self.select{|s| s.icon_id == icon_id}[0]
  if clicked_desktop.index != @active_desktop_index then
    # get top window object

    windows = @window_manager.get_all_windows
    top_window_hwnd = @window_manager.get_top_window(windows)
    top_window = windows[top_window_hwnd]

    # move it from the active to the clicked desktop

    self[@active_desktop_index].remove_window(top_window)
    self[clicked_desktop.index].add_window(top_window)

    # and now hide it

    top_window.hide

    # save the changed state

    save
  end
end

#periodic_timerObject

this needs to be called periodically (< 1sec) to detect windows that are being closed or opened



343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
# File 'lib/Win32/VirtualDesktop.rb', line 343

def periodic_timer
  current_windows = get_all_windows
  added_windows =  current_windows - @last_windows
  removed_windows = @last_windows - current_windows
  
  $TRACE.debug 7, "cur  windows = " + current_windows.map{|w|w.hwnd}.join(",")
  $TRACE.debug 7, "last windows = " + @last_windows.map{|w|w.hwnd}.join(",")
  $TRACE.debug 7, "added_windows = " + added_windows.map{|w|"#{w.hwnd}-#{w.class_name}"}.join(",")
  $TRACE.debug 7, "removed_windows = " + removed_windows.map{|w|"#{w.hwnd}-#{w.class_name}"}.join(",")

  active_desktop = self[@active_desktop_index]
  added_windows.each do |window|
    active_desktop.add_window(window)
  end
  removed_windows.each do |window|
    active_desktop.remove_window(window)
  end

  # save the state if there were any modifications

  if added_windows.size > 0 || removed_windows.size > 0 then
    save
  end
  
  @last_windows = current_windows
end

#push(virtual_desktop) ⇒ Object



257
258
259
260
# File 'lib/Win32/VirtualDesktop.rb', line 257

def push(virtual_desktop)
  super(virtual_desktop)
  virtual_desktop.form = @form
end

#restoreObject



402
403
404
405
406
407
408
409
# File 'lib/Win32/VirtualDesktop.rb', line 402

def restore
  configuration = nil
  File.open("c:/vtdesk.txt", "r") do |f|
    configuration = YAML::load(f)
  end

  restore_info(configuration.save_info)
end

#restore_info(virtual_desktop_infos) ⇒ Object



381
382
383
384
385
# File 'lib/Win32/VirtualDesktop.rb', line 381

def restore_info(virtual_desktop_infos)
  self.each_with_index do |virtual_desktop, i|
    virtual_desktop.restore_info(virtual_desktop_infos[i])
  end
end

#saveObject



396
397
398
399
400
# File 'lib/Win32/VirtualDesktop.rb', line 396

def save
  File.open("c:/vtdesk.txt", "w") do |f|
    f.write(Configuration.new(self.save_info).to_yaml)
  end
end

#save_infoObject



373
374
375
376
377
378
379
# File 'lib/Win32/VirtualDesktop.rb', line 373

def save_info
  virtual_desktops = []
  self.each do |vd|
    virtual_desktops.push(vd.save_info)
  end
  virtual_desktops
end

#set_screen_nameObject



369
370
371
# File 'lib/Win32/VirtualDesktop.rb', line 369

def set_screen_name
  self[@active_desktop_index].set_screen_name
end