From 7efd341276e20c718f0411ef71881891b3c37efb Mon Sep 17 00:00:00 2001 From: themixray <35273590+themixray@users.noreply.github.com> Date: Mon, 8 Nov 2021 18:56:16 +0300 Subject: [PATCH] Add files via upload --- build/lib/pygwin/_win.py | 13 +--- build/lib/pygwin/tray.py | 16 ++--- build/lib/pygwin/ui.py | 129 ++++++++++++++++++++++++++++++++++++ dist/pygwin-0.1.0-py3.7.egg | Bin 291108 -> 291999 bytes pygwin.egg-info/SOURCES.txt | 1 - pygwin/_win.py | 13 +--- pygwin/tray.py | 16 ++--- pygwin/ui.py | 129 ++++++++++++++++++++++++++++++++++++ setup.bat | 1 - 9 files changed, 274 insertions(+), 44 deletions(-) diff --git a/build/lib/pygwin/_win.py b/build/lib/pygwin/_win.py index 29d3b11..b916109 100644 --- a/build/lib/pygwin/_win.py +++ b/build/lib/pygwin/_win.py @@ -3,7 +3,6 @@ from pygwin.tray import tray as _tray from datetime import datetime as _dt from pygwin.image import save as _s from pygwin._pg import pg as _pg -import pygwin._icon as _icon import pygwin.image as _img import win32job as _w32j import win32api as _w32a @@ -30,7 +29,7 @@ class win(_surface): _pg.display.update() def title(): def fget(self): - return _pg.display.get_caption() + return _pg.display.get_caption()[0] def fset(self, value): if type(value) != str: return @@ -109,15 +108,7 @@ def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): _pg.display.set_caption(title) if icon != None: _pg.display.set_icon(_pg.image.load(icon)) - return win(icon) - else: - surf = _img.fromBytes(_icon.iconbytes) - try: - orig = surf._surface_orig - except: - orig = surf._orig - _pg.display.set_icon(orig) - return win() + return win(icon) def ramLimit(memory_limit): hjob = _w32j.CreateJobObject(None, job_name) diff --git a/build/lib/pygwin/tray.py b/build/lib/pygwin/tray.py index 802633d..27ba6ac 100644 --- a/build/lib/pygwin/tray.py +++ b/build/lib/pygwin/tray.py @@ -2,6 +2,7 @@ import threading import wx import wx.adv from pygwin._pg import pg +import copy class tray(wx.adv.TaskBarIcon): def __init__(self, tooltip, iconpath): @@ -14,40 +15,35 @@ class tray(wx.adv.TaskBarIcon): self.frame = self._app.frame super().__init__() self._tooltip = tooltip + self._iconpath = iconpath self.setIcon(iconpath) - self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, - lambda x:self.onLeftMouseButton()) self._menu = wx.Menu() - def CreatePopupMenu(self): return self._menu - + def GetPopupMenu(self): + return self._menu def setIcon(self, path): self._bicon = wx.Icon(wx.Bitmap(path)) self.SetIcon(self._bicon, self._tooltip) - def setTooltip(self, tooltip): self.SetIcon(self._bicon, tooltip) self._tooltip = tooltip - def onLeftMouseButton(self): pass - def addSeparator(self): self._menu.AppendSeparator() - def addCommand(self,text,func=lambda:None): item = wx.MenuItem(self._menu,-1,text) self._menu.Bind(wx.EVT_MENU, lambda x:func(), id=item.GetId()) self._menu.Append(item) - def start(self, thread=True): + cbotld = lambda x:self.onLeftMouseButton() + self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN,cbotld) if thread: threading.Thread( target=self._app.MainLoop, daemon=1).start() else: self._app.MainLoop() - def stop(self): wx.CallAfter(self._app.frame.Close) diff --git a/build/lib/pygwin/ui.py b/build/lib/pygwin/ui.py index ea064e6..bded428 100644 --- a/build/lib/pygwin/ui.py +++ b/build/lib/pygwin/ui.py @@ -182,6 +182,135 @@ class entry(widget): x = self.surface.size[0]-text.size[0]-10 self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + if position != None: + if self.surface.rect(position[0], + position[1]).contains(_m.getPosition()[0], + _m.getPosition()[1]): + if not self.wcl: + _m.setCursor(_pg.SYSTEM_CURSOR_HAND) + else: + if not self.ws: + _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) + self.ws = True + if _m.isPressed('left'): + if not self.wcl: + self.focus=self.focus==0 + self.wcl = True + else: + self.wcl = False + self.wsnr = False + else: + if not self.wsnr: + _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) + self.wsnr = True + if _m.isPressed('left'): + self.focus = False + def insert(self,text): + if _ct.WinDLL("User32.dll").GetKeyState(0x14): + text = text.upper() + if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': + text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), + '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) + if text in self.blacklist: + return + if self.whitelist != None: + if text not in self.whitelist: + return + if self.maxSymbols != None: + if len(text) > self.maxSymbols: + return + self.text += text + def delete(self,symbols=1): + self.text = self.text[:0-symbols] + def draw(self, win, pos): + self._generate(pos) + win.blit(self.surface,pos) + def get(self): + return text +class textarea(widget): + def __init__(self,hint='',fontSize=30, + font=_df,width=None,bg=(70,70,70), + fg=(180,180,200),afg=(200,200,200), + abg=(50,50,50),hintColor=(100,100,100), + lineColor=(200,200,200), + borderColor=(50,50,50), + borderWidth=5,maxSymbols=None, + whitelist=None,blacklist=[]): + super()._args(locals()) + self.text = '' + self.focus = False + self.tick = 0 + self.wcl = False + self.startHint = self.hint + self.ws = False + if self.width == None: + if self.hint != '': + hintSize = self.font.size(self.hint,self.fontSize) + else: + hintSize = (150,self.font.size('X',self.fontSize)[1]) + self.height = hintSize[1]+10 + if self.width == None: + self.width = hintSize[0]+50 + self.surface = _s((self.width,self.height)) + self.wclk = [] + self.wsnr = False + def _generate(self,position=None): + self.surface.fill(self.borderColor) + if self.focus: + if self.text != '': + self.height = self.font.size(self.text,self.fontSize)[1]+10 + self.surface = _s((self.width,self.height)) + self.surface.fill(self.borderColor) + self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, + self.surface.size[0]-self.borderWidth*2, + self.surface.size[1]-self.borderWidth*2)) + if self.text == '': + text = self.font.render(self.hint,self.fontSize,self.hintColor) + else: + text = self.font.render(self.text,self.fontSize,self.afg) + x = 10 + if text.size[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-text.size[0]-10 + self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + for i in _k.getPressed().items(): + if i[1]: + if i[0] not in self.wclk: + if len(i[0]) == 1: + self.insert(i[0]) + elif i[0] == 'backspace': + self.delete() + elif i[0] == 'return': + if self.maxSymbols != None: + if len(text) > self.maxSymbols: + continue + self.text += '\n' + elif i[0] == 'space': + self.insert(' ') + self.wclk.append(i[0]) + else: + if i[0] in self.wclk: + self.wclk.remove(i[0]) + self.tick += 1 + if self.tick >= 60: + if self.text != '': + points = [[x+text.size[0],self.surface.size[1]/2-text.size[1]/2], + [x+text.size[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] + self.surface.draw.line(self.lineColor,points[0],points[1],3) + if self.tick == 120: + self.tick = 0 + else: + self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, + self.surface.size[0]-self.borderWidth*2, + self.surface.size[1]-self.borderWidth*2)) + if self.text == '': + text = self.font.render(self.hint,self.fontSize,self.hintColor) + else: + text = self.font.render(self.text,self.fontSize,self.fg) + x = self.surface.size[0]/2-text.size[0]/2 + if text.size[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-text.size[0]-10 + self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + if position != None: if self.surface.rect(position[0], position[1]).contains(_m.getPosition()[0], diff --git a/dist/pygwin-0.1.0-py3.7.egg b/dist/pygwin-0.1.0-py3.7.egg index 34f2973bcd6ff7c01718f1ec6608c0cc2c95bd3b..cea2cb3a271de7f5af07474d7180d25ac772854e 100644 GIT binary patch delta 18814 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 delta 17895 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≧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 rb~lJx&76Ak0&HPvpbP>4+5Py{ diff --git a/pygwin.egg-info/SOURCES.txt b/pygwin.egg-info/SOURCES.txt index 7977bf6..23b7e75 100644 --- a/pygwin.egg-info/SOURCES.txt +++ b/pygwin.egg-info/SOURCES.txt @@ -1,6 +1,5 @@ setup.py pygwin/__init__.py -pygwin/_icon.py pygwin/_pg.py pygwin/_win.py pygwin/console.py diff --git a/pygwin/_win.py b/pygwin/_win.py index 29d3b11..b916109 100644 --- a/pygwin/_win.py +++ b/pygwin/_win.py @@ -3,7 +3,6 @@ from pygwin.tray import tray as _tray from datetime import datetime as _dt from pygwin.image import save as _s from pygwin._pg import pg as _pg -import pygwin._icon as _icon import pygwin.image as _img import win32job as _w32j import win32api as _w32a @@ -30,7 +29,7 @@ class win(_surface): _pg.display.update() def title(): def fget(self): - return _pg.display.get_caption() + return _pg.display.get_caption()[0] def fset(self, value): if type(value) != str: return @@ -109,15 +108,7 @@ def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): _pg.display.set_caption(title) if icon != None: _pg.display.set_icon(_pg.image.load(icon)) - return win(icon) - else: - surf = _img.fromBytes(_icon.iconbytes) - try: - orig = surf._surface_orig - except: - orig = surf._orig - _pg.display.set_icon(orig) - return win() + return win(icon) def ramLimit(memory_limit): hjob = _w32j.CreateJobObject(None, job_name) diff --git a/pygwin/tray.py b/pygwin/tray.py index 802633d..27ba6ac 100644 --- a/pygwin/tray.py +++ b/pygwin/tray.py @@ -2,6 +2,7 @@ import threading import wx import wx.adv from pygwin._pg import pg +import copy class tray(wx.adv.TaskBarIcon): def __init__(self, tooltip, iconpath): @@ -14,40 +15,35 @@ class tray(wx.adv.TaskBarIcon): self.frame = self._app.frame super().__init__() self._tooltip = tooltip + self._iconpath = iconpath self.setIcon(iconpath) - self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, - lambda x:self.onLeftMouseButton()) self._menu = wx.Menu() - def CreatePopupMenu(self): return self._menu - + def GetPopupMenu(self): + return self._menu def setIcon(self, path): self._bicon = wx.Icon(wx.Bitmap(path)) self.SetIcon(self._bicon, self._tooltip) - def setTooltip(self, tooltip): self.SetIcon(self._bicon, tooltip) self._tooltip = tooltip - def onLeftMouseButton(self): pass - def addSeparator(self): self._menu.AppendSeparator() - def addCommand(self,text,func=lambda:None): item = wx.MenuItem(self._menu,-1,text) self._menu.Bind(wx.EVT_MENU, lambda x:func(), id=item.GetId()) self._menu.Append(item) - def start(self, thread=True): + cbotld = lambda x:self.onLeftMouseButton() + self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN,cbotld) if thread: threading.Thread( target=self._app.MainLoop, daemon=1).start() else: self._app.MainLoop() - def stop(self): wx.CallAfter(self._app.frame.Close) diff --git a/pygwin/ui.py b/pygwin/ui.py index ea064e6..bded428 100644 --- a/pygwin/ui.py +++ b/pygwin/ui.py @@ -182,6 +182,135 @@ class entry(widget): x = self.surface.size[0]-text.size[0]-10 self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + if position != None: + if self.surface.rect(position[0], + position[1]).contains(_m.getPosition()[0], + _m.getPosition()[1]): + if not self.wcl: + _m.setCursor(_pg.SYSTEM_CURSOR_HAND) + else: + if not self.ws: + _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) + self.ws = True + if _m.isPressed('left'): + if not self.wcl: + self.focus=self.focus==0 + self.wcl = True + else: + self.wcl = False + self.wsnr = False + else: + if not self.wsnr: + _m.setCursor(_pg.SYSTEM_CURSOR_ARROW) + self.wsnr = True + if _m.isPressed('left'): + self.focus = False + def insert(self,text): + if _ct.WinDLL("User32.dll").GetKeyState(0x14): + text = text.upper() + if hex(getattr(_ct.windll.LoadLibrary("user32.dll"), "GetKeyboardLayout")(0))=='0x4190419': + text = text.translate(dict(zip(map(ord, '''qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?~'''), + '''йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё'''))) + if text in self.blacklist: + return + if self.whitelist != None: + if text not in self.whitelist: + return + if self.maxSymbols != None: + if len(text) > self.maxSymbols: + return + self.text += text + def delete(self,symbols=1): + self.text = self.text[:0-symbols] + def draw(self, win, pos): + self._generate(pos) + win.blit(self.surface,pos) + def get(self): + return text +class textarea(widget): + def __init__(self,hint='',fontSize=30, + font=_df,width=None,bg=(70,70,70), + fg=(180,180,200),afg=(200,200,200), + abg=(50,50,50),hintColor=(100,100,100), + lineColor=(200,200,200), + borderColor=(50,50,50), + borderWidth=5,maxSymbols=None, + whitelist=None,blacklist=[]): + super()._args(locals()) + self.text = '' + self.focus = False + self.tick = 0 + self.wcl = False + self.startHint = self.hint + self.ws = False + if self.width == None: + if self.hint != '': + hintSize = self.font.size(self.hint,self.fontSize) + else: + hintSize = (150,self.font.size('X',self.fontSize)[1]) + self.height = hintSize[1]+10 + if self.width == None: + self.width = hintSize[0]+50 + self.surface = _s((self.width,self.height)) + self.wclk = [] + self.wsnr = False + def _generate(self,position=None): + self.surface.fill(self.borderColor) + if self.focus: + if self.text != '': + self.height = self.font.size(self.text,self.fontSize)[1]+10 + self.surface = _s((self.width,self.height)) + self.surface.fill(self.borderColor) + self.surface.draw.rect(self.abg,_r(self.borderWidth,self.borderWidth, + self.surface.size[0]-self.borderWidth*2, + self.surface.size[1]-self.borderWidth*2)) + if self.text == '': + text = self.font.render(self.hint,self.fontSize,self.hintColor) + else: + text = self.font.render(self.text,self.fontSize,self.afg) + x = 10 + if text.size[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-text.size[0]-10 + self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + for i in _k.getPressed().items(): + if i[1]: + if i[0] not in self.wclk: + if len(i[0]) == 1: + self.insert(i[0]) + elif i[0] == 'backspace': + self.delete() + elif i[0] == 'return': + if self.maxSymbols != None: + if len(text) > self.maxSymbols: + continue + self.text += '\n' + elif i[0] == 'space': + self.insert(' ') + self.wclk.append(i[0]) + else: + if i[0] in self.wclk: + self.wclk.remove(i[0]) + self.tick += 1 + if self.tick >= 60: + if self.text != '': + points = [[x+text.size[0],self.surface.size[1]/2-text.size[1]/2], + [x+text.size[0],self.surface.size[1]/2-text.size[1]/2+self.surface.size[1]-10]] + self.surface.draw.line(self.lineColor,points[0],points[1],3) + if self.tick == 120: + self.tick = 0 + else: + self.surface.draw.rect(self.bg,_r(self.borderWidth,self.borderWidth, + self.surface.size[0]-self.borderWidth*2, + self.surface.size[1]-self.borderWidth*2)) + if self.text == '': + text = self.font.render(self.hint,self.fontSize,self.hintColor) + else: + text = self.font.render(self.text,self.fontSize,self.fg) + x = self.surface.size[0]/2-text.size[0]/2 + if text.size[0] >= self.surface.size[0]-20: + x = self.surface.size[0]-text.size[0]-10 + self.surface.blit(text,(x,self.surface.size[1]/2-text.size[1]/2)) + if position != None: if self.surface.rect(position[0], position[1]).contains(_m.getPosition()[0], diff --git a/setup.bat b/setup.bat index f094fbb..609db68 100644 --- a/setup.bat +++ b/setup.bat @@ -1,4 +1,3 @@ @echo off python setup.py install echo Complete! -pause >nul