class SearchBar(QtGui.QWidget): def __init__(self, parent=None, main=None): super(SearchBar, self).__init__(parent) uic.loadUi(os.path.join(config.UI_ROOT, 'search.ui'), self) self.main = main self.setObjectName('searchBar') self.setStyle(QtGui.QStyleFactory.create('cleanlooks')) self.setStyleSheet(style.searchbar) self.showCombo.lineEdit().hide() self.showCombo.view().setFixedWidth(180) self.shows = {} self.shots = {} self.connect(self.showCombo, QtCore.SIGNAL('activated (const QString&)'), self.handleChangeShow) self.connect(self.parent(), QtCore.SIGNAL('changeShow (PyQt_PyObject)'), self.handleChangeShow) self.connect(self.editSearch, QtCore.SIGNAL('returnPressed ()'), self.handleFind) self.connect(self.btnNew, QtCore.SIGNAL('pressed ()'), self.handleNew) self.threads_queue = Queue.Queue() self.getShows() def updateCompleter(self, shots): self.shots = {} for shot in shots: self.shots[str(shot.get('code'))] = shot self.completer = QtGui.QCompleter(self.shots.keys()) self.completer.setCompletionMode(QtGui.QCompleter.InlineCompletion) self.completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) self.editSearch.setCompleter(self.completer) def getShows(self): log.debug('getShows') self._showsThread = ShotgunShowsThread(self) self.connect(self._showsThread, QtCore.SIGNAL("shows (PyQt_PyObject)"), self.handleShows) self.connect(self._showsThread, QtCore.SIGNAL("error (PyQt_PyObject)"), self.handleShowsError) self._showsThread.start() self.threads_queue.put(self._showsThread) def getShots(self, show): log.debug('getShots: %s' % show) self._shotsThread = ShotgunShotsThread(self, self.shows.get(show)) self.connect(self._shotsThread, QtCore.SIGNAL("shots (PyQt_PyObject)"), self.updateCompleter) self.connect(self._shotsThread, QtCore.SIGNAL("error (PyQt_PyObject)"), self.handleShotsError) self._shotsThread.start() self.threads_queue.put(self._shotsThread) def handleShows(self, shows): self.shows = {} self.showCombo.clear() for show in shows: self.shows[str(show.get(config.SG_FIELD_MAP.get('SHOWNAME')))] = show self.showCombo.addItem(show.get(config.SG_FIELD_MAP.get('SHOWNAME'))) self.handleChangeShow(os.environ.get('SHOW', self.main.project)) def handleShowsError(self, error): self.main.info(error) def handleShotsError(self, error): self.main.info(error) def handleChangeShow(self, show=None): log.debug('handleChangeShow: %s' % show) if show is None: show = str(self.showCombo.currentText().toAscii()) if not show: return idx = self.showCombo.findText(show) if not idx: for _show in self.shows.values(): if show == _show.get(config.SG_FIELD_MAP.get('SHOWNAME')): show = _show.get(config.SG_FIELD_MAP.get('SHOW')) idx = self.showCombo.findText(show) if idx >= 0 and idx != self.showCombo.currentIndex(): self.showCombo.setCurrentIndex(idx) self.getShots(str(show)) def handleFind(self, show=None, shot=None, task=None): log.debug('handleFind: %s %s %s' %(show, shot, task)) if show is None: show = str(self.showCombo.currentText().toAscii()) if shot is None: shot = str(self.editSearch.text().toAscii()) if not shot: self.main.emit(QtCore.SIGNAL('showQueue ()'), ) else: self.main.emit(QtCore.SIGNAL('findVersions (PyQt_PyObject)'), self.shots.get(shot)) def handleNew(self): from widgets.new import NewVersionWidget win = NewVersionWidget() win.getShows() win.exec_()