Improve flight path display options.

Adds an option show only selected flight, and also changes the show
all option to highlight the selected flight.
This commit is contained in:
Dan Albert
2020-10-09 16:18:08 -07:00
parent 31d5e3151b
commit 2d8c8c63c9
5 changed files with 145 additions and 37 deletions

View File

@@ -1,16 +1,16 @@
import logging
import sys
import webbrowser
from typing import Optional
from typing import Optional, Union
from PySide2.QtCore import Qt
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import (
QAction,
QDesktopWidget,
QActionGroup, QDesktopWidget,
QFileDialog,
QMainWindow,
QMessageBox,
QMenu, QMessageBox,
QSplitter,
QVBoxLayout,
QWidget,
@@ -19,7 +19,7 @@ from PySide2.QtWidgets import (
import qt_ui.uiconstants as CONST
from game import Game, persistency
from qt_ui.dialogs import Dialog
from qt_ui.displayoptions import DisplayOptions
from qt_ui.displayoptions import DisplayGroup, DisplayOptions, DisplayRule
from qt_ui.models import GameModel
from qt_ui.uiconstants import URLS
from qt_ui.widgets.QTopPanel import QTopPanel
@@ -139,17 +139,19 @@ class QLiberationWindow(QMainWindow):
displayMenu = self.menu.addMenu("&Display")
for display_rule in DisplayOptions.menu_items():
def make_check_closure():
def closure():
display_rule.value = action.isChecked()
return closure
action = QAction(f"&{display_rule.menu_text}", displayMenu)
action.setCheckable(True)
action.setChecked(display_rule.value)
action.toggled.connect(make_check_closure())
displayMenu.addAction(action)
last_was_group = True
for item in DisplayOptions.menu_items():
if isinstance(item, DisplayRule):
displayMenu.addAction(self.make_display_rule_action(item))
last_was_group = False
elif isinstance(item, DisplayGroup):
if not last_was_group:
displayMenu.addSeparator()
group = QActionGroup(displayMenu)
for display_rule in item:
displayMenu.addAction(
self.make_display_rule_action(display_rule, group))
last_was_group = True
help_menu = self.menu.addMenu("&Help")
help_menu.addAction("&Discord Server", lambda: webbrowser.open_new_tab("https://" + "discord.gg" + "/" + "bKrt" + "rkJ"))
@@ -162,6 +164,21 @@ class QLiberationWindow(QMainWindow):
help_menu.addSeparator()
help_menu.addAction(self.showAboutDialogAction)
@staticmethod
def make_display_rule_action(
display_rule, group: Optional[QActionGroup] = None) -> QAction:
def make_check_closure():
def closure():
display_rule.value = action.isChecked()
return closure
action = QAction(f"&{display_rule.menu_text}", group)
action.setCheckable(True)
action.setChecked(display_rule.value)
action.toggled.connect(make_check_closure())
return action
def newGame(self):
wizard = NewGameWizard(self)
wizard.show()