Anker-Konfigurationsseite, erste Versuche mit Menü
This commit is contained in:
parent
664d6c7d49
commit
986d222a98
|
@ -0,0 +1,48 @@
|
|||
"""
|
||||
Menüsystem für Konfiguration(en)
|
||||
|
||||
"""
|
||||
|
||||
class MenuItem():
|
||||
|
||||
def __init__(self, itmname):
|
||||
self.name = itmname
|
||||
self.label = None
|
||||
self.value = None
|
||||
self.steps = (1,)
|
||||
|
||||
def setValue(self, val):
|
||||
self.value = val
|
||||
|
||||
class Menu():
|
||||
|
||||
def __init__(self):
|
||||
title = None
|
||||
x = 0
|
||||
y = 0
|
||||
w = 100
|
||||
h = 20
|
||||
items = []
|
||||
itm_active = -1 # nothing activated
|
||||
self._index = -1
|
||||
|
||||
def addItem(self, label):
|
||||
itm = MenuItem(label)
|
||||
items.append(itm)
|
||||
|
||||
class MenuIter():
|
||||
|
||||
def __init__(self, menu):
|
||||
self._items = menu.items
|
||||
self._class_size = len(self._items)
|
||||
self._index = 0
|
||||
|
||||
def __iter__(self):
|
||||
return self
|
||||
|
||||
def __next__(self):
|
||||
if self._index < self._class_size:
|
||||
itm = items[self._index]
|
||||
self._index += 1
|
||||
return itm
|
||||
raise StopIteration
|
Binary file not shown.
After Width: | Height: | Size: 135 B |
Binary file not shown.
After Width: | Height: | Size: 138 B |
|
@ -409,7 +409,7 @@ class Frontend(Gtk.Window):
|
|||
self.get_window().set_cursor(Gdk.Cursor(Gdk.CursorType.BLANK_CURSOR))
|
||||
|
||||
def run(self):
|
||||
GLib.timeout_add_seconds(2, self.on_timer)
|
||||
GLib.timeout_add_seconds(1, self.on_timer)
|
||||
self.show_all()
|
||||
Gtk.main()
|
||||
|
||||
|
|
134
pages/anchor.py
134
pages/anchor.py
|
@ -17,7 +17,7 @@ Daten
|
|||
- Zeitpunkt des Ankeraus
|
||||
|
||||
Darstellung:
|
||||
- Modi:
|
||||
- Modi: Normal / Konfiguration
|
||||
- Anker oben / unten
|
||||
- Nord ist oben
|
||||
|
||||
|
@ -31,6 +31,7 @@ import os
|
|||
import cairo
|
||||
import math
|
||||
import time
|
||||
from cfgmenu import Menu
|
||||
from .page import Page
|
||||
|
||||
class Anchor(Page):
|
||||
|
@ -67,43 +68,86 @@ class Anchor(Page):
|
|||
self.alarm = False # Alarm ist ausgelöst und aktiv
|
||||
self.wind_angle = -1
|
||||
|
||||
# Menüsteuerung für Konfiguration
|
||||
self._mnu = {
|
||||
# Lfd. Name, curr unit steps type: numeric, on/off
|
||||
# TODO Das sollte eine Klasse werden!
|
||||
'chain': [1, "Chain out", 0, "m", (1, 5, 10), (0, 200)],
|
||||
'chainmax': [2, "Chain max", 0, "m", (1, 5, 10), (0, 200)],
|
||||
'zoom': [3, "Zoom", 50, "", (1,), (1, 8)],
|
||||
'range': [4, "Alarm range", 35, "m", (1, 5, 10), (0, 200)]
|
||||
}
|
||||
self._mnu_title = "Options"
|
||||
self._mnu_x = 20
|
||||
self._mnu_y = 80
|
||||
self._mnu_w = 120
|
||||
self._mnu_h = 20
|
||||
self._mnu_sel = 1
|
||||
self.mnu_step = 1
|
||||
|
||||
def handle_key(self, buttonid):
|
||||
if buttonid == 1:
|
||||
if self.mode == 'N':
|
||||
self.mode = 'C'
|
||||
self.buttonlabel[2] = '#UP'
|
||||
self.buttonlabel[3] = '#DOWN'
|
||||
self.buttonlabel[4] = '[ - ]'
|
||||
self.buttonlabel[5] = '[ + ]'
|
||||
self.buttonlabel[6] = 'STEP'
|
||||
else:
|
||||
self.mode = 'N'
|
||||
self.buttonlabel[2] = 'RISE' if self.anchor_set else 'DROP'
|
||||
self.buttonlabel[3] = '#PREV'
|
||||
self.buttonlabel[4] = '#NEXT'
|
||||
self.buttonlabel[5] = 'ALARM' if not self.alarm_enabled else 'OFF'
|
||||
return True
|
||||
if self.mode == 'N':
|
||||
# Normal
|
||||
if buttonid == 2:
|
||||
if not self.anchor_set:
|
||||
self.anchor_lat = self._bd.lat
|
||||
self.anchor_lon = self._bd.lon
|
||||
self.anchor_set = True
|
||||
self.anchor_ts = time.time()
|
||||
self.buttonlabel[2] = 'RISE'
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
else:
|
||||
self.anchor_set = False
|
||||
self.alarm = False
|
||||
self.alarm_enabled = False
|
||||
self.anchor_ts = None
|
||||
self.buttonlabel[2] = 'DROP'
|
||||
self.buttonlabel[5] = ''
|
||||
return True
|
||||
elif buttonid == 5:
|
||||
# Bei aktivem Alarm kann mit dieser Taste der Alarm zurückgesetzt
|
||||
# werden. Die Tastenbeschriftung wechselt zwischen ALARM und OFF.
|
||||
if self.alarm:
|
||||
self.alarm = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
if self.alarm_enabled:
|
||||
self.alarm_enabled = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
else:
|
||||
self.alarm_enabled = True
|
||||
self.buttonlabel[5] = 'OFF'
|
||||
return True
|
||||
else:
|
||||
# Konfiguration
|
||||
if buttonid == 2:
|
||||
if self._mnu_sel == 1:
|
||||
self._mnu_sel = len(self._mnu)
|
||||
else:
|
||||
self._mnu_sel -= 1
|
||||
elif buttonid == 3:
|
||||
if self._mnu_sel == len(self._mnu):
|
||||
self._mnu_sel = 1
|
||||
else:
|
||||
self._mnu_sel += 1
|
||||
return True
|
||||
if buttonid == 2:
|
||||
if not self.anchor_set:
|
||||
self.anchor_lat = self._bd.lat
|
||||
self.anchor_lon = self._bd.lon
|
||||
self.anchor_set = True
|
||||
self.anchor_ts = time.time()
|
||||
self.buttonlabel[2] = 'RISE'
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
else:
|
||||
self.anchor_set = False
|
||||
self.alarm = False
|
||||
self.alarm_enabled = False
|
||||
self.anchor_ts = None
|
||||
self.buttonlabel[2] = 'DROP'
|
||||
self.buttonlabel[5] = ''
|
||||
if buttonid == 5:
|
||||
# Bei aktivem Alarm kann mit dieser Taste der Alarm zurückgesetzt
|
||||
# werden. Die Tastenbeschriftung wechselt zwischen ALARM und OFF.
|
||||
if self.alarm:
|
||||
self.alarm = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
if self.alarm_enabled:
|
||||
self.alarm_enabled = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
else:
|
||||
self.alarm_enabled = True
|
||||
self.buttonlabel[5] = 'OFF'
|
||||
return False
|
||||
|
||||
def draw(self, ctx):
|
||||
def draw_normal(self, ctx):
|
||||
|
||||
"""
|
||||
value1 = LAT
|
||||
|
@ -208,3 +252,35 @@ class Anchor(Page):
|
|||
for point in wind[1:]:
|
||||
ctx.line_to(*point)
|
||||
ctx.fill()
|
||||
|
||||
def draw_config(self, ctx):
|
||||
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
|
||||
ctx.set_font_size(20)
|
||||
|
||||
ctx.move_to(2, 50)
|
||||
ctx.show_text("Anchor configuration")
|
||||
|
||||
# Menüwerte initialisieren
|
||||
self._mnu["chain"][2] = self.chain
|
||||
self._mnu["chainmax"][2] = self.chain_length
|
||||
|
||||
# Menü zeichnen
|
||||
ctx.save()
|
||||
ctx.set_font_size(16)
|
||||
#ctx.rectangle(100, 100, 50, 50)
|
||||
#ctx.clip()
|
||||
for m in self._mnu.items():
|
||||
#ctx.move_to(self._mnu_x, self._mnu_y + 24 + m[1][0] * 16)
|
||||
#ctx.show_text(m[1][1])
|
||||
inverted = (m[1][0] == self._mnu_sel)
|
||||
self.draw_text_boxed(ctx, self._mnu_x, self._mnu_y + self._mnu_h * (m[1][0] - 1), self._mnu_w, self._mnu_h, m[1][1], inverted)
|
||||
ctx.move_to(self._mnu_x + self._mnu_w + 20 , self._mnu_y + self._mnu_h * (m[1][0] - 1))
|
||||
ctx.show_text(str(m[1][2]) + m[1][3])
|
||||
ctx.stroke()
|
||||
ctx.restore()
|
||||
|
||||
def draw(self, ctx):
|
||||
if self.mode == 'N':
|
||||
self.draw_normal(ctx)
|
||||
else:
|
||||
self.draw_config(ctx)
|
||||
|
|
|
@ -77,6 +77,8 @@ class Page():
|
|||
self.icon = {}
|
||||
self.icon['PREV'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "arrow_l1.png"))
|
||||
self.icon['NEXT'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "arrow_r1.png"))
|
||||
self.icon['UP'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "arrow_up.png"))
|
||||
self.icon['DOWN'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "arrow_dn.png"))
|
||||
self.icon['ILUM'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "lighton.png"))
|
||||
self.sym_lock = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "lock.png"))
|
||||
self.sym_swipe = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "swipe3.png"))
|
||||
|
@ -276,3 +278,22 @@ class Page():
|
|||
ctx.move_to(x - w, y)
|
||||
ctx.show_text(content)
|
||||
ctx.stroke()
|
||||
|
||||
def draw_text_boxed(self, ctx, x, y, w, h, content, inverted=False):
|
||||
ctx.set_line_width(1)
|
||||
if inverted:
|
||||
ctx.set_source_rgb(*self.fgcolor)
|
||||
ctx.rectangle(x, y + 0.5, w, h)
|
||||
ctx.fill()
|
||||
else:
|
||||
ctx.set_source_rgb(*self.bgcolor)
|
||||
ctx.rectangle(x, y + 0.5, w, h)
|
||||
ctx.stroke()
|
||||
|
||||
if inverted:
|
||||
ctx.set_source_rgb(*self.bgcolor)
|
||||
else:
|
||||
ctx.set_source_rgb(*self.fgcolor)
|
||||
ctx.move_to(x + 4, y + h - 5 + 0.5)
|
||||
ctx.show_text(content)
|
||||
ctx.stroke()
|
||||
|
|
Loading…
Reference in New Issue