Method: CDK::SCALE#initialize
- Defined in:
- lib/cdk/scale.rb
#initialize(cdkscreen, xplace, yplace, title, label, field_attr, field_width, start, low, high, inc, fast_inc, box, shadow) ⇒ SCALE
Returns a new instance of SCALE.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/cdk/scale.rb', line 5 def initialize(cdkscreen, xplace, yplace, title, label, field_attr, field_width, start, low, high, inc, fast_inc, box, shadow) super() parent_width = cdkscreen.window.getmaxx parent_height = cdkscreen.window.getmaxy bindings = { 'u' => Ncurses::KEY_UP, 'U' => Ncurses::KEY_PPAGE, CDK::BACKCHAR => Ncurses::KEY_PPAGE, CDK::FORCHAR => Ncurses::KEY_NPAGE, 'g' => Ncurses::KEY_HOME, '^' => Ncurses::KEY_HOME, 'G' => Ncurses::KEY_END, '$' => Ncurses::KEY_END, } self.setBox(box) box_height = @border_size * 2 + 1 box_width = field_width + 2 * @border_size # Set some basic values of the widget's data field. @label = [] @label_len = 0 @label_win = nil # If the field_width is a negative value, the field_width will # be COLS-field_width, otherwise the field_width will be the # given width. field_width = CDK.setWidgetDimension(parent_width, field_width, 0) box_width = field_width + 2 * @border_size # Translate the label string to a chtype array unless label.nil? label_len = [] @label = CDK.char2Chtype(label, label_len, []) @label_len = label_len[0] box_width = @label_len + field_width + 2 end old_width = box_width box_width = self.setTitle(title, box_width) horizontal_adjust = (box_width - old_width) / 2 box_height += @title_lines # Make sure we didn't extend beyond the dimensions of the window. box_width = [box_width, parent_width].min box_height = [box_height, parent_height].min field_width = [field_width, box_width - @label_len - 2 * @border_size].min # Rejustify the x and y positions if we need to. xtmp = [xplace] ytmp = [yplace] CDK.alignxy(cdkscreen.window, xtmp, ytmp, box_width, box_height) xpos = xtmp[0] ypos = ytmp[0] # Make the widget's window. @win = Ncurses::WINDOW.new(box_height, box_width, ypos, xpos) # Is the main window nil? if @win.nil? self.destroy return nil end # Create the widget's label window. if @label.size > 0 @label_win = @win.subwin(1, @label_len, ypos + @title_lines + @border_size, xpos + horizontal_adjust + @border_size) if @label_win.nil? self.destroy return nil end end # Create the widget's data field window. @field_win = @win.subwin(1, field_width, ypos + @title_lines + @border_size, xpos + @label_len + horizontal_adjust + @border_size) if @field_win.nil? self.destroy return nil end @field_win.keypad(true) @win.keypad(true) # Create the widget's data field. @screen = cdkscreen @parent = cdkscreen.window @shadow_win = nil @box_width = box_width @box_height = box_height @field_width = field_width @field_attr = field_attr @current = low @low = low @high = high @current = start @inc = inc @fastinc = fast_inc @accepts_focus = true @input_window = @win @shadow = shadow @field_edit = 0 # Do we want a shadow? if shadow @shadow_win = Ncurses::WINDOW.new(box_height, box_width, ypos + 1, xpos + 1) if @shadow_win.nil? self.destroy return nil end end # Setup the key bindings. bindings.each do |from, to| self.bind(self.object_type, from, :getc, to) end cdkscreen.register(self.object_type, self) end |