139 lines
5.0 KiB
Python
139 lines
5.0 KiB
Python
# 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)
|