Log of things done (ChangeLog)

Please, note that this page is updated in the website only at the end of each week.

Feb 06 | Jan 06 | Dec 05 | Nov 05 | Oct 05 | Sep 05 | Aug 05 | Jul 05 | Jun 05 | May 05 | Apr 05 | Mar 05 | Feb 05 to start

 

March 2006

Go to top of document
Date           Changes

18-mar-06
  • Bug fixed: printing.
  • Windows installer coding and testing. Ready for final tests.
17-mar-06
  • LDP tag 'Partitura' changed to 'Score' to comply with LDP language standard v4.0
  • Added LDPTags.cpp and .h to prepare program for supporting tags in different languages.
16-mar-06
  • Bug fixed: backward and forward hooks not parsed properly in MusicXML. Modified lmXMLParser::ParseMusicDataNote().
  • Bug fixed: forward and backward hooks in beamed groups not parallel to main beam. The problem was in LDParser::AnalyzeNote() that set wrong beam tags.
15-mar-06
  • Bug fixed in ScoreConstrains: time to align to beat computed wrongly in lmFragmentsTable::GetFirstSegmentDuracion().
  • Bug fixed in Composer5: when the selected fragment is going to start a measure, and if the fragment starts with a rest, the rest was not included. Composer algorithm reviewed; modified lmComposer5::GenerateScore().
  • Bug fixed in Composer5: method InstatiateNotes() was based in old '+l' LDP tags for ties and did not take into account new 'l' tags. Reviewed lmLDPParser::AnalyzeNote() to change old syntax as well as sample scores and eBoooks.
  • Bug fixed: stems too long if a rest inside the beamed group. The problem was in lmBeam::TrimStems()
14-mar-06 Converted music reading lessons 216, 217, 219, 220, 221, 222, 223 and 224. Level 2 coversion finished. Pending lesson names and final review.
13-mar-06
  • Bug fixed: crash when clicking on settins button in clefs reading exercise. The problem was in lmDlgCfgScoreReading::VerifyData(); it was modified to not verify data in non-displayed tabs.
  • Bug fixed: crash when acceptin new settings in clefs reading exercise. The problem was in lmDlgCfgScoreReading::OnAcceptClicked(); it was modified to not save data from non-displayed tabs.
  • AboutDialog: changed string initialization for supoorting Unicode.
  • Fixing bad English: Note name 32th changed to 32nd. Side Reading changed to Music Reading. TheoSideReadingCtrol and TheoSideReadingCtrolParams renamed as TheoMusicReadingCtrol and TheoMusicReadingCtrolParams
11-mar-06
  • Rest position adjusted
  • Dot in dotted notes and rests moved 1 tenth to right, so spacing is now half line.
Lesson 214. Content reviewed. Lessons formatting reviewed.
10-mar-06
  • LDP syntax for tuplets reviewed. The '(g + t3)' syntax is dirty: it forces to assume that 'g-' implies 't-' (and this is not always the case in real scores); it moves the 't3' notation inside de 'g' notation (more complex); and the gain to save writting is minimal. Compare with the alternative: '(n c4 c g+ t3) (n d4 c) (n e4 c g- t-)'. So the '(g + t3)' syntax has been removed. LDPParser modified accordingly.
  • lmLDPParser::AnalysisError() method modified to accept a variable argument list (as printf) and, thus, avoiding to have to invoke wxString::Format constantly.
  • All error messages in LDPParser translated to English and reviewed for internationalization.
Converted music reading lesson 215.
9-mar-06
  • MainFrame: added method DumpScore() to facilitate debugging.
  • Bug detected and fixed: notes duration for second and third note in a triplet is computed wrong in LDP Parser. Method AnalyzeNote() modified. Reviewed usage of enum ETuplas. It were used in version 2.0 but with the creation of object lmTupletBracket it is no longer needed. Removed from all program. With all this the bug of 7/mar (Bad composed scores when triplets in patterns) is fixed.
  • Method VStaff::GetTotalDuration() removed. Too specific and currently not used.
8-mar-06
  • lmFragmentsTable::GetFirstSegmentDuracion() re-coded to convert source pattern to a score and take duration from score info. Testing.
  • Starting to document Score API.
7-mar-06 Testing version Beta 3.0b0 and improving program robustness:
  • Bug fixed: Dot was drawn too high in dotted rests.
Converted music reading lessons 212 and 214. Detected problems with triplets.
  • Starting to fix bug: Bad composed scores when triplets in patterns. The problem is in current method AuxString::SrcGetPatternDuracion(). It does not work for irregular groups (i.e. triplets). This causes badly composed scores. Intended solution: not to work with source patterns but convert source to a score; then take duration from score. Modifications: Added methods lmVStaff::GetTotalDuration(), lmFragmentsTable::GetPatternDuracion(). Need to review lmFragmentsTable::GetFirstSegmentDuracion().
6-mar-06 Testing version Beta 3.0b0 and improving program robustness:
  • Bad code fixed: replaced Unicode constants L'*' by build type dependent expresion _T('*').
  • Bug fixed in lmComposer5::GenerateScore(): Key signature was not generated according to exercise constrains but at ramdom.
  • Starting to fix bug: Dot drawn too high in dotted rests. lmRest::DrawObject() modified to add vertical displacement. Struct lmGlyph moved from Note.cpp to Glyph.h and Glyph.cpp
Converted music reading lessons 208, 209, 210 and 211.
3-mar-06 Testing version Beta 3.0b0 and improving program robustness:
  • Bug fixed in Conversion.cpp: note names in upper case letters caused problems in TheoScalesCtrol.
  • Bug fixed in lmTheoScalesCtrol::NewProblem(): type of problem not initialized.
  • Bug fixed in TheoIntervalsCtrol::NewProblem(): note type was upper case and caused problems in parsing.
2-mar-06 Testing version Beta 3.0b0 and improving program robustness:
  • Bug fixed in ScoreCtrolParams and TheoMusicReadingCtrolParms: old G syntax improperly detected when triplets.
  • Homogenized html params for control play and control solfa between ScoreCtrol and MusicReading Ctrol. lmMusicReadingCtrolOptions modified to include play and solfa labels.
  • Bug fixed in SoundManager and VStaff: play a measure did not worked properly.
  • LDPParser: replaced wxASSERT with code to deal with the error, to avoid program crashes when bad score syntax, in methods AnalyzeNote(), AnalyzeBarline(), AnalyzeClef().
LDP Parser: Added AnalyzeTimeSignature(). Modified AnalyzeMeasure() to use it.
1-mar-06 Testing version Beta 3.0b0 and improving program robustness:
  • ScoreCtrolParams: moved from Tag.cpp to a file. Modified to include error reporting and to avoid crashes when invalid html params. Cleaning code.
  • lmLDPParser: modified method PopNode() to avoid crashes when bad score syntax. Added A5_ExitError state to automata.
  • Documenting: how to write eMusicBooks

February 2006

Go to top of document
Date           Changes

28-feb-06 Testing version Beta 3.0b0:
  • Bug fixed in TheoMusicReadingCtrolParms: key signatures not properly parsed.
    • TheoMusicReadingCtrolParms: modified to include error reporting; member variable m_sParamErrors included.
    • AuxString.cpp: Global function LDPNameToKey() added.
    • LDPParser: added method ParenthesisMatch()
25-feb-06 Testing version Beta 3.0b0:
  • Bug fixed: in the first run, when no .ini file, the splash hides the MIDI wizard. SplashFrame: added method TerminateSplash(). TheApp: added cursor busy logic.
  • Default value for toolbar: changed to labels under icon.
  • Bug fixed in DlgCfgReadingSettings: for clefs reading settings variables for music reading options where initialized after having destroyed panels not used in clefs reading options.
23-feb-06
  • AboutDialog: added credits for icons. Memory leaks detected and fixed.
  • MainFrame: added conditional compilation statment to define wxID_NEW and wx_ID_OPEN in debug version.
  • Copyright year updated to 2006 in all files.
21-feb-06 Implementation of DlgCfgScoreReading dialog finished for music reading options except fragments tab options, that requiere to finish DlgPatternEditor. DlgCfgScoreReading music reading options is not necessary for 3.0 release as single music reading exercises will be replaced by music reading exercises in each lesson. The 'new' single music reading exercise will requiere to have a fragments editor:
  • DlgCfgScoreReading: Time signatures selection implemented and tested. ScoreConstrains: Load / save time signature settings implemented and tested.
  • DlgCfgScoreReading: Key signatures selection implemented and tested. ScoreConstrains: Load / save key signature settings implemented and tested.
  • Bug fixed in lmTheoMusicReadingCtrolParms::AnalyzeKeys() causing improper setings when html param value=all
Bug fixed in TheoKeySignCtrol: in reverse problem (ask for number of accidentals) the link 'show solution' did nothing.
17-feb-06
  • DlgCfgScoreRedaing dialog finished for clefs reading options. Default settings now taken from html param tags.
  • Some cleaning to prepare beta release:
    • lmSplash: removed informative text field.
    • lmMainFrame: disabled all menu/toolbar related to unfinished features (notation editor, open/import LDP scores and MusicXML scores).
  • Starting implementation of DlgCfgScoreReading dialog for music reading options.
15-feb-06 Continue implementation of DlgCfgScoreRedaing dialog, clefs reading options:
  • lmTheoMusicReadingCtrolParams: modified method CreateHtmlCell() in include constrains verification.
  • lmScoreConstrains: coded methods SaveSettings(), Verify().
The implementation of default settings, based on html params, is more difficult than expected. This will require some thinking.
14-feb-06 Continue implementation of DlgCfgScoreRedaing dialog, clefs reading options:
  • lmScoreConstrains: added methods SetMaxNote() and SetMinNote(). Removed methods and variables related to lesson/level.
13-feb-06 Removing cboMode and chkMetronome from lmTheoMusicReadingCtrol:
  • Remove related variables and methods from lmTheoMusicReadingCtrolParms, lmMusicReadingCtrolOptions and lmTheoMusicReadingCtrol
  • Clefs reading exercise added to single exercises book
Coding missing parts to acknowledge min and max pitch params and max interval in Composer5.
  • Fixed bug in lmTheoMusicReadingCtrolParms::AnalyzeClef() causing bad minPitch and maxPitch settings
  • Detected coherence problem: missing upper/lower case in 'normalized' LDP elements. Old normalization was upper case; new normalization is lower case; now some methods expect lower case and others upper case. Reviewed all methods dealing with LDP and source code.
DataBase object removed. No longer needed.

Starting to rebuild DlgCfgScoreRedaing dialog.

12-feb-06 Analyzing parameters for lmTheoMusicReadingCtrol to finish this control. Implemented params "control_settings" and "control cboMode". After some considerations I think cboMode is not necessary: it is a heritage from old lenmus architecture (based on independent exercises) and the need to reuse an VB Forms for different exercises. Now this is not necessary and is not in line with current architecture. Studying how to finally leave this.
11-feb-06 Migrated lesson 206 to test ternary rhythms. Testing and debugging composer algorithm:
  • Fixed bug in LDPNoteTypeToDuration()
  • Composer5: Added methods CreateNoteRest(), CreateRest() and CreateFinalMeasure()
  • Fixed bug in lmNoteRest::AddMidiEvents() causing bad MIDI event generation in tied notes. Method IsTiedToPrev() added to Note.h
  • Fixed bug in lmScoreCtrol::Play() causing metronome settings not being taken into account.
9-feb-06 Improving composer algorithm to optimize segment insertion:
  • Score.h: added enum ENotesDuration
  • Composer5: added methods AddSegment() and CreateNote(). Testing.
8-feb-06 Continue implementation of new composer algorithm:
  • ScoreConstrains: finishing classes for segments and reviewed code for fragaments
  • Composer5: implement the new algorithm. Starting testing.
7-feb-06 Starting implementation of new composer algorithm:
  • AuxString: added methods SrcSplitPattern(), SrcGetPatternDuracion()
  • ScoreConstrains: implementing classes for segments
6-feb-06 Review and document algorithm for composer object. Design a new algorithm to take into account beat alignment and barline aligment constrains.
5-feb-06
  • Continue implementation of DlgPatternEditor.
  • Looking for bugs in Composer5.
3-feb-06
  • Reviewed and modified documentation in mainpage of doxygen documentation and related pages.
  • Reviewing and documenting params for html ScoreCtrol and MusicReadingCtrol, in order to finish the implementation and fixing anything related to this before finishing the conversion of old level 2 music reading book and starting the conversion of other books.
2-feb-06 Implementation of metronome check box for MusicReadingCtrol:
  • Reviewing and documenting how metronome works. As metronome implementation is different from LenMus 2.0 version, now it is more user intuitive and everything is controlled from the main toolbar metronome settings. Therefore the metronome check box is no longer needed in MusicReadingControl.
  • lmTheoMusicReadingCtrolParms: removed code to deal with param 'control metronome'
Reviewing and documenting params for html ScoreCtrol and MusicReadingCtrol, in order to finish the implementation and fixing anything related to this before finishing the conversion of old level 2 music reading book and starting the conversion of other books.
1-feb-06 'Go back to theory' link implemented and operative:
  • lmMusicReadingCtrolOptions: added variables fGoBackLink and sGoBackURL. Added method SetGoBackURL()
  • lmTheoMusicReadingCtrolParms: added param 'control_go_back'
  • lmTheoMusicReadingCtrol: layout revised to reduce unused space. Added optional link "Go back to theory". Method OnGoBackButton() implemented

January 2006

Go to top of document
Date           Changes

31-jan-06 Implementing a method to jump to a MusicReading dialog customized for the needs of a lesson:
  • Successful tests using internal links.
  • lmHtmlWindow::OnLinkClicked() modified to include a new internal link type: LenMusEmbedded.
  • Test example now operative.
Now studying how to implement the link 'Go back to theory'
30-jan-06 DlgPatternEditor implementation suspended. Preparing level 2 score music reading exercises:
  • Starting conversion of old level 2 music reading book. Splitted into pages. Tags changed. Reviewing score control.
  • lmScoreCtrolOptions: added flag fMusicBorder to control border around music. Added option <param name="music_border" value="0 | 1" > to lmScoreCtrolParams::AddParam() (in Tags.cpp)
  • Adjusted the positioning and margins of ScoreCtrol. Test example now operative.
Embbeding a MusicReadingCtrol in music reading books is not a good solution as normally there are two or more exercises associated to a lesson. So, as in version 2 behaviour, it is necessary to jump to a MusicReading dialog customized according exercises needs; and this dialog must have a "return to theory" link. Starting to think about the best way to implement this.
26-jan-06 For free Music Reading exercises, the user must be able to set up the rhythmic patterns she/he would like to practise. In the previous version this was implemented by choosing patterns from a graphical list. The problem is that list grew too much. For this new version I will implement a rhythmic patterns editor, so the user can easliy enter the patterns to practise.

Implementing DlgPatternEditor. Provisionally invoked from debug menu.
25-jan-06
  • TheoIntervalsConstrains:
    • Implementation of load/save settings finished.
    • Internationalization of button headings and labels.
    • Layout reviewed to reduce page height so that it now fits in display (1024x768)
  • TheoScalesCtrol: width of score sub-control enlarged: the scale did not fit when an accidental in each note.
  • Starting to review ScoreReading settings
23-jan-06
  • Implementation of DlgCfgTheoIntervals finished.
  • Implementing TheoIntervalsConstrains load/save settings.
20-jan-06
  • Implementation of EarIntervalsConstrains load/save settings finished. The key name included as a parameter in lmEarIntvalConstrains constructor
  • Methods FirstNoteEqual() and SetFirstNoteEqual() added to EarIntvalConstrains.
  • Implementation of settings for Ear compare exercises finised.
  • Theo Intervals configuration: link "settings" created. Created XML layout for DlgCfgTheoIntervals. Created the .cpp and h files. Dialog linked to program. Now working in the implementation of DlgCfgTheoIntervals.
19-jan-06
  • Name of global constants defined in score.h changed from XXXXXX to lmXXXXXXX.
  • Implementation of DlgCfgEarIntervals finished.
  • Starting implementation of EarIntervalsConstrains load/save settings.
  • Implementation of settings for Ear Interval exercises finised.
18-jan-06
  • Continue implementation of DlgCfgEarIntervals.
17-jan-06
  • Link 'Reset counters' hidden in EarCompareIntvCtrol, EarIntervalsCtrol, TheoIntervalsCtrol and TheoKeySignCtrol. The link is usseles until answer counters implemented.
  • EarIntervalsCtrol: Width of answer buttons reduced to 100px
  • Continue implementation of DlgCfgEarIntervals.
16-jan-06
  • Icon names standard finished. Icons renamed.
  • TextBookController:
    • Toolbar re-created when toolbar settings changed. Methods CreateMyToolBar() and UpdateToolbarsLayout()
    • Button names shown/hiden according toolbar options settings.
    • Initial state of toolbar button 'Index' (TextBookController) now synchronized to real state shown. It always started pressed.
  • toolbar option "icon size: large" disabled in 3.0 version as large icons set is not yet created.
2-jan-06
  • LangOptionsPanel changed to use XML resources.
  • Created icons for all options. Size 24x24 finally choosen.
  • All options panels reviewed to include title and icon.
  • ColorsOptPanel removed from current version (commented out in OptionsDlg) as is not yet operative.

December 2005

Go to top of document
Date           Changes

26-dec-05
  • Class IntervalConstrains removed. It is better not to integrate configuration options for ear exercises and theory exercises as the requirements are different. For example, in ear exercises key signature is importants but for theory exercises it is better to choose if accidentals and double accidentals are allowed.
  • EarIntervalsControl: settings link added. DlgCfgEarIntervals invoked.
  • Filling details in DlgCfgEarIntervals: veto tab change if errors in current tab data. Solving how to show errors. Implementing all this for notes range.
23-dec-05 Studying how to integrate interval exercises options (ear and theory). Class IntervalConstrains created.
22-dec-05 Integration DlgCfgEarIntervals into the program
  • TheoIntervalsControl: settings link added. DlgCfgEarIntervals invoked.
  • AuxString: Added global method LoadCboBoxWithNoteNames().
  • Note: added global method GetNoteNamePhysicists().
21-dec-05
  • Comment out all wxLogMessages left by.
  • Create DlgCfgEarIntervals dialog.
20-dec-05 Tracing memory leaks. Problem not solved. It happends when the ScoreAuxCtrol is resized. It is something as consecuence of invoking score->Draw() but I could not continue. Problem marked as pending.
19-dec-05
  • Fixed bug affecting lmScoreAuxCtrol: it does not resize the score when the window is resized.
    • TheoMusicReadingCtrol: Added Expand option to score sizer.
    • lmPaper: setting flag m_fRedraw in method SetPageSize(). Method Prepare() now re-creates the bitmaps also if paper size has changed.
    The problem is now solved but now I have memory leaks!!
  • DlgCfgScoreReading: starting with personal options.
16-dec-05
  • Menu bar: added incons for MSW and GTK+ builds (MAC does not support this).
  • Fixed bug: Help/Content menu item now syncronized with OpenHelp toolbar button and with help controller display status.
  • Fixed hand cursor in UrlAuxCtrol. It was modified by wxWidgets 2.6.2
15-dec-05
  • Toolbar: added options button. Fixed tool tips and tool types.
  • NavigationToolbar: test to move out this toolbar from TextBookController.
13-dec-05
  • Test to use wxIFM to implement draggable & dockable toolbars.
12-dec-05
  • Upgrade to wxWidgets 2.6.2.
  • Finding alternatives to implement draggable & dockable toolbars.
10-dec-05
  • Splash: test to insert a text field for informational messages.
  • TheApp: controlling ellapsed time since splash shown and not finishing app. initialization until the splash minimum display time is ellapsed.
  • NavigationToolbar: test to move out this toolbar from TextBookController.
9-dec-05
  • OptionsDlg: returning to creating the dialog programatically, not by XML resources. This dialog is very simple and if I use XML I have problems with the panels, so better not to spend more time with this.
  • ToolbarsOptPanel implemented with XML resources and operative.
  • lmMainFrame: added method UpdateToolbarsLayout() to update toolbars inmediately after user changing the options.
8-dec-05 Looking for icons. Designing and adapting. Preparing icons in png format.
7-dec-05 Including new icons
  • Replacing BMP format. Bitmaps removed from .rc file
  • lmArProvider modified to support PNG format and to allow for different icon sizes.
  • lmPaths modified to include "images" folder.
  • Change in TheoScalesCtrol to shift scale depending on clef.
  • TextBookFrame: method AddToolbarButtons() modified to include a parameter for icon sizes. Method Create() now sets the size according to user preferences.
  • OptionsDlg: starting changes to: 1) use lmArtProvider; 2) to use XML resources to create the dialog and the panels; and 3) to include Toolbars preferences.
6-dec-05 Looking for icons. Designing and adapting. Preparing icons in png format.
5-dec-05 Preparing a shaped splash image with shadows and testing it. Minor changes to support a shaped image in TheApp.cpp
2-dec-05 Code fixed in lmKeySignature::SetKeySignature() that caused a bug in score exercises.
1-dec-05 Reviewing the update of menu and toolbar status to use UpdateUI events:
  • SetOpenBookButton() changed. Event handler OnOpenBookUI() added.
  • SetOpenHelpButton() changed. Event handler OnOpenHelpUI() added.

November 2005

Go to top of document
Date           Changes

30-nov-05 Reestructuring main menu: Adding "View toolbars" and "View status bar" menu items and their implementation:
  • RecreateToolbar() method renamed to CreateMyToolBar(). Method DeleteToolBar() added. Event handler OnToolbarUI() added.
  • Methods CreateMyStatusBar() and DeleteStatusBar() added. Event handler OnStatusbarUI() added.
  • Problems detected with SetOpenBookButton() and UpdateMenuAndToolbar(); commented out and starting to review and re-structure this.
29-nov-05
  • Reviewing all to systematically use lmArtProvider. The main changes are in MainFrame::CreateMyToolBar().
  • Application icon added. Some icons in BookController replaced
  • Tests to customize TextBookController toolbar.
28-nov-05
  • A shaped splash window implemented:
    • Class lmSplashFrame created and implemented.
    • TheApp.cpp modified to show the splash.
  • Starting the implementation of lmArProvider to centralize all icons and bitmaps management and to override standard wxWidgets icons when desired
24-nov-05 Fixing things to prepare 3.0 alpha 1 release.
  • Previous day solution to problem detected for including links to other book not working fine: new problems found. A provisional solution implemented but, probably, i will have to code my own text book controlling.
  • With this I close alpha 1 release.
23-nov-05 Fixing things to prepare 3.0 alpha 1 release.
  • Open "Introduction" book at program start.
  • Starting to prepare alpha release books. Problem detected to jump from one book to another. Solutions analyzed and, finally, one programmed.
  • For development, books will be organized into folders, one folder per book. lmMainFrame::InitializeBooks() modified to search for books in subfolders when a development version detected.
22-nov-05 Fixing things to prepare 3.0 alpha 1 release.
  • Menu and ToolBar: Buttons 'open book' and 'open help' synchronized with menu items. Toggle status synchronized with real display status even when the help/book window is directly closed. Need to create class lmHelpController, derived from wxHtmlHelpController, to override virtual member OnQuit() so that the application gets informed if the help window is directly closed.
  • Update the menu items and toolbar controls when the active window changes, so that they are correctly enabled/disabled:
    • lmMainFrame::UpdateMenuAndToolbar() implemented. Method EnableMenuItems() removed.
    • OnActivate() handler implemented in lmEditFrame and lmTextBookFrame.
    • TheApp:CreateProjectFrame(): remove creation of menubar for MDIChild frames.
21-nov-05 Fixing things to prepare 3.0 alpha 1 release.
  • Tuples: LDPParser modified to deal with tuplets in G elements. LDP manual modified to document G and T notations.
  • Menu: item revised. Removed those not used by now.
  • Toolbar: removed zoom combo. Fixed 'open book' button so that it closes the book opened when toggled.
17-nov-05
  • Ties: algorithm to compute the tie reviewed and completed to take into account tie splitting when the tie continues in next system. Algorithm documented.
  • Notes: information about glyphs now stored in a table. Selecction rectangles, heighs and offsets fixed. Bad selection rectangle information caused mispositionement of ties in eight notes.
  • Starting to study the problem of splitting a beam when the group continues in the next system. Some test code for this added to Beam.cpp.
16-nov-05
  • Beamed groups: algorithm to compute and trim stem heights in groups reviewed, completed and documented. Height of stems now ok.
  • Bug fixed in LDPParser::AnalyzeNote() that caused reversed eBeamForward and eBeamBackward lines.
15-nov-05 Continue with support for lessons in html:
  • Parameters for lmTheoMusicReadingCtrol parsed.
  • lmScoreConstrains modified to include the fragments table, as well as all necessary parameters.
  • Composer5 modified to use only lmScoreConstrains.
  • DataBase not used now.
  • Definition of a book for score reading, level 5, started to test usability.
Now I will continue finishing things in score renderization:
  • LDP parser: added check and error message for bad syntax in groups.
  • Starting with trimming stems in groups.
14-nov-05
  • Continue with DataBase and Composer5. Bug fixed in lmLessonsTimeSignsTable::LoadTimeSignsForLesson(): the first entry was ignored.
  • After some analysis, it is not clear if DataBase and ini files are necessary. In the eMusicBooks system, each level/lesson is defined by an html object tag, with all the necessary parameters. Therefore, DataBase and ini files seem to be unnecessary and seem to be a relic inherited from version 1. So, I will stop further DataBase migration (although it is practically finished, except the key signatures table) and I will continue defining lessons in html:
    • Defined param structure for lmTheoMusicReadingCtrol. Now implementing param analysis.
    • Class lmMusicReadingCtrolOptions defined.
11-nov-05 DlgCfgScoreReading finished (level and lesson settings). ScoreConfig settings saved to user profile. Starting loading Lessons-Clefs-Scope table in lmDataBase and using it in Composer5:
  • AuxString: added global function LDPNameToClef(). LDPParser::AnalyzeClef() modified to use this function.
  • lmClefConstrain modified to include pitch scope.
10-nov-05 DlgCfgScoreReading combo box and spin control loaded with database strings. ScoreConfig settings now modified in previous dialog.
8-nov-05 Coding dialog to set options for score generation (DlgCfgScoreReading):
  • Designing and maintaining dialogs by hand is too time consuming. So I have looked for alternatives and I am going to study and test the XRC system. I will do the tests with this new dialog lmDlgCfgScoreReading.
  • XRC is great! I will use it with all the dialogs. Folder xrc created and DialogBlocks project created. Skeletons for MidiWizard and OptionsDlg created.
  • lmPaths: added GetXrcPath().
  • DataBase: Classes lmLessonNamesTable and lmLessonNamesEntry created. Lesson names loaded from ini file.
  • Testing initializing DlgCfgScoreReading combo box with lesson names.
4-nov-05 Debug and finish Lessons-Fragments. Starting to add the 'settings' link to Score music reading exercise.
  • lmPatternsTable: fix bugs in SelectRows() and ChooseRandom().
  • TheoMusicReading: added combo to choose mode setting and link to open settings dialog.
  • Starting skeleton for settings dialog (DlgCfgScoreReading).
3-nov-05 Load of lmDataBase Lessons-TimeSignatures table finished. Continue with procedures to load other tables: starting with Lessons-Fragments. Modifying Composer5 to use level and lesson settings. Finishing lmScoreConstrains to add all constrains needed; methods in lmDataBase to set up constrains according to level and lesson. Other:
  • lmPaths: added GetDataPath().
  • lmTimeSignMask replaced by lmTimeSignConstrains object. Related methods moved to lmTimeSignConstrains object.
2-nov-05 Memory leaks problem solved. Now loading lmDataBase from .ini initialization files. Starting with Lessons-TimeSignatures.
  • lmDataBase: Table Lessons-TimeSignatures defined.
  • lmDataBase: methods LoadFile() and AnalyzeLine() skeleton coded. Testing.
  • lmPaths: added GetBinPath().

October 2005

Go to top of document
Date           Changes

31-oct-05 Continue writting the LDP language reference manual and prepare upload to website.
28-oct-05 Continue writting the LDP language reference manual.
27-oct-05 Documentation: Starting to translate and review the LDP language reference manual.
25-oct-05 Continue with Composer5 and related methods to generate scores:
  • Composer algorithm modified not to use beats but measure duration.
  • TimeSignature.cpp/.h: Added global functions GetBeatDuration() and GetMeasureDuration()
  • NoteRest.cpp/.h: Added global functions LDPNoteTypeToEnumNoteType(), LDPNoteTypeToDuration() and NoteTypeToDuration().
  • LDPParser.cpp: Modified GetDefaultDuration() to use NoteTypeToDuration()
  • AuxString.cpp/.h: Added global function SrcGetElementDuracion()
  • DataBase.cpp/.h: Modified to be a singleton. Methods to deal with beats changed to deal with elements.
  • Changes operative but memory leaks detected.
24-oct-05 Continue with Composer5 and related methods to generate scores:
  • Problems to aling patterns detected. The algorithm is reviewed and version 2 was programmed and tested. Instead of generating beats, the main loop is now organised around generating measures. Now patterns can be musical phrases instead of full measures. If necessary, patterns may contain barline alignment information.
  • All this programmed and tested. Result OK
21-oct-05 Continue with Composer5 and related methods to generate scores:
  • skeleton of lmDataBase operative. Data not loaded from files but inline for testing.
  • InstantiateNotes(). Bug fixed: need to repeat the same note if the previous one is tied.
  • lmLDPParser::AnalyzeRest(): Fix code to include a rest inside a beamed group.
  • Method GetNumBeatsFromTimeSignType() moved from lmConverter to lmTimeSignature. Added two new global functions: GetBeatTypeFromTimeSignType() and GetNumUnitsFromTimeSignType().
  • Added constructor to lmTimeSignature from enum time sig.; added method to VStaff using this constructor.
  • Defined a 'Time signature mask' for selecting patterns; this also solves the problem of pattern alignment. Method lmDataBase::CreateMask() added.
20-oct-05 Composer5: First version, including note generation and instantation is ready. Starting tests.
  • lmConverter: added methods MidiPitchToPitch(), MidiPitchToLDPName() and PitchToLDPName().
  • AuxString.cpp: method LDPDataToPitch() modified to take MIDI data into account.
  • lmLDPParser: method AnalyzeNote() modified to take MIDI data into account.
  • Starting to code DataBase.cpp/.h
19-oct-05
  • lmNote: fixed bug: dots not drawn because dot radius was in physical units.
  • lmLDPParser: changed some messages that where in Spanish
  • lmConverter: Method GetNumBeatsFromTimeSignType() added
  • lmComposer5: Algorithm revised and documented. Main loop coded and tested. Pattern generation tested. Note generation and instantiation not finished; problems with instantiation: LDP parser bug?
18-oct-05
  • Added class lmComposer4 with a dummy methods to generate measures.
  • lmGenerator: method GeneratePitch() renamed as GenerateRandomPitch().
  • LDPParser: Modified method AnalyzeNote() to generate automatically the beaming information.
  • Added methods GetNoteType() and SetBeamType() to lmNoteRest
  • Beams drawing algorithm revised to deal with forward and backward hooks. Methods DrawBeamSegment() and ComputeYPosOfSegment() added.
17-oct-05
  • Adding Score Music Reading exercises; created clases lmTheoMusicReadingCtrol and lmTheoMusicReadingCtrolParms. Abstract class lmObjectParams extracted from Tags.cpp and moved to a file. Created class lmScoreConstrains.
  • score.h : add range (lmMIN_TIME_SIGN, lmMAX_TIME_SIGN) in ETimeSignature
  • Constrains.cpp, .h : add lmTimeSignConstrains
  • Generator.cpp,.h : add GenerateTimeSign() and RandomTimeSignature()
  • Added lmComposer abstract class and lmComposer5 class (just skeleton; returns a constant score for testing).
13-oct-05
  • TheApp:
    • Fix bug: changed calls to CreateMenuBar to honor gReleaseVersion flag
    • gReleaseVersion value automatically set from preprocesor constant
  • Paths: temp folder chaged to 'temp'
  • Fix bug: create temp folder if it does not exist. Otherwise the program will fail when the user tries to open an eMusicBook
  • EarIntervalsCtrol: Do not start automatically the first exercise. Wait for user clicking on 'new problem'
4-oct-05
  • Fix bug in SoundManager: need to sort events also by measure number and to give priority to VISUAL_OFF events

September 2005

Go to top of document
Date           Changes

29-sep-05
  • Key Signatures exercise finished
  • Dialog AboutDialog revised and finished.
22-sep-05
  • Ear compare intervals exercise finished
  • Implementation of Key Signatures exercise started:
    • Classes lmTheoKeySignCtrol and lmTheoKeySignConstrains created
    • html objects of type="Application/LenMusTheoKeySignatures" implemented
    • Class lmTheoKeySignCtrolParms created
21-sep-05
  • lmVStaffAddKeySignature: alternative constructor from EKySignature added.
  • lmKeySignature: new global method KeySignatureToNumFifths()
  • Class lmEarIntervalsConstrains finished.
  • Class lmRandomGenerator: method FlipCoin() added
  • Class lmEarCompareIntvCtrol added and implemented. Ready for final tests
  • html objects of type="Application/LenMusEarCompareIntervals" included
  • Class lmEarCompareIntvCtrolParms created
20-sep-05
  • lmEarIntervalsConstrains implemented. Initialization with default values is done in constructor.
  • lmScoreAuxCtrol: added methods SetScore() and HideScore()
  • lmIntervals: Added constructor to build interval from constrains
  • lmConverter: added PitchToMidiPitch() and IsNaturalNote() methods
  • Class lmEarIntervalsConstrains now operative. It is necessary to do final tests and cleaning.
19-sep-05
  • Class lmEarIntervalsConstrains created
  • Firts test of an embeded object of class LenMusEarIntervals
16-sep-05
  • lmSoundmanager. Bug solved: when playing measure #1 it plays one extra note.
  • lmTheoIntervalsCtrol: added debugging methods and links.
  • lmEarIntervalsCtrol: starting its coding
15-sep-05
  • Review lmScoreCtrol to finish it
  • lmSoundmanager: added PlayMeasure.
  • lmSoundManager: measures table computed.
  • lmUrlAuxCtrol: modified to have two labels: normal and alternative
  • lmScoreAuxCtrol: method PlayMeasure added.
  • lmScore: method PlayMeasure added.
13-sep-05 Included standard documentation headers for all files. Changed Tabs by Spaces. Class names changed to have prefix "lm". Prefix "sb" replaced by "lm"..
12-sep-05 Included standard documentation headers for all files in folder src..
7-sep-05 Starting to organise documentation and to document for Doxygen. Tags TODO and LIMITS replaced. Change log reformatted..

August 2005

Go to top of document
Date           Changes

25-aug-05 Dialog to show error messages while importing a MusicXML file. Menu: include debug option to select trace masks to use.
24-aug-05 Class lmLogger created. File DataError.log is now created and all XML parsing errors are written there.
22-aug-05 Crash on closing application solved. It happend only when the scoreview is closed before closing the application and was causes because the OnClose event of the frame (lmEditFrame) does not propagate to the base class wxDocMDIChildFrame.
21-aug-05 Created event End_Of_Play. A handler implemented in TheoScoreCtrol in order to change "Sop playing" label.
20-aug-05 Implemented OnScoreHighlight event handler for lmScoreAuxCtrol. lmMetronome object created. The mess of all global metronome flags eliminated. Play /Stop play labels toggled in TheoScaleCtrol class and operative.
19-aug-05 Methods for Play, Stop and Pause implemented (Resume is implicit in Play if the score is paused). SounManagerThread properly terminated. Implemented list of highlighted scoreobjs so that all highlight is removed if score playing is stopped.
18-aug-05 PlaySegment running ok in an independent thread. Visual highlihgt implemented with an event. Parameter pPaper removed from Play() methods as paper's DC (created in scoreView::Play() ) is not valid and then pPaper is useless. Now DC is created in the scoreView::OnScoreHiglight method.
15-aug-05 PlayScore parameters review finished. lmTheoScalesCtrol and lmTheoIntervalsCtrol now play at a proper metronome rate. Global flag g_ShowDebugLinks created. Debug methods added to lmScoreAuxCtrol. lmTheoScalesCtrol and lmTheoIntervalsCtrol modified to use debug links. lmSoundManagerPlaySegment() moved to an independent thread. This works to solve the main GUI freezing problem but now a new problem appears: it is not possible to update the GUI from the thread. wxWidgets documentation (topic: Topic overview: Multithreading overview) explains that this).
14-aug-05 Problem solved: Play score does not play first instrument (only plays the piano part) in score "Four reveries sample"). The problem was in lmSoundManagerAppend due to a bad usage of Alloc(). Also a time rounding problem was solved. Parameters added to method lmScoreAuxCtrolPlayScore. Starting to review parameters in several places and Play() mehods.
13-aug-05 lmPaths and the program, in general, assumed unix or win32 syntax rules for paths and file names. This will no work for other platforms with diferent syntax rules. So I have reviewed the program and change code to use object wxFileName for dealing with path and file names. Some colors changed to use lmColors.
12-aug-05 Paths revised to use lmPaths object.
11-aug-05 Options dialog operative. Language selection operative.
10-aug-05 Continue with options dialog. Module lmPaths and Languages created. lmColors moved to folder globals. Internationalization tested and working.
09-aug-05 Basic architecture for options selection created (classes lmOptionsDlg, lmOptionsPanel and two test panels: lmLangOptionsPanel & lmColorsOptPanel) and tested.
08-aug-05 Starting with Internationalization (set up language and catalogs; choose language in first run).

July 2005

Go to top of document
Date           Changes

26-jul-05 Minor changes to adapt to chages in wxMidi interface.
15-jul-05 lmTheoScalesCtrol finished and operative.
14-jul-05 Tags.cpp modified to implement dealing with <object type="Application/LenMusTheoScales">. Object lmColors created to avoid inconsistencies, and to allow user preferences.
13-jul-05 Visual higlight when playing a score implemented. This will have to be reviewed when multipage scores. Skeleton for lmTheoScalesCtrol and lmTheoScalesConstrains created.
12-jul-05 lmMidiWizard: added metronome settings.
11-jul-05 Simultaneous metronome operative. I have modified lmVStaffComputeMidiEvents() to generate RithmChange MIDI events, implement this in lmSoundManager and, finally, complete metronome in lmSoundManager.
08-jul-05 Independent metronome operative. Current settings saved and restored when the program is exit / run again.
07-jul-05 Adding metronome controls to toolbar.
06-jul-05 Created lmScoreCtrol with all needed sub-controls. Recoded Tags.cpp to use it. Created lmScoreCtrolOptions class.
05-jul-05 Analyzed and defined the structure of URLs to implement commands for embedded objects in a book (but probably will not be used as consequence of following item). Analyzed the architecture for html ctrols.
04-jul-05 Notes duration issue (different if LDP than if XML) fixed.
01-jul-05 Play score operative. Clarifying notes duration issue: different if LDP than if XML !.

June 2005

Go to top of document
Date           Changes

30-jun-05 All menu creation code centralized in lmTheApp:CreateMenuBar(). Midi events table created and displayed. Working on playing it.
29-jun-05 MIDI wizard: old configuration restored if wizard is cancelled. Migrating methods to create the table of MIDI events.
28-jun-05 MIDI wizard: combo boxes are now initialized to leave selected current Midi configuration, as saved in lenmus.in.
24-jun-05 Created object lmMidiManager to centralize all MIDI configuration and managemen.
23-jun-05 Created object sbPreferences. Midi wizard pages 1 and 2 finished and tested.
22-jun-05 Configuration changed from Unicode to Multibyte. Use of wxMidi tested. Starting with lmMidiWizard. Global MIDI variables created. Testing lmMidiWizard pages 1 and 2.
07-jun-05 Context updated in notes and at the start of measures. Starting to play music.
03-jun-05 reviewing how pitch information is stored. Fixing things related to pitch.
02-jun-05 Context objects created and added to the staff list. Context object assigned to Notes and Rests. All program reviewed to use methods to access the context.
01-jun-05 lmScoreAuxCtrol: methods to adjust scale, margins and staff lenght. Object Context created.

May 2005

Go to top of document
Date           Changes

31-may-05 TheoIntervals control implemented. Params for configuring lmTheoIntervalsCtrol and Constrains objected implemented. Generator, Conversion and lmInterval classes implemented.
26-may-05 memory leaks problem solved. Object lmInterval created.
25-may-05 Continue with lmTheoIntervalsCtrol: All links and buttons operative. Methods DisplayMessage() and DisplayScore() added to lmScoreAuxCtrol. Generation of the score (with dummy notes). Now starting the generation of the interval. Memory leaks detected.
24-may-05 lmTheoIntervalsCtrol: layout developed. Buttons operative.
23-may-05 Experiments to include a Form in the html text. Now implementing the lmTheoIntervalsCtrol class.
20-may-05 <param play_control>. Implemented the inclusion of the "Play" control.
19-may-05 LDPParser modified to accept parsing from text instead of from file. <object> params type and music parsed. Opertative now
  • include music data inline. Type short
  • import a MusicXML file. Type XMLFile
  • import an LDP file. Type LDPFile Parameter width modified to accept percentage. Default set to 100%
18-may-05 Starting processing of <object>. <param> tag parser architecture implemented.
17-may-05 Created a new class lmHtmlWindow, derived from wxHtmlWindow, to have control when a link is clicked. In test mode scan documentation folder and load all books (.hhp files) found Class TextBookForm modified to be MDIChil.
16-may-05 Migration to wxWidgets 2.6. Static linking. Created classes lmTextBookController and TextBookForm Investigated how to intercept clicks on link tags (<a>): wxHtmlWindow has a virtual method, named OnLinkClicked(), that is called when user clicks on a cell that corresponds to a hypertext link.
11-may-05 Class lmScoreAuxCtrol added with very basic code, just to test that scores can be displayed as part of html pages by using tag <object type="image/LenMusScore">.
10-may-05 Added help content capabilities, based on html help controller. Testing html windows to show music.
09-may-05 Problem with ordering of Clef, lmTimeSignature and lmKeySignature in XM solved by re-ordering them at XML parser objects creation. DrawProlog() modified to include Time and Key signatures. Fixed a bug in DrawTimeSignature() and in DrawKeySignature(): they only draw in the first staff; now corrected. lmAccidental object created. Accidentals included in notes.
06-may-05 lmKeySignature basic implementation done. Same problem than with lmTimeSignature.
05-may-05 lmTimeSignature basic implementation done. Designing a more general method to code time signature information, as a ennumeration is not powerful enough. Modified XML parser XML to accept time signature information. An important problem has been detected with XML. Time signature is treated as an attribute of the measure, not as an object. Therefore, ordering (clef, tonal key, time signature) is not important for XML and there are examples in wich this information is encoded in reversed orders (i.e. time signature, clef). This causes problems as LenMus expects that this objects are defined in right order.

April 2005

Go to top of document
Date           Changes

29-apr-05 Fixed problem with ties when start and end notes have stems in opposite directions.
28-apr-05 Ties drawn using Bezier curves. Modification to introduce MakeUp phase.
27-apr-05 fixed problem with beamed group tied to previous note.
26-apr-05 Fixed several problems with beams:
  • stems up and down in the same beam
  • only force stems' direction if all stems' type is eDefaultType
  • beam line too high or too low when chords involved (test score P01).
25-apr-05 Invocation of lmBeamComputeStems has been moved from lmNoteRestCreateBeam to lmNoteDrawObject and lmRestDrawObject. This has been necesary because the base note of the beam is the one that contains the beaming information. in contradiction with what was assumed, it could not the last note of the beam as for chords, there are still notes to be added. Additiona minor fixes for properly drawing beams in beamed chords across staves.
21-apr-05 lmTupletBracket changed to derive from lmSimpleObj instead of lmAuxObj to solve problem of font. Tuplet number now rendered. Beams: dealing with the issue of including Rests in a beam. This forces to move beaming information from lmNote object to lmNoteRest object. And this forces some changes: a new method CreateBeam() and method IsInChord() moved to lmNoteRest as pure virtual. In Beams: all methods changed to deal with NoteRests instead of Notes. In Rests: variable m_yShift and method SetDisplacement() added.
20-apr-05 lmTupletBracket drawing implemented. Problem of font to use.
19-apr-05 Parameter rDuration included in lmNoteRest constructor (and lmNote and lmRest constructors). Default duration computed in lmLDPParser. Method SetDuration() deleted. All this is to solve a problem with SetDuration(): it is called after the note is stored into the ColStaffObj, but duration is necessary to compute rTimePos. lmXMLParser: parsing notation <tuplet>. Object lmTupletBracket created.
18-apr-05 Fixed problem with alignment in lmTimeposTableArrangeStaffobjsByTime(.
14-apr-05 Elements <backup> and <forward> implemented. Starting revision of lmFormatter3 to finish it and to fix problems.
13-apr-05 Class lmLyric implemented as a derivative from lmNoteRestObj and lmBasicText. Method lmFormatter3RedistributeFreeSpace() migrated.
08-apr-05 lmBasicText class implemented. WordsDirective derived from it. Now working on lmLyri.
07-apr-05 Clarifying XML 1.0 positioning attributes. Starting the creation of lmLyric class.
06-apr-05 Class lmFermata created. Derived from new class lmNoteRestObj. All this added some clarification to the objects hierarchy but not enough. So I will continue with different types of texts. Class lmWordsDirection implemented. lmXMLParser modified to include parse <direction>. Two general parsing methods added: ParsePosition() and ParseFont(). Structures RXMLPositionData and RFontData defined.
05-apr-05 lmRest object: sizing and positioning selection rectangles fixed.
04-apr-05 lmRest object implemented. Parsing rests implemented in XML and LDP. TODO: sizing and positioning selection rectangles.
01-apr-05 lmVStaff::FindSelectableObject() fixed to take into account CompositeObjs. Implementation of lmRest object started. DrawObject() reviewed.

March 2005

Go to top of document
Date           Changes

31-mar-05 Object's model hierarchy refined. Composite StaffObjs created. lmNote as composite object. Selection of Ties implemented and working.
30-mar-05 Yesterday's attemp was not good. New model hierarchy created: lmScoreObj -> lmSimpleObj -> lmAuxObj, lmStaffObj. lmVStaff restored as a non derivate class. Working on drawing selRect of Ties and defining the interface of AuxObjs.
29-mar-05 Developing the model hierarchy of ScoreObjs. Created the "Composite" pattern. Objects lmScoreObj, lmSimpleObj and lmCompositeObj defined. StaffObjs now are a derivate class from lmSimpleObj. lmVStaff is now derived from lmCompositeObj.
17-mar-05 lmFontManager improved to deal with fontNames and other parameters. Global StaffObjs list implemented in lmScore object to store non-directly related StaffObjs. Method for renderization of score titles. lmFormatter3 changed to render titles.
16-mar-05 XML parsing: added <stem> tag. Stem info added to lmNote constructor. Added notehead positioning information (m_noteheadRect). Rendering of ties: start and end positions OK. Considering the creation of a more general class lmScoreObj to deal better with non-directly staff related objects. Implementing lmText object to test ideas.
15-mar-05 Classes lmArch and lmTie created. lmNote constructor changed to account for absolute pitch (MusicXML) as an alternative to relative pitch (LDP). Methods lmVStaffFindPossibleStartOfTie and lmNoteCanBeTied. Studying how to do the rendering of ties.
14-mar-05 Fixed the details for drawing stems and beams for chords and to take beam thickness into account. Finished lmVStaffDrawProlog(). Store current clef while rendering the score.
11-mar-05 RenderJustified() is now operative. Starting with modifications to draw stems and beams for chords and to fix beam drawing details..
10-mar-05 Finishing Formater3::RenderJustified(): the minimun functionality to start testing. Starting testing and correcting bugs.
09-mar-05 Starting with Formater3::RenderJustified(). lmTimeposTable object created. Changes in a lot of places.
08-mar-05 Compilation problem with class Chord solved: it seems to be that there is a function named "Chord" defined in WinGDI.h. And this causes a name conflict to the compiler. So Chord class has been renamed as lmChord.
07-mar-05
  • lmXMLParser: added parsing of tags <note>.<staff>, <note>.<chord> and <note>.<beam>.
  • lmBeam object more or less operative. Need to improve drawing (line thick and spacing).
  • Starting with chords. Object Chord created. lmNote modified. Trying to compile. Ref.loop between Chord and lmNote as Chord uses a list of notes and lmNote uses Chord.
04-mar-05 Continue with lmXMLParser: parsing barlines. Starting with beam grouping: lmLDPParser modified to parse G tag; grouping informattion added to lmNote constructor. lmBeam object created. Working on completing it.
03-mar-05 Continue with lmXMLParser: parsing notes; parsing measure attributes; parsing clefs.
02-mar-05 Continue with lmXMLParser: parsing skeleton defined; parsing operative until ParseMeasure.
01-mar-05 lmBarline object finished, including drag image and dragging. Direct call to EndDrag() has been replaced by lmScoreCommand to enable undo/redo operations. Undo/Redo menu commands implemented. Menu "Import" added. Starting the creation of class lmXMLParser for parsing MusicXML.

February 2005 and begining of project

Go to top of document
Date           Changes

28-feb-05 lmBarline object operative except drag image and dragging. Storage of StaffObjs into the collection: computation of TimePos. Dump of timepos.
25-feb-05 Source code generation methods finished (at current program state). Bars taken into account in lmColStaffObjs. Parsing of barlines added to lmLDPParser. Starting the implementation of lmBarline object. MusicXML source generation skeleton implemented.
24-feb-05 Class lmStaffObjIterator created. Program code reviewed to use this class.
18-feb-05 Modification of logical units to microns. Review of all code and documentation. Three options added to debug menu: Dump, Source and XML. Dialog lmDlgDebug created. Starting with lmScore.Dum.
10-dec-04 LenMus coding started. No knowledge of wxWidgets so I will not log more entries in this log until a minimum of functionality is achieved.