def updateMessageView(self, maxcount = 0): maxcount = maxcount or 200 mt = self.ui.messageTable items = [ (n, str(i.text(1)), mt.itemWidget(i, 0), i) for n, i in enumerate(map(lambda n:mt.topLevelItem(n), range(mt.topLevelItemCount()))) ] pids = [ str(item[2].id.text()) for item in items ] olditems = list(items) olds = list(pids) n = 0 self.app.icons.avatar_cache = {} messages = self.app.db.get_messages_from_cache(maxcount) print "* update message view", len(messages) for _blob in messages: blob = prepare_post(_blob.__dict__) if str(blob.pid) in olds: i = olds.index(str(blob.pid)) olditems.pop(i) olds.pop(i) if str(blob.pid) not in pids: pids.append(blob.pid) msg, time = self.build_message_item(blob) i = QTreeWidgetItem(mt) i.setText(1, time) mt.setItemWidget(i, 0, msg) # now remove the too old ones items.sort(key=lambda i:i[1]) for old in list(reversed(items))[maxcount-1:] + olditems: mt.removeItemWidget(old[3], 0) item = old[2] del item
def __init__(self, parent, name=None): QTreeWidgetItem.__init__(self) self.filterList = ('mmp', 'MMP') if isinstance(parent, QListView): self.p = None if name: self.f = name else: self.f = '/' else: self.p = parent self.f = name self.readable = QDir(self.fullName()).isReadable() if not self.readable: self.setIcon(0, folderLockedIcon) else: self.setIcon(0, folderClosedIcon) if name is not None: self.setText(1, name) if isinstance(parent, QTreeWidget): parent.addTopLevelItem(self) else: parent.addChild(self)
def setup_ui(self): self.l = l = QVBoxLayout(self) self.setLayout(l) self.msg = m = QLabel( self.msg or _('Choose the folder into which the files will be placed')) l.addWidget(m) m.setWordWrap(True) self.folders = f = QTreeWidget(self) f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) f.setContextMenuPolicy(Qt.CustomContextMenu) f.customContextMenuRequested.connect(self.show_context_menu) self.root = QTreeWidgetItem(f, ('/', )) def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child, )) process(node[child], c) process(create_folder_tree(current_container()), self.root) self.root.setSelected(True) f.expandAll() l.addWidget(self.bb)
def __init__(self, parent, name=None): QTreeWidgetItem.__init__(self) self.filterList = ('mmp', 'MMP') if isinstance(parent, QListView): self.p = None if name: self.f = name else: self.f = '/' else: self.p = parent self.f = name self.readable = QDir( self.fullName() ).isReadable() if not self.readable : self.setIcon(0, folderLockedIcon) else: self.setIcon(0, folderClosedIcon) if name is not None: self.setText(1, name) if isinstance(parent, QTreeWidget): parent.addTopLevelItem(self) else: parent.addChild(self)
def create_item(self, parent, child, idx=-1): if idx == -1: c = QTreeWidgetItem(parent) else: c = QTreeWidgetItem() parent.insertChild(idx, c) self.populate_item(c, child) return c
def __init__(self, parent, fio, name=None): QTreeWidgetItem.__init__(self) parent.addChild(self) if name is not None: self.setText(1, name) self.f = name self.fileObj = fio
def create_folder(self, item): text, ok = QInputDialog.getText(self, _('Folder name'), _('Enter a name for the new folder')) if ok and unicode(text): c = QTreeWidgetItem(item, (unicode(text),)) c.setIcon(0, QIcon(I('mimetypes/dir.png'))) for item in self.folders.selectedItems(): item.setSelected(False) c.setSelected(True) self.folders.setCurrentItem(c)
def process_duplicates(self, db, duplicates): ta = _('%(title)s by %(author)s') bf = QFont(self.dup_list.font()) bf.setBold(True) itf = QFont(self.dup_list.font()) itf.setItalic(True) for mi, cover, formats in duplicates: item = QTreeWidgetItem([ta%dict( title=mi.title, author=mi.format_field('authors')[1])] , 0) item.setCheckState(0, Qt.Checked) item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable) item.setData(0, Qt.FontRole, bf) item.setData(0, Qt.UserRole, (mi, cover, formats)) matching_books = db.books_with_same_title(mi) def add_child(text): c = QTreeWidgetItem([text], 1) c.setFlags(Qt.ItemIsEnabled) item.addChild(c) return c add_child(_('Already in calibre:')).setData(0, Qt.FontRole, itf) for book_id in matching_books: aut = [a.replace('|', ',') for a in (db.authors(book_id, index_is_id=True) or '').split(',')] add_child(ta%dict( title=db.title(book_id, index_is_id=True), author=authors_to_string(aut))) add_child('') yield item
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(imt) category = 'text' if linear is not None else ({'text':'misc'}.get(icat, icat)) item = QTreeWidgetItem(self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) set_display_name(name, item) # TODO: Add appropriate tooltips based on the emblems emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') if name not in manifested_names and name not in ok_to_be_unmanifested: emblems.append('dialog_question.png') if linear is False: emblems.append('arrow-down.png') if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_warning.png') render_emblems(item, emblems) return item
def readControlFile(self, filename): self.control = controlPoints(self.N, filename) # obs=obsSplit(obs) for x, y in self.control.iteritems(): #print coord item = QTreeWidgetItem(self.treeControl) item.setText(0, x) item.setText(1, str(round(y.y, 3))) item.setText(2, str(round(y.x, 3))) item.setText(3, str(round(y.h, 3))) item.setCheckState(0, Qt.Checked)
def __init__(self, parent, device): QTreeWidgetItem.__init__(self, parent) self._device = device self.setText(0, device.lvname) mountpoint = getattr(device.format, "mountpoint", "") if not mountpoint: mountpoint = "" elif not (device.format and device.format.mountable): mountpoint = "N/A" self.setText(1, mountpoint) self.setText(2, "%Ld" % device.size)
def create_item(self, f, parent): name = f.name ans = QTreeWidgetItem(parent, [name]) ans.setData(0, Qt.UserRole, '/'.join(f.full_path[1:])) ans.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) ans.setCheckState( 0, Qt.Unchecked if self.dev.is_folder_ignored( f.storage_id, f.full_path[1:]) else Qt.Checked) ans.setData(0, Qt.DecorationRole, file_icon_provider().icon_from_ext('dir')) return ans
def create_item(self, f, parent): name = f.name ans = QTreeWidgetItem(parent, [name]) ans.setData(0, Qt.UserRole, '/'.join(f.full_path[1:])) ans.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) ans.setCheckState(0, Qt.Unchecked if self.dev.is_folder_ignored(f.storage_id, f.full_path[1:]) else Qt.Checked) ans.setData(0, Qt.DecorationRole, file_icon_provider().icon_from_ext('dir')) return ans
def item(f, parent): name = f.name if not f.is_folder: name += ' [%s]'%f.last_mod_string ans = QTreeWidgetItem(parent, [name]) ans.setData(0, Qt.UserRole, f.full_path) if f.is_folder: ext = 'dir' else: ext = f.name.rpartition('.')[-1] ans.setData(0, Qt.DecorationRole, file_icon_provider().icon_from_ext(ext)) return ans
def readControlFile(self, filename): self.control = controlPoints(self.N,filename) # obs=obsSplit(obs) for x,y in self.control.iteritems(): #print coord item = QTreeWidgetItem(self.treeControl) item.setText(0, x) item.setText(1, str(round(y.y,3))) item.setText(2, str(round(y.x,3))) item.setText(3, str(round(y.h,3))) item.setCheckState(0, Qt.Checked)
def __init__(self, src, *args): QTreeWidgetItem.__init__(self, *args) self._src = src # fonts self._initFonts() # array of actual (i.e. numeric) column values self._values = [None] * NumColumns # set text alignment for icol in range(NumColumns): self.setTextAlignment(icol, Qt.AlignLeft) self.setTextAlignment(ColumnR, Qt.AlignRight) self.setTextAlignment(ColumnType, Qt.AlignHCenter) # setup source self._highlighted = self._highlighted_visual = False self.setSource(src)
def _set_tree_model(self, parsing, parent=None): self.data_tree.clear() for field_info in parsing: item = QTreeWidgetItem(parent) item.setText(0, "%s" % field_info['name']) item.setData(0, QtCore.Qt.UserRole, (field_info['offset'], field_info['length'])) if isinstance(field_info['value'], list): self._set_tree_model(field_info['value'], item) else: child = QTreeWidgetItem(item) child.setText(0, repr(field_info['value'])) if parent is None: self.data_tree.addTopLevelItem(item) self.data_tree.expandItem(item)
def updateProv(self): self.treeProvis.clear() for x, y in self.provis.iteritems(): item = QTreeWidgetItem(self.treeProvis) item.setText(0, x) item.setText(1, str(round(y.y, 3))) item.setText(2, str(round(y.x, 3))) item.setText(3, str(round(y.h, 3)))
def setup_ui(self): self.l = l = QVBoxLayout(self) self.setLayout(l) self.msg = m = QLabel(self.msg or _( 'Choose the folder into which the files will be placed')) l.addWidget(m) m.setWordWrap(True) self.folders = f = QTreeWidget(self) f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) f.setContextMenuPolicy(Qt.CustomContextMenu) f.customContextMenuRequested.connect(self.show_context_menu) self.root = QTreeWidgetItem(f, ('/',)) def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child,)) process(node[child], c) process(create_folder_tree(current_container()), self.root) self.root.setSelected(True) f.expandAll() l.addWidget(self.bb)
def process_duplicates(self, db, duplicates): ta = _('%(title)s by %(author)s [%(formats)s]') bf = QFont(self.dup_list.font()) bf.setBold(True) itf = QFont(self.dup_list.font()) itf.setItalic(True) for mi, cover, formats in duplicates: # formats is a list of file paths # Grab just the extension and display to the user # Based only off the file name, no file type tests are done. incoming_formats = ', '.join( os.path.splitext(path)[-1].replace('.', '').upper() for path in formats) item = QTreeWidgetItem([ ta % dict(title=mi.title, author=mi.format_field('authors')[1], formats=incoming_formats) ], 0) item.setCheckState(0, Qt.Checked) item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) item.setData(0, Qt.FontRole, bf) item.setData(0, Qt.UserRole, (mi, cover, formats)) matching_books = db.books_with_same_title(mi) def add_child(text): c = QTreeWidgetItem([text], 1) c.setFlags(Qt.ItemIsEnabled) item.addChild(c) return c add_child(_('Already in calibre:')).setData(0, Qt.FontRole, itf) for book_id in matching_books: aut = [ a.replace('|', ',') for a in ( db.authors(book_id, index_is_id=True) or '').split(',') ] add_child( ta % dict(title=db.title(book_id, index_is_id=True), author=authors_to_string(aut), formats=db.formats( book_id, index_is_id=True, verify_formats=False))) add_child('') yield item
def process_node(toc, parent): for child in toc: node = QTreeWidgetItem(parent) node.setText(0, child.title or '') node.setData(0, DEST_ROLE, child.dest or '') node.setData(0, FRAG_ROLE, child.frag or '') tt = _('File: {0}\nAnchor: {1}').format( child.dest or '', child.frag or _('Top of file')) node.setData(0, Qt.ToolTipRole, tt) process_node(child, node)
class ChooseFolder(Dialog): # {{{ def __init__(self, msg=None, parent=None): self.msg = msg Dialog.__init__(self, _('Choose folder'), 'choose-folder', parent=parent) def setup_ui(self): self.l = l = QVBoxLayout(self) self.setLayout(l) self.msg = m = QLabel(self.msg or _( 'Choose the folder into which the files will be placed')) l.addWidget(m) m.setWordWrap(True) self.folders = f = QTreeWidget(self) f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) self.root = QTreeWidgetItem(f, ('/',)) def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child,)) process(node[child], c) process(create_folder_tree(current_container()), self.root) self.root.setSelected(True) f.expandAll() l.addWidget(self.bb) def folder_path(self, item): ans = [] while item is not self.root: ans.append(unicode(item.text(0))) item = item.parent() return tuple(reversed(ans)) @property def chosen_folder(self): try: return '/'.join(self.folder_path(self.folders.selectedItems()[0])) except IndexError: return ''
def showConversation(self, item, _): mt = self.ui.messageTable msg = mt.itemWidget(item, 0) if item.isExpanded(): msg.replyLabel.setVisible(True) return # allready added if not msg.replyLabel.isVisible(): return # no conversation msg.replyLabel.setVisible(False) if item.childCount(): return # allready added messages = self.app.db.get_conversation_messages(int(msg.id.text())) for _blob in messages: blob = prepare_post(_blob.__dict__) msg, time = self.build_message_item(blob) msg.replyLabel.setVisible(False) # no conversation trees possible i = QTreeWidgetItem(item) i.setText(1, time) mt.setItemWidget(i, 0, msg)
def updateProv(self): self.treeProvis.clear() for x,y in self.provis.iteritems(): item = QTreeWidgetItem(self.treeProvis) item.setText(0, x) item.setText(1, str(round(y.y,3))) item.setText(2, str(round(y.x,3))) item.setText(3, str(round(y.h,3)))
def setOpen(self, o): if o: self.setIcon(0, folderOpenIcon) else: self.setIcon(0, folderClosedIcon) if o and not self.childCount(): s = self.fullName() thisDir = QDir(s) if not thisDir.isReadable(): self.readable = 0 return files = thisDir.entryInfoList() if files: for f in files: # f is a QFileInfo # f.fileName is '.' or '..' or 'bearings' or... fileName = str(f.fileName()) if fileName == '.' or fileName == '..': continue elif f.isSymLink(): d = QTreeWidgetItem(self, fileName) #, 'Symbolic Link') d.setIcon(0, fileIcon) elif f.isDir(): if fileName == 'CVS': #bruce 060319 skip CVS directories, so developers see same set of directories as end-users # (implements NFR I recently reported) # WARNING: this is only legitimate for some applications of this module. # For now that's ok (we only use it in MMKit). Later this feature should be turned on # by an optional argument to __init__, and generalized to a list of files to not show # or to a filter function. continue d = Directory(self, fileName) else: if f.isFile(): s = 'File' else: s = 'Special' if not fileName[-3:] in self.filterList: continue d = FileItem(self, f.absFilePath(), fileName) d.setIcon(0, fileIcon) qt4todo('QTreeWidgetItem.setOpen(self, o)')
def create_folder(self, item): text, ok = QInputDialog.getText(self, _('Folder name'), _('Enter a name for the new folder')) if ok and unicode(text): c = QTreeWidgetItem(item, (unicode(text), )) c.setIcon(0, QIcon(I('mimetypes/dir.png'))) for item in self.folders.selectedItems(): item.setSelected(False) c.setSelected(True) self.folders.setCurrentItem(c)
def process_duplicates(self, db, duplicates): ta = _('%(title)s by %(author)s [%(formats)s]') bf = QFont(self.dup_list.font()) bf.setBold(True) itf = QFont(self.dup_list.font()) itf.setItalic(True) for mi, cover, formats in duplicates: # formats is a list of file paths # Grab just the extension and display to the user # Based only off the file name, no file type tests are done. incoming_formats = ', '.join(os.path.splitext(path)[-1].replace('.', '').upper() for path in formats) item = QTreeWidgetItem([ta%dict( title=mi.title, author=mi.format_field('authors')[1], formats=incoming_formats)] , 0) item.setCheckState(0, Qt.Checked) item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable) item.setData(0, Qt.FontRole, bf) item.setData(0, Qt.UserRole, (mi, cover, formats)) matching_books = db.books_with_same_title(mi) def add_child(text): c = QTreeWidgetItem([text], 1) c.setFlags(Qt.ItemIsEnabled) item.addChild(c) return c add_child(_('Already in calibre:')).setData(0, Qt.FontRole, itf) for book_id in matching_books: aut = [a.replace('|', ',') for a in (db.authors(book_id, index_is_id=True) or '').split(',')] add_child(ta%dict( title=db.title(book_id, index_is_id=True), author=authors_to_string(aut), formats=db.formats(book_id, index_is_id=True, verify_formats=False))) add_child('') yield item
def browser_item(f, parent): name = f.name if not f.is_folder: name += ' [%s]' % f.last_mod_string ans = QTreeWidgetItem(parent, [name]) ans.setData(0, Qt.UserRole, f.full_path) if f.is_folder: ext = 'dir' else: ext = f.name.rpartition('.')[-1] ans.setData(0, Qt.DecorationRole, file_icon_provider().icon_from_ext(ext)) return ans
def setOpen(self, o): if o: self.setIcon(0, folderOpenIcon) else: self.setIcon(0, folderClosedIcon) if o and not self.childCount(): s = self.fullName() thisDir = QDir(s) if not thisDir.isReadable(): self.readable = 0 return files = thisDir.entryInfoList() if files: for f in files: # f is a QFileInfo # f.fileName is '.' or '..' or 'bearings' or... fileName = str(f.fileName()) if fileName == '.' or fileName == '..': continue elif f.isSymLink(): d = QTreeWidgetItem(self, fileName)#, 'Symbolic Link') d.setIcon(0, fileIcon) elif f.isDir(): if fileName == 'CVS': #bruce 060319 skip CVS directories, so developers see same set of directories as end-users # (implements NFR I recently reported) # WARNING: this is only legitimate for some applications of this module. # For now that's ok (we only use it in MMKit). Later this feature should be turned on # by an optional argument to __init__, and generalized to a list of files to not show # or to a filter function. continue d = Directory(self, fileName) else: if f.isFile(): s = 'File' else: s = 'Special' if not fileName[-3:] in self.filterList: continue d = FileItem(self, f.absFilePath(), fileName) d.setIcon(0, fileIcon) qt4todo('QTreeWidgetItem.setOpen(self, o)')
def calcProv(self): self.nodeg.setVisible(False) self.unknowns = getUnknowns(self.N, self.control) self.provisionals = getProvisionals(self.N, self.control, self.unknowns) self.treeProvis.clear() self.saveProvisButton.setVisible(True) self.bowditch.setVisible(True) # for name in self.stationsOrder: # item = QTreeWidgetItem(self.treeProvis) # item.setText(0, name) # # # item.setText(1, str(round(self.provisionals[name].x,3))) # item.setText(2, str(round(self.provisionals[name].y,3))) # item.setText(3, str(round(self.provisionals[name].h,3))) for x, y in self.provisionals.iteritems(): item = QTreeWidgetItem(self.treeProvis) item.setText(0, x) item.setText(1, str(round(y.y, 3))) item.setText(2, str(round(y.x, 3))) item.setText(3, str(round(y.h, 3))) self.updateGraph()
def _addEntryItem(self, entry, number, after): item = entry.tw_item = QTreeWidgetItem(self.etw, after) timelabel = self._make_time_label(entry.timestamp) item.setText(0, timelabel) item.setText(1, " " + (entry.title or "")) item.setToolTip(1, entry.title) if entry.comment: item.setText(2, " " + entry.comment.split('\n')[0]) item.setToolTip(2, "<P>" + entry.comment.replace("<", "<").replace(">", ">"). \ replace("\n\n", "</P><P>").replace("\n", "</P><P>") + "</P>") item._ientry = number item._dp = None item._menu = self._entry_menu item._set_menu_title = lambda: self._entry_menu_title.setText( '"%s"' % entry.title) # now make subitems for DPs subitem = None for dp in entry.dps: if not dp.ignored: subitem = self._addDPSubItem(dp, item, subitem) self.etw.collapseItem(item) self.etw.header().headerDataChanged(Qt.Horizontal, 0, 2) return item
def calcProv(self): self.nodeg.setVisible(False) self.unknowns=getUnknowns(self.N,self.control) self.provisionals= getProvisionals(self.N,self.control,self.unknowns) self.treeProvis.clear() self.saveProvisButton.setVisible(True) self.bowditch.setVisible(True) # for name in self.stationsOrder: # item = QTreeWidgetItem(self.treeProvis) # item.setText(0, name) # # # item.setText(1, str(round(self.provisionals[name].x,3))) # item.setText(2, str(round(self.provisionals[name].y,3))) # item.setText(3, str(round(self.provisionals[name].h,3))) for x,y in self.provisionals.iteritems(): item = QTreeWidgetItem(self.treeProvis) item.setText(0, x) item.setText(1, str(round(y.y,3))) item.setText(2, str(round(y.x,3))) item.setText(3, str(round(y.h,3))) self.updateGraph()
def __init__(self, window, msg, formats): ''' formats is a list of tuples: [(format, exists, convertible)]. format: Lower case format identifier. E.G. mobi exists: String representing the number of books that exist in the format. convertible: True if the format is a convertible format. formats should be ordered in the device's preferred format ordering. ''' QDialog.__init__(self, window) Ui_ChooseFormatDeviceDialog.__init__(self) self.setupUi(self) self.formats.activated[QModelIndex].connect(self.activated_slot) self.msg.setText(msg) for i, (format, exists, convertible) in enumerate(formats): t_item = QTreeWidgetItem() t_item.setIcon(0, file_icon_provider().icon_from_ext(format.lower())) t_item.setText(0, format.upper()) t_item.setText(1, exists) if convertible: t_item.setIcon(2, QIcon(I('ok.png'))) self.formats.addTopLevelItem(t_item) if i == 0: self.formats.setCurrentItem(t_item) t_item.setSelected(True) self.formats.resizeColumnToContents(2) self.formats.resizeColumnToContents(1) self.formats.resizeColumnToContents(0) self.formats.header().resizeSection( 0, self.formats.header().sectionSize(0) * 2) self._format = None
class ChooseFolder(Dialog): # {{{ def __init__(self, msg=None, parent=None): self.msg = msg Dialog.__init__(self, _('Choose folder'), 'choose-folder', parent=parent) def setup_ui(self): self.l = l = QVBoxLayout(self) self.setLayout(l) self.msg = m = QLabel( self.msg or _('Choose the folder into which the files will be placed')) l.addWidget(m) m.setWordWrap(True) self.folders = f = QTreeWidget(self) f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) f.setContextMenuPolicy(Qt.CustomContextMenu) f.customContextMenuRequested.connect(self.show_context_menu) self.root = QTreeWidgetItem(f, ('/', )) def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child, )) process(node[child], c) process(create_folder_tree(current_container()), self.root) self.root.setSelected(True) f.expandAll() l.addWidget(self.bb) def show_context_menu(self, point): item = self.folders.itemAt(point) if item is None: return m = QMenu(self) m.addAction(QIcon(I('mimetypes/dir.png')), _('Create new folder'), partial(self.create_folder, item)) m.popup(self.folders.mapToGlobal(point)) def create_folder(self, item): text, ok = QInputDialog.getText(self, _('Folder name'), _('Enter a name for the new folder')) if ok and unicode(text): c = QTreeWidgetItem(item, (unicode(text), )) c.setIcon(0, QIcon(I('mimetypes/dir.png'))) for item in self.folders.selectedItems(): item.setSelected(False) c.setSelected(True) self.folders.setCurrentItem(c) def folder_path(self, item): ans = [] while item is not self.root: ans.append(unicode(item.text(0))) item = item.parent() return tuple(reversed(ans)) @property def chosen_folder(self): try: return '/'.join(self.folder_path(self.folders.selectedItems()[0])) except IndexError: return ''
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({'text':'misc'}.get(icat, icat)) item = QTreeWidgetItem(self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) tooltips = [] emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') tooltips.append(_('This file is the cover %s for this book') % (_('image') if name == cover_image_name else _('page'))) if name in container.opf_name: emblems.append('metadata.png') tooltips.append(_('This file contains all the metadata and book structure information')) if imt == ncx_mime: emblems.append('toc.png') tooltips.append(_('This file contains the metadata table of contents')) if name not in manifested_names and not container.ok_to_be_unmanifested(name): emblems.append('dialog_question.png') tooltips.append(_('This file is not listed in the book manifest')) if linear is False: emblems.append('arrow-down.png') tooltips.append(_('This file is marked as non-linear in the spine\nDrag it to the top to make it linear')) if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') tooltips.append(_('This file is a text file that is not referenced in the spine')) if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_error.png') tooltips.append(_('This file occurs more than once in the spine')) render_emblems(item, emblems) if tooltips: item.setData(0, Qt.ToolTipRole, '\n'.join(tooltips)) return item
def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child, )) process(node[child], c)
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({ 'text': 'misc' }.get(icat, icat)) item = QTreeWidgetItem( self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) tooltips = [] emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') tooltips.append( _('This file is the cover %s for this book') % (_('image') if name == cover_image_name else _('page'))) if name in container.opf_name: emblems.append('metadata.png') tooltips.append( _('This file contains all the metadata and book structure information' )) if imt == ncx_mime: emblems.append('toc.png') tooltips.append( _('This file contains the metadata table of contents')) if name not in manifested_names and not container.ok_to_be_unmanifested( name): emblems.append('dialog_question.png') tooltips.append( _('This file is not listed in the book manifest')) if linear is False: emblems.append('arrow-down.png') tooltips.append( _('This file is marked as non-linear in the spine\nDrag it to the top to make it linear' )) if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') tooltips.append( _('This file is a text file that is not referenced in the spine' )) if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_error.png') tooltips.append( _('This file occurs more than once in the spine')) render_emblems(item, emblems) if tooltips: item.setData(0, Qt.ToolTipRole, '\n'.join(tooltips)) return item
def _addDPSubItem(self, dp, parent, after): item = QTreeWidgetItem(parent, after) item.setText(1, dp.filename) item.setToolTip(1, dp.filename) item.setText(2, dp.comment or "") item.setToolTip(2, dp.comment or "") item._ientry = None item._dp = dp item._menu = self._archived_dp_menu item._set_menu_title = lambda: self._archived_dp_menu_title.setText(os.path.basename(dp.filename)) return item
def residuals(self): self.stdDevTree.clear() self.resid = {} for x in self.unknowns: list = [] name = x[0:-2] item = QTreeWidgetItem(self.stdDevTree) item.setText(0, name) if not self.resid.has_key(name): self.resid[name] = [None, None, None] if x[-1] == "o": self.resid[name][2] = (self.precisi[name + "_o"]) item.setText(3, str(round(float(self.resid[name][2]), 3))) elif x[-1] == "x": self.resid[name][0] = (self.precisi[name + "_x"]) item.setText(1, str(round(float(self.resid[name][0]), 3))) elif x[-1] == "y": self.resid[name][1] = (self.precisi[name + "_y"]) item.setText(2, str(round(float(self.resid[name][1]), 3))) for name in self.unknowns: name = x[0:-2] if not (self.resid[name][2]) == None: if (self.resid[name][0]) == None and ( self.resid[name][1]) == None: item.setText(0, name + "(control)") self.vtpvLabel.setText("VTPV: " + str(self.vtpv)) self.vtpvLabel.setVisible(True) if float( round( float((self.A.T * self.P * self.V).T * (self.A.T * self.P * self.V)), 6)) == 0.: self.numcheckLabel.setVisible(True) self.posteriori.setText("Posteriori: " + str(self.posterioriValue)) self.posteriori.setVisible(True) self.posteriori_2.setText(str(round(self.posterioriValue, 5))) self.posteriori_2.setVisible(True) check1 = globalCheck(self.provis, self.control, self.V, self.obs, self.unknowns, self.Xdict) for x, ob in self.XOdict.iteritems(): list = [] name = x[0:-2] item = QTreeWidgetItem(self.stdDevTree) item.setText(0, name + " orientation:") item.setText(3, str(round(float(self.XOdict[x]), 3))) sum = 0 for i in check1.values(): sum += round(i, 4) if round(sum, 3) == 0.: self.glocheckLabel.setVisible(True) else: self.glocheckLabel.setText("GLOBAL UNSUCCESS") # self.glocheckLabel.setStyleSheet(color="red") self.glocheckLabel.setVisible(True)
def residuals2(self): self.AObs = self.posterioriValue * self.A * (self.A.T * self.P * self.A)**-1 * self.A.T self.cofactorM = self.A * (self.A.T * self.P * self.A)**-1 * self.A.T self.AResObs = self.posterioriValue * ( self.P**-1 - self.A * (self.A.T * self.P * self.A)**-1 * self.A.T) # print (self.A.T*self.P*self.A)**-1 # print self.posterioriValue # print self.posterioriValue*(self.A.T*self.P*self.A)**-1 self.cofactorAObs.clear() self.cofactorZ.clear() self.residA = OrderedDict() self.residARe = OrderedDict() # print self.cofactorM count = 0 for i, j in self.obs.iteritems(): for k, l in j.iteritems(): count += 1 self.obsCount = count self.cofactorAObs.setColumnCount(count) self.cofactorAObs.setRowCount(count) self.cofactorZ.setColumnCount(count) self.cofactorZ.setRowCount(count) for i in range(count): for j in range(count): temp = QTableWidgetItem() temp.setText(str(self.cofactorM[i, j])) self.cofactorAObs.setItem(i, j, temp) for i in range(count): for j in range(count): temp = QTableWidgetItem() temp.setText(str(self.AResObs[i, j])) self.cofactorZ.setItem(i, j, temp) i = 0 for x, sta in self.obs.iteritems(): for tn, tar in sta.iteritems(): name = x # name=x[0:-2] if not self.residA.has_key(x + tn): self.residA[x + tn] = [None] if not self.residARe.has_key(x + tn): self.residARe[x + tn] = [None] self.residA[x + tn][0] = sqrt(self.AObs[i, i]) self.residARe[x + tn][0] = sqrt(self.AResObs[i, i]) i += 1 # print self.residA # print self.residARe for x, sta in self.obs.iteritems(): for tn, target in sta.iteritems(): name = x + tn item1 = QTreeWidgetItem(self.stdDevAtree) item2 = QTreeWidgetItem(self.stdDevObsTree) if tn[-1] == "D": item1.setText(0, "Direction from" + x + "to :" + tn[0:-2]) item2.setText(0, "Direction from" + x + "to :" + tn[0:-2]) elif tn[-1] == "d": item1.setText(0, "Distance from" + x + "to :" + tn[0:-2]) item2.setText(0, "Distance from" + x + "to :" + tn[0:-2]) item1.setText(1, str(round(float(self.residA[name][0]), 3))) item2.setText(1, str(round(float(self.residARe[name][0]), 3)))
def __init__(self, parent, device=None): QTreeWidgetItem.__init__(self, parent) self.device = device
def build(self, container): self.clear() self.root = self.invisibleRootItem() self.root.setFlags(Qt.ItemIsDragEnabled) self.categories = {} for category, text, icon in ( ('text', _('Text'), 'keyboard-prefs.png'), ('styles', _('Styles'), 'lookfeel.png'), ('images', _('Images'), 'view-image.png'), ('fonts', _('Fonts'), 'font.png'), ('misc', _('Miscellaneous'), 'mimetypes/dir.png'), ): self.categories[category] = i = QTreeWidgetItem(self.root, 0) i.setText(0, text) i.setIcon(0, QIcon(I(icon))) f = i.font(0) f.setBold(True) i.setFont(0, f) i.setData(0, NAME_ROLE, category) flags = Qt.ItemIsEnabled if category == 'text': flags |= Qt.ItemIsDropEnabled i.setFlags(flags) processed, seen = set(), {} def get_display_name(name, item): parts = name.split('/') text = parts[-1] while text in seen and parts: text = parts.pop() + '/' + text seen[text] = item return text for name, linear in container.spine_names: processed.add(name) i = QTreeWidgetItem(self.categories['text'], 1) prefix = '' if linear else '[nl] ' if not linear: i.setIcon(self.non_linear_icon) i.setText(0, prefix + get_display_name(name, i)) i.setStatusTip(0, _('Full path: ') + name) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsSelectable) i.setData(0, NAME_ROLE, name) font_types = {guess_type('a.'+x)[0] for x in ('ttf', 'otf', 'woff')} def get_category(mt): category = 'misc' if mt.startswith('image/'): category = 'images' elif mt in font_types: category = 'fonts' elif mt in OEB_STYLES: category = 'styles' return category all_files = list(container.manifest_type_map.iteritems()) all_files.append((guess_type('a.opf')[0], [container.opf_name])) for name in container.name_path_map: if name in processed: continue processed.add(name) imt = container.mime_map.get(name, guess_type(name)[0]) icat = get_category(imt) i = QTreeWidgetItem(self.categories[icat], 1) i.setText(0, get_display_name(name, i)) i.setStatusTip(0, _('Full path: ') + name) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) i.setData(0, NAME_ROLE, name) for c in self.categories.itervalues(): self.expandItem(c)
def readObsFile(self, filename): self.N, self.stationsOrder, self.obsOrder = Observations(filename) N = self.N self.obs1, self.ObsList = getObs(N) self.obs = obsSplit(self.obs1) for name in self.stationsOrder: item = QTreeWidgetItem(self.treeObs) item.setText(0, name) for t, j in self.obs[name].iteritems(): subitem = QTreeWidgetItem(item) subitem.setText(1, t[0:-2]) if j.type == 'direction': subitem.setText(2, str(rad2dms(j.direction))) subitem.setCheckState(0, Qt.Checked) if j.type == 'distance': subitem.setCheckState(0, Qt.Checked) subitem.setText(3, str(j.distance)) if j.type == 'both': subitem.setText(2, str(rad2dms(j.direction))) subitem.setCheckState(0, Qt.Checked) subitem.setText(3, str(j.distance)) item.setCheckState(0, Qt.Checked)
def _addDPSubItem(self, dp, parent, after): item = QTreeWidgetItem(parent, after) item.setText(1, dp.filename) item.setToolTip(1, dp.filename) item.setText(2, dp.comment or "") item.setToolTip(2, dp.comment or "") item._ientry = None item._dp = dp item._menu = self._archived_dp_menu item._set_menu_title = lambda: self._archived_dp_menu_title.setText( os.path.basename(dp.filename)) return item
def residuals2(self): self.AObs=self.posterioriValue*self.A*(self.A.T*self.P*self.A)**-1*self.A.T self.cofactorM=self.A*(self.A.T*self.P*self.A)**-1*self.A.T self.AResObs=self.posterioriValue*(self.P**-1 - self.A*(self.A.T*self.P*self.A)**-1*self.A.T) # print (self.A.T*self.P*self.A)**-1 # print self.posterioriValue # print self.posterioriValue*(self.A.T*self.P*self.A)**-1 self.cofactorAObs.clear() self.cofactorZ.clear() self.residA=OrderedDict() self.residARe=OrderedDict() # print self.cofactorM count = 0 for i,j in self.obs.iteritems(): for k,l in j.iteritems(): count+=1 self.obsCount=count self.cofactorAObs.setColumnCount(count) self.cofactorAObs.setRowCount(count) self.cofactorZ.setColumnCount(count) self.cofactorZ.setRowCount(count) for i in range (count): for j in range (count): temp=QTableWidgetItem() temp.setText(str(self.cofactorM[i,j])) self.cofactorAObs.setItem(i,j,temp) for i in range (count): for j in range (count): temp=QTableWidgetItem() temp.setText(str(self.AResObs[i,j])) self.cofactorZ.setItem(i,j,temp) i=0 for x,sta in self.obs.iteritems(): for tn,tar in sta.iteritems(): name=x # name=x[0:-2] if not self.residA.has_key(x+tn): self.residA[x+tn]=[None] if not self.residARe.has_key(x+tn): self.residARe[x+tn]=[None] self.residA[x+tn][0]=sqrt(self.AObs[i,i]) self.residARe[x+tn][0]=sqrt(self.AResObs[i,i]) i+=1 # print self.residA # print self.residARe for x,sta in self.obs.iteritems(): for tn,target in sta.iteritems(): name=x+tn item1 = QTreeWidgetItem(self.stdDevAtree) item2 = QTreeWidgetItem(self.stdDevObsTree) if tn[-1]=="D": item1.setText(0, "Direction from"+ x +"to :"+tn[0:-2]) item2.setText(0,"Direction from"+ x+"to :"+tn[0:-2]) elif tn[-1]=="d": item1.setText(0, "Distance from"+ x+"to :"+tn[0:-2]) item2.setText(0,"Distance from"+ x+"to :"+tn[0:-2]) item1.setText(1, str(round(float(self.residA[name][0]),3))) item2.setText(1, str(round(float(self.residARe[name][0]),3)))
def add_child(text): c = QTreeWidgetItem([text], 1) c.setFlags(Qt.ItemIsEnabled) item.addChild(c) return c
def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({ 'text': 'misc' }.get(icat, icat)) item = QTreeWidgetItem( self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) # TODO: Add appropriate tooltips based on the emblems emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') if name in container.opf_name: emblems.append('metadata.png') if imt == ncx_mime: emblems.append('toc.png') if name not in manifested_names and name not in ok_to_be_unmanifested: emblems.append('dialog_question.png') if linear is False: emblems.append('arrow-down.png') if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_warning.png') render_emblems(item, emblems) return item
def build(self, container, preserve_state=True): if preserve_state: state = self.get_state() self.clear() self.root = self.invisibleRootItem() self.root.setFlags(Qt.ItemIsDragEnabled) self.categories = {} for category, text in ( ('text', _('Text')), ('styles', _('Styles')), ('images', _('Images')), ('fonts', _('Fonts')), ('misc', _('Miscellaneous')), ): self.categories[category] = i = QTreeWidgetItem(self.root, 0) i.setText(0, text) i.setData(0, Qt.DecorationRole, self.top_level_pixmap_cache[category]) f = i.font(0) f.setBold(True) i.setFont(0, f) i.setData(0, NAME_ROLE, category) flags = Qt.ItemIsEnabled if category == 'text': flags |= Qt.ItemIsDropEnabled i.setFlags(flags) processed, seen = {}, {} cover_page_name = get_cover_page_name(container) cover_image_name = get_raster_cover_name(container) manifested_names = set() for names in container.manifest_type_map.itervalues(): manifested_names |= set(names) def get_category(name, mt): category = 'misc' if mt.startswith('image/'): category = 'images' elif mt in OEB_FONTS: category = 'fonts' elif mt in OEB_STYLES: category = 'styles' elif mt in OEB_DOCS: category = 'text' ext = name.rpartition('.')[-1].lower() if ext in {'ttf', 'otf', 'woff'}: # Probably wrong mimetype in the OPF category = 'fonts' return category def set_display_name(name, item): if name in processed: # We have an exact duplicate (can happen if there are # duplicates in the spine) item.setText(0, processed[name].text(0)) item.setText(1, processed[name].text(1)) return parts = name.split('/') text = parts[-1] while text in seen and parts: text = parts.pop() + '/' + text seen[text] = item item.setText(0, text) item.setText(1, hexlify(sort_key(text))) def render_emblems(item, emblems): emblems = tuple(emblems) if not emblems: return icon = self.rendered_emblem_cache.get(emblems, None) if icon is None: pixmaps = [] for emblem in emblems: pm = self.emblem_cache.get(emblem, None) if pm is None: pm = self.emblem_cache[emblem] = QPixmap( I(emblem)).scaled( self.iconSize(), transformMode=Qt.SmoothTransformation) pixmaps.append(pm) num = len(pixmaps) w, h = pixmaps[0].width(), pixmaps[0].height() if num == 1: icon = self.rendered_emblem_cache[emblems] = QIcon( pixmaps[0]) else: canvas = QPixmap((num * w) + ((num - 1) * 2), h) canvas.fill(Qt.transparent) painter = QPainter(canvas) for i, pm in enumerate(pixmaps): painter.drawPixmap(i * (w + 2), 0, pm) painter.end() icon = self.rendered_emblem_cache[emblems] = canvas item.setData(0, Qt.DecorationRole, icon) cannot_be_renamed = container.names_that_must_not_be_changed ncx_mime = guess_type('a.ncx') def create_item(name, linear=None): imt = container.mime_map.get(name, guess_type(name)) icat = get_category(name, imt) category = 'text' if linear is not None else ({ 'text': 'misc' }.get(icat, icat)) item = QTreeWidgetItem( self.categories['text' if linear is not None else category], 1) flags = Qt.ItemIsEnabled | Qt.ItemIsSelectable if category == 'text': flags |= Qt.ItemIsDragEnabled if name not in cannot_be_renamed: flags |= Qt.ItemIsEditable item.setFlags(flags) item.setStatusTip(0, _('Full path: ') + name) item.setData(0, NAME_ROLE, name) item.setData(0, CATEGORY_ROLE, category) item.setData(0, LINEAR_ROLE, bool(linear)) item.setData(0, MIME_ROLE, imt) set_display_name(name, item) tooltips = [] emblems = [] if name in {cover_page_name, cover_image_name}: emblems.append('default_cover.png') tooltips.append( _('This file is the cover %s for this book') % (_('image') if name == cover_image_name else _('page'))) if name in container.opf_name: emblems.append('metadata.png') tooltips.append( _('This file contains all the metadata and book structure information' )) if imt == ncx_mime: emblems.append('toc.png') tooltips.append( _('This file contains the metadata table of contents')) if name not in manifested_names and not container.ok_to_be_unmanifested( name): emblems.append('dialog_question.png') tooltips.append( _('This file is not listed in the book manifest')) if linear is False: emblems.append('arrow-down.png') tooltips.append( _('This file is marked as non-linear in the spine\nDrag it to the top to make it linear' )) if linear is None and icat == 'text': # Text item outside spine emblems.append('dialog_warning.png') tooltips.append( _('This file is a text file that is not referenced in the spine' )) if category == 'text' and name in processed: # Duplicate entry in spine emblems.append('dialog_error.png') tooltips.append( _('This file occurs more than once in the spine')) render_emblems(item, emblems) if tooltips: item.setData(0, Qt.ToolTipRole, '\n'.join(tooltips)) return item for name, linear in container.spine_names: processed[name] = create_item(name, linear=linear) for name in container.name_path_map: if name in processed: continue processed[name] = create_item(name) for name, c in self.categories.iteritems(): c.setExpanded(True) if name != 'text': c.sortChildren(1, Qt.AscendingOrder) if preserve_state: self.set_state(state) if self.current_edited_name: item = self.item_from_name(self.current_edited_name) if item is not None: self.mark_item_as_current(item)
def residuals(self): self.stdDevTree.clear() self.resid={} for x in self.unknowns: list=[] name=x[0:-2] item = QTreeWidgetItem(self.stdDevTree) item.setText(0, name) if not self.resid.has_key(name): self.resid[name]=[None,None,None] if x[-1]=="o": self.resid[name][2]=(self.precisi[name+"_o"]) item.setText(3, str(round(float(self.resid[name][2]),3))) elif x[-1]=="x": self.resid[name][0]=(self.precisi[name+"_x"]) item.setText(1, str(round(float(self.resid[name][0]),3))) elif x[-1]=="y": self.resid[name][1]=(self.precisi[name+"_y"]) item.setText(2, str(round(float(self.resid[name][1]),3))) for name in self.unknowns: name=x[0:-2] if not (self.resid[name][2])==None: if (self.resid[name][0])==None and (self.resid[name][1])==None: item.setText(0, name+"(control)") self.vtpvLabel.setText("VTPV: "+str(self.vtpv)) self.vtpvLabel.setVisible(True) if float(round(float((self.A.T*self.P*self.V).T*(self.A.T*self.P*self.V)),6))==0.: self.numcheckLabel.setVisible(True) self.posteriori.setText("Posteriori: "+str(self.posterioriValue)) self.posteriori.setVisible(True) self.posteriori_2.setText(str(round(self.posterioriValue,5))) self.posteriori_2.setVisible(True) check1=globalCheck(self.provis,self.control,self.V,self.obs,self.unknowns,self.Xdict) for x,ob in self.XOdict.iteritems(): list=[] name=x[0:-2] item = QTreeWidgetItem(self.stdDevTree) item.setText(0, name+" orientation:") item.setText(3, str(round(float(self.XOdict[x]),3))) sum=0 for i in check1.values(): sum+=round(i,4) if round(sum,3)==0.: self.glocheckLabel.setVisible(True) else: self.glocheckLabel.setText("GLOBAL UNSUCCESS") # self.glocheckLabel.setStyleSheet(color="red") self.glocheckLabel.setVisible(True)
class ChooseFolder(Dialog): # {{{ def __init__(self, msg=None, parent=None): self.msg = msg Dialog.__init__(self, _('Choose folder'), 'choose-folder', parent=parent) def setup_ui(self): self.l = l = QVBoxLayout(self) self.setLayout(l) self.msg = m = QLabel(self.msg or _( 'Choose the folder into which the files will be placed')) l.addWidget(m) m.setWordWrap(True) self.folders = f = QTreeWidget(self) f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) f.setContextMenuPolicy(Qt.CustomContextMenu) f.customContextMenuRequested.connect(self.show_context_menu) self.root = QTreeWidgetItem(f, ('/',)) def process(node, parent): parent.setIcon(0, QIcon(I('mimetypes/dir.png'))) for child in sorted(node, key=sort_key): c = QTreeWidgetItem(parent, (child,)) process(node[child], c) process(create_folder_tree(current_container()), self.root) self.root.setSelected(True) f.expandAll() l.addWidget(self.bb) def show_context_menu(self, point): item = self.folders.itemAt(point) if item is None: return m = QMenu(self) m.addAction(QIcon(I('mimetypes/dir.png')), _('Create new folder'), partial(self.create_folder, item)) m.popup(self.folders.mapToGlobal(point)) def create_folder(self, item): text, ok = QInputDialog.getText(self, _('Folder name'), _('Enter a name for the new folder')) if ok and unicode(text): c = QTreeWidgetItem(item, (unicode(text),)) c.setIcon(0, QIcon(I('mimetypes/dir.png'))) for item in self.folders.selectedItems(): item.setSelected(False) c.setSelected(True) self.folders.setCurrentItem(c) def folder_path(self, item): ans = [] while item is not self.root: ans.append(unicode(item.text(0))) item = item.parent() return tuple(reversed(ans)) @property def chosen_folder(self): try: return '/'.join(self.folder_path(self.folders.selectedItems()[0])) except IndexError: return ''
def setup(self): self.setExpandable(1) QTreeWidgetItem.setup(self)
def __init__(self, window, msg, formats): ''' formats is a list of tuples: [(format, exists, convertible)]. format: Lower case format identifier. E.G. mobi exists: String representing the number of books that exist in the format. convertible: True if the format is a convertible format. formats should be ordered in the device's preferred format ordering. ''' QDialog.__init__(self, window) Ui_ChooseFormatDeviceDialog.__init__(self) self.setupUi(self) self.formats.activated[QModelIndex].connect(self.activated_slot) self.msg.setText(msg) for i, (format, exists, convertible) in enumerate(formats): t_item = QTreeWidgetItem() t_item.setIcon(0, file_icon_provider().icon_from_ext(format.lower())) t_item.setText(0, format.upper()) t_item.setText(1, exists) if convertible: t_item.setIcon(2, QIcon(I('ok.png'))) self.formats.addTopLevelItem(t_item) if i == 0: self.formats.setCurrentItem(t_item) t_item.setSelected(True) self.formats.resizeColumnToContents(2) self.formats.resizeColumnToContents(1) self.formats.resizeColumnToContents(0) self.formats.header().resizeSection(0, self.formats.header().sectionSize(0) * 2) self._format = None
def readObsFile(self, filename): self.N,self.stationsOrder,self.obsOrder = Observations(filename) N=self.N self.obs1,self.ObsList=getObs(N) self.obs=obsSplit(self.obs1) for name in self.stationsOrder: item = QTreeWidgetItem(self.treeObs) item.setText(0, name) for t,j in self.obs[name].iteritems(): subitem=QTreeWidgetItem(item) subitem.setText(1, t[0:-2]) if j.type=='direction': subitem.setText(2,str( rad2dms(j.direction))) subitem.setCheckState(0, Qt.Checked) if j.type=='distance': subitem.setCheckState(0, Qt.Checked) subitem.setText(3, str(j.distance)) if j.type=='both': subitem.setText(2,str( rad2dms(j.direction))) subitem.setCheckState(0, Qt.Checked) subitem.setText(3, str(j.distance)) item.setCheckState(0, Qt.Checked)