Fixed en/disabling Update Solution toolbar button.
Added Update Solution, Update Component, View Solution Log, and View Component Log toolbar buttons.
Renamed the Subversion menu and toolbar to IronSVN.
Set the initial state of the addin's menu and toolbar buttons.
Don't throw an error if the user cancels a commit dialog.
Consider a component versioned if at least one of its files is versioned.
The View Solution Log and View Component Log actions / buttons cannot be used, and are disabled, if the respective action is unavailable due to items not being under version control.
The menu and toolbar buttons are enabled according to whether their respective operation can currently be carried out.
Don't inject a Subversion service instance into a Component from a Solution.
Removed unused field.
Keep a reference to each button added to the menu / toolbar, in order that we might disable them as appropriate if their associated action is not currently available.
Implemented a hard reload (remove and readd the component) for components which won't soft reload.
Refactored saving the project file - extract from SaveProject() into SaveProjectFile().
Solution.ReloadComponent() accepts an IronSVN.Component instead of an VBIDE.VBComponent.
Solution.SaveComponent() accepts an IronSVN.Component instead of an VBIDE.VBComponent.
Use Component as the primary component in Actions.CommitComponent() and Actions.UpdateComponent().
The component must be versioned for the component update/commit actions to be available.
Solution.SelectedComponent returns Nothing if there is no selected component.
Component now wraps a VBComponent.
Added Component class.
Added Subversion.IsVersioned2(), and TortoiseSvn.IsVersioned2().
Specified return type (Boolean) for TortoiseSvn.IsVersioned().
Corrected the source of the error raised in Process.ThrowIfExitedWithError().
Use StringHelper.IsEmptyOrWhiteSpace() in ErrorRaiser.ThrowArgumentEmptyStringErrorIfValueIsEmpty() when testing for empty strings.
Added ErrorRaiser class.
Added TODO notes relating to the error raised by Process.ThrowIfExitedWithError().
Added TODO notes about solution / component editor state restoration after reloading.
Set the tsvn:projectlanguage property, for the spell checker, to 2057 (0x0809) for en-GB (British English).
Added a TODO note.
Do not rely on the value of Project.Saved as the source of the return value for SaveProject(). Some components, e.g. Connect.Dsr, after saving, will still report themselves as dirty, which causes the project to report itself as dirty, even though everything was saved.
Avoid inadvertently creating a project group when reloading a project.
Reload the entire solution - the project group, and project(s), as well as components - after committing, or updating, the solution.
Use Hex$() instead of Hex() in ErrorFormatter.FormatErrorNumber().
Use FileHelper.FileExists() instead of Dir() when testing for the existence of a file in Solution.ComponentFileLastUpdated().
Further use `StringHelper.IsEmptyOrWhiteSpace(Value)` instead of `Len(Trim$(Value))` when testing for empty / white-space only strings.
Changed assertions related to checking for empty / white-space only strings from using `Len(Trim$(Value)) > 0` to use `Not StringHelper.IsEmptyOrWhiteSpace(Value)` in the new StringHelper class.
Workaround for Solution.SaveProject() returning a True value, sourced from VBIDE.VBProject.Saved, which when Not-ed will not return the expected False value in Solution.SaveProjects().
Actions.CommitSolution() checks if the action is available, saves the solution before committing, and reloads all components after committing.
Save the solution (project group, project(s), component(s)) before updating.
Do not save the project file, if we do not need to. If a dirty component was the only thing causing the project to be dirty, once it has been saved, the project will not be dirty anymore. Recheck Project.IsDirty after saving the project's components, before saving the project file.
Added StringHelper class.
Added Solution.SaveSolution().
Added FileHelper class.
Added Solution.SaveProject(), and Solution.SaveComponents().
Use ErrorFormatter.FormatError() to format the error message (especially the error number) in the error handler / debug message in Solution.ReloadComponent().
Improve number formatting (if VB6 error number, do not format as hexadecimal).
Use ErrorFormatter.FormatError() in ErrorHandler.HandleError() to format the error source/number/description in the error message.
Added comment - resource files (components with type = vbext_ct_ResFile) have no name.
Rare, difficult to reproduce error - `(0x80020009) Method 'Window' of object '_CodePane' failed` - sometimes occurring when trying to read the caption of the window for a code pane in ComponentHasOpenCodePane(). Added GetCodePaneWindowCaption() to handle the error (by catch the error, and returning an empty string).
Restore the active editor window after reloading a component.
Added ErrorFormatter class.
Added Solution.SetEditorWindowFocus().
Added Solution.FindActiveEditorWindowCaption().
Implemented AvailableActions.CanUpdateSolution.
Implemented Solution.IsVersioned.
Added Solution.IsVersioned property (unimplemented).
Added Subversion.IsVersioned(), and TortoiseSvn.IsVersioned(), utilising the SubWCRev program from TortoiseSVN via its COM interface.
We're only measuring time to the second, and a Subversion operation ^could^ complete in the same second it started, and modify the file, so only reject components for reloading if the file was last modified ^before^ the threshold time.
Added a TODO note.
Edited remark about the speed of the ReloadAllComponents() method.
Partial implementation of Actions.UpdateSolution().
Added TODO notes.
Implemented Actions.UpdateComponent().
Partial implementation of Actions.UpdateComponent().
Added FileUpdatedAfter parameter to Solution.ReloadComponent(). The specified component will only be reloaded from the file(s), if the file(s) have been updated after the specified date/time.
Added Update Solution, and Update Component, menu items, with skeleton actions.
When reloading a component, if the component has an open code pane, restore the current viewed position in the file after reloading.
Reload the component after committing.
Don't reload a component if there are any unsaved changes.
Save changes to the selected component before committing it. If the component has never been previously saved, inform the user they must save it first.
Verify we have a selected component before committing the selected component.
Added Solution.
Added notes.
Added TODO note.
Wait for TortoiseProc to exit when committing.
TortoiseSvn uses Process to launch TortoiseProc.exe instead of Shell().
Altered external program execution methods to facilitate optionally waiting for exit.
Implemented the View Solution Log menu item.
Refactored obtaining working copy root path - extracted into GetSolutionRootPath().
Alphabetised methods.
Implemented SubversionCli.GetWorkingCopyRootPath().
Globally ignored VB*.tmp files (e.g. VB1563.tmp) in the src/IronSVN folder (and subfolders).
Added SubversionCli, Subversion.GetWorkingCopyRootPath(), Actions.CommitSolution(), and connected the Commit Solution menu item and toolbar button to the CommitSolution() action.
Globally ignored *.bak files.
Implemented the View Component Log menu item.
Added reference link to ^Appendix D. Automating TortoiseSVN^ documentation.
Added (currently non-functional) Commit Solution, View Solution Log, and View Component Log menu items; and Commit Solution toolbar button.
Added CodeSMART Task List ID.
Hooked up the Commit Component menu item to the same action as the Commit Component toolbar button.
Added Actions.cls file.
Added Subversion.cls and TortoiseSvn.cls files.
Added Commit Component buttons to the menu and toolbar, with skeleton event handlers.
Save toolbar position, etc, when removing the toolbar, not the menu.
Add/remove a Subversion toolbar (persisting its position and visibility between instances in the registry).
The Addin and ErrorHandler classes are private.
Added Addin.cls file.
Use " at ProjectName.ModuleName.MemberName" instead of " on Pro...".
Use error handler in AddinInstance_OnConnection().
Added ProjectName parameter, fixed number formatting (added missing closing parenthesis ")"), display error message.
Added DefaultServiceInstances.bas file.