Пример #1
0
    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))
Пример #2
0
 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)
Пример #3
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()
Пример #4
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()
Пример #5
0
 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()
Пример #6
0
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"
Пример #7
0
 def frm_volver_pressed(self, event: QMouseEvent):
     dlg = ConfirmDialog(parent=self.frm_main)
     if dlg.exec_():
         self.accept()
     else:
         self.reject()
Пример #8
0
 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)
Пример #9
0
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
    
Пример #10
0
 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()
Пример #11
0
    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)
Пример #12
0
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()
Пример #13
0
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
Пример #14
0
 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)
Пример #15
0
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
Пример #16
0
 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()
Пример #17
0
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"
Пример #18
0
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"