diff options
author | Immae <immae@immae.eu> | 2014-06-18 23:50:55 +0200 |
---|---|---|
committer | Immae <immae@immae.eu> | 2014-06-18 23:50:55 +0200 |
commit | 7a1b77020cc139cc9240cd2c7ed2ae8990613d66 (patch) | |
tree | 00912cb19d534a768982a002b93dd4b8ae6395ad /windows.rb | |
parent | cfddfd90ca8df888683529fcf683958da0894b10 (diff) | |
download | Monitor-7a1b77020cc139cc9240cd2c7ed2ae8990613d66.tar.gz Monitor-7a1b77020cc139cc9240cd2c7ed2ae8990613d66.tar.zst Monitor-7a1b77020cc139cc9240cd2c7ed2ae8990613d66.zip |
classes in separate files
Diffstat (limited to 'windows.rb')
-rw-r--r-- | windows.rb | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/windows.rb b/windows.rb new file mode 100644 index 0000000..5b23579 --- /dev/null +++ b/windows.rb | |||
@@ -0,0 +1,205 @@ | |||
1 | class List_Win | ||
2 | def initialize(inifile) | ||
3 | @params = inifile | ||
4 | @win = Ncurses::WINDOW.new(0, Ncurses.COLS()/4, 0, 0) | ||
5 | @win.border(*([0]*8)) | ||
6 | @win.keypad(true) | ||
7 | @win.timeout(1000) | ||
8 | @win.refresh() | ||
9 | @entry = 0 | ||
10 | end | ||
11 | |||
12 | def getch() | ||
13 | @win.getch() | ||
14 | end | ||
15 | def clear() | ||
16 | @win.clear() | ||
17 | end | ||
18 | def resize(x,y) | ||
19 | @win.resize(x,y) | ||
20 | end | ||
21 | def move(x,y) | ||
22 | @win.move(x,y) | ||
23 | end | ||
24 | def refresh() | ||
25 | @win.refresh() | ||
26 | end | ||
27 | |||
28 | def print_list(entry=nil) | ||
29 | if(not entry.nil?) | ||
30 | @entry = entry | ||
31 | end | ||
32 | i = 0 | ||
33 | @params.each_section do |section| | ||
34 | if(@entry == i) | ||
35 | @win.attron(Ncurses::A_REVERSE) | ||
36 | end | ||
37 | @win.move(i+1,1) | ||
38 | print_line(@win,@params[section]['Name']) | ||
39 | if(@entry == i) | ||
40 | @win.attroff(Ncurses::A_REVERSE) | ||
41 | end | ||
42 | i = i+1 | ||
43 | end | ||
44 | @win.border(*([0]*8)) | ||
45 | @win.move(0,3) | ||
46 | @win.addstr("Menu") | ||
47 | @win.refresh() | ||
48 | end | ||
49 | end | ||
50 | |||
51 | class Buff_Win | ||
52 | def initialize(winsize,winpos,params) | ||
53 | @params = params | ||
54 | @win = Ncurses::WINDOW.new(0, winsize, 0, winpos) | ||
55 | @panel = Ncurses::Panel::PANEL.new(@win) | ||
56 | if(@params['Type'] == 'oneshot') | ||
57 | @buffer = Buffer.new(0) | ||
58 | else | ||
59 | @buffer = Buffer.new(@params['Buffer'].to_i) | ||
60 | end | ||
61 | @proc = nil | ||
62 | @curr_offset = 0 | ||
63 | @hscroll = 0 | ||
64 | update_date() | ||
65 | |||
66 | spawn_proc() | ||
67 | print_buffer() | ||
68 | end | ||
69 | |||
70 | def move_resize(winsize,winpos) | ||
71 | newwin = Ncurses::WINDOW.new(0, winsize, 0, winpos) | ||
72 | Ncurses::Panel.replace_panel(@panel, newwin) | ||
73 | Ncurses.delwin(@win) | ||
74 | @win = newwin | ||
75 | print_buffer() | ||
76 | end | ||
77 | def update_date() | ||
78 | @last_update = Time.now | ||
79 | @date = @last_update.strftime("%F %R:%S") | ||
80 | end | ||
81 | |||
82 | def win_border() | ||
83 | @win.border(*([0]*8)) | ||
84 | win_header() | ||
85 | end | ||
86 | def win_header() | ||
87 | @win.move(0,3) | ||
88 | @win.addnstr(@params['Name'],@win.getmaxx-@date.length-10) | ||
89 | @win.move(0,@win.getmaxx-@date.length-2) | ||
90 | @win.addstr(@date) | ||
91 | end | ||
92 | def refresh() | ||
93 | @win.refresh() | ||
94 | end | ||
95 | def clear() | ||
96 | @win.clear() | ||
97 | end | ||
98 | |||
99 | def show_win() | ||
100 | Ncurses::Panel.top_panel(@panel) | ||
101 | Ncurses::Panel.update_panels | ||
102 | end | ||
103 | |||
104 | def hscroll(scroll=0) | ||
105 | @hscroll += scroll | ||
106 | if(@hscroll < 0) | ||
107 | @hscroll = 0 | ||
108 | end | ||
109 | if(@hscroll > @buffer.maxlen()-@win.getmaxx+3) | ||
110 | @hscroll = @buffer.maxlen()-@win.getmaxx+3 | ||
111 | end | ||
112 | print_buffer() | ||
113 | refresh() | ||
114 | end | ||
115 | def scroll(scroll=0,goto=nil,fact=nil) | ||
116 | if (not fact.nil?) | ||
117 | scroll = (fact * @win.getmaxy.to_f).to_i | ||
118 | elsif (not goto.nil?) | ||
119 | @curr_offset = (goto * @buffer.size()).to_i | ||
120 | scroll = 0 | ||
121 | end | ||
122 | #@curr_offset -= @win.getmaxy/2 | ||
123 | @curr_offset += scroll | ||
124 | if(@curr_offset < 0) | ||
125 | @curr_offset = 0 | ||
126 | end | ||
127 | if(@curr_offset > @buffer.size()-@win.getmaxy+2) | ||
128 | @curr_offset = @buffer.size()-@win.getmaxy+2 | ||
129 | end | ||
130 | print_buffer() | ||
131 | refresh() | ||
132 | end | ||
133 | |||
134 | def print_buffer() | ||
135 | #clear() | ||
136 | win_border() | ||
137 | j = 1 | ||
138 | @buffer.yield(@win.getmaxy-2,@curr_offset) { |l,type| | ||
139 | @win.move(j,1) | ||
140 | if(type == 1) then @win.attron(Ncurses.COLOR_PAIR(1)) end | ||
141 | print_line(@win,l,hscroll=@hscroll) | ||
142 | if(type == 1) then @win.attroff(Ncurses.COLOR_PAIR(1)) end | ||
143 | j = j+1 | ||
144 | } | ||
145 | if(@buffer.has_before?) | ||
146 | @win.move(2,@win.getmaxx-1) | ||
147 | @win.attron(Ncurses::A_REVERSE) | ||
148 | @win.addstr("↑") | ||
149 | @win.attroff(Ncurses::A_REVERSE) | ||
150 | end | ||
151 | if(@buffer.has_after?) | ||
152 | @win.move(@win.getmaxy-2,@win.getmaxx-1) | ||
153 | @win.attron(Ncurses::A_REVERSE) | ||
154 | @win.addstr("↓") | ||
155 | @win.attroff(Ncurses::A_REVERSE) | ||
156 | end | ||
157 | end | ||
158 | |||
159 | def proc_readlines() | ||
160 | begin | ||
161 | while true | ||
162 | @buffer.push(@proc.readline_nonblock) | ||
163 | update_date() | ||
164 | end | ||
165 | rescue IO::WaitReadable | ||
166 | end | ||
167 | end | ||
168 | |||
169 | def update(force=false) | ||
170 | if(@params['Type'] == 'continuous') | ||
171 | proc_readlines() | ||
172 | end | ||
173 | if(@params['Type'] == 'oneshot') | ||
174 | if(force or (Time.now - @last_update > @params['Periodic'].to_i)) | ||
175 | @buffer.clear() | ||
176 | spawn_proc() | ||
177 | clear() | ||
178 | end | ||
179 | end | ||
180 | print_buffer() | ||
181 | end | ||
182 | |||
183 | def spawn_proc() | ||
184 | if(@params['Type'] == 'oneshot') | ||
185 | update_date() | ||
186 | Open3.popen3(@params["Command"]) { |i,o,e,t| | ||
187 | while ((not o.eof?) or (not e.eof?)) | ||
188 | rs = IO.select([o,e],nil)[0] | ||
189 | r = (rs[0].eof?)? rs[1] : rs[0] | ||
190 | |||
191 | if r.fileno == o.fileno | ||
192 | @buffer.push(r.readline) | ||
193 | elsif r.fileno == e.fileno | ||
194 | @buffer.push(r.readline,type=1) | ||
195 | end | ||
196 | end | ||
197 | } | ||
198 | elsif(@params['Type'] == 'continuous') | ||
199 | @proc = IO.popen(@params["Command"]) | ||
200 | proc_readlines() | ||
201 | end | ||
202 | end | ||
203 | end | ||
204 | |||
205 | |||