Skip to content

Instantly share code, notes, and snippets.

@rkumar
Created October 11, 2009 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rkumar/207760 to your computer and use it in GitHub Desktop.
Save rkumar/207760 to your computer and use it in GitHub Desktop.
# this is a test program, testing out
# subwindows and pads in ncurses + ruby. Testing out
# prefresh, copywin overwrite etc. All worked finally.
#$LOAD_PATH << "/Users/rahul/work/projects/rbcurse/"
require 'rubygems'
require 'ncurses'
require 'logger'
require 'rbcurse'
require 'rbcurse/rtabbedpane'
class TestSubwin
def initialize
acolor = $reversecolor
#$config_hash ||= {}
end
def run
@layout1 = { :height => 20, :width => 75, :top => 3, :left => 3 }
@window = VER::Window.root_window #(@layout1)
h = 8; w = 35; t = 5; l = 13
@layout = { :height => 2, :width => w, :top => t, :left => l }
@layout2 = { :height => h-2, :width => w, :top => t+2, :left => l }
@wins = []
@pads = []
3.times(){ @wins << @window.derwin(@layout2)
@pads << Ncurses.newpad(@layout2[:height], @layout2[:width])
_pad = @pads.last
i = @pads.length
@panels = _pad.new_panel
@pads.last.box(0,0)
_pad.attron(Ncurses.COLOR_PAIR(i))
@pads.last.mvprintw(1, 1, "%s", "HELLO THERE");
@pads.last.mvprintw(2, 1, "%s", "HeLLO THERE");
@pads.last.mvprintw(3, 1, "%s", "HEllo THERE");
_pad.attroff(Ncurses.COLOR_PAIR(i))
}
@subwin= @window.derwin(@layout)
@subwin.box(0,0)
#@window.get_window().touchwin()
@subwin.wrefresh
@window.printstring(1,10,"Ncurses Subwindow test",0)
@window.printstring(2,10,"q to quit",2)
@subwin.printstring(0,1,"subwin 1",1, 'reverse')
#
@form = Form.new @subwin
@help = "q to quit. "
RubyCurses::Label.new @form, {'text' => @help, "row" => 1, "col" => 2, "color" => "yellow"}
@form.repaint
@window.wrefresh
Ncurses::Panel.update_panels
ctr = 0
while((ch = @subwin.getchar()) != ?q.getbyte(0) )
# @tp.repaint
ix = ctr % 3
ctr += 1
awin = @wins[ix]
apad = @pads[ix]
#awin.werase
ret = "xx"
#ret = apad.overwrite(awin.get_window())
#ret = apad.overwrite(@window.get_window()) # ok but no control over location
#ret = Ncurses.overwrite(apad, @window.get_window()) # ok but no control over location
#ret = @window.get_window().overwrite(apad)
$log.debug(" overwrite ret = #{ret}")
@wins.each { |w|
p = w.panel
@subwin.printstring(1,(ix+6)*ix,"subwin #{ix}",ix, 'reverse')
}
#ret = apad.prefresh(0,0, @layout2[:top], @layout2[:left], @layout2[:top]+@layout2[:height],@layout2[:left]+@layout2[:width])
#ret = apad.copywin(@window.get_window,0,0, @layout2[:top], @layout2[:left], @layout2[:top]+@layout2[:height],@layout2[:left]+@layout2[:width],1)
#ret = apad.copywin(@window.get_window,0,0, 7, 13, 7+5, 13+35, 1) # works
# next works but use one less for h and w
ret = apad.copywin(awin.get_window,0,0, 0, 0, 5, 34, 1) # works XXX but flaky, why not 35
#ret = apad.prefresh(0,0,7, 13, @layout2[:height]+7, @layout2[:width])
$log.debug(" prefresh ret = #{ret}")
#awin.wrefresh
# next 2 lines required by copywin by not by prefresh
@window.wrefresh
Ncurses::Panel.update_panels
#@subwin.printstring(2,1,"Entered #{ch.chr}", 1)
=begin
1.upto(5) {|ii|
awin.printstring(ii,1,"#{ii} SW #{ix} Entered #{ch.chr} hello there sammy", ix)
awin.getchar()
}
=end
#@window.get_window().touchwin() # supposedly required <<< was clearing prefresh XXX
#@subwin.wrefresh
#awin.wrefresh
#@window.wrefresh
end
@subwin.destroy
@wins.each {|w| w.destroy}
@window.destroy
end
end
if $0 == __FILE__
# Initialize curses
begin
# XXX update with new color and kb
VER::start_ncurses # this is initializing colors via ColorMap.setup
$log = Logger.new("view.log")
$log.level = Logger::DEBUG
n = TestSubwin.new
n.run
rescue => ex
ensure
VER::stop_ncurses
p ex if ex
p(ex.backtrace.join("\n")) if ex
$log.debug( ex) if ex
$log.debug(ex.backtrace.join("\n")) if ex
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment