22from PySide6 .QtCore import Qt , Slot
33from PySide6 .QtGui import QColor , QPalette
44from .settings_manager import SettingsManager
5- from .config import Config
65
76class SettingsWindow (QWidget ):
87 def __init__ (self , settings_manager : SettingsManager ):
98 super ().__init__ ()
109 self .settings = settings_manager
11- self .setWindowTitle (f"RainingKeys Config v{ Config .VERSION } " )
10+ self .config = self .settings .app_config
11+ self .setWindowTitle (f"RainingKeys Config v{ self .config .VERSION } " )
1212 self .resize (300 , 350 )
1313
1414 # Recording State
@@ -27,13 +27,13 @@ def init_ui(self):
2727 self .spin_x = QSpinBox ()
2828 self .spin_x .setRange (- 10000 , 10000 )
2929 self .spin_x .setPrefix ("X: " )
30- self .spin_x .setValue (self .settings . overlay_x )
30+ self .spin_x .setValue (self .config . position . x )
3131 self .spin_x .valueChanged .connect (self .on_pos_changed )
3232
3333 self .spin_y = QSpinBox ()
3434 self .spin_y .setRange (- 10000 , 10000 )
3535 self .spin_y .setPrefix ("Y: " )
36- self .spin_y .setValue (self .settings . overlay_y )
36+ self .spin_y .setValue (self .config . position . y )
3737 self .spin_y .valueChanged .connect (self .on_pos_changed )
3838
3939 pos_layout .addWidget (self .spin_x )
@@ -45,23 +45,13 @@ def init_ui(self):
4545 vis_group = QGroupBox ("Visual Settings" )
4646 vis_layout = QVBoxLayout ()
4747
48- # Direction (REMOVED: Bound to Position)
49- # dir_layout = QHBoxLayout()
50- # dir_layout.addWidget(QLabel("Fall Direction:"))
51- # self.combo_dir = QComboBox()
52- # self.combo_dir.addItems(["down", "up"])
53- # self.combo_dir.setCurrentText(self.settings.fall_direction)
54- # self.combo_dir.currentTextChanged.connect(self.on_visual_changed)
55- # dir_layout.addWidget(self.combo_dir)
56- # vis_layout.addLayout(dir_layout)
57-
5848 # Speed
5949 speed_layout = QHBoxLayout ()
6050 speed_layout .addWidget (QLabel ("Scroll Speed (px/s):" ))
6151 self .spin_speed = QSpinBox ()
6252 self .spin_speed .setRange (100 , 5000 )
6353 self .spin_speed .setSingleStep (50 )
64- self .spin_speed .setValue (self .settings .scroll_speed )
54+ self .spin_speed .setValue (self .config . visual .scroll_speed )
6555 self .spin_speed .valueChanged .connect (self .on_visual_changed )
6656 speed_layout .addWidget (self .spin_speed )
6757 vis_layout .addLayout (speed_layout )
@@ -82,7 +72,7 @@ def init_ui(self):
8272 lane_group = QGroupBox ("Lane Configuration" )
8373 lane_layout = QVBoxLayout ()
8474
85- self .lbl_lane_status = QLabel ("Current Keys: " + str (len (Config . LANE_MAP )))
75+ self .lbl_lane_status = QLabel ("Current Keys: " + str (len (self . config . lane_map )))
8676 self .lbl_lane_status .setWordWrap (True )
8777 lane_layout .addWidget (self .lbl_lane_status )
8878
@@ -102,7 +92,7 @@ def init_ui(self):
10292 kv_layout = QVBoxLayout ()
10393
10494 self .chk_kv_enabled = QCheckBox ("Enable KeyViewer" )
105- self .chk_kv_enabled .setChecked (self .settings . kv_enabled )
95+ self .chk_kv_enabled .setChecked (self .config . key_viewer . enabled )
10696 self .chk_kv_enabled .stateChanged .connect (self .on_kv_changed )
10797 kv_layout .addWidget (self .chk_kv_enabled )
10898
@@ -111,15 +101,14 @@ def init_ui(self):
111101 kv_grid .addWidget (QLabel ("Height:" ))
112102 self .spin_kv_height = QSpinBox ()
113103 self .spin_kv_height .setRange (10 , 500 )
114- self .spin_kv_height .setValue (self .settings . kv_height )
104+ self .spin_kv_height .setValue (self .config . key_viewer . height )
115105 self .spin_kv_height .valueChanged .connect (self .on_kv_changed )
116106 kv_grid .addWidget (self .spin_kv_height )
117107
118108 kv_grid .addWidget (QLabel ("Pos:" ))
119109 self .combo_kv_pos = QComboBox ()
120110 self .combo_kv_pos .addItems (["below" , "above" ])
121- # Handle removed 'auto' gracefully if config still has it
122- current = self .settings .kv_position
111+ current = self .config .key_viewer .panel_position
123112 if current not in ["below" , "above" ]:
124113 current = "below"
125114 self .combo_kv_pos .setCurrentText (current )
@@ -132,13 +121,13 @@ def init_ui(self):
132121 off_layout .addWidget (QLabel ("Offset X:" ))
133122 self .spin_kv_off_x = QSpinBox ()
134123 self .spin_kv_off_x .setRange (- 1000 , 1000 )
135- self .spin_kv_off_x .setValue (self .settings . kv_offset_x )
124+ self .spin_kv_off_x .setValue (self .config . key_viewer . panel_offset_x )
136125 self .spin_kv_off_x .valueChanged .connect (self .on_kv_changed )
137126 off_layout .addWidget (self .spin_kv_off_x )
138127 off_layout .addWidget (QLabel ("Y:" ))
139128 self .spin_kv_off_y = QSpinBox ()
140129 self .spin_kv_off_y .setRange (- 1000 , 1000 )
141- self .spin_kv_off_y .setValue (self .settings . kv_offset_y )
130+ self .spin_kv_off_y .setValue (self .config . key_viewer . panel_offset_y )
142131 self .spin_kv_off_y .valueChanged .connect (self .on_kv_changed )
143132 off_layout .addWidget (self .spin_kv_off_y )
144133 kv_layout .addLayout (off_layout )
@@ -149,13 +138,13 @@ def init_ui(self):
149138 self .spin_kv_opacity = QSpinBox ()
150139 self .spin_kv_opacity .setRange (0 , 100 )
151140 self .spin_kv_opacity .setSuffix ("%" )
152- self .spin_kv_opacity .setValue (int (self .settings . kv_opacity * 100 ))
141+ self .spin_kv_opacity .setValue (int (self .config . key_viewer . opacity * 100 ))
153142 self .spin_kv_opacity .valueChanged .connect (self .on_kv_changed )
154143 trans_layout .addWidget (self .spin_kv_opacity )
155144 kv_layout .addLayout (trans_layout )
156145
157146 self .chk_kv_counts = QCheckBox ("Show Key Counts" )
158- self .chk_kv_counts .setChecked (self .settings . kv_show_counts )
147+ self .chk_kv_counts .setChecked (self .config . key_viewer . show_counts )
159148 self .chk_kv_counts .stateChanged .connect (self .on_kv_changed )
160149 kv_layout .addWidget (self .chk_kv_counts )
161150
@@ -166,40 +155,39 @@ def init_ui(self):
166155 self .setLayout (layout )
167156
168157 def on_pos_changed (self ):
169- self .settings . set ( 'Position' , 'x' , self .spin_x .value () )
170- self .settings . set ( 'Position' , 'y' , self .spin_y .value () )
171- self .settings .save ()
158+ self .config . position . x = self .spin_x .value ()
159+ self .config . position . y = self .spin_y .value ()
160+ self .settings .save ()
172161
173162 def choose_color (self ):
174- current = self .settings .bar_color
163+ current = self .config . visual .bar_color
175164 color = QColorDialog .getColor (current , self , "Select Bar Color" , QColorDialog .ShowAlphaChannel )
176165 if color .isValid ():
177166 rgba = f"{ color .red ()} ,{ color .green ()} ,{ color .blue ()} ,{ color .alpha ()} "
178- self .settings . set ( 'Visual' , 'bar_color' , rgba )
167+ self .config . visual . bar_color_str = rgba
179168 self .settings .save ()
180169 self .update_color_btn_style ()
181170
182171 def update_color_btn_style (self ):
183- c = self .settings .bar_color
172+ c = self .config . visual .bar_color
184173 # Text color contrasting
185174 text_col = "black" if c .lightness () > 128 else "white"
186175 style = f"background-color: rgba({ c .red ()} ,{ c .green ()} ,{ c .blue ()} ,{ c .alpha ()} ); color: { text_col } ;"
187176 self .btn_color .setStyleSheet (style )
188177 self .btn_color .setText (f"RGBA({ c .red ()} ,{ c .green ()} ,{ c .blue ()} ,{ c .alpha ()} )" )
189178
190179 def on_visual_changed (self ):
191- # self.settings.set('Visual', 'fall_direction', self.combo_dir.currentText())
192- self .settings .set ('Visual' , 'scroll_speed' , self .spin_speed .value ())
180+ self .config .visual .scroll_speed = self .spin_speed .value ()
193181 self .settings .save ()
194182
195183 def on_kv_changed (self ):
196- self .settings . set ( 'keyviewer' , ' enabled' , self .chk_kv_enabled .isChecked () )
197- self .settings . set ( 'keyviewer' , ' height' , self .spin_kv_height .value () )
198- self .settings . set ( 'keyviewer' , ' panel_position' , self .combo_kv_pos .currentText () )
199- self .settings . set ( 'keyviewer' , ' panel_offset_x' , self .spin_kv_off_x .value () )
200- self .settings . set ( 'keyviewer' , ' panel_offset_y' , self .spin_kv_off_y .value () )
201- self .settings . set ( 'keyviewer' , ' show_counts' , self .chk_kv_counts .isChecked () )
202- self .settings . set ( 'keyviewer' , ' opacity' , self .spin_kv_opacity .value () / 100.0 )
184+ self .config . key_viewer . enabled = self .chk_kv_enabled .isChecked ()
185+ self .config . key_viewer . height = self .spin_kv_height .value ()
186+ self .config . key_viewer . panel_position = self .combo_kv_pos .currentText ()
187+ self .config . key_viewer . panel_offset_x = self .spin_kv_off_x .value ()
188+ self .config . key_viewer . panel_offset_y = self .spin_kv_off_y .value ()
189+ self .config . key_viewer . show_counts = self .chk_kv_counts .isChecked ()
190+ self .config . key_viewer . opacity = self .spin_kv_opacity .value () / 100.0
203191 self .settings .save ()
204192
205193 def toggle_recording (self ):
@@ -218,10 +206,8 @@ def toggle_recording(self):
218206
219207 if self .recorded_keys :
220208 # Save
221- self .settings .save_lanes (self .recorded_keys )
209+ self .settings .update_lanes (self .recorded_keys )
222210 self .lbl_lane_status .setText (f"Saved { len (self .recorded_keys )} lane keys." )
223-
224- # Update overlay if needed? save_lanes emits settings_changed which overlay listens to.
225211 else :
226212 self .lbl_lane_status .setText ("No keys recorded. Canceled." )
227213
0 commit comments