Method: Canis::App#loop
- Defined in:
- lib/canis/core/util/app.rb
#loop(&block) ⇒ Object
This method is called by run, and thus in most cases this is what is used. run calls this without a block not sure, but user shuld be able to trap keystrokes if he wants but do i still call handle_key if he does, or give him total control. But loop is already called by framework
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/canis/core/util/app.rb', line 129 def loop &block @form.repaint @window.wrefresh Ncurses::Panel.update_panels @break_key = ?\C-q.getbyte(0) # added this extra loop since from some places we exit using throw :close # amd that was in a much higher place, and was getting us right out, with # no chance of user canceling quit. This extra loop allows us to remain # added on 2011-11-24 while true catch :close do while((ch = @window.getchar()) != 999 ) if ch == @break_key || ch == @quit_key break end # 2014-08-19 - 22:51 commented next line, too much choice. keep it simple. delete in a month FIXME #yield ch if block # <<<---- # this is what the user should have control ove. earlier we would put this in # a try catch block so user could do what he wanted with the error. Now we # need to get it to him somehow, perhaps through a block or on_error event begin # execute a code block so caller program can handle keys from a hash or whatever. # NOTE: these keys will not appear in help # FIXME : ideally if its just a hash, we should allow user to give it to form # or widget which it will use, or merge, and be able to print help from if @keyblock str = keycode_tos ch # why did we ever want to convert to a symbol. why not just pass it as is. #@keyblock.call(str.gsub(/-/, "_").to_sym) # not used ever ret = @keyblock.call(str) if ret @form.repaint next end end @form.handle_key ch rescue => err $log.debug( "app.rb handle_key rescue reached ") $log.debug( err.to_s) $log.debug(err.backtrace.join("\n")) textdialog [err.to_s, *err.backtrace], :title => "Exception" end @window.wrefresh end end # catch stopping = @window.fire_close_handler @window.wrefresh break if stopping.nil? || stopping end # while end |