Class: Canis::Label

Inherits:
Widget show all
Defined in:
lib/canis/core/widgets/rwidget.rb

Overview

The preferred way of printing text on screen, esp if you want to modify it at run time. Use display_length to ensure no spillage. This can use text or text_variable for setting and getting data (inh from Widget). 2011-11-12 making it simpler, and single line only. The original multiline label

has moved to extras/multilinelabel.rb

Since:

  • 1.2.0

Instance Attribute Summary

Attributes inherited from Widget

#_object_created, #col_offset, #config, #curpos, #focussed, #form, #handler, #id, #key_label, #parent_component, #row_offset, #state

Instance Method Summary collapse

Methods inherited from Widget

#action_manager, #bgcolor, #color, #color_pair, #command, #destroy, #focus, #focusable, #focusable?, #getvalue_for_paint, #handle_key, #hide, #init_vars, #modified?, #move, #override_graphic, #process_key, #property_set, #remove, #repaint_all, #repaint_required, #rowcol, #set_form, #set_form_col, #set_form_row, #set_modified, #setformrowcol, #setrowcol, #show, #unbind_key

Methods included from Io

#__create_footer_window, #clear_this, #get_file, #print_this, #rb_getchar, #rb_gets, #rb_getstr, #warn

Methods included from Utils

#ORIG_process_key, #ORIGbind_key, #ORIGkeycode_tos, #_process_key, #bind_composite_mapping, #bind_key, #bind_keys, #check_composite_mapping, #create_logger, #define_key, #define_prefix_command, #execute_mapping, #get_attrib, #get_color, #key, #key_tos, #print_key_bindings, #repeatm, #run_command, #shell_out, #shell_output, #suspend, #view, #xxxbind_composite_mapping

Methods included from ConfigSetup

#config_setup, #variable_set

Methods included from EventHandler

#bind, #event?, #event_list, #fire_handler, #fire_property_change, #register_events

Constructor Details

#initialize(form, config = {}, &block) ⇒ Label

dsl_property :display_length #please give this to ensure the we only print this much for consistency with others 2011-11-5 alias :width :display_length alias :width= :display_length=

Since:

  • 1.2.0



2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
# File 'lib/canis/core/widgets/rwidget.rb', line 2969

def initialize form, config={}, &block
  
  @text = config.fetch(:text, "NOTFOUND")
  @editable = false
  @focusable = false
  # we have some processing for when a form is attached, registering a hotkey
  register_events :FORM_ATTACHED
  super
  @justify ||= :left
  @name ||= @text
  @repaint_required = true
end

Instance Method Details

#bind_hotkeyObject

for a button, fire it when label invoked without changing focus for other widgets, attempt to change focus to that field

Since:

  • 1.2.0



3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
# File 'lib/canis/core/widgets/rwidget.rb', line 3001

def bind_hotkey
  if @mnemonic
    ch = @mnemonic.downcase()[0].ord   ##  1.9 DONE 
    # meta key 
    mch = ?\M-a.getbyte(0) + (ch - ?a.getbyte(0))  ## 1.9
    if (@label_for.is_a? Canis::Button ) && (@label_for.respond_to? :fire)
      @form.bind_key(mch, "hotkey for button #{@label_for.text} ") { |_form, _butt| @label_for.fire }
    else
      $log.debug " bind_hotkey label for: #{@label_for}"
      @form.bind_key(mch, "hotkey for label #{text} ") { |_form, _field| @label_for.focus }
    end
  end
end

#getvalueObject

get the value for the label

Since:

  • 1.2.0



2983
2984
2985
2986
# File 'lib/canis/core/widgets/rwidget.rb', line 2983

def getvalue
  #@text_variable && @text_variable.value || @text
  @text
end

#label_for(field) ⇒ Object

Since:

  • 1.2.0



2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
# File 'lib/canis/core/widgets/rwidget.rb', line 2987

def label_for field
  @label_for = field
  #$log.debug " label for: #{@label_for}"
  if @form
    bind_hotkey 
  else
  # we have some processing for when a form is attached, registering a hotkey
    bind(:FORM_ATTACHED){ bind_hotkey }
  end
end

#on_enterObject

Added 2011-10-22 to prevent some naive components from putting focus here.

Since:

  • 1.2.0



3062
3063
3064
# File 'lib/canis/core/widgets/rwidget.rb', line 3062

def on_enter
  raise "Cannot enter Label"
end

#on_leaveObject

Since:

  • 1.2.0



3065
3066
3067
# File 'lib/canis/core/widgets/rwidget.rb', line 3065

def on_leave
  raise "Cannot leave Label"
end

#repaintObject

label’s repaint - I am removing wrapping and Array stuff and making it simple 2011-11-12

Since:

  • 1.2.0



3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
# File 'lib/canis/core/widgets/rwidget.rb', line 3017

def repaint
  return unless @repaint_required
  raise "Label row or col nil #{@row} , #{@col}, #{@text} " if @row.nil? || @col.nil?
  r,c = rowcol

  #@bgcolor ||= $def_bg_color
  #@color   ||= $def_fg_color
  _bgcolor = bgcolor()
  _color = color()
  # value often nil so putting blank, but usually some application error
  value = getvalue_for_paint || ""

  if value.is_a? Array
    value = value.join " "
  end
  # ensure we do not exceed
  if @width
    if value.length > @width
      value = value[0..@width-1]
    end
  end
  len = @width || value.length
  #acolor = get_color $datacolor
  # the user could have set color_pair, use that, else determine color
  # This implies that if he sets cp, then changing col and bg won't have an effect !
  # A general routine that only changes color will not work here.
  acolor = @color_pair || get_color($datacolor, _color, _bgcolor)
  #$log.debug "label :#{@text}, #{value}, r #{r}, c #{c} col= #{@color}, #{@bgcolor} acolor  #{acolor} j:#{@justify} dlL: #{@width} "
  str = @justify.to_sym == :right ? "%*s" : "%-*s"  # added 2008-12-22 19:05 

  @graphic ||= @form.window
  # clear the area
  @graphic.printstring r, c, " " * len , acolor, attr()
  if @justify.to_sym == :center
    padding = (@width - value.length)/2
    value = " "*padding + value + " "*padding # so its cleared if we change it midway
  end
  @graphic.printstring r, c, str % [len, value], acolor, attr()
  if @mnemonic
    ulindex = value.index(@mnemonic) || value.index(@mnemonic.swapcase)
    @graphic.mvchgat(y=r, x=c+ulindex, max=1, Ncurses::A_BOLD|Ncurses::A_UNDERLINE, acolor, nil)
  end
  @repaint_required = false
end