Skip to content

Commit 6461b2c

Browse files
committed
1.3.8.6
- The installer now removes old files from a previous installation (1.3.8 or older) This fixes the 'ImportError: DLL load failed while importing _html' error some users experienced. - Updated FluidSynth Windows binaries to latest version (2.2.4) - Fixed tab order in ABC settings menu - Escape key exits full screen mode
1 parent 10c4c12 commit 6461b2c

5 files changed

+74
-56
lines changed

CHANGES

+7
Original file line numberDiff line numberDiff line change
@@ -608,3 +608,10 @@ different panes. Tie/untie option added for notes. Broken rhythm
608608
- Left click on bottom third of the screen turns to next tune
609609
- Left click on top third of the screen turns to previous tune
610610
- Fixed: follow score stopped working when screen in portrait mode
611+
612+
1.3.8.6
613+
- The installer now removes old files from a previous installation (1.3.8 or older)
614+
This fixes the 'ImportError: DLL load failed while importing _html' error some users experienced.
615+
- Updated FluidSynth Windows binaries to latest version (2.2.4)
616+
- Fixed tab order in ABC settings menu
617+
- Escape key exits full screen mode

build.bat

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
python setup.py build
2-
"C:\Program Files (x86)\Inno Setup 5\iscc.exe" setupEasyABC.iss
1+
C:\Python38-32\python.exe setup.py build
2+
"C:\Program Files (x86)\Inno Setup 6\iscc.exe" setupEasyABC.iss

creating_an_executable.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ EasyABC comes with setup.py to create easy_abc.exe and setupEasyABC.iss to creat
44
You first need to be able to run easy_abc.py using Python.
55
See using_EasyABC_in_Windows.txt for that.
66

7-
Then you will also need to install on your computer the program Inno Setup 5 and the python package cx_Freeze:
8-
Inno Setup 5 can be downloaded here: https://jrsoftware.org/
7+
Then you will also need to install on your computer the program Inno Setup 6 and the python package cx_Freeze:
8+
Inno Setup 6 can be downloaded here: https://jrsoftware.org/
99

1010
And cx_Freeze can be installed using:
1111
python -m pip install --upgrade cx_Freeze

easy_abc.py

+48-44
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python3
22

3-
program_version = '1.3.8.5'
3+
program_version = '1.3.8.6'
44
program_name = 'EasyABC ' + program_version
55

66
# Copyright (C) 2011-2014 Nils Liberg (mail: kotorinl at yahoo.co.uk)
@@ -2013,10 +2013,10 @@ def __init__(self, parent, settings, statusbar):
20132013
nb = wx.Notebook(p)
20142014
# 1.3.6.4 [SS] 2015-05-26 added statusbar
20152015
abcsettings = AbcFileSettingsFrame(nb, settings, statusbar, parent.mc)
2016+
abcm2pspage = MyAbcm2psPage(nb, settings, abcsettings)
20162017
self.chordpage = MyChordPlayPage(nb, settings)
20172018
self.voicepage = MyVoicePage(nb, settings)
20182019
# 1.3.6.1 [SS] 2015-02-02
2019-
abcm2pspage = MyAbcm2psPage(nb, settings, abcsettings)
20202020
xmlpage = MusicXmlPage(nb, settings)
20212021
colorsettings = ColorSettingsFrame(nb, settings)
20222022
nb.AddPage(abcm2pspage, _("Abcm2ps"))
@@ -2073,14 +2073,6 @@ def __init__(self, parent, settings, statusbar, mc):
20732073
else:
20742074
self.exe_file_mask = '*'
20752075

2076-
self.restore_settings = wx.Button(self, wx.ID_ANY, _('Restore settings')) # 1.3.6.3 [JWDJ] 2015-04-25 renamed
2077-
check_toolTip = _('Restore default file paths to abcm2ps, abc2midi, abc2abc, ghostscript when blank')
2078-
self.restore_settings.SetToolTip(wx.ToolTip(check_toolTip))
2079-
2080-
# 1.3.6.3 [SS] 2015-04-29
2081-
extraplayerparam = wx.StaticText(self, wx.ID_ANY, _("Extra MIDI player parameters"))
2082-
self.extras = wx.TextCtrl(self, wx.ID_ANY, size=(200, 22))
2083-
20842076
sizer = rcs.RowColSizer()
20852077
if wx.Platform == "__WXMAC__":
20862078
sizer.Add(wx.StaticText(self, wx.ID_ANY, _('File paths to required executables') + ':'), row=0, col=0, colspan=2, flag=wx.ALL, border=border)
@@ -2133,11 +2125,19 @@ def __init__(self, parent, settings, statusbar, mc):
21332125

21342126
self.chkIncludeHeader = wx.CheckBox(self, wx.ID_ANY, _('Include file header when rendering tunes'))
21352127

2128+
# 1.3.6.3 [SS] 2015-04-29
2129+
extraplayerparam = wx.StaticText(self, wx.ID_ANY, _("Extra MIDI player parameters"))
2130+
self.extras = wx.TextCtrl(self, wx.ID_ANY, size=(200, 22))
2131+
21362132
midiplayer_params_sizer = rcs.RowColSizer()
21372133
midiplayer_params_sizer.Add(self.chkIncludeHeader, row=0, col=0, colspan=2, flag=wx.ALL, border=border)
21382134
midiplayer_params_sizer.Add(extraplayerparam, row=1, col=0, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border)
21392135
midiplayer_params_sizer.Add(self.extras, row=1, col=1, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border)
21402136

2137+
self.restore_settings = wx.Button(self, wx.ID_ANY, _('Restore settings')) # 1.3.6.3 [JWDJ] 2015-04-25 renamed
2138+
check_toolTip = _('Restore default file paths to abcm2ps, abc2midi, abc2abc, ghostscript when blank')
2139+
self.restore_settings.SetToolTip(wx.ToolTip(check_toolTip))
2140+
21412141
# build settings dialog with the previously defined box
21422142
self.sizer = wx.BoxSizer(wx.VERTICAL)
21432143
self.sizer.Add(box2, flag=wx.ALL | wx.EXPAND, border=10)
@@ -2274,11 +2274,22 @@ def __init__(self, parent, settings):
22742274
self.settings = settings
22752275

22762276
# 1.3.6.4 [SS] 2015-05-28 shrunk width from 250 to 200
2277-
self.chkPlayChords = wx.CheckBox(self, wx.ID_ANY, _('Play chords'))
22782277
self.cmbMidiProgram = wx.ComboBox(self, wx.ID_ANY, choices=[], size=(200, 26), style=wx.CB_DROPDOWN | wx.CB_READONLY)
2278+
#1.3.6.4 [SS] 2015-07-08
2279+
self.sliderVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2280+
size=(128, -1), style=wx.SL_HORIZONTAL)
2281+
self.Voltxt = wx.StaticText(self, wx.ID_ANY, " ")
2282+
22792283
self.cmbMidiChordProgram = wx.ComboBox(self, wx.ID_ANY, choices=[], size=(200, 26), style=wx.CB_DROPDOWN | wx.CB_READONLY)
2284+
#1.3.6.4 [SS] 2015-06-07
2285+
self.sliderChordVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2286+
size=(128, -1), style=wx.SL_HORIZONTAL)
2287+
self.ChordVoltxt = wx.StaticText(self, wx.ID_ANY, " ")
2288+
22802289
self.cmbMidiBassProgram = wx.ComboBox(self, wx.ID_ANY, choices=[], size=(200, 26), style=wx.CB_DROPDOWN | wx.CB_READONLY)
2281-
#1.3.6 [SS] 2014-11-15
2290+
self.sliderBassVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2291+
size=(128, -1), style=wx.SL_HORIZONTAL)
2292+
self.BassVoltxt = wx.StaticText(self, wx.ID_ANY, " ")
22822293

22832294
#1.3.6.4 [SS] 2015-06-10
22842295
self.sliderbeatsperminute = wx.Slider(self, value=120, minValue=60, maxValue=240,
@@ -2291,19 +2302,8 @@ def __init__(self, parent, settings):
22912302
self.transposetxt = wx.StaticText(self, wx.ID_ANY, " ")
22922303
self.tuningtxt = wx.StaticText(self, wx.ID_ANY, " ")
22932304

2294-
#1.3.6.4 [SS] 2015-07-08
2295-
self.sliderVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2296-
size=(128, -1), style=wx.SL_HORIZONTAL)
2297-
self.Voltxt = wx.StaticText(self, wx.ID_ANY, " ")
2298-
#1.3.6.4 [SS] 2015-06-07
2299-
self.sliderChordVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2300-
size=(128, -1), style=wx.SL_HORIZONTAL)
2301-
self.ChordVoltxt = wx.StaticText(self, wx.ID_ANY, " ")
2302-
self.sliderBassVol = wx.Slider(self, value=default_midi_volume, minValue=0, maxValue=127,
2303-
size=(128, -1), style=wx.SL_HORIZONTAL)
2304-
self.BassVoltxt = wx.StaticText(self, wx.ID_ANY, " ")
2305-
23062305
#1.3.6 [SS] 2014-11-21
2306+
self.chkPlayChords = wx.CheckBox(self, wx.ID_ANY, _('Play chords'))
23072307
self.nodynamics = wx.CheckBox(self, wx.ID_ANY, _('Ignore Dynamics'))
23082308
self.nofermatas = wx.CheckBox(self, wx.ID_ANY, _('Ignore Fermatas'))
23092309
self.nograce = wx.CheckBox(self, wx.ID_ANY, _('No Grace Notes'))
@@ -2801,7 +2801,6 @@ def __init__(self, parent, settings, abcsettingspage):
28012801
headingtxt = _('The options in this page controls how the music score is displayed.\n\n')
28022802
heading = wx.StaticText(self, wx.ID_ANY, headingtxt)
28032803

2804-
28052804
clean = wx.StaticText(self, wx.ID_ANY, _("No page settings"))
28062805
defaults = wx.StaticText(self, wx.ID_ANY, _("EasyABC defaults"))
28072806
numberbars = wx.StaticText(self, wx.ID_ANY, _("Include bar numbers"))
@@ -2816,6 +2815,14 @@ def __init__(self, parent, settings, abcsettingspage):
28162815
pagewidth = wx.StaticText(self, wx.ID_ANY, _("Page width (cm)"))
28172816
pageheight = wx.StaticText(self, wx.ID_ANY, _("Page height (cm)"))
28182817

2818+
scalefact = wx.StaticText(self, wx.ID_ANY, _("Scale factor (eg. 0.8)"))
2819+
self.chkm2psclean = wx.CheckBox(self, wx.ID_ANY, '')
2820+
self.chkm2psdef = wx.CheckBox(self, wx.ID_ANY, '')
2821+
self.chkm2psbar = wx.CheckBox(self, wx.ID_ANY, '')
2822+
self.chkm2psref = wx.CheckBox(self, wx.ID_ANY, '')
2823+
self.chkm2pslyr = wx.CheckBox(self, wx.ID_ANY, '')
2824+
self.chkm2psend = wx.CheckBox(self, wx.ID_ANY, '')
2825+
28192826
extras = wx.StaticText(self, wx.ID_ANY, _("Extra parameters"))
28202827
self.extras = wx.TextCtrl(self, wx.ID_ANY, size=(350, 22))
28212828
formatf = wx.StaticText(self, wx.ID_ANY, _("Format file"))
@@ -2829,13 +2836,6 @@ def __init__(self, parent, settings, abcsettingspage):
28292836

28302837
self.browsef = wx.Button(self, wx.ID_ANY, _('Browse...'), size = (-1, 22))
28312838

2832-
scalefact = wx.StaticText(self, wx.ID_ANY, _("Scale factor (eg. 0.8)"))
2833-
self.chkm2psclean = wx.CheckBox(self, wx.ID_ANY, '')
2834-
self.chkm2psdef = wx.CheckBox(self, wx.ID_ANY, '')
2835-
self.chkm2psbar = wx.CheckBox(self, wx.ID_ANY, '')
2836-
self.chkm2psref = wx.CheckBox(self, wx.ID_ANY, '')
2837-
self.chkm2pslyr = wx.CheckBox(self, wx.ID_ANY, '')
2838-
self.chkm2psend = wx.CheckBox(self, wx.ID_ANY, '')
28392839
self.leftmargin = wx.TextCtrl(self, wx.ID_ANY, size=(55, 22))
28402840
self.rightmargin = wx.TextCtrl(self, wx.ID_ANY, size=(55, 22))
28412841
self.topmargin = wx.TextCtrl(self, wx.ID_ANY, size=(55, 22))
@@ -3175,25 +3175,25 @@ def __init__(self, parent, settings):
31753175
heading = wx.StaticText(self, wx.ID_ANY, headingtxt)
31763176
abc2xml = wx.StaticText(self, wx.ID_ANY, _("abc2xml options"))
31773177
compressed = wx.StaticText(self, wx.ID_ANY, _('Compressed xml'))
3178-
xmlpage = wx.StaticText(self, wx.ID_ANY, _('Page settings'))
3178+
xml2abc = wx.StaticText(self, wx.ID_ANY, _('xml2abc option'))
31793179
unfold = wx.StaticText(self, wx.ID_ANY, _('Unfold Repeats'))
31803180
mididata = wx.StaticText(self, wx.ID_ANY, _('Midi Data'))
31813181
volta = wx.StaticText(self, wx.ID_ANY, _('Volta type setting'))
3182-
xml2abc = wx.StaticText(self, wx.ID_ANY, _('xml2abc option'))
31833182
numchar = wx.StaticText(self, wx.ID_ANY, _('characters/line'))
31843183
numbars = wx.StaticText(self, wx.ID_ANY, _('bars per line'))
31853184
credit = wx.StaticText(self, wx.ID_ANY, _('credit filter'))
31863185
ulength = wx.StaticText(self, wx.ID_ANY, _('unit length'))
3186+
xmlpage = wx.StaticText(self, wx.ID_ANY, _('Page settings'))
31873187

3188-
self.XmlPage = wx.TextCtrl(self, wx.ID_ANY)
3188+
self.chkXmlCompressed = wx.CheckBox(self, wx.ID_ANY, '')
3189+
self.chkXmlUnfold = wx.CheckBox(self, wx.ID_ANY, '')
3190+
self.chkXmlMidi = wx.CheckBox(self, wx.ID_ANY, '')
3191+
self.voltaval = wx.TextCtrl(self, wx.ID_ANY)
31893192
self.maxchars = wx.TextCtrl(self, wx.ID_ANY)
31903193
self.maxbars = wx.TextCtrl(self, wx.ID_ANY)
3191-
self.voltaval = wx.TextCtrl(self, wx.ID_ANY)
31923194
self.creditval = wx.TextCtrl(self, wx.ID_ANY)
31933195
self.unitval = wx.TextCtrl(self, wx.ID_ANY)
3194-
self.chkXmlCompressed = wx.CheckBox(self, wx.ID_ANY, '')
3195-
self.chkXmlUnfold = wx.CheckBox(self, wx.ID_ANY, '')
3196-
self.chkXmlMidi = wx.CheckBox(self, wx.ID_ANY, '')
3196+
self.XmlPage = wx.TextCtrl(self, wx.ID_ANY)
31973197

31983198
self.chkXmlCompressed.SetValue(self.settings.get('xmlcompressed',False))
31993199
self.chkXmlUnfold.SetValue(self.settings.get('xmlunfold',False))
@@ -4094,8 +4094,7 @@ def __init__(self, parent, ID, app_dir, settings, options):
40944094
self.music_pane.Bind(wx.EVT_LEFT_DCLICK, self.OnMusicPaneDoubleClick)
40954095
self.music_pane.Bind(wx.EVT_LEFT_DOWN, self.OnMusicPaneClick)
40964096
self.music_pane.Bind(wx.EVT_RIGHT_DOWN, self.OnRightClickMusicPane)
4097-
4098-
#self.music_pane.Bind(wx.EVT_KEY_DOWN, self.OnMusicPaneKeyDown)
4097+
# self.music_pane.Bind(wx.EVT_KEY_DOWN, self.OnMusicPaneKeyDown)
40994098

41004099
self.load_and_apply_settings(load_window_size_pos=True)
41014100
self.restore_settings()
@@ -5648,6 +5647,8 @@ def OnMusicPaneKeyDown(self, evt):
56485647
self.transpose_selected_note(1)
56495648
elif c == wx.WXK_DOWN and evt.CmdDown():
56505649
self.transpose_selected_note(-1)
5650+
else:
5651+
evt.Skip()
56515652

56525653
def OnRightClickList(self, evt):
56535654
self.selected_tune = self.tunes[evt.Index]
@@ -7274,12 +7275,15 @@ def GrayUngray(self, evt=None):
72747275
mni.Enable(self.mni_TA_active.IsChecked())
72757276

72767277
def OnUpdate(self, evt):
7277-
if evt.GetKeyCode() == 344: #F5
7278+
c = evt.GetKeyCode()
7279+
if c == wx.WXK_ESCAPE and self.is_fullscreen:
7280+
self.toggle_fullscreen(evt)
7281+
elif c == 344: #F5
72787282
self.refresh_tunes()
7279-
elif evt.GetKeyCode() == 345: #F6
7283+
elif c == 345: #F6
72807284
self.OnToolPlay(evt)
72817285
self.play_button.Refresh()
7282-
elif evt.GetKeyCode() == 346: #F7
7286+
elif c == 346: #F7
72837287
self.OnToolStop(evt)
72847288
else:
72857289
evt.Skip()

setupEasyABC.iss

+15-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
; Seymour Shlien
1010

1111
#define MyAppName "EasyABC"
12-
#define MyAppVersion "1.3.8.5"
12+
#define MyAppVersion "1.3.8.6"
1313
#define MyAppPublisher "Seymour Shlien"
1414
#define MyAppURL "ifdo.ca/~seymour/easy/"
1515
#define MyAppExeName "easy_abc.exe"
@@ -28,7 +28,7 @@ AppPublisher={#MyAppPublisher}
2828
AppPublisherURL={#MyAppURL}
2929
AppSupportURL={#MyAppURL}
3030
AppUpdatesURL={#MyAppURL}
31-
DefaultDirName={pf}\{#MyAppName}
31+
DefaultDirName={commonpf}\{#MyAppName}
3232
DefaultGroupName={#MyAppName}
3333
LicenseFile={#MyBuildFolder}\gpl-license.txt
3434
OutputBaseFilename=EasyABC-{#MyAppVersion}
@@ -42,6 +42,18 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
4242
[Tasks]
4343
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
4444

45+
[InstallDelete]
46+
Type: files; Name: "{app}\easy_abc.exe"
47+
Type: files; Name: "{app}\easy_abc.zip"
48+
Type: files; Name: "{app}\wx*.dll"
49+
Type: files; Name: "{app}\*.pyd"
50+
Type: files; Name: "{app}\easy_abc.exe.manifest"
51+
Type: files; Name: "{app}\python27.dll"
52+
Type: files; Name: "{app}\pywintypes27.dll"
53+
Type: files; Name: "{app}\sqlite3.dll"
54+
Type: files; Name: "{app}\library.zip"
55+
Type: filesandordirs; Name: "{app}\Microsoft.VC90.CRT"
56+
4557
[Files]
4658
Source: "{#MyBuildFolder}\easy_abc.exe"; DestDir: "{app}"; Flags: ignoreversion
4759
Source: "{#MyBuildFolder}\gpl-license.txt"; DestDir: "{app}"; Flags: ignoreversion
@@ -52,12 +64,7 @@ Source: "{#MyBuildFolder}\VCRUNTIME140.dll"; DestDir: "{app}"; Flags: ignorevers
5264
Source: "{#MyBuildFolder}\lib\*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs createallsubdirs
5365
Source: "{#MyBuildFolder}\bin\*"; DestDir: "{app}\bin\"; Flags: ignoreversion recursesubdirs createallsubdirs
5466
Source: "{#MyBuildFolder}\img\*"; DestDir: "{app}\img\"; Flags: ignoreversion recursesubdirs createallsubdirs
55-
Source: "{#MyBuildFolder}\locale\da\*"; DestDir: "{app}\locale\da\"; Flags: ignoreversion recursesubdirs createallsubdirs
56-
Source: "{#MyBuildFolder}\locale\fr\*"; DestDir: "{app}\locale\fr\"; Flags: ignoreversion recursesubdirs createallsubdirs
57-
Source: "{#MyBuildFolder}\locale\it\*"; DestDir: "{app}\locale\it\"; Flags: ignoreversion recursesubdirs createallsubdirs
58-
Source: "{#MyBuildFolder}\locale\nl\*"; DestDir: "{app}\locale\nl\"; Flags: ignoreversion recursesubdirs createallsubdirs
59-
Source: "{#MyBuildFolder}\locale\ja\*"; DestDir: "{app}\locale\ja\"; Flags: ignoreversion recursesubdirs createallsubdirs
60-
Source: "{#MyBuildFolder}\locale\sv\*"; DestDir: "{app}\locale\sv\"; Flags: ignoreversion recursesubdirs createallsubdirs
67+
Source: "{#MyBuildFolder}\locale\*"; DestDir: "{app}\locale\"; Flags: ignoreversion recursesubdirs createallsubdirs
6168
Source: "{#MyBuildFolder}\sound\*"; DestDir: "{app}\sound\"; Flags: ignoreversion recursesubdirs createallsubdirs
6269
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
6370

0 commit comments

Comments
 (0)