def createAssetPrompt(self):
        code = ''

        proj = database.getProjectDict()
        if self.type == 'asset':
            code = "%04d" % proj['nextAsset']
        elif self.type == 'shot':
            code = "%04d" % proj['nextShot']

        form = pm.setParent(q=True)
        f = pm.formLayout(form, e=True, width=150)
        row = pm.rowLayout(nc=2, adj=2)
        pm.picture(image='sphere.png', w=50, h=50)
        col = pm.columnLayout(adjustableColumn=True)
        nameField = pm.textFieldGrp('CrAsset_nameField',
                                    label='Name',
                                    cw=(1, 70),
                                    text='',
                                    adj=2,
                                    cat=[(1, 'left', 5), (2, 'left', 5)],
                                    editable=True)
        codeField = pm.textFieldGrp('CrAsset_codeField',
                                    label='Code',
                                    cw=(1, 70),
                                    text=code,
                                    adj=2,
                                    cat=[(1, 'left', 5), (2, 'left', 5)],
                                    editable=True)
        workflow = pm.optionMenuGrp('CrAsset_workflowOpt',
                                    label='Workflow',
                                    cw=(1, 70),
                                    cat=[(1, 'left', 5), (2, 'left', 5)])
        proj = database.getProjectDict()

        for key in proj['workflow']:
            context = set([
                proj['workflow'][key][x]['type'] for x in proj['workflow'][key]
            ])
            if self.type in context:
                pm.menuItem(label=key)

        b1 = pm.button(p=f, l='Cancel', c=self.abortCreateCallback)
        b2 = pm.button(p=f, l='OK', c=self.createAssetCallBack)

        spacer = 5
        top = 5
        edge = 5
        pm.formLayout(form,
                      edit=True,
                      attachForm=[(row, 'right', edge), (row, 'top', top),
                                  (row, 'left', edge), (row, 'right', edge),
                                  (b1, 'right', edge), (b1, 'bottom', edge),
                                  (b2, 'left', edge), (b2, 'bottom', edge)],
                      attachNone=[],
                      attachControl=[],
                      attachPosition=[(b1, 'right', spacer, 90),
                                      (b2, 'left', spacer, 10)])
Exemple #2
0
    def getFolderTree(self, fromDb=True):
        if fromDb:
            proj = database.getProjectDict()
            self.projectName = proj['projectName']
            self.folderTreeDict = proj[self.type + 'Folders']

        allKeys = self.folderTreeDict.keys()
        parentList = [x for x in self.folderTreeDict if self.folderTreeDict[x]['parent'] == '']
        parentList.sort()
        pm.treeView(self.widgetName, e=True, ra=True)
        for item in parentList:
            pm.treeView(self.widgetName, e=True, addItem=(item, ''), ei=(item, False))
            pm.treeView(self.widgetName, e=True, displayLabel=(item, item.split('_')[-1]))

        count = 0
        while allKeys:
            allKeys = [x for x in allKeys if not x in parentList]
            parentList = [x for x in self.folderTreeDict if self.folderTreeDict[x]['parent'] in parentList]
            parentList.sort()
            for item in parentList:
                pm.treeView(self.widgetName, e=True, addItem=(item, self.folderTreeDict[item]['parent']), ei=(item, False))
                pm.treeView(self.widgetName, e=True, displayLabel=(item, item.split('_')[-1]))
            count += 1
            if count > 1000:
                break
    def okCallback(self, *args):
        self.putProjectSettings()
        projName = self.projDict['projectName']

        if self.new:
            if not projName:
                print 'Please choose a name for the project!!'
                return

            existName = database.getProjectDict(projName)

            if existName:
                print 'This Name exists. Please choose another name'
                return

            print 'create project'
            print self.projDict
            database.addProject(**self.projDict)
            pm.deleteUI(self.parentWidget.projPopUp)
            self.parentWidget.makePopup()
            self.parentWidget.changeProjectCallBack(projName)

        else:
            print 'edit project'
            database.putProjectDict(self.projDict, projName)

        pm.deleteUI(self.win)
Exemple #4
0
    def getPath(self, dirLocation='workLocation', ext='ma'):
        """
        Return object respective diretory and file name, based on dirLocation parameter and extention parameter.
        Valid values for diLocation are: "workLocation","publishLocation", "cacheLocation",
        "imagesWorkLocation", "imagesPublishLocation"
        Extension parameter typically take maya file extensions, "ma", "abc" or image file extensions, "jpg", "gif", etc
        :param dirLocation: string
        :param ext: string (no point)
        :return: list [ dirPath, filename]
        """
        project = database.getProjectDict(self.projectName)
        location = project[dirLocation]
        taskFolder = self.task
        folderPath = os.path.join(*self.path)
        phase = project['workflow'][self.workflow][self.task]['phase']
        filename = self.filename
        proxyMode = self.proxyMode

        if ext:
            ext = '.' + ext

        else:
            ext = ''

        dirPath = os.path.join(location, phase, taskFolder, folderPath,
                               filename, proxyMode)
        filename = filename + ext

        return dirPath, filename
Exemple #5
0
    def __init__(self):
        self.parentWidget = None
        self.widgetName = None

        self.folderTreeWidget = None
        self.infoWidget = None
        self.itemList = []
        self.selectedItem = None
        self.type = None
        self.task = None
        self.path = None
        self.viewOption = 1
        proj = database.getProjectDict()
        self.projectName = proj['projectName']
Exemple #6
0
    def getPath(self, dirLocation='workLocation', ext='ma'):
        project = database.getProjectDict(self.projectName)
        location = project[dirLocation]
        taskFolder = self.task
        folderPath = os.path.join(*self.path)
        phase = project['workflow'][self.workflow][self.task]['phase']
        filename = self.filename
        proxyMode = self.proxyMode

        if ext:
            ext = '.' + ext

        else:
            ext = ''

        dirPath = os.path.join(location, phase, taskFolder, folderPath,
                               filename, proxyMode)
        filename = filename + ext

        return dirPath, filename
Exemple #7
0
    def getCachePublishPath(self, make=False):
        """
        Return the path where to publish the alembic cache for this camera
        If make it true, create the folder if needed

        :param make: boolean
        :return: str
        """
        proj = database.getProjectDict()
        path = self.parent.getPath(dirLocation='cacheLocation', ext='')
        cachePath = os.path.join(*path)

        if make:
            if not os.path.exists(cachePath):
                os.makedirs(cachePath)

        ver = 'v%03d_' % self.parent.caches['cam']['cacheVer']
        cacheName = database.templateName(self.getDataDict(), proj['cacheNameTemplate']) + '_' + self.ns
        cacheFileName = ver + cacheName + '.abc'

        return os.path.join(cachePath, cacheFileName)
Exemple #8
0
    def getPublishPath(self, make=False):
        """
        Return the publish path for this component
        If make is true create the folder if needed

        :param make: boolean
        :return: str
        """
        proj = database.getProjectDict()
        sourceItem = self.getSourceItem()
        path = sourceItem.getPath(dirLocation='cacheLocation', ext='')
        cachePath = os.path.join(*path)

        if make:
            if not os.path.exists(cachePath):
                os.makedirs(cachePath)

        ver = 'v%03d_' % self.cacheVer
        cacheName = database.templateName(
            self.getDataDict(), proj['cacheNameTemplate']) + '_' + self.ns
        cacheFileName = ver + cacheName + '.abc'

        return os.path.join(cachePath, cacheFileName)
Exemple #9
0
    def okCallback(self, *args):
        self.putProjectSettings()
        projName = self.projDict['projectName']

        if self.new:
            if not projName:
                pm.confirmDialog(
                    title='error',
                    ma='center',
                    message='Please choose a name for the project!!',
                    button=['OK'],
                    defaultButton='OK',
                    dismissString='OK')
                return

            existName = database.getProjectDict(projName)

            if existName:
                pm.confirmDialog(
                    title='error',
                    ma='center',
                    message='This Name exists. Please choose another name',
                    button=['OK'],
                    defaultButton='OK',
                    dismissString='OK')
                return

            database.addProject(**self.projDict)
            pm.deleteUI(self.parentWidget.projPopUp)
            self.parentWidget.makePopup()
            self.parentWidget.changeProjectCallBack(projName)

        else:
            database.putProjectDict(self.projDict, projName)

        pm.deleteUI(self.win)
Exemple #10
0
    def refreshList(self, path=None, task=None, code=None, itemMData=None):
        color = (0, 0, 0)
        x = None

        itemListProj = database.getProjectDict()

        if itemMData:
            self.path = itemMData['path']
            self.task = itemMData['task']
            self.type = itemMData['type']
        else:
            self.path = path
            self.task = task
            self.type = database.getTaskType(task[0])
            logger.debug('task %s, type %s' % (task[0], self.type))

        collection = database.getCollection(self.type)

        if code:
            result = collection.find({'path': self.path, 'code': code})
        else:
            if self.task == ['asset']:
                result = collection.find({'path': self.path, 'task': 'model'})
            elif self.task == ['shot']:
                result = collection.find({'path': self.path, 'task': 'layout'})
            else:
                result = collection.find({
                    'path': self.path,
                    'task': {
                        '$in': self.task
                    }
                })

        flowChilds = pm.flowLayout(self.widgetName, q=True, ca=True)
        if flowChilds:
            for i in flowChilds:
                pm.deleteUI(i)

        self.itemList = []
        self.selectedItem = None

        for itemMData in result:
            logger.debug(itemMData)
            if not code and (task == 'asset' or task == 'shot'):
                templateToUse = [
                    x for x in itemListProj['assetNameTemplate']
                    if x != '$task'
                ]
                name = database.templateName(itemMData, template=templateToUse)
                taskLabel = task.upper()
                createdColor = (0, .2, .50)
                notCreatedColor = (0, .2, .50)
            else:
                name = database.templateName(itemMData)
                taskLabel = itemMData['task'].upper()
                notCreatedColor = (.2, .2, .2)
                createdColor = (1, .8, .20)

            status = itemMData['status']
            if status == 'notCreated':
                color = notCreatedColor
            elif status == 'created':
                color = createdColor

            thumbPath = version.getThumb(itemMData)
            x = ItemBase(name=name,
                         itemName=itemMData['name'],
                         imgPath=thumbPath,
                         label=taskLabel,
                         status=itemMData['status'],
                         parentWidget=self,
                         color=color)
            x.infoWidget = self.infoWidget

            if code:
                x.task = itemMData['task']
                x.workVer = itemMData['workVer']
                x.publishVer = itemMData['publishVer']
            else:
                x.task = itemMData['task']
                x.workVer = 0
                x.publishVer = 0

            x.code = itemMData['code']
            self.itemList.append(x)
            x.addToLayout(self.viewOption)
Exemple #11
0
    def createProjectSettingsWidget(self):
        if not self.projectName:
            self.projDict = database.getDefaultDict()
        else:
            self.projDict = database.getProjectDict(self.projectName)

        self.win = pm.window(w=800, h=600)
        col = pm.columnLayout(
            adjustableColumn=True,
            columnAlign='left',
        )
        self.projNameTxt = pm.textFieldGrp(label='ProjectName',
                                           text=self.projDict['projectName'],
                                           cat=(1, 'left', 20),
                                           adj=2,
                                           editable=False)
        self.prefixTxt = pm.textFieldGrp(label='Prefix',
                                         text=self.projDict['prefix'],
                                         cat=(1, 'left', 20),
                                         adj=2,
                                         editable=False)
        self.statusOpt = pm.optionMenuGrp(l='Status', cat=(1, 'left', 20))
        pm.menuItem(label='inative')
        pm.menuItem(label='active')
        pm.menuItem(label='current')
        pm.optionMenuGrp(self.statusOpt, e=True, v=self.projDict['status'])
        self.workLocTxt = pm.textFieldButtonGrp(
            label='Work Location',
            text=self.projDict['workLocation'],
            buttonLabel='...',
            adj=2,
            cat=(1, 'left', 20),
            bc=lambda: self.browseCallback(1))
        self.publishLocTxt = pm.textFieldButtonGrp(
            label='Publish Location',
            text=self.projDict['publishLocation'],
            buttonLabel='...',
            adj=2,
            cat=(1, 'left', 20),
            bc=lambda: self.browseCallback(2))
        self.imgWorkLocTxt = pm.textFieldButtonGrp(
            label='Images Work Location',
            text=self.projDict['imagesWorkLocation'],
            buttonLabel='...',
            adj=2,
            cat=(1, 'left', 20),
            bc=lambda: self.browseCallback(3))
        self.imgPublishLocTxt = pm.textFieldButtonGrp(
            label='Images Publish Location',
            text=self.projDict['imagesPublishLocation'],
            buttonLabel='...',
            adj=2,
            cat=(1, 'left', 20),
            bc=lambda: self.browseCallback(4))
        self.cacheLocTxt = pm.textFieldButtonGrp(
            label='Cache Location',
            text=self.projDict['cacheLocation'],
            buttonLabel='...',
            adj=2,
            cat=(1, 'left', 20),
            bc=lambda: self.browseCallback(5))
        self.assetCollTxt = pm.textFieldGrp(
            label='Asset Collection',
            text=self.projDict['assetCollection'],
            adj=2,
            cat=(1, 'left', 20),
            editable=False)
        self.shotCollTxt = pm.textFieldGrp(
            label='Shot Collection',
            text=self.projDict['shotCollection'],
            adj=2,
            cat=(1, 'left', 20),
            editable=False)
        self.nameTemplTxt = pm.textFieldGrp(
            label='Asset Name Template',
            text=','.join(self.projDict['assetNameTemplate']),
            adj=2,
            cat=(1, 'left', 20))
        self.cacheTemplTxt = pm.textFieldGrp(
            label='Cache Name Template',
            text=','.join(self.projDict['cacheNameTemplate']),
            adj=2,
            cat=(1, 'left', 20))
        self.fpsTxt = pm.textFieldGrp(label='Project Frame Rate',
                                      text=self.projDict['fps'],
                                      adj=2,
                                      cat=(1, 'left', 20))

        self.mayaVersionOpt = pm.optionMenuGrp(label='Maya Version',
                                               cat=(1, 'left', 20))
        pm.menuItem(label='2015')
        pm.menuItem(label='2016')
        pm.menuItem(label='2017')
        pm.menuItem(label='2016')
        pm.optionMenuGrp(self.mayaVersionOpt,
                         e=True,
                         v=self.projDict['mayaVersion'])

        self.rendererOpt = pm.optionMenuGrp(label='Renderer',
                                            cat=(1, 'left', 20))
        pm.menuItem(label='vray')
        pm.menuItem(label='arnold')
        pm.menuItem(label='mental ray')
        pm.menuItem(label='red shift')
        pm.optionMenuGrp(self.rendererOpt, e=True, v=self.projDict['renderer'])

        self.resolutionOpt = pm.optionMenuGrp(l='Resolution',
                                              cat=(1, 'left', 20))
        pm.menuItem(label='1920x1080')
        pm.menuItem(label='2048x1780')

        pm.optionMenuGrp(
            self.resolutionOpt,
            e=True,
            v='%sx%s' %
            (self.projDict['resolution'][0], self.projDict['resolution'][1]))
        pm.text(p=col, l='FOLDERS')

        pane = pm.paneLayout(p=col, cn='vertical2', h=150)
        self.assetTreeView = FolderTreeEditableWidget('asset')
        self.assetTreeView.createFolderTree(pane)
        self.assetTreeView.getFolderTree()
        self.assetTreeView.createMenus()

        self.shotTreeView = FolderTreeEditableWidget('shot')
        self.shotTreeView.createFolderTree(pane)
        self.shotTreeView.getFolderTree()
        self.shotTreeView.createMenus()

        pm.text(p=col, l='WORKFLOWS')
        pane = pm.paneLayout(p=col, cn='vertical2', h=100)

        self.workflowScrll = pm.textScrollList(parent=pane)
        for workflow in self.projDict['workflow']:
            pm.textScrollList(self.workflowScrll,
                              e=True,
                              append='     ' + workflow)

        pm.rowLayout(p=col, nc=3, adj=1)
        pm.text(l='')
        pm.button(l='OK', w=50, h=50, c=self.okCallback)
        pm.button(l='Cancel', w=50, h=50, c=self.cancelCallback)

        pm.showWindow()
 def getProject(self):
     shortName = pm.layout(self.widgetName, q=True, ca=True)[1]
     fullName = pm.layout(shortName, q=True, fpn=True)
     projName = pm.textField(fullName, q=True, text=True)
     proj = database.getProjectDict(projName)
     return proj