Exemplo n.º 1
0
    def add_preview(self, layout):
        path_ui = ("/").join(
            [os.path.dirname(__file__), "ui", TITLE + "_preview.ui"])
        self.wgPreview = QtCompat.loadUi(path_ui)
        layout.addWidget(self.wgPreview, 0, 0)

        self.wgPreview.btnPreviewImg.clicked.connect(self.press_btnPreviewImg)
        self.wgPreview.btnScreenshot.clicked.connect(self.press_btnScreenshot)
        self.wgPreview.btnSnapshotRender.clicked.connect(
            self.press_btnSnapshotRender)
        self.wgPreview.btnSnapshotViewport.clicked.connect(
            self.press_btnSnapshotViewport)

        self.wgPreview.btnPreviewImg.setIcon(
            QtGui.QPixmap(QtGui.QImage(libData.get_img_path("lbl/default"))))
        self.wgPreview.btnScreenshot.setIcon(
            QtGui.QPixmap(QtGui.QImage(
                libData.get_img_path("btn/btnCamera48"))))
        self.wgPreview.btnSnapshotViewport.setIcon(
            QtGui.QPixmap(
                QtGui.QImage(
                    libData.get_img_path(
                        "software/maya/shelf/shelf_renderLow35"))))
        self.wgPreview.btnSnapshotRender.setIcon(
            QtGui.QPixmap(
                QtGui.QImage(
                    libData.get_img_path(
                        "software/maya/shelf/shelf_renderHigh35"))))
Exemplo n.º 2
0
    def __init__(self, parent=None):
        super(ArSave, self).__init__()

        path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + ".ui"])
        self.wgSave = QtCompat.loadUi(path_ui)

        self.save_dir = os.getenv('PROJECT_PATH')
        self.save_file = ''
        self.comment = "Comment"
        self.img_path = libSnapshot.default_tmp_path
        self.software = Tank().software.software

        self.wgSave.btnVersionUp.clicked.connect(self.update_version)
        self.wgSave.btnVersionDown.clicked.connect(
            lambda: self.update_version(add=-1))

        # self.wgSave.btnPreviewImg.clicked.connect(self.press_btnPreviewImg)
        self.wgSave.btnScreenshot.clicked.connect(self.press_btnScreenshot)
        self.wgSave.btnSnapshotViewport.clicked.connect(
            self.press_btnSnapshotViewport)
        self.wgSave.btnSnapshotRender.clicked.connect(
            self.press_btnSnapshotRender)

        self.wgSave.btnPreviewImg.setIcon(
            QtGui.QPixmap(QtGui.QImage(libData.get_img_path("lbl/default"))))
        self.wgSave.btnScreenshot.setIcon(
            QtGui.QPixmap(QtGui.QImage(
                libData.get_img_path("btn/btnCamera48"))))
        self.wgSave.btnSnapshotRender.setIcon(
            QtGui.QPixmap(
                QtGui.QImage(
                    libData.get_img_path(
                        "software/maya/shelf/shelf_renderHigh35"))))
        self.wgSave.btnSnapshotViewport.setIcon(
            QtGui.QPixmap(
                QtGui.QImage(
                    libData.get_img_path(
                        "software/maya/shelf/shelf_viewport35"))))

        self.resize_widget(self.wgSave)

        if not self.set_path():
            self.press_btnOption()
            return

        # self.wgSave : always on top
        # self.wgHeader.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

        self.wgHeader.setWindowTitle(TITLE)
        self.wgHeader.setWindowIcon(
            QtGui.QIcon(libData.get_img_path("btn/btnSave48")))

        self.wgHeader.btnOption.setText('SaveAs')
        self.wgSave.btnSnapshotRender.hide()
        if self.software == 'nuke': self.wgSave.btnSnapshotRender.hide()

        self.wgHeader.layMain.addWidget(self.wgSave, 0, 0)

        self.wgSave.show()
        LOG.info('START : arSave')
Exemplo n.º 3
0
    def fill_meta(self):
        self.wgPreview.lblTitle.setText(self.file_name)
        self.wgPreview.lblDate.setText(
            str(
                datetime.datetime.fromtimestamp(
                    os.path.getmtime(self.load_file))).split(".")[0])
        self.wgPreview.lblSize.setText(
            str("{0:.2f}".format(
                os.path.getsize(self.load_file) / (1024 * 1024.0)) + " MB"))

        self.extension = self.wgLoad.lstFiles.currentItem().text().split(
            '.')[-1]
        if self.extension in self.data['script'][TITLE].get('img'):
            software_img = "software/img"
        else:
            software_img = "software/" + self.software_format[self.extension]
        if self.file_data and self.file_data.has_key(
                self.wgLoad.lstFiles.currentItem().text()):
            current_file = self.file_data[
                self.wgLoad.lstFiles.currentItem().text()]
            comment = current_file.get('comment')
            user_id = current_file.get('user')
        else:
            comment = ''
            user_id = 'unknown'

        self.wgPreview.edtComment.setPlainText(comment)
        self.wgPreview.lblUser.setText(user_id)
        self.wgPreview.lblSoftwareIcon.setPixmap(
            QtGui.QPixmap(QtGui.QImage(libData.get_img_path(software_img))))
        self.wgPreview.lblUserIcon.setPixmap(
            QtGui.QPixmap(QtGui.QImage(libData.get_img_path('user/' +
                                                            user_id))))
Exemplo n.º 4
0
    def __init__(self, notice):
        ui_path = ('/').join([os.path.dirname(__file__), 'ui', TITLE + '.ui'])
        self.wgNotice = QtCompat.loadUi(ui_path)
        self.notice = notice

        self.wgNotice.btnCancel.clicked.connect(self.press_btnCancel)
        self.wgNotice.btnPreviewImg.clicked.connect(self.press_btnPreviewImg)

        self.wgNotice.edtTitle.setText(self.notice.title)
        self.wgNotice.edtMsg.setPlainText(self.notice.msg)

        self.wgNotice.btnUser.setIcon(
            QtGui.QPixmap(
                QtGui.QImage(libData.get_img_path('user/' +
                                                  self.notice.user))))
        self.wgNotice.btnUser.setToolTip(
            ('').join([self.notice.user, '\n', self.notice.time]))
        self.wgNotice.btnUser.clicked.connect(libFunc.get_help)

        self.wgNotice.edtTitle.setText(self.notice.title)

        self.open_link = self.notice.img_link
        self.wgNotice.btnPreviewImg.setToolTip(self.open_link)

        if not os.path.exists(self.notice.img):
            self.notice.img = libData.get_img_path(self.notice.img)
        self.wgNotice.btnPreviewImg.setIcon(
            QtGui.QPixmap(QtGui.QImage(self.notice.img)))
        if self.notice.func: self.wgNotice.lblFunc.setText(self.notice.func)
        else: self.wgNotice.lblFunc.hide()
        # self.wgNotice.btnCancel.hide()

        # WIDGET : delete border & always on top
        self.wgNotice.setWindowFlags(QtCore.Qt.CustomizeWindowHint
                                     | QtCore.Qt.FramelessWindowHint
                                     | QtCore.Qt.Tool
                                     | QtCore.Qt.WindowStaysOnTopHint)

        # WIDGET : move to right low corner
        resolution = QtWidgets.QDesktopWidget().screenGeometry()
        self.wgNotice.move(resolution.width() - self.wgNotice.width() - 5,
                           resolution.height() - self.wgNotice.height() - 45)
        self.wgNotice.setWindowOpacity(0.9)

        # round edges
        path = QtGui.QPainterPath()
        path.addRoundedRect(QtCore.QRectF(self.wgNotice.rect()), 3.0, 3.0)
        self.wgNotice.setMask(QtGui.QRegion(path.toFillPolygon().toPolygon()))

        self.wgNotice.show()

        self.start_timer()
Exemplo n.º 5
0
    def __init__(self, new_file=True):
        super(ArSaveAs, self).__init__()

        path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + ".ui"])
        self.wgSaveAs = QtCompat.loadUi(path_ui)

        self.all_task = '<all tasks>'

        self.new_file = new_file
        self.save_file = ''
        self.save_dir = self.data['project']['path']
        self.software = Tank().software.software
        self.inputs = [
            self.wgSaveAs.cbxScene, self.wgSaveAs.cbxSet,
            self.wgSaveAs.cbxAsset, self.wgSaveAs.cbxTask
        ]

        self.wgHeader.btnOption.hide()
        self.wgHeader.cbxAdd.hide()
        self.wgHeader.setWindowIcon(
            QtGui.QIcon(libData.get_img_path("btn/btnSave48")))

        btn_title = TITLE if self.new_file else 'Create New Folder'
        self.wgHeader.setWindowTitle(btn_title)
        btn_title = 'Save As' if self.new_file else 'Create'
        self.wgHeader.btnAccept.setText(btn_title)
        self.wgHeader.layMain.addWidget(self.wgSaveAs, 0, 0)
        self.resize_widget(self.wgSaveAs)

        # self.wgSaveAs : always on top
        self.wgSaveAs.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

        self.setup()
        self.wgSaveAs.show()
        LOG.info('START : arSaveAs')
Exemplo n.º 6
0
    def add_menu(self):
        path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + "_menu.ui"])
        self.wgMenu = QtCompat.loadUi(path_ui)
        self.wgHeader.layMain.addWidget(self.wgMenu, 1, 1)

        menu01_img   = ["btn/btnWrite48", "btn/btnArrowRight48", "btn/btnHoneypot48", "btn/btnLog48", "btn/btnInboxE48", "user/default"]
        menu01_items = [self.wgMenu.btnMenu01_item01, self.wgMenu.btnMenu01_item02, self.wgMenu.btnMenu01_item03,
                        self.wgMenu.btnMenu01_item04, self.wgMenu.btnMenu01_item05, self.wgMenu.btnMenu01_item06]

        self.select_menu = {
            "data"     : self.wgMenu.btnMenu01_item01,
            "path"     : self.wgMenu.btnMenu01_item02,
            "advanced" : self.wgMenu.btnMenu01_item03,
            "log"      : self.wgMenu.btnMenu01_item04,
            "report"   : self.wgMenu.btnMenu01_item05,
            "user"     : self.wgMenu.btnMenu01_item06
        }

        for index, each_item in enumerate(menu01_items):
            each_item.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path(menu01_img[index]))))
            # each_item.clicked.connect(lambda: self.press_btnMenu("settings"))

        self.wgMenu.btnMenu01_item01.clicked.connect(lambda: self.press_btnMenu("data"))
        self.wgMenu.btnMenu01_item02.clicked.connect(lambda: self.press_btnMenu("path"))
        self.wgMenu.btnMenu01_item03.clicked.connect(lambda: self.press_btnMenu("advanced"))
        self.wgMenu.btnMenu01_item04.clicked.connect(lambda: self.press_btnMenu("log"))
        self.wgMenu.btnMenu01_item05.clicked.connect(lambda: self.press_btnMenu("report"))
        self.wgMenu.btnMenu01_item06.clicked.connect(lambda: self.press_btnMenu("user"))

        menu01_items[0].click()
Exemplo n.º 7
0
    def __init__(self):
        super(ArLoad, self).__init__()

        path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + ".ui"])
        self.wgLoad = QtCompat.loadUi(path_ui)

        self.load_dir = ''
        self.load_file = ''

        self.software_format = {
            y: x.upper()
            for x, y in self.data['software']['EXTENSION'].items()
        }
        self.software_keys = list(self.software_format.keys())

        self.wgLoad.lstScene.itemSelectionChanged.connect(self.change_lstScene)
        self.wgLoad.lstSet.itemSelectionChanged.connect(self.change_lstSet)
        self.wgLoad.lstAsset.itemSelectionChanged.connect(self.change_lstAsset)
        self.wgLoad.lstTask.itemSelectionChanged.connect(self.change_lstTask)
        self.wgLoad.lstStatus.itemSelectionChanged.connect(
            self.change_lstStatus)
        self.wgLoad.lstFiles.itemSelectionChanged.connect(self.change_lstFiles)

        self.wgHeader.btnOption.clicked.connect(self.press_menuItemAddFolder)
        self.wgLoad.lstFiles.itemDoubleClicked.connect(self.press_btnAccept)

        self.wgLoad.lstScene.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.wgLoad.lstScene.customContextMenuRequested.connect(
            lambda: self.press_openMenu(self.wgLoad.lstScene))
        self.wgLoad.lstSet.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.wgLoad.lstSet.customContextMenuRequested.connect(
            lambda: self.press_openMenu(self.wgLoad.lstSet))
        self.wgLoad.lstAsset.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.wgLoad.lstAsset.customContextMenuRequested.connect(
            lambda: self.press_openMenu(self.wgLoad.lstAsset))
        self.wgLoad.lstTask.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.wgLoad.lstTask.customContextMenuRequested.connect(
            lambda: self.press_openMenu(self.wgLoad.lstTask))
        self.wgLoad.lstFiles.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.wgLoad.lstFiles.customContextMenuRequested.connect(
            lambda: self.press_openMenu(self.wgLoad.lstFiles))

        self.wgLoad.lstAsset.hide()
        self.wgHeader.cbxAdd.hide()

        self.add_preview(self.wgLoad.layMeta)
        self.wgHeader.layMain.addWidget(self.wgLoad, 0, 0)

        self.wgPreview.wgSnapshot.hide()
        self.wgHeader.setWindowTitle(TITLE)
        self.wgHeader.btnAccept.setText('Load')
        self.wgHeader.btnOption.setText('Create')
        self.wgHeader.setWindowIcon(
            QtGui.QIcon(libData.get_img_path("btn/btnLoad48")))

        self.setup()

        self.resize_widget(self.wgLoad)
        self.wgLoad.show()
        LOG.info('START : ArLoad')
Exemplo n.º 8
0
    def change_lstFiles(self):
        self.extension = self.wgLoad.lstFiles.currentItem().text().split(
            '.')[-1]
        self.file_name = self.wgLoad.lstFiles.currentItem().text().split(
            '.')[0]

        if self.extension in self.data['script'][TITLE]['img']:
            self.preview_img_path = self.file_dir + '/' + self.wgLoad.lstFiles.currentItem(
            ).text()
        else:
            self.preview_img_path = self.file_dir + '/' + libData.META_FOLDER + '/' + self.file_name + libData.THUMBS_FORMAT

        self.load_file = self.file_dir + '/' + self.wgLoad.lstFiles.currentItem(
        ).text()

        if os.path.exists(self.preview_img_path):
            self.wgPreview.btnPreviewImg.setIcon(
                QtGui.QPixmap(QtGui.QImage(self.preview_img_path)))
        else:
            self.wgPreview.btnPreviewImg.setIcon(
                QtGui.QPixmap(QtGui.QImage(
                    libData.get_img_path("lbl/default"))))

        self.set_open_folder(self.file_dir)

        if os.path.exists(self.load_file): self.fill_meta()
        else: self.clear_meta()
Exemplo n.º 9
0
def copy_splash():
    splash_path = libData.get_img_path("software/max/splash.bmp")
    max_path = os.path.dirname(Tank().software.data['path'])

    if not os.path.exists(max_path + '/splash.bmp'):
        try:
            shutil.copy(splash_path, max_path)
        except:
            LOG.error('FAILED to copy splash: '.format(max_path),
                      exc_info=True)
Exemplo n.º 10
0
    def set_status(self, msg = '', msg_type = 0):
        # 0 - neutral - blue
        # 1 - done    - green
        # 2 - warning - yellow
        # 3 - failed  - red

        if msg: self.set_comment(msg)
        self.wgHeader.lblCommentImg.setPixmap(QtGui.QPixmap(QtGui.QImage(libData.get_img_path(self.data['script'][TITLE]['progress_img'][msg_type]))))

        if not msg_type:
            template_css = """QProgressBar::chunk { background: %s; }"""
            css = template_css % self.data['script'][TITLE]['progress_color'][msg_type]
            self.wgHeader.prbStatus.setStyleSheet(css)
            self.set_progress(100)
Exemplo n.º 11
0
    def __init__(self):
        path_ui = ("/").join([os.path.dirname(__file__), "ui", TITLE + ".ui"])
        self.wgHeader = QtCompat.loadUi(path_ui)

        # VAR
        # self.monitor_res  = QtGui.QDesktopWidget().screenGeometry()
        # self.monitor_size = QtCore.QSize(self.monitor_res.width(), self.monitor_res.height())

        self.open_path = ""
        self.preview_img_path = ''
        User().create()

        self.wgHeader.setWindowIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path("btn/btnProject48"))))

        # BUTTONS ICONS
        self.wgHeader.btnReport.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path("btn/btnReport48"))))
        self.wgHeader.btnHelp.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path("btn/default"))))
        self.wgHeader.btnOpenFolder.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path("btn/btnFolder48"))))
        self.wgHeader.btnUser.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path("user/default")))) # current user
        self.wgHeader.btnUser.setToolTip(("").join(['<html><head/><body><p><span style=" font-weight:600;">',
                                                    User().name, '</span><br>',
                                                    User().rights, '<br>[open user folder]</p></body></html>']))

        self.wgHeader.btnProject.setIcon(QtGui.QPixmap(QtGui.QImage(libData.get_img_path('btn/btnProject48')))) # current user
        self.wgHeader.btnProject.setToolTip(os.environ['PROJECT_NAME'] + '\n[open project folder]')

        # SIGNAL
        self.wgHeader.btnAccept.clicked.connect(self.press_btnAccept)
        self.wgHeader.btnAccept.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.wgHeader.btnOption.clicked.connect(self.press_btnOption)

        self.wgHeader.btnOpenFolder.clicked.connect(self.press_btnOpenFolder)
        self.wgHeader.btnUser.clicked.connect(self.press_btnUser)
        self.wgHeader.btnProject.clicked.connect(self.press_btnProject)
        self.wgHeader.btnReport.clicked.connect(self.press_btnReport)
        self.wgHeader.btnHelp.clicked.connect(self.press_btnHelp)

        # SETUP
        self.refresh_data()
        self.set_status()
        self.set_open_folder()
        self.wgHeader.edtComment.setText('')
        self.wgHeader.setWindowIcon(QtGui.QIcon(libData.get_img_path("btn/program")))
        #self.add_preview(self.wgHeader.layMain)
        #self.add_menu()

        self.wgHeader.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        # self.wgHeader.setWindowFlags(QtCore.Qt.CustomizeWindowHint | QtCore.Qt.FramelessWindowHint) # | QtCore.Qt.Tool | QtCore.Qt.WindowStaysOnTopHint)
        self.wgHeader.show()
Exemplo n.º 12
0
    def __init__(self, parent=None):
        QtGui.QSystemTrayIcon.__init__(self, parent)
        #self.activated.connect(self.showMainWidget)
        self.setIcon(QtGui.QIcon(libData.get_img_path('program/default')))

        self.parent = parent
        menu = QtGui.QMenu()
        self.user = users.User()

        self.config_data = libData.get_data()
        menu.setStyleSheet(self.config_data['style']['arDesktop']['menu'])

        # ADMIN UI
        if self.user.is_admin:
            adminMenu = QtGui.QMenu('Admin')
            adminMenu.setStyleSheet(
                self.config_data['style']['arDesktop']['menu'])
            menu.addMenu(adminMenu)

            menuItem = adminMenu.addAction(
                QtGui.QIcon(libData.get_img_path('btn/btnLogProjekt48')),
                'Project Data')
            QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                                   self.press_btnOpenProjectLog)
            menuItem = adminMenu.addAction(
                QtGui.QIcon(libData.get_img_path('btn/btnLogLocal48')),
                'User Data')
            QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                                   self.press_btnOpenLocalLog)

            adminMenu.addSeparator()

            menuItem = adminMenu.addAction(
                QtGui.QIcon(libData.get_img_path('btn/btnProject48')),
                'Reminder')
            QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                                   self.press_btnWriteReminder)

            menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('user/default')), self.user.name)
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_btnShowUserData)

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('project/default')),
            self.config_data['project']['name'])
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_btnOpenProjectPath)

        menu.addSeparator()

        # menuItem = menu.addAction(QtGui.QIcon(libData.get_img_path('btn/btnProject48')), 'Settings')
        # QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'), self.press_btnProject)

        # menu.addSeparator()

        subMenu = QtGui.QMenu('Software')
        subMenu.setStyleSheet(self.config_data['style']['arDesktop']['menu'])
        menu.addMenu(subMenu)

        menuItem = subMenu.addAction(
            QtGui.QIcon(libData.get_img_path('program/maya')), 'Maya')
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_btnOpenMaya)
        menuItem = subMenu.addAction(
            QtGui.QIcon(libData.get_img_path('program/nuke')), 'Nuke')
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_btnOpenNuke)
        # menuItem = subMenu.addAction(QtGui.QIcon(libData.get_img_path('program/houdini')), 'Houdini')
        # QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'), self.press_btnOpenHoudini)

        menu.addSeparator()

        # menuItem = menu.addAction(QtGui.QIcon(libData.get_img_path('btn/btnReport48')), 'Report')
        # QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'), self.press_btnReport)
        # self.setContextMenu(menu)
        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnHelp48')), 'Help')
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_btnHelp)
        self.setContextMenu(menu)

        menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnDenial48')), 'Quit')
        QtCore.QObject.connect(menuItem, QtCore.SIGNAL('triggered()'),
                               self.press_closeStartup)
        self.setContextMenu(menu)
Exemplo n.º 13
0
    def __init__(self, parent=None):
        QtWidgets.QSystemTrayIcon.__init__(self, parent)
        # self.activated.connect(self.showMainWidget)
        self.setIcon(QtGui.QIcon(libData.get_img_path('software/default')))

        self.parent = parent

        Tank().init_os()
        self.data = Tank().data
        self.user = Tank().user
        self.project_data = Tank().data['project']

        menu = QtWidgets.QMenu()
        menu.setStyleSheet(self.data['script'][TITLE]['style'])

        # ADMIN UI
        if True:  # self.user.is_admin:
            adminMenu = QtWidgets.QMenu('Admin')
            adminMenu.setStyleSheet(self.data['script'][TITLE]['style'])
            menu.addMenu(adminMenu)

            menuItem = adminMenu.addAction(
                QtGui.QIcon(libData.get_img_path('btn/btnFolder48')),
                'Open Project Data')
            menuItem.triggered.connect(self.press_btnOpenProjectLog)
            menuItem = adminMenu.addAction(
                QtGui.QIcon(libData.get_img_path('btn/btnFolder48')),
                'Open User Data')
            menuItem.triggered.connect(self.press_btnOpenLocalLog)

            menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('user/' + self.user.id)),
            self.user.id)
        menuItem.triggered.connect(self.press_btnShowUserData)

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('project/default')),
            self.data['project']['name'])
        menuItem.triggered.connect(self.press_btnOpenProjectPath)

        menu.addSeparator()

        subMenu = QtWidgets.QMenu('Software')
        subMenu.setStyleSheet(self.data['script'][TITLE]['style'])
        menu.addMenu(subMenu)

        for soft, soft_func in self.data['script'][TITLE]['SOFTWARE'].items():
            menuItem = subMenu.addAction(
                QtGui.QIcon(libData.get_img_path('software/' + soft)),
                soft.title())
            menuItem.triggered.connect(eval(soft_func))

        menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnFolderSearchGet48')),
            'Load')
        menuItem.triggered.connect(self.press_btnLoad)

        menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnReport48')), 'Report')
        menuItem.triggered.connect(self.press_btnReport)

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnHelp48')), 'Help')
        menuItem.triggered.connect(self.press_btnHelp)

        menu.addSeparator()

        menuItem = menu.addAction(
            QtGui.QIcon(libData.get_img_path('btn/btnDenial48')), 'Quit')
        menuItem.triggered.connect(self.press_closeStartup)

        self.setContextMenu(menu)