implement parts layout
- flush left
- flush right
- centering
- justification
@@ -191,6 +191,14 @@ | ||
191 | 191 | }; |
192 | 192 | end |
193 | 193 | end |
194 | + def layout | |
195 | + case @yaml["layout"] | |
196 | + when "flush left", "flush right", "centering", "justification" | |
197 | + return @yaml["layout"]; | |
198 | + else | |
199 | + return "flush left" | |
200 | + end | |
201 | + end | |
194 | 202 | |
195 | 203 | def height |
196 | 204 | h = 0; |
@@ -201,10 +209,10 @@ | ||
201 | 209 | } |
202 | 210 | return h; |
203 | 211 | end |
204 | - def width | |
212 | + def width(margin) | |
205 | 213 | w = 0; |
206 | 214 | @items.each { |item| |
207 | - w += item.width; | |
215 | + w += item.width + margin; | |
208 | 216 | } |
209 | 217 | return w; |
210 | 218 | end |
@@ -270,7 +278,7 @@ | ||
270 | 278 | def content_width |
271 | 279 | w = @margin_left + @margin_right; |
272 | 280 | @lines.each { |line| |
273 | - w2 = @margin_left + line.width + @margin_right; | |
281 | + w2 = @margin_left + line.width(@margin_left + @margin_right) + @margin_right; | |
274 | 282 | if w2 > w |
275 | 283 | w = w2 |
276 | 284 | end |
@@ -307,18 +315,38 @@ | ||
307 | 315 | erb.result(binding) |
308 | 316 | end |
309 | 317 | |
318 | + def calc_line_layout_left(content_width, line) | |
319 | + case line.layout | |
320 | + when "flush left", "justification" | |
321 | + return @panel_padding_left + @margin_left; | |
322 | + when "flush right" | |
323 | + return @panel_padding_left + content_width - line.width; | |
324 | + when "centering" | |
325 | + return @panel_padding_left + (content_width - line.width) / 2; | |
326 | + end | |
327 | + end | |
328 | + def calc_line_layout_item_margin(content_width, line) | |
329 | + case line.layout | |
330 | + when "justification" | |
331 | + return @margin_right + @margin_left + (content_width - line.width(@margin_left + @margin_right)) / (line.items.length - 1); | |
332 | + else | |
333 | + return @margin_right + @margin_left; | |
334 | + end | |
335 | + end | |
336 | + | |
310 | 337 | def generate_source_function_pnl_item_value_each() |
338 | + cw = self.content_width; | |
311 | 339 | n = 0; |
312 | - left = @panel_padding_left + @margin_left; | |
313 | 340 | top = @panel_padding_top + @margin_top; |
314 | 341 | @lines.each { |l| |
342 | + left = self.calc_line_layout_left(cw, l); | |
343 | + margin = self.calc_line_layout_item_margin(cw, l); | |
315 | 344 | l.items.each { |i| |
316 | 345 | s = i.generate_pnl_item_value(n, left, top); |
317 | 346 | yield(s); |
318 | 347 | n += 1; |
319 | - left += i.width + @margin_right + @margin_left; | |
348 | + left += i.width + margin; | |
320 | 349 | } |
321 | - left = @panel_padding_left + @margin_left; | |
322 | 350 | top += l.height + @margin_bottom + @margin_top; |
323 | 351 | } |
324 | 352 | end |