Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.py

Thu, 27 Feb 2014 19:48:55 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 27 Feb 2014 19:48:55 +0100
changeset 3310
a2032ed66aec
child 3366
6084bb3c3911
permissions
-rw-r--r--

Started implementing the Mercurial lfconvert functionality.

# -*- coding: utf-8 -*-

"""
Module implementing a dialog to enter the data for the repo conversion.
"""

import os

from PyQt4.QtCore import pyqtSlot
from PyQt4.QtGui import QDialog, QDialogButtonBox

from E5Gui import E5FileDialog
from E5Gui.E5Completers import E5DirCompleter

from .Ui_LfConvertDataDialog import Ui_LfConvertDataDialog

from . import getDefaults

import Utilities
import UI.PixmapCache


class LfConvertDataDialog(QDialog, Ui_LfConvertDataDialog):
    """
    Class implementing a dialog to enter the data for the repo conversion.
    """
    def __init__(self, currentPath, mode, parent=None):
        """
        Constructor
        
        @param currentPath directory name of the current project (string)
        @param mode dialog mode (string, one of 'largefiles' or 'normal')
        @param parent reference to the parent widget (QWidget)
        """
        super().__init__(parent)
        self.setupUi(self)
        
        self.newProjectButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        
        self.__newProjectCompleter = E5DirCompleter(self.newProjectEdit)
        
        self.__defaults = getDefaults()
        self.__currentPath = Utilities.toNativeSeparators(currentPath)
        
        self.currentProjectLabel.setPath(currentPath)
        self.newProjectEdit.setText(os.path.dirname(currentPath))
        
        self.lfFileSizeSpinBox.setValue(self.__defaults["minsize"])
        self.lfFilePatternsEdit.setText(" ".join(self.__defaults["pattern"]))
        
        if mode == 'normal':
            self.lfFileSizeSpinBox.setEnabled(False)
            self.lfFilePatternsEdit.setEnabled(False)
        
        self.resize(self.width(), self.minimumSizeHint().height())
    
    @pyqtSlot(str)
    def on_newProjectEdit_textChanged(self, txt):
        """
        Private slot to handle editing of the new project directory.
        
        @param txt new project directory name (string)
        """
        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
            txt and Utilities.toNativeSeparators(txt) != os.path.dirname(
                self.__currentPath))
    
    @pyqtSlot()
    def on_newProjectButton_clicked(self):
        """
        Private slot to select the new project directory name via a directory
        selection dialog.
        """
        directory = Utilities.fromNativeSeparators(self.newProjectEdit.text())
        directory = E5FileDialog.getExistingDirectory(
            self,
            self.tr("New Project Directory"),
            directory,
            E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
        if directory:
            self.newProjectEdit.setText(
                Utilities.toNativeSeparators(directory))
    
    def getData(self):
        """
        Public method to retrieve the entered data.
        
        @return tuple containing the new project directory name (string),
            minimum file size (integer) and file patterns (list of string)
        """
        patterns = self.lfFilePatternsEdit.text().split()
        if set(patterns) == set(self.__defaults["pattern"]):
            patterns = []
        
        return (
            Utilities.toNativeSeparators(self.newProjectEdit.text()),
            self.lfFileSizeSpinBox.value(),
            patterns,
        )

eric ide

mercurial