def start_action(self): from confirm_dialog import ConfirmDialog if self.picture_edit.text(): self.encoding_thread.join() try: print("start") client = Client(self.ip_edit.text() + ":5000") self.rec.clean_val() try: client.request_frame( lambda frame: recognize(self.rec, frame)) except Exception as e: self.__print_console(str(e.args)) result = self.rec.get_result() self.__print_console(str(result[0])) confirm = ConfirmDialog(self, result[1]) accepted = confirm.exec_() if accepted: client.send_link(self.zoom_edit.text()) else: self.__print_console("Canceled") # need toplevel to get confirmation from user except Exception as e: for message in e.args: self.__print_console(str(message))
def save_clicked(self): print 'save clicked' if self.edited_resource: self.cd = ConfirmDialog("Are you sure you want to save this Resource") self.cd.accepted.connect(self.on_confirmed) self.cd.rejected.connect(self.on_rejected) self.cd.show() else: self.done(0)
class BundleWidget(QtGui.QWidget, Ui_BundleWidget): def __init__(self, bundle, *args, **kwargs): super(BundleWidget, self).__init__(*args, **kwargs) self.scroll_on = True self.bundle = bundle self.setupUi() self.bindUi() def set_vertical_scroll(self, on): self.scroll_on = on self.updateGeometry() def sizeHint(self): s = None if self.scroll_on: s = super(BundleWidget, self).sizeHint() else: s = QtCore.QSize( super(BundleWidget, self).sizeHint().width(), 50 + self.contents.sizeHint().height()) return s def setupUi(self): super(BundleWidget, self).setupUi(self) self.delete_confirmation = ConfirmDialog( "Are You sure you want to delete this operation?") self.delete_confirmation.accepted.connect(self.on_delete_accepted) self.delete_confirmation.rejected.connect(self.on_delete_rejected) def bindUi(self): self.contents.set_bundle(self.bundle) def on_delete_accepted(self): self.contents.remove_operation(self.op_to_delete) def on_delete_rejected(self): self.op_to_delete = None def delete_clicked(self): self.op_to_delete = self.sender() self.delete_confirmation.show() def get_dict(self): return self.contents.get_dict()
class BundleWidget(QtGui.QWidget, Ui_BundleWidget): def __init__(self, bundle, *args, **kwargs): super(BundleWidget, self).__init__(*args, **kwargs) self.scroll_on = True self.bundle= bundle self.setupUi() self.bindUi() def set_vertical_scroll(self, on): self.scroll_on = on self.updateGeometry() def sizeHint(self): s = None if self.scroll_on: s = super(BundleWidget,self).sizeHint() else: s = QtCore.QSize(super(BundleWidget,self).sizeHint().width(), 50+ self.contents.sizeHint().height()) return s def setupUi(self): super(BundleWidget, self).setupUi(self) self.delete_confirmation = ConfirmDialog("Are You sure you want to delete this operation?") self.delete_confirmation.accepted.connect(self.on_delete_accepted) self.delete_confirmation.rejected.connect(self.on_delete_rejected) def bindUi(self): self.contents.set_bundle(self.bundle) def on_delete_accepted(self): self.contents.remove_operation(self.op_to_delete) def on_delete_rejected(self): self.op_to_delete = None def delete_clicked(self): self.op_to_delete = self.sender() self.delete_confirmation.show() def get_dict(self): return self.contents.get_dict()
def okThanks(self): self.noteActivity("Bouton ok envoi appuyé") if self.t_w.sendEmail() and not re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", self.t_w.getEmail()): self.noteActivity("Mauvais format d'adresse e-mail : ok non-soumis, message d'erreur affiché") self.t_w.setErrorMessage("Mauvais format d'adresse e-mail") else: data = {'date': time.strftime("%d-%m-%y"), 'heure': time.strftime("%H:%M"), 'image' : self.img + '.jpg'} if self.t_w.sendSocial(): data['social media'] = "yes" else: data['social media'] = "no" if self.t_w.sendEmail(): data['email'] = self.t_w.getEmail() else: data['email'] = "no" with open(self.ldir + self.img + '.json', mode='w') as outfile: json.dump(data, outfile, indent=4) self.noteActivity("JSON sauvegardé") self.c_d = ConfirmDialog() self.c_d.okButton.clicked.connect(self.okConfirm) self.c_d.show()
class VariablesWindow(QtGui.QWidget, Ui_VariablesWindow): def __init__(self, *args, **kwargs): super(VariablesWindow, self).__init__(*args, **kwargs) self.parent = kwargs.has_key('parent') and kwargs['parent'] or None self.setupUi(self) self.lv_items.installEventFilter(self) self.details_parent = None def setMode(self, mode): if not mode in ['admin', 'moderator']: self.btn_add.hide() self.btn_delete.hide() def setModel(self, data_model): self.data_model = data_model self.lv_items.setModel(data_model) self.lv_items.doubleClicked.connect(self.__on_variable_edit) self.btn_add.clicked.connect(self.__on_add_clicked) self.btn_delete.clicked.connect(self.__on_remove_clicked) def setDetailsContainer(self, container): self.details_parent = container def eventFilter(self, sender, event): if event.type() == QtCore.QEvent.KeyPress and event.matches(QtGui.QKeySequence.InsertParagraphSeparator) and sender == self.lv_items: self.__on_variable_edit() elif event.type() == QtCore.QEvent.KeyPress and event.matches(QtGui.QKeySequence.Delete) and sender == self.lv_items: self.__on_remove_clicked() elif event.type() == QtCore.QEvent.KeyPress and event.matches(QtGui.QKeySequence.New) and sender == self.lv_items: self.__on_add_clicked() else: return super(VariablesWindow, self).eventFilter(sender, event) def __on_add_clicked(self): self.edit_index = None parent = self.details_parent or QtGui.QDialog() self.new_dlg = VariableDialog(parent) new_var =HalVar('', '') new_var.type = 'text' self.new_dlg.setModel(new_var) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_add_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) def __on_variable_edit(self): self.edit_index = self.lv_items.currentIndex() obj = self.data_model.data(self.edit_index, QtCore.Qt.EditRole) parent = self.details_parent or QtGui.QDialog() self.new_dlg = VariableDialog(parent) if not isinstance(parent, QtGui.QDialog): parent.children()[0].addWidget(self.new_dlg) self.new_dlg.setModel(obj) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_add_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) def __on_add_accepted(self): variable = self.new_dlg.model if self.edit_index==None: self.data_model.appendData(variable) else: self.data_model.setData(self.edit_index, variable) def __on_add_rejected(self): "print rejected" def __on_remove_clicked(self): self.dialog = ConfirmDialog("Are you sure you want to delete this item") self.dialog.accepted.connect(self.__on_remove_confirmed) self.dialog.rejected.connect(self.__on_remove_rejected) self.dialog.show() def __on_remove_confirmed(self): print "remove clicked" print "will remove selected resource when implemented" print "selected resource is "+str(self.lv_items.currentIndex().row()) self.data_model.removeData(self.lv_items.currentIndex().row()) def __on_remove_rejected(self): print "remove cancelled"
def frm_volver_pressed(self, event: QMouseEvent): dlg = ConfirmDialog(parent=self.frm_main) if dlg.exec_(): self.accept() else: self.reject()
def setupUi(self): super(BundleWidget, self).setupUi(self) self.delete_confirmation = ConfirmDialog("Are You sure you want to delete this operation?") self.delete_confirmation.accepted.connect(self.on_delete_accepted) self.delete_confirmation.rejected.connect(self.on_delete_rejected)
class BundleWidget(QtGui.QWidget, Ui_BundleWidget): def __init__(self, bundle, *args, **kwargs): super(BundleWidget, self).__init__(*args, **kwargs) self.bundle= bundle self.ops = [] self.setupUi() self.bindUi() def setupUi(self): super(BundleWidget, self).setupUi(self) self.delete_confirmation = ConfirmDialog("Are You sure you want to delete this operation?") self.delete_confirmation.accepted.connect(self.on_delete_accepted) self.delete_confirmation.rejected.connect(self.on_delete_rejected) self.btn_add_operation.clicked.connect(self.add_clicked) def bindUi(self): for op in self.bundle["Operations"]: self.add_operation(op) def add_clicked(self): b = self.op_chooser = OpChooserDialog() b.show() def on_code_chosen(): model = b.cmb.model() op = model.data(model.createIndex(b.cmb.currentIndex(), 0), role = QtCore.Qt.UserRole) print op b.deleteLater() self.add_operation(op.get_empty_dict()) b.cmb.currentIndexChanged.connect(on_code_chosen) b.show() def on_delete_accepted(self): l = [x for x in self.ops if x == self.op_to_delete ] if len(l)>0: print "removing" self.ops.remove(self.op_to_delete) self.op_to_delete.deleteLater() def remove_operation(self, op): self.ops.remove(op) op.deleteLater() def on_delete_rejected(self): self.op_to_delete = None def delete_clicked(self): self.op_to_delete = self.sender().parent().parent() self.delete_confirmation.show() def add_operation(self, op): op = OperationWidget(self, op, self) #op.btn_delete.clicked.connect(self.delete_clicked) self.ops.append(op) self.ltv_operations.addWidget(op) def get_dict(self): res = {} res["Name"] = self.bundle["Name"] ops = res["Operations"] = [] for op in self.ops: ops.append(op.get_dict()) return res
def __on_remove_clicked(self): self.dialog = ConfirmDialog( "Are you sure you want to delete this item") self.dialog.accepted.connect(self.__on_remove_confirmed) self.dialog.rejected.connect(self.__on_remove_rejected) self.dialog.show()
def __init__(self, app, list_manager, parent=None): super(MainWindow, self).__init__(parent) self.app = app # this must be defined before the setupUi is called # cause widgets in the interface need to reference it # in there __init__ methods self.listeners = [] self.list_manager = list_manager self.list_is_dirty = False self.setupUi(self) self.setWindowTitle("Assembly Document Tracker") QCoreApplication.setOrganizationName('Charles Cognato') QCoreApplication.setApplicationName('Assembly Doc Tracker') self.settings = QSettings() open_on_add = self.settings.value('open_on_add', 'false') if open_on_add == "true": self.actionOpen_on_Add.setChecked(True) else: self.actionOpen_on_Add.setChecked(False) # force at least one product to be on the list before documents can be added if self.listWidget.count() <= 0: self.listWidget_2.setEnabled(False) self.listWidget.setContextMenuPolicy(Qt.NoContextMenu) self.productContextActionRename = QAction(QIcon(":/filesaveas.png"), "rename", self) self.listWidget.addAction(self.productContextActionRename) self.connect(self.productContextActionRename, SIGNAL("triggered()"), self.on_assembly_context_action_rename_triggered) self.productContextActionDelete = QAction(QIcon(":/delete.png"), "delete", self) self.productContextActionDelete.setStatusTip(assembly_context_delete_status_tip) self.listWidget.addAction(self.productContextActionDelete) self.connect(self.productContextActionDelete, SIGNAL("triggered()"), self.on_assembly_context_action_delete_triggered) self.connect(self.listWidget, SIGNAL("itemClicked(QListWidgetItem*)"), self.on_list_widget_item_clicked) self.connect(self.listWidget, SIGNAL("currentItemChanged (QListWidgetItem*,QListWidgetItem*)"), self._update_gui) self.connect(self.listWidget, SIGNAL("pdfMoved"), self._transfer_docs) self.listWidget_2.setContextMenuPolicy(Qt.NoContextMenu) self.listWidget_2.addAction(self.action_Open) self.connect(self.action_Open, SIGNAL("triggered()"), self.open_pdf) self.documentContextActionDelete = QAction(QIcon(":/delete.png"), "delete", self) self.listWidget_2.addAction(self.documentContextActionDelete) self.connect(self.documentContextActionDelete, SIGNAL("triggered()"), self.on_document_context_action_delete_activated) self.connect(self.listWidget_2, SIGNAL("itemDoubleClicked (QListWidgetItem*)"), self.on_pdf_double_clicked) self.connect(self.listWidget_2, SIGNAL("pdfAdded"), self.pdf_added) self.connect(self.listWidget_2, SIGNAL("itemSelectionChanged()"), self.on_docs_selection_changed) self.connect(self.listWidget_2, SIGNAL("removeDocs"), self.on_list_widget2_removeDocs) self.connect(self.action_New, SIGNAL("triggered()"), self.on_pbAddAssembly_clicked) self.connect(self.action_Save, SIGNAL("triggered()"), self._save_assembly_data) self.connect(self.actionPreferences, SIGNAL("triggered()"), self.on_preferences_clicked) self.input_dialog = InputDialog(parent=self) self.confirm_dialog = ConfirmDialog(self) self.settings_dialog = SettingsDialog(self) self.usage_dialog = UsageDialog(self) self.show() self.__is_first_run() QTimer.singleShot(0, self._load_assembly_data)
class MainWindow(QMainWindow, Ui_MainWindow): docLabelTemplate = "Documents for {}:" docLabelTemplateEmpty = "Documents:" def __init__(self, app, list_manager, parent=None): super(MainWindow, self).__init__(parent) self.app = app # this must be defined before the setupUi is called # cause widgets in the interface need to reference it # in there __init__ methods self.listeners = [] self.list_manager = list_manager self.list_is_dirty = False self.setupUi(self) self.setWindowTitle("Assembly Document Tracker") QCoreApplication.setOrganizationName('Charles Cognato') QCoreApplication.setApplicationName('Assembly Doc Tracker') self.settings = QSettings() open_on_add = self.settings.value('open_on_add', 'false') if open_on_add == "true": self.actionOpen_on_Add.setChecked(True) else: self.actionOpen_on_Add.setChecked(False) # force at least one product to be on the list before documents can be added if self.listWidget.count() <= 0: self.listWidget_2.setEnabled(False) self.listWidget.setContextMenuPolicy(Qt.NoContextMenu) self.productContextActionRename = QAction(QIcon(":/filesaveas.png"), "rename", self) self.listWidget.addAction(self.productContextActionRename) self.connect(self.productContextActionRename, SIGNAL("triggered()"), self.on_assembly_context_action_rename_triggered) self.productContextActionDelete = QAction(QIcon(":/delete.png"), "delete", self) self.productContextActionDelete.setStatusTip(assembly_context_delete_status_tip) self.listWidget.addAction(self.productContextActionDelete) self.connect(self.productContextActionDelete, SIGNAL("triggered()"), self.on_assembly_context_action_delete_triggered) self.connect(self.listWidget, SIGNAL("itemClicked(QListWidgetItem*)"), self.on_list_widget_item_clicked) self.connect(self.listWidget, SIGNAL("currentItemChanged (QListWidgetItem*,QListWidgetItem*)"), self._update_gui) self.connect(self.listWidget, SIGNAL("pdfMoved"), self._transfer_docs) self.listWidget_2.setContextMenuPolicy(Qt.NoContextMenu) self.listWidget_2.addAction(self.action_Open) self.connect(self.action_Open, SIGNAL("triggered()"), self.open_pdf) self.documentContextActionDelete = QAction(QIcon(":/delete.png"), "delete", self) self.listWidget_2.addAction(self.documentContextActionDelete) self.connect(self.documentContextActionDelete, SIGNAL("triggered()"), self.on_document_context_action_delete_activated) self.connect(self.listWidget_2, SIGNAL("itemDoubleClicked (QListWidgetItem*)"), self.on_pdf_double_clicked) self.connect(self.listWidget_2, SIGNAL("pdfAdded"), self.pdf_added) self.connect(self.listWidget_2, SIGNAL("itemSelectionChanged()"), self.on_docs_selection_changed) self.connect(self.listWidget_2, SIGNAL("removeDocs"), self.on_list_widget2_removeDocs) self.connect(self.action_New, SIGNAL("triggered()"), self.on_pbAddAssembly_clicked) self.connect(self.action_Save, SIGNAL("triggered()"), self._save_assembly_data) self.connect(self.actionPreferences, SIGNAL("triggered()"), self.on_preferences_clicked) self.input_dialog = InputDialog(parent=self) self.confirm_dialog = ConfirmDialog(self) self.settings_dialog = SettingsDialog(self) self.usage_dialog = UsageDialog(self) self.show() self.__is_first_run() QTimer.singleShot(0, self._load_assembly_data) # Fixed: bug-0004 def closeEvent(self, QCloseEvent): if self.list_is_dirty: print('saving data...') self._save_assembly_data() self.settings.setValue('open_on_add', self.actionOpen_on_Add.isChecked()) QCloseEvent.accept() def __is_first_run(self): first_run = self.settings.value('first_run', None) if first_run is None: print('first run of the program...') QMessageBox.warning(self, "PDF Viewer", "You need to select a PDF viewer before opening documents.") result = self.settings_dialog.exec_() if result == QDialog.Accepted: self.settings.setValue('first_run', 'complete') @pyqtSignature("") def on_actionUsage_triggered(self): self.usage_dialog.exec_() def on_list_widget2_removeDocs(self, docs): doc_list = self._current_doc_list() """:type doc_list : dict """ for doc in docs: del doc_list[doc] self._update_gui() # Fixed: bug-0001 def on_pbAddAssembly_clicked(self): assembly_text = self._get_input("Enter an assembly part number:") if assembly_text in self.list_manager: QMessageBox.warning(self, "- Warning -", "That assembly is already on the list.") elif assembly_text: self.list_manager[assembly_text] = {} self._add_new_assembly(assembly_text, self.listWidget) # self._update_gui() QTimer.singleShot(0, self._update_gui) self.list_is_dirty = True def on_document_context_action_delete_activated(self): if len(self.listWidget_2.selectedItems()): doc_list = self._current_doc_list() for item in self.listWidget_2.selectedItems(): row = self.listWidget_2.row(item) self.listWidget_2.takeItem(row) del doc_list[item.text()] self._update_gui() self.list_is_dirty = True def on_docs_selection_changed(self): if len(self.listWidget_2.selectedItems()): self.listWidget_2.setContextMenuPolicy(Qt.ActionsContextMenu) else: self.listWidget_2.setContextMenuPolicy(Qt.NoContextMenu) # Fixed: bug-0002 def on_list_widget_item_clicked(self, list_item): self._update_gui() def on_assembly_context_action_delete_triggered(self): if not self._ok_to_continue(): return if self.listWidget.count(): self.remove_assembly() self.list_is_dirty = True # fixed : bug-0005 def on_assembly_context_action_rename_triggered(self): new_assembly = self._get_input("Enter an assembly part number:") if new_assembly: current_assembly, doc_list = self._current_assembly_info() del self.list_manager[current_assembly.text()] self.listWidget.takeItem(self.listWidget.currentRow()) self.list_manager[new_assembly] = doc_list list_item = QListWidgetItem(QIcon(':/assembly.png'), new_assembly, self.listWidget) self.listWidget.setCurrentItem(list_item) self._update_gui() self.list_is_dirty = True def on_pdf_double_clicked(self, *args, **kwargs): print("openng '{}'".format(args[0].get_full_name())) viewer = self.settings.value('viewer/viewer') if viewer: util.open_pdf((args[0].get_full_name(),), viewer) else: QMessageBox.warning(self, '- Warning -', 'PDF Viewer not defined.') def on_preferences_clicked(self): self.settings_dialog.exec_() def open_pdf(self): selected_pdf_list_items = self.listWidget_2.selectedItems() if len(selected_pdf_list_items): pdf_files = [pdf.get_full_name() for pdf in selected_pdf_list_items] util.open_pdf(tuple(pdf_files), self.settings.value('viewer/viewer')) def pdf_added(self, pdf): assembly, doc_list = self._current_assembly_info() short_name = pdf.split('/')[-1] if short_name in doc_list.keys(): return doc_list[short_name] = {'path': pdf, 'short_name': short_name} self._update_gui() # should we open it automatically as well? if self.actionOpen_on_Add.isChecked(): util.open_pdf((pdf,), self.settings.value('viewer/viewer')) self.list_is_dirty = True def remove_assembly(self): assembly, doc_list = self._current_assembly_info() if assembly is not None: # get rid of the assembly del self.list_manager[assembly.text()] self.listWidget.takeItem(self.listWidget.currentRow()) self.listWidget_2.clear() self._update_gui() self.list_is_dirty = True def _add_new_assembly(self, assembly_text, list_widget, make_current=True): list_widget_item = QListWidgetItem(QIcon(':/assembly.png'), assembly_text, list_widget) # list_widget.addItem(list_widget_item) if make_current: list_widget.setCurrentItem(list_widget_item) def _current_assembly(self): return self.listWidget.currentItem() def _current_assembly_info(self): assembly = self._current_assembly() doc_list = self._current_doc_list() return assembly, doc_list def _current_doc_list(self): assembly = self._current_assembly() if assembly is not None: doc_list = self.list_manager[assembly.text()] return doc_list else: return None def _get_input(self, prompt): self.input_dialog.setPrompt(prompt) self.input_dialog.lineEdit.setFocus() self.input_dialog.lineEdit.selectAll() result = self.input_dialog.exec_() if result == QDialog.Accepted: return self.input_dialog.getText() else: return "" def _load_assembly_data(self): path = os.path.join(data_base_path, assembly_data_file) if os.path.isfile(path): with open(path, 'rb') as in_f: self.list_manager = pickle.load(in_f) self._populate_assembly_list(self.list_manager) def _ok_to_continue(self): result = self.confirm_dialog.exec_() if result == QDialog.Rejected: return False else: return True def _populate_assembly_list(self, assemblies): if len(assemblies): for assembly in assemblies.keys(): self._add_new_assembly(assembly, self.listWidget, False) assembly = self.listWidget.item(0) self.listWidget.setCurrentItem(assembly) def _populate_document_list(self, doc_obj_list, assembly): self.listWidget_2.clear() for key in doc_obj_list.keys(): list_item = DocListWidgetItem(QIcon(":/pdf.png"), doc_obj_list[key]['short_name'], doc_obj_list[key]['path'], self.listWidget_2) def _save_assembly_data(self): path = os.path.join(data_base_path, assembly_data_file) with open(path, 'wb') as out_f: pickle.dump(self.list_manager, out_f) def _transfer_docs(self, target_assembly, data): """ transfer documents from one assembly to another :param target_assembly: the assembly to transfer the documents to :param data: a QByteArray containing the documents in the format "file_name:path" :return: returns nothing """ print("moving docs to '{}'...".format(target_assembly)) doc_list = self.list_manager[target_assembly] stream = QDataStream(data, QIODevice.ReadOnly) doc = stream.readQString() while doc != "": file_name, path = doc.split(":") doc_list[file_name] = {'path': path, 'short_name': file_name} doc = stream.readQString() self.list_is_dirty = True def _update_gui(self): if self.listWidget.count(): self.listWidget.setContextMenuPolicy(Qt.ActionsContextMenu) if len(self.listWidget_2.selectedItems()): self.listWidget_2.setContextMenuPolicy(Qt.ActionsContextMenu) self.listWidget_2.setEnabled(True) assembly, doc_list = self._current_assembly_info() if assembly is not None: self._populate_document_list(doc_list, assembly.text()) self.label_2.setText(MainWindow.docLabelTemplate.format(assembly.text())) self.statusbar.showMessage("Doc Count = {}".format(self.listWidget_2.count())) else: self.listWidget.setContextMenuPolicy(Qt.NoContextMenu) self.listWidget_2.setContextMenuPolicy(Qt.NoContextMenu) self.listWidget_2.setEnabled(False) self.label_2.setText(MainWindow.docLabelTemplateEmpty) self.statusbar.clearMessage()
class Process(QObject): def __init__(self, ldir, rdir, welcomeVid, waitVid, mdir, withCam): QObject.__init__(self) self.logger = logging.getLogger(__name__) self.ldir = ldir self.rdir = rdir self.withCam = withCam self.waitVid = mdir + waitVid if withCam: self.cam = Camera(ldir, mdir) self.w_w = WelcomeWindow(mdir + welcomeVid) self.running = False self.waiting = True self.minutes = 0 self.t_w = None self.d_w = None self.v_w = None self.c_d = None self.num = 0 self.img = "20200501_132612" self.sftp = Sftp(mdir, withCam) def reinit(self): self.t_w = None self.c_d = None self.d_w = None self.num = 0 def start(self): self.noteActivity("Processus central démarré") self.w_w.takeButton.clicked.connect(self.takePicture) self.w_w.showFullScreen() self.w_w.player.play() self.noteActivity("Ecran de bienvenue affiché") QTimer.singleShot(1000, self.check) def takePicture(self): self.w_w.player.pause() self.noteActivity("Bouton 'Prendre une photo' appuyé") self.picture() def picture(self): if self.withCam: self.img = self.cam.takePicture() self.noteActivity("Photo prise") self.num = self.num + 1 self.d_w = DisplayWindow(self.num, self.img, self.ldir) self.d_w.redoButton.clicked.connect(self.redoPicture) self.d_w.okButton.clicked.connect(self.okPicture) self.d_w.cancelButton.clicked.connect(self.cancelPicture) self.d_w.showFullScreen() self.noteActivity("Ecran d'affichage affiché") def redoPicture(self): self.noteActivity("Nouvelle photo demandée") self.d_w.close() self.d_w = None self.picture() def cancelPicture(self): self.noteActivity("Processus de photo annulé") self.d_w.close() self.reinit() self.w_w.player.play() def okPicture(self): self.noteActivity("Photo acceptée") self.num = 0 self.d_w.close() self.d_w = None self.t_w = ThanksWindow() self.t_w.okButton.clicked.connect(self.okThanks) self.t_w.cancelButton.clicked.connect(self.cancelThanks) self.t_w.emailYesButton.clicked.connect(self.yesEmail) self.t_w.emailNoButton.clicked.connect(self.noEmail) self.t_w.socialYesButton.clicked.connect(self.yesSocial) self.t_w.socialNoButton.clicked.connect(self.noSocial) self.t_w.showFullScreen() self.noteActivity("Ecran d'envoi affiché") def okThanks(self): self.noteActivity("Bouton ok envoi appuyé") if self.t_w.sendEmail() and not re.match(r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)", self.t_w.getEmail()): self.noteActivity("Mauvais format d'adresse e-mail : ok non-soumis, message d'erreur affiché") self.t_w.setErrorMessage("Mauvais format d'adresse e-mail") else: data = {'date': time.strftime("%d-%m-%y"), 'heure': time.strftime("%H:%M"), 'image' : self.img + '.jpg'} if self.t_w.sendSocial(): data['social media'] = "yes" else: data['social media'] = "no" if self.t_w.sendEmail(): data['email'] = self.t_w.getEmail() else: data['email'] = "no" with open(self.ldir + self.img + '.json', mode='w') as outfile: json.dump(data, outfile, indent=4) self.noteActivity("JSON sauvegardé") self.c_d = ConfirmDialog() self.c_d.okButton.clicked.connect(self.okConfirm) self.c_d.show() def okConfirm(self): self.t_w.close() self.c_d.close() self.reinit() self.w_w.player.play() self.noteActivity("Processus réinitialisé") def cancelThanks(self): self.noteActivity("Processus de photo annulé") self.t_w.close() self.reinit() self.w_w.player.play() def yesEmail(self): self.noteActivity("Demande d'envoi par e-mail") self.t_w.adressLabel.setVisible(True) self.t_w.adressEdit.setVisible(True) def noEmail(self): self.noteActivity("Refus d'envoi par e-mail") self.t_w.adressLabel.setVisible(False) self.t_w.adressEdit.setVisible(False) def yesSocial(self): self.noteActivity("Demande de mise sur les réseaux sociaux") self.sendSocial = True def noSocial(self): self.noteActivity("Refus de mise sur les réseaux sociaux") self.sendSocial = False def noteActivity(self, message): self.logger.info(message) self.running = True def check(self): print(self.minutes) if not self.running: if self.minutes < 5: self.minutes += 1 QTimer.singleShot(2000, self.check) else: self.noteActivity("Mise en veille") self.minutes = 0 self.v_w = WaitWidget(self.waitVid) self.v_w.pressedSignal.connect(self.pressed) self.v_w.showFullScreen() self.w_w.player.stop() self.reinit() QTimer.singleShot(1000, self.download) self.v_w.player.play() self.waiting = True else: self.minutes = 0 self.running = False QTimer.singleShot(2000, self.check) def pressed(self): self.noteActivity("Réveil") self.v_w.player.stop() self.waiting = False self.v_w.close() self.w_w.player.play() QTimer.singleShot(1000, self.check) def download(self): if self.sftp.connect(): for f in os.listdir(self.ldir): if os.path.isfile(os.path.join(self.ldir, f)): if f.endswith(".jpg"): name = f.split(".")[0] if os.path.exists(os.path.join(self.ldir, name + ".json")): self.noteActivity("Envoi de " + name) if self.sftp.put(f, self.ldir, self.rdir): if self.sftp.put(name + ".json", self.ldir, self.rdir): os.remove(os.path.join(self.ldir, f)) os.remove(os.path.join(self.ldir, name + ".json")) else: self.noteActivity("Suppression de l'image sans json : " + name) os.remove(os.path.join(self.ldir, f)) if not self.waiting: self.sftp.close() break
def setupUi(self): super(BundleWidget, self).setupUi(self) self.delete_confirmation = ConfirmDialog( "Are You sure you want to delete this operation?") self.delete_confirmation.accepted.connect(self.on_delete_accepted) self.delete_confirmation.rejected.connect(self.on_delete_rejected)
class ResourceDialog(QtGui.QWidget, Ui_ResourceDialog): accepted = QtCore.Signal() rejected = QtCore.Signal() def __init__(self, root_dir, *args, **kwargs): super(ResourceDialog, self).__init__(*args, **kwargs) self.edited_resource = None self.model = None self.setupUi() self.bindUi() self.root_dir = root_dir self.model = { "rid":None, "url":None } def show(self): if self.parent(): self.parent().children()[0].addWidget(self) super(ResourceDialog, self).show() def setupUi(self): super(ResourceDialog, self).setupUi(self) def setModel(self, model): self.model = model self.txtName.setText(self.model["rid"]) self.display_resource() def display_resource(self): self.scene = QtGui.QGraphicsScene() self.gvView.setScene(self.scene) resource_path = None if self.edited_resource: resource_path = self.edited_resource["url"] else: if self.model["url"]: resource_path = os.path.join(self.root_dir, self.model["url"]) if resource_path: item = QtGui.QGraphicsPixmapItem(QtGui.QPixmap(resource_path)) self.scene.addItem(item) def export_resource(self): flt = None ext = '' resource_path = os.path.join(self.root_dir, self.model["url"]) if self.model.has_key('extension') and self.model['extension']: flt = self.model['extension'] ext = self.model['extension'] fd, s = QtGui.QFileDialog.getSaveFileName(self, "Where to export the resource", self.model['rid']+ext, flt) # @UnusedVariable if fd: shutil.copy(resource_path, fd) msgBox = QtGui.QMessageBox() msgBox.setText("Resource succesfully exported") msgBox.setInformativeText("Resource %s is successfuly exported"%self.model['rid']) msgBox.exec_() def bindUi(self): self.txtName.textEdited.connect(self.ridEdited) self.btnChange.clicked.connect(self.change_clicked) self.btnSave.clicked.connect(self.save_clicked) self.btnCancel.clicked.connect(self.cancel_clicked) self.btnExport.clicked.connect(self.export_resource) def save_clicked(self): print 'save clicked' if self.edited_resource: self.cd = ConfirmDialog("Are you sure you want to save this Resource") self.cd.accepted.connect(self.on_confirmed) self.cd.rejected.connect(self.on_rejected) self.cd.show() else: self.done(0) def on_confirmed(self): if self.edited_resource and self.edited_resource["url"] and self.edited_resource["url"][0]!='.': dest=None if self.model["url"]: dest = self.model["url"] else: dest = './Resources/'+''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(15)) #@UnusedVariable if not os.path.exists(os.path.dirname(os.path.join(self.root_dir, dest))): os.makedirs(os.path.dirname(os.path.join(self.root_dir, dest))) shutil.copy(self.edited_resource["url"], os.path.join(self.root_dir, dest)) self.edited_resource["url"]=dest self.done(1) def on_rejected(self): pass def cancel_clicked(self): print 'edit canceled' self.done(0) def done(self, value): if value: self.accepted.emit() else: self.rejected.emit() self.close() def change_clicked(self): self.fo_di = QtGui.QFileDialog() self.fo_di.fileSelected.connect(self.file_selected) self.fo_di.show() def ridEdited(self, text): if not self.edited_resource: self.edited_resource = self.model.copy() self.edited_resource["rid"] = text def file_selected(self, f): if not self.edited_resource: self.edited_resource = self.model.copy() self.edited_resource["url"] = f self.display_resource() print "file_accepted" def get_dict(self): if self.edited_resource: return self.edited_resource
def __on_remove_clicked(self): self.dialog = ConfirmDialog("Are you sure you want to delete this item") self.dialog.accepted.connect(self.__on_remove_confirmed) self.dialog.rejected.connect(self.__on_remove_rejected) self.dialog.show()
class VariablesWindow(QtGui.QWidget, Ui_VariablesWindow): def __init__(self, *args, **kwargs): super(VariablesWindow, self).__init__(*args, **kwargs) self.parent = kwargs.has_key('parent') and kwargs['parent'] or None self.setupUi(self) self.lv_items.installEventFilter(self) self.details_parent = None def setMode(self, mode): if not mode in ['admin', 'moderator']: self.btn_add.hide() self.btn_delete.hide() def setModel(self, data_model): self.data_model = data_model self.lv_items.setModel(data_model) self.lv_items.doubleClicked.connect(self.__on_variable_edit) self.btn_add.clicked.connect(self.__on_add_clicked) self.btn_delete.clicked.connect(self.__on_remove_clicked) def setDetailsContainer(self, container): self.details_parent = container def eventFilter(self, sender, event): if event.type() == QtCore.QEvent.KeyPress and event.matches( QtGui.QKeySequence.InsertParagraphSeparator ) and sender == self.lv_items: self.__on_variable_edit() elif event.type() == QtCore.QEvent.KeyPress and event.matches( QtGui.QKeySequence.Delete) and sender == self.lv_items: self.__on_remove_clicked() elif event.type() == QtCore.QEvent.KeyPress and event.matches( QtGui.QKeySequence.New) and sender == self.lv_items: self.__on_add_clicked() else: return super(VariablesWindow, self).eventFilter(sender, event) def __on_add_clicked(self): self.edit_index = None parent = self.details_parent or QtGui.QDialog() self.new_dlg = VariableDialog(parent) new_var = HalVar('', '') new_var.type = 'text' self.new_dlg.setModel(new_var) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_add_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) def __on_variable_edit(self): self.edit_index = self.lv_items.currentIndex() obj = self.data_model.data(self.edit_index, QtCore.Qt.EditRole) parent = self.details_parent or QtGui.QDialog() self.new_dlg = VariableDialog(parent) if not isinstance(parent, QtGui.QDialog): parent.children()[0].addWidget(self.new_dlg) self.new_dlg.setModel(obj) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_add_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) def __on_add_accepted(self): variable = self.new_dlg.model if self.edit_index == None: self.data_model.appendData(variable) else: self.data_model.setData(self.edit_index, variable) def __on_add_rejected(self): "print rejected" def __on_remove_clicked(self): self.dialog = ConfirmDialog( "Are you sure you want to delete this item") self.dialog.accepted.connect(self.__on_remove_confirmed) self.dialog.rejected.connect(self.__on_remove_rejected) self.dialog.show() def __on_remove_confirmed(self): print "remove clicked" print "will remove selected resource when implemented" print "selected resource is " + str(self.lv_items.currentIndex().row()) self.data_model.removeData(self.lv_items.currentIndex().row()) def __on_remove_rejected(self): print "remove cancelled"
class ResourcesWindow(QtGui.QWidget, Ui_ResourcesWindow): def __init__(self, root_dir, *args, **kwargs): super(ResourcesWindow, self).__init__(*args, **kwargs) self.setupUi(self) self.show() self.root_dir = root_dir self.details_parent = None def setDetailsContainer(self, container): self.details_parent = container def setModel(self, model): self.data_model = model self.lv_resources.setModel(self.data_model) self.lv_resources.set_resource_root(self.root_dir) self.lv_resources.doubleClicked.connect(self.__on_resource_edit) self.lv_resources.installEventFilter(self) #self.lv_resources.key self.btn_add.clicked.connect(self.on_add_clicked) self.btn_delete.clicked.connect(self.on_remove_clicked) def eventFilter(self, sender, event): if event.type() == QtCore.QEvent.KeyPress and \ event.matches(QtGui.QKeySequence.InsertParagraphSeparator) and \ sender == self.lv_resources: self.__on_resource_edit() else: return super(ResourcesWindow, self).eventFilter(sender, event) def __on_resource_edit(self): self.edit_index = self.lv_resources.currentIndex() self.new_dlg = ResourceDialog(self.root_dir, self.details_parent) obj = self.data_model.data(self.edit_index, QtCore.Qt.EditRole) self.new_dlg.setModel(obj) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_change_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) def on_add_clicked(self): self.edit_index = None self.new_dlg = ResourceDialog(self.root_dir, self.details_parent) self.new_dlg.show() self.new_dlg.accepted.connect(self.__on_add_accepted) self.new_dlg.rejected.connect(self.__on_add_rejected) #seld.data_model pass def __on_add_accepted(self): new_res = self.new_dlg.get_dict() if new_res: self.data_model.appendData(new_res) def __on_change_accepted(self): new_res = self.new_dlg.get_dict() if new_res: self.data_model.setData(self.lv_resources.currentIndex(), new_res) def __on_add_rejected(self): print "add rejected" def on_remove_clicked(self): self.dialog = ConfirmDialog("Are you sure you want to delete this item") self.dialog.accepted.connect(self.on_remove_confirmed) self.dialog.rejected.connect(self.on_remove_rejected) self.dialog.show() def on_remove_confirmed(self): print "remove clicked" #print "will remove selected resource when implemented" print "selected resource is "+str(self.lv_resources.currentIndex().row()) self.data_model.removeData(self.lv_resources.currentIndex().row()) def on_remove_rejected(self): print "remove cancelled"