module MY_FUNCTIONS include RBA app = Application.instance myRoot = File.dirname(File.dirname(__FILE__)) class Highlighter < RBA::QObject attr_reader :highlighting attr_reader :timer_blinker attr_reader :action ############################################################################################################ def setUp(app, programroot, parent) @app = app @mw = @app.main_window @menu = @mw.menu @root = programroot @highlighting = false @highlighted_index = -1 @layernodes_bk = {} @parent = parent # [lref.dither_pattern, lref.fill_color, lref.frame_color, lref.width] puts "setting up HIGHLIGHTER" userName = Etc.getlogin @root = File.dirname(File.dirname(__FILE__)) + "/HIGHLIGHTER" puts @root @icon_file_ok = @root + "/highlighter.png" puts @icon_file_ok #################################################################################################### # # MENU ITEM DEFINITIONS # #################################################################################################### # TOOLBAR ITEM 1 menu = @mw.menu tooltip = "----------------------------------------------------------------------\n" tooltip += "HIGHLIGHTER (Ctrl+Shift+H)\n" tooltip += "----------------------------------------------------------------------\n" tooltip += "Greys out all visible layers.\n" tooltip += "Highlights all selected visible layers.\n" tooltip += "Make sure you turn this off before other actions (open/close/etc).\n" tooltip += "60sec timeout for now." @action = RBA::Action.new @action.title = "HIGHLIGHTER" @action.shortcut = "Ctrl+Shift+H" @action.tool_tip = tooltip @action.icon = @icon_file_ok @action.icon_text = "HL" @action.on_triggered do puts "HIGHLIGHTER triggered #{@highlighting}" highlight(parent) end # triggered do @menu.delete_item("@toolbar.HIGHLIGHTER_Action") @menu.insert_item("@toolbar.end","HIGHLIGHTER_Action",@action) @menu.action("@toolbar.HIGHLIGHTER_Action").shortcut = "Ctrl+Shift+H" @menu.delete_item("tools_menu.highlighter") @menu.insert_item("tools_menu.end", "highlighter",@action) @menu.action("tools_menu.highlighter").shortcut = "Ctrl+Shift+H" addShortCut() end #setup ############################################################################################################ def addShortCut() config_names = RBA::Application.instance.get_config_names config_keybindings_str = RBA::Application.instance.get_config('key-bindings') config_keybindings = config_keybindings_str.split(';') # Print all current ones out found_CTRL_SHIFT_H = false new_config_keybindings_str = "" config_keybindings.each do |keybinding| keybinding_pair = keybinding.split(':') #puts "#{keybinding_pair[0]} - #{keybinding_pair[1].empty?}" thisName = keybinding_pair[0] thisVal = keybinding_pair[1] isCTRL_SHIFT_H = false if !thisName.gsub("'","").empty? and !thisVal.gsub("'","").empty? # puts "#{thisName}" if thisName =~ /.*tools_menu\.highlighter.*/ # puts "FOUND: #{thisName}" if thisVal =~ /.*Ctrl\+Shift\+H.*/ found_CTRL_SHIFT_H = true isCTRL_SHIFT_H = true puts "FOUND: #{thisName} - #{thisVal}" end end if !isCTRL_SHIFT_H new_config_keybindings_str += thisName + ":" + thisVal + ";" # puts "KEYBOARD SHORTCUT: #{thisName} - #{thisVal}" end end end puts "inspection done" if new_config_keybindings_str.end_with?(";") new_config_keybindings_str += "'tools_menu.highlighter':'Ctrl+Shift+H'"; else new_config_keybindings_str += ";'tools_menu.highlighter':'Ctrl+Shift+H'"; end RBA::Application.instance.set_config('key-bindings', new_config_keybindings_str) puts "ADDED CTLR-SHIFT-H" # puts new_config_keybindings_str end ############################################################################################################ def highlight(parent) lv = @mw.current_view lvi = @mw.current_view_index cv = lv.cellview(lv.active_cellview_index) selectedCell = cv.cell layernodes = getAllLayers(lv, selectedCell) puts "#{layernodes.length} layers in use " + parent.to_s if !@highlighting backupLayers(layernodes) setLayers2Background(layernodes) setSelectedLayers2FG startCascadedTimers(250, parent, layernodes) setTimeout(60*1000, layernodes) else stopCascadedTimers stopTimeout recoverLayers(layernodes) end @highlighting = !@highlighting puts "highlight end" end ############################################################################################################ def stopTimeout() @timer_tmo.stop if defined?(@timer_tmo) end ############################################################################################################ def setTimeout(mseconds, layernodes) if !defined?(@timer_tmo) @timer_tmo = RBA::QTimer.new @timer_tmo.setSingleShot(true) @timer_tmo.timeout do stopCascadedTimers recoverLayers(layernodes) @highlighting = false end else @timer_tmo.stop end @timer_tmo.setInterval(mseconds) @timer_tmo.start end ############################################################################################################ def startCascadedTimers(mseconds, parent, layernodes) @timer_blinker = RBA::QTimer.new if !defined?(@timer_blinker) @timer_blinker.stop @timer_blinker.setInterval (mseconds) @timer_blinker.setSingleShot(false) @timer_blinker.setParent(parent) @timer_blinker.setObjectName('genericTimer') @timer_blinker.setProperty("SOURCE" , self.class.name.split('::').last) @timer_blinker.setProperty("interval" , mseconds) @timer_blinker.timeout do if @mw.current_view.selected_layers.length>1 advanceHighlight else setLayers2Background(layernodes) setSelectedLayers2FG end end @highlighted_index=0 @timer_blinker.start puts "startCascadedTimers done" end ############################################################################################################ def advanceHighlight() lv = @mw.current_view @highlighted_index+=1 @highlighted_index=0 if @highlighted_index>(lv.selected_layers.length-1) index = -1 lv.selected_layers.each do |lpi| lref = lpi.current index += 1 if index==@highlighted_index lref.dither_pattern = 0 #1 lref.frame_color = 0x000000 lref.width = 2 #3 lref.fill_color = 0x000000 else lref.dither_pattern = 3 lref.fill_color = 0xc0c0c0 lref.width = 0 end end end ############################################################################################################ def stopCascadedTimers() @timer_blinker.stop if defined?(@timer_blinker) end ############################################################################################################ def backupLayers(layernodes) @layernodes_bk.clear layernodes.each do |lref| layer_index = lref.layer_index if lref.valid? and layer_index>=0 lref_prop = [lref.dither_pattern, lref.fill_color, lref.frame_color, lref.width] @layernodes_bk.store(layer_index, lref_prop) end end end ############################################################################################################ def recoverLayers(layernodes) puts "recover called" # [lref.dither_pattern, lref.fill_color, lref.frame_color, lref.width] layernodes.each do |lref| layer_index = lref.layer_index if lref.valid? and layer_index>=0 @layernodes_bk.each do |key, value| layer_index_bk = key lref_prop = value if layer_index_bk==layer_index lref.dither_pattern = lref_prop[0] lref.fill_color = lref_prop[1] lref.frame_color = lref_prop[2] lref.width = lref_prop[3] break end end end end end ############################################################################################################ def setSelectedLayers2FG() lv = @mw.current_view lv.selected_layers.each do |lpi| lref = lpi.current lref.dither_pattern = 0 #1 lref.frame_color = 0x000000 lref.width = 2 #3 lref.fill_color = 0x000000 end @highlighted_index = 0 end ############################################################################################################ def setLayers2Background(layernodes) layernodes.each do |lref| if lref.valid? and lref.layer_index>=0 # s = "#{lref.layer_index}: #{lref.source_layer} / #{lref.source_layer} - #{lref.source_name}: visible=#{lref.visible?} - marked=#{lref.marked?} " # puts s lref.dither_pattern = 3 lref.fill_color = 0xc0c0c0 lref.width = 0 end end end ############################################################################################################ def getAllLayers(lv, cell) layernodes = [] # lv.expand_layer_properties puts "#{lv.selected_layers.size} selected layers" lv.each_layer do |lref| # s = "#{lref.layer_index}: #{lref.source_layer} / #{lref.source_layer} - #{lref.source_name}: #{lref.visible?} - #{lref.marked?} " # lref is a LayerPropertiesNodeRef object layer_index = lref.layer_index if lref.valid? and layer_index>=0 #and lref.visible? # numShapesInLayer = cell.shapes(lref.layer_index).size # s = "#{numShapesInLayer} - #{lref.layer_index}: #{lref.source_layer} / #{lref.source_layer} - #{lref.source_name}: visible=#{lref.visible?} - marked=#{lref.marked?} " # puts s layernodes << lref end end return layernodes end ############################################################################################################ end #class $highlighter = Highlighter::new if !defined?($highlighter) $highlighter = Highlighter::new if $highlighter==nil $highlighter.setUp(app, myRoot, $highlighter) puts "HIGHLIGHTER SET UP: #{$highlighter.highlighting}" end #module