#!/usr/bin/env python3 import io from os import path import requests import wx from typing import Union, Callable SIZE = wx.Size(200,135) MYPATH = path.dirname(path.abspath(__file__)) def get_default_logo(providerid: str = 'default') -> wx.Bitmap: if providerid == 'SVT': return wx.Bitmap('{}/assets/SVT.png'.format(MYPATH)) if providerid == 'YouTube': return wx.Bitmap('{}/assets/YouTube.png'.format(MYPATH)) else: return wx.Bitmap('{}/assets/Default.png'.format(MYPATH)) def make_sized_button(parent_pnl: wx.Panel, bitmap_or_str: Union[wx.Bitmap,str], text: str, callback: Callable) -> wx.BoxSizer: btn_sizer = wx.BoxSizer(wx.HORIZONTAL) if type(bitmap_or_str) == type(str): if bitmap_or_str.startswith('http'): # type: ignore bitmap = make_bitmap_from_url(bitmap_or_str) # type: ignore else: bitmap = wx.Bitmap(bitmap_or_str, wx.BITMAP_TYPE_ANY) else: bitmap = bitmap_or_str btn_style = wx.BORDER_NONE | wx.BU_AUTODRAW | wx.BU_EXACTFIT | wx.BU_NOTEXT btn_logo = wx.BitmapButton(parent_pnl, wx.ID_ANY, bitmap , style=btn_style) btn_logo.SetMinSize(SIZE) btn_logo.SetToolTip(text) btn_sizer.Add(btn_logo, 0, wx.BOTTOM | wx.EXPAND | wx.LEFT | wx.TOP, 1) btn_text = wx.Button(parent_pnl, wx.ID_ANY, text, style=wx.BORDER_NONE | wx.BU_AUTODRAW) btn_text.SetMinSize(SIZE) btn_text.SetToolTip(text) btn_sizer.Add(btn_text, 0, wx.BOTTOM | wx.RIGHT | wx.TOP, 1) parent_pnl.Bind(wx.EVT_BUTTON, callback, btn_logo) parent_pnl.Bind(wx.EVT_BUTTON, callback, btn_text) return btn_sizer def make_bitmap_from_url(logo_url: str ) -> wx.Bitmap: res = requests.get(logo_url) content = res.content content_bytes = io.BytesIO(content) image = wx.Image(content_bytes, type=wx.BITMAP_TYPE_ANY, index=-1) image = image.Resize(SIZE, (0,0)) return wx.Bitmap(image) def resolve_svt_channel(svt_id: str) -> dict: channels = { "ch-barnkanalen": { "name": "Barnkanalen", "thumbnail": wx.Bitmap('{}/assets/Barnkanalen.png'.format(MYPATH)) }, "ch-svt1": { "name": "SVT 1", "thumbnail": wx.Bitmap('{}/assets/SVT1.png'.format(MYPATH)) }, "ch-svt2": { "name": "SVT 2", "thumbnail": wx.Bitmap('{}/assets/SVT2.png'.format(MYPATH)) }, "ch-svt24": { "name": "SVT 24", "thumbnail": wx.Bitmap('{}/assets/SVT24.png'.format(MYPATH)) }, "kunskapskanalen": { "name": "Kunskapskanalen", "thumbnail": wx.Bitmap('{}/assets/Kunskapskanalen.png'.format(MYPATH)) }, "feed": { "name": "Senaste program", "thumbnail": wx.Bitmap('{}/assets/SVT.png'.format(MYPATH)) }, } return channels[svt_id] def write_on_bitmap(text: str, bmap: wx.Bitmap) -> wx.Bitmap: bitmap = wx.Bitmap(bmap) dc = wx.MemoryDC(bitmap) cblack = wx.Colour(0, 0, 0) cwhite = wx.Colour(255, 255, 255) dc.SetTextForeground(cwhite) dc.SetTextBackground(cblack) dc.SetFont(wx.Font().Bold()) dc.SetBackgroundMode(wx.BRUSHSTYLE_SOLID) w, h = dc.GetSize() tw, th = dc.GetTextExtent(text) dc.DrawText(text, (w - tw) / 2, (h - th) / 2) #display text in center del dc return bitmap