# pirC_setup_wizard.py import sys import json from PySide6.QtWidgets import ( QApplication, QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QListWidget, QHBoxLayout, QStackedLayout, QWidget, QDialogButtonBox ) CONFIG_FILE = "pirc_config.json" class PIRCSetupWizard(QDialog): def __init__(self): super().__init__() self.setWindowTitle("PIRC Setup Wizard") self.setGeometry(200, 200, 500, 400) self.nicknames = [] self.favorites = [] # Multi-step layout self.layout = QVBoxLayout() self.stack = QStackedLayout() self.layout.addLayout(self.stack) self.setLayout(self.layout) # Step 0: Welcome self.step_welcome = QWidget() w_layout = QVBoxLayout() w_layout.addWidget(QLabel( "Welcome to PIRC!\n\nThis wizard will guide you through the setup:\n" "1. Add your usernames (multiple allowed)\n" "2. Add favorite servers/channels (optional)\n" "3. Open the chat window\n" )) self.next0 = QPushButton("Start") self.next0.clicked.connect(lambda: self.stack.setCurrentIndex(1)) w_layout.addWidget(self.next0) self.step_welcome.setLayout(w_layout) self.stack.addWidget(self.step_welcome) # Step 1: Usernames self.step_users = QWidget() u_layout = QVBoxLayout() u_layout.addWidget(QLabel("Step 1: Add your usernames")) self.nick_input = QLineEdit() self.nick_input.setPlaceholderText("Enter a username") u_layout.addWidget(self.nick_input) self.nick_list = QListWidget() u_layout.addWidget(self.nick_list) h_btn_layout = QHBoxLayout() self.add_nick_btn = QPushButton("Add") self.add_nick_btn.clicked.connect(self.add_nickname) self.remove_nick_btn = QPushButton("Remove Selected") self.remove_nick_btn.clicked.connect(self.remove_nickname) h_btn_layout.addWidget(self.add_nick_btn) h_btn_layout.addWidget(self.remove_nick_btn) u_layout.addLayout(h_btn_layout) self.next1 = QPushButton("Next") self.next1.clicked.connect(lambda: self.stack.setCurrentIndex(2)) u_layout.addWidget(self.next1) self.step_users.setLayout(u_layout) self.stack.addWidget(self.step_users) # Step 2: Favorites self.step_fav = QWidget() f_layout = QVBoxLayout() f_layout.addWidget(QLabel("Step 2: Add favorite servers/channels (optional)")) self.server_input = QLineEdit() self.server_input.setPlaceholderText("Server address (e.g., irc.libera.chat)") self.channel_input = QLineEdit() self.channel_input.setPlaceholderText("Channel (e.g., #python)") f_layout.addWidget(self.server_input) f_layout.addWidget(self.channel_input) self.fav_list = QListWidget() f_layout.addWidget(self.fav_list) h_fav_btn_layout = QHBoxLayout() self.add_fav_btn = QPushButton("Add") self.add_fav_btn.clicked.connect(self.add_favorite) self.remove_fav_btn = QPushButton("Remove Selected") self.remove_fav_btn.clicked.connect(self.remove_favorite) h_fav_btn_layout.addWidget(self.add_fav_btn) h_fav_btn_layout.addWidget(self.remove_fav_btn) f_layout.addLayout(h_fav_btn_layout) self.next2 = QPushButton("Finish") self.next2.clicked.connect(self.finish_setup) f_layout.addWidget(self.next2) self.step_fav.setLayout(f_layout) self.stack.addWidget(self.step_fav) # --- Nicknames --- def add_nickname(self): nick = self.nick_input.text().strip() if nick: self.nicknames.append(nick) self.nick_list.addItem(nick) self.nick_input.clear() def remove_nickname(self): selected = self.nick_list.currentRow() if selected >= 0: self.nick_list.takeItem(selected) self.nicknames.pop(selected) # --- Favorites --- def add_favorite(self): server = self.server_input.text().strip() channel = self.channel_input.text().strip() if server and channel: self.favorites.append({"server": server, "channel": channel}) self.fav_list.addItem(f"{server} {channel}") self.server_input.clear() self.channel_input.clear() def remove_favorite(self): selected = self.fav_list.currentRow() if selected >= 0: self.fav_list.takeItem(selected) self.favorites.pop(selected) # --- Finish --- def finish_setup(self): config = { "nicknames": self.nicknames, "favorites": self.favorites } with open(CONFIG_FILE, "w") as f: json.dump(config, f, indent=4) self.accept() # Close wizard # --- Test --- if __name__ == "__main__": app = QApplication(sys.argv) wizard = PIRCSetupWizard() if wizard.exec() == QDialog.Accepted: print("Setup completed!") with open(CONFIG_FILE, "r") as f: print(json.load(f)) sys.exit(0)