def confirmDialog(**kwargs):
    """
    This is the similar and replacement implementation of the Maya confirmDialog.
    """
    global result
    result = None

    if qtGuiApp():

        def choice(sButton):
            global result
            result = sButton

        confirmDlg = ConfirmDialog(**kwargs)
        confirmDlg.buttonChoice.connect(choice)
        dismiss = confirmDlg.dismissString()
        confirmDlg.exec_()
        if not result:
            result = dismiss
        return result

    else:
        return confirmMessage(kwargs.get("title", kwargs.get("t", 'PLEASE...')),
                              kwargs.get("message", kwargs.get("m", "Are you sure ?")),
                              kwargs.get("button", kwargs.get("b", ['Confirm'])))
    def authenticate(self, user=None, password=None, relog=False):

        if user and password:
            logInFunc = partial(self.logIn, writeCookie=False)
            userData = {}
        else:
            logInFunc = self.logIn
            userData = self.loggedUser()

        if (not relog) and userData and user and userData["login"] != user:
            relog = True

        if relog:
            self.logOut()
            userData = {}

        if not userData:
            if user and password:
                userData = logInFunc(user, password)
            elif qtGuiApp():
                userData = loginDialog(loginFunc=logInFunc)
            else:
                for _ in xrange(5):
                    sUser = raw_input("login:")
                    sPwd = getpass()
                    try:
                        userData = logInFunc(sUser, sPwd)
                    except Exception, e:
                        print toStr(e)
                    else:
                        if userData:
                            break
Exemple #3
0
def confirmDialog(**kwargs):
    """
    This is the similar and replacement implementation of the Maya confirmDialog.
    """
    global result
    result = None

    if qtGuiApp():

        def choice(sButton):
            global result
            result = sButton

        confirmDlg = ConfirmDialog(**kwargs)
        confirmDlg.buttonChoice.connect(choice)
        dismiss = confirmDlg.dismissString()
        confirmDlg.exec_()
        if not result:
            result = dismiss
        return result

    else:
        return confirmMessage(
            kwargs.get("title", kwargs.get("t", 'PLEASE...')),
            kwargs.get("message", kwargs.get("m", "Are you sure ?")),
            kwargs.get("button", kwargs.get("b", ['Confirm'])))
Exemple #4
0
    def chooseSgTask(self, sStepCodes=None, fromList=None):

        in_sTaskList = fromList
        if in_sTaskList:
            in_sTaskList = tuple(s.lower() for s in in_sTaskList)

        sgTaskList = self.listSgTasks(sStepCodes, fail=True)
        if len(sgTaskList) == 1:
            taskNameOrInfo = sgTaskList[0]
        else:
            sTaskList = list(d['step']['name'] + '|' + d['content'] for d in sgTaskList)
            sgTaskDct = dict(zip(sTaskList, sgTaskList))

            if in_sTaskList:
                sTaskChoiceList = list(t for t in sTaskList if t.lower() in in_sTaskList)
                if not sTaskChoiceList:
                    raise ValueError("<{}> Unknown input tasks: {}. Are valid: {}."
                                     .format(self, in_sTaskList, sTaskList))
            else:
                sTaskChoiceList = sTaskList

            sMsg = "What was your task ?"
            if qtGuiApp():
                from PySide import QtGui
                sTaskName, bOk = QtGui.QInputDialog.getItem(None, "Make your choice !",
                                                            sMsg, sTaskChoiceList,
                                                            current=0,
                                                            editable=False)
                if not bOk:
                    raise RuntimeError("No task selected !")
            else:
                sChoiceList = ["Cancel"] + sTaskChoiceList
                for i, s in enumerate(sChoiceList):
                    sMsg += "\n{:>3} - {}".format(i, s)
                sMsg += '\n'

                iChoice = -1
                iChoiceList = range(len(sChoiceList))
                while iChoice not in iChoiceList:
                    try:
                        iChoice = int(raw_input(sMsg))
                    except ValueError:
                        iChoice = -1
                        continue

                sChoice = sChoiceList[iChoice]

                if sChoice == "Cancel":
                    raise RuntimeError("No task selected !")

                sTaskName = sChoice

            taskNameOrInfo = sgTaskDct[sTaskName]

        return taskNameOrInfo
def getTopWidget(in_qApp=None):

    qApp = in_qApp if in_qApp else qtGuiApp()
    if not qApp:
        return

    topWidgets = tuple(w for w in qApp.topLevelWidgets() if isTopWidget(w))
    if not topWidgets:
        return

    return topWidgets[0]
Exemple #6
0
    def chooseSgTask(self, sStepCodes=None, fromList=None):

        in_sTaskList = fromList
        if in_sTaskList:
            in_sTaskList = tuple(s.lower() for s in in_sTaskList)

        sgTaskList = self.getSgTasks(sStepCodes, fail=True)
        if len(sgTaskList) == 1:
            taskNameOrInfo = sgTaskList[0]
        else:
            sTaskList = list(d['content'] for d in sgTaskList)
            sgTaskDct = dict(zip(sTaskList, sgTaskList))

            if in_sTaskList:
                sTaskChoiceList = list(t for t in sTaskList if t.lower() in in_sTaskList)
                if not sTaskChoiceList:
                    raise ValueError("<{}> Unknown input tasks: {}. Are valid: {}."
                                     .format(self, in_sTaskList, sTaskList))
            else:
                sTaskChoiceList = sTaskList

            sMsg = "What was your task ?"
            if qtGuiApp():
                from PySide import QtGui
                sTaskName, bOk = QtGui.QInputDialog.getItem(None, "Make your choice !",
                                                            sMsg, sTaskChoiceList,
                                                            current=0,
                                                            editable=False)
                if not bOk:
                    raise RuntimeError("No task selected !")
            else:
                sChoiceList = sTaskChoiceList + ["Cancel"]
                sMsg += "({})".format("|".join(sChoiceList))
                sChoice = ""
                while sChoice not in sChoiceList:
                    sChoice = raw_input(sMsg)

                if sChoice == "Cancel":
                    raise RuntimeError("No task selected !")

                sTaskName = sChoice

            taskNameOrInfo = sgTaskDct[sTaskName]

        return taskNameOrInfo
Exemple #7
0
def launch(sProject, argv):

    app = qtGuiApp()
    if not app:
        app = QtGui.QApplication(argv)

    #print QtGui.QStyleFactory.keys()
    #app.setStyle("Cleanlooks")

    loadPrefs()

    mainWin = AssetBrowserWindow(WINDOW_NAME)
    mainWin.show()

    if sProject:
        mainWin.setProject(sProject)

    status = app.exec_()
    sys.exit(status)
    def doIt(*args, **kwargs):

        bOverride = False

        qApp = qtGuiApp()
        if qApp:
            cursor = qApp.overrideCursor()
            if (not cursor) or (cursor.shape() != Qt.WaitCursor):
                bOverride = True

        if bOverride:
            qApp.setOverrideCursor(QtGui.QCursor(Qt.WaitCursor))

        try:
            ret = func(*args, **kwargs)
        finally:
            if bOverride:
                qApp.restoreOverrideCursor()

        return ret
    def authenticate(self, user=None, password=None, relog=False):

        if relog:
            self.logOut()

        userData = self.loggedUser()
        if not userData:
            if user and password:
                userData = self.logIn(user, password)
            elif qtGuiApp():
                userData = loginDialog(loginFunc=self.logIn)
            else:
                for _ in xrange(5):
                    sUser = raw_input("login:")
                    sPwd = getpass()
                    try:
                        userData = self.logIn(sUser, sPwd)
                    except Exception, e:
                        print toStr(e)
                    else:
                        if userData:
                            break
    def __start(self):

        dialog = None

        qApp = qtGuiApp()
        if qApp:
            dialog = self.__class__.dialog
            bDialogCreated = False
            if not dialog:
                bDialogCreated = True                
                dialog = QtGui.QProgressDialog(getTopWidget(qApp))
                dialog.setWindowModality(QtCore.Qt.WindowModal)
                dialog.setCancelButton(None)

            dialog.setLabelText("Copying {}".format(self.sourcePath))
            dialog.setMinimum(0)
            dialog.setMaximum(self.sourceSize)
            
            if not bDialogCreated:
                dialog.reset()

        self.__class__.dialog = dialog
        self.startTime = time()
def launch(rootDirList, update=False, dryRun=True, project="", dialogParent=None):

    global TREE_ITEM_DCT
    TREE_ITEM_DCT = {}

    app = qtGuiApp()
    if not app:
        app = QtGui.QApplication(sys.argv)

    proj = initProject(project)

    dlg = QuickTreeDialog(dialogParent)
    treeWdg = dlg.treeWidget
    treeWdg.setHeaderLabels(("Entity Name", "Infos"))

    missingPathItems = listMissingPathItems(rootDirList, update=update)

    badEntityList = []
    treeDataList = []
    for damEntity, sMissingPaths in missingPathItems:

        if isinstance(damEntity, basestring):
            p = pathJoin("Errors", damEntity)
            badEntityList.append({"path":p, "texts":[damEntity, sMissingPaths],
                                  "flags":Qt.ItemIsEnabled,
                                  "roles":{Qt.ForegroundRole:(1, QtGui.QBrush(Qt.red))}
                                })
            continue

        drcLib = proj.getLibrary("public", damEntity.libraryName)
        sLibPath = drcLib.absPath()
        sEntityTitle = damEntity.sgEntityType + 's'

        sEntityPath = damEntity.getPath("public")
        sEntiTreePath = re.sub("^" + sLibPath, sEntityTitle, sEntityPath)

        roleData = {Qt.UserRole:(0, damEntity)}
        treeDataList.append({"path":sEntiTreePath, "flags":None, "roles":roleData})

        sTreePathList = tuple(re.sub("^" + sLibPath, sEntityTitle, p)
                              for p in sMissingPaths)

        tree = OrderedTree.fromPaths(sTreePathList)

        for sTreePath in tree.iterPaths(rootPath=sEntiTreePath):
            treeDataList.append({"path":sTreePath, "flags":Qt.NoItemFlags})

    treeWdg.createTree(badEntityList)

    treeWdg.defaultFlags |= Qt.ItemIsTristate
    treeWdg.defaultRoles = {Qt.CheckStateRole:(0, Qt.Unchecked)}
    treeWdg.createTree(treeDataList)

    topItemCount = treeWdg.topLevelItemCount()
    if topItemCount == 1:
        curItem = treeWdg.topLevelItem(0)
        treeWdg.setRootIndex(treeWdg.indexFromItem(curItem))
        while curItem.childCount() == 1:
            curItem = curItem.child(0)
            curItem.setExpanded(True)
    else:
        for i in xrange(topItemCount):
            treeWdg.topLevelItem(i).setExpanded(True)

    dlg.show()

    while True:

        bOk = dlg.exec_()
        if not bOk:
            return

        bApply = False

        flags = (QTreeWidgetItemIterator.Checked | QTreeWidgetItemIterator.Enabled)
        treeIter = QTreeWidgetItemIterator(treeWdg, flags)
        damEntities = tuple(it.value().data(0, Qt.UserRole) for it in treeIter)
        damAssets = tuple(e for e in damEntities if isinstance(e, DamAsset))
        damShots = tuple(e for e in damEntities if isinstance(e, DamShot))
        if damAssets or damShots:

            sMsg = "Create directories and files for:\n"
            if damAssets:
                sMsg += "\n     - {} Assets".format(len(damAssets))

            if damShots:
                sMsg += "\n     - {} Shots".format(len(damShots))

            sConfirm = confirmDialog(title="WARNING !",
                                     message=sMsg,
                                     button=("Yes", "No"),
                                     defaultButton="No",
                                     cancelButton="No",
                                     dismissString="No",
                                     icon="warning",
                                    )

            if sConfirm == "Yes":
                bApply = True
                break

    if bApply:

        entityDirList = len(damEntities) * [None]

        for i, damEntity in enumerate(damEntities):
            if not damEntity:
                continue
            damEntity.createDirsAndFiles(dryRun=dryRun, checkDb=False)
            entityDirList[i] = damEntity.getResource("public", "entity_dir")

        for drcDir in entityDirList:
            if drcDir:
                drcDir.setSyncRules(drcDir.syncRules)
def launch(dryRun=True, project=""):

    app = qtGuiApp()
    if not app:
        app = QtGui.QApplication(sys.argv)

    sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project
    proj = DamProject(sProject)
    print sProject.center(80, "-")

    dbNodeDct = {}

    sFieldSet = set()

    print "Querying all dbnodes..."
    dbNodeList = proj.findDbNodes()
    print "Got {} dbnodes.".format(len(dbNodeList))

    for dbnode in dbNodeList:
        sFieldSet.update(dbnode._data.iterkeys())
        dbNodeDct.setdefault(dbnode.file.lower(), []).append(dbnode)

    dlg = QuickTreeDialog()
    treeWdg = dlg.treeWidget

    sFieldList = sorted(sFieldSet)
    sFieldList.remove("file")
    sFieldList.remove("#parent")
    sFieldList.insert(0, "file")

    treeWdg.setHeaderLabels(sFieldList)
    treeWdg.setTextElideMode(Qt.ElideLeft)

    topLevelItemDct = {}
    for sDbPath, nodes in dbNodeDct.iteritems():
        x = len(nodes)
        if x > 1:
            nodes = sorted(nodes, key=lambda n:int(n.time) * .001, reverse=True)

            if sDbPath not in topLevelItemDct:
                topItem = TreeItem(treeWdg, [sDbPath])
                topLevelItemDct[sDbPath] = topItem
            else:
                topItem = topLevelItemDct[sDbPath]

            for n in nodes:
                sTime = (datetime.fromtimestamp(int(n.time) / 1000)
                      .strftime(u"%Y-%m-%d %H:%M"))
                n._data["time"] = sTime

                itemData = tuple(toUnicode(n._data.get(f, "")) for f in sFieldList)
                print itemData[0]
                item = TreeItem(topItem, itemData)
                item.setCheckState(0, Qt.Unchecked)
                item.setData(0, Qt.UserRole, n)

    treeWdg.expandAll()
    for c in xrange(treeWdg.columnCount()):
        treeWdg.resizeColumnToContents(c)

    bOk = dlg.exec_()
    if not bOk:
        return

    itemIter = QTreeWidgetItemIterator(treeWdg, QTreeWidgetItemIterator.Checked)
    toDeleteNodes = [item.value().data(0, Qt.UserRole) for item in itemIter]
    if toDeleteNodes:
        sMsg = "Delete these {} Db nodes ???".format(len(toDeleteNodes))
        sConfirm = confirmDialog(title="WARNING !",
                                 message=sMsg,
                                 button=("Yes", "No"),
                                 defaultButton="No",
                                 cancelButton="No",
                                 dismissString="No",
                                 icon="warning",
                                )

        if sConfirm == "Yes":
            for n in toDeleteNodes:
                print "Deleting", n.file, n._data
                if not dryRun:
                    n.delete()
import sys
import os.path as osp
#from collections import OrderedDict

from PySide import QtGui
#from PySide.QtGui import QTreeWidgetItem, QTreeWidgetItemIterator
from PySide.QtCore import Qt

from pytd.util.fsutils import iterPaths
from pytd.util.sysutils import qtGuiApp
from pytd.gui.dialogs import QuickTreeDialog

#srcPaths = ["A/B/C", "A/C/D", "A/C/D/E", "A/C/D/F", "A/B/D/F", "A/A/D/F", "A/C/D/G"]

app = qtGuiApp()
if not app:
    app = QtGui.QApplication(sys.argv)

dlg = QuickTreeDialog()
treeWdg = dlg.treeWidget
treeWdg.setSortingEnabled(True)
dlg.show()

def iterTreeData():

    for p in iterPaths("C:/Users/styx/Google Drive", intermediateDirs=True,
                       relative=False):
        data = {"path":p}

        if osp.isfile(p):
def launch_old(entityType="", dryRun=True, project="", dialogParent=None):

    global TREE_ITEM_DCT
    TREE_ITEM_DCT = {}

    app = qtGuiApp()
    if not app:
        app = QtGui.QApplication(sys.argv)

    sProject = os.environ["DAVOS_INIT_PROJECT"] if not project else project
    proj = DamProject(sProject)
    print sProject.center(80, "-")

    dlg = QuickTreeDialog(dialogParent)
    treeWdg = dlg.treeWidget
    treeWdg.setHeaderLabels(("Entity Name", "Infos"))

    dlg.show()

    missingPathItems = listMissingPathItems(proj, entityType)

    badEntityItems = []
    for damEntity, sMissingPaths in missingPathItems:

        if isinstance(damEntity, basestring):
            badEntityItems.append((damEntity, sMissingPaths))
            continue

        drcLib = proj.getLibrary("public", damEntity.libraryName)
        sLibPath = drcLib.absPath()
        sEntityTitle = damEntity.sgEntityType + 's'

        sEntityPath = damEntity.getPath("public")
        sEntityPath = re.sub("^" + sLibPath, sEntityTitle, sEntityPath)
        sEntityPathDirs = pathSplitDirs(sEntityPath)

        for sAbsPath in sMissingPaths:

            sTreePath = re.sub("^" + sLibPath, sEntityTitle, sAbsPath)

            sParentPath, sFilename = osp.split(pathNorm(sTreePath))
            parentItem = TREE_ITEM_DCT.get(sParentPath)
            if not parentItem:
                sDirList = pathSplitDirs(sParentPath)
                curParentItem = treeWdg
                for i, sDirName in enumerate(sDirList):
                    if i == 0:
                        sItemPath = sDirName
                    else:
                        sItemPath = pathJoin(*sDirList[:i + 1])

                    item = TREE_ITEM_DCT.get(sItemPath)
                    if not item:
                        flags = None
                        if sItemPath.startswith(sEntityPath):
                            if len(pathSplitDirs(sItemPath)) > len(sEntityPathDirs):
                                flags = Qt.NoItemFlags

                        userData = None
                        if sItemPath == sEntityPath:
                            userData = damEntity

                        item = loadTreeItem(curParentItem, sItemPath, [sDirName],
                                            flags=flags, userData=userData)

                    curParentItem = item

                parentItem = curParentItem

            flags = None
            if sTreePath.startswith(sEntityPath):
                if len(pathSplitDirs(sTreePath)) > len(sEntityPathDirs):
                    flags = Qt.NoItemFlags

            userData = None
            if sTreePath == sEntityPath:
                userData = damEntity

            loadTreeItem(parentItem, sTreePath, [sFilename], flags=flags, userData=userData)


    if badEntityItems:

        errorsItem = loadTreeItem(None, "Errors", ["ERRORS"])
        treeWdg.insertTopLevelItem(0, errorsItem)

        for sEntityName, sError in badEntityItems:
            loadTreeItem(errorsItem, sEntityName, [sEntityName, sError],
                         checkable=False)

    for i in xrange(treeWdg.topLevelItemCount()):
        treeWdg.topLevelItem(i).setExpanded(True)

    while True:

        bOk = dlg.exec_()
        if not bOk:
            return

        bApply = False

        flags = (QTreeWidgetItemIterator.Checked | QTreeWidgetItemIterator.Enabled)
        treeIter = QTreeWidgetItemIterator(treeWdg, flags)
        damEntities = tuple(it.value().data(0, Qt.UserRole) for it in treeIter)
        damAssets = tuple(e for e in damEntities if isinstance(e, DamAsset))
        damShots = tuple(e for e in damEntities if isinstance(e, DamShot))
        if damAssets or damShots:

            sMsg = "Create directories and files for:\n"
            if damAssets:
                sMsg += "\n     - {} Assets".format(len(damAssets))

            if damShots:
                sMsg += "\n     - {} Shots".format(len(damShots))

            sConfirm = confirmDialog(title="WARNING !",
                                     message=sMsg,
                                     button=("Yes", "No"),
                                     defaultButton="No",
                                     cancelButton="No",
                                     dismissString="No",
                                     icon="warning",
                                    )

            if sConfirm == "Yes":
                bApply = True
                break

    if bApply:
        for damEntity in damEntities:
            if not damEntity:
                continue
            damEntity.createDirsAndFiles(dryRun=dryRun)