Fri, 23 Feb 2024 16:52:01 +0100
Adapted the project 'Add Files' and 'Add Directory' functions to work with remote projects.
# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a dialog to add a file to the project. """ import os from PyQt6.QtCore import pyqtSlot from PyQt6.QtWidgets import QDialog, QDialogButtonBox from eric7.EricWidgets.EricApplication import ericApp from eric7.EricWidgets.EricPathPicker import EricPathPickerModes from eric7.SystemUtilities import FileSystemUtilities from .Ui_AddFileDialog import Ui_AddFileDialog class AddFileDialog(QDialog, Ui_AddFileDialog): """ Class implementing a dialog to add a file to the project. """ def __init__(self, pro, parent=None, fileTypeFilter=None, name=None, startdir=None): """ Constructor @param pro reference to the project object @type Project @param parent parent widget of this dialog @type QWidget @param fileTypeFilter filter specification for the file to add @type str @param name name of this dialog @type str @param startdir start directory for the selection dialog @type str """ super().__init__(parent) if name: self.setObjectName(name) self.setupUi(self) self.__remoteMode = ( bool(startdir) and FileSystemUtilities.isRemoteFileName(startdir) ) or FileSystemUtilities.isRemoteFileName(pro.getProjectPath()) self.sourceFilesPicker.setMode(EricPathPickerModes.OPEN_FILES_MODE) self.sourceFilesPicker.setRemote(self.__remoteMode) self.targetDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) self.targetDirPicker.setDefaultDirectory(startdir) self.targetDirPicker.setRemote(self.__remoteMode) if startdir: self.targetDirPicker.setText(startdir) else: self.targetDirPicker.setText(pro.getProjectPath()) self.fileTypeFilter = fileTypeFilter self.__project = pro self.startdir = startdir if self.fileTypeFilter is not None: self.sourcecodeCheckBox.hide() self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False) msh = self.minimumSizeHint() self.resize(max(self.width(), msh.width()), msh.height()) @pyqtSlot() def on_sourceFilesPicker_aboutToShowPathPickerDialog(self): """ Private slot to perform actions before the source files selection dialog is shown. """ targetPath = self.targetDirPicker.text() if not targetPath: targetPath = self.startdir self.sourceFilesPicker.setDefaultDirectory(targetPath) caption = ( self.tr("Select Files") if self.__remoteMode else self.tr("Select Remote Files") ) if self.fileTypeFilter is None: dfilter = self.__project.getFileCategoryFilterString(withAll=True) elif ( self.fileTypeFilter != "OTHERS" and self.fileTypeFilter in self.__project.getFileCategories() ): dfilter = self.__project.getFileCategoryFilterString( [self.fileTypeFilter], withAll=False ) elif self.fileTypeFilter == "OTHERS": dfilter = self.tr("All Files (*)") else: dfilter = "" caption = "" self.sourceFilesPicker.setWindowTitle(caption) self.sourceFilesPicker.setFilters(dfilter) @pyqtSlot(str) def on_sourceFilesPicker_textChanged(self, sfile): """ Private slot to handle the source file text changed. If the entered source directory is a subdirectory of the current projects main directory, the target directory path is synchronized. It is assumed, that the user wants to add a bunch of files to the project in place. @param sfile the text of the source file picker @type str """ sfile = self.sourceFilesPicker.firstStrPath() if sfile.startswith(self.__project.getProjectPath()): if self.__remoteMode: fsInterface = ( ericApp().getObject("EricServer").getServiceInterface("FileSystem") ) directory = ( sfile if fsInterface.isdir(sfile) else fsInterface.dirname(sfile) ) else: directory = ( sfile if os.path.isdir(sfile) else os.path.dirname(sfile) ) self.targetDirPicker.setText(directory) self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(bool(sfile)) def getData(self): """ Public slot to retrieve the dialogs data. @return tuple containing the source files, the target directory and a flag telling, whether the files shall be added as source code @rtype tuple of (list of string, string, boolean) """ return ( self.sourceFilesPicker.strPaths(), self.targetDirPicker.text(), self.sourcecodeCheckBox.isChecked(), )