def addAction( self, menuname, separator, actionname, function, iconname = None): if separator: self.menu[menuname].addSeparator() if iconname is None: iconname = actionname.lower().replace(' ','_').replace('.','') iconpath = cgruutils.getIconFileName( iconname) action = QtGui.QAction( actionname, self) if iconpath is not None: action.setIcon( QtGui.QIcon( iconpath)) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), function) self.menu[menuname].addAction( action)
def addMenu( self, parentmenu, menuname, iconname = None): if menuname in self.menu: return False if iconname is None: iconname = menuname.lower().replace(' ','_').replace('.','') iconpath = cgruutils.getIconFileName( iconname) if iconpath is not None: self.menu[menuname] = parentmenu.addMenu( QtGui.QIcon( iconpath), menuname) else: self.menu[menuname] = parentmenu.addMenu( menuname) return True
def __init__(self, parent=None): QtGui.QTextEdit.__init__(self, parent) self.setWindowTitle( 'Configuration: %s version %s' % ( cgruconfig.VARS['company'], cgruconfig.VARS['CGRU_VERSION'] ) ) self.ftitle = QtGui.QTextCharFormat() self.ftitle.setFontWeight(QtGui.QFont.Bold) self.ftitle.setFontItalic(True) self.fname = QtGui.QTextCharFormat() self.fname.setFontWeight(QtGui.QFont.Bold) self.fvalue = QtGui.QTextCharFormat() self.fundefined = QtGui.QTextCharFormat() self.fundefined.setFontItalic(True) self.textCursor().insertText('Python:\n', self.ftitle) self.appendVar(cgrupyqt.PythonQtType, str(cgrupyqt.PythonQt)) self.appendVar('sys.prefix', sys.prefix) self.appendVar('Executable', os.getenv('CGRU_PYTHONEXE')) self.appendVar('Version', sys.version) self.textCursor().insertText('\nVariables:\n', self.ftitle) self.appendVars(cgruconfig.VARS) self.textCursor().insertText('\nAFANASY Environment:\n', self.ftitle) self.appendEnvVar('AF_ROOT') self.appendEnvVar('AF_RENDER_CMD') self.appendEnvVar('AF_WATCH_CMD') self.textCursor().insertText('\nPython Environment:\n', self.ftitle) self.appendEnvVar('PYTHONHOME') self.appendEnvVar('PYTHONPATH') self.appendEnvVar('CGRU_PYTHON') self.appendEnvVar('AF_PYTHON') self.textCursor().insertText('\nSystem Environment:\n', self.ftitle) self.appendEnvVar('PATH') self.appendVar('PWD', os.getcwd()) for afile in cgruconfig.VARS['filenames']: self.appendConfigFile(afile) # Set window icon: iconpath = cgruutils.getIconFileName('info') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) self.resize(self.viewport().size()) self.moveCursor(QtGui.QTextCursor.Start) self.setReadOnly(True) self.show()
def __init__(self, parent, name, command, iconpath=None): QtWidgets.QAction.__init__(self, name, parent) if iconpath is not None: iconpath = cgruutils.getIconFileName(iconpath) if iconpath is not None: self.setIcon(QtGui.QIcon(iconpath)) else: print('WARNING: Icon "%s" does not exist.' % iconpath) self.name = name self.cmd = command
def __init__( self, parent, name, command, iconpath = None): QtGui.QAction.__init__( self, name, parent) if iconpath is not None: iconpath = cgruutils.getIconFileName( iconpath) if iconpath is not None: self.setIcon( QtGui.QIcon( iconpath)) else: print('WARNING: Icon "%s" does not exist.' % iconpath) self.name = name self.cmd = command
def addMenu(self, parentmenu, menuname, iconname=None): if menuname in self.menu: return False if iconname is None: iconname = menuname.lower().replace(' ', '_').replace('.', '') iconpath = cgruutils.getIconFileName(iconname) if iconpath is not None: self.menu[menuname] = parentmenu.addMenu(QtGui.QIcon(iconpath), menuname) else: self.menu[menuname] = parentmenu.addMenu(menuname) return True
def __init__(self, parent=None): QtWidgets.QTextEdit.__init__(self, parent) self.setWindowTitle( 'Configuration: %s version %s' % (cgruconfig.VARS['company'], cgruconfig.VARS['CGRU_VERSION'])) self.ftitle = QtGui.QTextCharFormat() self.ftitle.setFontWeight(QtGui.QFont.Bold) self.ftitle.setFontItalic(True) self.fname = QtGui.QTextCharFormat() self.fname.setFontWeight(QtGui.QFont.Bold) self.fvalue = QtGui.QTextCharFormat() self.fundefined = QtGui.QTextCharFormat() self.fundefined.setFontItalic(True) self.appendVar('Platform', ",".join(cgruconfig.VARS['platform'])) self.textCursor().insertText('\nPython:\n', self.ftitle) self.appendVar( 'Qt', '%s %s (%s)' % (Qt.__qt_version__, Qt.__binding__, Qt.__binding_version__)) self.appendVar('sys.prefix', sys.prefix) self.appendVar('Executable', os.getenv('CGRU_PYTHONEXE')) self.appendVar('Version', sys.version) self.textCursor().insertText('\nEnvironment:\n', self.ftitle) self.appendEnvVar('PYTHONHOME') self.appendEnvVar('PYTHONPATH') self.appendEnvVar('CGRU_PYTHON') self.appendEnvVar('AF_ROOT') self.appendEnvVar('AF_PYTHON') self.appendEnvVar('AF_RENDER_CMD') self.appendEnvVar('AF_WATCH_CMD') self.appendVar('PWD', os.getcwd()) self.appendEnvVar('PATH') self.textCursor().insertText('\nVariables:\n', self.ftitle) self.appendVars(cgruconfig.VARS) for afile in cgruconfig.VARS['filenames']: self.appendConfigFile(afile) # Set window icon: iconpath = cgruutils.getIconFileName('info') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) self.resize(self.viewport().size()) self.moveCursor(QtGui.QTextCursor.Start) self.setReadOnly(True) self.show()
def addAction(self, menuname, separator, actionname, function, iconname=None): if separator: self.menu[menuname].addSeparator() if iconname is None: iconname = actionname.lower().replace(' ', '_').replace('.', '') iconpath = cgruutils.getIconFileName(iconname) action = QtGui.QAction(actionname, self) if iconpath is not None: action.setIcon(QtGui.QIcon(iconpath)) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), function) self.menu[menuname].addAction(action)
def initUI(self): # Window Title self.setWindowTitle('Pool Server Configurator CGRU %s' % os.getenv('CGRU_VERSION', '')) # Window icon iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) self.ipLabel = QtWidgets.QLabel("Binding IP:") self.ipLineEdit = QtGui.QLineEdit() self.ipLineEdit.setPlaceholderText("If empty localhost is set.") self.ipLayout = QtWidgets.QHBoxLayout() self.ipLayout.addWidget(self.ipLabel) self.ipLayout.addWidget(self.ipLineEdit) self.portLabel = QtWidgets.QLabel("Port:") self.portSpinBox = QtGui.QSpinBox() self.portSpinBox.setMinimum(0) self.portSpinBox.setMaximum(65535) self.portLayout = QtWidgets.QHBoxLayout() self.portLayout.addWidget(self.portLabel) self.portLayout.addWidget(self.portSpinBox) self.maxClientsLabel = QtWidgets.QLabel("Max. Clients: (Renderfarm clients.)") self.maxClientsSpinBox = QtGui.QSpinBox() self.maxClientsSpinBox.setMinimum(0) self.maxClientsSpinBox.setMaximum(100000) self.maxClientsLayout = QtWidgets.QHBoxLayout() self.maxClientsLayout.addWidget(self.maxClientsLabel) self.maxClientsLayout.addWidget(self.maxClientsSpinBox) self.saveButton = QtWidgets.QPushButton("Save") self.saveButton.clicked.connect(self.save) # Top Root Layout self.topLayout = QtWidgets.QVBoxLayout(self) self.topLayout.addLayout(self.ipLayout) self.topLayout.addLayout(self.portLayout) self.topLayout.addLayout(self.maxClientsLayout) self.topLayout.addWidget(self.saveButton)
def initUI(self): # Modality self.setWindowModality(QtCore.Qt.ApplicationModal) # Window Title self.setWindowTitle("Scanning network for hosts ...") # Window icon iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) # ProgessBar self.progressBar = QtGui.QProgressBar() self.progressBar.minimum = 1 self.progressBar.maximum = 100 # Root node. self.topLayout = QtWidgets.QHBoxLayout(self) self.topLayout.addWidget(self.progressBar)
def __init__( self, parent = None): QtGui.QSystemTrayIcon.__init__( self, parent) self.parent = parent # Menu: self.menu = dict() self.menu['menu'] = QtGui.QMenu() # Update item only if CGRU_UPDATE_CMD defined: if cgruconfig.VARS['CGRU_UPDATE_CMD'] is not None: action = QtGui.QAction('Update', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.update) self.menu['menu'].addAction( action) self.menu['menu'].addSeparator() # Load menu: menu_path = os.path.join( os.path.join( cgruconfig.VARS['CGRU_LOCATION'],'start')) menu_paths = cgruconfig.VARS['menu_path'] if menu_paths is None: menu_paths = menu_path if menu_paths.find(';') != -1: menu_paths = menu_paths.split(';') elif sys.platform.find('win') == -1: menu_paths = menu_paths.split(':') else: menu_paths = [menu_paths] if not menu_path in menu_paths: menu_paths.append( menu_path) for menu_path in menu_paths: if not os.path.isdir( menu_path): continue for dirpath, dirnames, filenames in os.walk( menu_path, True, None, True): if dirpath.find('/.') != -1: continue if dirpath.find('\\.') != -1: continue menuname = os.path.basename( dirpath) if menuname == os.path.basename( menu_path): menuname = 'menu' else: self.addMenu( self.menu['menu'], menuname) filenames.sort() was_separator = True for filename in filenames: if filename[0] == '.' or filename[0] == '_': continue if sys.platform[:3] == 'win': if filename[-4:] != '.cmd': continue itemname = filename[:-4] else: if filename[-3:] != '.sh': continue itemname = filename[:-3] filename = os.path.join( dirpath, filename) file = open( filename,'r') lines = file.readlines() file.close() iconpath = None separator = False for line in lines: if line.find('Name=') != -1: itemname = line.split('Name=')[-1].strip() if line.find('Icon=') != -1: iconpath = line.split('Icon=')[-1].strip() if line.find('Separator') != -1: separator = True if separator: if not was_separator: self.menu[menuname].addSeparator() was_separator = True else: was_separator = False action = ActionCommand( self, itemname, filename, iconpath) self.menu[menuname].addAction( action) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), action.runCommand) if separator: self.menu[menuname].addSeparator() # Add permanent items to 'Afanasy': if not self.addMenu( self.menu['menu'], 'AFANASY'): self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Web GUI', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.afwebgui) self.menu['AFANASY'].addAction( action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Set nibmy', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), nimby.setnimby) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Set NIMBY', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), nimby.setNIMBY) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Set Free', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), nimby.setFree) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Eject Tasks', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), nimby.ejectTasks) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Eject Not My Tasks', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), nimby.ejectNotMyTasks) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Render Info', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), self.renderInfo) self.menu['AFANASY'].addAction( action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Nimby Schedule...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), self.editNimby) self.menu['AFANASY'].addAction( action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Set Server...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.setAFANASYServer) self.menu['AFANASY'].addAction( action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Exit Render', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.exitRender) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Exit Watch', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.exitMonitor) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Exit Talk', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.exitTalk) self.menu['AFANASY'].addAction( action) action = QtGui.QAction('Exit All Clients', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.exitClients) self.menu['AFANASY'].addAction( action) self.menu['menu'].addSeparator() # Add Software menu if it was not created by custom files: if not 'Software' in self.menu: self.addMenu( self.menu['menu'], 'Software') self.menu['menu'].addSeparator() action = QtGui.QAction( QtGui.QIcon( cgruutils.getIconFileName('folder')), '[ browse ]', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), software.browse) self.menu['Software'].addAction( action) for soft in software.Names: icon = software.getIcon( soft) if icon is None: action = QtGui.QAction( soft, self) else: action = QtGui.QAction( icon, soft, self) eval("QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), software.start%s)" % soft) self.menu['Software'].addAction( action) # Software setup: self.menu['Setup Soft'] = QtGui.QMenu('Setup Soft') self.menu['Software'].addMenu( self.menu['Setup Soft']) for soft in software.Names: action = QtGui.QAction( soft, self) eval("QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), software.locate%s)" % soft) self.menu['Setup Soft'].addAction( action) # Software examples: self.menu['Examples'] = QtGui.QMenu('Examples') self.menu['Software'].addMenu( self.menu['Examples']) for soft in software.Names: action = QtGui.QAction( soft, self) eval("QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), software.example%s)" % soft) self.menu['Examples'].addAction( action) # Add permanent items to 'Configure': if not self.addMenu( self.menu['menu'], 'Configure'): self.menu['Configure'].addSeparator() action = QtGui.QAction('Reload Config', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.confReload) self.menu['Configure'].addAction( action) action = QtGui.QAction('Set Docs URL...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.setDocsURL) self.menu['Configure'].addAction( action) action = QtGui.QAction('Edit Config...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.editCGRUConfig) self.menu['Configure'].addAction( action) action = QtGui.QAction('Set Web Browser...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.setWebBrowser) self.menu['Configure'].addAction( action) action = QtGui.QAction('Set Text Editor...', self) QtCore.QObject.connect( action, QtCore.SIGNAL('triggered()'), cmd.setTextEditor) self.menu['Configure'].addAction( action) self.addAction('menu', True,'Show Info...', self.cgruInfo,'info') self.addAction('menu', True,'Documentation', cmd.cgruDocs) self.addAction('menu', True,'Restart', cmd.restart) self.addAction('menu', False,'Quit && Exit Clients', cmd.quitExitClients) self.addAction('menu', False,'Quit', cmd.quit) self.setContextMenu( self.menu['menu']) # Prepare Icons: self.icons = dict() icon_filename = cgruconfig.VARS['tray_icon'] if icon_filename is None: icon_filename = 'keeper' icon_filename = cgruutils.getIconFileName( icon_filename) self.icon_epmty = QtGui.QPixmap( icon_filename) self.icons['empty'] = QtGui.QIcon( self.icon_epmty) self.makeIcon('offline_free', online=False, nimby=False, busy=False) self.makeIcon('online_free', online=True, nimby=False, busy=False) self.makeIcon('offline_nimby', online=False, nimby=True, busy=False) self.makeIcon('online_nimby', online=True, nimby=True, busy=False) self.makeIcon('offline_free_busy', online=False, nimby=False, busy=True ) self.makeIcon('online_free_busy', online=True, nimby=False, busy=True ) self.makeIcon('offline_nimby_busy', online=False, nimby=True, busy=True ) self.makeIcon('online_nimby_busy', online=True, nimby=True, busy=True ) # Decorate and show: self.showIcon() self.setToolTip( cgruconfig.VARS['company'].upper() + ' Keeper ' + os.getenv('CGRU_VERSION', '')) QtCore.QObject.connect( self, QtCore.SIGNAL('activated( QSystemTrayIcon::ActivationReason)'), self.activated_slot) self.show()
def initUI(self): # Window Title self.setWindowTitle('Afanasy Pool Manager CGRU %s' % os.getenv('CGRU_VERSION', '')) # Window icon iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) # Pools List self.poolsLabel = QtWidgets.QLabel("Pools") self.poolsList = QtWidgets.QListWidget() self.poolsList.itemClicked.connect(self.onPoolClicked) # Create Pool Button self.createPoolButton = QtWidgets.QPushButton("Create") self.createPoolButton.clicked.connect(self.createPool) # Edit Pool Button self.editPoolButton = QtWidgets.QPushButton("Edit") self.editPoolButton.clicked.connect(self.editPool) # Delete Pool Button self.deletePoolButton = QtWidgets.QPushButton("Delete") self.deletePoolButton.clicked.connect(self.deletePool) self.poolsButtonLayout = QtWidgets.QHBoxLayout() self.poolsButtonLayout.addWidget(self.createPoolButton) self.poolsButtonLayout.addWidget(self.editPoolButton) self.poolsButtonLayout.addWidget(self.deletePoolButton) self.poolsLayout = QtWidgets.QVBoxLayout() self.poolsLayout.addWidget(self.poolsLabel) self.poolsLayout.addWidget(self.poolsList) self.poolsLayout.addLayout(self.poolsButtonLayout) # Clients List self.clientsLabel = QtWidgets.QLabel("Clients") self.clientsList = QtWidgets.QListWidget() self.clientsList.itemClicked.connect(self.onClientClicked) # Add Client Button self.addClientButton = QtWidgets.QPushButton("Add Client(s)") self.addClientButton.clicked.connect(self.addClient) # Remove Client Button self.removeClientButton = QtWidgets.QPushButton("Remove Client") self.removeClientButton.clicked.connect(self.removeClient) self.clientsButtonLayout = QtWidgets.QHBoxLayout() self.clientsButtonLayout.addWidget(self.addClientButton) self.clientsButtonLayout.addWidget(self.removeClientButton) self.clientsLayout = QtWidgets.QVBoxLayout() self.clientsLayout.addWidget(self.clientsLabel) self.clientsLayout.addWidget(self.clientsList) self.clientsLayout.addLayout(self.clientsButtonLayout) self.listsLayout = QtWidgets.QHBoxLayout() self.listsLayout.addLayout(self.poolsLayout) self.listsLayout.addLayout(self.clientsLayout) # Top Root Layout self.topLayout = QtWidgets.QVBoxLayout(self) self.topLayout.addLayout(self.listsLayout) # Inits the MenuBar self.initMenuBar() self.initStatusBar() self.loadPools()
def initUI(self): self.setFixedSize(780, 300) self.setWindowModality(QtCore.Qt.ApplicationModal) # Window Title self.setWindowTitle("Add Client(s)") # Window icon iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) # Network Scan List self.networkList = QtWidgets.QListWidget() self.scanNetworkButton = QtWidgets.QPushButton("Scan Network") self.scanNetworkButton.clicked.connect(self.scanNetwork) self.networkLayout = QtWidgets.QVBoxLayout() self.networkLayout.addWidget(self.networkList) self.networkLayout.addWidget(self.scanNetworkButton) self.networkGroupBox = QtWidgets.QGroupBox("Local Network") self.networkGroupBox.setLayout(self.networkLayout) # Add Hostname Button self.addHostnameButton = QtWidgets.QPushButton("(+) Hostname") self.addHostnameButton.clicked.connect(self.addHostname) # Remove Hostname Button self.remHostnameButton = QtWidgets.QPushButton("(-) Hostname") self.remHostnameButton.clicked.connect(self.removeHostname) self.hostnamesButtonsLayout = QtWidgets.QHBoxLayout() self.hostnamesButtonsLayout.addWidget(self.addHostnameButton) self.hostnamesButtonsLayout.addWidget(self.remHostnameButton) # Hostname List self.hostnamesList = QtWidgets.QListWidget() self.hostnamesLayout = QtWidgets.QVBoxLayout() self.hostnamesLayout.addWidget(self.hostnamesList) self.hostnamesLayout.addLayout(self.hostnamesButtonsLayout) self.hostnamesGroupBox = QtWidgets.QGroupBox("Hostnames") self.hostnamesGroupBox.setLayout(self.hostnamesLayout) # Afanasy Clients List self.clientsList = QtWidgets.QListWidget() self.clientsLayout = QtWidgets.QVBoxLayout() self.clientsLayout.addWidget(self.clientsList) self.clientsGroupBox = QtWidgets.QGroupBox("Afanasy Clients") self.clientsGroupBox.setLayout(self.clientsLayout) self.groupBoxesLayout = QtWidgets.QHBoxLayout() self.groupBoxesLayout.addWidget(self.clientsGroupBox) self.groupBoxesLayout.addWidget(self.hostnamesGroupBox) self.groupBoxesLayout.addWidget(self.networkGroupBox) # Save Button self.saveButton = QtWidgets.QPushButton("Save") self.saveButton.clicked.connect(self.save) # Root node self.topLayout = QtWidgets.QVBoxLayout(self) self.topLayout.addLayout(self.groupBoxesLayout) self.topLayout.addWidget(self.saveButton)
def __init__(self): # Main Window QtGui.QWidget.__init__(self) self.constructed = False self.evaluated = False self.output = '' self.setWindowTitle('Afanasy Starter CGRU %s' % os.getenv('CGRU_VERSION', '')) self.fields = dict() self.labels = dict() # Get File Type dependant dicts self.labelNode_name = labelNodeNameDict() self.labelNode_tooltip = labelNodeTooltipsDict() self.labelTake_name = labelTakeNameDict() self.labelTake_tooltip = labelTakeTooltipsDict() # Top level layouts: topLayout = QtGui.QVBoxLayout(self) tabwidget = QtGui.QTabWidget(self) topLayout.addWidget(tabwidget) # General Tab: generalwidget = QtGui.QWidget(self) tabwidget.addTab(generalwidget, 'Scene') generallayout = QtGui.QVBoxLayout(generalwidget) # Job Tab: jobwidget = QtGui.QWidget(self) tabwidget.addTab(jobwidget, 'Job') joblayout = QtGui.QVBoxLayout(jobwidget) # Advanced Tab: auxwidget = QtGui.QWidget(self) tabwidget.addTab(auxwidget, 'Advanced') advlayout = QtGui.QVBoxLayout(auxwidget) # Service Type: lFileType = QtGui.QHBoxLayout() generallayout.addLayout(lFileType) lFileType.addWidget(QtGui.QLabel('Override Service Type:', self)) self.fields['servicetype'] = QtGui.QComboBox(self) lFileType.addWidget(self.fields['servicetype']) QtCore.QObject.connect(self.fields['servicetype'], QtCore.SIGNAL('currentIndexChanged(int)'), self.setFileType) # Scene: lScene = QtGui.QHBoxLayout() generallayout.addLayout(lScene) lScene.addWidget(QtGui.QLabel('File:', self)) self.fields['scenefile'] = QtGui.QLineEdit(Scene, self) lScene.addWidget(self.fields['scenefile']) QtCore.QObject.connect(self.fields['scenefile'], QtCore.SIGNAL('editingFinished()'), self.evaluate) bBrowseScene = QtGui.QPushButton('Browse', self) lScene.addWidget(bBrowseScene) QtCore.QObject.connect(bBrowseScene, QtCore.SIGNAL('pressed()'), self.browseScene) # Working Directory: lWDir = QtGui.QHBoxLayout() generallayout.addLayout(lWDir) lWDir.addWidget(QtGui.QLabel('Working Directory/Project:', self)) self.fields['wdir'] = QtGui.QLineEdit(self) lWDir.addWidget(self.fields['wdir']) QtCore.QObject.connect(self.fields['wdir'], QtCore.SIGNAL('editingFinished()'), self.evaluate) self.fields['scenewdir'] = QtGui.QCheckBox('Use Scene Folder', self) self.fields['scenewdir'].setChecked(True) QtCore.QObject.connect(self.fields['scenewdir'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) lWDir.addWidget(self.fields['scenewdir']) # Output images: lImages = QtGui.QHBoxLayout() generallayout.addLayout(lImages) lImages.addWidget(QtGui.QLabel('Output Images:', self)) self.fields['outimages'] = QtGui.QLineEdit(self) lImages.addWidget(self.fields['outimages']) QtCore.QObject.connect(self.fields['outimages'], QtCore.SIGNAL('editingFinished()'), self.evaluate) lImages.addWidget(QtGui.QLabel('Browse')) bBrowseOutImages = QtGui.QPushButton('File', self) lImages.addWidget(bBrowseOutImages) QtCore.QObject.connect(bBrowseOutImages, QtCore.SIGNAL('pressed()'), self.browseOutImages) bBrowseOutFolder = QtGui.QPushButton('Dir', self) lImages.addWidget(bBrowseOutFolder) QtCore.QObject.connect(bBrowseOutFolder, QtCore.SIGNAL('pressed()'), self.browseOutFolder) # Frames: lFrames = QtGui.QHBoxLayout() generallayout.addLayout(lFrames) lFrames.addWidget(QtGui.QLabel('Frames:', self)) self.fields['framestart'] = QtGui.QSpinBox(self) self.fields['framestart'].setRange(-1000000000, 1000000000) self.fields['framestart'].setValue(1) QtCore.QObject.connect(self.fields['framestart'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lFrames.addWidget(self.fields['framestart']) self.fields['frameend'] = QtGui.QSpinBox(self) self.fields['frameend'].setRange(-1000000000, 1000000000) self.fields['frameend'].setValue(1) QtCore.QObject.connect(self.fields['frameend'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lFrames.addWidget(self.fields['frameend']) lFrames.addWidget(QtGui.QLabel('By:', self)) self.fields['frameby'] = QtGui.QSpinBox(self) lFrames.addWidget(self.fields['frameby']) QtCore.QObject.connect(self.fields['frameby'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) self.fields['frameby'].setRange(1, 1000000000) lFrames.addWidget(QtGui.QLabel('FPT:', self)) self.fields['framespt'] = QtGui.QSpinBox(self) lFrames.addWidget(self.fields['framespt']) QtCore.QObject.connect(self.fields['framespt'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) self.fields['framespt'].setRange(1, 1000000000) self.fields['framespt'].setToolTip('Frames per task.') lFrames.addWidget(QtGui.QLabel('Seq:', self)) self.fields['frameseq'] = QtGui.QSpinBox(self) lFrames.addWidget(self.fields['frameseq']) QtCore.QObject.connect(self.fields['frameseq'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) self.fields['frameseq'].setRange(-1000000, 1000000) self.fields['frameseq'].setValue(1) self.fields['frameseq'].setToolTip('Solve task with this step at first.') # Node / Camera / Take: lNode = QtGui.QHBoxLayout() generallayout.addLayout(lNode) self.labels['node'] = QtGui.QLabel(self.labelNode_name['default']) lNode.addWidget(self.labels['node']) self.labels['node'].setToolTip(self.labelNode_tooltip['default']) self.fields['node'] = QtGui.QLineEdit(self) lNode.addWidget(self.fields['node']) QtCore.QObject.connect(self.fields['node'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.labels['take'] = QtGui.QLabel(self.labelTake_name['default']) lNode.addWidget(self.labels['take']) self.labels['take'].setToolTip(self.labelTake_tooltip['default']) self.fields['take'] = QtGui.QLineEdit(self) lNode.addWidget(self.fields['take']) QtCore.QObject.connect(self.fields['take'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Advanced: # OS Type: osLayout = QtGui.QHBoxLayout() advlayout.addLayout(osLayout) osLayout.addWidget(QtGui.QLabel('Operating System Type:')) self.fields['os'] = QtGui.QLineEdit(self) osLayout.addWidget(self.fields['os']) QtCore.QObject.connect(self.fields['os'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Tasks Command: exelayout = QtGui.QHBoxLayout() advlayout.addLayout(exelayout) label = QtGui.QLabel('Tasks Executable:') label.setToolTip('Override launching programm') exelayout.addWidget(label) self.fields['exec'] = QtGui.QLineEdit(self) exelayout.addWidget(self.fields['exec']) QtCore.QObject.connect(self.fields['exec'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.execBrowseButton = QtGui.QPushButton('Browse', self) exelayout.addWidget(self.execBrowseButton) QtCore.QObject.connect(self.execBrowseButton, QtCore.SIGNAL('pressed()'), self.browseExec) # Extra Arguments: exarglayout = QtGui.QHBoxLayout() advlayout.addLayout(exarglayout) exarglayout.addWidget(QtGui.QLabel('Extra Arguments:')) self.fields['extrargs'] = QtGui.QLineEdit(self) exarglayout.addWidget(self.fields['extrargs']) QtCore.QObject.connect(self.fields['extrargs'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Preview: prvlayout = QtGui.QHBoxLayout() advlayout.addLayout(prvlayout) prvlayout.addWidget(QtGui.QLabel('Preview:')) self.fields['preview'] = QtGui.QLineEdit(self) prvlayout.addWidget(self.fields['preview']) QtCore.QObject.connect(self.fields['preview'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Job: lJobName = QtGui.QHBoxLayout() joblayout.addLayout(lJobName) lJobName.addWidget(QtGui.QLabel('Name:', self)) self.fields['jobname'] = QtGui.QLineEdit(self) lJobName.addWidget(self.fields['jobname']) QtCore.QObject.connect(self.fields['jobname'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.fields['jobnamescene'] = QtGui.QCheckBox('Use Scene Name', self) lJobName.addWidget(self.fields['jobnamescene']) self.fields['jobnamescene'].setChecked(True) QtCore.QObject.connect(self.fields['jobnamescene'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) # Capacity, max run tasks, priority: lCapMax = QtGui.QHBoxLayout() joblayout.addLayout(lCapMax) lCapMax.addWidget(QtGui.QLabel('Capacity:', self)) self.fields['capacity'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['capacity']) self.fields['capacity'].setRange(-1, 1000000) self.fields['capacity'].setValue(-1) QtCore.QObject.connect(self.fields['capacity'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lCapMax.addWidget(QtGui.QLabel('Maximum Running Tasks:', self)) self.fields['maxruntasks'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['maxruntasks']) self.fields['maxruntasks'].setRange(-1, 1000000) self.fields['maxruntasks'].setValue(-1) QtCore.QObject.connect(self.fields['maxruntasks'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lCapMax.addWidget(QtGui.QLabel('Priority:', self)) self.fields['priority'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['priority']) self.fields['priority'].setRange(-1, 250) self.fields['priority'].setValue(-1) QtCore.QObject.connect(self.fields['priority'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) # Depend Masks: lDepends = QtGui.QHBoxLayout() joblayout.addLayout(lDepends) lDepends.addWidget(QtGui.QLabel('Depend Mask:', self)) self.fields['dependmask'] = QtGui.QLineEdit(self) lDepends.addWidget(self.fields['dependmask']) QtCore.QObject.connect(self.fields['dependmask'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) lDepends.addWidget(QtGui.QLabel('Global:', self)) self.fields['dependglobal'] = QtGui.QLineEdit(self) lDepends.addWidget(self.fields['dependglobal']) QtCore.QObject.connect(self.fields['dependglobal'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Host Masks: lHostMasks = QtGui.QHBoxLayout() joblayout.addLayout(lHostMasks) lHostMasks.addWidget(QtGui.QLabel('Hosts Mask:', self)) self.fields['hostsmask'] = QtGui.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsmask']) QtCore.QObject.connect(self.fields['hostsmask'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) lHostMasks.addWidget(QtGui.QLabel('Exclude:', self)) self.fields['hostsexclude'] = QtGui.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsexclude']) QtCore.QObject.connect(self.fields['hostsexclude'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Presets: presetsLayout = QtGui.QHBoxLayout() topLayout.addLayout(presetsLayout) presetsLayout.addWidget(QtGui.QLabel('Recent:', self)) self.cbRecent = QtGui.QComboBox(self) presetsLayout.addWidget(self.cbRecent) self.bBrowseLoad = QtGui.QPushButton('Load', self) presetsLayout.addWidget(self.bBrowseLoad) QtCore.QObject.connect(self.bBrowseLoad, QtCore.SIGNAL('pressed()'), self.browseLoad) self.bBrowseSave = QtGui.QPushButton('Save', self) presetsLayout.addWidget(self.bBrowseSave) QtCore.QObject.connect(self.bBrowseSave, QtCore.SIGNAL('pressed()'), self.browseSave) # Command Field: self.teCmd = QtGui.QTextEdit(self) topLayout.addWidget(self.teCmd) # Buttons: buttonsLayout = QtGui.QHBoxLayout() topLayout.addLayout(buttonsLayout) self.bStart = QtGui.QPushButton('&Start', self) buttonsLayout.addWidget(self.bStart) QtCore.QObject.connect(self.bStart, QtCore.SIGNAL('pressed()'), self.start) self.fields['paused'] = QtGui.QCheckBox('Paused', self) buttonsLayout.addWidget(self.fields['paused']) QtCore.QObject.connect(self.fields['paused'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) self.bRefresh = QtGui.QPushButton('&Refresh', self) buttonsLayout.addWidget(self.bRefresh) QtCore.QObject.connect(self.bRefresh, QtCore.SIGNAL('pressed()'), self.evaluate) self.bQuitSave = QtGui.QPushButton('&Quit&&Store', self) buttonsLayout.addWidget(self.bQuitSave) QtCore.QObject.connect(self.bQuitSave, QtCore.SIGNAL('pressed()'), self.quitsave) self.constructed = True # Set window icon: iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) # Refresh recent: self.refreshRecent() # Load last settings: if not self.load(FileLast): self.evaluate()
def __init__( self, parent = None): QtGui.QWidget.__init__( self, parent) self.setWindowTitle('Edit Nimby') rows = ['day','begin','dash','end','enable','allow','eject'] self.weekdays = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'] self.days = ['mon','tue','wed','thu','fri','sat','sun'] self.time_format = 'hh:mm' self.te_begin = dict() self.te_end = dict() self.cb_enable = dict() self.cb_allow = dict() self.cb_eject = dict() toplayout = QtGui.QVBoxLayout( self) columns = QtGui.QHBoxLayout() toplayout.addLayout( columns) vlayouts = dict() for row in rows: vlayouts[row] = QtGui.QVBoxLayout() columns.addLayout( vlayouts[row]) daynum = 0 for day in self.days: time_begin = '00:00' time_end = '00:00' enable = False allow = True eject = False var = 'nimby_' + day if var in cgruconfig.VARS: line = cgruconfig.VARS[var] if line is None: continue lines = line.split(' ') if len(lines) < 2: continue time_begin = lines[0] time_end = lines[1] enable = False allow = True eject = False if 'nimby' in lines: allow = True if 'NIMBY' in lines: allow = False if 'Eject' in lines: eject = True if 'Enable' in lines: enable = True vlayouts['day'].addWidget( QtGui.QLabel( self.weekdays[daynum], self)) self.te_begin[day] = QtGui.QTimeEdit( QtCore.QTime.fromString( time_begin, self.time_format)) self.te_begin[day].setDisplayFormat( self.time_format) vlayouts['begin'].addWidget( self.te_begin[day]) label = QtGui.QLabel(' - ', self) label.setFixedWidth( 16) vlayouts['dash'].addWidget( label) self.te_end[day] = QtGui.QTimeEdit( QtCore.QTime.fromString( time_end, self.time_format)) self.te_end[day].setDisplayFormat( self.time_format) vlayouts['end'].addWidget( self.te_end[day]) self.cb_enable[day] = QtGui.QCheckBox('Enable', self) self.cb_enable[day].setChecked( enable) vlayouts['enable'].addWidget( self.cb_enable[day]) self.cb_allow[day] = QtGui.QCheckBox('Allow My Jobs', self) self.cb_allow[day].setChecked( allow) vlayouts['allow'].addWidget( self.cb_allow[day]) self.cb_eject[day] = QtGui.QCheckBox('Eject Running Tasks', self) self.cb_eject[day].setChecked( eject) vlayouts['eject'].addWidget( self.cb_eject[day]) daynum += 1 hlayout = QtGui.QHBoxLayout() b_accept = QtGui.QPushButton('Accept', self) b_cancel = QtGui.QPushButton('Cancel', self) hlayout.addWidget( b_accept) hlayout.addWidget( b_cancel) toplayout.addLayout( hlayout) QtCore.QObject.connect( b_accept, QtCore.SIGNAL('pressed()'), self.applySettings) QtCore.QObject.connect( b_cancel, QtCore.SIGNAL('pressed()'), self.close) # Set window icon: iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon( QtGui.QIcon( iconpath)) self.show()
self.leName.textEdited.connect( self.evaluate) self.lePattern = QtWidgets.QLineEdit('((render|workstation)0[1-4]+)', self) layout.addWidget(self.lePattern) self.lePattern.textEdited.connect( self.evaluate) self.leResult = QtWidgets.QLineEdit( 'render01-render04 or workstation01-workstation04', self) layout.addWidget(self.leResult) self.leResult.setReadOnly(True) self.leResult.setAutoFillBackground(True) self.resize(500, 100) self.show() def evaluate(self): rx = QtCore.QRegExp(self.lePattern.text()) if not rx.isValid(): self.leResult.setText('ERROR: %s' % rx.errorString()) return if rx.exactMatch(self.leName.text()): self.leResult.setText('MATCH') else: self.leResult.setText('NOT MATCH') app = QtWidgets.QApplication(sys.argv) app.setWindowIcon( QtGui.QIcon(cgruutils.getIconFileName('regexp'))) dialog = Dialog() app.exec_()
def __init__(self): # Main Window QtWidgets.QWidget.__init__(self) self.constructed = False self.evaluated = False self.output = '' self.setWindowTitle('渲染作业 CGRU %s' % os.getenv('CGRU_VERSION', '')) self.fields = dict() self.labels = dict() # Get File Type dependant dicts self.labelNode_name = labelNodeNameDict() self.labelNode_tooltip = labelNodeTooltipsDict() self.labelTake_name = labelTakeNameDict() self.labelTake_tooltip = labelTakeTooltipsDict() # Top level layouts: topLayout = QtWidgets.QVBoxLayout(self) tabwidget = QtWidgets.QTabWidget(self) topLayout.addWidget(tabwidget) # General Tab: generalwidget = QtWidgets.QWidget(self) #tabwidget.addTab(generalwidget, 'Scene') tabwidget.addTab(generalwidget, '场景') generallayout = QtWidgets.QVBoxLayout(generalwidget) # Job Tab: jobwidget = QtWidgets.QWidget(self) #tabwidget.addTab(jobwidget, 'Job') tabwidget.addTab(jobwidget, '作业设置') joblayout = QtWidgets.QVBoxLayout(jobwidget) # Advanced Tab: auxwidget = QtWidgets.QWidget(self) tabwidget.addTab(auxwidget, 'Advanced') advlayout = QtWidgets.QVBoxLayout(auxwidget) # Service Type: lFileType = QtWidgets.QHBoxLayout() generallayout.addLayout(lFileType) lFileType.addWidget(QtWidgets.QLabel('Override Service Type:', self)) self.fields['servicetype'] = QtWidgets.QComboBox(self) lFileType.addWidget(self.fields['servicetype']) self.fields['servicetype'].currentIndexChanged.connect( self.setFileType) # Scene: lScene = QtWidgets.QHBoxLayout() generallayout.addLayout(lScene) #lScene.addWidget(QtWidgets.QLabel('File:', self)) lScene.addWidget(QtWidgets.QLabel('主文件:', self)) self.fields['scenefile'] = QtWidgets.QLineEdit(Scene, self) lScene.addWidget(self.fields['scenefile']) self.fields['scenefile'].editingFinished.connect( self.evaluate) #bBrowseScene = QtWidgets.QPushButton('Browse', self) bBrowseScene = QtWidgets.QPushButton('浏览', self) lScene.addWidget(bBrowseScene) bBrowseScene.pressed.connect( self.browseScene) # Working Directory: lWDir = QtWidgets.QHBoxLayout() generallayout.addLayout(lWDir) #lWDir.addWidget(QtWidgets.QLabel('Working Directory/Project:', self)) lWDir.addWidget(QtWidgets.QLabel('工程文件:', self)) self.fields['wdir'] = QtWidgets.QLineEdit(self) lWDir.addWidget(self.fields['wdir']) self.fields['wdir'].editingFinished.connect( self.evaluate) self.fields['scenewdir'] = QtWidgets.QCheckBox('Use Scene Folder', self) self.fields['scenewdir'].setChecked(True) self.fields['scenewdir'].stateChanged.connect( self.evaluate) lWDir.addWidget(self.fields['scenewdir']) # Output images: lImages = QtWidgets.QHBoxLayout() generallayout.addLayout(lImages) #lImages.addWidget(QtWidgets.QLabel('Output Images:', self)) lImages.addWidget(QtWidgets.QLabel('输出路径:', self)) self.fields['outimages'] = QtWidgets.QLineEdit(self) lImages.addWidget(self.fields['outimages']) self.fields['outimages'].editingFinished.connect( self.evaluate) #lImages.addWidget(QtWidgets.QLabel('Browse')) lImages.addWidget(QtWidgets.QLabel('浏览')) #bBrowseOutImages = QtWidgets.QPushButton('File', self) bBrowseOutImages = QtWidgets.QPushButton('文件', self) lImages.addWidget(bBrowseOutImages) bBrowseOutImages.pressed.connect( self.browseOutImages) #bBrowseOutFolder = QtWidgets.QPushButton('Dir', self) bBrowseOutFolder = QtWidgets.QPushButton('目录', self) lImages.addWidget(bBrowseOutFolder) bBrowseOutFolder.pressed.connect( self.browseOutFolder) # Frames: lFrames = QtWidgets.QHBoxLayout() generallayout.addLayout(lFrames) #lFrames.addWidget(QtWidgets.QLabel('Frames:', self)) lFrames.addWidget(QtWidgets.QLabel('帧范围:', self)) self.fields['framestart'] = QtWidgets.QSpinBox(self) self.fields['framestart'].setRange(-1000000000, 1000000000) self.fields['framestart'].setValue(1) self.fields['framestart'].valueChanged.connect( self.evaluate) lFrames.addWidget(self.fields['framestart']) self.fields['frameend'] = QtWidgets.QSpinBox(self) self.fields['frameend'].setRange(-1000000000, 1000000000) self.fields['frameend'].setValue(1) self.fields['frameend'].valueChanged.connect( self.evaluate) lFrames.addWidget(self.fields['frameend']) #lFrames.addWidget(QtWidgets.QLabel('By:', self)) lFrames.addWidget(QtWidgets.QLabel('帧步:', self)) self.fields['frameby'] = QtWidgets.QSpinBox(self) lFrames.addWidget(self.fields['frameby']) self.fields['frameby'].valueChanged.connect( self.evaluate) self.fields['frameby'].setRange(1, 1000000000) lFrames.addWidget(QtWidgets.QLabel('FPT:', self)) self.fields['framespt'] = QtWidgets.QSpinBox(self) lFrames.addWidget(self.fields['framespt']) self.fields['framespt'].valueChanged.connect( self.evaluate) self.fields['framespt'].setRange(1, 1000000000) self.fields['framespt'].setToolTip('Frames per task.') lFrames.addWidget(QtWidgets.QLabel('Seq:', self)) self.fields['frameseq'] = QtWidgets.QSpinBox(self) lFrames.addWidget(self.fields['frameseq']) self.fields['frameseq'].valueChanged.connect( self.evaluate) self.fields['frameseq'].setRange(-1000000, 1000000) self.fields['frameseq'].setValue(1) self.fields['frameseq'].setToolTip('Solve task with this step at first.') # Node / Camera / Take: lNode = QtWidgets.QHBoxLayout() generallayout.addLayout(lNode) self.labels['node'] = QtWidgets.QLabel(self.labelNode_name['default']) lNode.addWidget(self.labels['node']) self.labels['node'].setToolTip(self.labelNode_tooltip['default']) self.fields['node'] = QtWidgets.QLineEdit(self) lNode.addWidget(self.fields['node']) self.fields['node'].textEdited.connect( self.evaluate) self.labels['take'] = QtWidgets.QLabel(self.labelTake_name['default']) lNode.addWidget(self.labels['take']) self.labels['take'].setToolTip(self.labelTake_tooltip['default']) self.fields['take'] = QtWidgets.QLineEdit(self) lNode.addWidget(self.fields['take']) self.fields['take'].textEdited.connect( self.evaluate) # Advanced: # OS Type: osLayout = QtWidgets.QHBoxLayout() advlayout.addLayout(osLayout) #osLayout.addWidget(QtWidgets.QLabel('Operating System Type:')) osLayout.addWidget(QtWidgets.QLabel('系统类型:')) self.fields['os'] = QtWidgets.QLineEdit(self) osLayout.addWidget(self.fields['os']) self.fields['os'].textEdited.connect( self.evaluate) # Tasks Command: exelayout = QtWidgets.QHBoxLayout() advlayout.addLayout(exelayout) #label = QtWidgets.QLabel('Tasks Executable:') label = QtWidgets.QLabel('任务执行:') label.setToolTip('Override launching programm') exelayout.addWidget(label) self.fields['exec'] = QtWidgets.QLineEdit(self) exelayout.addWidget(self.fields['exec']) self.fields['exec'].textEdited.connect( self.evaluate) #self.execBrowseButton = QtWidgets.QPushButton('Browse', self) self.execBrowseButton = QtWidgets.QPushButton('浏览', self) exelayout.addWidget(self.execBrowseButton) self.execBrowseButton.pressed.connect( self.browseExec) # Extra Arguments: exarglayout = QtWidgets.QHBoxLayout() advlayout.addLayout(exarglayout) #exarglayout.addWidget(QtWidgets.QLabel('Extra Arguments:')) exarglayout.addWidget(QtWidgets.QLabel('其他参数:')) self.fields['extrargs'] = QtWidgets.QLineEdit(self) exarglayout.addWidget(self.fields['extrargs']) self.fields['extrargs'].textEdited.connect( self.evaluate) # Preview: prvlayout = QtWidgets.QHBoxLayout() advlayout.addLayout(prvlayout) #prvlayout.addWidget(QtWidgets.QLabel('Preview:')) prvlayout.addWidget(QtWidgets.QLabel('预览:')) self.fields['preview'] = QtWidgets.QLineEdit(self) prvlayout.addWidget(self.fields['preview']) self.fields['preview'].textEdited.connect( self.evaluate) # Job: lJobName = QtWidgets.QHBoxLayout() joblayout.addLayout(lJobName) #lJobName.addWidget(QtWidgets.QLabel('Name:', self)) lJobName.addWidget(QtWidgets.QLabel('作业名称:', self)) self.fields['jobname'] = QtWidgets.QLineEdit(self) lJobName.addWidget(self.fields['jobname']) self.fields['jobname'].textEdited.connect( self.evaluate) #self.fields['jobnamescene'] = QtWidgets.QCheckBox('Use Scene Name', self) self.fields['jobnamescene'] = QtWidgets.QCheckBox('默认场景', self) lJobName.addWidget(self.fields['jobnamescene']) self.fields['jobnamescene'].setChecked(True) self.fields['jobnamescene'].stateChanged.connect( self.evaluate) # Capacity, max run tasks, priority, max tasks per host: lCapMax = QtWidgets.QHBoxLayout() joblayout.addLayout(lCapMax) #lCapMax.addWidget(QtWidgets.QLabel('Capacity:', self)) lCapMax.addWidget(QtWidgets.QLabel('容量:', self)) self.fields['capacity'] = QtWidgets.QSpinBox(self) lCapMax.addWidget(self.fields['capacity']) self.fields['capacity'].setRange(-1, 1000000) self.fields['capacity'].setValue(-1) self.fields['capacity'].valueChanged.connect( self.evaluate) #lCapMax.addWidget(QtWidgets.QLabel('Maximum Running Tasks:', self)) lCapMax.addWidget(QtWidgets.QLabel('最大任务数:', self)) self.fields['maxruntasks'] = QtWidgets.QSpinBox(self) lCapMax.addWidget(self.fields['maxruntasks']) self.fields['maxruntasks'].setRange(-1, 1000000) self.fields['maxruntasks'].setValue(-1) self.fields['maxruntasks'].valueChanged.connect( self.evaluate) #lCapMax.addWidget(QtWidgets.QLabel('Maximum Tasks Per Host:', self)) lCapMax.addWidget(QtWidgets.QLabel('最大主机数:', self)) self.fields['maxtasksperhost'] = QtWidgets.QSpinBox(self) lCapMax.addWidget(self.fields['maxtasksperhost']) self.fields['maxtasksperhost'].setRange(-1, 1000000) self.fields['maxtasksperhost'].setValue(-1) self.fields['maxtasksperhost'].valueChanged.connect( self.evaluate) #lCapMax.addWidget(QtWidgets.QLabel('Priority:', self)) lCapMax.addWidget(QtWidgets.QLabel('优先级:', self)) self.fields['priority'] = QtWidgets.QSpinBox(self) lCapMax.addWidget(self.fields['priority']) self.fields['priority'].setRange(-1, 250) self.fields['priority'].setValue(-1) self.fields['priority'].valueChanged.connect( self.evaluate) # Depend Masks: lDepends = QtWidgets.QHBoxLayout() joblayout.addLayout(lDepends) #lDepends.addWidget(QtWidgets.QLabel('Depend Mask:', self)) lDepends.addWidget(QtWidgets.QLabel('作业名模式:', self)) self.fields['dependmask'] = QtWidgets.QLineEdit(self) lDepends.addWidget(self.fields['dependmask']) self.fields['dependmask'].textEdited.connect( self.evaluate) #lDepends.addWidget(QtWidgets.QLabel('Global:', self)) lDepends.addWidget(QtWidgets.QLabel('作业等待:', self)) self.fields['dependglobal'] = QtWidgets.QLineEdit(self) lDepends.addWidget(self.fields['dependglobal']) self.fields['dependglobal'].textEdited.connect( self.evaluate) # Host Masks: lHostMasks = QtWidgets.QHBoxLayout() joblayout.addLayout(lHostMasks) #lHostMasks.addWidget(QtWidgets.QLabel('Hosts Mask:', self)) lHostMasks.addWidget(QtWidgets.QLabel('宿主机模式:', self)) self.fields['hostsmask'] = QtWidgets.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsmask']) self.fields['hostsmask'].textEdited.connect( self.evaluate) #lHostMasks.addWidget(QtWidgets.QLabel('Exclude:', self)) lHostMasks.addWidget(QtWidgets.QLabel('禁止主机:', self)) self.fields['hostsexclude'] = QtWidgets.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsexclude']) self.fields['hostsexclude'].textEdited.connect( self.evaluate) # Presets: presetsLayout = QtWidgets.QHBoxLayout() topLayout.addLayout(presetsLayout) #presetsLayout.addWidget(QtWidgets.QLabel('Recent:', self)) presetsLayout.addWidget(QtWidgets.QLabel('最近:', self)) self.cbRecent = QtWidgets.QComboBox(self) self.cbRecent.activated.connect( self.loadRecent) presetsLayout.addWidget(self.cbRecent) #self.bBrowseLoad = QtWidgets.QPushButton('Load', self) self.bBrowseLoad = QtWidgets.QPushButton('加载', self) presetsLayout.addWidget(self.bBrowseLoad) self.bBrowseLoad.pressed.connect( self.browseLoad) #self.bBrowseSave = QtWidgets.QPushButton('Save', self) self.bBrowseSave = QtWidgets.QPushButton('保存', self) presetsLayout.addWidget(self.bBrowseSave) self.bBrowseSave.pressed.connect( self.browseSave) # Command Field: self.teCmd = QtWidgets.QTextEdit(self) topLayout.addWidget(self.teCmd) # Buttons: buttonsLayout = QtWidgets.QHBoxLayout() topLayout.addLayout(buttonsLayout) #self.bStart = QtWidgets.QPushButton('&Start', self) self.bStart = QtWidgets.QPushButton('&运行', self) buttonsLayout.addWidget(self.bStart) self.bStart.pressed.connect( self.start) #self.fields['paused'] = QtWidgets.QCheckBox('Paused', self) self.fields['paused'] = QtWidgets.QCheckBox('暂停', self) buttonsLayout.addWidget(self.fields['paused']) self.fields['paused'].stateChanged.connect( self.evaluate) #self.bRefresh = QtWidgets.QPushButton('&Refresh', self) self.bRefresh = QtWidgets.QPushButton('&刷新', self) buttonsLayout.addWidget(self.bRefresh) self.bRefresh.pressed.connect( self.evaluate) #self.bQuitSave = QtWidgets.QPushButton('&Quit&&Store', self) self.bQuitSave = QtWidgets.QPushButton('&退出&&保存', self) buttonsLayout.addWidget(self.bQuitSave) self.bQuitSave.pressed.connect( self.quitsave) self.constructed = True # Set window icon: iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon( QtGui.QIcon(iconpath)) # Refresh recent: self.refreshRecent() # Load last settings: if not self.load(FileLast): self.evaluate()
def __init__(self, parent=None): QtWidgets.QSystemTrayIcon.__init__(self, parent) self.parent = parent # Menu: self.menu = dict() self.menu['menu'] = QtWidgets.QMenu() # Load menu: menu_path = os.path.join( os.path.join(cgruconfig.VARS['CGRU_LOCATION'], 'start') ) # TODO: why to use os.path.join() two times here, to add '/' at the end ??? menu_paths = cgruconfig.VARS['menu_path'] if menu_paths is None: menu_paths = menu_path if menu_paths.find(';') != -1: menu_paths = menu_paths.split(';') elif sys.platform.find('win') == -1: menu_paths = menu_paths.split(':') else: menu_paths = [menu_paths] if not menu_path in menu_paths: menu_paths.append(menu_path) for menu_path in menu_paths: if not os.path.isdir(menu_path): continue for dirpath, dirnames, filenames in os.walk(menu_path, True, None, True): if dirpath.find('/.') != -1: continue if dirpath.find('\\.') != -1: continue menuname = os.path.basename(dirpath) if menuname == os.path.basename(menu_path): menuname = 'menu' else: self.addMenu(self.menu['menu'], menuname) filenames.sort() was_separator = True for filename in filenames: if filename[0] == '.' or filename[0] == '_': continue if sys.platform[:3] == 'win': if filename[-4:] != '.cmd': continue itemname = filename[:-4] else: if filename[-3:] != '.sh': continue itemname = filename[:-3] filename = os.path.join(dirpath, filename) with open(filename, 'r') as f: lines = f.readlines() iconpath = None separator = False for line in lines: if line.find('Name=') != -1: itemname = line.split('Name=')[-1].strip() if line.find('Icon=') != -1: iconpath = line.split('Icon=')[-1].strip() if line.find('Separator') != -1: separator = True if separator: if not was_separator: self.menu[menuname].addSeparator() was_separator = True else: was_separator = False action = ActionCommand(self, itemname, filename, iconpath) self.menu[menuname].addAction(action) action.triggered.connect( action.runCommand) if separator: self.menu[menuname].addSeparator() # Add permanent items to 'Afanasy': if not self.addMenu(self.menu['menu'], 'AFANASY'): self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Web GUI', self) action.triggered.connect( cmd.afwebgui) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() self.action_user = QtWidgets.QAction('Set User...', self) self.action_user.triggered.connect( render.setUserDialog) self.action_user.setToolTip('Change local render user name.') self.menu['AFANASY'].addAction(self.action_user) action = QtWidgets.QAction('Set nimby', self) action.triggered.connect( nimby.setnimby) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Set NIMBY', self) action.triggered.connect( nimby.setNIMBY) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Set Free && Unpause', self) action.triggered.connect( nimby.setFreeUnpause) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Eject Tasks', self) action.triggered.connect( nimby.ejectTasks) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Eject Not My Tasks', self) action.triggered.connect( nimby.ejectNotMyTasks) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Render Info', self) action.triggered.connect( self.renderInfo) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Nimby Schedule...', self) action.triggered.connect( self.editNimby) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Set Server...', self) action.triggered.connect( cmd.setAFANASYServer) self.menu['AFANASY'].addAction(action) self.menu['menu'].addSeparator() # Add Software menu if it was not created by custom files: if not 'Software' in self.menu: self.addMenu(self.menu['menu'], 'Software') self.menu['menu'].addSeparator() for soft in software.Names: icon = software.getIcon(soft) if icon is None: action = QtWidgets.QAction(soft, self) else: action = QtWidgets.QAction(icon, soft, self) eval("action.triggered.connect(software.start%s)" % soft) self.menu['Software'].addAction(action) # Software setup: self.menu['Setup Soft'] = QtWidgets.QMenu('Setup Soft') self.menu['Software'].addMenu(self.menu['Setup Soft']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.locate%s)" % soft) self.menu['Setup Soft'].addAction(action) # Software examples: self.menu['Examples'] = QtWidgets.QMenu('Examples') self.menu['Software'].addMenu(self.menu['Examples']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.example%s)" % soft) self.menu['Examples'].addAction(action) # Add permanent items to 'Configure': if not self.addMenu(self.menu['menu'], 'Configure'): self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Execute in terminal', self) action.setCheckable(True) action.triggered.connect(cmd.triggerExecInTerminal) if cgruconfig.getVar('keeper_execute_in_terminal'): action.setChecked(True) self.menu['Configure'].addAction(action) self.menu['Configure'].addSeparator() if serverhttps.isRunning: self.addAction('Configure', False, 'HTTPS Server...', self.httpsServer) self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Set Web Browser...', self) action.triggered.connect( cmd.setWebBrowser) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Open Folder...', self) action.triggered.connect( cmd.setOpenCmd) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Teminal...', self) action.triggered.connect(cmd.setTerminal) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Text Editor...', self) action.triggered.connect( cmd.setTextEditor) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Edit Config...', self) action.triggered.connect( cmd.editCGRUConfig) self.menu['Configure'].addAction(action) self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Reload Config', self) action.triggered.connect( cmd.confReload) self.menu['Configure'].addAction(action) # Some general menu items: self.addAction('menu', True, 'Documentation...', cmd.cgruDocs) self.addAction('menu', False, 'Forum...', cmd.cgruForum) # System sub-menu: self.addMenu(self.menu['menu'],'System') self.addAction('System', True,'Show Info...', self.cgruInfo,'info') # Update item only if CGRU_UPDATE_CMD defined: if cgruconfig.VARS['CGRU_UPDATE_CMD'] is not None: self.addAction('System', True, 'Update', cmd.update) self.addAction('System', True, 'Restart', cmd.restart) self.addAction('System', False,'Quit', cmd.quit) self.setContextMenu(self.menu['menu']) # Tray tooltip: self.setToolTip('%s Keeper' % cgruconfig.VARS['company'].upper()) # Tray icon: icon_filename = cgruconfig.VARS['tray_icon'] if icon_filename is None: icon_filename = 'keeper' icon_filename = cgruutils.getIconFileName(icon_filename) self.icon_pixmap = QtGui.QPixmap(icon_filename) self.icon_default = QtGui.QIcon(self.icon_pixmap) self.showIcon() # Show: self.activated.connect( self.activated_slot) self.show()
def getIcon(soft): iconpath = cgruutils.getIconFileName(os.path.join('software', soft.lower())) if iconpath is not None: return QtGui.QIcon(iconpath) return None
def processoutput(self): output = self.process.readAll().data() if not isinstance(output, str): output = str(output, 'utf-8') output = output.strip() print(output) self.cmdField.insertPlainText(output + '\n') self.cmdField.moveCursor(QtGui.QTextCursor.End) def processStop(self): self.process.terminate() def getComboBoxString(comboBox): data = comboBox.itemData(comboBox.currentIndex()) if data is None: return '' if isinstance(data, str): return data if isinstance(data, unicode): return data return comboBox.itemData(comboBox.currentIndex()).toString() app = QtWidgets.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon(cgruutils.getIconFileName(Options.wndicon))) dialog = Dialog() dialog.show() app.exec_()
def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.setWindowTitle('Edit Nimby') rows = ['day', 'begin', 'dash', 'end', 'enable', 'allow', 'eject'] self.weekdays = [ 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ] self.days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] self.time_format = 'hh:mm' self.te_begin = dict() self.te_end = dict() self.cb_enable = dict() self.cb_allow = dict() self.cb_eject = dict() toplayout = QtWidgets.QVBoxLayout(self) columns = QtWidgets.QHBoxLayout() toplayout.addLayout(columns) vlayouts = dict() for row in rows: vlayouts[row] = QtWidgets.QVBoxLayout() columns.addLayout(vlayouts[row]) daynum = 0 for day in self.days: time_begin = '00:00' time_end = '00:00' enable = False allow = True eject = False var = 'nimby_' + day if var in cgruconfig.VARS: line = cgruconfig.VARS[var] if line is None: continue lines = line.split(' ') if len(lines) < 2: continue time_begin = lines[0] time_end = lines[1] enable = False allow = True eject = False if 'nimby' in lines: allow = True if 'NIMBY' in lines: allow = False if 'Eject' in lines: eject = True if 'Enable' in lines: enable = True vlayouts['day'].addWidget( QtWidgets.QLabel(self.weekdays[daynum], self)) self.te_begin[day] = QtWidgets.QTimeEdit( QtCore.QTime.fromString(time_begin, self.time_format)) self.te_begin[day].setDisplayFormat(self.time_format) vlayouts['begin'].addWidget(self.te_begin[day]) label = QtWidgets.QLabel(' - ', self) label.setFixedWidth(16) vlayouts['dash'].addWidget(label) self.te_end[day] = QtWidgets.QTimeEdit( QtCore.QTime.fromString(time_end, self.time_format)) self.te_end[day].setDisplayFormat(self.time_format) vlayouts['end'].addWidget(self.te_end[day]) self.cb_enable[day] = QtWidgets.QCheckBox('Enable', self) self.cb_enable[day].setChecked(enable) vlayouts['enable'].addWidget(self.cb_enable[day]) self.cb_allow[day] = QtWidgets.QCheckBox('Allow My Jobs', self) self.cb_allow[day].setChecked(allow) vlayouts['allow'].addWidget(self.cb_allow[day]) self.cb_eject[day] = QtWidgets.QCheckBox('Eject Running Tasks', self) self.cb_eject[day].setChecked(eject) vlayouts['eject'].addWidget(self.cb_eject[day]) daynum += 1 hlayout = QtWidgets.QHBoxLayout() b_accept = QtWidgets.QPushButton('Accept', self) b_cancel = QtWidgets.QPushButton('Cancel', self) hlayout.addWidget(b_accept) hlayout.addWidget(b_cancel) toplayout.addLayout(hlayout) b_accept.pressed.connect(self.applySettings) b_cancel.pressed.connect(self.close) # Set window icon: iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) self.show()
def getIcon( soft): iconpath = cgruutils.getIconFileName( os.path.join('software', soft.lower())) if iconpath is not None: return QtGui.QIcon( iconpath) return None
if not self.test: self.cmdField.setText( self.command) else: self.test = False self.btnTest.setEnabled( True) self.btnStart.setEnabled( True) def processoutput( self): output = self.process.readAll().data() if not isinstance( output, str): output = str( output, 'utf-8') output = output.strip() print(output) self.cmdField.insertPlainText( output + '\n') self.cmdField.moveCursor( QtGui.QTextCursor.End) def processStop( self): self.process.terminate() def getComboBoxString( comboBox): data = comboBox.itemData( comboBox.currentIndex()) if data is None: return '' if isinstance( data, str): return data if isinstance( data, unicode): return data return comboBox.itemData( comboBox.currentIndex()).toString() app = QtGui.QApplication( sys.argv) app.setWindowIcon( QtGui.QIcon( cgruutils.getIconFileName( Options.wndicon))) dialog = Dialog() dialog.show() app.exec_()
self.lePattern = QtWidgets.QLineEdit('((render|workstation)0[1-4]+)', self) layout.addWidget(self.lePattern) self.lePattern.textEdited.connect(self.evaluate) self.leResult = QtWidgets.QLineEdit( 'render01-render04 or workstation01-workstation04', self) layout.addWidget(self.leResult) self.leResult.setReadOnly(True) self.leResult.setAutoFillBackground(True) self.resize(500, 100) self.show() def evaluate(self): rx = QtCore.QRegExp(self.lePattern.text()) if not rx.isValid(): self.leResult.setText('ERROR: %s' % rx.errorString()) return if rx.exactMatch(self.leName.text()): self.leResult.setText('MATCH') else: self.leResult.setText('NOT MATCH') app = QtWidgets.QApplication(sys.argv) app.setWindowIcon(QtGui.QIcon(cgruutils.getIconFileName('regexp'))) dialog = Dialog() app.exec_()
def __init__(self, parent=None): QtWidgets.QSystemTrayIcon.__init__(self, parent) self.parent = parent # Menu: self.menu = dict() self.menu['menu'] = QtWidgets.QMenu() # Load menu: menu_path = os.path.join( os.path.join(cgruconfig.VARS['CGRU_LOCATION'], 'start') ) # TODO: why to use os.path.join() two times here, to add '/' at the end ??? menu_paths = cgruconfig.VARS['menu_path'] if menu_paths is None: menu_paths = menu_path if menu_paths.find(';') != -1: menu_paths = menu_paths.split(';') elif sys.platform.find('win') == -1: menu_paths = menu_paths.split(':') else: menu_paths = [menu_paths] if not menu_path in menu_paths: menu_paths.append(menu_path) for menu_path in menu_paths: if not os.path.isdir(menu_path): continue for dirpath, dirnames, filenames in os.walk( menu_path, True, None, True): if dirpath.find('/.') != -1: continue if dirpath.find('\\.') != -1: continue menuname = os.path.basename(dirpath) if menuname == os.path.basename(menu_path): menuname = 'menu' else: self.addMenu(self.menu['menu'], menuname) filenames.sort() was_separator = True for filename in filenames: if filename[0] == '.' or filename[0] == '_': continue if sys.platform[:3] == 'win': if filename[-4:] != '.cmd': continue itemname = filename[:-4] else: if filename[-3:] != '.sh': continue itemname = filename[:-3] filename = os.path.join(dirpath, filename) with open(filename, 'r') as f: lines = f.readlines() iconpath = None separator = False for line in lines: if line.find('Name=') != -1: itemname = line.split('Name=')[-1].strip() if line.find('Icon=') != -1: iconpath = line.split('Icon=')[-1].strip() if line.find('Separator') != -1: separator = True if separator: if not was_separator: self.menu[menuname].addSeparator() was_separator = True else: was_separator = False action = ActionCommand(self, itemname, filename, iconpath) self.menu[menuname].addAction(action) action.triggered.connect(action.runCommand) if separator: self.menu[menuname].addSeparator() # Add permanent items to 'Afanasy': if not self.addMenu(self.menu['menu'], 'AFANASY'): self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Web GUI', self) action.triggered.connect(cmd.afwebgui) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() self.action_user = QtWidgets.QAction('Set User...', self) self.action_user.triggered.connect(render.setUserDialog) self.action_user.setToolTip('Change local render user name.') self.menu['AFANASY'].addAction(self.action_user) action = QtWidgets.QAction('Set nimby', self) action.triggered.connect(nimby.setnimby) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Set NIMBY', self) action.triggered.connect(nimby.setNIMBY) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Set Free', self) action.triggered.connect(nimby.setFree) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Eject Tasks', self) action.triggered.connect(nimby.ejectTasks) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Eject And NIMBY', self) action.triggered.connect(nimby.ejectAndNIMBY) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Eject Not My Tasks', self) action.triggered.connect(nimby.ejectNotMyTasks) self.menu['AFANASY'].addAction(action) action = QtWidgets.QAction('Render Info', self) action.triggered.connect(self.renderInfo) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Nimby Schedule...', self) action.triggered.connect(self.editNimby) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtWidgets.QAction('Set Server...', self) action.triggered.connect(cmd.setAFANASYServer) self.menu['AFANASY'].addAction(action) self.menu['menu'].addSeparator() # Add Software menu if it was not created by custom files: if not 'Software' in self.menu: self.addMenu(self.menu['menu'], 'Software') self.menu['menu'].addSeparator() for soft in software.Names: icon = software.getIcon(soft) if icon is None: action = QtWidgets.QAction(soft, self) else: action = QtWidgets.QAction(icon, soft, self) eval("action.triggered.connect(software.start%s)" % soft) self.menu['Software'].addAction(action) # Software setup: self.menu['Setup Soft'] = QtWidgets.QMenu('Setup Soft') self.menu['Software'].addMenu(self.menu['Setup Soft']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.locate%s)" % soft) self.menu['Setup Soft'].addAction(action) # Software examples: self.menu['Examples'] = QtWidgets.QMenu('Examples') self.menu['Software'].addMenu(self.menu['Examples']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.example%s)" % soft) self.menu['Examples'].addAction(action) # Add permanent items to 'Configure': if not self.addMenu(self.menu['menu'], 'Configure'): self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Execute in terminal', self) action.setCheckable(True) action.triggered.connect(cmd.triggerExecInTerminal) if cgruconfig.getVar('keeper_execute_in_terminal'): action.setChecked(True) self.menu['Configure'].addAction(action) self.menu['Configure'].addSeparator() if serverhttps.isRunning: self.addAction('Configure', False, 'HTTPS Server...', self.httpsServer) self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Set Web Browser...', self) action.triggered.connect(cmd.setWebBrowser) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Open Folder...', self) action.triggered.connect(cmd.setOpenCmd) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Teminal...', self) action.triggered.connect(cmd.setTerminal) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Set Text Editor...', self) action.triggered.connect(cmd.setTextEditor) self.menu['Configure'].addAction(action) action = QtWidgets.QAction('Edit Config...', self) action.triggered.connect(cmd.editCGRUConfig) self.menu['Configure'].addAction(action) self.menu['Configure'].addSeparator() action = QtWidgets.QAction('Reload Config', self) action.triggered.connect(cmd.confReload) self.menu['Configure'].addAction(action) # Some general menu items: self.addAction('menu', True, 'Documentation...', cmd.cgruDocs) self.addAction('menu', False, 'Forum...', cmd.cgruForum) # System sub-menu: self.addMenu(self.menu['menu'], 'System') self.addAction('System', True, 'Show Info...', self.cgruInfo, 'info') # Update item only if CGRU_UPDATE_CMD defined: if cgruconfig.VARS['CGRU_UPDATE_CMD'] is not None: self.addAction('System', True, 'Update', cmd.update) self.addAction('System', True, 'Restart', cmd.restart) self.addAction('System', False, 'Quit', cmd.quit) self.setContextMenu(self.menu['menu']) # Tray tooltip: self.updateToolTip() # Tray icon: icon_filename = cgruconfig.VARS['tray_icon'] if icon_filename is None: icon_filename = 'keeper' icon_filename = cgruutils.getIconFileName(icon_filename) self.icon_pixmap = QtGui.QPixmap(icon_filename) self.icon_default = QtGui.QIcon(self.icon_pixmap) self.showIcon() # Show: self.activated.connect(self.activated_slot) self.show()
def __init__(self, parent=None): QtGui.QSystemTrayIcon.__init__(self, parent) self.parent = parent # Menu: self.menu = dict() self.menu['menu'] = QtGui.QMenu() # Update item only if CGRU_UPDATE_CMD defined: if cgruconfig.VARS['CGRU_UPDATE_CMD'] is not None: action = QtGui.QAction('Update', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.update) self.menu['menu'].addAction(action) self.menu['menu'].addSeparator() # Load menu: menu_path = os.path.join( os.path.join(cgruconfig.VARS['CGRU_LOCATION'], 'start') ) # TODO: why to use os.path.join() two times here, to add '/' at the end ??? menu_paths = cgruconfig.VARS['menu_path'] if menu_paths is None: menu_paths = menu_path if menu_paths.find(';') != -1: menu_paths = menu_paths.split(';') elif sys.platform.find('win') == -1: menu_paths = menu_paths.split(':') else: menu_paths = [menu_paths] if not menu_path in menu_paths: menu_paths.append(menu_path) for menu_path in menu_paths: if not os.path.isdir(menu_path): continue for dirpath, dirnames, filenames in os.walk( menu_path, True, None, True): if dirpath.find('/.') != -1: continue if dirpath.find('\\.') != -1: continue menuname = os.path.basename(dirpath) if menuname == os.path.basename(menu_path): menuname = 'menu' else: self.addMenu(self.menu['menu'], menuname) filenames.sort() was_separator = True for filename in filenames: if filename[0] == '.' or filename[0] == '_': continue if sys.platform[:3] == 'win': if filename[-4:] != '.cmd': continue itemname = filename[:-4] else: if filename[-3:] != '.sh': continue itemname = filename[:-3] filename = os.path.join(dirpath, filename) with open(filename, 'r') as f: lines = f.readlines() iconpath = None separator = False for line in lines: if line.find('Name=') != -1: itemname = line.split('Name=')[-1].strip() if line.find('Icon=') != -1: iconpath = line.split('Icon=')[-1].strip() if line.find('Separator') != -1: separator = True if separator: if not was_separator: self.menu[menuname].addSeparator() was_separator = True else: was_separator = False action = ActionCommand(self, itemname, filename, iconpath) self.menu[menuname].addAction(action) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), action.runCommand) if separator: self.menu[menuname].addSeparator() # Add permanent items to 'Afanasy': if not self.addMenu(self.menu['menu'], 'AFANASY'): self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Web GUI', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.afwebgui) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() self.action_user = QtGui.QAction('Set User...', self) QtCore.QObject.connect(self.action_user, QtCore.SIGNAL('triggered()'), render.setUserDialog) self.action_user.setToolTip('Change local render user name.') self.menu['AFANASY'].addAction(self.action_user) action = QtGui.QAction('Set nimby', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), nimby.setnimby) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Set NIMBY', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), nimby.setNIMBY) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Set Free', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), nimby.setFree) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Eject Tasks', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), nimby.ejectTasks) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Eject Not My Tasks', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), nimby.ejectNotMyTasks) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Render Info', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), self.renderInfo) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Nimby Schedule...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), self.editNimby) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Set Server...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.setAFANASYServer) self.menu['AFANASY'].addAction(action) self.menu['AFANASY'].addSeparator() action = QtGui.QAction('Exit Render', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.exitRender) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Exit Watch', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.exitMonitor) self.menu['AFANASY'].addAction(action) action = QtGui.QAction('Exit All Clients', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.exitClients) self.menu['AFANASY'].addAction(action) self.menu['menu'].addSeparator() # Add Software menu if it was not created by custom files: if not 'Software' in self.menu: self.addMenu(self.menu['menu'], 'Software') self.menu['menu'].addSeparator() action = QtGui.QAction( QtGui.QIcon(cgruutils.getIconFileName('folder')), '[ browse ]', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), software.browse) self.menu['Software'].addAction(action) for soft in software.Names: icon = software.getIcon(soft) if icon is None: action = QtGui.QAction(soft, self) else: action = QtGui.QAction(icon, soft, self) eval("QtCore.QObject.connect(action," " QtCore.SIGNAL('triggered()')," " software.start%s)" % soft) self.menu['Software'].addAction(action) # Software setup: self.menu['Setup Soft'] = QtGui.QMenu('Setup Soft') self.menu['Software'].addMenu(self.menu['Setup Soft']) for soft in software.Names: action = QtGui.QAction(soft, self) eval("QtCore.QObject.connect(action," " QtCore.SIGNAL('triggered()')," " software.locate%s)" % soft) self.menu['Setup Soft'].addAction(action) # Software examples: self.menu['Examples'] = QtGui.QMenu('Examples') self.menu['Software'].addMenu(self.menu['Examples']) for soft in software.Names: action = QtGui.QAction(soft, self) eval("QtCore.QObject.connect(action," " QtCore.SIGNAL('triggered()')," " software.example%s)" % soft) self.menu['Examples'].addAction(action) # Add permanent items to 'Configure': if not self.addMenu(self.menu['menu'], 'Configure'): self.menu['Configure'].addSeparator() action = QtGui.QAction('Reload Config', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.confReload) self.menu['Configure'].addAction(action) action = QtGui.QAction('Set Docs URL...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.setDocsURL) self.menu['Configure'].addAction(action) action = QtGui.QAction('Edit Config...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.editCGRUConfig) self.menu['Configure'].addAction(action) action = QtGui.QAction('Set Web Browser...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.setWebBrowser) self.menu['Configure'].addAction(action) action = QtGui.QAction('Set Text Editor...', self) QtCore.QObject.connect(action, QtCore.SIGNAL('triggered()'), cmd.setTextEditor) self.menu['Configure'].addAction(action) self.addAction('menu', True, 'Show Info...', self.cgruInfo, 'info') self.addAction('menu', True, 'Documentation', cmd.cgruDocs) self.addAction('menu', True, 'Restart', cmd.restart) self.addAction('menu', False, 'Quit && Exit Clients', cmd.quitExitClients) self.addAction('menu', False, 'Quit', cmd.quit) self.setContextMenu(self.menu['menu']) # Prepare Icons: self.icons = dict() icon_filename = cgruconfig.VARS['tray_icon'] if icon_filename is None: icon_filename = 'keeper' icon_filename = cgruutils.getIconFileName(icon_filename) self.icon_epmty = QtGui.QPixmap(icon_filename) self.icons['empty'] = QtGui.QIcon(self.icon_epmty) self.makeIcon('offline_free', online=False, nimby=False, busy=False) self.makeIcon('online_free', online=True, nimby=False, busy=False) self.makeIcon('offline_nimby', online=False, nimby=True, busy=False) self.makeIcon('online_nimby', online=True, nimby=True, busy=False) self.makeIcon('offline_free_busy', online=False, nimby=False, busy=True) self.makeIcon('online_free_busy', online=True, nimby=False, busy=True) self.makeIcon('offline_nimby_busy', online=False, nimby=True, busy=True) self.makeIcon('online_nimby_busy', online=True, nimby=True, busy=True) # Decorate and show: self.showIcon() self.setToolTip('%s Keeper %s' % (cgruconfig.VARS['company'].upper(), os.getenv('CGRU_VERSION', ''))) QtCore.QObject.connect( self, QtCore.SIGNAL('activated( QSystemTrayIcon::ActivationReason)'), self.activated_slot) self.show()
def __init__(self): # Main Window QtGui.QWidget.__init__(self) self.constructed = False self.evaluated = False self.output = '' self.setWindowTitle('Afanasy Starter CGRU ' + os.getenv('CGRU_VERSION', '')) self.fields = dict() self.labels = dict() # Get File Type dependant dicts self.labelNode_name = labelNodeNameDict() self.labelNode_tooltip = labelNodeTooltipsDict() self.labelTake_name = labelTakeNameDict() self.labelTake_tooltip = labelTakeTooltipsDict() # Top level layouts: topLayout = QtGui.QVBoxLayout(self) tabwidget = QtGui.QTabWidget(self) topLayout.addWidget(tabwidget) # General Tab: generalwidget = QtGui.QWidget(self) tabwidget.addTab(generalwidget, 'Scene') generallayout = QtGui.QVBoxLayout(generalwidget) # Job Tab: jobwidget = QtGui.QWidget(self) tabwidget.addTab(jobwidget, 'Job') joblayout = QtGui.QVBoxLayout(jobwidget) # Advanced Tab: auxwidget = QtGui.QWidget(self) tabwidget.addTab(auxwidget, 'Advanced') advlayout = QtGui.QVBoxLayout(auxwidget) # Service Type: lFileType = QtGui.QHBoxLayout() generallayout.addLayout(lFileType) lFileType.addWidget(QtGui.QLabel('Override Service Type:', self)) self.fields['servicetype'] = QtGui.QComboBox(self) lFileType.addWidget(self.fields['servicetype']) QtCore.QObject.connect(self.fields['servicetype'], QtCore.SIGNAL('currentIndexChanged(int)'), self.setFileType) # Scene: lScene = QtGui.QHBoxLayout() generallayout.addLayout(lScene) lScene.addWidget(QtGui.QLabel('File:', self)) self.fields['scenefile'] = QtGui.QLineEdit(Scene, self) lScene.addWidget(self.fields['scenefile']) QtCore.QObject.connect(self.fields['scenefile'], QtCore.SIGNAL('editingFinished()'), self.evaluate) bBrowseScene = QtGui.QPushButton('Browse', self) lScene.addWidget(bBrowseScene) QtCore.QObject.connect(bBrowseScene, QtCore.SIGNAL('pressed()'), self.browseScene) # Working Directory: lWDir = QtGui.QHBoxLayout() generallayout.addLayout(lWDir) lWDir.addWidget(QtGui.QLabel('Working Directory/Project:', self)) self.fields['wdir'] = QtGui.QLineEdit(self) lWDir.addWidget(self.fields['wdir']) QtCore.QObject.connect(self.fields['wdir'], QtCore.SIGNAL('editingFinished()'), self.evaluate) self.fields['scenewdir'] = QtGui.QCheckBox('Use Scene Folder', self) self.fields['scenewdir'].setChecked(True) QtCore.QObject.connect(self.fields['scenewdir'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) lWDir.addWidget(self.fields['scenewdir']) # Output images: lImages = QtGui.QHBoxLayout() generallayout.addLayout(lImages) lImages.addWidget(QtGui.QLabel('Output Images:', self)) self.fields['outimages'] = QtGui.QLineEdit(self) lImages.addWidget(self.fields['outimages']) QtCore.QObject.connect(self.fields['outimages'], QtCore.SIGNAL('editingFinished()'), self.evaluate) lImages.addWidget(QtGui.QLabel('Browse')) bBrowseOutImages = QtGui.QPushButton('File', self) lImages.addWidget(bBrowseOutImages) QtCore.QObject.connect(bBrowseOutImages, QtCore.SIGNAL('pressed()'), self.browseOutImages) bBrowseOutFolder = QtGui.QPushButton('Dir', self) lImages.addWidget(bBrowseOutFolder) QtCore.QObject.connect(bBrowseOutFolder, QtCore.SIGNAL('pressed()'), self.browseOutFolder) # Frames: lFrames = QtGui.QHBoxLayout() generallayout.addLayout(lFrames) lFrames.addWidget(QtGui.QLabel('Frames:', self)) self.fields['framestart'] = QtGui.QSpinBox(self) self.fields['framestart'].setRange(-1000000000, 1000000000) self.fields['framestart'].setValue(1) QtCore.QObject.connect(self.fields['framestart'], QtCore.SIGNAL('editingFinished()'), self.evaluate) lFrames.addWidget(self.fields['framestart']) self.fields['frameend'] = QtGui.QSpinBox(self) self.fields['frameend'].setRange(-1000000000, 1000000000) self.fields['frameend'].setValue(1) QtCore.QObject.connect(self.fields['frameend'], QtCore.SIGNAL('editingFinished()'), self.evaluate) lFrames.addWidget(self.fields['frameend']) lFrames.addWidget(QtGui.QLabel('by', self)) self.fields['frameby'] = QtGui.QSpinBox(self) lFrames.addWidget(self.fields['frameby']) QtCore.QObject.connect(self.fields['frameby'], QtCore.SIGNAL('editingFinished()'), self.evaluate) self.fields['frameby'].setRange(1, 1000000000) lFrames.addWidget(QtGui.QLabel('per task', self)) self.fields['framespt'] = QtGui.QSpinBox(self) lFrames.addWidget(self.fields['framespt']) QtCore.QObject.connect(self.fields['framespt'], QtCore.SIGNAL('editingFinished()'), self.evaluate) self.fields['framespt'].setRange(1, 1000000000) # Node / Camera / Take: lNode = QtGui.QHBoxLayout() generallayout.addLayout(lNode) self.labels['node'] = QtGui.QLabel(self.labelNode_name['default']) lNode.addWidget(self.labels['node']) self.labels['node'].setToolTip(self.labelNode_tooltip['default']) self.fields['node'] = QtGui.QLineEdit(self) lNode.addWidget(self.fields['node']) QtCore.QObject.connect(self.fields['node'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.labels['take'] = QtGui.QLabel(self.labelTake_name['default']) lNode.addWidget(self.labels['take']) self.labels['take'].setToolTip(self.labelTake_tooltip['default']) self.fields['take'] = QtGui.QLineEdit(self) lNode.addWidget(self.fields['take']) QtCore.QObject.connect(self.fields['take'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Advanced: # OS Type: osLayout = QtGui.QHBoxLayout() advlayout.addLayout(osLayout) osLayout.addWidget(QtGui.QLabel('Operating System Type:')) self.fields['os'] = QtGui.QLineEdit(self) osLayout.addWidget(self.fields['os']) QtCore.QObject.connect(self.fields['os'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Tasks Command: exelayout = QtGui.QHBoxLayout() advlayout.addLayout(exelayout) label = QtGui.QLabel('Tasks Executable:') label.setToolTip('Override launching programm') exelayout.addWidget(label) self.fields['exec'] = QtGui.QLineEdit(self) exelayout.addWidget(self.fields['exec']) QtCore.QObject.connect(self.fields['exec'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.execBrowseButton = QtGui.QPushButton('Browse', self) exelayout.addWidget(self.execBrowseButton) QtCore.QObject.connect(self.execBrowseButton, QtCore.SIGNAL('pressed()'), self.browseExec) # Extra Arguments: exarglayout = QtGui.QHBoxLayout() advlayout.addLayout(exarglayout) exarglayout.addWidget(QtGui.QLabel('Extra Arguments:')) self.fields['extrargs'] = QtGui.QLineEdit(self) exarglayout.addWidget(self.fields['extrargs']) QtCore.QObject.connect(self.fields['extrargs'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Preview: prvlayout = QtGui.QHBoxLayout() advlayout.addLayout(prvlayout) prvlayout.addWidget(QtGui.QLabel('Preview:')) self.fields['preview'] = QtGui.QLineEdit(self) prvlayout.addWidget(self.fields['preview']) QtCore.QObject.connect(self.fields['preview'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Job: lJobName = QtGui.QHBoxLayout() joblayout.addLayout(lJobName) lJobName.addWidget(QtGui.QLabel('Name:', self)) self.fields['jobname'] = QtGui.QLineEdit(self) lJobName.addWidget(self.fields['jobname']) QtCore.QObject.connect(self.fields['jobname'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) self.fields['jobnamescene'] = QtGui.QCheckBox('Use Scene Name', self) lJobName.addWidget(self.fields['jobnamescene']) self.fields['jobnamescene'].setChecked(True) QtCore.QObject.connect(self.fields['jobnamescene'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) # Capacity, max run tasks, priority: lCapMax = QtGui.QHBoxLayout() joblayout.addLayout(lCapMax) lCapMax.addWidget(QtGui.QLabel('Capacity:', self)) self.fields['capacity'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['capacity']) self.fields['capacity'].setRange(-1, 1000000) self.fields['capacity'].setValue(-1) QtCore.QObject.connect(self.fields['capacity'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lCapMax.addWidget(QtGui.QLabel('Maximum Running Tasks:', self)) self.fields['maxruntasks'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['maxruntasks']) self.fields['maxruntasks'].setRange(-1, 1000000) self.fields['maxruntasks'].setValue(-1) QtCore.QObject.connect(self.fields['maxruntasks'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) lCapMax.addWidget(QtGui.QLabel('Priority:', self)) self.fields['priority'] = QtGui.QSpinBox(self) lCapMax.addWidget(self.fields['priority']) self.fields['priority'].setRange(-1, 250) self.fields['priority'].setValue(-1) QtCore.QObject.connect(self.fields['priority'], QtCore.SIGNAL('valueChanged(int)'), self.evaluate) # Depend Masks: lDepends = QtGui.QHBoxLayout() joblayout.addLayout(lDepends) lDepends.addWidget(QtGui.QLabel('Depend Mask:', self)) self.fields['dependmask'] = QtGui.QLineEdit(self) lDepends.addWidget(self.fields['dependmask']) QtCore.QObject.connect(self.fields['dependmask'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) lDepends.addWidget(QtGui.QLabel('Global:', self)) self.fields['dependglobal'] = QtGui.QLineEdit(self) lDepends.addWidget(self.fields['dependglobal']) QtCore.QObject.connect(self.fields['dependglobal'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Host Masks: lHostMasks = QtGui.QHBoxLayout() joblayout.addLayout(lHostMasks) lHostMasks.addWidget(QtGui.QLabel('Hosts Mask:', self)) self.fields['hostsmask'] = QtGui.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsmask']) QtCore.QObject.connect(self.fields['hostsmask'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) lHostMasks.addWidget(QtGui.QLabel('Exclude:', self)) self.fields['hostsexclude'] = QtGui.QLineEdit(self) lHostMasks.addWidget(self.fields['hostsexclude']) QtCore.QObject.connect(self.fields['hostsexclude'], QtCore.SIGNAL('textEdited(QString)'), self.evaluate) # Presets: presetsLayout = QtGui.QHBoxLayout() topLayout.addLayout(presetsLayout) presetsLayout.addWidget(QtGui.QLabel('Recent:', self)) self.cbRecent = QtGui.QComboBox(self) presetsLayout.addWidget(self.cbRecent) self.bBrowseLoad = QtGui.QPushButton('Load', self) presetsLayout.addWidget(self.bBrowseLoad) QtCore.QObject.connect(self.bBrowseLoad, QtCore.SIGNAL('pressed()'), self.browseLoad) self.bBrowseSave = QtGui.QPushButton('Save', self) presetsLayout.addWidget(self.bBrowseSave) QtCore.QObject.connect(self.bBrowseSave, QtCore.SIGNAL('pressed()'), self.browseSave) # Command Field: self.teCmd = QtGui.QTextEdit(self) topLayout.addWidget(self.teCmd) # Buttons: buttonsLayout = QtGui.QHBoxLayout() topLayout.addLayout(buttonsLayout) self.bStart = QtGui.QPushButton('&Start', self) buttonsLayout.addWidget(self.bStart) QtCore.QObject.connect(self.bStart, QtCore.SIGNAL('pressed()'), self.start) self.fields['paused'] = QtGui.QCheckBox('Paused', self) buttonsLayout.addWidget(self.fields['paused']) QtCore.QObject.connect(self.fields['paused'], QtCore.SIGNAL('stateChanged(int)'), self.evaluate) self.bRefresh = QtGui.QPushButton('&Refresh', self) buttonsLayout.addWidget(self.bRefresh) QtCore.QObject.connect(self.bRefresh, QtCore.SIGNAL('pressed()'), self.evaluate) self.bQuitSave = QtGui.QPushButton('&Quit&&Store', self) buttonsLayout.addWidget(self.bQuitSave) QtCore.QObject.connect(self.bQuitSave, QtCore.SIGNAL('pressed()'), self.quitsave) self.constructed = True # Set window icon: iconpath = cgruutils.getIconFileName('afanasy') if iconpath is not None: self.setWindowIcon(QtGui.QIcon(iconpath)) # Refresh recent: self.refreshRecent() # Load last settings: if not self.load(FileLast): self.evaluate()
def __init__(self, parent=None): QtWidgets.QSystemTrayIcon.__init__(self, parent) self.parent = parent # Menu: self.menu = dict() self.menu['menu'] = QtWidgets.QMenu() # Update item only if CGRU_UPDATE_CMD defined: if cgruconfig.VARS['CGRU_UPDATE_CMD'] is not None: action = QtWidgets.QAction('Update', self) action.triggered.connect(cmd.update) self.menu['menu'].addAction(action) self.menu['menu'].addSeparator() # Load menu: menu_path = os.path.join( os.path.join(cgruconfig.VARS['CGRU_LOCATION'], 'start') ) # TODO: why to use os.path.join() two times here, to add '/' at the end ??? menu_paths = cgruconfig.VARS['menu_path'] if menu_paths is None: menu_paths = menu_path if menu_paths.find(';') != -1: menu_paths = menu_paths.split(';') elif sys.platform.find('win') == -1: menu_paths = menu_paths.split(':') else: menu_paths = [menu_paths] if not menu_path in menu_paths: menu_paths.append(menu_path) for menu_path in menu_paths: if not os.path.isdir(menu_path): continue for dirpath, dirnames, filenames in os.walk( menu_path, True, None, True): if dirpath.find('/.') != -1: continue if dirpath.find('\\.') != -1: continue menuname = os.path.basename(dirpath) if menuname == os.path.basename(menu_path): menuname = 'menu' else: self.addMenu(self.menu['menu'], menuname) filenames.sort() was_separator = True for filename in filenames: if filename[0] == '.' or filename[0] == '_': continue if sys.platform[:3] == 'win': if filename[-4:] != '.cmd': continue itemname = filename[:-4] else: if filename[-3:] != '.sh': continue itemname = filename[:-3] filename = os.path.join(dirpath, filename) with open(filename, 'r') as f: lines = f.readlines() iconpath = None separator = False for line in lines: if line.find('Name=') != -1: itemname = line.split('Name=')[-1].strip() if itemname == 'Scan Scan...': itemname = '影视搜索' if itemname == 'Dailies...': itemname = '影视剪辑' if itemname == 'Check RegExp...': itemname = '检测对象' if itemname == 'Start Watch...': itemname = '作业监控' if itemname == 'Submit Job...': itemname = '作业提交' if itemname == 'Local Render...': itemname = '本地渲染' if line.find('Icon=') != -1: iconpath = line.split('Icon=')[-1].strip() if line.find('Separator') != -1: separator = True if separator: if not was_separator: self.menu[menuname].addSeparator() was_separator = True else: was_separator = False action = ActionCommand(self, itemname, filename, iconpath) self.menu[menuname].addAction(action) action.triggered.connect(action.runCommand) if separator: self.menu[menuname].addSeparator() # Add permanent items to 'Afanasy': # if not self.addMenu(self.menu['menu'], 'AFANASY'): if not self.addMenu(self.menu['menu'], '渲染'): self.menu['渲染'].addSeparator() # action = QtWidgets.QAction('Web GUI', self) action = QtWidgets.QAction('Web页面', self) action.triggered.connect(cmd.afwebgui) self.menu['渲染'].addAction(action) self.menu['渲染'].addSeparator() # self.action_user = QtWidgets.QAction('Set User...', self) self.action_user = QtWidgets.QAction('用户设置', self) self.action_user.triggered.connect(render.setUserDialog) self.action_user.setToolTip('Change local render user name.') self.menu['渲染'].addAction(self.action_user) # action = QtWidgets.QAction('Set nimby', self) action = QtWidgets.QAction('后台设置', self) action.triggered.connect(nimby.setnimby) self.menu['渲染'].addAction(action) action = QtWidgets.QAction('Set NIMBY', self) action.triggered.connect(nimby.setNIMBY) self.menu['渲染'].addAction(action) # action = QtWidgets.QAction('Set Free && Unpause', self) action = QtWidgets.QAction('作业释放', self) action.triggered.connect(nimby.setFreeUnpause) self.menu['渲染'].addAction(action) # action = QtWidgets.QAction('Eject Tasks', self) action = QtWidgets.QAction('开始任务', self) action.triggered.connect(nimby.ejectTasks) self.menu['渲染'].addAction(action) # action = QtWidgets.QAction('Eject Not My Tasks', self) action = QtWidgets.QAction('关闭其它任务', self) action.triggered.connect(nimby.ejectNotMyTasks) self.menu['渲染'].addAction(action) # action = QtWidgets.QAction('Render Info', self) action = QtWidgets.QAction('渲染信息', self) action.triggered.connect(self.renderInfo) self.menu['渲染'].addAction(action) self.menu['渲染'].addSeparator() # action = QtWidgets.QAction('Nimby Schedule...', self) action = QtWidgets.QAction('运行模式', self) action.triggered.connect(self.editNimby) self.menu['渲染'].addAction(action) self.menu['渲染'].addSeparator() #action = QtWidgets.QAction('Set Server...', self) action = QtWidgets.QAction('服务器设置', self) action.triggered.connect(cmd.setAFANASYServer) self.menu['渲染'].addAction(action) self.menu['menu'].addSeparator() # Add Software menu if it was not created by custom files: if not '专业软件' in self.menu: self.addMenu(self.menu['menu'], '专业软件') self.menu['menu'].addSeparator() action = QtWidgets.QAction( QtGui.QIcon(cgruutils.getIconFileName('folder')), '[ browse ]', self) action.triggered.connect(software.browse) self.menu['专业软件'].addAction(action) for soft in software.Names: icon = software.getIcon(soft) if icon is None: action = QtWidgets.QAction(soft, self) else: action = QtWidgets.QAction(icon, soft, self) eval("action.triggered.connect(software.start%s)" % soft) self.menu['专业软件'].addAction(action) # Software setup: self.menu['Setup Soft'] = QtWidgets.QMenu('Setup Soft') self.menu['专业软件'].addMenu(self.menu['Setup Soft']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.locate%s)" % soft) self.menu['Setup Soft'].addAction(action) # Software examples: self.menu['Examples'] = QtWidgets.QMenu('Examples') self.menu['专业软件'].addMenu(self.menu['Examples']) for soft in software.Names: action = QtWidgets.QAction(soft, self) eval("action.triggered.connect(software.example%s)" % soft) self.menu['Examples'].addAction(action) # Add permanent items to 'Configure': #if not self.addMenu(self.menu['menu'], 'Configure'): if not self.addMenu(self.menu['menu'], '系统配置'): self.menu['系统配置'].addSeparator() if serverhttps.isRunning: self.addAction('系统配置', False, 'HTTPS Server...', self.httpsServer) self.menu['系统配置'].addSeparator() #action = QtWidgets.QAction('Set Web Browser...', self) action = QtWidgets.QAction('配置浏览器...', self) action.triggered.connect(cmd.setWebBrowser) self.menu['系统配置'].addAction(action) #action = QtWidgets.QAction('Set Open Folder...', self) action = QtWidgets.QAction('配置文件夹...', self) action.triggered.connect(cmd.setOpenCmd) self.menu['系统配置'].addAction(action) #action = QtWidgets.QAction('Set Docs URL...', self) action = QtWidgets.QAction('配置文件主机...', self) action.triggered.connect(cmd.setDocsURL) self.menu['系统配置'].addAction(action) #action = QtWidgets.QAction('Set Text Editor...', self) action = QtWidgets.QAction('配置文本编辑器...', self) action.triggered.connect(cmd.setTextEditor) self.menu['系统配置'].addAction(action) #action = QtWidgets.QAction('Edit Config...', self) action = QtWidgets.QAction('设置配置', self) action.triggered.connect(cmd.editCGRUConfig) self.menu['系统配置'].addAction(action) self.menu['系统配置'].addSeparator() #action = QtWidgets.QAction('Reload Config', self) action = QtWidgets.QAction('重置服务', self) action.triggered.connect(cmd.confReload) self.menu['系统配置'].addAction(action) #self.addAction('menu', True, 'Show Info...', self.cgruInfo, 'info') self.addAction('menu', True, '查看配置', self.cgruInfo, 'info') #self.addAction('menu', True, 'Documentation...', cmd.cgruDocs) #self.addAction('menu', False, 'Forum...', cmd.cgruForum) #self.addAction('menu', True, 'Restart', cmd.restart) self.addAction('menu', True, '重启服务', cmd.restart) #self.addAction('menu', False, 'Quit', cmd.quit) self.addAction('menu', False, '退出服务', cmd.quit) self.setContextMenu(self.menu['menu']) # Tray tooltip: #self.setToolTip('%s Keeper' % cgruconfig.VARS['company'].upper()) self.setToolTip('奇幻空间') # Tray icon: icon_filename = cgruconfig.VARS['tray_icon'] if icon_filename is None: icon_filename = 'keeper' icon_filename = cgruutils.getIconFileName(icon_filename) self.icon_pixmap = QtGui.QPixmap(icon_filename) self.icon_default = QtGui.QIcon(self.icon_pixmap) self.showIcon() # Show: self.activated.connect(self.activated_slot) self.show()