def setup_control_panel(self):
        """
		Inicjalizuje panel kontrolny.
		"""
        self.control_panel_top.clear()
        self.control_panel_bottom.clear()

        self.description_button = self.control_panel_top.add_button(
            "Opis", Paths.icon("bookmark.png"))
        self.description_button.clicked.connect(self.show_description)
        self.description_button.set_hint("Wyświetlenie opisu algorytmu.")

        self.visualisation_button = self.control_panel_top.add_button(
            "Wizualizacja", Paths.icon("eye.png"))
        self.visualisation_button.clicked.connect(self.show_visualisation)
        self.visualisation_button.set_hint(
            "Wizualizacja podstawowych operacji na rzecz danego algorytmu.")

        self.codes_button = self.control_panel_top.add_button(
            "Kody źródłowe", Paths.icon("code.png"))
        self.codes_button.clicked.connect(self.show_codes)
        self.codes_button.set_hint("Przejście do panelu z kodami źródłowymi.")

        self.questions_button = self.control_panel_top.add_button(
            "Pytania", Paths.icon("question_mark.png"))
        self.questions_button.clicked.connect(self.show_questions)
        self.questions_button.set_hint(
            "Panel weryfikujący zdobytą przez użytkownika wiedzę.")

        self.questions_button = self.control_panel_top.add_button(
            "Ustawienia", Paths.icon("settings.png"))
        self.questions_button.clicked.connect(self.show_settings)
        self.questions_button.set_hint(
            "Panel pozwalający dostosować użytkowanie aplikacji.")
    def setup_control_panel(self):
        """
		Inicjalizuje panel kontrolny.
		"""
        self.center.set_widget(self.algorithm.visualization_widget)
        description = DescriptionLabel(self.center)
        description.set_text(
            "Skorzystaj z panelu po prawej stronie, aby rozpocząć wizualizację."
        )
        self.center.set_bottom_widget(description)
        self.description_widget = self.center.bottom_widget

        for control in self.algorithm.controls:
            control_type = control[0]
            if control_type == "BUTTON":
                title, callback, icon, hint, update = control[1:]
                button = self.control_panel_bottom.add_button(title, icon)
                button.clicked.connect(callback)
                if update:
                    button.clicked.connect(self.on_click_last_snapshot)
                button.clicked.connect(self.clear_textboxes)
                button.set_hint(hint)
                self.internal_widgets.append(button)
            elif control_type == "TEXTBOX":
                label_text, callback, hint, update = control[1:]
                label = self.control_panel_bottom.add_label(label_text)
                textbox = self.control_panel_bottom.add_text_box(hint)
                textbox.textChanged.connect(callback)
                if update:
                    textbox.textChanged.connect(self.on_click_last_snapshot)
                self.internal_widgets.append(label)
                self.internal_widgets.append(textbox)
            else:
                print("Unknown control type")

        self.icon_panel = self.control_panel_bottom.add_icon_panel()

        self.first_step_button = self.icon_panel.add_button(
            Paths.icon("first.png"), "Uruchomienie pierwszego kroku.")
        self.first_step_button.clicked.connect(self.on_click_first_step)

        self.previous_step_button = self.icon_panel.add_button(
            Paths.icon("backward.png"), "Uruchomienie poprzedniego kroku.")
        self.previous_step_button.clicked.connect(self.on_click_previous_step)

        self.play_button = self.icon_panel.add_button(Paths.icon("play.png"))
        self.play_button.clicked.connect(self.on_click_play)

        self.next_step_button = self.icon_panel.add_button(
            Paths.icon("forward.png"), "Uruchomienie następnego kroku.")
        self.next_step_button.clicked.connect(self.on_click_next_step)

        self.last_snapshot_button = self.icon_panel.add_button(
            Paths.icon("last.png"), "Uruchomienie ostatniego kroku.")
        self.last_snapshot_button.clicked.connect(self.on_click_last_snapshot)
    def setup_ui(self):
        """
		Inicjalizacja interfejsu użytkownika.
		"""
        self.setObjectName("TestScoreWindow")

        self.setSizePolicy(self.get_size_policy())
        self.setMinimumSize(QSize(500, 110))
        self.setWindowTitle(self.window_title)
        self.setWindowIcon(QIcon(Paths.icon("window_icon.png")))
        self.setStyleSheet(Styles.test_score_window_style)

        shadow = QGraphicsDropShadowEffect()
        shadow.setXOffset(0)
        shadow.setYOffset(5)
        shadow.setBlurRadius(10)

        self.control_panel = ControlPanel(self, Qt.AlignTop)

        self.score_label = self.control_panel.add_label(self.score)
        self.score_label.setStyleSheet(
            Styles.test_score_window_label_score_style +
            self.score_color_style)
        self.score_label.setGraphicsEffect(shadow)

        self.hint_label = self.control_panel.add_label(self.hint)
        self.hint_label.setStyleSheet(
            Styles.test_score_window_label_hint_style)

        self.setCentralWidget(self.control_panel)
Ejemplo n.º 4
0
    def show_question(self,
                      question: TestQuestion,
                      algorithm,
                      show_explanation=False):
        """
		Wyświetla pytanie.

		Parametry:
			parent - widget rodzic.

			question - pytanie, obiekt klasy TestQuestion.

			algorithm - nazwa algorytmu

			show_explanation - określa czy wyświetlić uzasadnienie.
		"""

        self.question.setText(question.question)

        image_path = Paths.test_question_image(algorithm, question.image)
        if not os.path.isfile(image_path):
            image_path = Paths.icon("question_mark.png")

        pixels = QPixmap(image_path)
        self.image.setPixmap(pixels)
        self.image.resize(pixels.width(), pixels.height())

        if show_explanation:
            self.explanation.setText(question.explanation)

        for index, answer in enumerate(question.answers):
            button = self.answers[index]
            button.set_text(answer)
Ejemplo n.º 5
0
    def setup_ui(self):
        """
		Inicjalizacja interfejsu użytkownika.
		"""
        self.image = QLabel(self)
        self.image.setAlignment(Qt.AlignCenter)
        self.widget_layout.addWidget(self.image)

        self.question = QLabel(self)
        self.question.setWordWrap(True)
        self.question.setAlignment(Qt.AlignCenter)
        self.widget_layout.addWidget(self.question)

        self.explanation = QLabel(self)
        self.explanation.setWordWrap(True)
        self.explanation.setAlignment(Qt.AlignCenter)
        self.widget_layout.addWidget(self.explanation)

        for l in ["A", "B", "C", "D"]:
            answer = AnswerButton(self)
            answer.set_icon(Paths.icon("letter_%s.png" % l.lower()))
            answer.set_hint("Odpowiedź %s" % l)
            self.answers.append(answer)
            self.widget_layout.addWidget(answer)

        self.setStyleSheet(Styles.description_background)
Ejemplo n.º 6
0
    def __init__(self):
        QMainWindow.__init__(self)
        self.setObjectName("WelcomeWindow")
        self.resize(WINDOW_SIZE_X, WINDOW_SIZE_Y)
        self.setMinimumSize(QSize(WINDOW_SIZE_X, WINDOW_SIZE_Y))
        self.setMaximumSize(QSize(WINDOW_SIZE_X, WINDOW_SIZE_Y))
        self.setWindowTitle("WAWI ZUT")

        self.setStyleSheet(Styles.welcome_background)
        self.setWindowIcon(QIcon(Paths.icon("window_icon.png")))

        self.central_widget = QWidget()
        self.layout = QVBoxLayout()

        self.setCentralWidget(self.central_widget)
        self.centralWidget().setLayout(self.layout)

        self.logo = QLabel(self)
        self.logo.setPixmap(QPixmap(Paths.icon("logo.png")))
        self.logo.setAlignment(Qt.AlignCenter)
        self.layout.addWidget(self.logo, 10)

        self.layout.addWidget(
            add_label("\nWizualizacja Algorytmów", 12, False, Qt.AlignCenter),
            10)
        self.layout.addWidget(
            add_label(
                "Wydział Informatyki \nZachodniopomorski Uniwersytet Technologiczny w Szczecinie\n",
                10, False, Qt.AlignCenter), 1)
        self.layout.addWidget(
            add_label(
                "Oprogramowanie zrealizowane w ramach przedmiotu \nInżynierski Projekt Zespołowy 1",
                10, False, Qt.AlignCenter), 1)
        self.layout.addWidget(
            add_label(
                "Autorzy: Marcin Jakubowski, Aliaksei Kavaliou, Piotr Podleżański, \nMateusz Smolarkiewicz, Łukasz Więckowski, Mykhailo Yelmikheiev",
                10, False, Qt.AlignLeft), 1)
        self.layout.addWidget(
            add_label("Opiekun projektu: dr hab.inż. Imed El Fray", 10, False,
                      Qt.AlignLeft), 1)
        self.layout.addWidget(
            add_label(
                "Konsultacja merytoryczna: dr hab.inż. Imed El Fray, \nmgr inż. Włodzimierz Chocianowicz, mgr inż. Gerard Wawrzyniak",
                10, False, Qt.AlignLeft), 1)
Ejemplo n.º 7
0
    def from_file(path: str):
        """
		Wczytuje obiekt Code z pliku. Nazwa pliku do pierwszej kropki jest interpretowana jako nazwa języka.

		Parametry:
			path - ścieżka do pliku.

		Powrót:
			obiekt klasy Code

		Przykład:
			>>> code = Code.fromFile("algorithm/example/c++.cpp")
		"""
        code = Code()
        code.path = path
        code.url = QUrl.fromLocalFile(code.path)
        code.language = os.path.basename(path).split(".")[0]
        icon_file = code.language + ".png"
        code.icon = Paths.icon(icon_file)
        if not os.path.isfile(code.icon):
            code.icon = Paths.icon("code.png")
        return code
 def __init__(self, main_widget: QWidget, algorithm: Algorithm):
     self.algorithm = algorithm
     self.main_widget = main_widget
     self.control_panel_bottom = self.main_widget.middle_widget.right_widget.bottom_control_panel
     self.center = self.main_widget.middle_widget.left_widget
     self.description_widget = None
     self.internal_widgets = []
     self.play_icon = Paths.icon("play.png")
     self.pause_icon = Paths.icon("pause.png")
     self.text_box_label = None
     self.text_box = None
     self.icon_panel = None
     self.first_step_button = None
     self.previous_step_button = None
     self.next_step_button = None
     self.last_snapshot_button = None
     self.play_button = None
     self.slider = None
     self.is_playing = False
     self.setup_control_panel()
     self.current_snapshot_index = 0
     self.update_playing_button()
    def load_controls(self):
        """
		Metoda tworząca klawisze oraz pola tekstowe odpowiedzialne za manipulację wizualizacją.
		"""

        self.add_textbox("Wartość elementu:",
                         self.on_value_change,
                         hint="Tutaj możesz wpisać dowolną wartość.")
        self.add_button("Dodaj",
                        lambda: self.add_element(self.textbox_value),
                        icon=Paths.icon("plus.png"),
                        hint="Dodanie nowego elementu na koniec tablicy.")
        self.add_button(
            "Usuń",
            lambda: self.remove_element(self.textbox_value),
            icon=Paths.icon("minus.png"),
            hint="Usunięcie pierwszego napotkanego elementu o podanej wartości."
        )
        self.add_button(
            "Usuń wszystkie",
            lambda: self.remove_all_elements(self.textbox_value),
            icon=Paths.icon("minus.png"),
            hint=
            "Usunięcie wszystkich napotkanych elementów o podanej wartości.")
        self.add_button(
            "Wyczyść",
            self.clear,
            icon=Paths.icon("clear.png"),
            hint=
            "Usunięcie wszystkich elementów oraz przywrócenie stanu początkowego."
        )
        self.add_button("Losowe dane",
                        self.random_data,
                        icon=Paths.icon("random.png"),
                        hint="Wylosowanie danych z ustawionego przedziału.")
        self.add_button(
            "Przemieszaj",
            self.shuffle,
            icon=Paths.icon("shuffle.png"),
            hint="Zamiana kolejności wszystkich elementów w tablicy.")
        self.add_button("Wykonaj algorytm",
                        self.execute,
                        icon=Paths.icon("execute.png"),
                        hint="Rozpoczęcie wykonywania algorytmu.",
                        update=False)
Ejemplo n.º 10
0
    def setup_ui(self):
        """
		Inicjalizacja interfejsu użytkownika.
		"""
        self.setObjectName("SettingsWindow")
        self.resize(400, 265)

        size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
        size_policy.setHorizontalStretch(1)
        size_policy.setVerticalStretch(1)
        size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())

        self.setSizePolicy(size_policy)
        self.setMinimumSize(QSize(400, 265))
        self.setWindowTitle(SettingsWindow.window_title)

        self.control_panel = ControlPanel(self, Qt.AlignTop)
        self.setStyleSheet(Styles.settings_background)
        self.setCentralWidget(self.control_panel)
        self.setWindowIcon(QIcon(Paths.icon("settings.png")))
    def setup_ui(self):
        """
		Inicjalizuje interfejs użytkownika.
		"""

        self.center.set_widget(QuestionsWidget)
        self.questions_widget = self.center.widget

        self.check_button = self.control_panel_bottom.add_button(
            "Zakończ test", Paths.icon("eye.png"), "Sprawdza test")
        self.check_button.clicked.connect(self.on_click_check)

        self.previous_button = self.control_panel_bottom.add_button(
            "Poprzednie", Paths.icon("backward.png"), "Poprzednie pytanie")
        self.previous_button.clicked.connect(self.on_click_previous)

        self.next_button = self.control_panel_bottom.add_button(
            "Następne", Paths.icon("forward.png"), "Następne pytanie")
        self.next_button.clicked.connect(self.on_click_next)

        for index, answer_button in enumerate(self.questions_widget.answers):
            answer_button.clicked.connect(
                (lambda i: lambda: self.on_click_answer(i))(index))
            answer_button.label.clicked.connect(
                (lambda i: lambda: self.on_click_answer(i))(index))

        self.control_icon_panel = self.control_panel_bottom.add_icon_panel()

        self.first_icon_button = self.control_icon_panel.add_button(
            Paths.icon("first.png"), "Pierwsze pytanie")
        self.first_icon_button.clicked.connect(self.on_click_first)

        self.previous_icon_button = self.control_icon_panel.add_button(
            Paths.icon("backward.png"), "Poprzednie pytanie")
        self.previous_icon_button.clicked.connect(self.on_click_previous)

        self.next_icon_button = self.control_icon_panel.add_button(
            Paths.icon("forward.png"), "Następne pytanie")
        self.next_icon_button.clicked.connect(self.on_click_next)

        self.last_icon_button = self.control_icon_panel.add_button(
            Paths.icon("last.png"), "Ostatnie pytanie")
        self.last_icon_button.clicked.connect(self.on_click_last)
Ejemplo n.º 12
0
	def setup_ui(self):
		"""
		Inicjalizacja interfejsu użytkownika.
		"""
		# Window config
		self.setObjectName("MainWindow")
		self.resize(800, 620)
		size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
		size_policy.setHorizontalStretch(1)
		size_policy.setVerticalStretch(1)
		size_policy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
		self.setSizePolicy(size_policy)
		self.setMinimumSize(QSize(1280, 720))
		self.setWindowTitle(MainWindow.window_title)

		# Main widget
		self.main_widget = MainWidget(self)
		self.main_widget.setObjectName("main_widget")
		self.setStyleSheet(Styles.main_background)
		self.setCentralWidget(self.main_widget)
		self.setWindowIcon(QIcon(Paths.icon("window_icon.png")))
Ejemplo n.º 13
0
    def load_controls(self):
        """
		Metoda tworząca klawisze oraz pola tekstowe odpowiedzialne za manipulację wizualizacją.
		"""
        self.add_textbox("Wartość elementu:",
                         self.on_value_change,
                         hint="Tutaj możesz wpisać dowolną wartość.")
        self.add_button("Push back",
                        self.push_back,
                        icon=Paths.icon("plus.png"),
                        hint="Dodanie nowego elementu na koniec listy.")
        self.add_button("Push front",
                        self.push_front,
                        icon=Paths.icon("plus.png"),
                        hint="Dodanie nowego elementu na początek listy.")
        self.add_button("Pop back",
                        self.pop_back,
                        icon=Paths.icon("minus.png"),
                        hint="Pobranie i usunięcie elementu z końca listy.")
        self.add_button(
            "Pop front",
            self.pop_front,
            icon=Paths.icon("minus.png"),
            hint="Pobranie i usunięcie elementu z początku listyy.")
        self.add_button(
            "Usuń",
            self.remove,
            icon=Paths.icon("minus.png"),
            hint="Usunięcie pierwszego napotkanego elementu o podanej wartości."
        )
        self.add_button(
            "Wyczyść",
            self.clear,
            icon=Paths.icon("clear.png"),
            hint=
            "Usunięcie wszystkich elementów oraz przywrócenie stanu początkowego."
        )
        self.add_button("Losowe dane",
                        self.random_data,
                        icon=Paths.icon("random.png"),
                        hint="Wylosowanie danych z ustawionego przedziału.")
Ejemplo n.º 14
0
 def test_icon(self):
     self.assertEqual(self.code_cpp.icon, Paths.icon("c++.png"))
     self.assertEqual(self.code_pseudocode.icon, Paths.icon("code.png"))
     self.assertEqual(self.code_python.icon, Paths.icon("python.png"))
Ejemplo n.º 15
0
	def load_difficulty_icons(self):
		for filename in ["easy", "moderate", "difficult"]:
			self.difficulty_icons.append(QIcon(Paths.icon("%s.png" % filename)))