summaryrefslogtreecommitdiff
path: root/Redim/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'Redim/main.py')
-rw-r--r--Redim/main.py392
1 files changed, 326 insertions, 66 deletions
diff --git a/Redim/main.py b/Redim/main.py
index 74b9375..c9f55db 100644
--- a/Redim/main.py
+++ b/Redim/main.py
@@ -1,78 +1,338 @@
-"""Fichier principal de Redim"""
-
import sys
-from PyQt5.QtWidgets import QFileDialog, QWidget, QApplication
-from ui import Ui
-from core import Redim
+from os.path import join
from config import Config
+from core import Redim
+from PyQt5 import QtWidgets, QtCore, QtGui
-def main():
- """Function principale de Redim, instanciation des classes
- et exécution des choix de l'utilisateur dans le menu principal
+class Ajout_taille(QtWidgets.QDialog):
+ """Fenêtre pour rajout d'une taille
"""
- app = QApplication([])
- widget = QWidget()
- config = Config()
- redim = Redim()
- config.redimensionnement_fenetre()
- while True:
- configuration = config.lecture()
- tui = Ui(configuration)
- tui.affichage_banner()
- tui.affichage_menu()
- choix = input(
- "[>] Choix (numero) : "
- )
- while True:
- tui.affichage_banner()
- if choix.strip() == "1":
- dossier = QFileDialog.getExistingDirectory(
- widget,
- "Sélectionner le dossier sur lequel travailler."
- )
- redim.main(dossier, configuration)
- tui.affichage_fin()
- break
- if choix.strip() == "5":
- tui.affichage_banner()
- configuration["dimensions"] = tui.question_taille(
- configuration["dimensions"]
+ def __init__(self, config):
+ super(Ajout_taille, self).__init__()
+ self.setWindowTitle("Ajout d'une dimension")
+ logo = join("Ressources", "icon.ico")
+ self.setWindowIcon(QtGui.QIcon(logo))
+ self.config = config
+ self.ajout = False
+ texte_larg = QtWidgets.QLabel("Largeur:")
+ self.edit_larg = QtWidgets.QLineEdit()
+ texte_haut = QtWidgets.QLabel("Hauteur:")
+ self.edit_haut = QtWidgets.QLineEdit()
+ self.layout_btn = QtWidgets.QHBoxLayout()
+ btn_ajouter = QtWidgets.QPushButton("Ajouter")
+ btn_ajouter.clicked.connect(self.valider)
+ self.layout_main = QtWidgets.QVBoxLayout()
+ self.layout_groupbox = QtWidgets.QVBoxLayout()
+ self.layout_taille = QtWidgets.QHBoxLayout()
+ self.groupbox_main = QtWidgets.QGroupBox("Ajout d'une dimension (en pixel)")
+ self.groupbox_main.setLayout(self.layout_groupbox)
+ self.layout_taille.addWidget(texte_larg)
+ self.layout_taille.addWidget(self.edit_larg)
+ self.layout_taille.addWidget(texte_haut)
+ self.layout_taille.addWidget(self.edit_haut)
+ self.layout_btn.addStretch()
+ self.layout_btn.addWidget(btn_ajouter)
+ self.layout_btn.addStretch()
+ self.layout_groupbox.addLayout(self.layout_taille)
+ self.layout_main.addWidget(self.groupbox_main)
+ self.layout_main.addStretch()
+ self.layout_main.addLayout(self.layout_btn)
+ self.setLayout(self.layout_main)
+
+ def valider(self):
+ if self.edit_larg.text().isdigit() and self.edit_haut.text().isdigit():
+ self.config["dimensions"].append(
+ [int(self.edit_larg.text()), int(self.edit_haut.text())]
)
- config.sauvegarde(configuration)
- tui.affichage_fin()
- break
- if choix.strip() == "6":
- tui.affichage_banner()
- configuration["background"] = tui.question_background(
- configuration["background"]
+ self.ajout = True
+ self.accept()
+ else:
+ QtWidgets.QMessageBox.warning(self, "Erreur", "Entrée incorrecte")
+
+
+class Gui(QtWidgets.QMainWindow):
+ def __init__(self):
+ super(Gui, self).__init__()
+ self.redim = Redim()
+ self.config = Config()
+ self.configuration = self.config.lecture()
+ self.choix_dimensions = [[], []]
+ logo = join("Ressources", "icon.ico")
+ self.setWindowIcon(QtGui.QIcon(logo))
+ menu = self.menuBar()
+ menu_options = menu.addMenu("Options")
+ btn_reset = QtWidgets.QAction("Reset des paramètres", self)
+ btn_reset.triggered.connect(self.reset)
+ btn_apropos = QtWidgets.QAction("A propos", self)
+ btn_apropos.triggered.connect(self.a_propos)
+ menu_options.addAction(btn_reset)
+ menu_options.addAction(btn_apropos)
+ self.setWindowTitle("Redim")
+ self.home()
+
+ def home(self):
+ self.layout_main = QtWidgets.QVBoxLayout()
+ # Layout Sélection dossier
+ self.edit_source = QtWidgets.QLineEdit("Aucun dossier sélectionné.")
+ self.edit_source.setReadOnly(True)
+ btn_source = QtWidgets.QPushButton("Sélection dossier")
+ btn_source.clicked.connect(self.selection_dossier)
+ self.groupbox_source = QtWidgets.QGroupBox(
+ "Sélection du dossier source"
)
- config.sauvegarde(configuration)
- tui.affichage_fin()
- break
- if choix.strip() == "7":
- tui.affichage_banner()
- configuration["format_final"] = tui.question_format_final(
- configuration["formats_acceptes"]
+ self.layout_source = QtWidgets.QHBoxLayout()
+ self.layout_source.addWidget(self.edit_source)
+ self.layout_source.addWidget(btn_source)
+ # Layout Configuration
+ self.combobox_taille_1 = QtWidgets.QComboBox(self)
+ self.combobox_taille_2 = QtWidgets.QComboBox(self)
+ self.update_dimensions()
+ self.combobox_taille_1.activated[str].connect(self.choix_combobox_1)
+ self.combobox_taille_2.activated[str].connect(self.choix_combobox_2)
+ btn_modif_taille = QtWidgets.QPushButton("Ajout taille")
+ btn_modif_taille.clicked.connect(self.ajout_taille)
+ self.edit_red = QtWidgets.QLineEdit()
+ self.edit_green = QtWidgets.QLineEdit()
+ self.edit_blue = QtWidgets.QLineEdit()
+ if self.configuration["transparence"]:
+ self.edit_red.setReadOnly(True)
+ self.edit_green.setReadOnly(True)
+ self.edit_blue.setReadOnly(True)
+ else:
+ self.edit_red.setText(str(self.configuration["background"][0]))
+ self.edit_green.setText(str(self.configuration["background"][0]))
+ self.edit_blue.setText(str(self.configuration["background"][0]))
+ self.checkbox_transparency = QtWidgets.QCheckBox(
+ "Conserver la transparence."
+ )
+ self.checkbox_transparency.stateChanged.connect(
+ self.update_checkbox_transparency
+ )
+ if self.configuration["transparence"]:
+ self.checkbox_transparency.setCheckState(QtCore.Qt.Checked)
+ self.cb_format = QtWidgets.QComboBox(self)
+ if self.configuration["transparence"]:
+ self.cb_format.addItem(".webp")
+ self.cb_format.addItem(".png")
+ else:
+ for i in self.configuration["formats_possibles"]:
+ self.cb_format.addItem(".{0}".format(i))
+ self.layout_config = QtWidgets.QHBoxLayout()
+ self.groupbox_taille = QtWidgets.QGroupBox("Choix Dimensions")
+ self.layout_taille = QtWidgets.QVBoxLayout()
+ self.layout_taille.addStretch()
+ self.layout_taille.addWidget(self.combobox_taille_1)
+ self.layout_taille.addWidget(self.combobox_taille_2)
+ self.layout_taille.addWidget(btn_modif_taille)
+ self.groupbox_taille.setLayout(self.layout_taille)
+ self.layout_config.addWidget(self.groupbox_taille)
+ self.layout_config.addStretch()
+ self.groupbox_rgb = QtWidgets.QGroupBox("RGB")
+ self.layout_rgb = QtWidgets.QVBoxLayout()
+ self.layout_rgb.addStretch()
+ self.layout_edit_rgb = QtWidgets.QHBoxLayout()
+ self.layout_edit_rgb.addWidget(self.edit_red)
+ self.layout_edit_rgb.addWidget(self.edit_green)
+ self.layout_edit_rgb.addWidget(self.edit_blue)
+ self.layout_rgb.addLayout(self.layout_edit_rgb)
+ self.layout_rgb.addWidget(self.checkbox_transparency)
+ self.layout_rgb.addStretch()
+ self.groupbox_rgb.setLayout(self.layout_rgb)
+ self.layout_config.addWidget(self.groupbox_rgb)
+ self.layout_config.addStretch()
+ self.groupbox_format = QtWidgets.QGroupBox("Choix format de sortie")
+ self.layout_format = QtWidgets.QVBoxLayout()
+ self.layout_format.addStretch()
+ self.layout_format.addWidget(self.cb_format)
+ self.layout_format.addStretch()
+ self.groupbox_format.setLayout(self.layout_format)
+ self.layout_config.addWidget(self.groupbox_format)
+ self.layout_config.addStretch()
+ # Layout Validation
+ self.progressbar_validation = QtWidgets.QProgressBar()
+ self.progressbar_validation.setMaximum(100)
+ self.nom_fichier_en_cour = QtWidgets.QLabel("Travail sur:")
+ btn_validation = QtWidgets.QPushButton("Convertir")
+ btn_validation.clicked.connect(self.valider)
+ self.groupbox_validation = QtWidgets.QGroupBox("Validation")
+ self.layout_validation = QtWidgets.QHBoxLayout()
+ self.layout_validation.addWidget(self.progressbar_validation)
+ self.layout_validation.addWidget(self.nom_fichier_en_cour)
+ self.layout_validation.addStretch()
+ self.layout_validation.addWidget(btn_validation)
+ # Layout Main
+ self.mainWidget = QtWidgets.QWidget()
+ self.layout_main.addStretch()
+ self.groupbox_source.setLayout(self.layout_source)
+ self.layout_main.addWidget(self.groupbox_source)
+ self.layout_main.addStretch()
+ self.layout_main.addLayout(self.layout_config)
+ self.layout_main.addStretch()
+ self.groupbox_validation.setLayout(self.layout_validation)
+ self.layout_main.addWidget(self.groupbox_validation)
+ self.layout_main.addStretch()
+ self.mainWidget.setLayout(self.layout_main)
+ self.setCentralWidget(self.mainWidget)
+ self.show()
+
+ def selection_dossier(self, choix):
+ self.dossier = QtWidgets.QFileDialog.getExistingDirectory(
+ self,
+ "Sélectionner le dossier sur lequel travailler."
+ )
+ if self.dossier != "":
+ self.edit_source.setText(self.dossier)
+ else:
+ self.edit_source.setText("Aucun dossier sélectionné.")
+
+ def choix_combobox_1(self, choix):
+ self.choix_dimensions[0] = [int(i) for i in choix.split("x")]
+
+ def choix_combobox_2(self, choix):
+ self.choix_dimensions[1] = [int(i) for i in choix.split("x")]
+
+ def ajout_taille(self):
+ ajout_taille_gui = Ajout_taille(self.configuration)
+ ajout_taille_gui.exec()
+ if ajout_taille_gui.ajout:
+ self.config.sauvegarde(ajout_taille_gui.config)
+ self.configuration = self.config.lecture()
+ self.update_dimensions()
+
+ def update_dimensions(self):
+ for i in range(self.combobox_taille_1.count()):
+ self.combobox_taille_1.removeItem(0)
+ self.combobox_taille_2.removeItem(0)
+ for i in self.configuration["dimensions"]:
+ self.combobox_taille_1.addItem("{0}x{1}".format(i[0], i[1]))
+ self.combobox_taille_2.addItem("{0}x{1}".format(i[0], i[1]))
+ self.combobox_taille_1.setCurrentIndex(self.combobox_taille_1.count() - 2)
+ self.choix_dimensions[0] = [
+ int(i) for i in self.combobox_taille_1.currentText().split("x")
+ ]
+ self.combobox_taille_2.setCurrentIndex(self.combobox_taille_1.count() - 1)
+ self.choix_dimensions[1] = [
+ int(i) for i in self.combobox_taille_2.currentText().split("x")
+ ]
+
+ def update_checkbox_transparency(self, value):
+ if (QtCore.Qt.Checked == value):
+ if not self.configuration["transparence"]:
+ self.configuration["transparence"] = True
+ self.config.sauvegarde(self.configuration)
+ self.edit_red.setReadOnly(True)
+ self.edit_red.setText("")
+ self.edit_green.setReadOnly(True)
+ self.edit_green.setText("")
+ self.edit_blue.setReadOnly(True)
+ self.edit_blue.setText("")
+ for i in range(self.cb_format.count()):
+ self.cb_format.removeItem(0)
+ self.cb_format.addItem(".webp")
+ self.cb_format.addItem(".png")
+ else:
+ self.configuration["transparence"] = False
+ self.config.sauvegarde(self.configuration)
+ self.edit_red.setReadOnly(False)
+ self.edit_red.setText(str(self.configuration["background"][0]))
+ self.edit_green.setReadOnly(False)
+ self.edit_green.setText(str(self.configuration["background"][1]))
+ self.edit_blue.setReadOnly(False)
+ self.edit_blue.setText(str(self.configuration["background"][2]))
+ for i in range(self.cb_format.count()):
+ self.cb_format.removeItem(0)
+ for i in self.configuration["formats_possibles"]:
+ self.cb_format.addItem(".{0}".format(i))
+
+ def update_progress_bar(self, value):
+ self.progressbar_validation.setValue(value)
+
+ def update_nom_travail_fichier(self, value):
+ self.nom_fichier_en_cour.setText("Travail sur: %s" % value)
+
+ def valider(self):
+ self.configuration["format_choisi"] = self.cb_format.currentText()
+ print(self.configuration)
+ if not self.configuration["transparence"]:
+ rgb_background = []
+ rgb_background.append(self.edit_red.text())
+ rgb_background.append(self.edit_green.text())
+ rgb_background.append(self.edit_blue.text())
+ for i, j in enumerate(rgb_background):
+ if j.isdigit():
+ rgb_background[i] = int(j)
+ else:
+ QtWidgets.QMessageBox.warning(
+ self,
+ "Erreur",
+ "Entrée RGB incorrecte"
+ )
+ return
+ if rgb_background != self.configuration["background"]:
+ self.configuration["background"] = rgb_background
+ self.config.sauvegarde(self.configuration)
+ if hasattr(self, "dossier"):
+ configFinal = self.configuration
+ self.configuration["dimensions"] = self.choix_dimensions
+ self.redim._progress_bar_value.connect(self.update_progress_bar)
+ self.redim._travail_sur_value.connect(
+ self.update_nom_travail_fichier
+ )
+ returncode_redim = self.redim.main(self.dossier, configFinal)
+ if returncode_redim == 0:
+ QtWidgets.QMessageBox.information(
+ self,
+ "Redim",
+ "redimensionnement terminé!"
+ )
+ elif returncode_redim == 1:
+ QtWidgets.QMessageBox.warning(
+ self,
+ "Erreur",
+ "Plus de 10 fichiers ont le même nom dans le répertoire final.\
+ <br>Veuillez renommer vos fichiers originaux ou renommer les précédentes conversions."
+ )
+ else:
+ QtWidgets.QMessageBox.warning(
+ self,
+ "Erreur",
+ "Veuillez sélectionner un dossier"
+ )
+
+ def reset(self):
+ self.config.reset()
+ self.configuration = self.config.lecture()
+ self.choix_dimensions = [[], []]
+ self.update_dimensions()
+ self.checkbox_transparency.setCheckState(0)
+ self.update_checkbox_transparency(0)
+ QtWidgets.QMessageBox.information(
+ self,
+ "Reset des paramètres",
+ "Les paramètres ont été réinitialisés."
)
- config.sauvegarde(configuration)
- tui.affichage_fin()
- break
- if choix.strip() == "8":
- tui.affichage_banner()
- print("\n[-] Reset des parametres.")
- config.sauvegarde(config.base_configuration)
- tui.affichage_fin()
- break
- if choix.strip() == "9":
- tui.reset_screen()
- sys.exit(0)
- else:
- tui.affichage_banner()
- print("\n[-] Reponse invalide .")
- tui.affichage_fin()
- break
+
+ def a_propos(self):
+ QtWidgets.QMessageBox.information(
+ self,
+ "A propos",
+ "Logiciel de redimensionnement d'image.\
+ <br>Version: %s\
+ <br>Auteur: Debulois Quentin\
+ <br>Copyright: \
+ <a href='https://www.gnu.org/licenses/gpl-3.0.txt'>GNU GPLv3</a>\
+ <br>Code source: \
+ <a href='https://git.debulois.fr/redim/'>git.debulois.fr/redim</a>" % self.configuration["version"]
+ )
if __name__ == "__main__":
+ def main():
+ """Démarrage de l'app
+ """
+ app = QtWidgets.QApplication(sys.argv)
+ GUI = Gui()
+ sys.exit(app.exec_())
+
main()