Commit Graph

16 Commits

Author SHA1 Message Date
LemonNexus defb83d213 feat: Widget Registry - plugins register widgets dynamically 2026-02-15 16:16:07 +00:00
LemonNexus 3ee405475f fix: Fix widget not appearing - store reference and set proper position
ISSUE: Clock and System Monitor widgets were created but not visible.
The widgets were being garbage collected because they weren't stored.

FIX:
1. Store widget in self._active_widgets list to prevent GC
2. Set parent=self to keep widget alive with overlay
3. Position widget at center of screen (visible location)
4. Call raise_() and activateWindow() to bring to front
5. Added debug output showing widget position

WIDGET CREATION NOW:
- Creates widget with parent
- Positions at center of screen
- Shows, raises, activates
- Stores reference in list
- Prints position for debugging
2026-02-15 16:10:12 +00:00
LemonNexus ab506cf7fa feat: Add top navigation tabs - Plugins | Widgets | Settings
NEW UI LAYOUT:
- Added tab bar at top of content area with 3 tabs:
  * 🔌 Plugins - Shows plugin list from sidebar + plugin content
  * 🎨 Widgets - Widget gallery to add overlay widgets
  * ⚙️ Settings - All settings in one place

WIDGETS TAB FEATURES:
- Built-in widgets section with Clock and System Monitor
- Each widget has Add button to create overlay
- Plugin widgets section (placeholder for plugin-added widgets)
- Descriptions for each widget type

SETTINGS TAB FEATURES:
- Moved settings from dialog into dedicated tab
- Sub-tabs: Plugins, Plugin Store, Hotkeys, Appearance, About
- Removed Settings button from header (now in tabs)

CHANGES:
- _create_content_area() replaced with _create_content_area_with_tabs()
- Added _switch_tab() method
- Added _create_plugins_tab(), _create_widgets_tab(), _create_settings_tab()
- Added _create_widget_button() helper
- Added _add_clock_widget() and _add_system_monitor_widget()
- Removed Settings button from header bar
- Removed old _open_settings() dialog approach

The UI is now organized with clear navigation between
plugins, widgets, and settings via top tabs.
2026-02-15 15:01:20 +00:00
LemonNexus a81e5caf64 fix: Built-in Plugin Store, dependency dialog, removed settings/plugin_store plugins
CHANGES:
1. Fixed plugin download to use raw git files instead of git clone
   - Avoids Windows permission issues with .git/objects
   - Downloads __init__.py and plugin.py directly

2. Added clickable dependencies button showing full dependency dialog
   - Shows Core Services Required
   - Shows Plugins Required
   - Lists what will be auto-installed

3. Integrated Plugin Store into Settings dialog
   - Added 🔌 Store tab to Settings
   - Plugin Store is now built-in, not a plugin

4. Removed plugins/settings/ and plugins/plugin_store_ui/
   - Settings is now built into overlay_window.py
   - Users access via Settings button

5. Added _create_plugin_store_tab() method to OverlayWindow

NOTE: Pull latest EU-Utility-Plugins-Repo to get Clock Widget
2026-02-15 02:56:14 +00:00
LemonNexus 0bdb3ce189 feat: Add plugin-to-plugin dependencies support
Plugins can now declare dependencies on other plugins.

NEW FEATURES:
- dependencies['plugins'] = ['plugin_id1', 'plugin_id2']
- Separates pip packages (auto-installed) from plugin dependencies (user enabled)
- Settings dialog shows which plugins need to be enabled first
- PluginDependencyCheck tracks installed/enabled status

EXAMPLE:
dependencies = {
    'pip': ['requests'],
    'plugins': ['plugins.dashboard.plugin.DashboardPlugin']
}
2026-02-14 23:49:13 +00:00
LemonNexus 706a5710a9 feat: Auto-install plugin dependencies when enabling plugins
NEW FEATURES:

1. Plugin Dependency Declaration (BasePlugin):
   - Added 'dependencies' class attribute
   - Format: {'pip': ['package1', 'package2'], 'optional': {...}}
   - Plugins can declare required pip packages

2. Plugin Dependency Manager (core/plugin_dependency_manager.py):
   - Checks if declared dependencies are installed
   - Installs missing packages via pip
   - Tracks installation status
   - Shows progress dialog during installation

3. Settings Dialog Integration:
   - When enabling a plugin with dependencies, shows dialog
   - Lists missing dependencies
   - Asks user if they want to install
   - Shows progress bar during installation
   - Handles installation failures gracefully

4. Example: Game Reader Test plugin:
   - Declares dependencies: pillow, numpy
   - Optional: easyocr, pytesseract, paddleocr
   - When enabled, prompts to install if missing

WORKFLOW:
1. User enables a plugin in Settings → Plugins
2. System checks if plugin has dependencies
3. If dependencies missing, shows dialog
4. User clicks Yes to install
5. Progress dialog shows installation progress
6. Plugin loads after dependencies installed

This eliminates manual pip install steps for plugins!
2026-02-14 23:46:01 +00:00
LemonNexus 899b74fe62 fix: Remove redundant Settings plugin and baked-in Spotify widget
CHANGES:
1. Settings plugin is no longer categorized as 'Core' plugin
   - The settings menu is built into the overlay window
   - Having both was redundant
   - Settings plugin still exists but won't be auto-enabled

2. Removed hardcoded SpotifyWidget from core/dashboard.py
   - Spotify widget was baked into core instead of being a proper plugin
   - Should be in plugins/spotify_controller/ instead
   - Commented out the widget addition for now

This addresses the user's feedback that:
- Settings plugin is redundant with the settings menu
- Spotify widget shouldn't be in core
2026-02-14 19:58:18 +00:00
LemonNexus de63d8895a fix: Fix sidebar plugin switching and Dashboard border color
BUG 1: Sidebar buttons clicked wrong plugin
- Lambda captured idx by reference, always using last value
- Fixed by using functools.partial to capture by value

BUG 2: Dashboard plugin KeyError 'border_subtle'
- Changed to 'border_default' which exists in EU_COLORS

The sidebar should now correctly switch to the clicked plugin.
2026-02-14 19:53:51 +00:00
LemonNexus 539f07e713 fix: Fix lambda function argument errors in overlay_window.py
BUG: TypeError: missing 1 required positional argument: 'checked'

The lambda functions were expecting a 'checked' argument that wasn't
being passed by the signals:
- QShortcut.activated doesn't pass any arguments
- SidebarButton.clicked doesn't pass any arguments

Fix: Removed 'checked' parameter from both lambda functions.
2026-02-14 19:49:03 +00:00
LemonNexus 5fc8d85df5 fix: Replace border_color with border_default in overlay_window.py
BUG: KeyError: 'border_color' when opening Settings dialog.

The color dictionary uses 'border_default' not 'border_color'.
Fixed all 5 occurrences in the file.
2026-02-14 19:29:30 +00:00
LemonNexus 0d740c3621 fix: Replace accent_primary with accent_orange in overlay_window.py
BUG: KeyError: 'accent_primary' when opening Settings dialog.

The color dictionary uses 'accent_orange' not 'accent_primary'.
Fixed all 10 occurrences in the file.
2026-02-14 19:22:06 +00:00
LemonNexus 92e528b5b6 feat: Fix system tray and add configurable hotkeys
SYSTEM TRAY FIXES:
- Added fallback icon search paths
- Falls back to standard system icon if no custom icon found
- Better error handling for missing icon files
- System tray should now show in Windows taskbar

HOTKEY MANAGEMENT:
- New HotkeyManager class (core/hotkey_manager.py)
  - JSON-based configuration storage
  - 10 configurable global hotkeys
  - 2 local hotkeys
  - Validation for key combinations
  - Conflict detection
  - Reset to defaults

HOTKEYS TAB:
- Added 'Hotkeys' tab to Settings dialog
- Categorized by scope: Global/Local/Overlay
- Shows current key bindings
- Enable/disable toggles
- Visual styling with color-coded sections
- Reset to defaults button

DEFAULT HOTKEYS:
  Global:
  - Ctrl+Shift+U: Toggle overlay
  - Ctrl+Shift+H: Hide overlays
  - Ctrl+Shift+F: Universal search
  - Ctrl+Shift+N: Nexus search
  - Ctrl+Shift+C: Calculator
  - Ctrl+Shift+M: Spotify
  - Ctrl+Shift+R: Game reader (OCR)
  - Ctrl+Shift+S: Skill scanner
  - Ctrl+Shift+L: Loot tracker
  - Ctrl+Shift+P: Screenshot

  Local:
  - Ctrl+T: Toggle theme

  Overlay:
  - ESC: Close overlay
2026-02-14 19:17:42 +00:00
LemonNexus db0eb5bf65 feat: Redesign Plugins Settings tab with categorization
IMPROVED PLUGINS SETTINGS UI:

1. Visual Improvements:
   - Added header with plugin management info
   - Added color-coded legend (Core/Test/Other)
   - Styled plugin rows with hover effects
   - Version badges with orange accent color
   - Scrollable plugin list for large numbers
   - Better spacing and visual hierarchy

2. Plugin Categorization:
   - Core Plugins (teal): skill_scanner, loot_tracker, mining_helper,
     chat_logger, global_tracker, nexus_search, universal_search,
     calculator, settings, dashboard
   - Test Plugins (orange): game_reader_test, log_parser_test
   - Other Plugins (gray): All remaining plugins

3. Naming Convention:
   - Core plugins prefixed with 'Core-'
   - Test plugins prefixed with 'Test-'
   - Other plugins have no prefix

4. Technical Changes:
   - Added QScrollArea import
   - New _add_plugin_row() helper method
   - Grouped plugins by category
   - Styled checkboxes with EU theme
   - Added author attribution display
2026-02-14 19:14:22 +00:00
LemonNexus 8aad153c11 fix: Add missing QCheckBox import to overlay_window.py
BUG: name 'QCheckBox' is not defined errors in plugins settings tab.

Root cause: QCheckBox was imported inside _open_settings() method but
_create_plugins_settings_tab() also uses it. The local import didn't
propagate to the helper method.

FIX:
- Added QCheckBox to top-level PyQt6 imports
- Added QTabWidget to top-level imports (also used)
- Removed redundant local imports from _open_settings()

All settings UI components now available globally in the module.
2026-02-14 18:56:04 +00:00
LemonNexus 1c619d40c6 fix: Add error handling to plugins settings tab
BUG: AttributeError when accessing plugin_class.name in settings tab.

The error occurred when iterating over discovered plugins and trying
to access .name, .version, or .description attributes. While all
plugins should have these attributes, there might be edge cases
where the plugin_class is not properly formed.

FIX:
- Added getattr() with defaults for safe attribute access
- Added try-except around each plugin row creation
- Added error logging for debugging
- Gracefully skip broken plugin entries instead of crashing

Changes:
- _create_plugins_settings_tab() now uses getattr() for all
  plugin attributes with sensible defaults
- Each plugin row is wrapped in try-except for isolation
- Errors are logged but don't crash the settings UI
2026-02-14 18:54:16 +00:00
LemonNexus d64cf8da1f fix: Clean repository - remove workspace pollution
Removed workspace files that should not be in EU-Utility repo:
- AGENTS.md, SOUL.md, BOOTSTRAP.md (workspace config)
- memory/ (session logs)
- skills/ (OpenClaw skills)
- projects/ (other projects)
- tests/ (workspace tests)
- ui/ (old UI files)

Now EU-Utility repo contains ONLY EU-Utility code:
- core/ (12 services)
- plugins/ (31 plugins)
- docs/ (15 documentation files)
- tests/ (42 test cases)
- assets/ (icons, sounds)

Repository is now clean and focused.
2026-02-14 03:34:04 +00:00