Exemple #1
0
 def __init__(self, **kwargs):
     super(FileManager, self).__init__(**kwargs)
     
     self.last_directory = get_home_dir()
     self.fileWatcher = QtCore.QFileSystemWatcher()
     self.fileWatcher.fileChanged.connect(self.on_fileWatcher_fileChanged)
     self.fileWatcher.directoryChanged.connect(self.on_fileWatcher_directoryChanged)
     self.connectGenericSignal()
Exemple #2
0
    def __init__(self, application):
        QtCore.QObject.__init__(self)

        self.last_directory = get_home_dir()
        self.fileWatcher = QtCore.QFileSystemWatcher()
        self.fileWatcher.fileChanged.connect(self.on_fileChanged)
        self.fileWatcher.directoryChanged.connect(self.on_directoryChanged)
        self.connectGenericSignal()
Exemple #3
0
    def __init__(self, application):
        QtCore.QObject.__init__(self)

        self.last_directory = get_home_dir()
        self.fileWatcher = QtCore.QFileSystemWatcher()
        self.fileWatcher.fileChanged.connect(self.on_fileChanged)
        self.fileWatcher.directoryChanged.connect(self.on_directoryChanged)
        self.connectGenericSignal()
Exemple #4
0
def get_conf_path(filename=None):
    """Return absolute path for configuration file with specified filename"""
    # TODO: Hacerlo para el profile
    from prymatex.utils.misc import get_home_dir
    conf_dir = os.path.join(get_home_dir(), PRYMATEX_HOME_NAME)
    if not os.path.isdir(conf_dir):
        os.mkdir(conf_dir)
    if filename is None:
        return conf_dir
    else:
        return os.path.join(conf_dir, filename)
Exemple #5
0
def get_conf_path(filename=None):
    """Return absolute path for configuration file with specified filename"""
    # TODO: Hacerlo para el profile
    from prymatex.utils.misc import get_home_dir
    conf_dir = os.path.join(get_home_dir(), PRYMATEX_HOME_NAME)
    if not os.path.isdir(conf_dir):
        os.mkdir(conf_dir)
    if filename is None:
        return conf_dir
    else:
        return os.path.join(conf_dir, filename)
Exemple #6
0
Application configuration based on Qt's QSettings module.
"""
import sys, os, plistlib
from prymatex.utils.misc import get_home_dir

#==============================================================================
# Debug helpers
#==============================================================================
STDOUT = sys.stdout
STDERR = sys.stderr
DEBUG = True

#==============================================================================
# Configuration paths
#==============================================================================
USER_HOME_PATH = get_home_dir()
PRYMATEX_HOME_NAME = ".prymatex"
TEXTMATE_WEBPREVIEW_NAME = "com.macromates.textmate.webpreview.plist"
TEXTMATE_PREFERENCE_NAMES = ["Library", "Preferences"]

def get_prymatex_app_path():
    return os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

def get_prymatex_home_path():
    path = os.path.join(USER_HOME_PATH, PRYMATEX_HOME_NAME)
    if not os.path.exists(path):
        os.makedirs(path)
    #Create extra paths
    for extra in ['Bundles', 'Themes', 'Plugins']:
        extraPath = os.path.join(path, extra)
        if not os.path.exists(extraPath):
Exemple #7
0
Application configuration based on Qt's QSettings module.
"""
import sys, os, plistlib
from prymatex.utils.misc import get_home_dir

#==============================================================================
# Debug helpers
#==============================================================================
STDOUT = sys.stdout
STDERR = sys.stderr
DEBUG = True

#==============================================================================
# Configuration paths
#==============================================================================
USER_HOME_PATH = get_home_dir()
PRYMATEX_HOME_NAME = ".prymatex"
TEXTMATE_WEBPREVIEW_NAME = "com.macromates.textmate.webpreview.plist"
TEXTMATE_PREFERENCE_NAMES = ["Library", "Preferences"]


def get_prymatex_app_path():
    return os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))


def get_prymatex_home_path():
    path = os.path.join(USER_HOME_PATH, PRYMATEX_HOME_NAME)
    if not os.path.exists(path):
        os.makedirs(path)
    #Create extra paths
    for extra in ['Bundles', 'Themes', 'Plugins']:
Exemple #8
0
class ProjectManager(QtCore.QObject, PMXBaseComponent):
    #Signals
    projectAdded = QtCore.pyqtSignal(object)
    projectRemoved = QtCore.pyqtSignal(object)
    projectClose = QtCore.pyqtSignal(object)
    projectOpen = QtCore.pyqtSignal(object)

    #Settings
    SETTINGS_GROUP = 'ProjectManager'

    workspaceDirectory = pmxConfigPorperty(default=os.path.join(
        get_home_dir(), "workspace"))  #Eclipse muejejeje
    knownProjects = pmxConfigPorperty(default=[])
    workingSets = pmxConfigPorperty(default={})

    VALID_PATH_CARACTERS = "-_.() %s%s" % (string.ascii_letters, string.digits)

    def __init__(self, application):
        QtCore.QObject.__init__(self)
        self.fileManager = application.fileManager
        self.supportManager = application.supportManager

        self.projectTreeModel = ProjectTreeModel(self)

        self.projectTreeProxyModel = ProjectTreeProxyModel(self)
        self.projectTreeProxyModel.setSourceModel(self.projectTreeModel)

        self.projectMenuProxyModel = ProjectMenuProxyModel(self)
        self.projectMenuProxyModel.setSourceModel(
            self.application.supportManager.bundleProxyModel)

        self.supportManager.bundleAdded.connect(
            self.on_supportManager_bundleAdded)
        self.supportManager.bundleRemoved.connect(
            self.on_supportManager_bundleRemoved)

    @classmethod
    def contributeToSettings(cls):
        return []

    def convertToValidPath(self, name):
        #TODO: este y el del manager de bundles pasarlos a utils
        validPath = []
        for char in unicodedata.normalize('NFKD', unicode(name)).encode(
                'ASCII', 'ignore'):
            char = char if char in self.VALID_PATH_CARACTERS else '-'
            validPath.append(char)
        return ''.join(validPath)

    def on_supportManager_bundleAdded(self, bundle):
        for project in self.getAllProjects():
            if project.namespace is not None and bundle.hasNamespace(
                    project.namespace) and not project.hasBundleMenu(bundle):
                self.addProjectBundleMenu(project, bundle)

    def on_supportManager_bundleRemoved(self, bundle):
        for project in self.getAllProjects():
            if project.namespace is not None and bundle.hasNamespace(
                    project.namespace) and project.hasBundleMenu(bundle):
                self.removeProjectBundleMenu(project, bundle)

    def loadProjects(self):
        for path in self.knownProjects[:]:
            try:
                ProjectTreeNode.loadProject(path, self)
            except exceptions.FileNotExistsException as e:
                print e
                self.knownProjects.remove(path)
                self.settings.setValue('knownProjects', self.knownProjects)

    def isOpen(self, project):
        return True

    def appendToKnowProjects(self, project):
        self.knownProjects.append(project.path())
        self.settings.setValue('knownProjects', self.knownProjects)

    def removeFromKnowProjects(self, project):
        self.knownProjects.remove(project.path())
        self.settings.setValue('knownProjects', self.knownProjects)

    #---------------------------------------------------
    # Environment
    #---------------------------------------------------
    def environmentVariables(self):
        return {}

    def supportProjectEnvironment(self, project):
        return self.supportManager.projectEnvironment(project)

    #---------------------------------------------------
    # PROJECT CRUD
    #---------------------------------------------------
    def createProject(self,
                      name,
                      directory,
                      description=None,
                      reuseDirectory=True):
        """
        Crea un proyecto nuevo lo agrega en los existentes y lo retorna,
        """
        #TODO: dejar este trabajo al file manager
        if not os.path.exists(directory):
            os.makedirs(directory)
        elif not reuseDirectory:
            raise Exception()
        project = ProjectTreeNode(directory, {
            "name": name,
            "description": description
        })
        try:
            project.save()
        except ProjectExistsException:
            rslt = QtGui.QMessageBox.information(
                None,
                _("Project already created on %s") % name,
                _("Directory %s already contains .pmxproject directory structure. "
                  "Unless you know what you are doing, Cancel and import project,"
                  " if it still fails, choose overwirte. Overwrite?") %
                directory, QtGui.QMessageBox.Cancel | QtGui.QMessageBox.Ok,
                QtGui.QMessageBox.Cancel)
            if rslt == QtGui.QMessageBox.Cancel:
                return
            try:
                project.save(overwirte=True)
            except FileException as excp:
                QtGui.QMessageBox.critical(
                    None, _("Project creation failed"),
                    _("<p>Project %s could not be created<p><pre>%s</pre>") %
                    (name, excp))
        self.addProject(project)
        self.appendToKnowProjects(project)
        return project

    def updateProject(self, project, **attrs):
        """Actualiza un proyecto"""
        if len(attrs) == 1 and "name" in attrs and attrs["name"] == item.name:
            #Updates que no son updates
            return item

        project.update(attrs)
        project.save()
        return project

    def importProject(self, directory):
        try:
            project = ProjectTreeNode.loadProject(directory, self)
        except exceptions.FileNotExistsException:
            raise exceptions.LocationIsNotProject()
        self.appendToKnowProjects(project)

    def deleteProject(self, project, removeFiles=False):
        """
        Elimina un proyecto
        """
        project.delete(removeFiles)
        self.removeProject(project)

    #---------------------------------------------------
    # PROJECT INTERFACE
    #---------------------------------------------------
    def addProject(self, project):
        project.setManager(self)
        # Todo proyecto define un namespace en el manager de support
        self.application.supportManager.addProjectNamespace(project)
        self.projectTreeModel.appendProject(project)
        self.projectAdded.emit(project)

    def modifyProject(self, project):
        pass

    def removeProject(self, project):
        self.removeFromKnowProjects(project)
        self.projectTreeModel.removeProject(project)

    def getAllProjects(self):
        #TODO: devolver un copia o no hace falta?
        return self.projectTreeModel.rootNode.childNodes()

    def openProject(self, project):
        # Cuando abro un proyecto agrego su namespace al support para aportar bundles y themes
        print project.directory

    def closeProject(self, project):
        # Cuando cierro un proyecto quito su namespace al support
        print project.directory

    def setWorkingSet(self, project, workingSet):
        projects = self.workingSets.setdefault(workingSet)
        projects.append(project.filePath)
        project.setWorkingSet(workingSet)
        self.projectTreeModel.dataChanged.emit()

    def addProjectBundleMenu(self, project, bundle):
        project.addBundleMenu(bundle)
        project.save()

    def removeProjectBundleMenu(self, project, bundle):
        project.removeBundleMenu(bundle)
        project.save()

    def findProjectForPath(self, path):
        for project in self.getAllProjects():
            if self.application.fileManager.issubpath(path, project.path()):
                return project