| 222 | self.gfx.flip() |
| 223 | |
| 224 | def _get_menu_items(self, iface_idx, web_ui): |
| 225 | items = [{'label': 'Start Ragnar'}] |
| 226 | |
| 227 | if self.interfaces: |
| 228 | iface = self.interfaces[iface_idx] |
| 229 | iface_text = f"{iface['name']} ({iface['ip']}/{self.scan_prefix})" |
| 230 | # Truncate long interface text to fit 480px display |
| 231 | if len(iface_text) > 28: |
| 232 | iface_text = iface_text[:27] + '\u2026' |
| 233 | else: |
| 234 | iface_text = "none" |
| 235 | |
| 236 | items.append({ |
| 237 | 'toggle': True, |
| 238 | 'label': 'Interface:', |
| 239 | 'value': iface_text, |
| 240 | 'value_color': UNSELECTED_COLOR, |
| 241 | 'max_value': iface_text, |
| 242 | }) |
| 243 | |
| 244 | items.append({ |
| 245 | 'toggle': True, |
| 246 | 'label': 'Web UI:', |
| 247 | 'value': 'ON :8000' if web_ui else 'OFF', |
| 248 | 'value_color': ON_COLOR if web_ui else OFF_COLOR, |
| 249 | 'max_value': 'ON :8000', |
| 250 | }) |
| 251 | |
| 252 | items.append({'label': 'Clear Data'}) |
| 253 | items.append({'label': 'Exit'}) |
| 254 | return items |
| 255 | |
| 256 | def show_main_menu(self): |
| 257 | """Show the main menu. Returns config dict or None to exit.""" |