import sys
import string
from PySide.QtCore import *
from PySide.QtGui import *

class Screen(QLineEdit):
    def __init__(self, parent=None):
        QLineEdit.__init__(self, None)
        self.setMinimumHeight(60)
        self.setFocus()
        self.setText('0')

    def insert_(self):
        txt = self.sender().text()
        if txt in '.0123456789':
            """"""
        else:
            txt = " " + txt + " "

        if self.text() == '0':
            self.setText(txt)
        else:
            self.setText(self.text() + txt)

    def copy_(self):
        onScreen = self.text()
        clipboard = QClipboard()
        clipboard.setText(onScreen)
        

    def result(self):
        onScreen = self.text()
        if 'x' in onScreen:
            place = string.find(onScreen, 'x')
            result = int(onScreen[:place]) * int(onScreen[place+1:])
        elif '^' in onScreen:
            place = string.find(onScreen, '^')
            result = int(onScreen[:place]) ** int(onScreen[place+1:])            
        else:
            result = eval(onScreen)
            
        self.setText(str(result))

class Button(QPushButton):
    def __init__(self, parent=None, name= ' '):
        QPushButton.__init__(self, name)
        self.setMaximumWidth(45)
        self.setMinimumHeight(35)
        if name == '=':
            self.setMinimumWidth(75)
            self.setStyleSheet("color:red;")
        if name in ['/','(',')','^','%','x','-','+']:
            self.setMaximumWidth(35)
        if name == '0':
            self.setMinimumWidth(95)
            self.setStyleSheet("color:red;")
        if name in '.123456789':
            self.setStyleSheet("color:blue;")
        if name == 'copy':
            self.setMinimumWidth(75)
            self.setStyleSheet("color:blue;")
        if name == 'clear':
            self.setMinimumHeight(10)
            self.setMaximumHeight(27)
            self.setMaximumWidth(30)
            self.setText('')
            self.setIcon(QIcon('clear.svg'))
        if name == 'backspace':
            self.setMinimumHeight(10)
            self.setMaximumHeight(27)
            self.setMaximumWidth(30)
            self.setText('')
            self.setIcon(QIcon('bs.svg'))


class Layer(QHBoxLayout):
    def __init__(self, parent=None):
        QHBoxLayout.__init__(self, None)



        
class App(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, None)
        self.setWindowTitle('Smart Calc Beta')
        self.setWindowIcon(QIcon('sc.svg'))
        self.layout()

    def layout(self):
        layouts = {}
        layouts['Main'] = QVBoxLayout()
        self.setLayout(layouts['Main'])
        ## Screen
        screen = Screen()
        layouts['screen'] = Layer()
        layouts['screen'].addWidget(screen)
        ## Screen Buttons
        layouts['screenButtons'] = QVBoxLayout()
        screenButtons = ['backspace', 'clear']
        screenButtons[0] = Button(name='backspace')
        screenButtons[1] = Button(name='clear')
        layouts['screenButtons'].addWidget(screenButtons[0])
        layouts['screenButtons'].addWidget(screenButtons[1])
        ## Top Layout
        layouts['top'] = Layer()
        layouts['top'].addLayout(layouts['screen'])
        layouts['top'].addLayout(layouts['screenButtons'])
        layouts['Main'].addLayout(layouts['top'])       
        ## Buttons
        line1 = ['7','8','9','/','copy']
        line2 = ['4','5','6','x','(',')']
        line3 = ['1','2','3','-','^','%']
        line4 = ['0','.','+','=']
        layouts['line1'] = Layer()
        layouts['Main'].addLayout(layouts['line1'])
        layouts['line2'] = Layer()
        layouts['Main'].addLayout(layouts['line2'])
        layouts['line3'] = Layer()
        layouts['Main'].addLayout(layouts['line3'])
        layouts['line4'] = Layer()
        layouts['Main'].addLayout(layouts['line4'])
        for i in range(len(line1)):
                 line1[i] = Button(name='%s' % line1[i])
                 layouts['line1'].addWidget(line1[i])
        for i in range(len(line2)):
                 line2[i] = Button(name='%s' % line2[i])
                 layouts['line2'].addWidget(line2[i])
        for i in range(len(line3)):
                 line3[i] = Button(name='%s' % line3[i])
                 layouts['line3'].addWidget(line3[i])
        for i in range(len(line4)):
                 line4[i] = Button(name='%s' % line4[i])
                 layouts['line4'].addWidget(line4[i])
        ##events
        self.connect(screenButtons[1], SIGNAL('clicked()'), screen, SLOT('clear()'))
        self.connect(screenButtons[0], SIGNAL('clicked()'), screen, SLOT('backspace()'))
        self.connect(line1[4], SIGNAL('clicked()'), screen, SLOT('copy_()'))
        self.connect(line4[3], SIGNAL('clicked()'), screen, SLOT('result()'))
        lines = [line1[:4],line2,line3,line4[:3]]
        for i in range(len(lines)):
            for j in range(len(lines[i])):
                self.connect(lines[i][j], SIGNAL('clicked()'), screen, SLOT('insert_()'))
        self.l1 = line1


if __name__ == '__main__':
    app = QApplication(sys.argv)
    cal = App()
    cal.show()

    app.exec_()
    sys.exit
