--- a/tuikit/widgets/scrollbar.py Sat Feb 21 12:01:57 2015 +0100
+++ b/tuikit/widgets/scrollbar.py Sun Feb 22 09:53:13 2015 +0100
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
from tuikit.core.widget import Widget
from tuikit.core.signal import Signal
@@ -8,11 +6,11 @@
"""Abstract base class for scrollbars."""
- def __init__(self):
+ def __init__(self, scroll_max):
Widget.__init__(self)
# Scrolling range is 0 .. _scroll_max
- self._scroll_max = self._get_length() - 3
+ self._scroll_max = scroll_max
# Current position of scrollbar in scrolling range.
self._scroll_pos = 0
# Current position of thumb on scrollbar - used for draw.
@@ -66,12 +64,14 @@
if self._scroll_pos > 0:
self.scroll_pos = self._scroll_pos - 1
self._move = 'up'
+ self.redraw()
def move_down(self):
"""Move scrolling position down/right."""
if self._scroll_pos < self._scroll_max:
self.scroll_pos = self._scroll_pos + 1
self._move = 'down'
+ self.redraw()
def drag(self, mouse_pos):
"""Scroll using mouse drag on thumb.
@@ -109,7 +109,7 @@
self.move_up()
if self._move == 'down':
self.move_down()
- self.add_timeout(self.scroll_interval, self._continuous_scroll)
+ self.timer.add_timeout(self.scroll_interval, self._continuous_scroll)
class VScrollbar(Scrollbar):
@@ -137,7 +137,7 @@
self.move_up()
else:
self.move_down()
- self.add_timeout(self.scroll_delay, self._continuous_scroll)
+ self.timer.add_timeout(self.scroll_delay, self._continuous_scroll)
return
# thumb bar
if ev.wy == 1 + self._thumb_pos:
@@ -154,7 +154,7 @@
self._dragging = False
return
if self._move:
- self.remove_timeout(self._continuous_scroll)
+ self.timer.remove_timeout(self._continuous_scroll)
self._move = None
return
@@ -163,50 +163,48 @@
class HScrollbar(Scrollbar):
- def __init__(self):
- Scrollbar.__init__(self)
- self.sizereq.update(20, 1)
+ def __init__(self, length=20):
+ Scrollbar.__init__(self, length - 3)
+ self.sizereq.update(length, 1)
- def on_draw(self, ev):
- ug = ev.driver.unigraph
- ev.driver.pushcolor('normal')
- ev.driver.putch(ev.x, ev.y, ug.get_char('sb_left'))
- for i in range(1, self.width - 1):
- ev.driver.putch(ev.x + i, ev.y, ug.get_char('sb_htrack'))
- ev.driver.putch(ev.x + 1 + self._thumb_pos, ev.y, ug.get_char('sb_thumb'))
- ev.driver.putch(ev.x + self.width - 1, ev.y, ug.get_char('sb_right'))
- ev.driver.popcolor()
+ def draw(self, buffer):
+ Widget.draw(self, buffer)
+ with buffer.attr(self.theme.clr_normal):
+ buffer.putch(self.theme.sb_left)
+ for i in range(1, self.width - 1):
+ buffer.putch(self.theme.sb_htrack, i)
+ buffer.putch(self.theme.sb_thumb, 1 + self._thumb_pos)
+ buffer.putch(self.theme.sb_right, self.width - 1)
- def on_mousedown(self, ev):
+ def mousedown_event(self, ev):
self._dragging = False
self._move = None
# arrow buttons
- if ev.wx == 0 or ev.wx == self.width - 1:
- if ev.wx == 0:
+ if ev.pos.x == 0 or ev.pos.x == self.width - 1:
+ if ev.pos.x == 0:
self.move_up()
else:
self.move_down()
- self.add_timeout(self.scroll_delay, self._continuous_scroll)
+ self.timer.add_timeout(self.scroll_delay, self._continuous_scroll)
return
# thumb bar
- if ev.wx == 1 + self._thumb_pos:
+ if ev.pos.x == 1 + self._thumb_pos:
self._dragging = True
return
- def on_mousemove(self, ev):
+ def mousemove_event(self, ev):
if self._dragging:
- self.drag(ev.wx)
+ self.drag(ev.pos.x)
- def on_mouseup(self, ev):
+ def mouseup_event(self, ev):
if self._dragging:
- self.drag(ev.wx)
+ self.drag(ev.pos.x)
self._dragging = False
return
if self._move:
- self.remove_timeout(self._continuous_scroll)
+ self.timer.remove_timeout(self._continuous_scroll)
self._move = None
return
def _get_length(self):
return self.width
-