import curses
from curses import *
from curses import textpad
from string import capwords
class calculadora:
    def __init__(self):
        try:
            w=curses.initscr()
            wrapper(self.interfaz(w))
        except:
            print "Calculadora Apagada"
    def rectangulo(self,w,y1,x1,y2,x2):
        textpad.rectangle(w,y1,x1,y2,x2)
    def mostrar(self,v1,v2):
        v1.clear()
        curses.echo()
        if(len(v2)<26):
            v1.addstr(1,26-len(v2),v2,curses.color_pair(1) | A_BOLD)
        else:
            v1.addstr(1,1,v2[(len(v2)-25):],curses.color_pair(1) | A_BOLD)
        v1.refresh()
        curses.noecho()
    def interfaz(self,w):
        y,x,i,j,st,su,mu,di,ex,ra,op=10,20,0,0,0,0,1,1,1,1,0
        a,n=[],"+"
        m=[[1,2,3,'*','Clr'],[4,5,6,'/','.'],[7,8,9,'e','Clu'],[0,'+','-','r','=']]
        curses.noecho()
        curses.start_color()
        curses.init_pair(1, curses.COLOR_YELLOW,curses.COLOR_BLUE)
        curses.init_pair(2, curses.COLOR_YELLOW,curses.COLOR_BLACK)
        curses.init_pair(3, curses.COLOR_BLUE,curses.COLOR_BLACK)
        self.rectangulo(w,1,15,22,53)
        self.rectangulo(w,3,20,6,48)
        self.rectangulo(w,7,16,21,52)
        y1,x1=9,17
        for d in range(4):
            for f in range(5):
                self.rectangulo(w,y1,x1,y1+2,x1+6)
                if(str(m[d][f])in("0123456789")):
                    vc=curses.color_pair(3)
                else:
                    vc=curses.color_pair(2)
                if(len(str(m[d][f]))>1):
                    w.addstr(y1+1,x1+2,str(m[d][f]),vc | A_BOLD)
                else:
                    w.addstr(y1+1,x1+3,str(m[d][f]),vc | A_BOLD)
                x1+=7
            x1=17
            y1+=3
        w1=curses.newwin(2,27,4,21)
        while 1:
            w.move(y,x)
            c=w.getch()            
            if (c==KEY_LEFT or c==ord('D')) and x > 20:
                x=x-7
                j=j-1
            elif (c==KEY_RIGHT or c==ord('C')) and x < 48:
                x=x+7
                j=j+1
            elif (c==KEY_UP or c==ord('A')) and y > 10:
                y=y-3
                i=i-1
            elif (c==KEY_DOWN or c==ord('B')) and y < 19:
                y=y+3
                i=i+1

            elif(c in(ord('0'),ord('1'),ord('2'),ord('3'),
                ord('4'),ord('5'),ord('6'),ord('6'),
                ord('7'),ord('8'),ord('9'),ord('.'),
                ord('+'),ord('-'),ord('*'),ord('/'))):
                if(c==ord('1')):
                   y,x,i,j=10,20,0,0
                elif(c==ord('2')):
                    y,x,i,j=10,27,0,1
                elif(c==ord('3')):
                    y,x,i,j=10,34,0,2
                elif(c==ord('4')):
                    y,x,i,j=13,20,1,0
                elif(c==ord('5')):
                    y,x,i,j=13,27,1,1
                elif(c==ord('6')):
                    y,x,i,j=13,34,1,2
                elif(c==ord('7')):
                    y,x,i,j=16,20,2,0
                elif(c==ord('8')):
                    y,x,i,j=16,27,2,1
                elif(c==ord('9')):
                    y,x,i,j=16,34,2,2
                elif(c==ord('0')):
                    y,x,i,j=19,20,3,0
                elif(c==ord('.')):
                    y,x,i,j=13,48,1,4
                elif(c==ord('+')):
                    y,x,i,j=19,27,3,1
                elif(c==ord('-')):
                    y,x,i,j=19,34,3,2
                elif(c==ord('*')):
                    y,x,i,j=10,41,0,3
                elif(c==ord('/')):
                    y,x,i,j=13,41,1,3
            if(c in(ord('0'),ord('1'),ord('2'),ord('3'),
                    ord('4'),ord('5'),ord('6'),ord('7'),
                    ord('8'),ord('9'),ord('.'),ord('-'),
                    ord('+'),ord('*'),ord('/'),KEY_ENTER,10)):
                if(str(m[i][j]) in ("0123456789.+-*/er")):
                    if(m[i][j]==0):
                        if(len(n)==1):
                            n=n+"0."
                            if(n[0]=="-" and st==0):
                                v2=n
                            else:
                                v2=n[1:]
                        else:
                            n=n+str(m[i][j])
                            v2=n[1:]
                    elif(str(m[i][j]) in ("123456789")):
                        n=n+str(m[i][j])
                        if(n[0]=="+"):
                            v2=n[1:]
                        elif(n[0]=="-" and st==0):
                            v2=n
                        else:
                            v2=n[1:]

                    elif(str(m[i][j])=="."):
                        if(len(n)==1):
                            n=n+"0."
                            if(n[0]=="-" and st==0):
                                v2=n
                            else:
                                v2=n[1:]
                        elif((str(m[i][j]) not in n)):
                            n=n+str(m[i][j])
                            v2=n[1:]
                    elif(str(m[i][j])=="-"):
                        op=0
                        if(len(n)==1 and st==0):
                            n="-"
                            v2=n
                        elif(len(n)>1):
                            if(n[len(n)-1]!='.'):
                                su=su+float(n)
                                n="-"
                                if(st!=0):
                                    v2=n[1:]
                                else:
                                    v2=n        
                        else:
                            n="-"
                            v2=n[1:]
                    elif(str(m[i][j])=="+"):
                        op=0
                        if(len(n)>1):
                            su=su+float(n)
                        n="+"
                        v2=n[1:]
                    elif(str(m[i][j])=="*"):
                        op=1
                        if(len(n)>1):
                            mu=mu*float(n)
                        n="+"
                        v2=n[1:]
                    elif(str(m[i][j])=="/"):
                        op=2
                        if(len(n)>1):
                            if(di==1):
                                di=di*float(n)
                        n="+"
                        v2=n[1:]
                    elif(str(m[i][j])=="e"):
                        op=3
                        if(len(n)>1):
                            if(ex==1):
                                ex=ex*float(n)
                        n="+"
                        v2=n[1:]
                    elif(str(m[i][j])=="r"):
                        op=4
                        if(len(n)>1):
                            if(ra==1):
                                ra=ra*float(n)
                        n="+"
                        v2=n[1:]
                if(str(m[i][j])=="Clu"):
                    if(len(n)>1):
                        n=n[:len(n)-1]
                        v2=n[1:]
                    if(len(n)==1):
                        n="+"
                if(str(m[i][j])=="Clr"):
                    st,su,mu,n,di,ex,ra=0,0,1,"+",1,1,1
                    v2=n[1:]
                if(str(m[i][j])=="="):
                    if(len(n)>1):
                        if(op==0):
                            su=su+float(n)
                            st=su
                        if(op==1):
                            mu=mu*float(n)
                            st=mu
                        if(op==2):
                            di=di/float(n)
                            st=di
                        if(op==3):
                            ex=ex**float(n)
                            st=ex
                        if(op==4):
                            ra=ra**(1/float(n))
                            st=ra
                        su,mu,di,ex,ra=st,st,st,st,st
                    n="+"
                    v2=str(st)
                self.mostrar(w1,v2)
            if(c==ord("s") or c==ord("S")or c==ord("q") or c==ord("Q")):
                break
        curses.echo()
t=calculadora()

