# -*- coding: utf-8 -*-

import wx, time

EVT_OUTPUT_APPEND = wx.NewId()
EVT_OUTPUT_UPDATE = wx.NewId()

class FrameMerger(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u'FFMPEG 输出窗口', pos=wx.DefaultPosition,
                           size=wx.Size(427, 450), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)

        self.SetSizeHints(wx.Size(427, 381), wx.DefaultSize)
        self.SetBackgroundColour(wx.Colour(240, 240, 240))

        sizer = wx.BoxSizer(wx.VERTICAL)

        self.textctrl_output = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(427, 381),
                                  wx.TE_AUTO_URL | wx.TE_MULTILINE | wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB)

        self.textctrl_output.SetFont(wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "宋体"))

        self.staticline = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL)

        self.text_remain = wx.StaticText(self, wx.ID_ANY, u"估计还剩 00:00:00", wx.DefaultPosition, wx.DefaultSize,
                                            wx.ALIGN_RIGHT)
        self.text_remain.Wrap(-1)

        self.gauge_progress = wx.Gauge(self, wx.ID_ANY, 10000, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL)
        self.gauge_progress.SetValue(0)

        sizer_1 = wx.BoxSizer(wx.HORIZONTAL)

        self.text_percent = wx.StaticText(self, wx.ID_ANY, u"0.0%", wx.DefaultPosition, wx.DefaultSize, 0)
        self.text_percent.Wrap(-1)

        self.text_size = wx.StaticText(self, wx.ID_ANY, u"0kb", wx.DefaultPosition, wx.DefaultSize,
                                            wx.ALIGN_RIGHT)
        self.text_size.Wrap(-1)

        sizer_1.Add(self.text_percent, 1, wx.ALL | wx.EXPAND, 2)
        sizer_1.Add(self.text_size, 1, wx.ALL | wx.EXPAND, 2)

        sizer.Add(self.textctrl_output, 1, wx.ALL | wx.EXPAND, 2)
        sizer.Add(self.staticline, 0, wx.EXPAND | wx.ALL, 5)
        sizer.Add(self.text_remain, 0, wx.ALL | wx.EXPAND, 2)
        sizer.Add(self.gauge_progress, 0, wx.ALL | wx.EXPAND, 2)
        sizer.Add(sizer_1, 0, wx.ALL | wx.EXPAND, 3)

        self.menu_bar = MergerMenuBar(0)
        self.SetMenuBar(self.menu_bar)


        self.SetSizer(sizer)
        self.Layout()

        self.Centre(wx.BOTH)

        self.textctrl_output.Connect(-1, -1, EVT_OUTPUT_APPEND, self.AppendText)
        self.gauge_progress.Connect(-1, -1, EVT_OUTPUT_UPDATE, self.update)


    def __del__(self):
        pass

    def AppendText(self, event):
        self.textctrl_output.AppendText(event.text)

    def Clear(self):
        self.textctrl_output.Clear()


    def update(self, event):
        percent = event.cur_len / event.total_len * 100.0

        self.text_percent.SetLabelText('%f%%' % percent)
        self.gauge_progress.SetValue(int(percent*100))

        self.text_remain.SetLabelText('估计还剩 %s' % event.remain_time_str)
        self.text_size.SetLabelText(event.cur_byte_str)
        self.Layout()

class MergerMenuBar(wx.MenuBar):
    def __init__(self, style):
        wx.MenuBar.__init__(self, style)

        self.file = Menu_File()
        self.help = Menu_Help()

        self.Append(self.file, 'File')
        self.Append(self.help, 'Help')


class Menu_File(wx.Menu):
    def __init__(self, *args):
        wx.Menu.__init__(self, *args)
        self.logs = None
        self.exit = None

        self.initMenuItems()

    def initMenuItems(self):
        self.logs = wx.MenuItem(self, wx.ID_ANY, '&Logs\tF2', wx.EmptyString, wx.ITEM_NORMAL)

        self.Append(self.logs)
        self.AppendSeparator()
        self.exit = wx.MenuItem(self, wx.ID_ANY, 'Exit', wx.EmptyString, wx.ITEM_NORMAL)

        self.Append(self.exit)


class Menu_Help(wx.Menu):
    def __init__(self, *args):
        wx.Menu.__init__(self, *args)

        self.about = None

        self.initMenuItems()

    def initMenuItems(self):
        self.about = wx.MenuItem(self, wx.ID_ANY, '&About\tF1', wx.EmptyString, wx.ITEM_NORMAL)
        self.Append(self.about)



class MergerOutputAppendEvent(wx.PyEvent):
    def __init__(self, text):
        wx.PyEvent.__init__(self)
        self.SetEventType(EVT_OUTPUT_APPEND)
        self.text = text

class MergerOutputUpdateEvent(wx.PyEvent):
    def __init__(self, cur_len, total_len, cur_byte_str, remain_time_str):
        wx.PyEvent.__init__(self)
        self.SetEventType(EVT_OUTPUT_UPDATE)
        self.cur_len = cur_len
        self.total_len = total_len
        self.cur_byte_str = cur_byte_str
        self.remain_time_str = remain_time_str



# app = wx.App()
# frame_main = FrameMerger(None)
# frame_main.Show()
# dlg.ShowModal()
# app.MainLoop()