videomorph-dev/videomorph

View on GitHub
videomorph/forms/info.py

Summary

Maintainability
B
4 hrs
Test Coverage
# -*- coding: utf-8 -*-
#
# File name: info.py
#
#   VideoMorph - A PyQt6 frontend to ffmpeg.
#   Copyright 2016-2022 VideoMorph Development Team

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at

#       http://www.apache.org/licenses/LICENSE-2.0

#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

"""This module provides a dialog to show changelog."""

from os.path import basename

from PyQt6 import QtWidgets
from PyQt6.QtWidgets import (
    QGridLayout,
    QGroupBox,
    QLabel,
    QPushButton,
    QSpacerItem,
    QVBoxLayout,
)

from videomorph.converter.utils import write_size, write_time


class InfoDialog(QtWidgets.QDialog):
    """Changelog Dialog."""

    def __init__(self, parent=None, position=0, task_list=None):
        super(InfoDialog, self).__init__(parent)
        self.position = position
        self.task_list = task_list

        self.central_widget = QtWidgets.QWidget(self)
        self.resize(300, 400)
        self.setWindowTitle(self.tr("Properties"))

        whole_layout = QVBoxLayout(self.central_widget)

        gb_general = QGroupBox(self.central_widget)
        gb_general.setTitle(self.tr("General"))

        general_layout = QVBoxLayout(gb_general)

        general_grid = QGridLayout()
        general_grid.setColumnStretch(1, 1)

        label_file_name = QLabel(gb_general)
        label_file_name.setText(self.tr("File Name:"))

        self.label_file_name_value = QLabel(gb_general)
        self.label_file_name_value.setText("")

        label_size = QLabel(gb_general)
        label_size.setText(self.tr("Size:"))

        self.label_size_value = QLabel(gb_general)
        self.label_size_value.setText("")

        label_duration = QLabel(gb_general)
        label_duration.setText(self.tr("Duration:"))

        self.label_duration_value = QLabel(gb_general)
        self.label_duration_value.setText("")

        label_format_name = QLabel(gb_general)
        label_format_name.setText(self.tr("Format Name:"))

        self.label_format_name_value = QLabel(gb_general)
        self.label_format_name_value.setText("")

        label_format_long_name = QLabel(gb_general)
        label_format_long_name.setText(self.tr("Format Long Name:"))

        self.label_format_long_name_value = QLabel(gb_general)
        self.label_format_long_name_value.setText("")

        general_grid.addWidget(label_file_name, 0, 0, 1, 1)
        general_grid.addWidget(self.label_file_name_value, 0, 1, 1, 1)
        general_grid.addWidget(label_size, 1, 0, 1, 1)
        general_grid.addWidget(self.label_size_value, 1, 1, 1, 1)
        general_grid.addWidget(label_duration, 2, 0, 1, 1)
        general_grid.addWidget(self.label_duration_value, 2, 1, 1, 1)
        general_grid.addWidget(label_format_name, 3, 0, 1, 1)
        general_grid.addWidget(self.label_format_name_value, 3, 1, 1, 1)
        general_grid.addWidget(label_format_long_name, 4, 0, 1, 1)
        general_grid.addWidget(self.label_format_long_name_value, 4, 1, 1, 1)

        general_layout.addLayout(general_grid)

        gb_video = QGroupBox(self.central_widget)
        gb_video.setTitle(self.tr("Video"))
        video_layout = QVBoxLayout(gb_video)
        video_grid = QGridLayout()
        video_grid.setColumnStretch(1, 1)

        label_bit_rate = QLabel(gb_video)
        label_bit_rate.setText(self.tr("Bit Rate:"))

        self.label_bit_rate_value = QLabel(gb_video)
        self.label_bit_rate_value.setText("")

        label_width = QLabel(gb_video)
        label_width.setText(self.tr("Width:"))

        self.label_width_value = QLabel(gb_video)
        self.label_width_value.setText("")

        label_height = QLabel(gb_video)
        label_height.setText(self.tr("Height:"))

        self.label_height_value = QLabel(gb_video)
        self.label_height_value.setText("")

        label_codec_long_name = QLabel(gb_video)
        label_codec_long_name.setText(self.tr("Codec Long Name:"))

        self.label_codec_long_name_value = QLabel(gb_video)
        self.label_codec_long_name_value.setText("")

        label_codec_name = QLabel(gb_video)
        label_codec_name.setText(self.tr("Codec Name:"))

        self.label_codec_name_value = QLabel(gb_video)
        self.label_codec_name_value.setText("")

        video_grid.addWidget(label_bit_rate, 2, 0, 1, 1)
        video_grid.addWidget(self.label_bit_rate_value, 2, 1, 1, 1)
        video_grid.addWidget(label_width, 3, 0, 1, 1)
        video_grid.addWidget(self.label_width_value, 3, 1, 1, 1)
        video_grid.addWidget(label_height, 4, 0, 1, 1)
        video_grid.addWidget(self.label_height_value, 4, 1, 1, 1)
        video_grid.addWidget(label_codec_long_name, 1, 0, 1, 1)
        video_grid.addWidget(self.label_codec_long_name_value, 1, 1, 1, 1)
        video_grid.addWidget(label_codec_name, 0, 0, 1, 1)
        video_grid.addWidget(self.label_codec_name_value, 0, 1, 1, 1)

        video_layout.addLayout(video_grid)

        gb_audio = QGroupBox(self.central_widget)
        gb_audio.setTitle(self.tr("Audio"))

        audio_layout = QVBoxLayout(gb_audio)

        audio_grid = QGridLayout()
        audio_grid.setColumnStretch(1, 1)

        label_acodec_name = QLabel(gb_audio)
        label_acodec_name.setText(self.tr("Codec Name:"))

        self.label_acodec_name_value = QLabel(gb_audio)
        self.label_acodec_name_value.setText("")

        label_acodec_long_name = QLabel(gb_audio)
        label_acodec_long_name.setText(self.tr("Codec Long Name:"))

        self.label_acodec_long_name_value = QLabel(gb_audio)
        self.label_acodec_long_name_value.setText("")

        audio_grid.addWidget(label_acodec_name, 0, 0, 1, 1)
        audio_grid.addWidget(self.label_acodec_name_value, 0, 1, 1, 1)
        audio_grid.addWidget(label_acodec_long_name, 1, 0, 1, 1)
        audio_grid.addWidget(self.label_acodec_long_name_value, 1, 1, 1, 1)

        audio_layout.addLayout(audio_grid)

        whole_layout.addWidget(gb_general)
        whole_layout.addWidget(gb_video)
        whole_layout.addWidget(gb_audio)

        self.ok_button = QPushButton()
        self.ok_button.setText("OK")
        self.ok_button.clicked.connect(self.close)
        button_layout = QtWidgets.QHBoxLayout()
        button_layout.addSpacerItem(
            QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                        QtWidgets.QSizePolicy.Policy.Minimum))
        button_layout.addWidget(self.ok_button)
        whole_layout.addLayout(button_layout)
        self._show_video_info(self.position)

        self.setMinimumSize(whole_layout.minimumSize())

    def _show_video_info(self, position):
        """Show video info on the Info Panel."""
        task = self.task_list.get_task(position)
        file_path = task.video.format_info["filename"]
        filename = basename(file_path)
        self.label_file_name_value.setText(filename)
        self.label_size_value.setText(
            write_size(task.video.format_info["size"])
        )
        self.label_duration_value.setText(
            write_time(task.video.format_info["duration"])
        )
        self.label_format_name_value.setText(
            task.video.format_info["format_name"]
        )
        self.label_format_long_name_value.setText(
            task.video.format_info["format_long_name"]
        )

        self.label_codec_name_value.setText(
            task.video.video_info["codec_name"]
        )
        self.label_codec_long_name_value.setText(
            task.video.video_info["codec_long_name"]
        )
        self.label_bit_rate_value.setText(task.video.video_info["bit_rate"])
        self.label_width_value.setText(task.video.video_info["width"])
        self.label_height_value.setText(task.video.video_info["height"])
        self.label_acodec_name_value.setText(
            task.video.audio_info["codec_name"]
        )
        self.label_acodec_long_name_value.setText(
            task.video.audio_info["codec_long_name"]
        )