-
Notifications
You must be signed in to change notification settings - Fork 0
Version History and Updates
Relevant source files
This page documents the version history system in MouseMacros, including how version information is stored, the changelog format, and the evolution of features across releases. The version history is maintained in code through the UpdateInfo enum, which provides structured access to version metadata and changelogs.
For information about the UI components that display this version information to users, see About and Update Dialogs.
MouseMacros maintains its version history programmatically using an enum-based system. All version information, including release dates and detailed changelogs, is stored in src/io/github/samera2022/mouse_macros/UpdateInfo.java L1-L103
This approach ensures version information is type-safe, compile-time validated, and easily accessible throughout the application.
Current Version: 1.0.1 (Released: 2025-12-27)
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L1-L103, README.md L13
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L5-L103
The UpdateInfo enum is defined with each version as an enum constant. The structure consists of:
| Constant | Version | Release Date | Description Location |
|---|---|---|---|
VERSION_0_0_1 |
0.0.1 | 2025-07-05 20:20 | UpdateInfo.java L7-L13 |
VERSION_0_0_2 |
0.0.2 | 2025-07-06 22:51 | UpdateInfo.java L14-L26 |
VERSION_0_1_0 |
0.1.0 | 2025-07-08 15:08 | UpdateInfo.java L27-L31 |
VERSION_1_0_0 |
1.0.0 | 2025-07-09 21:31 | UpdateInfo.java L32-L41 |
VERSION_1_0_1 |
1.0.1 | 2025-12-27 23:16 | UpdateInfo.java L42-L64 |
Each enum constant stores three fields:
-
version(String): Semantic version number (e.g., "1.0.1") -
releaseDate(String): Release timestamp in format "YYYY-MM-DD HH:MM" -
description(String): Multi-line changelog with markdown formatting
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L66-L74
| Method | Return Type | Description |
|---|---|---|
getVersion() |
String |
Returns the version string |
getReleaseDate() |
String |
Returns the release date |
getDisplayName() |
String |
Returns formatted "[date] version" string |
getDescription() |
String |
Returns the raw changelog description |
getFormattedLog() |
String |
Returns formatted log with date, version, and description |
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L77-L85
| Method | Return Type | Description |
|---|---|---|
findByVersion(String) |
UpdateInfo |
Searches for a version by version string; throws exception if not found |
getAllVersions() |
String[] |
Returns array of all version strings |
getAllDisplayNames() |
String[] |
Returns array of all display names with dates |
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L88-L102
Changelogs in the description field follow a consistent markdown-based format with standardized section headers:
## [Added]
- New features and capabilities
## [Changed]
- Modifications to existing functionality
## [Fixed]
- Bug fixes and corrections
## [Detailed]
- Extended explanations and technical details
## [Description]
- Usage information and behavioral notes
## [Warn]
- Known issues and warnings
## [To-do]
- Planned future work
## [Note]
- Additional remarks and observations
Note: Changelog descriptions are written in Chinese (Simplified) as the primary development language.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L8-L63
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L7-L64
Initial Release - Core Functionality
- ✅ Start/stop macro recording
- ✅ Save/load macro functionality
- ✅ Custom hotkey support
- ✅ Localization framework
- ✅ Adaptive window sizing based on button length and system DPI
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L7-L13
Configuration System
Added:
- Configuration file persistence (
config.cfg) - Settings dialog interface
- "About Author" dialog
- "Update Log" dialog
Changed:
- Moved custom hotkey configuration into Settings dialog
Configuration Options Introduced:
- Follow system settings (boolean)
- Enable dark mode (boolean)
- Switch language (String)
- Default macro storage path (String)
- Key mapping table (Map<String,String>) - noted as not yet implemented
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L14-L26
Architecture Improvements
Added:
- Implemented
keyMapconfiguration functionality
Changed:
- Major project structure refactoring
- Reduced code coupling
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L27-L31
Full Input Support
Added:
- Mouse middle button support
- Mouse scroll wheel support
- Keyboard input recording
- Distinction between left/right/middle mouse buttons
- Custom macro settings
- Abort macro hotkey functionality
- Last save/load path retention
Known Issues:
- Direct keyboard input in settings.custom_hotkey dialog modifies start_record hotkey unexpectedly
- JFileChooser cannot apply dark mode theme
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L32-L41
Polish and Distribution
Added:
- Window size persistence in
cache.json - Memory of window dimensions for all dialog types
-
enable_default_storageoption in Settings - One-click packaging script for
.exedistribution - Mouse focus hints for TextField in settings.custom_hotkey dialog
- DeepWiki documentation integration
Changed:
- Enhanced README.md with detailed documentation
- Relocated
langfiles tosrcdirectory
Fixed:
- Resolved settings.custom_hotkey dialog keyboard input anomaly from v1.0.0
Storage Behavior:
- When
enable_default_storage= true: Uses onlyconfig.cfg→default_mmc_storage_path; FileChooser selections don't updatecache.jsonpaths - When
enable_default_storage= false: Usescache.json→lastSaveDirectoryandlastLoadDirectory; automatically synchronizes empty values between the two
To-do:
- Consider switching UIManager style from Metal to Nimbus, System, or third-party FlatLightLaf
Notes:
- Source code ~1MB, but bundled JRE increases distribution to 34.2MB
- Version 1.0.0 artifact was 2.84MB due to accidentally including project root in source directory; corrected in 1.0.1 to 1.05MB
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L42-L64, README.md L1-L94
| Feature Category | v0.0.1 | v0.0.2 | v0.1.0 | v1.0.0 | v1.0.1 |
|---|---|---|---|---|---|
| Mouse Recording | Left/Right clicks | ← | ← | + Middle button, Scroll wheel | ← |
| Keyboard Recording | ✗ | ✗ | ✗ | ✓ | ← |
| Configuration | ✗ | Basic settings | ← | ← | + Window size cache |
| Hotkeys | Basic | → Settings dialog | + keyMap impl | + Abort key | + Focus hints |
| Storage | Basic save/load | + config.cfg | ← | + Path retention | + Default storage toggle |
| Localization | Basic i18n | ← | ← | ← | ← |
| UI Theming | Adaptive sizing | + Dark mode option | ← | ✗ JFileChooser | ← |
| Documentation | Basic | + Dialogs | ← | ← | + DeepWiki |
| Distribution | .jar only | ← | ← | ← | + .exe packaging |
Legend: ✓ = Implemented, ✗ = Not supported, ← = Inherited from previous, + = New/Enhanced
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L7-L64
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L1-L103
The findByVersion() method enables runtime lookup of version information:
This method:
- Streams all enum values
- Filters by exact version string match
- Returns the first match
- Throws
IllegalArgumentExceptionif version not found
Usage Pattern: Allows dialogs or other components to retrieve specific version metadata by version number string.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L88-L93
The getDisplayName() method formats version information for UI display:
Output Format: [YYYY-MM-DD HH:MM] X.Y.Z
Example: [2025-12-27 23:16] 1.0.1
This format is used in version selection lists within the UpdateInfoDialog, providing both temporal context and version identification in a compact form.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L79
Two static methods provide bulk access to version data:
Returns an array of version strings only:
["0.0.1", "0.0.2", "0.1.0", "1.0.0", "1.0.1"]Returns an array of formatted display names:
["[2025-07-05 20:20] 0.0.1", "[2025-07-06 22:51] 0.0.2", ...]
Both methods use Java Streams to map the enum values to string arrays, providing efficient bulk data access for UI components like combo boxes or list views.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L96-L102
MouseMacros follows semantic versioning principles:
- 0.0.x: Initial prototype and basic functionality
- 0.1.x: Architecture improvements and refactoring
- 1.0.x: Feature-complete releases with full input support
- 1.0.1+: Refinement, polish, and distribution improvements
| Period | Releases | Days Between Releases | Development Phase |
|---|---|---|---|
| Jul 5-6, 2025 | v0.0.1 → v0.0.2 | 1 day | Rapid initial development |
| Jul 6-8, 2025 | v0.0.2 → v0.1.0 | 2 days | Refactoring period |
| Jul 8-9, 2025 | v0.1.0 → v1.0.0 | 1 day | Feature completion sprint |
| Jul 9 - Dec 27, 2025 | v1.0.0 → v1.0.1 | 171 days | Polish and refinement |
The significant gap between v1.0.0 and v1.0.1 indicates a shift from rapid feature development to a focus on stability, documentation, and distribution quality.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L7-L64
Based on v1.0.1 changelog, planned improvements include:
Current implementation uses Metal look-and-feel, which has limitations:
- Simplified appearance
- Limited property customization
- Poor JFileChooser dark mode support
Proposed Alternatives:
- Nimbus: More modern, better customization
- System: Native OS appearance
- FlatLightLaf: Third-party flat design theme with extensive theming capabilities
Impact: Would require updates to theming system documented in Theming System and potentially affect ComponentUtil class behavior.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L60
The UpdateInfo enum provides a centralized, type-safe versioning system for MouseMacros. Key characteristics:
- Compile-time validation: Version information errors caught at build time
- Single source of truth: All version data in one location
- Structured access: Multiple accessor methods for different use cases
- UI integration: Direct consumption by about and update dialogs
- Historical record: Complete changelog embedded in application
This approach eliminates the need for external changelog files and ensures version information is always bundled with the application binary.
Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L1-L103, README.md L10-L14