Finished welcome dialog. New project dialog prototype.
This commit is contained in:
61
ui/project/new_project_dialog.py
Normal file
61
ui/project/new_project_dialog.py
Normal file
@ -0,0 +1,61 @@
|
||||
import traceback
|
||||
from PyQt5.QtWidgets import QDialog, QWidget, QDialogButtonBox, QFileDialog, QPushButton, QMessageBox
|
||||
|
||||
from model import Project
|
||||
from business import ProjectManager
|
||||
from properties.config import PROJECT_EXTENSION
|
||||
from ui.project.new_project_dialog_ui import Ui_NewProjectDialog
|
||||
|
||||
class NewProjectDialog(QDialog):
|
||||
|
||||
def __init__(self, projectManager : ProjectManager, parent : QWidget = None):
|
||||
super().__init__(parent)
|
||||
self.__projectManager = projectManager
|
||||
self.project : Project = None
|
||||
self.setupUi()
|
||||
self.setupActions()
|
||||
self.validate()
|
||||
|
||||
def setupUi(self):
|
||||
self.ui = Ui_NewProjectDialog()
|
||||
self.ui.setupUi(self)
|
||||
self.__buttonOk : QPushButton = self.ui.buttonBox.button(QDialogButtonBox.Ok)
|
||||
|
||||
def setupActions(self):
|
||||
self.ui.buttonBrowse.pressed.connect(self.browsePressed)
|
||||
self.ui.textProjectPath.textChanged.connect(self.projectPathChanged)
|
||||
self.ui.buttonBox.accepted.connect(self.okPressed)
|
||||
|
||||
def validate(self):
|
||||
valid = True
|
||||
if not self.ui.textProjectPath.text():
|
||||
valid = False
|
||||
self.__buttonOk.setEnabled(valid)
|
||||
|
||||
def browsePressed(self):
|
||||
path = QFileDialog.getSaveFileName(
|
||||
self,
|
||||
self.tr('New project'),
|
||||
'',
|
||||
self.tr(f'Project files (*.{PROJECT_EXTENSION});;All files (*.*)'))
|
||||
|
||||
if path[0]:
|
||||
self.ui.textProjectPath.setText(path[0])
|
||||
|
||||
def projectPathChanged(self):
|
||||
self.validate()
|
||||
|
||||
def okPressed(self):
|
||||
try:
|
||||
path = self.ui.textProjectPath.text()
|
||||
self.project = self.__projectManager.newProject(path)
|
||||
self.accept()
|
||||
|
||||
except Exception as ex:
|
||||
print("Failed to create project: ", traceback.format_exc())
|
||||
QMessageBox.critical(self,
|
||||
self.tr('An error occurred'),
|
||||
self.tr('The project could not be created in the given location.'))
|
||||
|
||||
|
||||
|
239
ui/project/new_project_dialog.ui
Normal file
239
ui/project/new_project_dialog.ui
Normal file
@ -0,0 +1,239 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>NewProjectDialog</class>
|
||||
<widget class="QDialog" name="NewProjectDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>486</width>
|
||||
<height>299</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>New project</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="_panelProjectPath" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelProjectPath">
|
||||
<property name="text">
|
||||
<string>Project path:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="textProjectPath">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="buttonBrowse">
|
||||
<property name="text">
|
||||
<string>&Browse...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupVideoSettings">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>2</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Video settings</string>
|
||||
</property>
|
||||
<layout class="QFormLayout">
|
||||
<property name="leftMargin">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelColorDepth">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Color depth:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboColorDepth">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>8 bits/channel</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>16 bits/channel</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>32 bits/channel (float)</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="labelColorSpace">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Color space:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="comboColorSpace">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>sRGB</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupAudioSettings">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Audio settings</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="leftMargin">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelSampleRate">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>110</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sample rate:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboSampleRate">
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>32 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>44.1 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>48 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>88.2 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>96 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>192 kHz</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>NewProjectDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
124
ui/project/new_project_dialog_ui.py
Normal file
124
ui/project/new_project_dialog_ui.py
Normal file
@ -0,0 +1,124 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/project/new_project_dialog.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.10.1
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_NewProjectDialog(object):
|
||||
def setupUi(self, NewProjectDialog):
|
||||
NewProjectDialog.setObjectName("NewProjectDialog")
|
||||
NewProjectDialog.resize(486, 299)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(NewProjectDialog)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self._panelProjectPath = QtWidgets.QWidget(NewProjectDialog)
|
||||
self._panelProjectPath.setObjectName("_panelProjectPath")
|
||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self._panelProjectPath)
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.labelProjectPath = QtWidgets.QLabel(self._panelProjectPath)
|
||||
self.labelProjectPath.setObjectName("labelProjectPath")
|
||||
self.horizontalLayout_3.addWidget(self.labelProjectPath)
|
||||
self.textProjectPath = QtWidgets.QLineEdit(self._panelProjectPath)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.textProjectPath.sizePolicy().hasHeightForWidth())
|
||||
self.textProjectPath.setSizePolicy(sizePolicy)
|
||||
self.textProjectPath.setObjectName("textProjectPath")
|
||||
self.horizontalLayout_3.addWidget(self.textProjectPath)
|
||||
self.buttonBrowse = QtWidgets.QPushButton(self._panelProjectPath)
|
||||
self.buttonBrowse.setObjectName("buttonBrowse")
|
||||
self.horizontalLayout_3.addWidget(self.buttonBrowse)
|
||||
self.verticalLayout.addWidget(self._panelProjectPath)
|
||||
self.groupVideoSettings = QtWidgets.QGroupBox(NewProjectDialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(2)
|
||||
sizePolicy.setHeightForWidth(self.groupVideoSettings.sizePolicy().hasHeightForWidth())
|
||||
self.groupVideoSettings.setSizePolicy(sizePolicy)
|
||||
self.groupVideoSettings.setObjectName("groupVideoSettings")
|
||||
self.formlayout = QtWidgets.QFormLayout(self.groupVideoSettings)
|
||||
self.formlayout.setContentsMargins(20, -1, 20, -1)
|
||||
self.formlayout.setObjectName("formlayout")
|
||||
self.labelColorDepth = QtWidgets.QLabel(self.groupVideoSettings)
|
||||
self.labelColorDepth.setMinimumSize(QtCore.QSize(110, 0))
|
||||
self.labelColorDepth.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.labelColorDepth.setObjectName("labelColorDepth")
|
||||
self.formlayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.labelColorDepth)
|
||||
self.comboColorDepth = QtWidgets.QComboBox(self.groupVideoSettings)
|
||||
self.comboColorDepth.setMinimumSize(QtCore.QSize(150, 0))
|
||||
self.comboColorDepth.setObjectName("comboColorDepth")
|
||||
self.comboColorDepth.addItem("")
|
||||
self.comboColorDepth.addItem("")
|
||||
self.comboColorDepth.addItem("")
|
||||
self.formlayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.comboColorDepth)
|
||||
self.labelColorSpace = QtWidgets.QLabel(self.groupVideoSettings)
|
||||
self.labelColorSpace.setMinimumSize(QtCore.QSize(110, 0))
|
||||
self.labelColorSpace.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.labelColorSpace.setObjectName("labelColorSpace")
|
||||
self.formlayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.labelColorSpace)
|
||||
self.comboColorSpace = QtWidgets.QComboBox(self.groupVideoSettings)
|
||||
self.comboColorSpace.setObjectName("comboColorSpace")
|
||||
self.comboColorSpace.addItem("")
|
||||
self.formlayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.comboColorSpace)
|
||||
self.verticalLayout.addWidget(self.groupVideoSettings)
|
||||
self.groupAudioSettings = QtWidgets.QGroupBox(NewProjectDialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(1)
|
||||
sizePolicy.setHeightForWidth(self.groupAudioSettings.sizePolicy().hasHeightForWidth())
|
||||
self.groupAudioSettings.setSizePolicy(sizePolicy)
|
||||
self.groupAudioSettings.setObjectName("groupAudioSettings")
|
||||
self.formLayout_2 = QtWidgets.QFormLayout(self.groupAudioSettings)
|
||||
self.formLayout_2.setContentsMargins(20, -1, 20, -1)
|
||||
self.formLayout_2.setObjectName("formLayout_2")
|
||||
self.labelSampleRate = QtWidgets.QLabel(self.groupAudioSettings)
|
||||
self.labelSampleRate.setMinimumSize(QtCore.QSize(110, 0))
|
||||
self.labelSampleRate.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.labelSampleRate.setObjectName("labelSampleRate")
|
||||
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.labelSampleRate)
|
||||
self.comboSampleRate = QtWidgets.QComboBox(self.groupAudioSettings)
|
||||
self.comboSampleRate.setObjectName("comboSampleRate")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.comboSampleRate.addItem("")
|
||||
self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.comboSampleRate)
|
||||
self.verticalLayout.addWidget(self.groupAudioSettings)
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox(NewProjectDialog)
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
||||
self.buttonBox.setObjectName("buttonBox")
|
||||
self.verticalLayout.addWidget(self.buttonBox)
|
||||
|
||||
self.retranslateUi(NewProjectDialog)
|
||||
self.comboSampleRate.setCurrentIndex(2)
|
||||
self.buttonBox.rejected.connect(NewProjectDialog.reject)
|
||||
QtCore.QMetaObject.connectSlotsByName(NewProjectDialog)
|
||||
|
||||
def retranslateUi(self, NewProjectDialog):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
NewProjectDialog.setWindowTitle(_translate("NewProjectDialog", "New project"))
|
||||
self.labelProjectPath.setText(_translate("NewProjectDialog", "Project path:"))
|
||||
self.buttonBrowse.setText(_translate("NewProjectDialog", "&Browse..."))
|
||||
self.groupVideoSettings.setTitle(_translate("NewProjectDialog", "Video settings"))
|
||||
self.labelColorDepth.setText(_translate("NewProjectDialog", "Color depth:"))
|
||||
self.comboColorDepth.setItemText(0, _translate("NewProjectDialog", "8 bits/channel"))
|
||||
self.comboColorDepth.setItemText(1, _translate("NewProjectDialog", "16 bits/channel"))
|
||||
self.comboColorDepth.setItemText(2, _translate("NewProjectDialog", "32 bits/channel (float)"))
|
||||
self.labelColorSpace.setText(_translate("NewProjectDialog", "Color space:"))
|
||||
self.comboColorSpace.setItemText(0, _translate("NewProjectDialog", "sRGB"))
|
||||
self.groupAudioSettings.setTitle(_translate("NewProjectDialog", "Audio settings"))
|
||||
self.labelSampleRate.setText(_translate("NewProjectDialog", "Sample rate:"))
|
||||
self.comboSampleRate.setItemText(0, _translate("NewProjectDialog", "32 kHz"))
|
||||
self.comboSampleRate.setItemText(1, _translate("NewProjectDialog", "44.1 kHz"))
|
||||
self.comboSampleRate.setItemText(2, _translate("NewProjectDialog", "48 kHz"))
|
||||
self.comboSampleRate.setItemText(3, _translate("NewProjectDialog", "88.2 kHz"))
|
||||
self.comboSampleRate.setItemText(4, _translate("NewProjectDialog", "96 kHz"))
|
||||
self.comboSampleRate.setItemText(5, _translate("NewProjectDialog", "192 kHz"))
|
||||
|
Reference in New Issue
Block a user