#Embedded file name: /home/mindwave/src_voda/prizm_mid/milano/app/calc/mainview.py
from widgets import pyapp, canvas
from widgets.button import ClickImageButton
from widgets.widget import SoftButtonContainer
from widgets.entry import Entry
import config, theme

class MainView(pyapp.Window):

    def __init__(self, app):
        self.__super.__init__(app)
        self.set_title(_('Calculator'))
        self.last_oper = None
        self.init_widget()
        return

    def init_widget(self):
        calc_conf = {'size': (220, theme.entry_height),
         'align': 'left top',
         'pos': (30, 10),
         'font_size': 18,
         'clear': False}
        self.entry_calc = Entry(self, calc_conf)
        self.entry_calc.set_text('0')
        text_conf = {'color': theme.color.red,
         'align': 'left top',
         'pos': (250, 7),
         'font_size': 18}
        self.label = canvas.XGText(self, text_conf, text='')
        img_path = config.img_global_dir + 'calculator/'
        img_pos = [(13, 148),
         (73, 148),
         (133, 148),
         (13, 112),
         (73, 112),
         (133, 112),
         (13, 76),
         (73, 76),
         (133, 76),
         (13, 40),
         (73, 40),
         (133, 40),
         (193, 40),
         (193, 112),
         (193, 76),
         (193, 148),
         (253, 112),
         (253, 40),
         (253, 76)]
        btn_name = ['0', 'trans', 'dot'] + [ str(x) for x in range(1, 10) ] + ['plus',
         'divided',
         'minus',
         'times',
         'equals',
         'delete',
         'CE']
        img_btn = []
        for i, name in enumerate(btn_name):
            btn = CustomClickImageButton(self, [ img_path + name + '%s.png' % x for x in ('', '_p') ], self.cb, img_pos[i], data=name)
            img_btn.append(btn)

        conf = {'right': (_('Back'), 'right')}
        obj = SoftButtonContainer(self, conf)

        def cb(menu):
            self.close()

        obj.add_callback('softbutton-clicked', cb)

    def cb(self, data):
        dict = {'plus': '+',
         'minus': '-',
         'times': '*',
         'divided': '/'}
        calc_value = self.entry_calc.get_text()

        def set_text(ch = '0'):
            self.entry_calc.set_text(ch)

        def float_check(str):
            if str.endswith('.0'):
                str = str[:-2]
            return str

        def calculation():
            print '-' * 60
            temp = calc_value.split('/')
            print 'temp =', temp
            if len(temp) == 1:
                return calc_value
            result = ''
            for index, x in enumerate(temp):
                if index != len(temp) - 1:
                    print result, x
                    result += str(x) + '*1.0/'

            print '-' * 60
            print result + temp[-1]
            print '-' * 60
            return result + temp[-1]

        def dot_check():
            temp = calc_value
            if temp[-1] == ')':
                return True
            if self.last_oper != None:
                list = temp.rsplit(self.last_oper, 1)
                temp = list.pop()
            if '.' in str(temp):
                return True
            return False

        if data == 'CE':
            set_text()
        elif data == 'delete':
            if len(calc_value) == 1:
                set_text()
            else:
                set_text(calc_value[:-1])
        elif data == 'trans':
            if str(calc_value[-1]) not in dict.values():
                set_text('-(' + calc_value + ')')
        elif data == 'dot':
            if dot_check() == True:
                return
            set_text(calc_value + '.')
        elif data in dict.keys():
            if calc_value[-1:] in dict.values():
                return
            self.last_oper = dict[data]
            set_text(calc_value + dict[data])
        elif data == 'equals':
            try:
                set_text(float_check(str(eval(calculation()))))
            except:
                self.label.set_text('Error')
                return

        else:
            if len(calc_value) != 0 and calc_value[-1] == ')':
                return
            if calc_value == '0':
                set_text(data)
            else:
                set_text(calc_value + data)
        self.label.set_text('')


class CustomClickImageButton(ClickImageButton):

    def __init__(self, parent, images, cb, pos, data = None):
        ClickImageButton.__init__(self, parent, images, cb, pos)
        self.data = data

    def handle_button_event(self, event):
        if event == 'release':
            self.click_cb(self.data)
        try:
            super(CustomClickImageButton, self).handle_button_event(event)
        except:
            pass