def on_copy(self):
        self.ds_model.sort(DSManagerModel.COLUMN_GROUP_DS)

        select_data_sources_dialog = QDialog(self)
        select_data_sources_dialog.resize(400, 400)
        select_data_sources_dialog.setWindowTitle(
            self.tr("Choose source service"))
        layout = QVBoxLayout(select_data_sources_dialog)
        select_data_sources_dialog.setLayout(layout)

        list_view = QTreeView(self)
        layout.addWidget(list_view)
        list_view.setModel(self.ds_model)
        #list_view.expandAll()
        list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True)
        list_view.setAlternatingRowColors(True)

        if hasattr(list_view.header(), "setResizeMode"):
            # Qt4
            list_view.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS,
                                             QHeaderView.ResizeToContents)
        else:
            # Qt5
            list_view.header().setSectionResizeMode(
                DSManagerModel.COLUMN_GROUP_DS, QHeaderView.ResizeToContents)

        list_view.clicked.connect(
            lambda index: select_data_sources_dialog.accept() \
                if not self.ds_model.isGroup(index) and \
                    index.column() == DSManagerModel.COLUMN_GROUP_DS \
                else None
        )

        if select_data_sources_dialog.exec_() == QDialog.Accepted:
            data_source = self.ds_model.data(list_view.currentIndex(),
                                             Qt.UserRole)
            data_source.id += "_copy"
            edit_dialog = DsEditDialog()
            edit_dialog.setWindowTitle(self.tr('Create service from existing'))
            edit_dialog.fill_ds_info(data_source)
            if edit_dialog.exec_() == QDialog.Accepted:
                self.feel_list()
                self.ds_model.resetModel()
    def on_copy(self):
        self.ds_model.sort(DSManagerModel.COLUMN_GROUP_DS)

        select_data_sources_dialog = QDialog(self)
        select_data_sources_dialog.resize(400, 400)
        select_data_sources_dialog.setWindowTitle(self.tr("Choose source service"))
        layout = QVBoxLayout(select_data_sources_dialog)
        select_data_sources_dialog.setLayout(layout)

        list_view = QTreeView(self)
        layout.addWidget(list_view)
        list_view.setModel(self.ds_model)
        #list_view.expandAll()
        list_view.setColumnHidden(DSManagerModel.COLUMN_VISIBILITY, True)
        list_view.setAlternatingRowColors(True)
        
        if hasattr(list_view.header(), "setResizeMode"):
            # Qt4
            list_view.header().setResizeMode(DSManagerModel.COLUMN_GROUP_DS, QHeaderView.ResizeToContents)
        else:
            # Qt5
            list_view.header().setSectionResizeMode(DSManagerModel.COLUMN_GROUP_DS, QHeaderView.ResizeToContents)

        list_view.clicked.connect(
            lambda index: select_data_sources_dialog.accept() \
                if not self.ds_model.isGroup(index) and \
                    index.column() == DSManagerModel.COLUMN_GROUP_DS \
                else None
        )

        if select_data_sources_dialog.exec_() == QDialog.Accepted:
            data_source = self.ds_model.data(list_view.currentIndex(), Qt.UserRole)
            data_source.id += "_copy"
            edit_dialog = DsEditDialog()
            edit_dialog.setWindowTitle(self.tr('Create service from existing'))
            edit_dialog.fill_ds_info(data_source)
            if edit_dialog.exec_() == QDialog.Accepted:
                self.feel_list()
                self.ds_model.resetModel()
Exemple #3
0
class QvDocumentacio(QDialog):
    comencaCarrega = pyqtSignal()
    acabaCarrega = pyqtSignal()
    '''Diàleg que mostra la documentació de la carpeta de documentació definida a configuracioQvista
    Mostra una TreeView amb els documents, i delega en el sistema la tasca d'obrir-los'''
    def __init__(self, parent: QWidget = None):
        super().__init__(parent)
        self.setMinimumSize(750, 500)
        #Layout principal. Tot aquí
        self.layout = QVBoxLayout(self)
        #Layout de la capçalera
        self.layoutCapcalera = QHBoxLayout()
        self.lblTitol = QLabel('  Documentació')
        self.layoutCapcalera.addWidget(self.lblTitol)

        self.qModel = ElMeuModel(self)
        self.lblExplicacio = QLabel()
        if os.path.isdir(carpetaDocuments):
            self.lblExplicacio.setText(
                'Esteu visualitzant la documentació corporativa completa')
            rootPath = self.qModel.setRootPath(carpetaDocuments)
        else:
            self.lblExplicacio.setText(
                'No teniu accés a la documentació corporativa. Esteu visualitzant una còpia local que pot no estar actualitzada.'
            )
            rootPath = self.qModel.setRootPath(carpetaDocumentsLocal)
        self.treeView = QTreeView(self)
        self.treeView.setModel(self.qModel)
        self.treeView.setRootIndex(rootPath)
        self.treeView.clicked.connect(self.clicat)
        self.treeView.doubleClicked.connect(self.obrir)

        self.layoutBotonera = QHBoxLayout()
        self.layoutBotonera.addStretch()
        self.botoObrir = QvPushButton('Obrir', destacat=True)
        self.botoObrir.setEnabled(False)
        self.botoObrir.clicked.connect(self.obrir)
        self.layoutBotonera.addWidget(self.botoObrir)
        self.botoDescarregar = QvPushButton('Descarregar')
        self.botoDescarregar.setEnabled(False)
        self.botoDescarregar.clicked.connect(self.desar)
        self.layoutBotonera.addWidget(self.botoDescarregar)
        self.botoSortir = QvPushButton('Sortir')
        self.botoSortir.clicked.connect(self.close)
        self.layoutBotonera.addWidget(self.botoSortir)

        self.layout.addLayout(self.layoutCapcalera)
        self.layout.addWidget(self.lblExplicacio)
        self.layout.addWidget(self.treeView)
        self.layout.addLayout(self.layoutBotonera)
        self.formata()

    def formata(self):
        self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint)

        self.layout.setAlignment(Qt.AlignCenter)

        self.lblTitol.setStyleSheet(
            'background-color: %s; color: %s; border: 0px' %
            (QvConstants.COLORFOSCHTML, QvConstants.COLORBLANCHTML))
        self.lblTitol.setFont(QvConstants.FONTCAPCALERES)
        self.lblTitol.setFixedHeight(40)

        self.lblExplicacio.setWordWrap(True)
        self.lblExplicacio.setStyleSheet(
            f'color: {QvConstants.COLORFOSCHTML}; margin: 20px 20px 0px 20px')

        for i in range(1, 4):
            self.treeView.header().hideSection(i)
        self.treeView.setHeaderHidden(True)
        self.treeView.adjustSize()
        self.treeView.setAnimated(True)
        self.treeView.setStyleSheet(
            'QTreeView{margin: 20px 2px 0px 20px; border: none;}')

        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)
        self.layoutBotonera.setContentsMargins(10, 10, 10, 10)

    def clicat(self, index: int):
        path = self.qModel.fileInfo(index).absoluteFilePath()
        self.index = index
        if os.path.isfile(path):
            self.botoObrir.setEnabled(True)
            self.botoDescarregar.setEnabled(True)
        else:
            self.botoObrir.setEnabled(False)
            self.botoDescarregar.setEnabled(True)

    def obrir(self):
        path = self.qModel.fileInfo(self.index).absoluteFilePath()
        if os.path.isfile(path):
            self.comencaCarrega.emit()
            if '.html' in path:
                self.visor = QvVisorHTML(path, 'Vídeo de documentació')
                self.visor.setZoomFactor(1)
                self.visor.show()
            else:
                os.startfile(path)
            time.sleep(1)
            self.acabaCarrega.emit()

    def desar(self):
        path = self.qModel.fileInfo(self.index).absoluteFilePath()
        if os.path.isfile(path):
            nfile, _ = QFileDialog.getSaveFileName(
                None, 'Desar arxiu',
                os.path.join(QvMemoria().getDirectoriDesar(),
                             Path(path).name))
            if nfile != '': shutil.copy(path, nfile)
        else:
            nomCarpeta = Path(path).name
            nfile = str(
                QFileDialog.getExistingDirectory(self, "Select Directory"))
            if nfile != '':
                shutil.copytree(path, os.path.join(nfile, nomCarpeta))

    def mousePressEvent(self, event):
        self.oldPos = event.globalPos()

    def mouseMoveEvent(self, event):
        delta = QPoint(event.globalPos() - self.oldPos)
        self.move(self.x() + delta.x(), self.y() + delta.y())
        self.oldPos = event.globalPos()

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Escape:
            self.close()
        if event.key() == Qt.Key_Return:
            self.obrir()