import os
import glob
import shutil
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QPushButton, QWidget, QComboBox, QLabel
from PyQt5.QtCore import pyqtSlot
from . import transphire_utils as tu
[docs]class TemplateDialog(QDialog):
"""
TemplateDialog dialog.
Dialog used to enter the template.
Inherits from:
QDialog
"""
def __init__(self, settings_directory, add_remove=True, parent=None):
super(TemplateDialog, self).__init__(parent)
self.settings_directory = settings_directory
self.template = None
central_raw_layout = QVBoxLayout(self)
central_raw_layout.setContentsMargins(0, 0, 0, 0)
central_widget_raw = QWidget(self)
central_widget_raw.setObjectName('central_raw')
central_raw_layout.addWidget(central_widget_raw)
central_layout = QVBoxLayout(central_widget_raw)
central_widget = QWidget(self)
central_widget.setObjectName('central')
central_layout.addWidget(central_widget)
layout = QVBoxLayout(central_widget)
self.templates = sorted([os.path.basename(entry) for entry in glob.glob(os.path.join(settings_directory, '*')) if os.path.isdir(entry)])
layout.addWidget(QLabel('Available templates:'))
self.combo_box = QComboBox(parent=self)
self.combo_box.clear()
self.combo_box.addItems([entry for entry in self.templates if entry != 'SHARED'])
layout.addWidget(self.combo_box)
if add_remove:
button = QPushButton('New template', self)
button.clicked.connect(self.add_template)
layout.addWidget(button)
button = QPushButton('Copy current template', self)
button.clicked.connect(self.copy_template)
layout.addWidget(button)
button = QPushButton('Remove current template', self)
button.clicked.connect(self.remove_template)
layout.addWidget(button)
button = QPushButton('Choose current template', self)
button.clicked.connect(self.choose_template)
layout.addWidget(button)
[docs] @pyqtSlot()
def choose_template(self):
self.template = self.combo_box.currentText()
self.accept()
[docs] @pyqtSlot()
def remove_template(self):
text = self.combo_box.currentText()
if text == 'DEFAULT':
tu.message('Default template cannot be deleted!')
return None
dialog = InputBox(is_password=False, parent=self)
dialog.setText('Confirm deletion', 'Do you really want to remove delete template {0}? Type in "YES!"'.format(text))
result = dialog.exec_()
if result:
response = dialog.getText()
if response == 'YES!':
try:
shutil.rmtree(os.path.join(self.settings_directory, text))
except FileNotFoundError:
tu.message('Something is wrong! Template directory could not be removed!')
else:
self.templates.remove(text)
self.combo_box.clear()
self.combo_box.addItems([entry for entry in self.templates if entry != 'SHARED'])
else:
tu.message('Input needs to be "YES!" to work')
[docs] @pyqtSlot()
def add_template(self):
dialog = InputBox(is_password=False, parent=self)
dialog.setText('New template', 'Template name:')
result = dialog.exec_()
if result:
text = dialog.getText().strip()
if ' ' in text:
tu.message('There are not whitespaces allowed in the template name!')
elif 'shared' == text.lower():
tu.message('Shared is a protected namespace. Please choose another name.')
elif text in self.templates:
tu.message('Template name already exists! Please choose another one!')
else:
try:
os.mkdir(os.path.join(self.settings_directory, text))
except IOError:
tu.message('Something is wrong! Template directory already exists!')
else:
self.templates.append(text)
self.combo_box.clear()
self.combo_box.addItems([entry for entry in self.templates if entry != 'SHARED'])
self.combo_box.setCurrentText(text)
[docs] @pyqtSlot()
def copy_template(self):
current_template = self.combo_box.currentText()
if not current_template:
tu.message('No template selected!')
return None
dialog = InputBox(is_password=False, parent=self)
dialog.setText('New template', 'Template name:')
result = dialog.exec_()
if result:
text = dialog.getText()
if ' ' in text:
tu.message('There are not whitespaces allowed in the template name!')
elif text in self.templates:
tu.message('Template name already exists! Please choose another one!')
else:
try:
shutil.copytree(
os.path.join(self.settings_directory, current_template),
os.path.join(self.settings_directory, text)
)
except IOError as e:
print(e)
tu.message('Something is wrong! Template directory already exists!')
else:
self.templates.append(text)
self.combo_box.clear()
self.combo_box.addItems(self.templates)
self.combo_box.setCurrentText(text)
from .inputbox import InputBox