Project/AddFileDialog.py

changeset 0
de9c2efb9d02
child 12
1d8dd9706f46
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Project/AddFileDialog.py	Mon Dec 28 16:03:33 2009 +0000
@@ -0,0 +1,185 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2002 - 2009 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to add a file to the project.
+"""
+
+import os
+
+from PyQt4.QtCore import *
+from PyQt4.QtGui import *
+
+from E4Gui.E4Completers import E4DirCompleter
+
+from Ui_AddFileDialog import Ui_AddFileDialog
+
+import Utilities
+
+class AddFileDialog(QDialog, Ui_AddFileDialog):
+    """
+    Class implementing a dialog to add a file to the project.
+    """
+    def __init__(self, pro, parent = None, filter = None, name = None,
+                 startdir = None):
+        """
+        Constructor
+        
+        @param pro reference to the project object
+        @param parent parent widget of this dialog (QWidget)
+        @param filter filter specification for the file to add (string)
+        @param name name of this dialog (string)
+        @param startdir start directory for the selection dialog
+        """
+        QDialog.__init__(self, parent)
+        if name:
+            self.setObjectName(name)
+        self.setupUi(self)
+        
+        self.targetDirCompleter = E4DirCompleter(self.targetDirEdit)
+        
+        self.targetDirEdit.setText(pro.ppath)
+        self.filter = filter
+        self.ppath = pro.ppath
+        self.startdir = startdir
+        self.filetypes = pro.pdata["FILETYPES"] # save a reference to the filetypes dict
+        
+        if self.filter is not None and self.filter != 'source':
+            self.sourcecodeCheckBox.hide()
+        
+    @pyqtSlot()
+    def on_targetDirButton_clicked(self):
+        """
+        Private slot to display a directory selection dialog.
+        """
+        startdir = self.targetDirEdit.text()
+        if not startdir and self.startdir is not None:
+            startdir = self.startdir
+        directory = QFileDialog.getExistingDirectory(
+            self,
+            self.trUtf8("Select target directory"),
+            startdir,
+            QFileDialog.Options(QFileDialog.Option(0)))
+            
+        if directory:
+            self.targetDirEdit.setText(Utilities.toNativeSeparators(directory))
+        
+    @pyqtSlot()
+    def on_sourceFileButton_clicked(self):
+        """
+        Private slot to display a file selection dialog.
+        """
+        dir = self.sourceFileEdit.text().split(os.pathsep, 1)[0]
+        if not dir:
+            if self.startdir is not None:
+                dir = self.startdir
+            else:
+                dir = self.targetDirEdit.text()
+        if self.filter is None:
+            patterns = {
+                "SOURCES"      : [], 
+                "FORMS"        : [], 
+                "RESOURCES"    : [], 
+                "INTERFACES"   : [], 
+                "TRANSLATIONS" : [], 
+            }
+            for pattern, filetype in self.filetypes.items():
+                if filetype in patterns:
+                    patterns[filetype].append(pattern)
+            dfilter = self.trUtf8(
+                "Source Files ({0});;"
+                "Forms Files ({1});;"
+                "Resource Files ({2});;"
+                "Interface Files ({3});;"
+                "Translation Files ({4});;"
+                "All Files (*)").format(
+                    " ".join(patterns["SOURCES"]), 
+                    " ".join(patterns["FORMS"]), 
+                    " ".join(patterns["RESOURCES"]), 
+                    " ".join(patterns["INTERFACES"]), 
+                    " ".join(patterns["TRANSLATIONS"]))
+            caption = self.trUtf8("Select Files")
+        elif self.filter == 'form':
+            patterns = []
+            for pattern, filetype in self.filetypes.items():
+                if filetype == "FORMS":
+                    patterns.append(pattern)
+            dfilter = self.trUtf8("Forms Files ({0})")\
+                .format(" ".join(patterns))
+            caption = self.trUtf8("Select user-interface files")
+        elif self.filter == "resource":
+            patterns = []
+            for pattern, filetype in self.filetypes.items():
+                if filetype == "RESOURCES":
+                    patterns.append(pattern)
+            dfilter = self.trUtf8("Resource Files ({0})")\
+                .format(" ".join(patterns))
+            caption = self.trUtf8("Select resource files")
+        elif self.filter == 'source':
+            patterns = []
+            for pattern, filetype in self.filetypes.items():
+                if filetype == "SOURCES":
+                    patterns.append(pattern)
+            dfilter = self.trUtf8("Source Files ({0});;All Files (*)")\
+                .format(" ".join(patterns))
+            caption = self.trUtf8("Select source files")
+        elif self.filter == 'interface':
+            patterns = []
+            for pattern, filetype in self.filetypes.items():
+                if filetype == "INTERFACES":
+                    patterns.append(pattern)
+            dfilter = self.trUtf8("Interface Files ({0})")\
+                .format(" ".join(patterns))
+            caption = self.trUtf8("Select interface files")
+        elif self.filter == 'translation':
+            patterns = []
+            for pattern, filetype in self.filetypes.items():
+                if filetype == "TRANSLATIONS":
+                    patterns.append(pattern)
+            dfilter = self.trUtf8("Translation Files ({0})")\
+                .format(" ".join(patterns))
+            caption = self.trUtf8("Select translation files")
+        elif self.filter == 'others':
+            dfilter = self.trUtf8("All Files (*)")
+            caption = self.trUtf8("Select files")
+        else:
+            return
+        
+        fnames = QFileDialog.getOpenFileNames(self, caption, dir, dfilter)
+        
+        if len(fnames):
+            self.sourceFileEdit.setText(Utilities.toNativeSeparators(
+                os.pathsep.join(fnames)))
+        
+    @pyqtSlot(str)
+    def on_sourceFileEdit_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 line edit (string)
+        """
+        sfile = sfile.split(os.pathsep, 1)[0]
+        if sfile.startswith(self.ppath):
+            if os.path.isdir(sfile):
+                dir = sfile
+            else:
+                dir = os.path.dirname(sfile)
+            self.targetDirEdit.setText(dir)
+        
+    def getData(self):
+        """
+        Public slot to retrieve the dialogs data.
+        
+        @return tuple of three values (list of string, string, boolean) giving the 
+            source files, the target directory and a flag telling, whether
+            the files shall be added as source code
+        """
+        return (self.sourceFileEdit.text().split(os.pathsep), 
+            self.targetDirEdit.text(), self.sourcecodeCheckBox.isChecked())

eric ide

mercurial