#!/usr/bin/python
from distutils.core import setup
import py2exe
import os, sys

CurrentPath = os.path.dirname(sys.argv[0])
setup(windows=[str(CurrentPath) + '008.py'], options = { "py2exe":{"dll_excludes":["MSVCP90.dll"], "unbuffered": True}})
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import wx
import json
from string import lower, replace

class TextFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Subject 7',size=(1000,600))

        panel = wx.Panel(self, -1)

        def strf(text):
            result = text
            for c in ["-", "_", " "]:
                result = result.replace(c, "_")
            return result

        def strflocator(locator, page, type, alias, xpath):

            result = locator.replace('{{page}}', page).replace('{{type}}', type).replace('{{alias}}', alias).replace(
                '{{xpath}}', xpath)
            # print xpath
            # print '------------------------------------------------------------------------------'
            # print result
            #
            # print '------------------------------------------------------------------------------'
            output.AppendText(xpath+'\n')
            output.AppendText('*'*70+'\n')
            output.AppendText(result)
            output.AppendText('*' * 70+'\n')

        def process(event):
            output.Clear()
            str = cases.GetValue()
            # print str
            data = json.loads(str)
            # print str
            for case in data["cases"]:


                xpath_text = '//label[text()="{{xpath_text}}"]/../following-sibling::*//input'
                xpath_select = '//label[text()="{{xpath_select}}"]/../following-sibling::*//select'

                locator = 'page:{{page}};\ntype:{{type}};\nalias:{{alias}};\nxpath:{{xpath}};\n'

                if "text" in case:
                    for field in case["text"]:
                        xpath = xpath_text.replace('{{xpath_text}}',strf(field))
                        strflocator(locator, 'Common', 'text', strf(field), xpath)


                # Generate select field locator
                if "select" in case:
                    for field in case["select"]:
                        xpath = xpath_text.replace('{{xpath_select}}', strf(field))
                        strflocator(locator, 'Common', 'select', strf(field), xpath)

        str_default='''{  
   "cases":[  
      {  
         "text":[  
            "Transaction Date",
            "Transaction Type"
         ],
        "select":[  
            "Processing Status"
         ]
      }
   ]
}'''
        lCases = wx.StaticText(panel, -1, "Cases:")
        cases = wx.TextCtrl(panel, -1, str_default,
                                 style=wx.TE_MULTILINE)
        cases.SetInsertionPoint(0)

        lOutput = wx.StaticText(panel, -1, "Output:")
        output = wx.TextCtrl(panel, -1, "",
                              style=wx.TE_MULTILINE)



        sizer = wx.GridBagSizer( 5,5 )
        # sizer = wx.FlexGridSizer(cols=1, hgap=6, vgap=6)

        sizer.Add(lCases,pos=(0,0),span=(1,5),flag=wx.LEFT,border=6)
        sizer.Add(lOutput, pos=(0, 10), span=(1, 5), flag=wx.LEFT, border=6)
        sizer.Add(cases, pos=(1, 0), span=(20, 10), flag=wx.LEFT|wx.EXPAND, border=6)
        sizer.Add(output, pos=(1,10 ), span=(20, 10), flag=wx.LEFT|wx.EXPAND , border=6)

        # sizer.AddMany([lCases, cases, lOutput, output,button])
        # sizer.fit(window)


        button = wx.Button(panel, -1, "Submit",size=(80,40))
        # sizer.Add(button, pos=(21, 0), flag=wx.LEFT | wx.ALIGN_CENTER_HORIZONTAL, border=6)
        button.Bind(wx.EVT_BUTTON,process)
        sizer.AddGrowableRow(1)
        # sizer.AddGrowableRow(21)
        sizer.AddGrowableCol(1)
        sizer.AddGrowableCol(10)

        sizer2 = wx.BoxSizer(wx.VERTICAL)

        # sizer.Add(sizer, pos=(0, 0), span=(20, 5), flag=wx.LEFT, border=6)
        # sizer.Add(button, pos=(3, 0), span=(1, 1), flag=wx.LEFT, border=6)
        # sizer2.AddGrowableCol(1)
        # sizer2.AddGrowableRow(1)
        # sizer2.AddGrowableRow(20)
        sizer2.Add( sizer, wx.ALIGN_CENTER_HORIZONTAL, wx.BOTTOM|wx.EXPAND, 10 )
        sizer2.Add(button,0, wx.ALIGN_CENTER, wx.ALIGN_TOP|wx.BOTTOM, 10)


        # sizer2=wx.BoxSizer(wx.VERTICAL)


        # sizer2,Add(button, proportion=0, flag=wx.EXPAND, border=0)
        panel.SetSizerAndFit(sizer2)
        panel.Center()


        # self.Centre(wx.BOTH)
        # panel.SetSizerAndFit(sizer2)

if __name__ == '__main__':
    app = wx.App()
    frame = TextFrame()
    frame.SetMinSize((1000,600))
    frame.Show()
    app.MainLoop()