# Class for settings editing UI import os import pydoc import shutil import sys import time from configparser import ConfigParser from datetime import datetime from os import path import Metashape from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import * from PySide2.QtGui import * from PySide2.QtWidgets import * import AutoFTG.autoftg_main as autoftg_main from AutoFTG.qtresources_rc2 import * selected_camera = None class Ui_DialogAddEditCam(QtWidgets.QDialog): def __init__(self, parent, camnew, camname): global camOrigName camOrigName = camname QtWidgets.QDialog.__init__(self, parent) self.setObjectName(u"DialogAddEditCam") appIcon = QIcon() appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off) self.setWindowIcon(appIcon) self.resize(480, 270) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth()) self.setSizePolicy(sizePolicy) self.setMinimumSize(QSize(480, 270)) self.setMaximumSize(QSize(480, 270)) font = QFont() font.setFamily(u"Segoe UI") font.setPointSize(10) self.setFont(font) self.setWindowTitle(u"Add/Edit Camera") appIcon = QIcon() appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off) self.setWindowIcon(appIcon) self.gridLayoutWidget = QWidget(self) self.gridLayoutWidget.setObjectName(u"gridLayoutWidget") self.gridLayoutWidget.setGeometry(QRect(10, 10, 461, 251)) self.gridLayout = QGridLayout(self.gridLayoutWidget) self.gridLayout.setSpacing(5) self.gridLayout.setContentsMargins(10, 10, 10, 10) self.gridLayout.setObjectName(u"gridLayout") self.gridLayout.setContentsMargins(0, 0, 0, 0) self.comboBox_2 = QComboBox(self.gridLayoutWidget) icon1 = QIcon() icon1.addFile(u":/icons/icons8-camera-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon1, u"Standard") icon2 = QIcon() icon2.addFile(u":/icons/icons8-slr-small-lens-96.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon2, u"DSLR") icon3 = QIcon() icon3.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon3, u"Special") icon4 = QIcon() icon4.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon4, u"Drone") icon5 = QIcon() icon5.addFile(u":/icons/icons8-touchscreen-96.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon5, u"SmartPhone") icon6 = QIcon() icon6.addFile(u":/icons/icons8-gopro-96.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox_2.addItem(icon6, u"SportCam") self.comboBox_2.setObjectName(u"comboBox_2") self.comboBox_2.setFont(font) self.comboBox_2.setIconSize(QSize(24, 24)) self.gridLayout.addWidget(self.comboBox_2, 3, 1, 1, 1) self.lineEdit_2 = QLineEdit(self.gridLayoutWidget) self.lineEdit_2.setObjectName(u"lineEdit_2") self.lineEdit_2.setFont(font) self.lineEdit_2.setPlaceholderText(u"Camera name") self.gridLayout.addWidget(self.lineEdit_2, 0, 1, 1, 1) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setSpacing(5) self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.lineEdit_3 = QLineEdit(self.gridLayoutWidget) self.lineEdit_3.setObjectName(u"lineEdit_3") sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.lineEdit_3.sizePolicy().hasHeightForWidth()) self.lineEdit_3.setSizePolicy(sizePolicy1) self.lineEdit_3.setMinimumSize(QSize(0, 28)) self.lineEdit_3.setMaximumSize(QSize(16777215, 28)) font1 = QFont() font1.setFamily(u"Segoe UI") font1.setPointSize(8) self.lineEdit_3.setFont(font1) self.lineEdit_3.setPlaceholderText(u"Choose calibration XML file...") self.horizontalLayout_2.addWidget(self.lineEdit_3) self.pushButton_3 = QPushButton(self.gridLayoutWidget) self.pushButton_3.setObjectName(u"pushButton_3") sizePolicy2 = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum) sizePolicy2.setHorizontalStretch(0) sizePolicy2.setVerticalStretch(0) sizePolicy2.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth()) self.pushButton_3.setSizePolicy(sizePolicy2) self.pushButton_3.setFont(font1) self.pushButton_3.setToolTip(u"Choose XML calibration file...") self.pushButton_3.setText(u"Browse") icon7 = QIcon() icon7.addFile(u":/icons/icons8-images-folder-50.png", QSize(), QIcon.Normal, QIcon.Off) self.pushButton_3.setIcon(icon7) self.pushButton_3.setIconSize(QSize(24, 24)) self.horizontalLayout_2.addWidget(self.pushButton_3) self.gridLayout.addLayout(self.horizontalLayout_2, 5, 1, 1, 1) self.label_3 = QLabel(self.gridLayoutWidget) self.label_3.setObjectName(u"label_3") sizePolicy3 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) sizePolicy3.setHorizontalStretch(0) sizePolicy3.setVerticalStretch(0) sizePolicy3.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth()) self.label_3.setSizePolicy(sizePolicy3) font2 = QFont() font2.setFamily(u"Segoe UI") font2.setPointSize(10) font2.setBold(True) font2.setWeight(75) self.label_3.setFont(font2) self.label_3.setText(u"Camera Name") self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1) self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setSpacing(5) self.horizontalLayout.setObjectName(u"horizontalLayout") self.pushButton = QPushButton(self.gridLayoutWidget) self.pushButton.setObjectName(u"pushButton") sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) self.pushButton.setSizePolicy(sizePolicy) self.pushButton.setMinimumSize(QSize(0, 0)) self.pushButton.setMaximumSize(QSize(90, 30)) self.pushButton.setText(u"Cancel") icon8 = QIcon() icon8.addFile(u":/icons/icons8-close-50.png", QSize(), QIcon.Normal, QIcon.Off) self.pushButton.setIcon(icon8) self.pushButton.setIconSize(QSize(20, 20)) self.horizontalLayout.addWidget(self.pushButton) self.pushButton_2 = QPushButton(self.gridLayoutWidget) self.pushButton_2.setObjectName(u"pushButton_2") sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) self.pushButton_2.setSizePolicy(sizePolicy) self.pushButton_2.setMinimumSize(QSize(0, 0)) self.pushButton_2.setMaximumSize(QSize(90, 30)) self.pushButton_2.setText(u"Save") icon9 = QIcon() icon9.addFile(u":/icons/icons8-save-all-50.png", QSize(), QIcon.Normal, QIcon.Off) self.pushButton_2.setIcon(icon9) self.pushButton_2.setIconSize(QSize(20, 20)) self.horizontalLayout.addWidget(self.pushButton_2) self.gridLayout.addLayout(self.horizontalLayout, 7, 0, 1, 2) self.label = QLabel(self.gridLayoutWidget) self.label.setObjectName(u"label") sizePolicy3.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) self.label.setSizePolicy(sizePolicy3) self.label.setFont(font) self.label.setText(u"Type") self.gridLayout.addWidget(self.label, 2, 0, 1, 1) self.label_4 = QLabel(self.gridLayoutWidget) self.label_4.setObjectName(u"label_4") sizePolicy3.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth()) self.label_4.setSizePolicy(sizePolicy3) font3 = QFont() font3.setFamily(u"Segoe UI") font3.setPointSize(9) self.label_4.setFont(font3) self.label_4.setText(u"Resolution") self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1) self.label_7 = QLabel(self.gridLayoutWidget) self.label_7.setObjectName(u"label_7") self.label_7.setFont(font3) self.label_7.setText(u"Description") self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1) self.line = QFrame(self.gridLayoutWidget) self.line.setObjectName(u"line") self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.gridLayout.addWidget(self.line, 6, 0, 1, 2) self.comboBox = QComboBox(self.gridLayoutWidget) icon10 = QIcon() icon10.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox.addItem(icon10, u"Frame") icon11 = QIcon() icon11.addFile(u":/icons/icons8-video-wall-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox.addItem(icon11, u"Fisheye") icon12 = QIcon() icon12.addFile(u":/icons/icons8-live-photos-96.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox.addItem(icon12, u"Spherical") icon13 = QIcon() icon13.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox.addItem(icon13, u"Cylindical") icon14 = QIcon() icon14.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off) self.comboBox.addItem(icon14, u"RPC") self.comboBox.setObjectName(u"comboBox") self.comboBox.setFont(font) self.comboBox.setIconSize(QSize(24, 24)) self.gridLayout.addWidget(self.comboBox, 2, 1, 1, 1) self.label_5 = QLabel(self.gridLayoutWidget) self.label_5.setObjectName(u"label_5") sizePolicy3.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth()) self.label_5.setSizePolicy(sizePolicy3) self.label_5.setText(u"Callibration") self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1) self.label_2 = QLabel(self.gridLayoutWidget) self.label_2.setObjectName(u"label_2") sizePolicy3.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) self.label_2.setSizePolicy(sizePolicy3) self.label_2.setFont(font3) self.label_2.setText(u"Sub-Type") self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1) self.horizontalLayout_3 = QHBoxLayout() self.horizontalLayout_3.setSpacing(5) self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.lineEdit = QLineEdit(self.gridLayoutWidget) self.lineEdit.setObjectName(u"lineEdit") self.lineEdit.setMaximumSize(QSize(50, 16777215)) self.lineEdit.setFont(font) self.lineEdit.setText(u"0") self.horizontalLayout_3.addWidget(self.lineEdit) self.label_6 = QLabel(self.gridLayoutWidget) self.label_6.setObjectName(u"label_6") self.label_6.setText(u"MP") self.horizontalLayout_3.addWidget(self.label_6) self.gridLayout.addLayout(self.horizontalLayout_3, 4, 1, 1, 1) self.lineEdit_4 = QLineEdit(self.gridLayoutWidget) self.lineEdit_4.setObjectName(u"lineEdit_4") self.lineEdit_4.setFont(font) self.lineEdit_4.setPlaceholderText(u"Description of camera (optional)") self.gridLayout.addWidget(self.lineEdit_4, 1, 1, 1, 1) QWidget.setTabOrder(self.lineEdit_2, self.lineEdit_4) QWidget.setTabOrder(self.lineEdit_4, self.comboBox) QWidget.setTabOrder(self.comboBox, self.comboBox_2) QWidget.setTabOrder(self.comboBox_2, self.lineEdit) QWidget.setTabOrder(self.lineEdit, self.lineEdit_3) QWidget.setTabOrder(self.lineEdit_3, self.pushButton_3) QWidget.setTabOrder(self.pushButton_3, self.pushButton_2) QWidget.setTabOrder(self.pushButton_2, self.pushButton) if camnew == True: autoftg_main.cameraXmlSource = '' autoftg_main.cameraXmlDest = '' self.setWindowTitle(u"Add New Camera") self.pushButton_2.setText(u"Add Camera") else: selCamType = autoftg_main.camCfg.get(camname, "Description") selCamType = autoftg_main.camCfg.get(camname, "Type") selCamSubType = autoftg_main.camCfg.get(camname, "SubType") selCamRes = autoftg_main.camCfg.get(camname, "Resolution") selCamFile = autoftg_main.camCfg.get(camname, "File") autoftg_main.cameraXmlSource = selCamFile autoftg_main.cameraXmlDest = selCamFile self.lineEdit_2.setText(camname) self.comboBox.setCurrentText(selCamType) self.comboBox_2.setCurrentText(selCamSubType) self.lineEdit.setText(selCamRes) self.lineEdit_3.setText(selCamFile) self.setWindowTitle(u"Edit Camera") self.pushButton_2.setText(u"Save Changes") QtCore.QObject.connect(self.pushButton_3, QtCore.SIGNAL("clicked()"), self.selectCameraFile) QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), self.saveCamera) QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()")) self.exec() def selectCameraFile(self): autoftg_main.cameraXmlSource = Metashape.app.getOpenFileName(hint="Select Camera Calibration", dir=str(autoftg_main.selected_data_folder), filter="Metashape Camera Calibration (*.xml)") camXmlFile = os.path.basename(autoftg_main.cameraXmlSource) autoftg_main.cameraXmlDest = autoftg_main.camCfgPath + camXmlFile self.lineEdit_3.setText(camXmlFile) def saveCamera(self): cameraNameAdd = self.lineEdit_2.text() camDesc = self.lineEdit_4.text() cameraTypeAdd = self.comboBox.currentText() cameraSubTypeAdd = self.comboBox_2.currentText() cameraResAdd = self.lineEdit.text() cameraFileAdd = self.lineEdit_3.text() if cameraNameAdd == "" or cameraNameAdd == None: Metashape.app.messageBox("Error! No camera name entered...") else: if self.lineEdit_3.text() != "" or self.lineEdit_3.text() != None: self.copyXml() else: cameraFileAdd = "None" autoftg_main.saveCamConfig(camOrigName, cameraNameAdd, camDesc, cameraTypeAdd, cameraSubTypeAdd, cameraResAdd, cameraFileAdd) autoftg_main.camCfgLoad() autoftg_main.cameraXmlSource = '' autoftg_main.cameraXmlDest = '' self.close() def copyXml(self): if autoftg_main.cameraXmlSource != autoftg_main.cameraXmlDest: cameraXmlDestExists = os.path.isfile(autoftg_main.cameraXmlDest) if cameraXmlDestExists == False: try: shutil.copy2(autoftg_main.cameraXmlSource, autoftg_main.cameraXmlDest) except: Metashape.app.messageBox("Error! Could not copy calibration file...") else: try: os.remove(autoftg_main.cameraXmlDest) except: Metashape.app.messageBox("Error! Failed to remove old calibration file...") try: shutil.copy2(autoftg_main.cameraXmlSource, autoftg_main.cameraXmlDest) except: Metashape.app.messageBox("Error! Failed to copy calibration file...") def closeCameraDialog(self): autoftg_main.camCfgLoad() self.close() class Ui_dialogCamGui(QtWidgets.QDialog): def __init__(self, parent): QtWidgets.QDialog.__init__(self, parent) self.setObjectName(u"dialogCamGui") self.resize(350, 300) self.setWindowTitle(u"Cameras Editor") appIcon = QIcon() appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off) self.setWindowIcon(appIcon) layoutMain = QtWidgets.QVBoxLayout() # creating layout menuico00 = QIcon() menuico00.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico1 = QIcon() menuico1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico2 = QIcon() menuico2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico3 = QIcon() menuico3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico4 = QIcon() menuico4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off) menuico5 = QIcon() menuico5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico6 = QIcon() menuico6.addFile(u":/icons/icons8-add-camera-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico7 = QIcon() menuico7.addFile(u":/icons/icons8-design-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico8 = QIcon() menuico8.addFile(u":/icons/icons8-no-camera-96.png", QSize(), QIcon.Normal, QIcon.Off) menuico9 = QIcon() menuico9.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off) icoTripod = QIcon() icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off) font1 = QFont() font1.setPointSize(10) self.verticalLayoutWidget_2 = QWidget() self.verticalLayoutWidget_2.setObjectName(u"verticalLayoutWidget_2") self.verticalLayoutWidget_2.setGeometry(QRect(10, 10, 331, 211)) self.vLayout_Main = QVBoxLayout(self.verticalLayoutWidget_2) self.vLayout_Main.setObjectName(u"vLayout_Main") self.vLayout_Main.setContentsMargins(0, 0, 0, 0) self.hLayoutCamEdit = QHBoxLayout() self.hLayoutCamEdit.setObjectName(u"hLayoutCamEdit") self.listWidgetCam = QListWidget(self.verticalLayoutWidget_2) self.listWidgetCam.setObjectName(u"listWidgetCam") self.listWidgetCam.setFont(font1) self.listWidgetCam.setFrameShape(QFrame.StyledPanel) self.listWidgetCam.setFrameShadow(QFrame.Plain) self.listWidgetCam.setDefaultDropAction(Qt.IgnoreAction) self.listWidgetCam.setIconSize(QSize(20, 20)) for camera in autoftg_main.cam_list: lcam_type = str(autoftg_main.camCfg.get(camera, 'Type')) lcam_stype = str(autoftg_main.camCfg.get(camera, "SubType")) lcam_res = str(autoftg_main.camCfg.get(camera, 'Resolution')) lcam_desc = str(autoftg_main.camCfg.get(camera, 'Description')) self.listWidgetCamItem = QListWidgetItem(camera, self.listWidgetCam) self.listWidgetCamItem.setText(str(camera)) #

Processing error!

if lcam_stype == "Drone": self.listWidgetCamItem.setIcon(menuico5) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_stype == "SmartPhone": self.listWidgetCamItem.setIcon(menuico4) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_stype == "Special": self.listWidgetCamItem.setIcon(icoTripod) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Fisheye": self.listWidgetCamItem.setIcon(menuico1) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Cylindrical": self.listWidgetCamItem.setIcon(menuico2) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Spherical": self.listWidgetCamItem.setIcon(menuico3) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "RPC": self.listWidgetCamItem.setIcon(menuico9) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) else: self.listWidgetCamItem.setIcon(menuico00) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) self.hLayoutCamEdit.addWidget(self.listWidgetCam) self.vLayout_CamBtn = QVBoxLayout() self.vLayout_CamBtn.setObjectName(u"vLayout_CamBtn") sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) self.btnRemoveCam = QPushButton(self.verticalLayoutWidget_2) self.btnRemoveCam.setObjectName(u"btnRemoveCam") sizePolicy.setHeightForWidth(self.btnRemoveCam.sizePolicy().hasHeightForWidth()) self.btnRemoveCam.setSizePolicy(sizePolicy) self.btnRemoveCam.setText(u" Remove") self.btnRemoveCam.setIcon(menuico8) self.btnRemoveCam.setIconSize(QSize(24, 24)) self.vLayout_CamBtn.addWidget(self.btnRemoveCam) self.btnEditCam = QPushButton(self.verticalLayoutWidget_2) self.btnEditCam.setObjectName(u"btnEditCam") sizePolicy.setHeightForWidth(self.btnEditCam.sizePolicy().hasHeightForWidth()) self.btnEditCam.setSizePolicy(sizePolicy) self.btnEditCam.setText(u" Edit") self.btnEditCam.setIcon(menuico7) self.btnEditCam.setIconSize(QSize(24, 24)) self.vLayout_CamBtn.addWidget(self.btnEditCam) self.btnAddNewCam = QPushButton(self.verticalLayoutWidget_2) self.btnAddNewCam.setObjectName(u"btnAddNewCam") sizePolicy.setHeightForWidth(self.btnAddNewCam.sizePolicy().hasHeightForWidth()) self.btnAddNewCam.setSizePolicy(sizePolicy) self.btnAddNewCam.setText(u" Add") self.btnAddNewCam.setIcon(menuico6) self.btnAddNewCam.setIconSize(QSize(24, 24)) self.vLayout_CamBtn.addWidget(self.btnAddNewCam) self.hLayoutCamEdit.addLayout(self.vLayout_CamBtn) layoutMain.addLayout(self.hLayoutCamEdit) self.hLayout_MainBtn = QHBoxLayout() self.hLayout_MainBtn.setObjectName(u"hLayout_MainBtn") self.btnMainClose = QPushButton(self.verticalLayoutWidget_2) self.btnMainClose.setObjectName(u"btnMainClose") sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth(self.btnMainClose.sizePolicy().hasHeightForWidth()) self.btnMainClose.setSizePolicy(sizePolicy1) self.btnMainClose.setText(u"Close") self.hLayout_MainBtn.addWidget(self.btnMainClose) layoutMain.addLayout(self.hLayout_MainBtn) self.setLayout(layoutMain) QtCore.QObject.connect(self.btnAddNewCam, QtCore.SIGNAL("clicked()"), self.addNewCam) QtCore.QObject.connect(self.btnEditCam, QtCore.SIGNAL("clicked()"), self.editSelCamera) QtCore.QObject.connect(self.btnRemoveCam, QtCore.SIGNAL("clicked()"), self.removeSelCamera) QtCore.QObject.connect(self.btnMainClose, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()")) self.exec() def refreshCamList(self): self.listWidgetCam.clear() menuico00 = QIcon() menuico00.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico1 = QIcon() menuico1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico2 = QIcon() menuico2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico3 = QIcon() menuico3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico4 = QIcon() menuico4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off) menuico5 = QIcon() menuico5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico6 = QIcon() menuico6.addFile(u":/icons/icons8-add-camera-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico7 = QIcon() menuico7.addFile(u":/icons/icons8-design-50.png", QSize(), QIcon.Normal, QIcon.Off) menuico8 = QIcon() menuico8.addFile(u":/icons/icons8-no-camera-96.png", QSize(), QIcon.Normal, QIcon.Off) menuico9 = QIcon() menuico9.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off) icoTripod = QIcon() icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off) for camera in autoftg_main.cam_list: lcam_type = str(autoftg_main.camCfg.get(camera, 'Type')) lcam_stype = str(autoftg_main.camCfg.get(camera, "SubType")) lcam_res = str(autoftg_main.camCfg.get(camera, 'Resolution')) lcam_desc = str(autoftg_main.camCfg.get(camera, 'Description')) self.listWidgetCamItem = QListWidgetItem(camera, self.listWidgetCam) self.listWidgetCamItem.setText(str(camera)) #

Processing error!

if lcam_stype == "Drone": self.listWidgetCamItem.setIcon(menuico5) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_stype == "SmartPhone": self.listWidgetCamItem.setIcon(menuico4) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_stype == "Special": self.listWidgetCamItem.setIcon(icoTripod) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Fisheye": self.listWidgetCamItem.setIcon(menuico1) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Cylindrical": self.listWidgetCamItem.setIcon(menuico2) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "Spherical": self.listWidgetCamItem.setIcon(menuico3) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) elif lcam_type == "RPC": self.listWidgetCamItem.setIcon(menuico9) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) else: self.listWidgetCamItem.setIcon(menuico00) self.listWidgetCamItem.setToolTip("

Type: " + lcam_type + "
SubType: " + lcam_stype + "
Res.: " + lcam_res + "MP" + "
Desc.: " + lcam_desc) def addNewCam(self): autoftg_main.addCameraDialog(camnew=True, camname="") self.refreshCamList() def editSelCamera(self): # defaultItem = self.listWidgetCam.isItemSelected("Default") if self.listWidgetCam.currentRow() > 1: selCamName = self.listWidgetCam.currentItem().text() autoftg_main.addCameraDialog(camnew=False, camname=selCamName) self.refreshCamList() elif self.listWidgetCam.currentRow() <= 1: Metashape.app.messageBox("Default cameras can not be edited.") else: Metashape.app.messageBox("No camera selected...") def removeSelCamera(self): if self.listWidgetCam.currentRow() > 1: del_cam = self.listWidgetCam.currentItem().text() remove_confirm = Metashape.app.getBool("Remove selected camera?\n\nSelected: " + del_cam) if remove_confirm == True: autoftg_main.removeCamConfig(del_cam) self.refreshCamList() elif self.listWidgetCam.currentRow() <= 1: Metashape.app.messageBox("Default cameras can not be removed.") else: Metashape.app.messageBox("No camera selected...") class Ui_dialogChooseCamera(QtWidgets.QDialog): def __init__(self, parent): QtWidgets.QDialog.__init__(self, parent) self.setObjectName(u"dialogChooseCamera") self.resize(320, 300) self.setWindowTitle(u"Choose Camera") appIcon = QIcon() appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off) self.setWindowIcon(appIcon) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) self.setSizePolicy(sizePolicy) self.setMinimumSize(QSize(320, 300)) self.setMaximumSize(QSize(320, 300)) self.setWindowTitle(u"Choose Camera") self.verticalLayoutWidget = QWidget(self) self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget") self.verticalLayoutWidget.setGeometry(QRect(10, 10, 301, 281)) self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setSpacing(5) self.verticalLayout.setContentsMargins(10, 10, 10, 10) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setSizeConstraint(QLayout.SetDefaultConstraint) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.label = QLabel(self.verticalLayoutWidget) self.label.setObjectName(u"label") font = QFont() font.setPointSize(11) self.label.setFont(font) self.label.setText(u"Select Camera") self.verticalLayout.addWidget(self.label) self.listWidget = QListWidget(self.verticalLayoutWidget) icon = QIcon() icon.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off) icon1 = QIcon() icon1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off) icon2 = QIcon() icon2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off) icon3 = QIcon() icon3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off) icon4 = QIcon() icon4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off) icon5 = QIcon() icon5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off) icon5a = QIcon() icon5a.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off) icoTripod = QIcon() icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off) font1 = QFont() font1.setPointSize(10) for cam in autoftg_main.cam_list: icon_type = autoftg_main.camCfg.get(cam, "Type") icon_subtype = autoftg_main.camCfg.get(cam, "SubType") self.listwidget = QListWidgetItem(self.listWidget) self.listwidget.setText(cam) if icon_subtype == "SmartPhone": self.listwidget.setIcon(icon4) elif icon_subtype == "Drone": self.listwidget.setIcon(icon5) elif icon_subtype == "Special": self.listwidget.setIcon(icoTripod) else: if icon_type == "Fisheye": self.listwidget.setIcon(icon1) elif icon_type == "Spherical": self.listwidget.setIcon(icon3) elif icon_type == "Cylindrical": self.listwidget.setIcon(icon2) elif icon_type == "RPC": self.listwidget.setIcon(icon5a) else: self.listwidget.setIcon(icon) self.listWidget.setObjectName(u"listWidget") self.listWidget.setFont(font1) self.listWidget.setFrameShape(QFrame.StyledPanel) self.listWidget.setFrameShadow(QFrame.Plain) self.listWidget.setDefaultDropAction(Qt.IgnoreAction) self.listWidget.setIconSize(QSize(20, 20)) self.verticalLayout.addWidget(self.listWidget) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setSpacing(5) self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.pushButton_2 = QPushButton(self.verticalLayoutWidget) self.pushButton_2.setObjectName(u"pushButton_2") icon5 = QIcon() icon5.addFile(u":/icons/icons8-close-50.png", QSize(), QIcon.Normal, QIcon.Off) self.pushButton_2.setIcon(icon5) self.pushButton_2.setText(u"Cancel") self.horizontalLayout_2.addWidget(self.pushButton_2) self.pushButton = QPushButton(self.verticalLayoutWidget) self.pushButton.setObjectName(u"pushButton") icon6 = QIcon() icon6.addFile(u":/icons/icons8-done-50.png", QSize(), QIcon.Normal, QIcon.Off) self.pushButton.setIcon(icon6) self.pushButton.setText(u"Ok") self.horizontalLayout_2.addWidget(self.pushButton) self.verticalLayout.addLayout(self.horizontalLayout_2) self.listWidget.setCurrentRow(autoftg_main.cam_list.index(autoftg_main.selected_camera)) self.listWidget.setSortingEnabled(False) QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.selectCam) QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()")) self.exec() def selectCam(self): autoftg_main.selected_camera = self.listWidget.currentItem().text() self.close()