#!/usr/bin/env python # -*- coding: utf-8 -*- # generated by wxGlade 0.6.3 on Wed Feb 11 13:37:43 2009 import wx import sys, os app = None # begin wxGlade: extracode # end wxGlade class TextOutput(file): def __init__(self, text_ctrl): self.text_ctrl = text_ctrl def write(self, text): self.text_ctrl.AppendText(text+"\n") self.text_ctrl.Refresh() def writelines(self, list): for text in list: self.text_ctrl.AppendText(text+"\n") self.text_ctrl.Refresh() def fileno(self): return 1 def clear(self): self.text_ctrl.Clear() class MainFrame(wx.Frame): def __init__(self, *args, **kwds): # begin wxGlade: MainFrame.__init__ kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.__init__(self, *args, **kwds) self.action_choice = wx.RadioBox(self, -1, "Action", choices=["Convert", "Dryrun", "Diff", "Clean", "Revert"], majorDimension=2, style=wx.RA_SPECIFY_ROWS) self.label_1 = wx.StaticText(self, -1, "Verbosity Level") self.verbosity = wx.Choice(self, -1, choices=["0", "1", "2", "3"]) self.unix_endings = wx.CheckBox(self, -1, "Convert to UNIX line-endings") self.spell_check = wx.CheckBox(self, -1, "Enable spell-checking") self.path_ctrl = wx.TextCtrl(self, -1, "") self.choose_file = wx.Button(self, -1, "Browse") self.Convert = wx.Button(self, -1, "Go") self.Output = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY) self.__set_properties() self.__do_layout() self.Bind(wx.EVT_BUTTON, self.button_browse, self.choose_file) self.Bind(wx.EVT_BUTTON, self.button_convert, self.Convert) # end wxGlade self.text_output = TextOutput(self.Output) self.process = None self.Bind(wx.EVT_IDLE, self.on_idle) self.Bind(wx.EVT_END_PROCESS, self.subprocess_finished) def __set_properties(self): # begin wxGlade: MainFrame.__set_properties self.SetTitle("wmllint") self.SetSize((340, 481)) self.action_choice.SetSelection(0) self.label_1.SetMinSize((110, 17)) self.verbosity.SetSelection(0) self.path_ctrl.SetMinSize((250, 34)) self.Output.SetMinSize((340, 270)) # end wxGlade def __do_layout(self): # begin wxGlade: MainFrame.__do_layout sizer_3 = wx.BoxSizer(wx.VERTICAL) sizer_4 = wx.BoxSizer(wx.VERTICAL) sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_5 = wx.BoxSizer(wx.VERTICAL) sizer_7 = wx.BoxSizer(wx.VERTICAL) sizer_6 = wx.BoxSizer(wx.HORIZONTAL) sizer_5.Add(self.action_choice, 0, wx.EXPAND, 3) sizer_6.Add(self.label_1, 0, wx.ALIGN_CENTER_VERTICAL, 0) sizer_6.Add(self.verbosity, 0, wx.EXPAND, 0) sizer_5.Add(sizer_6, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) sizer_7.Add(self.unix_endings, 0, wx.ADJUST_MINSIZE, 0) sizer_7.Add(self.spell_check, 0, wx.ADJUST_MINSIZE, 0) sizer_5.Add(sizer_7, 1, wx.ALIGN_CENTER_HORIZONTAL, 0) sizer_4.Add(sizer_5, 1, wx.EXPAND, 0) sizer_2.Add(self.path_ctrl, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0) sizer_2.Add(self.choose_file, 0, wx.ADJUST_MINSIZE, 0) sizer_1.Add(sizer_2, 0, wx.EXPAND, 0) sizer_1.Add(self.Convert, 0, wx.EXPAND, 0) sizer_4.Add(sizer_1, 0, wx.EXPAND, 0) sizer_3.Add(sizer_4, 0, wx.EXPAND, 0) sizer_3.Add(self.Output, 2, wx.EXPAND, 0) self.SetSizer(sizer_3) sizer_3.SetSizeHints(self) self.Layout() # end wxGlade def start_wmllint(self,output,\ arguments,\ clean = False,\ diffs = False,\ dryrun = False,\ future = False,\ revert = False,\ stringfreeze = False,\ stripcr = False,\ spell_check = False,\ verbose = 0): cmd = "python -u wmllint" if clean: cmd+=" -c" if diffs: cmd+=" -D" if dryrun: cmd+=" -d" if future: cmd+=" --future" if revert: cmd+=" -r" if stripcr: cmd+=" -s" for i in range(verbose): cmd+=" -v" for path in arguments: cmd+=" "+path self.text_output.write("Executing \""+cmd+"\".") self.process = wx.Process(self) self.process.Redirect() self.wmllint_pid = wx.Execute(cmd, wx.EXEC_ASYNC, self.process) def button_convert(self, event): # wxGlade: MainFrame. if self.process: self.process.Kill(self.wmllint_pid) else: self.text_output.clear() path = self.path_ctrl.GetValue() clean = False diffs = False dryrun = False future = False revert = False stringfreeze = False stripcr = False spell_check = False verbose = 0 mode = self.action_choice.GetStringSelection() if(mode == "Clean"): clean = True if(mode == "Diff"): diffs = True if(mode == "Dryrun"): dryrun = True if(mode == "Revert"): revert = True spell_check = self.spell_check.GetValue() stripcr = self.unix_endings.GetValue() verbose = self.verbosity.GetSelection() if not os.path.exists(path): self.text_output.write("Path could not be found.") return self.start_wmllint(self.text_output, [path], clean, diffs, dryrun, future, revert,\ stringfreeze, stripcr, spell_check, verbose) self.set_running(True) def set_running(self, val): if val == True: self.Convert.SetLabel("Stop") self.action_choice.Enable(False) self.unix_endings.Enable(False) self.spell_check.Enable(False) self.verbosity.Enable(False) self.path_ctrl.Enable(False) self.choose_file.Enable(False) else: self.Convert.SetLabel("Go") self.action_choice.Enable(True) self.unix_endings.Enable(True) self.spell_check.Enable(True) self.verbosity.Enable(True) self.path_ctrl.Enable(True) self.choose_file.Enable(True) def subprocess_finished(self, event): self.set_running(False) self.process = None def button_browse(self, event): # wxGlade: MainFrame. dir_dialog = wx.DirDialog(self) dir_dialog.ShowModal() path = dir_dialog.GetPath() self.path_ctrl.SetValue(path) dir_dialog.Show(False) del dir_dialog def on_idle(self, evt): if self.process is not None: stream = self.process.GetInputStream() if stream.CanRead(): text = stream.read() self.text_output.write(text) # end of class MainFrame if __name__ == "__main__": app = wx.PySimpleApp(0) wx.InitAllImageHandlers() main_frame = MainFrame(None, -1, "") app.SetTopWindow(main_frame) main_frame.Show() app.MainLoop()