summaryrefslogtreecommitdiff
path: root/src/data_forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/data_forms.py')
-rw-r--r--src/data_forms.py69
1 files changed, 46 insertions, 23 deletions
diff --git a/src/data_forms.py b/src/data_forms.py
index 9510bdf8..99d08caa 100644
--- a/src/data_forms.py
+++ b/src/data_forms.py
@@ -16,6 +16,7 @@ import curses
from windows import g_lock
import windows
from tabs import Tab
+from theming import to_curses_attr, get_theme
class DataFormsTab(Tab):
"""
@@ -85,7 +86,7 @@ class FieldInput(object):
"""
def __init__(self, field):
self._field = field
- self.color = 14
+ self.color = (14, -1)
def set_color(self, color):
self.color = color
@@ -113,6 +114,27 @@ class FieldInput(object):
"""
return ''
+class ColoredLabel(windows.Win):
+ def __init__(self, text):
+ self.text = text
+ self.color = get_theme().COLOR_NORMAL_TEXT
+ windows.Win.__init__(self)
+
+ def resize(self, height, width, y, x):
+ self._resize(height, width, y, x)
+
+ def set_color(self, color):
+ self.color = color
+ self.refresh()
+
+ def refresh(self):
+ with g_lock:
+ self._win.attron(to_curses_attr(self.color))
+ self.addstr(0, 0, self.text)
+ self._win.attroff(to_curses_attr(self.color))
+ self._refresh()
+
+
class DummyInput(FieldInput, windows.Win):
"""
Used for fields that do not require any input ('fixed')
@@ -165,7 +187,7 @@ class BooleanWin(FieldInput, windows.Win):
def refresh(self):
with g_lock:
- self._win.attron(curses.color_pair(self.color))
+ self._win.attron(to_curses_attr(self.color))
self.addnstr(0, 0, ' '*(8), self.width)
self.addstr(0, 2, "%s"%self.value)
self.addstr(0, 8, '→')
@@ -174,7 +196,7 @@ class BooleanWin(FieldInput, windows.Win):
self.addstr(0, 8, '')
else:
self.addstr(0, 0, '')
- self._win.attroff(curses.color_pair(self.color))
+ self._win.attroff(to_curses_attr(self.color))
self._refresh()
def reply(self):
@@ -229,7 +251,7 @@ class TextMultiWin(FieldInput, windows.Win):
def refresh(self):
if not self.edition_input:
with g_lock:
- self._win.attron(curses.color_pair(self.color))
+ self._win.attron(to_curses_attr(self.color))
self.addnstr(0, 0, ' '*self.width, self.width)
option = self.options[self.val_pos]
self.addstr(0, self.width//2-len(option)//2, option)
@@ -237,7 +259,7 @@ class TextMultiWin(FieldInput, windows.Win):
self.addstr(0, 0, '←')
if self.val_pos < len(self.options)-1:
self.addstr(0, self.width-1, '→')
- self._win.attroff(curses.color_pair(self.color))
+ self._win.attroff(to_curses_attr(self.color))
self._refresh()
else:
self.edition_input.refresh()
@@ -281,7 +303,7 @@ class ListMultiWin(FieldInput, windows.Win):
def refresh(self):
with g_lock:
- self._win.attron(curses.color_pair(self.color))
+ self._win.attron(to_curses_attr(self.color))
self.addnstr(0, 0, ' '*self.width, self.width)
if self.val_pos > 0:
self.addstr(0, 0, '←')
@@ -290,7 +312,7 @@ class ListMultiWin(FieldInput, windows.Win):
option = self.options[self.val_pos]
self.addstr(0, self.width//2-len(option)//2, option[0]['label'])
self.addstr(0, 2, '✔' if option[1] else '☐')
- self._win.attroff(curses.color_pair(self.color))
+ self._win.attroff(to_curses_attr(self.color))
self._refresh()
def reply(self):
@@ -327,7 +349,7 @@ class ListSingleWin(FieldInput, windows.Win):
def refresh(self):
with g_lock:
- self._win.attron(curses.color_pair(self.color))
+ self._win.attron(to_curses_attr(self.color))
self.addnstr(0, 0, ' '*self.width, self.width)
if self.val_pos > 0:
self.addstr(0, 0, '←')
@@ -335,7 +357,7 @@ class ListSingleWin(FieldInput, windows.Win):
self.addstr(0, self.width-1, '→')
option = self.options[self.val_pos]['label']
self.addstr(0, self.width//2-len(option)//2, option)
- self._win.attroff(curses.color_pair(self.color))
+ self._win.attroff(to_curses_attr(self.color))
self._refresh()
def reply(self):
@@ -353,7 +375,7 @@ class TextSingleWin(FieldInput, windows.Input):
self.text = field.getValue() if isinstance(field.getValue(), str)\
else ""
self.pos = len(self.text)
- self.color = 14
+ self.color = (14, -1)
def reply(self):
self._field['label'] = ''
@@ -370,15 +392,15 @@ class TextPrivateWin(TextSingleWin):
with g_lock:
self._win.erase()
if self.color:
- self._win.attron(curses.color_pair(self.color))
+ self._win.attron(to_curses_attr(self.color))
self.addstr('*'*len(self.text[self.line_pos:self.line_pos+self.width-1]))
if self.color:
(y, x) = self._win.getyx()
size = self.width-x
- self.addnstr(' '*size, size, curses.color_pair(self.color))
+ self.addnstr(' '*size, size, to_curses_attr(self.color))
self.addstr(0, self.pos, '')
if self.color:
- self._win.attroff(curses.color_pair(self.color))
+ self._win.attroff(to_curses_attr(self.color))
self._refresh()
def get_help_message(self):
@@ -447,8 +469,8 @@ class FormWin(object):
return
if self.current_input == len(self.inputs) - 1 or self.current_input >= self.height-1:
return
- self.inputs[self.current_input]['label'].set_color(14)
- self.inputs[self.current_input]['input'].set_color(14)
+ self.inputs[self.current_input]['input'].set_color(get_theme().COLOR_NORMAL_TEXT)
+ self.inputs[self.current_input]['label'].set_color(get_theme().COLOR_NORMAL_TEXT)
self.current_input += 1
jump = 0
while self.current_input+jump != len(self.inputs) - 1 and self.inputs[self.current_input+jump]['input'].is_dummy():
@@ -456,16 +478,16 @@ class FormWin(object):
if self.inputs[self.current_input+jump]['input'].is_dummy():
return
self.current_input += jump
- self.inputs[self.current_input]['label'].set_color(13)
- self.inputs[self.current_input]['input'].set_color(13)
+ self.inputs[self.current_input]['input'].set_color(get_theme().COLOR_SELECTED_ROW)
+ self.inputs[self.current_input]['label'].set_color(get_theme().COLOR_SELECTED_ROW)
def go_to_previous_input(self):
if not self.inputs:
return
if self.current_input == 0:
return
- self.inputs[self.current_input]['label'].set_color(14)
- self.inputs[self.current_input]['input'].set_color(14)
+ self.inputs[self.current_input]['input'].set_color(get_theme().COLOR_NORMAL_TEXT)
+ self.inputs[self.current_input]['label'].set_color(get_theme().COLOR_NORMAL_TEXT)
self.current_input -= 1
jump = 0
while self.current_input-jump > 0 and self.inputs[self.current_input+jump]['input'].is_dummy():
@@ -473,8 +495,8 @@ class FormWin(object):
if self.inputs[self.current_input+jump]['input'].is_dummy():
return
self.current_input -= jump
- self.inputs[self.current_input]['label'].set_color(13)
- self.inputs[self.current_input]['input'].set_color(13)
+ self.inputs[self.current_input]['input'].set_color(get_theme().COLOR_SELECTED_ROW)
+ self.inputs[self.current_input]['label'].set_color(get_theme().COLOR_SELECTED_ROW)
def on_input(self, key):
if not self.inputs:
@@ -502,10 +524,11 @@ class FormWin(object):
break
inp['label'].refresh()
inp['input'].refresh()
+ inp['label'].refresh()
if self.current_input < self.height-1:
- self.inputs[self.current_input]['input'].set_color(13)
+ self.inputs[self.current_input]['input'].set_color(get_theme().COLOR_SELECTED_ROW)
self.inputs[self.current_input]['input'].refresh()
- self.inputs[self.current_input]['label'].set_color(13)
+ self.inputs[self.current_input]['label'].set_color(get_theme().COLOR_SELECTED_ROW)
self.inputs[self.current_input]['label'].refresh()
def refresh_current_input(self):