Advertisement
phjoe

basic kalkulator

Dec 5th, 2014
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # basic kalkulator keyboard
  2. # joe
  3.  
  4. class Modul:
  5.  def __init__(self):
  6.   import appuifw
  7.   import graphics
  8.   self.A, self.G = appuifw, graphics
  9.   self.X, self.Y = self.G.sysinfo.display_pixels()
  10.   self.cX, self.cY = self.X/2.0, self.Y/2.0
  11.   self.img = self.G.Image.new((self.X, self.Y))
  12. m = Modul()
  13. del Modul
  14.  
  15.  
  16. class Kalkulator:
  17.  def __init__(self):
  18.   self.main_loop = False
  19.   self.scr_text = u''
  20.   self.result = None
  21.   self.isMin = False
  22.   self.buffer = []
  23.   self.canvas = m.A.Canvas(redraw_callback=self._draw, event_callback=self._event)
  24.   m.A.app.screen = 'full'
  25.   m.A.app.body = self.canvas
  26.   m.A.app.menu = [(u'Exit', self.keluar)]
  27.   m.A.app.exit_key_handler = lambda:self.clr(0)
  28.  
  29.  def keluar(self):
  30.   m.A.app.set_exit()
  31.  
  32.  def screen(self):
  33.   m.img.clear(bgcolor)
  34.  
  35.  def _draw(self, rect):
  36.   if m.img:
  37.    self.canvas.blit(m.img)
  38.  
  39.  def clr(self, all=0):
  40.   if not all:
  41.    # hapus
  42.    if self.buffer:
  43.     self.result = None
  44.     self.buffer.pop(-1)
  45.    else:return None
  46.    if not self.buffer:
  47.     self.isMin = False
  48.    self.scr_text = ''.join([str(i) for i in self.buffer])
  49.   else:
  50.    # hapus semua
  51.    self.buffer, self.scr_text, self.result, self.isMin = [], '', None, False
  52.  
  53.  def _refresh(self):
  54.   ''' bersihkan layar / hasil hitung '''
  55.   self.result = None
  56.  
  57.  def _hitung(self):
  58.   ''' hitung disini '''
  59.   pass
  60.  
  61.  def _event(self, sc):
  62.   key = sc['scancode']
  63.   if self.main_loop:
  64.    if sc['type'] is not m.A.EEventKey:return None
  65.    elif key == 0x30: #0
  66.     self._refresh()
  67.     self._drawNum(0)
  68.    elif key == 0x31: #1
  69.     self._refresh()
  70.     self._drawNum(1)
  71.    elif key == 0x32: #2
  72.     self._refresh()
  73.     self._drawNum(2)
  74.    elif key == 0x33: #3
  75.     self._refresh()
  76.     self._drawNum(3)
  77.    elif key == 0x34: #4
  78.     self._refresh()
  79.     self._drawNum(4)
  80.    elif key == 0x35: #5
  81.     self._refresh()
  82.     self._drawNum(5)
  83.    elif key == 0x36: #6
  84.     self._refresh()
  85.     self._drawNum(6)
  86.    elif key == 0x37: #7
  87.     self._refresh()
  88.     self._drawNum(7)
  89.    elif key == 0x38: #8
  90.     self._refresh()
  91.     self._drawNum(8)
  92.    elif key == 0x39: #9
  93.     self._refresh()
  94.     self._drawNum(9)
  95.    elif key == 0x12: # pen
  96.     if not self.isMin:
  97.      if self.result:self.result = None
  98.      self.isMin = True
  99.      self.buffer = ['-'] + self.buffer
  100.      self.scr_text= ''.join([str(i) for i in self.buffer])
  101.     else:
  102.      if self.result:self.result = None
  103.      if self.isMin:
  104.       if self.buffer:
  105.        if self.buffer[0] == '-':
  106.         self.buffer.pop(0)
  107.        else:return None
  108.      self.scr_text= ''.join([str(i) for i in self.buffer])
  109.      self.isMin = False
  110.    elif key == 0x2a: # *
  111.     if self.buffer > 1:
  112.      if '.' in self.buffer:
  113.       # hanya ada 1 koma dalam deret angka, jika sudah ada, lanjutkan..
  114.       return None
  115.      else:
  116.       self._refresh()
  117.       self._drawNum('.')
  118.    elif key == 0x01: # C
  119.     self.clr(1)
  120.    elif key == 0x7f: # #
  121.     self._hitung()
  122.  
  123.  def _tsize(self, text, font):
  124.   if not isinstance(text, unicode):
  125.    text = unicode(text)
  126.   (a, b, c) = m.img.measure_text(text, font=font)
  127.   w, h = (a[2] - a[0], a[3] - a[1])
  128.   return (w, h)
  129.  
  130.  def _drawNum(self, num):
  131.   if num != None:
  132.    if len(self.buffer) < 12:
  133.     self.buffer.append(num)
  134.    else:return None
  135.    self.scr_text = ''.join([str(i) for i in self.buffer])
  136.    if self.scr_text[0] == '.':
  137.     # jika teks pertama yg ditekan '.' tambahkan 0 didepan nya menjadi 0. ...
  138.     self.buffer = [0] + self.buffer
  139.     self.scr_text = '0' + self.scr_text
  140.  
  141.  def drawText(self, tlist, color, font):
  142.   h = self._tsize(u'AB', font)[1] + 2
  143.   for i in range(len(tlist)):
  144.    m.img.text((m.cX - self._tsize(tlist[i], font)[0] / 2, m.cY - ((h * len(tlist)) / 3) + (i * h)), tlist[i], color, font)
  145.  
  146.  def drawResult(self):
  147.   pass
  148.  
  149.  def Main(self):
  150.   self.main_loop = True
  151.   boxH=60
  152.   while self.main_loop:
  153.    px, py = m.X - self._tsize(unicode(self.scr_text),numberfont)[0] - 5, boxH-14
  154.    self.screen()
  155.    m.img.polygon((4,2,m.X-4,2,m.X-2,4,m.X-2,boxH-2,m.X-4,boxH,4,boxH,2,boxH-2,2,4),0x696969,0xefefef)
  156.    m.img.text((px, py), unicode(self.scr_text), textcolor, numberfont)
  157.    if self.result != None:
  158.     self.drawResult()
  159.    if not self.buffer and not self.scr_text:
  160.     text_main = [u'Program ready...']
  161.    self._draw(0)
  162.    m.A.e32.ao_sleep(1e-04)
  163.  
  164. bgcolor = 0x2021
  165. textcolor = 0
  166. box_bgcolor = 0xa5fb5a
  167. box_textcolor = 0
  168. box_bordercolor = 0xffffff
  169. bordercolor = 0xffffff
  170. numberfont = u'acalc21'
  171. normalfont = 'legend'
  172. smallfont = 'dense'
  173.  
  174. Kal=Kalkulator()
  175. Kal.Main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement