Untitled
unknown
plain_text
a year ago
7.1 kB
10
Indexable
def get_current_config(self):
"""Get current bin configuration"""
config = []
for bin_id in self.bin_frames.keys():
config.append({
'id': bin_id,
'name': self.name_entries[bin_id].get().strip(),
'color': self.color_buttons[bin_id].cget('fg_color'),
'color_dark': self.color_dark_buttons[bin_id].cget('fg_color'),
'is_default': False
})
return config
def save_custom_config(self, name):
"""Save current configuration to a JSON file"""
config_dir = 'custom_configs'
if not os.path.exists(config_dir):
os.makedirs(config_dir)
config = {
'name': name,
'bins': self.get_current_config(),
'created_at': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
filename = f"{name.lower().replace(' ', '_')}.json"
filepath = os.path.join(config_dir, filename)
try:
with open(filepath, 'w', encoding='utf-8') as f:
json.dump(config, f, indent=2, ensure_ascii=False)
return True
except Exception as e:
print(f"Error saving configuration: {e}")
return False
def load_custom_config(self, filename):
"""Load a custom configuration from a JSON file"""
try:
with open(filename, 'r', encoding='utf-8') as f:
config = json.load(f)
# Update each bin with loaded configuration
for bin_config in config['bins']:
bin_id = bin_config['id']
if bin_id in self.name_entries:
# Update name
self.name_entries[bin_id].delete(0, 'end')
self.name_entries[bin_id].insert(0, bin_config['name'])
# Update colors
self.color_buttons[bin_id].configure(
fg_color=bin_config['color'],
hover_color=bin_config['color']
)
self.color_dark_buttons[bin_id].configure(
fg_color=bin_config['color_dark'],
hover_color=bin_config['color_dark']
)
return True
except Exception as e:
print(f"Error loading configuration: {e}")
return False
def get_saved_configs(self):
"""Get list of saved configurations"""
config_dir = 'custom_configs'
if not os.path.exists(config_dir):
return []
configs = []
for filename in os.listdir(config_dir):
if filename.endswith('.json'):
try:
with open(os.path.join(config_dir, filename), 'r', encoding='utf-8') as f:
config = json.load(f)
configs.append({
'filename': os.path.join(config_dir, filename),
'name': config['name'],
'created_at': config.get('created_at', 'Unknown')
})
except Exception as e:
print(f"Error reading configuration file {filename}: {e}")
return sorted(configs, key=lambda x: x['created_at'], reverse=True)
def show_save_dialog(self):
"""Show dialog to save current configuration"""
def save_callback(name):
if self.save_custom_config(name):
print(f"Configuration '{name}' saved successfully")
else:
print("Error saving configuration")
SaveConfigDialog(self, save_callback, self.dark_mode)
def show_load_dialog(self):
"""Show dialog to load a saved configuration"""
configs = self.get_saved_configs()
if not configs:
print("No saved configurations found")
return
def load_callback(filename):
if self.load_custom_config(filename):
print("Configuration loaded successfully")
else:
print("Error loading configuration")
LoadConfigDialog(self, configs, load_callback, self.dark_mode)
def setup_config_management(self):
"""Set up the configuration management buttons"""
# Create buttons container with two rows
self.config_buttons = ctk.CTkFrame(
self.container,
fg_color="transparent"
)
self.config_buttons.pack(pady=(0, 20))
# Top row for save/load configuration presets
self.top_row = ctk.CTkFrame(
self.config_buttons,
fg_color="transparent"
)
self.top_row.pack(pady=(0, 10))
# Load configuration button
self.load_button = ctk.CTkButton(
self.top_row,
text="Load Configuration",
command=self.show_load_dialog,
font=("Dongle", 20),
fg_color=self.button_color,
hover_color=self.button_hover,
text_color=self.text_color,
height=40,
width=150
)
self.load_button.pack(side='left', padx=10)
# Save configuration button
self.save_button = ctk.CTkButton(
self.top_row,
text="Save Configuration",
command=self.show_save_dialog,
font=("Dongle", 20),
fg_color=self.button_color,
hover_color=self.button_hover,
text_color=self.text_color,
height=40,
width=150
)
self.save_button.pack(side='left', padx=10)
# Bottom row for action buttons
self.bottom_row = ctk.CTkFrame(
self.config_buttons,
fg_color="transparent"
)
self.bottom_row.pack()
# Save changes button
self.save_changes_button = ctk.CTkButton(
self.bottom_row,
text="Save Changes",
command=self.save_changes,
font=("Dongle", 20),
fg_color='#34c759', # Green color
hover_color='#30d158',
text_color='white',
height=40,
width=150
)
self.save_changes_button.pack(side='left', padx=10)
# Restore defaults button
self.restore_button = ctk.CTkButton(
self.bottom_row,
text="Restore All Defaults",
command=self.restore_defaults,
font=("Dongle", 20),
fg_color='#ff3b30', # Red color
hover_color='#ff453a',
text_color='white',
height=40,
width=150
)
self.restore_button.pack(side='left', padx=10)Editor is loading...
Leave a Comment