def __init__(self, parent, message_key: str): """ Confirm dialog for dangerous actions :param parent: gui's main window :param message_key: Key to the dictionary for the message to display """ QDialog.__init__(self, parent) self.setFixedSize(QSize(350, 120)) self.question = QLabel(tr(message_key)) self.question.setAlignment(Qt.AlignCenter) # Quit buttons self.ok_btn = QPushButton("Ok") self.ok_btn.clicked.connect(self.accept) self.ok_btn.setFixedSize(QSize(60, 33)) self.cancel_btn = QPushButton(tr("btn_cancel")) self.cancel_btn.clicked.connect(self.reject) self.cancel_btn.setFixedSize(QSize(90, 33)) # Layout layout = QGridLayout() layout.addWidget(self.question, 0, 0, 1, 2) layout.addWidget(self.ok_btn, 1, 0) layout.setAlignment(self.ok_btn, Qt.AlignCenter) layout.addWidget(self.cancel_btn, 1, 1) layout.setAlignment(self.cancel_btn, Qt.AlignLeft) self.setLayout(layout) self.setStyleSheet(get_stylesheet("dialog"))
def initUI(self): mainLayout = QGridLayout(self) mainLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) mainLayout.setColumnStretch(0, 0) mainLayout.setColumnStretch(1, 1) mainLayout.setColumnStretch(2, 1) self.setLayout(mainLayout) line = 0 nameText = QLabel('Name:') nameText.setAlignment(Qt.AlignRight) self.nameIn = QLineEdit() mainLayout.addWidget(nameText, line, 0) mainLayout.addWidget(self.nameIn, line, 1, 1, 2) line += 1 tempText = QLabel('Template:') tempText.setAlignment(Qt.AlignRight) self.tempCombo = QComboBox() self.tempCombo.addItem('[NO TEMPLATE]', 0) self._read_templates() mainLayout.addWidget(tempText, line, 0) mainLayout.addWidget(self.tempCombo, line, 1, 1, 2) line += 1 okBtn = QPushButton("Create") okBtn.clicked.connect(self.accept) cancelBtn = QPushButton("Cancel") cancelBtn.clicked.connect(self.reject) mainLayout.addWidget(okBtn, line, 1, 1, 1) mainLayout.addWidget(cancelBtn, line, 2, 1, 1) self.setWindowTitle("New Picker Interface Information") self.setWindowFlags(Qt.WindowStaysOnTopHint)
class NadamUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.01") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.epsilon = QLineEdit("1e-07") self.epsilon.setValidator(QDoubleValidator(0., 1e-10, 10)) self.beta_1 = QLineEdit("0.9") self.beta_1.setValidator(QDoubleValidator(0., 1e-10, 10)) self.beta_2 = QLineEdit("0.999") self.beta_2.setValidator(QDoubleValidator(0., 1e-10, 10)) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("Epsilon:"),1 ,0) self.main_layout.addWidget(self.epsilon,1, 1) self.main_layout.addWidget(QLabel("Beta 1:"), 2, 0) self.main_layout.addWidget(self.beta_1,2, 1) self.main_layout.addWidget(QLabel("Beta 2:"), 3, 0) self.main_layout.addWidget(self.beta_2,3, 1) self.setLayout(self.main_layout) def get_optimizer(self): return None
class FtrlUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.001") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.learning_rate_power = QLineEdit("0.5") self.learning_rate_power.setValidator(QDoubleValidator(0., 1., 5)) self.initial_accumulator_value = QLineEdit("0.1") self.initial_accumulator_value.setValidator(QDoubleValidator(0., 1e-10, 10)) self.l1_regularization_strength = QLineEdit("0.0") self.l1_regularization_strength.setValidator(QDoubleValidator(0., 1e-10, 10)) self.l2_regularization_strength = QLineEdit("0.0") self.l2_regularization_strength.setValidator(QDoubleValidator(0., 1e-10, 10)) self.l2_shrinkage_regularization_strength = QLineEdit("0.0") self.l2_shrinkage_regularization_strength.setValidator(QDoubleValidator(0., 1e-10, 10)) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("Initial_accumulator_value:"),1 ,0) self.main_layout.addWidget(self.initial_accumulator_value,1, 1) self.main_layout.addWidget(QLabel("l1_regularization_strength"), 2, 0) self.main_layout.addWidget(self.l1_regularization_strength,2, 1) self.main_layout.addWidget(QLabel("l2_regularization_strength:"), 3, 0) self.main_layout.addWidget(self.l2_regularization_strength,3, 1) self.main_layout.addWidget(QLabel("l2_shrinkage_regularization_strength"), 4, 0) self.main_layout.addWidget(self.l2_shrinkage_regularization_strength, 4 , 1) self.setLayout(self.main_layout) def get_optimizer(self): return None
def _create_status_lights(self, layout): # Create a frame to hold the register's bits status_frame = QFrame(self) layout.addWidget(status_frame) layout.setAlignment(status_frame, Qt.AlignBottom) status_layout = QGridLayout(status_frame) status_layout.setSpacing(0) status_layout.setMargin(0) status_frame.setLayout(status_layout) status_frame.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) # Add indicators for each status in the register, from MSB to LSB for col, stat in enumerate(STATUS_INDS.keys()): check = QCheckBox(status_frame) check.setFixedSize(30, 20) check.setStyleSheet( 'QCheckBox::indicator{subcontrol-position:center;}') check.stateChanged.connect(lambda state: self._update_status()) status_layout.addWidget(check, 0, col) status_layout.setAlignment(check, Qt.AlignCenter) self._status_cmp_switches[stat] = check check = QCheckBox(status_frame) check.setFixedSize(30, 20) check.setStyleSheet( 'QCheckBox::indicator{subcontrol-position:center;}') check.stateChanged.connect(lambda state: self._update_status()) status_layout.addWidget(check, 1, col) status_layout.setAlignment(check, Qt.AlignCenter) self._status_ign_switches[stat] = check
class RMSpropUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.01") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.momentum = QLineEdit("0.00") self.momentum.setValidator(QDoubleValidator(0., 1e5, 2)) self.rho = QLineEdit("0.9") self.rho.setValidator(QDoubleValidator(0., 1e5, 10)) self.epsilon = QLineEdit("1e-07") self.epsilon.setValidator(QDoubleValidator(0., 1e-10, 10)) self.centered = QComboBox() self.centered.addItems(["True", "False"]) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("Momentum:"), 1, 0) self.main_layout.addWidget(self.momentum,1, 1) self.main_layout.addWidget(QLabel("rho:"), 2, 0) self.main_layout.addWidget(self.rho,2 , 1) self.main_layout.addWidget(QLabel("epsilon:"),3 ,0) self.main_layout.addWidget(self.epsilon,3, 1) self.main_layout.addWidget(QLabel("centered:"), 4, 0) self.main_layout.addWidget(self.centered, 4, 1) self.setLayout(self.main_layout) def get_optimizer(self): return None
def add_widgets_to_screen(self, cw): grid_layout = QGridLayout(cw) controls_layout = QGridLayout() controls_layout.setAlignment(Qt.AlignVCenter) grid_layout.addLayout(controls_layout, 0, 0, 2, 3) controls_layout.addWidget(self._forward_btn, 0, 1) controls_layout.addWidget(self._left_btn, 1, 0) controls_layout.addWidget(self._brake_btn, 1, 1) controls_layout.addWidget(self._right_btn, 1, 2) grid_layout.addWidget(self._lbl_ip, 2, 0) grid_layout.addWidget(self._le_ip, 2, 1, 1, 2) # Stretch the line edit into two cells grid_layout.addWidget(self._lbl_port, 3, 0) grid_layout.addWidget(self._sb_port, 3, 1, 1, 2) # Stretch the spinbox into two cells grid_layout.addWidget(self._lbl_use_proxy, 4, 0) grid_layout.addWidget(self._cb_proxy, 4, 1) grid_layout.addWidget(self._lbl_proxy_address, 5, 0) grid_layout.addWidget(self._le_proxy_address, 5, 1, 1, 2) grid_layout.addWidget(self._lbl_proxy_port, 6, 0) grid_layout.addWidget(self._sb_proxy_port, 6, 1, 1, 2) grid_layout.addWidget(self._lbl_mode, 7, 0) grid_layout.addWidget(self._cbo_mode, 7, 1, 1, 2) grid_layout.addWidget(self._image_viewer, 0, 3, 5, 1) grid_layout.addWidget(self._btn_restart, 5, 3) vehicle_layout = QVBoxLayout() grid_layout.addLayout(vehicle_layout, 0, 4) vehicle_layout.addWidget(self._lbl_gear) vehicle_layout.addWidget(self._btn_change_gear) vehicle_layout.addWidget(self._trim_btn)
def initScores(container: QWidget): container.removeWidget(state["scoreWidget"]) state["scoreWidget"].deleteLater() newScoreWidget = QWidget() newScoreWidget.hide() scoreLayout = QGridLayout() scoreLayout.setAlignment(Qt.AlignTop) diff1 = QLabel("Easy") scoreLayout.addWidget(diff1, 0, 1) for i, el in enumerate(state["highScores"]["easy"]): text = "{} {}".format(el[0], el[1]) topPlayer = QLabel(text) scoreLayout.addWidget(topPlayer, i + 1, 1) diff2 = QLabel("Normal") scoreLayout.addWidget(diff2, 0, 2) for i, el in enumerate(state["highScores"]["normal"]): text = "{} {}".format(el[0], el[1]) topPlayer = QLabel(text) scoreLayout.addWidget(topPlayer, i + 1, 2) diff3 = QLabel("Hard") scoreLayout.addWidget(diff3, 0, 3) for i, el in enumerate(state["highScores"]["hard"]): text = "{} {}".format(el[0], el[1]) topPlayer = QLabel(text) scoreLayout.addWidget(topPlayer, i + 1, 3) newScoreWidget.setLayout(scoreLayout) state["scoreWidget"] = newScoreWidget container.addWidget(newScoreWidget)
def setup_p_preferences(self) -> None: """inits setup_p_preferences stacked widget page widget Returns: None""" self.p_preferences = QWidget() self.p_preferences.resize(500, 250) self.p_preferences.setWindowTitle("preferences") self.list_Widget = QListWidget(self.p_preferences) self.list_Widget.addItems(["appearance", "about"]) self.list_Widget.setMaximumWidth(100) self.stacked_widget_preferences = QStackedWidget(self.p_preferences) # setup appearance self.apperence_widget = QWidget() self.stacked_widget_preferences.addWidget(self.apperence_widget) self.in_combo_themes = QComboBox(self.apperence_widget) self.in_combo_themes.addItems(["dark_theme", "light_theme"]) self.in_combo_theme_initial = QComboBox(self.apperence_widget) self.in_combo_theme_initial.addItems(["dark_theme", "light_theme"]) self.text_size_slider = QSlider(QtCore.Qt.Orientation.Horizontal, self.apperence_widget) self.text_size_slider.setTickPosition(QSlider.TickPosition.TicksAbove) self.text_size_slider.setMaximum(15) self.text_size_slider.setMinimum(8) stacked_widget_preferences_layout = QGridLayout(self.apperence_widget) stacked_widget_preferences_layout.setAlignment(QtCore.Qt.AlignTop) stacked_widget_preferences_layout.addWidget(QLabel("theme"), 0, 0) stacked_widget_preferences_layout.addWidget(self.in_combo_themes, 0, 1) stacked_widget_preferences_layout.addWidget(QLabel("initial theme"), 1, 0) stacked_widget_preferences_layout.addWidget( self.in_combo_theme_initial, 1, 1) stacked_widget_preferences_layout.addWidget(QLabel("Fontsize"), 2, 0) stacked_widget_preferences_layout.addWidget(self.text_size_slider, 2, 1) self.about_widget = QWidget() self.stacked_widget_preferences.addWidget(self.about_widget) about_text_edit = QTextEdit(self.about_widget) about_text_edit.setText( "developed by Maurice Jarck\nwith kind support from Shuai Lou\n07.2020-04.2021" ) about_text_edit.setEnabled(False) stacked_widget_about_layout = QGridLayout(self.about_widget) stacked_widget_about_layout.addWidget(about_text_edit) p_apperance_layout = QHBoxLayout(self.p_preferences) p_apperance_layout.addWidget(self.list_Widget) p_apperance_layout.addWidget(self.stacked_widget_preferences)
def _setup_ui(self): self.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) # Set up our basic layout layout = QGridLayout(self) self.setLayout(layout) layout.setSpacing(1) layout.setMargin(1) for bank in range(0o10): sw = self._create_bank_switch('E%o' % bank, layout, 0, bank, 1) sw.stateChanged.connect(self._update_ems_banks) self._bank_switches.append(sw) for col in range(0o10, 0o22): s = QSpacerItem(20, 20) layout.addItem(s, 1, col) label = QLabel('EMS', self) font = label.font() font.setPointSize(12) font.setBold(True) label.setFont(font) label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 5, 16, 2, 2, Qt.AlignCenter) b = self._create_button('ALL', layout, 5, 1, 3) b.pressed.connect(lambda: self._set_all(True)) b = self._create_button('NONE', layout, 5, 3, 2) b.pressed.connect(lambda: self._set_all(False)) self._ems_sel = QRadioButton('EMS', self) self._ems_sel.setLayoutDirection(Qt.RightToLeft) layout.addWidget(self._ems_sel, 5, 6, 2, 3) layout.setAlignment(self._ems_sel, Qt.AlignRight) self._agc_sel = QRadioButton('AGC', self) self._agc_sel.setChecked(True) layout.addWidget(self._agc_sel, 5, 8, 2, 3) layout.setAlignment(self._agc_sel, Qt.AlignCenter) font.setPointSize(7) self._ems_sel.setFont(font) self._agc_sel.setFont(font) b = self._create_button('PAD', layout, 5, 11, 2) b.pressed.connect(self._load_pad) b = self._create_button('LOAD', layout, 5, 12, 3) b.pressed.connect(self._load_core) b = self._create_button('DUMP', layout, 5, 14, 2) b.pressed.connect(self._dump_core)
def _setup_ui(self): self.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) # Set up our basic layout layout = QGridLayout(self) self.setLayout(layout) layout.setSpacing(1) layout.setMargin(1) for bank in range(0o44): col = bank % 18 row = int(bank / 18) * 2 sw = self._create_bank_switch('%o' % bank, layout, row, col, 1) sw.stateChanged.connect( lambda state, bank=bank: self._update_crs_bank(bank)) self._bank_switches.append(sw) self._aux_switch = self._create_bank_switch('44-77', layout, 5, 0, 2) label = QLabel('CRS', self) font = label.font() font.setPointSize(12) font.setBold(True) label.setFont(font) label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 5, 16, 2, 2, Qt.AlignCenter) b = self._create_button('ALL', layout, 5, 1, 3) b.pressed.connect(lambda: self._set_all(True)) b = self._create_button('NONE', layout, 5, 3, 2) b.pressed.connect(lambda: self._set_all(False)) self._crs_sel = QRadioButton('CRS', self) self._crs_sel.setLayoutDirection(Qt.RightToLeft) layout.addWidget(self._crs_sel, 5, 6, 2, 3) layout.setAlignment(self._crs_sel, Qt.AlignRight) self._agc_sel = QRadioButton('AGC', self) self._agc_sel.setChecked(True) layout.addWidget(self._agc_sel, 5, 8, 2, 3) layout.setAlignment(self._agc_sel, Qt.AlignCenter) font.setPointSize(7) self._crs_sel.setFont(font) self._agc_sel.setFont(font) b = self._create_button('LOAD', layout, 5, 12, 3) b.pressed.connect(self._load_rope) b = self._create_button('DUMP', layout, 5, 14, 2) b.pressed.connect(self._dump_rope)
def __init__(self, plugin: LuaPlugin) -> None: super().__init__(plugin.name) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) self.setLayout(layout) for row, option in enumerate(plugin.options): layout.addWidget(QLabel(option.name), row, 0) checkbox = QCheckBox() checkbox.setChecked(option.enabled) checkbox.toggled.connect(option.set_enabled) layout.addWidget(checkbox, row, 1)
class RightLayout(QVBoxLayout): def __init__(self, feature_count): super().__init__() # Table widget self.data_corpus = QGridLayout() self.data_corpus.setAlignment(Qt.AlignCenter) for _ in range(feature_count): label = QLabel() label.setStyleSheet('background-color: white; padding:2;') label.setFixedWidth(350) self.data_corpus.addWidget(label) self.addLayout(self.data_corpus)
def initUI(self): mainLayout = QGridLayout(self) mainLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) mainLayout.setColumnStretch(0, 0) mainLayout.setColumnStretch(1, 1) mainLayout.setColumnStretch(2, 1) mainLayout.setColumnStretch(3, 1) self.setLayout(mainLayout) nameText = QLabel('Name:') nameText.setAlignment(Qt.AlignRight) self.nameIn = QLineEdit() self.nameIn.setText(self.text) mainLayout.addWidget(nameText, 0, 0) mainLayout.addWidget(self.nameIn, 0, 1, 1, 3) langText = QLabel('Language:') langText.setAlignment(Qt.AlignRight) self.pyCheck = QRadioButton(CommandType.PYTHON) if self.cmdType == self.pyCheck.text(): self.pyCheck.setChecked(True) self.melCheck = QRadioButton(CommandType.MEL) if self.cmdType == self.melCheck.text(): self.melCheck.setChecked(True) mainLayout.addWidget(langText, 1, 0) mainLayout.addWidget(self.pyCheck, 1, 1) mainLayout.addWidget(self.melCheck, 1, 3) cmdText = QLabel('Command:') cmdText.setAlignment(Qt.AlignRight | Qt.AlignTop) self.cmdIn = QTextEdit() self.cmdIn.setPlainText(self.cmd) mainLayout.addWidget(cmdText, 2, 0) mainLayout.addWidget(self.cmdIn, 2, 1, 1, 3) okBtn = QPushButton("OK") okBtn.clicked.connect(self.accept) testBtn = QPushButton("Test") testBtn.clicked.connect(self.onTest) cancelBtn = QPushButton("Cancel") cancelBtn.clicked.connect(self.reject) mainLayout.addWidget(okBtn, 3, 1, 1, 1) mainLayout.addWidget(testBtn, 3, 2, 1, 1) mainLayout.addWidget(cancelBtn, 3, 3, 1, 1) self.setWindowTitle("Edit Command") self.setWindowFlags(Qt.WindowStaysOnTopHint)
def __init__(self): super().__init__() self.setMinimumWidth(185) self.setTitleBarWidget(QWidget()) layout = QGridLayout() layout.setAlignment(Qt.AlignTop) container = QWidget() container.setLayout(layout) self.setWidget(container) # Add title title = Label("history_header", "Notation") # TODO: Get alignment in styles/styles.qss title.setAlignment(Qt.AlignHCenter) layout.addWidget(title, 0, 0, 1, 3)
def __init__(self) -> None: super().__init__("Plugins") layout = QGridLayout() layout.setAlignment(Qt.AlignTop) self.setLayout(layout) for row, plugin in enumerate(LuaPluginManager.plugins()): if not plugin.show_in_ui: continue layout.addWidget(QLabel(plugin.name), row, 0) checkbox = QCheckBox() checkbox.setChecked(plugin.enabled) checkbox.toggled.connect(plugin.set_enabled) layout.addWidget(checkbox, row, 1)
class AdadeltaUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.001") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.epsilon = QLineEdit("1e-07") self.epsilon.setValidator(QDoubleValidator(0., 1e-10, 10)) self.rho = QLineEdit("0.95") self.rho.setValidator(QDoubleValidator(0., 1e5, 10)) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("rho:"), 1, 0) self.main_layout.addWidget(self.rho,1 , 1) self.main_layout.addWidget(QLabel("epsilon:"),2 ,0) self.main_layout.addWidget(self.epsilon,2, 1) self.setLayout(self.main_layout) def get_optimizer(self): return None
class SGDUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.01") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.momentum = QLineEdit("0.00") self.momentum.setValidator(QDoubleValidator(0., 1e5, 2)) self.nestrov = QComboBox() self.nestrov.addItems(["True", "False"]) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("Momentum:"), 1, 0) self.main_layout.addWidget(self.momentum,1, 1) self.main_layout.addWidget(QLabel("Nestrov:"), 2, 0) self.main_layout.addWidget(self.nestrov) self.setLayout(self.main_layout) def get_optimizer(self): return None
class AdagradUI(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.learning_rate = QLineEdit("0.01") self.learning_rate.setValidator(QDoubleValidator(0., 1., 5)) self.epsilon = QLineEdit("1e-07") self.epsilon.setValidator(QDoubleValidator(0., 1e-10, 10)) self.initial_accumulator_value = QLineEdit("0.1") self.initial_accumulator_value.setValidator(QDoubleValidator(0., 1e-10, 10)) self.main_layout.addWidget(QLabel("Learning rate:"), 0, 0) self.main_layout.addWidget(self.learning_rate, 0, 1) self.main_layout.addWidget(QLabel("Epsilon:"),1 ,0) self.main_layout.addWidget(self.epsilon,1, 1) self.main_layout.addWidget(QLabel("Initial_accumulator_value:"), 2, 0) self.main_layout.addWidget(self.initial_accumulator_value,2 , 1) self.setLayout(self.main_layout) def get_optimizer(self): return None
def __init__(self, parent, select_callback, options): super(DataFormatDialog, self).__init__(parent) self._main = QtWidgets.QWidget() self.select_callback = select_callback self.options = options #self.setStyle(QStyleFactory.create('Fusion')) self.setCentralWidget(self._main) layout = QGridLayout(self._main) layout.setAlignment(Qt.AlignLeft) self.data_select = [QComboBox() for i in parent.axes] for i, ax in enumerate(parent.axes): label = QLabel("Axes {},{}".format(i // parent.nrows, i % parent.nrows)) self.data_select[i].addItems(self.options.keys()) layout.addWidget(label, i, 0) layout.addWidget(self.data_select[i], i, 1, 1, 2) okbutton = QPushButton("Apply") okbutton.clicked.connect(self.select_apply) okbutton.setDefault(True) cancelbutton = QPushButton("Cancel") cancelbutton.clicked.connect(self.select_cancel) layout.addWidget(okbutton, 2, 1) layout.addWidget(cancelbutton, 2, 2) layout.setSpacing(5) self.setLayout(layout) self.setWindowTitle('Set Data Format')
def initUI(self): mainLayout = QGridLayout(self) mainLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) # mainLayout.setColumnStretch(0,0) mainLayout.setColumnStretch(1,1) mainLayout.setColumnStretch(2,1) # mainLayout.setColumnStretch(3,1) self.setLayout(mainLayout) line = 0 title = QLabel('Change Current Namespace to:') title.setAlignment(Qt.AlignLeft) mainLayout.addWidget(title, line, 0, 1, 3) line += 1 for each in self.namespace: dyName = QLabel(each) dyCombo = QComboBox() dyCombo.setLineEdit(QLineEdit()) for valName in self.validNamespace: dyCombo.addItem(valName,self.validNamespace.index(valName)) dyCombo.setCurrentIndex(dyCombo.findText(each,Qt.MatchExactly)) mainLayout.addWidget(dyName, line, 0, 1, 1) mainLayout.addWidget(dyCombo, line, 1, 1, 2) self.model[each] = dyCombo line += 1 line += 1 okBtn = QPushButton("OK") okBtn.clicked.connect(self.accept) cancelBtn = QPushButton("Cancel") cancelBtn.clicked.connect(self.reject) mainLayout.addWidget(okBtn, line, 1, 1, 1) mainLayout.addWidget(cancelBtn, line, 2, 1, 1) self.setWindowTitle("Choose Namespace") self.setWindowFlags(Qt.WindowStaysOnTopHint)
def _setup_ui(self): self.setFrameStyle(QFrame.StyledPanel | QFrame.Raised) layout = QGridLayout(self) self.setLayout(layout) layout.setMargin(1) layout.setSpacing(1) # Construct the stop indicators and switches col = 0 for l, n in STOP_CONDS.items(): self._create_stop_cond(l, n, layout, col) col += 1 label = QLabel('COMP STOP', self) font = label.font() font.setPointSize(12) font.setBold(True) label.setFont(font) label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 3, 0, 1, 4, Qt.AlignRight) self._s1 = QRadioButton('S1', self) self._s1.setLayoutDirection(Qt.RightToLeft) layout.addWidget(self._s1, 3, 5, 1, 2) layout.setAlignment(self._s1, Qt.AlignRight) self._s1.setChecked(True) self._s1.toggled.connect(self._set_stop_conds) self._s2 = QRadioButton('S2', self) layout.addWidget(self._s2, 3, 6, 1, 2) layout.setAlignment(self._s2, Qt.AlignRight) font.setPointSize(7) self._s1.setFont(font) self._s2.setFont(font)
def __set_layout(self): """ Initializes the layout of this widget """ layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) # Widgets layout.addWidget(self.view_students, 0, 1) layout.addWidget(self.v_canvas, 1, 0, 1, 3) layout.addWidget(self.view_teacher, 2, 0, 1, 3) # Alignments layout.setAlignment(self.view_students, Qt.AlignCenter) layout.setAlignment(self.v_canvas, Qt.AlignCenter) layout.setAlignment(self.view_teacher, Qt.AlignCenter) self.setLayout(layout)
class LinkInfo(QWidget): """ Social Link general information view. :param MainFrame mainframe: the application's mainframe :param QWidget op: parent widget :param SocialLink link: the social link :param int linklevel: the level at which to add level-specific information :param int linkangle: the angle at which to add angle-specific information """ def __init__(self, mainframe, op, link, linklevel=None, linkangle=None): QWidget.__init__(self) self.mainframe = mainframe self.op = op self.link = link self.linklevel = linklevel self.linkangle = linkangle self.reqs = None self.initUI() def initUI(self): """ Initializes the GUI. Does a lot of stuff. """ self.grid = QGridLayout() self.setLayout(self.grid) self.levang = {} elev = [] for key, _ in self.link.cutscenes.items(): if key[:key.index("_")] in self.levang: self.levang[key[:key.index("_")]].append(key[key.index("_") + 1:]) else: self.levang[key[:key.index("_")]] = [key[key.index("_") + 1:]] if key[:key.index("_")] not in elev: elev.append(key[:key.index("_")]) for _, angle in self.levang.items(): angle.sort(key=lambda angle: (int)(angle)) #pylint: disable=unnecessary-lambda elev.sort(key=lambda level: (int)(level)) #pylint: disable=unnecessary-lambda infoL = QLabel(self, text="Social Link Information") self.grid.addWidget(infoL, 0, 0, 1, 12) self.level = QComboBox(self) if len(elev) != 0: elev.insert(0, "") self.level.addItems(elev) self.level.activated.connect(self.recs) if self.linklevel: self.level.setCurrentIndex((int)(self.linklevel)) self.recs() else: self.level.addItems(["No cutscenes have been created"]) self.grid.addWidget(self.level, 1, 1, 1, 1) atlevel = QLabel(self, text="At " + self.link.arcana + " level ") self.grid.addWidget(atlevel, 1, 0, 1, 1) arcanainfo = QLabel(self, text=self.link.arcana + " Social Link info") self.aitext = QTextEdit(self) self.aitext.setText(self.link.info) self.aitext.setFixedSize(300, 100) self.save = QPushButton(self, text="Save") self.back = QPushButton(self, text="Back") self.save.clicked.connect(self.saveinfo) self.back.clicked.connect(self.endedit) if self.linklevel and self.linkangle: self.grid.addWidget(arcanainfo, 4, 0, 1, 6) self.grid.addWidget(self.aitext, 5, 0, 1, 6) thisinfo = QLabel(self, text=self.link.arcana + " info for level: " + self.linklevel + ", angle: " + self.linkangle) self.grid.addWidget(thisinfo, 4, 6, 1, 6) self.titext = QTextEdit(self) self.titext.setFixedSize(300, 100) try: self.titext.setText( self.link.cutinfo[self.level.currentText() + "_" + str(self.linkangle)]) except: #pylint: disable=bare-except # TODO why? Backwards compatibility? pass self.grid.addWidget(self.titext, 5, 6, 1, 6) self.grid.setAlignment(thisinfo, Qt.AlignHCenter) self.grid.setAlignment(self.titext, Qt.AlignHCenter) else: self.grid.addWidget(arcanainfo, 4, 0, 1, 12) self.grid.addWidget(self.aitext, 5, 0, 1, 12) pseudoL = QLabel(self, text="Social Link's Pseudoname") youhave = QLabel(self, text="You have established the ") ofthe = QLabel(self, text="Social Link of the " + self.link.arcana + " arcana!") self.grid.addWidget(pseudoL, 2, 0, 1, 12) self.grid.addWidget(youhave, 3, 0, 1, 5) self.grid.addWidget(ofthe, 3, 7, 1, 6) self.grid.addWidget(self.save, 6, 0, 1, 1) self.grid.addWidget(self.back, 6, 1, 1, 1) self.pseudoname = QLineEdit(self) self.pseudoname.setFixedSize(150, 20) self.pseudoname.setText(self.link.pseudoname) self.grid.addWidget(self.pseudoname, 3, 5, 1, 2) self.grid.setAlignment(infoL, Qt.AlignHCenter) self.grid.setAlignment(self.aitext, Qt.AlignHCenter) self.grid.setAlignment(arcanainfo, Qt.AlignHCenter) self.grid.setAlignment(self.save, Qt.AlignRight) self.grid.setAlignment(self.back, Qt.AlignLeft) self.grid.setAlignment(youhave, Qt.AlignRight) self.grid.setAlignment(ofthe, Qt.AlignLeft) self.grid.setAlignment(pseudoL, Qt.AlignHCenter) self.grid.setAlignment(self.pseudoname, Qt.AlignHCenter) def saveinfo(self): """ Set the info in the social link object and save it. """ try: for angle, data in self.reqs.textboxes.items(): (int)(data.text()) if data.text() != "": if self.level.currentText( ) not in self.link.requiredPoints: self.link.requiredPoints[self.level.currentText()] = {} if angle not in self.link.requiredPoints[ self.level.currentText()]: self.link.requiredPoints[ self.level.currentText()][angle] = {} self.link.requiredPoints[ self.level.currentText()][angle]['points'] = int( data.text()) for angle, data in self.reqs.courages.items(): self.link.requiredPoints[ self.level.currentText()][angle]['courage'] = int( data.currentText()) for angle, data in self.reqs.charms.items(): self.link.requiredPoints[ self.level.currentText()][angle]['charm'] = int( data.currentText()) for angle, data in self.reqs.acads.items(): self.link.requiredPoints[ self.level.currentText()][angle]['acad'] = int( data.currentText()) for angle, data in self.reqs.ultis.items(): self.link.finalpersona[angle] = data.currentText() self.link.pseudoname = self.pseudoname.text() self.link.info = self.aitext.toPlainText() if self.linklevel: if str(self.linklevel) + "_" + str( self.linkangle) not in self.link.cutinfo: self.link.cutinfo[str(self.linklevel) + "_" + str(self.linkangle)] = "" self.link.cutinfo[str(self.linklevel) + "_" + str( self.linkangle)] = self.titext.toPlainText() except ValueError: popup("Points must be integers.\nNot saved.", "Critical") return self.link.save() popup("Saved", "Information") def endedit(self): """ We're done. Return to the calling widget. """ self.mainframe.changeState(self.op) def recs(self): """ Handle addition and removal of requirements window. """ try: self.reqs.close() except Exception as e: #pylint: disable=broad-except print(e) print("Can't close oudated req widget") if self.level.currentText() == "": return if self.level.itemText(0) == "": self.level.removeItem(0) self.reqs = Requirements(self) self.grid.addWidget(self.reqs, 1, 2, 1, 10)
class AxesCheckBoxGroup(): def __init__(self, window, axes, label=''): self.layout = QGridLayout() self.layout.setAlignment(Qt.AlignLeft) self.group = QGroupBox(label) self.group.setLayout(self.layout) self.window = window self.axes = axes self.lines_cb = [] self.lines = [] self.all_cb = CheckBox('') self.all_cb.stateChanged.connect(self.cb_all_state_changed) self.layout.addWidget(self.all_cb, 0, 0) def add_to_layout(self, layout, row, col): self.update_checkboxes() layout.addWidget(self.group, row, col) def cb_all_state_changed(self): state = self.all_cb.checkState() if self.window.draw_updates: self.window.set_draw_updates(False) if state == Qt.CheckState.PartiallyChecked: state = Qt.CheckState.Checked self.all_cb.setCheckState(state) for l_cb in self.lines_cb: l_cb.set_cb_state(state) self.axes._top_axes.draw_lines_markers() leg_loc = self.axes.get_legend( )._loc_real if self.axes.get_legend() != None else 0 self.axes.legend(fontsize='small', loc=leg_loc) self.window.set_draw_updates(True) def cb_all_update(self): checks = np.zeros(len(self.lines_cb)) for i, cb in enumerate(self.lines_cb): checks[i] = int(cb.get_cb_state()) prev = self.window.set_draw_updates(False) if np.all(checks): self.all_cb.setCheckState(Qt.CheckState.Checked) elif np.any(checks): self.all_cb.setCheckState(Qt.CheckState.PartiallyChecked) else: self.all_cb.setCheckState(Qt.CheckState.Unchecked) self.window.set_draw_updates(prev) def update_checkboxes(self): leg_loc = self.axes.get_legend( )._loc_real if self.axes.get_legend() != None else 0 prev = self.window.set_draw_updates(False) i = 1 for l in self.axes.lines: if l in self.lines: i += 1 continue ## ignore lines with no labels if len(l.get_label()) and l.get_label()[0] != '_': self.lines.append(l) l_cb = LineCheckBox(self.window, self.axes, l, self.cb_all_update) l_cb.add_to_layout(self.layout, i + 1) l_cb.set_cb_state(True) self.lines_cb.append(l_cb) i += 1 self.axes.legend(fontsize='small', loc=leg_loc) if not len(self.lines): self.all_cb.hide() self.window.set_draw_updates(prev) def scale_visible(self, xscale=True, yscale=True): ymin, ymax = np.inf, -np.inf xmin, xmax = np.inf, -np.inf for l in self.axes.lines: if not l.get_visible(): continue x = l.get_xdata() y = l.get_ydata() y = np.where(np.isinf(y), np.nan, y) ymin_t, ymax_t = np.nanmin(y), np.nanmax(y) xmin_t, xmax_t = np.nanmin(x), np.nanmax(x) ymin = ymin_t if ymin_t < ymin else ymin ymax = ymax_t if ymax_t > ymax else ymax xmin = xmin_t if xmin_t < xmin else xmin xmax = xmax_t if xmax_t > xmax else xmax if np.all(np.isfinite([ymin, ymax])) and yscale: ypad = (ymax - ymin) / 20 max_y = ymax + ypad min_y = ymin - ypad self.axes.set_ylim([min_y, max_y]) if np.all(np.isfinite([xmin, xmax])) and xscale: xpad = (xmax - xmin) / 20 max_x = xmax + xpad min_x = xmin - xpad self.axes.set_xlim([min_x, max_x])
class QSettingsWindow(QDialog): def __init__(self, game: Game): super(QSettingsWindow, self).__init__() self.game = game self.pluginsPage = None self.pluginsOptionsPage = None self.campaign_management_page = QWidget() self.setModal(True) self.setWindowTitle("Settings") self.setWindowIcon(CONST.ICONS["Settings"]) self.setMinimumSize(600, 250) self.initUi() def initUi(self): self.layout = QGridLayout() self.categoryList = QListView() self.right_layout = QStackedLayout() self.categoryList.setMaximumWidth(175) self.categoryModel = QStandardItemModel(self.categoryList) self.categoryList.setIconSize(QSize(32, 32)) self.initDifficultyLayout() difficulty = QStandardItem("Difficulty") difficulty.setIcon(CONST.ICONS["Missile"]) difficulty.setEditable(False) difficulty.setSelectable(True) self.categoryModel.appendRow(difficulty) self.right_layout.addWidget(self.difficultyPage) self.init_campaign_management_layout() campaign_management = QStandardItem("Campaign Management") campaign_management.setIcon(CONST.ICONS["Money"]) campaign_management.setEditable(False) campaign_management.setSelectable(True) self.categoryModel.appendRow(campaign_management) self.right_layout.addWidget(self.campaign_management_page) self.initGeneratorLayout() generator = QStandardItem("Mission Generator") generator.setIcon(CONST.ICONS["Generator"]) generator.setEditable(False) generator.setSelectable(True) self.categoryModel.appendRow(generator) self.right_layout.addWidget(self.generatorPage) self.initCheatLayout() cheat = QStandardItem("Cheat Menu") cheat.setIcon(CONST.ICONS["Cheat"]) cheat.setEditable(False) cheat.setSelectable(True) self.categoryModel.appendRow(cheat) self.right_layout.addWidget(self.cheatPage) self.pluginsPage = PluginsPage() plugins = QStandardItem("LUA Plugins") plugins.setIcon(CONST.ICONS["Plugins"]) plugins.setEditable(False) plugins.setSelectable(True) self.categoryModel.appendRow(plugins) self.right_layout.addWidget(self.pluginsPage) self.pluginsOptionsPage = PluginOptionsPage() pluginsOptions = QStandardItem("LUA Plugins Options") pluginsOptions.setIcon(CONST.ICONS["PluginsOptions"]) pluginsOptions.setEditable(False) pluginsOptions.setSelectable(True) self.categoryModel.appendRow(pluginsOptions) self.right_layout.addWidget(self.pluginsOptionsPage) self.categoryList.setSelectionBehavior(QAbstractItemView.SelectRows) self.categoryList.setModel(self.categoryModel) self.categoryList.selectionModel().setCurrentIndex( self.categoryList.indexAt(QPoint(1, 1)), QItemSelectionModel.Select) self.categoryList.selectionModel().selectionChanged.connect( self.onSelectionChanged) self.layout.addWidget(self.categoryList, 0, 0, 1, 1) self.layout.addLayout(self.right_layout, 0, 1, 5, 1) self.setLayout(self.layout) def init(self): pass def initDifficultyLayout(self): self.difficultyPage = QWidget() self.difficultyLayout = QVBoxLayout() self.difficultyLayout.setAlignment(Qt.AlignTop) self.difficultyPage.setLayout(self.difficultyLayout) # DCS AI difficulty settings self.aiDifficultySettings = QGroupBox("AI Difficulty") self.aiDifficultyLayout = QGridLayout() self.playerCoalitionSkill = QComboBox() self.enemyCoalitionSkill = QComboBox() self.enemyAASkill = QComboBox() for skill in CONST.SKILL_OPTIONS: self.playerCoalitionSkill.addItem(skill) self.enemyCoalitionSkill.addItem(skill) self.enemyAASkill.addItem(skill) self.playerCoalitionSkill.setCurrentIndex( CONST.SKILL_OPTIONS.index(self.game.settings.player_skill)) self.enemyCoalitionSkill.setCurrentIndex( CONST.SKILL_OPTIONS.index(self.game.settings.enemy_skill)) self.enemyAASkill.setCurrentIndex( CONST.SKILL_OPTIONS.index(self.game.settings.enemy_vehicle_skill)) self.player_income = TenthsSpinSlider( "Player income multiplier", 0, 50, int(self.game.settings.player_income_multiplier * 10), ) self.player_income.spinner.valueChanged.connect(self.applySettings) self.enemy_income = TenthsSpinSlider( "Enemy income multiplier", 0, 50, int(self.game.settings.enemy_income_multiplier * 10), ) self.enemy_income.spinner.valueChanged.connect(self.applySettings) self.playerCoalitionSkill.currentIndexChanged.connect( self.applySettings) self.enemyCoalitionSkill.currentIndexChanged.connect( self.applySettings) self.enemyAASkill.currentIndexChanged.connect(self.applySettings) # Mission generation settings related to difficulty self.missionSettings = QGroupBox("Mission Difficulty") self.missionLayout = QGridLayout() self.manpads = QCheckBox() self.manpads.setChecked(self.game.settings.manpads) self.manpads.toggled.connect(self.applySettings) self.noNightMission = QCheckBox() self.noNightMission.setChecked(self.game.settings.night_disabled) self.noNightMission.toggled.connect(self.applySettings) # DCS Mission options self.missionRestrictionsSettings = QGroupBox("Mission Restrictions") self.missionRestrictionsLayout = QGridLayout() self.difficultyLabel = QComboBox() [self.difficultyLabel.addItem(t) for t in CONST.LABELS_OPTIONS] self.difficultyLabel.setCurrentIndex( CONST.LABELS_OPTIONS.index(self.game.settings.labels)) self.difficultyLabel.currentIndexChanged.connect(self.applySettings) self.mapVisibiitySelection = QComboBox() self.mapVisibiitySelection.addItem("All", ForcedOptions.Views.All) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.All: self.mapVisibiitySelection.setCurrentIndex(0) self.mapVisibiitySelection.addItem("Fog of War", ForcedOptions.Views.Allies) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.Allies: self.mapVisibiitySelection.setCurrentIndex(1) self.mapVisibiitySelection.addItem("Allies Only", ForcedOptions.Views.OnlyAllies) if (self.game.settings.map_coalition_visibility == ForcedOptions.Views.OnlyAllies): self.mapVisibiitySelection.setCurrentIndex(2) self.mapVisibiitySelection.addItem("Own Aircraft Only", ForcedOptions.Views.MyAircraft) if (self.game.settings.map_coalition_visibility == ForcedOptions.Views.MyAircraft): self.mapVisibiitySelection.setCurrentIndex(3) self.mapVisibiitySelection.addItem("Map Only", ForcedOptions.Views.OnlyMap) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.OnlyMap: self.mapVisibiitySelection.setCurrentIndex(4) self.mapVisibiitySelection.currentIndexChanged.connect( self.applySettings) self.ext_views = QCheckBox() self.ext_views.setChecked(self.game.settings.external_views_allowed) self.ext_views.toggled.connect(self.applySettings) self.aiDifficultyLayout.addWidget(QLabel("Player coalition skill"), 0, 0) self.aiDifficultyLayout.addWidget(self.playerCoalitionSkill, 0, 1, Qt.AlignRight) self.aiDifficultyLayout.addWidget(QLabel("Enemy coalition skill"), 1, 0) self.aiDifficultyLayout.addWidget(self.enemyCoalitionSkill, 1, 1, Qt.AlignRight) self.aiDifficultyLayout.addWidget( QLabel("Enemy AA and vehicles skill"), 2, 0) self.aiDifficultyLayout.addWidget(self.enemyAASkill, 2, 1, Qt.AlignRight) self.aiDifficultyLayout.addLayout(self.player_income, 3, 0) self.aiDifficultyLayout.addLayout(self.enemy_income, 4, 0) self.aiDifficultySettings.setLayout(self.aiDifficultyLayout) self.difficultyLayout.addWidget(self.aiDifficultySettings) self.missionLayout.addWidget(QLabel("Manpads on frontlines"), 0, 0) self.missionLayout.addWidget(self.manpads, 0, 1, Qt.AlignRight) self.missionLayout.addWidget(QLabel("No night missions"), 1, 0) self.missionLayout.addWidget(self.noNightMission, 1, 1, Qt.AlignRight) self.missionSettings.setLayout(self.missionLayout) self.difficultyLayout.addWidget(self.missionSettings) self.missionRestrictionsLayout.addWidget(QLabel("In Game Labels"), 0, 0) self.missionRestrictionsLayout.addWidget(self.difficultyLabel, 0, 1, Qt.AlignRight) self.missionRestrictionsLayout.addWidget( QLabel("Map visibility options"), 1, 0) self.missionRestrictionsLayout.addWidget(self.mapVisibiitySelection, 1, 1, Qt.AlignRight) self.missionRestrictionsLayout.addWidget( QLabel("Allow external views"), 2, 0) self.missionRestrictionsLayout.addWidget(self.ext_views, 2, 1, Qt.AlignRight) self.missionRestrictionsSettings.setLayout( self.missionRestrictionsLayout) self.difficultyLayout.addWidget(self.missionRestrictionsSettings) def init_campaign_management_layout(self) -> None: campaign_layout = QVBoxLayout() campaign_layout.setAlignment(Qt.AlignTop) self.campaign_management_page.setLayout(campaign_layout) general = QGroupBox("General") campaign_layout.addWidget(general) general_layout = QGridLayout() general.setLayout(general_layout) def set_restict_weapons_by_date(value: bool) -> None: self.game.settings.restrict_weapons_by_date = value restrict_weapons = QCheckBox() restrict_weapons.setChecked( self.game.settings.restrict_weapons_by_date) restrict_weapons.toggled.connect(set_restict_weapons_by_date) tooltip_text = ( "Restricts weapon availability based on the campaign date. Data is " "extremely incomplete so does not affect all weapons.") restrict_weapons.setToolTip(tooltip_text) restrict_weapons_label = QLabel("Restrict weapons by date (WIP)") restrict_weapons_label.setToolTip(tooltip_text) general_layout.addWidget(restrict_weapons_label, 0, 0) general_layout.addWidget(restrict_weapons, 0, 1, Qt.AlignRight) def set_old_awec(value: bool) -> None: self.game.settings.disable_legacy_aewc = value old_awac = QCheckBox() old_awac.setChecked(self.game.settings.disable_legacy_aewc) old_awac.toggled.connect(set_old_awec) old_awec_info = ( "If checked, the invulnerable friendly AEW&C aircraft that begins " "the mission in the air will not be spawned. AEW&C missions must " "be planned in the ATO and will take time to arrive on-station.") old_awac.setToolTip(old_awec_info) old_awac_label = QLabel( "Disable invulnerable, always-available AEW&C (WIP)") old_awac_label.setToolTip(old_awec_info) general_layout.addWidget(old_awac_label, 1, 0) general_layout.addWidget(old_awac, 1, 1, Qt.AlignRight) automation = QGroupBox("HQ Automation") campaign_layout.addWidget(automation) automation_layout = QGridLayout() automation.setLayout(automation_layout) def set_runway_automation(value: bool) -> None: self.game.settings.automate_runway_repair = value def set_front_line_automation(value: bool) -> None: self.game.settings.automate_front_line_reinforcements = value def set_aircraft_automation(value: bool) -> None: self.game.settings.automate_aircraft_reinforcements = value runway_repair = QCheckBox() runway_repair.setChecked(self.game.settings.automate_runway_repair) runway_repair.toggled.connect(set_runway_automation) automation_layout.addWidget(QLabel("Automate runway repairs"), 0, 0) automation_layout.addWidget(runway_repair, 0, 1, Qt.AlignRight) front_line = QCheckBox() front_line.setChecked( self.game.settings.automate_front_line_reinforcements) front_line.toggled.connect(set_front_line_automation) automation_layout.addWidget(QLabel("Automate front-line purchases"), 1, 0) automation_layout.addWidget(front_line, 1, 1, Qt.AlignRight) aircraft = QCheckBox() aircraft.setChecked( self.game.settings.automate_aircraft_reinforcements) aircraft.toggled.connect(set_aircraft_automation) automation_layout.addWidget(QLabel("Automate aircraft purchases"), 2, 0) automation_layout.addWidget(aircraft, 2, 1, Qt.AlignRight) def initGeneratorLayout(self): self.generatorPage = QWidget() self.generatorLayout = QVBoxLayout() self.generatorLayout.setAlignment(Qt.AlignTop) self.generatorPage.setLayout(self.generatorLayout) self.gameplay = QGroupBox("Gameplay") self.gameplayLayout = QGridLayout() self.gameplayLayout.setAlignment(Qt.AlignTop) self.gameplay.setLayout(self.gameplayLayout) self.supercarrier = QCheckBox() self.supercarrier.setChecked(self.game.settings.supercarrier) self.supercarrier.toggled.connect(self.applySettings) self.generate_marks = QCheckBox() self.generate_marks.setChecked(self.game.settings.generate_marks) self.generate_marks.toggled.connect(self.applySettings) self.generate_dark_kneeboard = QCheckBox() self.generate_dark_kneeboard.setChecked( self.game.settings.generate_dark_kneeboard) self.generate_dark_kneeboard.toggled.connect(self.applySettings) self.never_delay_players = QCheckBox() self.never_delay_players.setChecked( self.game.settings.never_delay_player_flights) self.never_delay_players.toggled.connect(self.applySettings) self.never_delay_players.setToolTip( "When checked, player flights with a delayed start time will be " "spawned immediately. AI wingmen may begin startup immediately.") self.gameplayLayout.addWidget(QLabel("Use Supercarrier Module"), 0, 0) self.gameplayLayout.addWidget(self.supercarrier, 0, 1, Qt.AlignRight) self.gameplayLayout.addWidget(QLabel("Put Objective Markers on Map"), 1, 0) self.gameplayLayout.addWidget(self.generate_marks, 1, 1, Qt.AlignRight) dark_kneeboard_label = QLabel( "Generate Dark Kneeboard <br />" "<strong>Dark kneeboard for night missions.<br />" "This will likely make the kneeboard on the pilot leg unreadable.</strong>" ) self.gameplayLayout.addWidget(dark_kneeboard_label, 2, 0) self.gameplayLayout.addWidget(self.generate_dark_kneeboard, 2, 1, Qt.AlignRight) spawn_players_immediately_tooltip = ( "Always spawns player aircraft immediately, even if their start time is " "more than 10 minutes after the start of the mission. <strong>This does " "not alter the timing of your mission. Your TOT will not change. This " "option only allows the player to wait on the ground.</strong>") spawn_immediately_label = QLabel( "Player flights ignore TOT and spawn immediately<br />" "<strong>Does not adjust package waypoint times.<br />" "Should not be used if players have runway or in-air starts.</strong>" ) spawn_immediately_label.setToolTip(spawn_players_immediately_tooltip) self.gameplayLayout.addWidget(spawn_immediately_label, 3, 0) self.gameplayLayout.addWidget(self.never_delay_players, 3, 1, Qt.AlignRight) start_type_label = QLabel( "Default start type for AI aircraft<br /><strong>Warning: " "Any option other than Cold breaks OCA/Aircraft missions.</strong>" ) start_type_label.setToolTip(START_TYPE_TOOLTIP) start_type = StartTypeComboBox(self.game.settings) start_type.setCurrentText(self.game.settings.default_start_type) self.gameplayLayout.addWidget(start_type_label, 4, 0) self.gameplayLayout.addWidget(start_type, 4, 1) self.performance = QGroupBox("Performance") self.performanceLayout = QGridLayout() self.performanceLayout.setAlignment(Qt.AlignTop) self.performance.setLayout(self.performanceLayout) self.smoke = QCheckBox() self.smoke.setChecked(self.game.settings.perf_smoke_gen) self.smoke.toggled.connect(self.applySettings) self.red_alert = QCheckBox() self.red_alert.setChecked(self.game.settings.perf_red_alert_state) self.red_alert.toggled.connect(self.applySettings) self.arti = QCheckBox() self.arti.setChecked(self.game.settings.perf_artillery) self.arti.toggled.connect(self.applySettings) self.moving_units = QCheckBox() self.moving_units.setChecked(self.game.settings.perf_moving_units) self.moving_units.toggled.connect(self.applySettings) self.infantry = QCheckBox() self.infantry.setChecked(self.game.settings.perf_infantry) self.infantry.toggled.connect(self.applySettings) self.destroyed_units = QCheckBox() self.destroyed_units.setChecked( self.game.settings.perf_destroyed_units) self.destroyed_units.toggled.connect(self.applySettings) self.culling = QCheckBox() self.culling.setChecked(self.game.settings.perf_culling) self.culling.toggled.connect(self.applySettings) self.culling_distance = QSpinBox() self.culling_distance.setMinimum(10) self.culling_distance.setMaximum(10000) self.culling_distance.setValue( self.game.settings.perf_culling_distance) self.culling_distance.valueChanged.connect(self.applySettings) self.culling_do_not_cull_carrier = QCheckBox() self.culling_do_not_cull_carrier.setChecked( self.game.settings.perf_do_not_cull_carrier) self.culling_do_not_cull_carrier.toggled.connect(self.applySettings) self.performanceLayout.addWidget( QLabel("Smoke visual effect on frontline"), 0, 0) self.performanceLayout.addWidget(self.smoke, 0, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget( QLabel("SAM starts in RED alert mode"), 1, 0) self.performanceLayout.addWidget(self.red_alert, 1, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Artillery strikes"), 2, 0) self.performanceLayout.addWidget(self.arti, 2, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Moving ground units"), 3, 0) self.performanceLayout.addWidget(self.moving_units, 3, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget( QLabel("Generate infantry squads along vehicles"), 4, 0) self.performanceLayout.addWidget(self.infantry, 4, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget( QLabel("Include destroyed units carcass"), 6, 0) self.performanceLayout.addWidget(self.destroyed_units, 6, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QHorizontalSeparationLine(), 7, 0, 1, 2) self.performanceLayout.addWidget( QLabel("Culling of distant units enabled"), 8, 0) self.performanceLayout.addWidget(self.culling, 8, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Culling distance (km)"), 9, 0) self.performanceLayout.addWidget(self.culling_distance, 9, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget( QLabel("Do not cull carrier's surroundings"), 10, 0) self.performanceLayout.addWidget(self.culling_do_not_cull_carrier, 10, 1, alignment=Qt.AlignRight) self.generatorLayout.addWidget(self.gameplay) self.generatorLayout.addWidget( QLabel( "Disabling settings below may improve performance, but will impact the overall quality of the experience." )) self.generatorLayout.addWidget(self.performance) def initCheatLayout(self): self.cheatPage = QWidget() self.cheatLayout = QVBoxLayout() self.cheatPage.setLayout(self.cheatLayout) self.cheat_options = CheatSettingsBox(self.game, self.applySettings) self.cheatLayout.addWidget(self.cheat_options) self.moneyCheatBox = QGroupBox("Money Cheat") self.moneyCheatBox.setAlignment(Qt.AlignTop) self.moneyCheatBoxLayout = QGridLayout() self.moneyCheatBox.setLayout(self.moneyCheatBoxLayout) cheats_amounts = [25, 50, 100, 200, 500, 1000, -25, -50, -100, -200] for i, amount in enumerate(cheats_amounts): if amount > 0: btn = QPushButton("Cheat +" + str(amount) + "M") btn.setProperty("style", "btn-success") else: btn = QPushButton("Cheat " + str(amount) + "M") btn.setProperty("style", "btn-danger") btn.clicked.connect(self.cheatLambda(amount)) self.moneyCheatBoxLayout.addWidget(btn, i / 2, i % 2) self.cheatLayout.addWidget(self.moneyCheatBox, stretch=1) def cheatLambda(self, amount): return lambda: self.cheatMoney(amount) def cheatMoney(self, amount): logging.info("CHEATING FOR AMOUNT : " + str(amount) + "M") self.game.budget += amount if amount > 0: self.game.informations.append( Information( "CHEATER", "You are a cheater and you should feel bad", self.game.turn, )) else: self.game.informations.append( Information("CHEATER", "You are still a cheater !", self.game.turn)) GameUpdateSignal.get_instance().updateGame(self.game) def applySettings(self): self.game.settings.player_skill = CONST.SKILL_OPTIONS[ self.playerCoalitionSkill.currentIndex()] self.game.settings.enemy_skill = CONST.SKILL_OPTIONS[ self.enemyCoalitionSkill.currentIndex()] self.game.settings.enemy_vehicle_skill = CONST.SKILL_OPTIONS[ self.enemyAASkill.currentIndex()] self.game.settings.player_income_multiplier = self.player_income.value self.game.settings.enemy_income_multiplier = self.enemy_income.value self.game.settings.manpads = self.manpads.isChecked() self.game.settings.labels = CONST.LABELS_OPTIONS[ self.difficultyLabel.currentIndex()] self.game.settings.night_disabled = self.noNightMission.isChecked() self.game.settings.map_coalition_visibility = ( self.mapVisibiitySelection.currentData()) self.game.settings.external_views_allowed = self.ext_views.isChecked() self.game.settings.generate_marks = self.generate_marks.isChecked() self.game.settings.never_delay_player_flights = ( self.never_delay_players.isChecked()) self.game.settings.supercarrier = self.supercarrier.isChecked() self.game.settings.generate_dark_kneeboard = ( self.generate_dark_kneeboard.isChecked()) self.game.settings.perf_red_alert_state = self.red_alert.isChecked() self.game.settings.perf_smoke_gen = self.smoke.isChecked() self.game.settings.perf_artillery = self.arti.isChecked() self.game.settings.perf_moving_units = self.moving_units.isChecked() self.game.settings.perf_infantry = self.infantry.isChecked() self.game.settings.perf_destroyed_units = self.destroyed_units.isChecked( ) self.game.settings.perf_culling = self.culling.isChecked() self.game.settings.perf_culling_distance = int( self.culling_distance.value()) self.game.settings.perf_do_not_cull_carrier = ( self.culling_do_not_cull_carrier.isChecked()) self.game.settings.show_red_ato = self.cheat_options.show_red_ato self.game.settings.enable_frontline_cheats = ( self.cheat_options.show_frontline_cheat) self.game.settings.enable_base_capture_cheat = ( self.cheat_options.show_base_capture_cheat) self.game.compute_conflicts_position() GameUpdateSignal.get_instance().updateGame(self.game) def onSelectionChanged(self): index = self.categoryList.selectionModel().currentIndex().row() self.right_layout.setCurrentIndex(index)
def __init__(self): super(NumberConversion, self).__init__() # App attributes self.bin_format_base = None self.bin_format_base_byte = None # Use language settings self.ml = ManageLng() main_layout = QGridLayout() self.setLayout(main_layout) # Input self.inputbox = QGroupBox( self.ml.get_tr_text("tab_num_conv_inputbox_gbox_name")) self.inputbox.setMaximumWidth(400) main_layout.addWidget(self.inputbox, 0, 0) inputbox_layout = QGridLayout() inputbox_layout.setHorizontalSpacing(25) inputbox_layout.setVerticalSpacing(35) inputbox_layout.setAlignment(Qt.AlignCenter) self.inputbox.setLayout(inputbox_layout) self.input_number_label = QLabel( self.ml.get_tr_text("tab_num_conv_inputbox_in_number_lab")) self.input_number_textfield = QLineEdit() self.input_number_textfield.setPlaceholderText("192") self.input_number_textfield.setAlignment(Qt.AlignCenter) self.input_number_textfield.returnPressed.connect(self.convert_action) inputbox_layout.addWidget(self.input_number_label, 0, 0, alignment=Qt.AlignCenter) inputbox_layout.addWidget(self.input_number_textfield, 0, 1) button_layout = QVBoxLayout() self.bin_button = QRadioButton( self.ml.get_tr_text("tab_num_conv_inputbox_bin_chkbox")) self.bin_button.clicked.connect( lambda: self.input_number_textfield.setPlaceholderText("11100010")) self.dec_button = QRadioButton( self.ml.get_tr_text("tab_num_conv_inputbox_dec_chkbox")) self.dec_button.clicked.connect( lambda: self.input_number_textfield.setPlaceholderText("192")) self.hex_button = QRadioButton( self.ml.get_tr_text("tab_num_conv_inputbox_hex_chkbox")) self.hex_button.clicked.connect( lambda: self.input_number_textfield.setPlaceholderText("FF")) self.dec_button.setChecked(True) button_layout.addWidget(self.bin_button) button_layout.addWidget(self.dec_button) button_layout.addWidget(self.hex_button) inputbox_layout.addLayout(button_layout, 0, 3, 1, 2) self.convert_button = QPushButton( self.ml.get_tr_text("tab_num_conv_inputbox_conv_btn")) self.convert_button.clicked.connect(self.convert_action) self.convert_button.setIcon(QIcon("static/images/exchange.png")) inputbox_layout.addWidget(self.convert_button, 1, 1, alignment=Qt.AlignCenter) # Output self.outputbox = QGroupBox( self.ml.get_tr_text("tab_num_conv_outputbox_gbox_name")) main_layout.addWidget(self.outputbox, 0, 1) outputbox_layout = QGridLayout() outputbox_layout.setHorizontalSpacing(25) self.outputbox.setLayout(outputbox_layout) self.bin_label = QLabel( self.ml.get_tr_text("tab_num_conv_outputbox_bin_lab")) self.bin_label.setAlignment(Qt.AlignCenter) self.dec_label = QLabel( self.ml.get_tr_text("tab_num_conv_outputbox_dec_lab")) self.dec_label.setAlignment(Qt.AlignCenter) self.hex_label = QLabel( self.ml.get_tr_text("tab_num_conv_outputbox_hex_lab")) self.hex_label.setAlignment(Qt.AlignCenter) self.bin_output = QLineEdit() self.bin_output.setReadOnly(True) self.bin_output.setAlignment(Qt.AlignCenter) self.dec_output = QLineEdit() self.dec_output.setReadOnly(True) self.dec_output.setAlignment(Qt.AlignCenter) self.hex_output = QLineEdit() self.hex_output.setReadOnly(True) self.hex_output.setAlignment(Qt.AlignCenter) self.bin_output_copy_button = QPushButton( self.ml.get_tr_text("tab_num_conv_outputbox_copy_btn")) self.bin_output_copy_button.setIcon( QIcon("static/images/copy_clipboard.png")) self.bin_output_copy_button.clicked.connect( lambda: copy_action(self.bin_output.text())) self.dec_output_copy_button = QPushButton( self.ml.get_tr_text("tab_num_conv_outputbox_copy_btn")) self.dec_output_copy_button.setIcon( QIcon("static/images/copy_clipboard.png")) self.dec_output_copy_button.clicked.connect( lambda: copy_action(self.dec_output.text())) self.hex_output_copy_button = QPushButton( self.ml.get_tr_text("tab_num_conv_outputbox_copy_btn")) self.hex_output_copy_button.setIcon( QIcon("static/images/copy_clipboard.png")) self.hex_output_copy_button.clicked.connect( lambda: copy_action(self.hex_output.text())) outputbox_layout.addWidget(self.bin_label, 0, 0) outputbox_layout.addWidget(self.bin_output, 0, 1) outputbox_layout.addWidget(self.bin_output_copy_button, 0, 2) outputbox_layout.addWidget(self.dec_label, 1, 0) outputbox_layout.addWidget(self.dec_output, 1, 1) outputbox_layout.addWidget(self.dec_output_copy_button, 1, 2) outputbox_layout.addWidget(self.hex_label, 2, 0) outputbox_layout.addWidget(self.hex_output, 2, 1) outputbox_layout.addWidget(self.hex_output_copy_button, 2, 2) # IP address/mask number conversion self.ip_address_number_conversion_box = QGroupBox( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_gbox_name")) main_layout.addWidget(self.ip_address_number_conversion_box, 1, 0, 1, 2) ip_address_number_conversion_layout = QGridLayout() ip_address_number_conversion_layout.setAlignment(Qt.AlignCenter) ip_address_number_conversion_layout.setHorizontalSpacing(25) ip_address_number_conversion_layout.setVerticalSpacing(24) self.ip_address_number_conversion_box.setLayout( ip_address_number_conversion_layout) self.input_label = QLabel( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_in_lab")) self.input_label.setAlignment(Qt.AlignCenter) self.input_label.setMaximumWidth(150) self.input_textfield = QLineEdit() self.input_textfield.setPlaceholderText("192.168.1.1") self.input_textfield.setAlignment(Qt.AlignLeft) self.input_textfield.setMaximumWidth(300) self.input_textfield.setAlignment(Qt.AlignCenter) self.input_textfield.returnPressed.connect(self.convert_action_2) ip_address_number_conversion_layout.addWidget(self.input_label, 0, 0) ip_address_number_conversion_layout.addWidget(self.input_textfield, 0, 1) button_layout_2 = QVBoxLayout() self.dec_to_bin_button = QRadioButton( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_dectobin")) self.dec_to_bin_button.clicked.connect( lambda: self.input_textfield.setPlaceholderText("192.168.1.1")) self.dec_to_bin_button.setMaximumWidth(150) self.bin_to_dec_button = QRadioButton( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_bintodec")) self.bin_to_dec_button.clicked.connect( lambda: self.input_textfield.setPlaceholderText( "11000000.10101000.00000001.00000001")) self.bin_to_dec_button.setMaximumWidth(150) self.dec_to_bin_button.setChecked(True) button_layout_2.addWidget(self.dec_to_bin_button) button_layout_2.addWidget(self.bin_to_dec_button) ip_address_number_conversion_layout.addLayout(button_layout_2, 0, 2) self.output_label = QLabel( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_out_lab")) self.output_label.setAlignment(Qt.AlignCenter) self.output_textfield = QLineEdit() self.output_textfield.setMaximumWidth(300) self.output_textfield.setReadOnly(True) self.output_textfield.setAlignment(Qt.AlignCenter) ip_address_number_conversion_layout.addWidget(self.output_label, 1, 0) ip_address_number_conversion_layout.addWidget(self.output_textfield, 1, 1) self.output_textfield_copy_button = QPushButton( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_copy_btn")) self.output_textfield_copy_button.setIcon( QIcon("static/images/copy_clipboard.png")) self.output_textfield_copy_button.clicked.connect( lambda: copy_action(self.output_textfield.text())) ip_address_number_conversion_layout.addWidget( self.output_textfield_copy_button, 1, 2, alignment=Qt.AlignLeft) self.convert_button_2 = QPushButton( self.ml.get_tr_text("tab_num_conv_ip_mask_conv_convert_btn")) self.convert_button_2.clicked.connect(self.convert_action_2) self.convert_button_2.setIcon(QIcon("static/images/exchange.png")) ip_address_number_conversion_layout.addWidget( self.convert_button_2, 2, 0, 1, 3, alignment=Qt.AlignHCenter)
class _ExecuteTab(QTabWidget): """Tab used to execute modules or shell commands on the selected bot.""" def __init__(self, responses_tab, model): """ :type responses_tab: _ResponsesTab """ super(_ExecuteTab, self).__init__() self._model = model self._current_layout = None self._current_bot = None self._layout = QGridLayout() self._sub_layout = QVBoxLayout() self._module_view = ModuleView(responses_tab) self._layout.setAlignment(Qt.AlignTop) self.setLayout(self._layout) self.set_empty_layout() def set_current_bot(self, bot): """Sets the connected bot this tab will interact with. :type bot: Bot """ self._current_bot = bot def _clear_layout(self): while self._layout.count(): child = self._layout.takeAt(0) if child.widget(): child.widget().deleteLater() while self._sub_layout.count(): child = self._sub_layout.takeAt(0) if child.widget(): child.widget().deleteLater() def set_empty_layout(self): """Default layout shown when the user has not yet selected a row.""" self._current_layout = "Empty" self._clear_layout() self._layout.addWidget(QLabel("Please select a bot in the table above."), 0, 0) def set_module_layout(self, module_name="screenshot"): """Sets the layout which can execute modules. :type module_name: str """ self._current_layout = "Module" self._clear_layout() command_type_label = QLabel("Command type: ") command_type_combobox = QComboBox() command_type_combobox.addItem("Module") command_type_combobox.addItem("Shell") module_label = QLabel("Module name: ") module_combobox = QComboBox() for module_name in modules.get_names(): module_combobox.addItem(module_name) module_combobox.currentTextChanged.connect(self._on_module_change) command_type_combobox.currentTextChanged.connect(self._on_command_type_change) self._layout.setColumnStretch(1, 1) self._layout.addWidget(command_type_label, 0, 0) self._layout.addWidget(command_type_combobox, 0, 1) self._layout.addWidget(module_label, 1, 0) self._layout.addWidget(module_combobox, 1, 1) # Module layout cached_module = modules.get_module(module_name) if not cached_module: cached_module = modules.load_module(module_name, self._module_view, self._model) input_fields = [] for option_name in cached_module.get_setup_messages(): input_field = QLineEdit() self._sub_layout.addWidget(QLabel(option_name)) self._sub_layout.addWidget(input_field) input_fields.append(input_field) run_button = QPushButton("Run") run_button.setMaximumWidth(250) run_button.setMinimumHeight(25) run_button.pressed.connect(lambda: self._on_module_run(module_combobox.currentText(), input_fields)) self._sub_layout.addWidget(QLabel("")) self._sub_layout.addWidget(run_button) self._sub_layout.setContentsMargins(0, 15, 0, 0) self._layout.addLayout(self._sub_layout, self._layout.rowCount() + 2, 0, 1, 2) self._on_module_change(module_combobox.currentText()) def set_shell_layout(self): """Sets the layout which can execute shell commands.""" self._current_layout = "Shell" self._clear_layout() command_type_label = QLabel("Command type: ") command_type_combobox = QComboBox() command_type_combobox.addItem("Shell") command_type_combobox.addItem("Module") command_label = QLabel("Command:") command_input = QLineEdit() run_button = QPushButton("Run") run_button.setMaximumWidth(250) run_button.setMinimumHeight(25) command_type_combobox.currentTextChanged.connect(self._on_command_type_change) run_button.pressed.connect(lambda: self._on_command_run(command_input)) self._layout.addWidget(command_type_label, 0, 0) self._layout.addWidget(command_type_combobox, 0, 1) self._layout.addWidget(command_label, 1, 0) self._layout.addWidget(command_input, 1, 1) self._sub_layout.addWidget(QLabel("")) self._sub_layout.addWidget(run_button) self._sub_layout.setContentsMargins(0, 15, 0, 0) self._layout.addLayout(self._sub_layout, self._layout.rowCount() + 2, 0, 1, 2) def _on_command_type_change(self, text): """Handles the command type combobox change event. :type text: str """ if text == "Module": self.set_module_layout() else: self.set_shell_layout() def _on_module_change(self, module_name): """Handles module combobox changes. :type module_name: str """ while self._sub_layout.count(): child = self._sub_layout.takeAt(0) if child.widget(): child.widget().deleteLater() cached_module = modules.get_module(module_name) if not cached_module: cached_module = modules.load_module(module_name, self._module_view, self._model) input_fields = [] for option_name in cached_module.get_setup_messages(): input_field = QLineEdit() input_fields.append(input_field) self._sub_layout.addWidget(QLabel(option_name)) self._sub_layout.addWidget(input_field) run_button = QPushButton("Run") run_button.setMaximumWidth(250) run_button.setMinimumHeight(25) run_button.pressed.connect(lambda: self._on_module_run(module_name, input_fields)) self._sub_layout.addWidget(QLabel("")) self._sub_layout.addWidget(run_button) self._sub_layout.setContentsMargins(0, 15, 0, 0) def display_info(self, text): """ :type text: str """ message_box = QMessageBox() message_box.setIcon(QMessageBox.Information) message_box.setWindowTitle("Information") message_box.setText(text) message_box.setStandardButtons(QMessageBox.Ok) message_box.exec_() def _on_module_run(self, module_name, input_fields): """Handles running modules. :type module_name: str :type input_fields: list """ set_options = [] for input_field in input_fields: set_options.append(input_field.text()) module = modules.get_module(module_name) if not module: module = modules.load_module(module_name, self._module_view, self._model) successful, options = module.setup(set_options) if successful: if module_name == "remove_bot": code = loaders.get_remove_code(self._current_bot.loader_name) elif module_name == "update_bot": code = loaders.get_update_code(self._current_bot.loader_name) else: code = modules.get_code(module_name) if not options: options = {} options["module_name"] = module_name self._model.add_command(self._current_bot.uid, Command( CommandType.MODULE, code, options )) self.display_info("Module added to the queue of:\n {}@{}".format( self._current_bot.username, self._current_bot.hostname) ) def _on_command_run(self, command_input): """Handles running commands. :type command_input: QLineEdit """ if command_input.text().strip() == "": return self._model.add_command(self._current_bot.uid, Command(CommandType.SHELL, command_input.text().encode())) command_input.clear() self.display_info("Command added to the queue of:\n {}@{}".format( self._current_bot.username, self._current_bot.hostname ))
class QSettingsWindow(QDialog): def __init__(self, game: Game): super(QSettingsWindow, self).__init__() self.game = game self.setModal(True) self.setWindowTitle("Settings") self.setWindowIcon(CONST.ICONS["Settings"]) self.setMinimumSize(600, 250) self.initUi() def initUi(self): self.layout = QGridLayout() self.categoryList = QListView() self.right_layout = QStackedLayout() self.categoryList.setMaximumWidth(175) self.categoryModel = QStandardItemModel(self.categoryList) difficulty = QStandardItem("Difficulty") difficulty.setIcon(CONST.ICONS["Missile"]) difficulty.setEditable(False) difficulty.setSelectable(True) generator = QStandardItem("Mission Generator") generator.setIcon(CONST.ICONS["Generator"]) generator.setEditable(False) generator.setSelectable(True) cheat = QStandardItem("Cheat Menu") cheat.setIcon(CONST.ICONS["Cheat"]) cheat.setEditable(False) cheat.setSelectable(True) self.categoryList.setIconSize(QSize(32, 32)) self.categoryModel.appendRow(difficulty) self.categoryModel.appendRow(generator) self.categoryModel.appendRow(cheat) self.categoryList.setSelectionBehavior(QAbstractItemView.SelectRows) self.categoryList.setModel(self.categoryModel) self.categoryList.selectionModel().setCurrentIndex(self.categoryList.indexAt(QPoint(1,1)), QItemSelectionModel.Select) self.categoryList.selectionModel().selectionChanged.connect(self.onSelectionChanged) self.initDifficultyLayout() self.initGeneratorLayout() self.initCheatLayout() self.right_layout.addWidget(self.difficultyPage) self.right_layout.addWidget(self.generatorPage) self.right_layout.addWidget(self.cheatPage) self.layout.addWidget(self.categoryList, 0, 0, 1, 1) self.layout.addLayout(self.right_layout, 0, 1, 5, 1) self.setLayout(self.layout) def init(self): pass def initDifficultyLayout(self): self.difficultyPage = QWidget() self.difficultyLayout = QGridLayout() self.difficultyLayout.setAlignment(Qt.AlignTop) self.difficultyPage.setLayout(self.difficultyLayout) self.playerCoalitionSkill = QComboBox() self.enemyCoalitionSkill = QComboBox() self.enemyAASkill = QComboBox() for skill in CONST.SKILL_OPTIONS: self.playerCoalitionSkill.addItem(skill) self.enemyCoalitionSkill.addItem(skill) self.enemyAASkill.addItem(skill) self.playerCoalitionSkill.setCurrentIndex(CONST.SKILL_OPTIONS.index(self.game.settings.player_skill)) self.enemyCoalitionSkill.setCurrentIndex(CONST.SKILL_OPTIONS.index(self.game.settings.enemy_skill)) self.enemyAASkill.setCurrentIndex(CONST.SKILL_OPTIONS.index(self.game.settings.enemy_vehicle_skill)) self.playerCoalitionSkill.currentIndexChanged.connect(self.applySettings) self.enemyCoalitionSkill.currentIndexChanged.connect(self.applySettings) self.enemyAASkill.currentIndexChanged.connect(self.applySettings) self.difficultyLayout.addWidget(QLabel("Player coalition skill"), 0, 0) self.difficultyLayout.addWidget(self.playerCoalitionSkill, 0, 1, Qt.AlignRight) self.difficultyLayout.addWidget(QLabel("Enemy skill"), 1, 0) self.difficultyLayout.addWidget(self.enemyCoalitionSkill, 1, 1, Qt.AlignRight) self.difficultyLayout.addWidget(QLabel("Enemy AA and vehicles skill"), 2, 0) self.difficultyLayout.addWidget(self.enemyAASkill, 2, 1, Qt.AlignRight) self.difficultyLabel = QComboBox() [self.difficultyLabel.addItem(t) for t in CONST.LABELS_OPTIONS] self.difficultyLabel.setCurrentIndex(CONST.LABELS_OPTIONS.index(self.game.settings.labels)) self.difficultyLabel.currentIndexChanged.connect(self.applySettings) self.difficultyLayout.addWidget(QLabel("In Game Labels"), 3, 0) self.difficultyLayout.addWidget(self.difficultyLabel, 3, 1, Qt.AlignRight) self.noNightMission = QCheckBox() self.noNightMission.setChecked(self.game.settings.night_disabled) self.noNightMission.toggled.connect(self.applySettings) self.difficultyLayout.addWidget(QLabel("No night missions"), 4, 0) self.difficultyLayout.addWidget(self.noNightMission, 4, 1, Qt.AlignRight) self.mapVisibiitySelection = QComboBox() self.mapVisibiitySelection.addItem("All", ForcedOptions.Views.All) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.All: self.mapVisibiitySelection.setCurrentIndex(0) self.mapVisibiitySelection.addItem("Fog of War", ForcedOptions.Views.Allies) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.Allies: self.mapVisibiitySelection.setCurrentIndex(1) self.mapVisibiitySelection.addItem("Allies Only", ForcedOptions.Views.OnlyAllies) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.OnlyAllies: self.mapVisibiitySelection.setCurrentIndex(2) self.mapVisibiitySelection.addItem("Own Aircraft Only", ForcedOptions.Views.MyAircraft) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.MyAircraft: self.mapVisibiitySelection.setCurrentIndex(3) self.mapVisibiitySelection.addItem("Map Only", ForcedOptions.Views.OnlyMap) if self.game.settings.map_coalition_visibility == ForcedOptions.Views.OnlyMap: self.mapVisibiitySelection.setCurrentIndex(4) self.mapVisibiitySelection.currentIndexChanged.connect(self.applySettings) self.difficultyLayout.addWidget(QLabel("Map visibility options"), 5, 0) self.difficultyLayout.addWidget(self.mapVisibiitySelection, 5, 1, Qt.AlignRight) self.ext_views = QCheckBox() self.ext_views.setChecked(self.game.settings.external_views_allowed) self.ext_views.toggled.connect(self.applySettings) self.difficultyLayout.addWidget(QLabel("Allow external views"), 6, 0) self.difficultyLayout.addWidget(self.ext_views, 6, 1, Qt.AlignRight) def initGeneratorLayout(self): self.generatorPage = QWidget() self.generatorLayout = QVBoxLayout() self.generatorLayout.setAlignment(Qt.AlignTop) self.generatorPage.setLayout(self.generatorLayout) self.gameplay = QGroupBox("Gameplay") self.gameplayLayout = QGridLayout(); self.gameplayLayout.setAlignment(Qt.AlignTop) self.gameplay.setLayout(self.gameplayLayout) self.supercarrier = QCheckBox() self.supercarrier.setChecked(self.game.settings.supercarrier) self.supercarrier.toggled.connect(self.applySettings) self.generate_marks = QCheckBox() self.generate_marks.setChecked(self.game.settings.generate_marks) self.generate_marks.toggled.connect(self.applySettings) if not hasattr(self.game.settings, "include_jtac_if_available"): self.game.settings.include_jtac_if_available = True self.include_jtac_if_available = QCheckBox() self.include_jtac_if_available.setChecked(self.game.settings.include_jtac_if_available) self.include_jtac_if_available.toggled.connect(self.applySettings) self.gameplayLayout.addWidget(QLabel("Use Supercarrier Module"), 0, 0) self.gameplayLayout.addWidget(self.supercarrier, 0, 1, Qt.AlignRight) self.gameplayLayout.addWidget(QLabel("Put Objective Markers on Map"), 1, 0) self.gameplayLayout.addWidget(self.generate_marks, 1, 1, Qt.AlignRight) self.gameplayLayout.addWidget(QLabel("Include JTAC (If available)"), 2, 0) self.gameplayLayout.addWidget(self.include_jtac_if_available, 2, 1, Qt.AlignRight) self.performance = QGroupBox("Performance") self.performanceLayout = QGridLayout() self.performanceLayout.setAlignment(Qt.AlignTop) self.performance.setLayout(self.performanceLayout) self.smoke = QCheckBox() self.smoke.setChecked(self.game.settings.perf_smoke_gen) self.smoke.toggled.connect(self.applySettings) self.red_alert = QCheckBox() self.red_alert.setChecked(self.game.settings.perf_red_alert_state) self.red_alert.toggled.connect(self.applySettings) self.arti = QCheckBox() self.arti.setChecked(self.game.settings.perf_artillery) self.arti.toggled.connect(self.applySettings) self.moving_units = QCheckBox() self.moving_units.setChecked(self.game.settings.perf_moving_units) self.moving_units.toggled.connect(self.applySettings) self.infantry = QCheckBox() self.infantry.setChecked(self.game.settings.perf_infantry) self.infantry.toggled.connect(self.applySettings) self.ai_parking_start = QCheckBox() self.ai_parking_start.setChecked(self.game.settings.perf_ai_parking_start) self.ai_parking_start.toggled.connect(self.applySettings) self.destroyed_units = QCheckBox() self.destroyed_units.setChecked(self.game.settings.perf_destroyed_units) self.destroyed_units.toggled.connect(self.applySettings) self.culling = QCheckBox() self.culling.setChecked(self.game.settings.perf_culling) self.culling.toggled.connect(self.applySettings) self.culling_distance = QSpinBox() self.culling_distance.setMinimum(50) self.culling_distance.setMaximum(10000) self.culling_distance.setValue(self.game.settings.perf_culling_distance) self.culling_distance.valueChanged.connect(self.applySettings) self.performanceLayout.addWidget(QLabel("Smoke visual effect on frontline"), 0, 0) self.performanceLayout.addWidget(self.smoke, 0, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("SAM starts in RED alert mode"), 1, 0) self.performanceLayout.addWidget(self.red_alert, 1, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Artillery strikes"), 2, 0) self.performanceLayout.addWidget(self.arti, 2, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Moving ground units"), 3, 0) self.performanceLayout.addWidget(self.moving_units, 3, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Generate infantry squads along vehicles"), 4, 0) self.performanceLayout.addWidget(self.infantry, 4, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("AI planes parking start (AI starts in flight if disabled)"), 5, 0) self.performanceLayout.addWidget(self.ai_parking_start, 5, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Include destroyed units carcass"), 6, 0) self.performanceLayout.addWidget(self.destroyed_units, 6, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QHorizontalSeparationLine(), 7, 0, 1, 2) self.performanceLayout.addWidget(QLabel("Culling of distant units enabled"), 8, 0) self.performanceLayout.addWidget(self.culling, 8, 1, alignment=Qt.AlignRight) self.performanceLayout.addWidget(QLabel("Culling distance (km)"), 9, 0) self.performanceLayout.addWidget(self.culling_distance, 9, 1, alignment=Qt.AlignRight) self.generatorLayout.addWidget(self.gameplay) self.generatorLayout.addWidget(QLabel("Disabling settings below may improve performance, but will impact the overall quality of the experience.")) self.generatorLayout.addWidget(self.performance) def initCheatLayout(self): self.cheatPage = QWidget() self.cheatLayout = QGridLayout() self.cheatPage.setLayout(self.cheatLayout) self.moneyCheatBox = QGroupBox("Money Cheat") self.moneyCheatBox.setAlignment(Qt.AlignTop) self.moneyCheatBoxLayout = QGridLayout() self.moneyCheatBox.setLayout(self.moneyCheatBoxLayout) self.cheat25M = QPushButton("Cheat +25M") self.cheat50M = QPushButton("Cheat +50M") self.cheat100M = QPushButton("Cheat +100M") self.cheat200M = QPushButton("Cheat +200M") self.cheat500M = QPushButton("Cheat +500M") self.cheat1000M = QPushButton("Cheat +1000M") self.cheat25M.clicked.connect(lambda: self.cheatMoney(25)) self.cheat50M.clicked.connect(lambda: self.cheatMoney(50)) self.cheat100M.clicked.connect(lambda: self.cheatMoney(100)) self.cheat200M.clicked.connect(lambda: self.cheatMoney(200)) self.cheat500M.clicked.connect(lambda: self.cheatMoney(500)) self.cheat1000M.clicked.connect(lambda: self.cheatMoney(1000)) self.moneyCheatBoxLayout.addWidget(self.cheat25M, 0, 0) self.moneyCheatBoxLayout.addWidget(self.cheat50M, 0, 1) self.moneyCheatBoxLayout.addWidget(self.cheat100M, 1, 0) self.moneyCheatBoxLayout.addWidget(self.cheat200M, 1, 1) self.moneyCheatBoxLayout.addWidget(self.cheat500M, 2, 0) self.moneyCheatBoxLayout.addWidget(self.cheat1000M, 2, 1) self.cheatLayout.addWidget(self.moneyCheatBox, 0, 0) def cheatMoney(self, amount): self.game.budget += amount self.game.informations.append(Information("CHEATER", "You are a cheater and you should feel bad", self.game.turn)) GameUpdateSignal.get_instance().updateGame(self.game) def applySettings(self): self.game.settings.player_skill = CONST.SKILL_OPTIONS[self.playerCoalitionSkill.currentIndex()] self.game.settings.enemy_skill = CONST.SKILL_OPTIONS[self.enemyCoalitionSkill.currentIndex()] self.game.settings.enemy_vehicle_skill = CONST.SKILL_OPTIONS[self.enemyAASkill.currentIndex()] self.game.settings.labels = CONST.LABELS_OPTIONS[self.difficultyLabel.currentIndex()] self.game.settings.night_disabled = self.noNightMission.isChecked() self.game.settings.map_coalition_visibility = self.mapVisibiitySelection.currentData() self.game.settings.external_views_allowed = self.ext_views.isChecked() self.game.settings.generate_marks = self.generate_marks.isChecked() self.game.settings.include_jtac_if_available = self.include_jtac_if_available.isChecked() print(self.game.settings.map_coalition_visibility) self.game.settings.supercarrier = self.supercarrier.isChecked() self.game.settings.perf_red_alert_state = self.red_alert.isChecked() self.game.settings.perf_smoke_gen = self.smoke.isChecked() self.game.settings.perf_artillery = self.arti.isChecked() self.game.settings.perf_moving_units = self.moving_units.isChecked() self.game.settings.perf_infantry = self.infantry.isChecked() self.game.settings.perf_ai_parking_start = self.ai_parking_start.isChecked() self.game.settings.perf_destroyed_units = self.destroyed_units.isChecked() self.game.settings.perf_culling = self.culling.isChecked() self.game.settings.perf_culling_distance = int(self.culling_distance.value()) GameUpdateSignal.get_instance().updateGame(self.game) def onSelectionChanged(self): index = self.categoryList.selectionModel().currentIndex().row() self.right_layout.setCurrentIndex(index)
class NetworkControllerWidget(QWidget): def __init__(self): super().__init__() self.main_layout = QGridLayout() self.main_layout.setAlignment(Qt.AlignTop) self.main_layout.setSpacing(0) self.main_layout.setContentsMargins(0, 0, 0, 0) self.main_layout.addWidget(QLabel("Optimizer :"), 0, 0) self.optimizer_selector = QComboBox() self.optimizer_selector.addItems(["SGD", "RMSprop", "Adam", "Adadelta", "Adagrad", "Adamax", "Nadam", "Ftrl", "Custom"]) self.optimizer_stack = QStackedLayout() self.optimizer_stack.addWidget(SGDUI()) self.optimizer_stack.addWidget(RMSpropUI()) self.optimizer_stack.addWidget(AdamUI()) self.optimizer_stack.addWidget(AdadeltaUI()) self.optimizer_stack.addWidget(AdagradUI()) self.optimizer_stack.addWidget(AdamaxUI()) self.optimizer_stack.addWidget(NadamUI()) self.optimizer_stack.addWidget(FtrlUI()) self.loss_selector = QComboBox() self.loss_selector.addItems([ "BinaryCrossentropy", "CategoricalCrossentropy", "SparseCategoricalCrossentropy", "Poisson", "binary_crossentropy function", "categorical_crossentropy function", "sparse_categorical_crossentropy function", "poisson function", "KLDivergence", "kl_divergence function", "MeanSquaredError", "MeanAbsoluteError", "MeanAbsolutePercentageError", "MeanSquaredLogarithmicError", "CosineSimilarity", "mean_squared_error function", "mean_absolute_error function", "mean_absolute_percentage_error function", "mean_squared_logarithmic_error function", "cosine_similarity function", "Huber", "huber function", "LogCosh", "log_cosh function", "Hinge", "SquaredHinge", "CategoricalHinge", "hinge function", "squared_hinge function", "categorical_hinge function", "CUSTOM_my1"]) self.metrics_selector = CheckableComboBox() self.metrics_selector.addItems([ "Accuracy", "BinaryAccuracy", "CategoricalAccuracy", "TopKCategoricalAccuracy", "SparseTopKCategoricalAccuracy", "BinaryCrossentropy", "CategoricalCrossentropy", "SparseCategoricalCrossentropy", "KLDivergence", "Poisson", "MeanSquaredError", "RootMeanSquaredError", "MeanAbsoluteError", "MeanAbsolutePercentageError", "MeanSquaredLogarithmicError", "CosineSimilarity", "LogCoshError", "MeanIoU", "AUC", "Precision", "Hinge", "SquaredHinge", "CategoricalHinge", "Recall", "TruePositives", "TrueNegatives", "FalsePositives", "FalseNegatives", "PrecisionAtRecall", "SensitivityAtSpecificity", "SpecificityAtSensitivity", "CUSTOM_my1" ]) self.optimizer_selector.currentIndexChanged[int].connect(lambda index: self.optimizer_stack.setCurrentIndex(index)) tmp = QWidget() tmp.setLayout(self.optimizer_stack) self.run_eagerly = QComboBox() self.run_eagerly.addItems(["True", "False"]) self.main_layout.addWidget(QLabel("Loss Function:"), 0, 0) self.main_layout.addWidget(self.loss_selector, 0, 1) self.main_layout.addWidget(QLabel("Metrics:"),1, 0) self.main_layout.addWidget(self.metrics_selector, 1, 1) self.main_layout.addWidget(QLabel("run_eagerly:"), 2, 0) self.main_layout.addWidget(self.run_eagerly, 2, 1) self.main_layout.addWidget(QLabel("Optimizer:"), 3, 0) self.main_layout.addWidget(self.optimizer_selector, 3 , 1) self.main_layout.addWidget(tmp, 4, 1) self.setLayout(self.main_layout) self.set_styling() self.setMinimumWidth(50) def set_styling(self): self.setStyleSheet("background-color:aliceblue;")