Add a wxpython GUI frontend for wmllint.
Has not been tested under Win32/Mac OS yet.
This commit is contained in:
parent
f14954ab5b
commit
2911814496
1 changed files with 227 additions and 0 deletions
227
data/tools/wmllint_gui
Executable file
227
data/tools/wmllint_gui
Executable file
|
@ -0,0 +1,227 @@
|
|||
#!/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()
|
||||
wx.Execute(cmd, wx.EXEC_ASYNC, self.process)
|
||||
|
||||
def button_convert(self, event): # wxGlade: MainFrame.<event_handler>
|
||||
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, result):
|
||||
if result == 0:
|
||||
self.text_output.write("Failed!")
|
||||
else:
|
||||
self.text_output.write("Completed.")
|
||||
self.set_running(False)
|
||||
self.process = None
|
||||
|
||||
|
||||
def button_browse(self, event): # wxGlade: MainFrame.<event_handler>
|
||||
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()
|
Loading…
Add table
Reference in a new issue