Skip to content

Version History and Updates

Samera2022 edited this page Jan 30, 2026 · 1 revision

Version History

Relevant source files

Purpose and Scope

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.


Overview

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


Version Information Architecture


Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L5-L103


UpdateInfo Enum Structure

The UpdateInfo enum is defined with each version as an enum constant. The structure consists of:

Enum Constants

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

Instance Fields

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

Instance Methods

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

Static Utility Methods

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


Changelog Format Specification

Changelogs in the description field follow a consistent markdown-based format with standardized section headers:

Standard Sections

## [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

Example Entry Structure


Note: Changelog descriptions are written in Chinese (Simplified) as the primary development language.

Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L8-L63


Release Timeline


Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L7-L64


Version Details

v0.0.1 (2025-07-05 20:20)

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


v0.0.2 (2025-07-06 22:51)

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


v0.1.0 (2025-07-08 15:08)

Architecture Improvements

Added:

  • Implemented keyMap configuration functionality

Changed:

  • Major project structure refactoring
  • Reduced code coupling

Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L27-L31


v1.0.0 (2025-07-09 21:31)

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


v1.0.1 (2025-12-27 23:16)

Polish and Distribution

Added:

  • Window size persistence in cache.json
  • Memory of window dimensions for all dialog types
  • enable_default_storage option in Settings
  • One-click packaging script for .exe distribution
  • Mouse focus hints for TextField in settings.custom_hotkey dialog
  • DeepWiki documentation integration

Changed:

  • Enhanced README.md with detailed documentation
  • Relocated lang files to src directory

Fixed:

  • Resolved settings.custom_hotkey dialog keyboard input anomaly from v1.0.0

Storage Behavior:

  • When enable_default_storage = true: Uses only config.cfgdefault_mmc_storage_path; FileChooser selections don't update cache.json paths
  • When enable_default_storage = false: Uses cache.jsonlastSaveDirectory and lastLoadDirectory; 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 Evolution Matrix

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


Code Integration Points


Sources: src/io/github/samera2022/mouse_macros/UpdateInfo.java L1-L103


Version Lookup Implementation

The findByVersion() method enables runtime lookup of version information:


This method:

  1. Streams all enum values
  2. Filters by exact version string match
  3. Returns the first match
  4. Throws IllegalArgumentException if 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


Display Name Formatting

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


Array Utilities

Two static methods provide bulk access to version data:

getAllVersions()

Returns an array of version strings only:

["0.0.1", "0.0.2", "0.1.0", "1.0.0", "1.0.1"]

getAllDisplayNames()

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


Development Insights

Version Numbering Strategy

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

Release Cadence

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


Future Considerations

Based on v1.0.1 changelog, planned improvements include:

UIManager Style Migration

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


Summary

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

Clone this wiki locally