module NGC_FUNCTIONS include RBA app = Application.instance myRoot = File.dirname(File.dirname(__FILE__)) class Ngc_Highlighter < RBA::QObject attr_reader :highlighting attr_reader :timer_blinker attr_reader :action attr_reader :action_black ############################################################################################################ 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 "NGC UPDATER SET UP" userName = Etc.getlogin @root = File.dirname(File.dirname(__FILE__)) + "/NGC_HIGHLIGHTER" puts @root @icon_file_ok = @root + "/highlighter.png" puts @icon_file_ok #################################################################################################### # # MENU ITEM DEFINITIONS # #################################################################################################### # TOOLBAR ITEM 1 menu = @mw.menu @menu.delete_item("@toolbar.NGC_HIGHLIGHTER_Action") @menu.delete_item("@tools_menu.chighlighter") @menu.delete_item("@tools_menu.bwhighlighter") tooltip = "----------------------------------------------------------------------\n" tooltip += "NGC HIGHLIGHTER (Ctrl+Shift+H)\n" tooltip += " Ctrl+Shift+H: color\n" tooltip += " Ctrl+Shift+G: b/w\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: col" @action.shortcut = "Ctrl+Shift+H" @action.tool_tip = tooltip @action.icon = @icon_file_ok @action.icon_text = "HL" @action.on_triggered do puts "NGC COLOR HIGHLIGHTER triggered #{@highlighting}" highlight(parent, true) end # triggered do @action_black = RBA::Action.new @action_black.title = "HighLighter: b/w" @action_black.shortcut = "Ctrl+Shift+G" @action_black.tool_tip = tooltip @action_black.icon = @icon_file_ok @action_black.icon_text = "HL" @action_black.on_triggered do puts "NGC BLACK HIGHLIGHTER triggered #{@highlighting}" highlight(parent, false) end # triggered do @menu.insert_item( "@toolbar.end","NGC_HIGHLIGHTER_Action",@action) @menu.insert_item("tools_menu.end", "chighlighter",@action) @menu.insert_item("tools_menu.end", "bwhighlighter",@action_black) @menu.action("tools_menu.chighlighter").shortcut = "Ctrl+Shift+H" RBA::Application.instance.write_config(@root + "/config1.txt") # 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(':') thisName = keybinding_pair[0] thisVal = keybinding_pair[1] isCTRL_SHIFT_H = false if !thisName.gsub("'","").empty? if thisName =~ /.*tools_menu\.chighlighter.*/ puts "FOUND " + thisName + ": <" + thisVal.gsub("'","") + ">"; if !thisVal.gsub("'","").empty? if thisVal =~ /.*Ctrl\+Shift\+H.*/ found_CTRL_SHIFT_H = true isCTRL_SHIFT_H = true puts "LEAVE, FOUND: #{thisName} - #{thisVal}" else toBeAdded = "tools_menu.chighlighter:'Ctrl+Shift+H'" if new_config_keybindings_str.length>0 new_config_keybindings_str += ";" + toBeAdded else new_config_keybindings_str += toBeAdded end found_CTRL_SHIFT_H = true puts "CHANGED " + thisVal.gsub("'","") + " TO "+ toBeAdded end else toBeAdded = "tools_menu.chighlighter:'Ctrl+Shift+H'" if new_config_keybindings_str.length>0 new_config_keybindings_str += ";" + toBeAdded else new_config_keybindings_str += toBeAdded end found_CTRL_SHIFT_H = true puts "CHANGED EMPTY TO " + toBeAdded end else if new_config_keybindings_str.length>0 new_config_keybindings_str += ";" + keybinding.to_s else new_config_keybindings_str += keybinding.to_s end # puts keybinding.to_s end end end if !found_CTRL_SHIFT_H toBeAdded = "tools_menu.chighlighter:'Ctrl+Shift+H'" if new_config_keybindings_str.length>0 new_config_keybindings_str += ";" + toBeAdded else new_config_keybindings_str += toBeAdded end puts "ADDED FRESH " + toBeAdded end RBA::Application.instance.set_config('key-bindings', new_config_keybindings_str) RBA::Application.instance.commit_config RBA::Application.instance.write_config(@root + "/config2.txt") puts "DONE WITH CTLR-SHIFT-H" puts "===================================" puts new_config_keybindings_str # puts new_config_keybindings_str end ############################################################################################################ def highlight(parent, useOriginalLprops) 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(layernodes, useOriginalLprops) startCascadedTimers(250, parent, layernodes, useOriginalLprops) 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) @timer_tmo = RBA::QTimer.new if !defined?(@timer_tmo) @timer_tmo.stop @timer_tmo.setSingleShot(true) @timer_tmo.setInterval(mseconds) @timer_tmo.timeout do stopCascadedTimers recoverLayers(layernodes) @highlighting = false end @timer_tmo.start end ############################################################################################################ def startCascadedTimers(mseconds, parent, layernodes, useOriginalLprops) @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(layernodes, useOriginalLprops) else setLayers2Background(layernodes) setSelectedLayers2FG(layernodes, useOriginalLprops) end end @highlighted_index=0 @timer_blinker.start puts "startCascadedTimers done" end ############################################################################################################ def advanceHighlight(layernodes, useOriginalLprops) 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 if useOriginalLprops lref_prop = getSavedLayerProp(layernodes, lref) if lref_prop!=nil lref.dither_pattern = lref_prop[0] lref.fill_color = lref_prop[1] lref.frame_color = lref_prop[2] lref.width = lref_prop[3] end else lref.dither_pattern = 0 #1 lref.frame_color = 0x000000 lref.width = 2 #3 lref.fill_color = 0x000000 end else lref.dither_pattern = 3 lref.fill_color = 0xc0c0c0 lref.width = 0 end end end ############################################################################################################ def getSavedLayerProp(layernodes, lref2find) # [lref.dither_pattern, lref.fill_color, lref.frame_color, lref.width] layernodes.each do |lref| layer_index = lref2find.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 return lref_prop break end end 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(layernodes, useOriginalLprops) lv = @mw.current_view lv.selected_layers.each do |lpi| lref = lpi.current if useOriginalLprops lref_prop = getSavedLayerProp(layernodes, lref) if lref_prop!=nil lref.dither_pattern = lref_prop[0] lref.fill_color = lref_prop[1] lref.frame_color = lref_prop[2] lref.width = lref_prop[3] end else lref.dither_pattern = 0 #1 lref.frame_color = 0x000000 lref.width = 2 #3 lref.fill_color = 0x000000 end 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 $ngc_highlighter = Ngc_Highlighter::new if !defined?($ngc_highlighter) $ngc_highlighter = Ngc_Highlighter::new if $ngc_highlighter==nil $ngc_highlighter.setUp(app, myRoot, $ngc_highlighter) puts "NGC_HIGHLIGHTER SET UP: #{$ngc_highlighter.highlighting}" end #module