124 val start = text_area.getScreenLineStartOffset(i) |
124 val start = text_area.getScreenLineStartOffset(i) |
125 val stop = text_area.getScreenLineEndOffset(i) |
125 val stop = text_area.getScreenLineEndOffset(i) |
126 if start >= 0 && stop >= 0 |
126 if start >= 0 && stop >= 0 |
127 } |
127 } |
128 yield Text.Range(start, stop)) |
128 yield Text.Range(start, stop)) |
|
129 } |
|
130 |
|
131 private def update_perspective = new TextAreaExtension |
|
132 { |
|
133 override def paintScreenLineRange(gfx: Graphics2D, |
|
134 first_line: Int, last_line: Int, physical_lines: Array[Int], |
|
135 start: Array[Int], end: Array[Int], y: Int, line_height: Int) |
|
136 { |
|
137 model.update_perspective() |
|
138 } |
129 } |
139 } |
130 |
140 |
131 |
141 |
132 /* snapshot */ |
142 /* snapshot */ |
133 |
143 |
353 } |
363 } |
354 override def caretUpdate(e: CaretEvent) { delay() } |
364 override def caretUpdate(e: CaretEvent) { delay() } |
355 } |
365 } |
356 |
366 |
357 |
367 |
358 /* scrolling */ |
|
359 |
|
360 private val scroll_listener = new ScrollListener |
|
361 { |
|
362 def scrolledVertically(arg: TextArea) { model.update_perspective() } |
|
363 def scrolledHorizontally(arg: TextArea) { } |
|
364 } |
|
365 |
|
366 |
|
367 /* overview of command status left of scrollbar */ |
368 /* overview of command status left of scrollbar */ |
368 |
369 |
369 private val overview = new JPanel(new BorderLayout) |
370 private val overview = new JPanel(new BorderLayout) |
370 { |
371 { |
371 private val WIDTH = 10 |
372 private val WIDTH = 10 |
475 /* activation */ |
476 /* activation */ |
476 |
477 |
477 private def activate() |
478 private def activate() |
478 { |
479 { |
479 val painter = text_area.getPainter |
480 val painter = text_area.getPainter |
|
481 painter.addExtension(TextAreaPainter.LOWEST_LAYER, update_perspective) |
480 painter.addExtension(TextAreaPainter.LINE_BACKGROUND_LAYER + 1, tooltip_painter) |
482 painter.addExtension(TextAreaPainter.LINE_BACKGROUND_LAYER + 1, tooltip_painter) |
481 text_area_painter.activate() |
483 text_area_painter.activate() |
482 text_area.getGutter.addExtension(gutter_painter) |
484 text_area.getGutter.addExtension(gutter_painter) |
483 text_area.addFocusListener(focus_listener) |
485 text_area.addFocusListener(focus_listener) |
484 text_area.getView.addWindowListener(window_listener) |
486 text_area.getView.addWindowListener(window_listener) |
485 painter.addMouseMotionListener(mouse_motion_listener) |
487 painter.addMouseMotionListener(mouse_motion_listener) |
486 text_area.addCaretListener(caret_listener) |
488 text_area.addCaretListener(caret_listener) |
487 text_area.addScrollListener(scroll_listener) |
|
488 text_area.addLeftOfScrollBar(overview) |
489 text_area.addLeftOfScrollBar(overview) |
489 session.commands_changed += main_actor |
490 session.commands_changed += main_actor |
490 session.global_settings += main_actor |
491 session.global_settings += main_actor |
491 } |
492 } |
492 |
493 |
497 session.global_settings -= main_actor |
498 session.global_settings -= main_actor |
498 text_area.removeFocusListener(focus_listener) |
499 text_area.removeFocusListener(focus_listener) |
499 text_area.getView.removeWindowListener(window_listener) |
500 text_area.getView.removeWindowListener(window_listener) |
500 painter.removeMouseMotionListener(mouse_motion_listener) |
501 painter.removeMouseMotionListener(mouse_motion_listener) |
501 text_area.removeCaretListener(caret_listener) |
502 text_area.removeCaretListener(caret_listener) |
502 text_area.removeScrollListener(scroll_listener) |
|
503 text_area.removeLeftOfScrollBar(overview) |
503 text_area.removeLeftOfScrollBar(overview) |
504 text_area.getGutter.removeExtension(gutter_painter) |
504 text_area.getGutter.removeExtension(gutter_painter) |
505 text_area_painter.deactivate() |
505 text_area_painter.deactivate() |
506 painter.removeExtension(tooltip_painter) |
506 painter.removeExtension(tooltip_painter) |
|
507 painter.removeExtension(update_perspective) |
507 exit_popup() |
508 exit_popup() |
508 } |
509 } |
509 } |
510 } |