Release Update

Updated MacroPad to support Tabs, fix system tray behavior, and break apart the monolith
This commit is contained in:
jknapp 2025-06-01 14:02:29 -07:00
parent 896875ce90
commit 5727a9ee68
7 changed files with 60 additions and 83 deletions

View File

@ -1,4 +1,4 @@
# MP-Server # MacroPad Server
A versatile MacroPad server application that lets you create, manage, and execute custom macros from both a local interface and remotely via a web interface. A versatile MacroPad server application that lets you create, manage, and execute custom macros from both a local interface and remotely via a web interface.
@ -8,8 +8,12 @@ A versatile MacroPad server application that lets you create, manage, and execut
- **Application Macros**: Launch applications or scripts directly - **Application Macros**: Launch applications or scripts directly
- **Key Modifiers**: Add Ctrl, Alt, Shift modifiers and Enter keypress to your text macros - **Key Modifiers**: Add Ctrl, Alt, Shift modifiers and Enter keypress to your text macros
- **Custom Images**: Assign images to macros for easy identification - **Custom Images**: Assign images to macros for easy identification
- **Tabbed Organization**: Organize macros into categories with custom tabs
- **Sorting Options**: Sort macros by name, type, or recent usage
- **Web Interface**: Access and trigger your macros from other devices on your network - **Web Interface**: Access and trigger your macros from other devices on your network
- **System Tray Integration**: Runs silently in your system tray for easy access - **QR Code Generation**: Quickly connect mobile devices to the web interface
- **System Tray Integration**: Minimize to tray, restore from tray menu
- **Dark Theme UI**: Modern dark interface with improved usability
- **Persistent Storage**: Macros are automatically saved for future sessions - **Persistent Storage**: Macros are automatically saved for future sessions
## Requirements ## Requirements
@ -23,6 +27,7 @@ A versatile MacroPad server application that lets you create, manage, and execut
- Pillow (PIL) - Pillow (PIL)
- flask_cors - flask_cors
- waitress - waitress
- qrcode
## Installation ## Installation
@ -30,71 +35,3 @@ A versatile MacroPad server application that lets you create, manage, and execut
2. Install the required dependencies: 2. Install the required dependencies:
```bash ```bash
pip install -r requirements.txt pip install -r requirements.txt
```
3. Run the application:
```bash
python mp-server-v2.py
```
## Alternative Installation Method
#### Windows only
1. Create a Folder you wish to run MacroPad from
2. Download ```mp-serverv2.exe``` from the ```dist``` folder
3. Accept the security notices, and run the application
> [!IMPORTANT]
> The executable is unsigned and may trigger security warnings. You may need to click "More info" and "Run anyway" in Windows SmartScreen or add an exception in your antivirus software.
## Usage
### Main Interface
When launched, MP-Server displays your existing macros with options to:
- **Add New Macro**: Create text snippets or application shortcuts
- **Edit Macro**: Modify existing macros
- **Delete Macro**: Remove unwanted macros
- **Minimize to Tray**: Hide the application to your system tray
- **Exit**: Close the application completely
### Creating a Macro
1. Click the "Add Macro" button
2. Fill in the details:
- **Name**: A descriptive name for your macro
- **Type**: Choose between Text or Application
- **Command/Text**: The text to insert or application command to run
- **Modifiers**: Select any combination of Ctrl, Alt, Shift, and Enter
- **Image**: Optionally add an image for visual identification
3. Click "Save" to create your macro
### Remote Access
The application runs a web server enabling remote access:
1. Note your computer's local IP address (shown in the application header)
2. From another device on the same network, open a web browser
3. Navigate to `http://<your-ip-address>:40000`
4. Click on any macro to execute it on your main computer
### System Tray
When minimized to the system tray:
- Right-click the tray icon to show options
- Select "Show" to restore the window
- Select "Exit" to close the application
## Example Application Commands
### Windows Examples
#### Steam Applications
```"C:\Program Files (x86)\Steam\steam.exe" steam://rungameid/2767030```
#### Chrome to a website
```"C:\Program Files\Google\Chrome\Application\chrome.exe" http://twitch.tv/shadowdao```
#### Special Thanks to CatArgent_ on Twitch for proof reading my stuff and providing valuable feedback.

View File

@ -1,6 +1,6 @@
# Configuration and constants for MacroPad Server # Configuration and constants for MacroPad Server
VERSION = "0.7.5 Beta" VERSION = "0.8.0 Beta"
DEFAULT_PORT = 40000 DEFAULT_PORT = 40000
# UI Theme colors # UI Theme colors

Binary file not shown.

38
macropad.spec Normal file
View File

@ -0,0 +1,38 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='macropad',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)

10
main.py
View File

@ -76,8 +76,10 @@ class MacroPadServer:
style.configure("TNotebook", background=THEME['bg_color'], borderwidth=0) style.configure("TNotebook", background=THEME['bg_color'], borderwidth=0)
style.configure("TNotebook.Tab", background=THEME['tab_bg'], foreground=THEME['fg_color'], style.configure("TNotebook.Tab", background=THEME['tab_bg'], foreground=THEME['fg_color'],
padding=[12, 8], borderwidth=0) padding=[12, 8], borderwidth=0)
style.map("TNotebook.Tab", background=[("selected", THEME['tab_selected'])], style.map("TNotebook.Tab",
foreground=[("selected", THEME['fg_color'])]) background=[("selected", THEME['tab_selected'])],
foreground=[("selected", THEME['fg_color'])],
padding=[("selected", [12, 8])]) # Keep same padding when selected
def create_ui(self): def create_ui(self):
"""Create the main user interface""" """Create the main user interface"""
@ -438,8 +440,8 @@ class MacroPadServer:
# Fall back to default font # Fall back to default font
font = ImageFont.load_default() font = ImageFont.load_default()
# Draw "M" in the center # Draw "MP" in the center
text = "M" text = "MP"
bbox = draw.textbbox((0, 0), text, font=font) bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0] text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1] text_height = bbox[3] - bbox[1]

View File

@ -217,7 +217,7 @@ class TabManager:
"""Show tab management dialog""" """Show tab management dialog"""
dialog = tk.Toplevel(self.parent) dialog = tk.Toplevel(self.parent)
dialog.title("Manage Tabs") dialog.title("Manage Tabs")
dialog.geometry("400x300") dialog.geometry("450x400") # Increased width and height
dialog.transient(self.parent) dialog.transient(self.parent)
dialog.configure(bg=THEME['bg_color']) dialog.configure(bg=THEME['bg_color'])
dialog.grab_set() dialog.grab_set()
@ -227,12 +227,12 @@ class TabManager:
bg=THEME['bg_color'], fg=THEME['fg_color']).pack(pady=10) bg=THEME['bg_color'], fg=THEME['fg_color']).pack(pady=10)
# Create scrollable frame # Create scrollable frame
list_frame = ttk.Frame(dialog) list_frame = tk.Frame(dialog, bg=THEME['bg_color'])
list_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) list_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
canvas = tk.Canvas(list_frame, bg=THEME['bg_color'], highlightthickness=0) canvas = tk.Canvas(list_frame, bg=THEME['bg_color'], highlightthickness=0)
scrollbar = ttk.Scrollbar(list_frame, orient="vertical", command=canvas.yview) scrollbar = ttk.Scrollbar(list_frame, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas) scrollable_frame = tk.Frame(canvas, bg=THEME['bg_color'])
scrollable_frame.bind( scrollable_frame.bind(
"<Configure>", "<Configure>",
@ -247,7 +247,7 @@ class TabManager:
# Category entries for each macro # Category entries for each macro
category_vars = {} category_vars = {}
for macro_id, macro in self.macro_manager.macros.items(): for macro_id, macro in self.macro_manager.macros.items():
frame = ttk.Frame(scrollable_frame) frame = tk.Frame(scrollable_frame, bg=THEME['bg_color'])
frame.pack(fill="x", pady=2, padx=5) frame.pack(fill="x", pady=2, padx=5)
tk.Label(frame, text=macro["name"], bg=THEME['bg_color'], fg=THEME['fg_color'], tk.Label(frame, text=macro["name"], bg=THEME['bg_color'], fg=THEME['fg_color'],
@ -259,9 +259,9 @@ class TabManager:
bg=THEME['highlight_color'], fg=THEME['fg_color'], insertbackground=THEME['fg_color']) bg=THEME['highlight_color'], fg=THEME['fg_color'], insertbackground=THEME['fg_color'])
entry.pack(side=tk.RIGHT, padx=(5, 0)) entry.pack(side=tk.RIGHT, padx=(5, 0))
# Buttons # Buttons - use a fixed frame at bottom
button_frame = ttk.Frame(dialog) button_frame = tk.Frame(dialog, bg=THEME['bg_color'])
button_frame.pack(fill=tk.X, pady=10) button_frame.pack(side=tk.BOTTOM, fill=tk.X, pady=10)
def save_categories(): def save_categories():
for macro_id, category_var in category_vars.items(): for macro_id, category_var in category_vars.items():

View File

@ -1 +1 @@
0.7.5 0.8.0