diff --git a/led.py b/led.py index a469ef7..73cc92f 100644 --- a/led.py +++ b/led.py @@ -32,23 +32,30 @@ colordef = { class LED(): - def __init__(self, parent): + def __init__(self, parent, fullscreen): # parent muß ein Gtk.Fixed-Objekt sein self._colorname = "" self._color = (0, 0, 0) # Farbe schwarz ist aus self._brightness = 0.0 self._color_off = (0.3725, 0.4275, 0.6078) # RGB(95, 109, 155) - self._pos_x = 30 - self._pos_y = 14 - self._radius = 5 self._flashcounter = 0 self._flashcolor = (0, 0, 0) self._enabled = False # Box oberhalb des Displays self._da = Gtk.DrawingArea() - parent.put(self._da, 64, 56) - self._da.set_size_request(400, 32) + if fullscreen: + parent.put(self._da, 640, 0) + self._da.set_size_request(160, 64) + self._pos_x = 18 + self._pos_y = 20 + self._radius = 8 + else: + parent.put(self._da, 64, 56) + self._da.set_size_request(400, 32) + self._pos_x = 30 + self._pos_y = 14 + self._radius = 5 self._da.connect("draw", self.on_draw) def on_draw(self, widget, ctx): diff --git a/obp60v.py b/obp60v.py index 513b415..19b5afa 100755 --- a/obp60v.py +++ b/obp60v.py @@ -371,18 +371,25 @@ class Frontend(Gtk.Window): # Geräterahmen mit Buttons self.da_device = Gtk.DrawingArea() self.fixed.put(self.da_device, 0, 0) - self.da_device.set_size_request(530, 555) # für fixed benötigt + if self._fullscreen: + self.da_device.set_size_request(800, 480) + else: + self.da_device.set_size_request(530, 555) # für fixed benötigt self.da_device.add_events(Gdk.EventMask.BUTTON_PRESS_MASK|Gdk.EventMask.BUTTON_RELEASE_MASK) self.da_device.connect("draw", self.da_device_draw) self.da_device.connect('button-press-event', self.da_button_press) self.da_device.connect('button-release-event', self.da_button_release) # Displayfläche self.da = Gtk.DrawingArea() - self.fixed.put(self.da, 64, 95) - self.da.set_size_request(400, 300) # für fixed benötigt + if self._fullscreen: + self.fixed.put(self.da, 0, 0) + self.da.set_size_request(640, 480) # Faktor 1,6 zu 400x300 + else: + self.fixed.put(self.da, 64, 95) + self.da.set_size_request(400, 300) # für fixed benötigt self.da.connect("draw", self.da_draw) # Flash LED - self.flashled = LED(self.fixed) # Soft Flash-LED + self.flashled = LED(self.fixed, self._fullscreen) # Soft Flash-LED self.button_clicked = 0 # Geklickter Button vor Loslassen self.keylock = False @@ -410,7 +417,10 @@ class Frontend(Gtk.Window): # Tastaturstatus an Seite durchreichen self.curpage.keylock = self.keylock # Neuzeichnen - self.da.queue_draw() + if self._fullscreen: + self.da_device.queue_draw() + else: + self.da.queue_draw() return True def on_timer_slow(self): @@ -433,6 +443,9 @@ class Frontend(Gtk.Window): viewport.width = 530 viewport.height = 555 self._svg.render_document(ctx, viewport) + if self._fullscreen: + # Seitliche Buttons zeichnen + self.curpage.draw_sidebuttons(ctx) def da_draw(self, widget, ctx): ctx.set_source_rgb(1.0, 0, 0) @@ -663,6 +676,17 @@ if __name__ == "__main__": setproctitle("obp60v") + owndevice = Device(100) + # Hardcoding device, not intended to change + owndevice.manufacturercode = cfg['manufcode'] + owndevice.industrygroup = cfg['industrygroup'] + owndevice.deviceclass = cfg['devclass'] + owndevice.devicefunction = cfg['devfunc'] + + boatdata = BoatData() + boatdata.addTank(0) + boatdata.addEngine(0) + # Basiskonfiguration aus Datei lesen config = configparser.ConfigParser() config_path = os.path.join(sys.path[0], cfg['cfgfile']) @@ -755,16 +779,6 @@ if __name__ == "__main__": # Globale Daten, u.a. auch Shutdown-Indikator appdata = AppData(log, cfg) - owndevice = Device(100) - # Hardcoding device, not intended to change - owndevice.manufacturercode = cfg['manufcode'] - owndevice.industrygroup = cfg['industrygroup'] - owndevice.deviceclass = cfg['devclass'] - owndevice.devicefunction = cfg['devfunc'] - - boatdata = BoatData() - boatdata.addTank(0) - boatdata.addEngine(0) # Ggf. Simulationsdaten einschalten if cfg['simulation']: diff --git a/pages/clock.py b/pages/clock.py index 613cf2e..063a627 100644 --- a/pages/clock.py +++ b/pages/clock.py @@ -21,7 +21,7 @@ import astral class Clock(Page): def __init__(self, pageno, cfg, appdata, boatdata): - super().__init__(pageno, cfg, boatdata) + super().__init__(pageno, cfg, appdata, boatdata) self.buttonlabel[1] = 'MODE' self.buttonlabel[2] = 'TZ' self.mode = ('A', 'D', 'T') # (A)nalog (D)igital (T)imer diff --git a/pages/page.py b/pages/page.py index e063736..9d91a21 100644 --- a/pages/page.py +++ b/pages/page.py @@ -162,11 +162,40 @@ class Page(): ctx.show_text(datetime.today().strftime('%H:%M %Y-%m-%d LOT')) ctx.stroke() + def draw_sidebuttons(self, ctx): + """ + Seitliche Buttons zeichnen im Fullscreen-Modus + """ + ctx.save() + ctx.select_font_face("AtariST8x16SystemFont") + ctx.set_font_size(16) + ctx.scale(1.6, 1.6) + ctx.set_source_rgb(0, 0, 0) + + bx = 400 + by = (128, 192, 256, 320, 384, 448) + bw = 160 + bh = 64 + for i in range(6): + if len(self.buttonlabel[i+1]) > 0 : + if self.buttonlabel[i+1][0] == "#": + # Symbol verwenden 16x16 Pixel + ctx.save() + key = self.buttonlabel[i+1][1:] + ctx.set_source_surface(self.icon[key], bx + bw / 3.2 - 8, by[i] / 1.6 - 6) + ctx.paint() + ctx.restore() + else: + w = ctx.text_extents(self.buttonlabel[i+1]).width + ctx.move_to(bx + bw/3.2 - w/2, by[i] / 1.6 + 8) + ctx.show_text(self.buttonlabel[i+1]) + ctx.stroke() + ctx.restore() + def draw_footer(self, ctx): """ Nur Belegung der Buttons (label[1] bis label[6]) """ - ctx.select_font_face("AtariST8x16SystemFont") ctx.set_font_size(16) x = (35, 101, 167, 233, 299, 365) @@ -184,11 +213,6 @@ class Page(): ctx.line_to(x[i]+32.5, 300) ctx.stroke() - # Fullscreen-Buttons - bx = 400 - by = (128, 192, 256, 320, 384, 448) - bw = 160 - bh = 64 for i in range(6): if len(self.buttonlabel[i+1]) > 0 : if self.buttonlabel[i+1][0] == "#": @@ -197,18 +221,12 @@ class Page(): key = self.buttonlabel[i+1][1:] ctx.set_source_surface(self.icon[key], x[i]-8, y-13) ctx.paint() - ctx.set_source_surface(self.icon[key], bx + bw / 3.2 - 8, by[i] / 1.6 - 6) - ctx.paint() ctx.restore() else: text = self.buttonlabel[i+1] w = ctx.text_extents(text).width ctx.move_to(x[i] - w/2, y+2) ctx.show_text(text) - if self.fullscreen: - w = ctx.text_extents(self.buttonlabel[i+1]).width - ctx.move_to(bx + bw/3.2 - w/2, by[i] / 1.6 + 8) - ctx.show_text(self.buttonlabel[i+1]) ctx.stroke() def draw_alarm(self, ctx, source, alarmid, message):