You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

436 lines
21 KiB

Index: python-dsv-1.4.1/DSV/DSV.py
===================================================================
--- python-dsv-1.4.1.orig/DSV/DSV.py 2010-01-26 20:35:23.000000000 -0500
+++ python-dsv-1.4.1/DSV/DSV.py 2010-01-26 20:37:59.000000000 -0500
@@ -2,6 +2,9 @@
DSV.py - Cliff Wells, 2002
Import/export DSV (delimiter separated values, a generalization of CSV).
+2007-01-09: Modified by Joe Pham <djpham@bitpim.org> to accommodate
+ wxPython 2.8+
+
Basic use:
from DSV import DSV
@@ -133,8 +136,14 @@
# import os
# os.putenv('LANG', 'C')
+##try:
+## from wxPython import wx, grid
+##except ImportError:
+## wx = None
+
try:
- from wxPython import wx, grid
+ import wx
+ import wx.grid as gridlib
except ImportError:
wx = None
@@ -625,19 +634,19 @@
if wx is not None:
# ------------------------------------------------------------------------------
- class ImportWizardPanel_Delimiters(wx.wxPanel):
+ class ImportWizardPanel_Delimiters(wx.Panel):
"""
CLASS(SUPERCLASS):
- ImportWizardPanel_Delimiters(wx.wxPanel)
+ ImportWizardPanel_Delimiters(wx.Panel)
DESCRIPTION:
- A wx.wxPanel that provides a basic interface for validating and changing the
+ A wx.Panel that provides a basic interface for validating and changing the
parameters for importing a delimited text file. Similar to MS Excel's
CSV import wizard. Can be used in a series of wizards or embedded in an
application.
PROTOTYPE:
ImportWizardPanel_Delimiters(parent, id, file, data, isValidCallback = None,
- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
- style = wx.wxTAB_TRAVERSAL, name = 'ImportWizardPanel')
+ pos = wx.DefaultPosition, size = wx.DefaultSize,
+ style = wx.TAB_TRAVERSAL, name = 'ImportWizardPanel')
ARGUMENTS:
- parent is the parent window
- id is the id of this wizard panel
@@ -657,24 +666,24 @@
"""
def __init__(self, parent, id, file, data, isValidCallback = None,
- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
- style = wx.wxTAB_TRAVERSAL, name = "ImportWizardPanel"):
- wx.wxPanel.__init__(self, parent, id, pos, size, style, name)
- self.SetAutoLayout(wx.true)
- mainSizer = wx.wxFlexGridSizer(3, 1)
+ pos = wx.DefaultPosition, size = wx.DefaultSize,
+ style = wx.TAB_TRAVERSAL, name = "ImportWizardPanel"):
+ wx.Panel.__init__(self, parent, id, pos, size, style, name)
+ self.SetAutoLayout(True)
+ mainSizer = wx.FlexGridSizer(3, 1)
self.SetSizer(mainSizer)
mainSizer.AddGrowableCol(0)
- self.initialized = wx.false
+ self.initialized = False
self.data = data
self.isValidCallback = isValidCallback
self.Validate = (isValidCallback and self.Validate) or self.BuildPreview
- dlg = wx.wxProgressDialog("Import Wizard",
+ dlg = wx.ProgressDialog("Import Wizard",
"Analyzing %s... Please wait." % file,
3,
parent,
- wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
+ wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
textQualifier = guessTextQualifier(data)
dlg.Update(1)
newdata = organizeIntoLines(data, textQualifier = textQualifier, limit = 100)
@@ -686,13 +695,13 @@
# -------------
msg = ("This screen lets you set the delimiters your data contains.\n"
"You can see how your data is affected in the preview below.")
- message1 = wx.wxStaticText(self, -1, msg)
+ message1 = wx.StaticText(self, -1, msg)
# -------------
- delimiterBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
- delimStaticBox = wx.wxStaticBox(self, -1, "Delimiters")
- delimStaticSizer = wx.wxStaticBoxSizer(delimStaticBox, wx.wxVERTICAL)
- delimGridSizer = wx.wxFlexGridSizer(2, 3)
+ delimiterBox = wx.BoxSizer(wx.HORIZONTAL)
+ delimStaticBox = wx.StaticBox(self, -1, "Delimiters")
+ delimStaticSizer = wx.StaticBoxSizer(delimStaticBox, wx.VERTICAL)
+ delimGridSizer = wx.FlexGridSizer(2, 3)
delims = {
'Tab': '\t',
@@ -704,36 +713,36 @@
self.delimChecks = {}
for label, value in delims.items():
- self.delimChecks[value] = wx.wxCheckBox(self, -1, label)
- delimGridSizer.Add(self.delimChecks[value], 0, wx.wxALL, 3)
+ self.delimChecks[value] = wx.CheckBox(self, -1, label)
+ delimGridSizer.Add(self.delimChecks[value], 0, wx.ALL, 3)
wx.EVT_CHECKBOX(self, self.delimChecks[value].GetId(), self.Validate)
- otherSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
+ otherSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.delimChecks['Other'] = wx.wxCheckBox(self, -1, 'Other:')
+ self.delimChecks['Other'] = wx.CheckBox(self, -1, 'Other:')
wx.EVT_CHECKBOX(self, self.delimChecks['Other'].GetId(), self.Validate)
- self.otherDelim = wx.wxTextCtrl(self, -1, size = (20, -1))
+ self.otherDelim = wx.TextCtrl(self, -1, size = (20, -1))
wx.EVT_TEXT(self, self.otherDelim.GetId(), self.OnCustomDelim)
if self.delimChecks.has_key(delimiter):
- self.delimChecks[delimiter].SetValue(wx.true)
+ self.delimChecks[delimiter].SetValue(True)
elif delimiter is not None:
- self.delimChecks['Other'].SetValue(wx.true)
+ self.delimChecks['Other'].SetValue(True)
self.otherDelim.SetValue(delimiter)
otherSizer.AddMany([
- (self.delimChecks['Other'], 0, wx.wxALL, 3),
- (self.otherDelim, 0, wx.wxALIGN_CENTER),
+ (self.delimChecks['Other'], 0, wx.ALL, 3),
+ (self.otherDelim, 0, wx.ALIGN_CENTER),
])
delimGridSizer.Add(otherSizer)
- delimStaticSizer.Add(delimGridSizer, 1, wx.wxEXPAND)
- delimOtherSizer = wx.wxBoxSizer(wx.wxVERTICAL)
- self.consecutiveDelimsAs1 = wx.wxCheckBox(self, -1, "Treat consecutive delimiters as one")
- self.consecutiveDelimsAs1.Enable(wx.false)
- tqSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
- self.textQualifierChoice = wx.wxChoice(self, -1, choices = ['"', "'", "{None}"])
+ delimStaticSizer.Add(delimGridSizer, 1, wx.EXPAND)
+ delimOtherSizer = wx.BoxSizer(wx.VERTICAL)
+ self.consecutiveDelimsAs1 = wx.CheckBox(self, -1, "Treat consecutive delimiters as one")
+ self.consecutiveDelimsAs1.Enable(False)
+ tqSizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.textQualifierChoice = wx.Choice(self, -1, choices = ['"', "'", "{None}"])
wx.EVT_CHOICE(self, self.textQualifierChoice.GetId(), self.BuildPreview)
if textQualifier is not None:
self.textQualifierChoice.SetStringSelection(textQualifier)
@@ -741,52 +750,52 @@
self.textQualifierChoice.SetStringSelection('{None}')
tqSizer.AddMany([
- (wx.wxStaticText(self, -1, "Text qualifier:"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
- (self.textQualifierChoice, 0, wx.wxALL | wx.wxALIGN_LEFT | wx.wxALIGN_CENTER_VERTICAL, 5),
+ (wx.StaticText(self, -1, "Text qualifier:"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
+ (self.textQualifierChoice, 0, wx.ALL | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, 5),
])
delimOtherSizer.AddMany([
- (self.consecutiveDelimsAs1, 1, wx.wxEXPAND | wx.wxALL, 5),
- (tqSizer, 1, wx.wxALL | wx.wxALIGN_CENTER, 5),
+ (self.consecutiveDelimsAs1, 1, wx.EXPAND | wx.ALL, 5),
+ (tqSizer, 1, wx.ALL | wx.ALIGN_CENTER, 5),
])
delimiterBox.AddMany([
- (delimStaticSizer, 0, wx.wxALIGN_CENTER),
- (delimOtherSizer, 0, wx.wxALIGN_CENTER),
+ (delimStaticSizer, 0, wx.ALIGN_CENTER),
+ (delimOtherSizer, 0, wx.ALIGN_CENTER),
])
delimStaticBox.Fit()
# -------------
self.displayRows = 6
- previewSettingsBox = wx.wxBoxSizer(wx.wxHORIZONTAL)
- self.hasHeaderRow = wx.wxCheckBox(self, -1, "First row is header")
+ previewSettingsBox = wx.BoxSizer(wx.HORIZONTAL)
+ self.hasHeaderRow = wx.CheckBox(self, -1, "First row is header")
wx.EVT_CHECKBOX(self, self.hasHeaderRow.GetId(), self.BuildPreview)
- if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
- # wx.wxSpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.wxSpinButton instead
- self.previewRowsText = wx.wxTextCtrl(self, -1, str(self.displayRows),
- size = (30, -1), style = wx.wxTE_PROCESS_ENTER)
+ if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
+ # wx.SpinCtrl causes seg fault under GTK when <enter> is hit in text - use wx.SpinButton instead
+ self.previewRowsText = wx.TextCtrl(self, -1, str(self.displayRows),
+ size = (30, -1), style = wx.TE_PROCESS_ENTER)
h = self.previewRowsText.GetSize().height
- self.previewRows = wx.wxSpinButton(self, -1, size = (-1, h), style = wx.wxSP_VERTICAL)
+ self.previewRows = wx.SpinButton(self, -1, size = (-1, h), style = wx.SP_VERTICAL)
self.previewRows.SetRange(self.displayRows, 100)
self.previewRows.SetValue(self.displayRows)
wx.EVT_SPIN(self, self.previewRows.GetId(), self.OnSpinPreviewRows)
wx.EVT_TEXT_ENTER(self, self.previewRowsText.GetId(), self.OnTextPreviewRows)
else:
- self.previewRows = wx.wxSpinCtrl(self, -1, str(self.displayRows),
+ self.previewRows = wx.SpinCtrl(self, -1, str(self.displayRows),
min = self.displayRows, max = 100, size = (50, -1))
wx.EVT_SPINCTRL(self, self.previewRows.GetId(), self.BuildPreview)
previewSettingsBox.AddMany([
- (self.hasHeaderRow, 1, wx.wxALL | wx.wxEXPAND, 5),
- (wx.wxStaticText(self, -1, "Preview"), 0, wx.wxWEST | wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL, 10),
+ (self.hasHeaderRow, 1, wx.ALL | wx.EXPAND, 5),
+ (wx.StaticText(self, -1, "Preview"), 0, wx.WEST | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL, 10),
])
- if wx.wxPlatform in ('__WX.WXGTK__', '__WX.WXMSW__'):
- previewSettingsBox.Add(self.previewRowsText, 0, wx.wxALIGN_CENTER | wx.wxALL, 3)
+ if wx.Platform in ('__WX.WXGTK__', '__WX.WXMSW__'):
+ previewSettingsBox.Add(self.previewRowsText, 0, wx.ALIGN_CENTER | wx.ALL, 3)
previewSettingsBox.AddMany([
- (self.previewRows, 0, wx.wxALIGN_CENTER | wx.wxALL, 3),
- (wx.wxStaticText(self, -1, "rows"), 0, wx.wxALIGN_RIGHT | wx.wxALIGN_CENTER_VERTICAL),
+ (self.previewRows, 0, wx.ALIGN_CENTER | wx.ALL, 3),
+ (wx.StaticText(self, -1, "rows"), 0, wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL),
])
# -------------
@@ -804,28 +813,28 @@
hasHeaders = 0
cols = 1
- previewStaticBox = wx.wxStaticBox(self, -1, "Data Preview")
- previewStaticSizer = wx.wxStaticBoxSizer(previewStaticBox, wx.wxVERTICAL)
- self.preview = grid.wxGrid(self, -1)
+ previewStaticBox = wx.StaticBox(self, -1, "Data Preview")
+ previewStaticSizer = wx.StaticBoxSizer(previewStaticBox, wx.VERTICAL)
+ self.preview = gridlib.Grid(self, -1)
self.preview.CreateGrid(self.displayRows, cols)
- self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, wx.true)
- self.preview.EnableEditing(wx.false)
+ self.preview.SetDefaultRowSize(self.preview.GetCharHeight() + 4, True)
+ self.preview.EnableEditing(False)
self.preview.SetColLabelSize(0)
self.preview.SetRowLabelSize(0)
self.preview.SetMargins(1, 0)
- self.initialized = wx.true
+ self.initialized = True
self.BuildPreview()
rowheight = self.preview.GetRowSize(0) + 2
self.preview.SetSize((-1, rowheight * self.displayRows))
- previewStaticSizer.Add(self.preview, 0, wx.wxALL | wx.wxEXPAND, 5)
+ previewStaticSizer.Add(self.preview, 0, wx.ALL | wx.EXPAND, 5)
# -------------
mainSizer.AddMany([
- (message1, 0, wx.wxALL, 5),
- (delimiterBox, 0, wx.wxALL, 5),
- (previewSettingsBox, 0, wx.wxALL, 5),
- (previewStaticSizer, 0, wx.wxALL | wx.wxEXPAND, 5),
+ (message1, 0, wx.ALL, 5),
+ (delimiterBox, 0, wx.ALL, 5),
+ (previewSettingsBox, 0, wx.ALL, 5),
+ (previewStaticSizer, 0, wx.ALL | wx.EXPAND, 5),
])
self.Layout()
@@ -855,9 +864,9 @@
if not self.initialized:
return # got triggered before initialization was completed
- if wx.wxPlatform != '__WX.WXGTK__':
- wx.wxBeginBusyCursor() # causes a spurious spin event under GTK
- wx.wxYield() # allow controls to update first, in case of slow preview
+ if wx.Platform != '__WX.WXGTK__':
+ wx.BeginBusyCursor() # causes a spurious spin event under GTK
+ wx.Yield() # allow controls to update first, in case of slow preview
self.preview.BeginBatch()
self.preview.DeleteCols(0, self.preview.GetNumberCols())
self.preview.DeleteRows(0, self.preview.GetNumberRows())
@@ -892,7 +901,7 @@
for col in range(cols):
try: self.preview.SetColLabelValue(col, str(previewData[0][col]))
except: self.preview.SetColLabelValue(col, "")
- # self.preview.AutoSizeColumns(wx.true) # size columns to headers
+ # self.preview.AutoSizeColumns(True) # size columns to headers
else:
self.preview.SetColLabelSize(0)
@@ -902,13 +911,13 @@
except: pass
# if not hasHeaders:
- self.preview.AutoSizeColumns(wx.true) # size columns to data
+ self.preview.AutoSizeColumns(True) # size columns to data
rowheight = self.preview.GetRowSize(0)
self.preview.SetRowSize(0, rowheight)
self.preview.EndBatch()
- if wx.wxPlatform != '__WX.WXGTK__':
- wx.wxEndBusyCursor()
+ if wx.Platform != '__WX.WXGTK__':
+ wx.EndBusyCursor()
self.delimiters = delimiter
self.textQualifier = textQualifier
@@ -928,17 +937,17 @@
return self.hasHeaders
# ------------------------------------------------------------------------------
- class ImportWizardDialog(wx.wxDialog):
+ class ImportWizardDialog(wx.Dialog):
"""
CLASS(SUPERCLASS):
- ImportWizardDialog(wx.wxDialog)
+ ImportWizardDialog(wx.Dialog)
DESCRIPTION:
A dialog allowing the user to preview and change the options for importing
a file.
PROTOTYPE:
ImportWizardDialog(parent, id, title, file,
- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
- style = wx.wxDEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
+ pos = wx.DefaultPosition, size = wx.DefaultSize,
+ style = wx.DEFAULT_DIALOG_STYLE, name = 'ImportWizardDialog')
ARGUMENTS:
- parent: the parent window
- id: the id of this window
@@ -955,22 +964,22 @@
"""
def __init__(self, parent, id, title, file,
- pos = wx.wxDefaultPosition, size = wx.wxDefaultSize,
- style = wx.wxDEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
- wx.wxDialog.__init__(self, parent, id, title, pos, size, style, name)
- self.SetAutoLayout(wx.true)
+ pos = wx.DefaultPosition, size = wx.DefaultSize,
+ style = wx.DEFAULT_DIALOG_STYLE, name = "ImportWizardDialog"):
+ wx.Dialog.__init__(self, parent, id, title, pos, size, style, name)
+ self.SetAutoLayout(True)
self.file = file
f = open(file, 'r')
self.data = f.read()
f.close()
- sizer = wx.wxBoxSizer(wx.wxVERTICAL)
+ sizer = wx.BoxSizer(wx.VERTICAL)
self.delimPanel = ImportWizardPanel_Delimiters(self, -1, file, self.data, self.ValidState)
buttonBox = self.ButtonBox()
sizer.AddMany([
- (self.delimPanel, 0, wx.wxALL, 5),
- (buttonBox, 0, wx.wxSOUTH | wx.wxALIGN_CENTER_HORIZONTAL | wx.wxALIGN_TOP, 0),
+ (self.delimPanel, 0, wx.ALL, 5),
+ (buttonBox, 0, wx.SOUTH | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_TOP, 0),
])
self.SetSizer(sizer)
@@ -980,15 +989,15 @@
self.Centre()
def ButtonBox(self):
- panel = wx.wxPanel(self, -1)
- panel.SetAutoLayout(wx.true)
- sizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
+ panel = wx.Panel(self, -1)
+ panel.SetAutoLayout(True)
+ sizer = wx.BoxSizer(wx.HORIZONTAL)
panel.SetSizer(sizer)
- self.ok = wx.wxButton(panel, wx.wxID_OK, "Ok")
- cancel = wx.wxButton(panel, wx.wxID_CANCEL, "Cancel")
+ self.ok = wx.Button(panel, wx.ID_OK, "Ok")
+ cancel = wx.Button(panel, wx.ID_CANCEL, "Cancel")
sizer.AddMany([
- (self.ok, 0, wx.wxALIGN_TOP | wx.wxEAST | wx.wxSOUTH, 10),
- (cancel, 0, wx.wxALIGN_TOP | wx.wxWEST | wx.wxSOUTH, 10),
+ (self.ok, 0, wx.ALIGN_TOP | wx.EAST | wx.SOUTH, 10),
+ (cancel, 0, wx.ALIGN_TOP | wx.WEST | wx.SOUTH, 10),
])
panel.Layout()
panel.Fit()
@@ -1002,11 +1011,11 @@
def ImportData(self, errorHandler = skipRow):
delimiters, qualifier, hasHeaders = self.GetImportInfo()
self.data = organizeIntoLines(self.data, textQualifier = qualifier)
- dlg = wx.wxProgressDialog("Import DSV File",
+ dlg = wx.ProgressDialog("Import DSV File",
self.file,
100,
self,
- wx.wxPD_CAN_ABORT | wx.wxPD_APP_MODAL | wx.wxPD_AUTO_HIDE)
+ wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE)
self.data = importDSV(self.data,
delimiter = delimiters,
textQualifier = qualifier,
@@ -1034,12 +1043,12 @@
def demo():
- class SampleApp(wx.wxApp):
+ class SampleApp(wx.App):
def OnInit(self):
- dlg = wx.wxFileDialog(None, "Choose a file", ".", "",
+ dlg = wx.FileDialog(None, "Choose a file", ".", "",
"CSV files (*.csv)|*.csv|Text files (*.txt)|*.txt|All files (*.*)|*.*",
- wx.wxOPEN)
- if dlg.ShowModal() == wx.wxID_OK:
+ wx.OPEN)
+ if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
dlg.Destroy()
@@ -1049,7 +1058,7 @@
file.write("LINE %d: %s\n" % (linenumber, oldrow))
dlg = ImportWizardDialog(None, -1, 'CSV Import Wizard (v.%s)' % __version__, path)
- if dlg.ShowModal() == wx.wxID_OK:
+ if dlg.ShowModal() == wx.ID_OK:
results = dlg.ImportData(errorHandler = logErrors)
dlg.Destroy()
errorLog.close()
@@ -1074,7 +1083,7 @@
else:
dlg.Destroy()
- return wx.true
+ return True
app = SampleApp()
app.MainLoop()