def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{ table, comment_fields = (render_data_func or render_data)( mi, all_fields=all_fields, use_roman_numbers=config['use_roman_numerals_for_series_number']) def color_to_string(col): ans = '#000000' if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans fi = QFontInfo(QApplication.font(widget)) f = fi.pixelSize() + 1 + int(tweaks['change_book_details_font_size_by']) fam = unicode(fi.family()).strip().replace('"', '') if not fam: fam = 'sans-serif' c = color_to_string(QApplication.palette().color(QPalette.Normal, QPalette.WindowText)) templ = u'''\ <html> <head> <style type="text/css"> body, td { background-color: transparent; font-size: %dpx; font-family: "%s",sans-serif; color: %s } </style> <style type="text/css"> %s </style> </head> <body> %%s </body> <html> ''' % (f, fam, c, css) comments = u'' if comment_fields: comments = '\n'.join(u'<div>%s</div>' % x for x in comment_fields) right_pane = u'<div id="comments" class="comments">%s</div>' % comments if vertical: ans = templ % (table + right_pane) else: ans = templ % ( u'<table><tr><td valign="top" ' 'style="padding-right:2em; width:40%%">%s</td><td valign="top">%s</td></tr></table>' % (table, right_pane)) return ans
def changed(self, field): w = self.widgets[field] if not w.new.same_as(w.old) and (not self.blank_as_equal or not w.new.is_blank): w.label.setFont(self.changed_font) else: w.label.setFont(QApplication.font())
def show_data(self, html): def color_to_string(col): ans = '#000000' if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans fi = QFontInfo(QApplication.font(self.parent())) f = fi.pixelSize()+1+int(tweaks['change_book_details_font_size_by']) fam = unicode(fi.family()).strip().replace('"', '') if not fam: fam = 'sans-serif' c = color_to_string(QApplication.palette().color(QPalette.Normal, QPalette.WindowText)) templ = '''\ <html> <head> <style type="text/css"> body, td {background-color: transparent; font-family: "%s"; font-size: %dpx; color: %s } a { text-decoration: none; color: blue } div.description { margin-top: 0; padding-top: 0; text-indent: 0 } table { margin-bottom: 0; padding-bottom: 0; } </style> </head> <body> <div class="description"> %%s </div> </body> <html> '''%(fam, f, c) self.setHtml(templ%html)
def setup_styles(self, force_calibre_style): self.original_font = QFont(QApplication.font()) fi = gprefs['font'] if fi is not None: font = QFont(*(fi[:4])) s = gprefs.get('font_stretch', None) if s is not None: font.setStretch(s) QApplication.setFont(font) depth_ok = True if iswindows: # There are some people that still run 16 bit winxp installs. The # new style does not render well on 16bit machines. try: depth_ok = get_windows_color_depth() >= 32 except: import traceback traceback.print_exc() if force_calibre_style or (depth_ok and gprefs['ui_style'] != 'system'): self.load_calibre_style() else: st = self.style() if st is not None: st = unicode(st.objectName()).lower() if (islinux or isbsd) and st in ('windows', 'motif', 'cde'): from PyQt4.Qt import QStyleFactory styles = set(map(unicode, QStyleFactory.keys())) if os.environ.get('KDE_FULL_SESSION', False): self.load_calibre_style() elif 'Cleanlooks' in styles: self.setStyle('Cleanlooks')
def _initFonts(): """Initializes fonts on fitrst call""" if SkyModelTreeWidgetItem._fonts is None: stdfont = QApplication.font() boldfont = QFont(stdfont) boldfont.setBold(True) SkyModelTreeWidgetItem._fonts = [stdfont, boldfont] SkyModelTreeWidgetItem._fontmetrics = QFontMetrics(boldfont)
def __init__(self, *args, **kwargs): QStyledItemDelegate.__init__(self, *args, **kwargs) self.rf = QFont(rating_font()) self.em = Qt.ElideMiddle delta = 0 if iswindows and sys.getwindowsversion().major >= 6: delta = 2 self.rf.setPointSize(QFontInfo(QApplication.font()).pointSize()+delta)
def render_html(mi, css, vertical, widget, all_fields=False, render_data_func=None): # {{{ table, comment_fields = (render_data_func or render_data)( mi, all_fields=all_fields, use_roman_numbers=config["use_roman_numerals_for_series_number"] ) def color_to_string(col): ans = "#000000" if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans fi = QFontInfo(QApplication.font(widget)) f = fi.pixelSize() + 1 + int(tweaks["change_book_details_font_size_by"]) fam = unicode(fi.family()).strip().replace('"', "") if not fam: fam = "sans-serif" c = color_to_string(QApplication.palette().color(QPalette.Normal, QPalette.WindowText)) templ = u"""\ <html> <head> <style type="text/css"> body, td { background-color: transparent; font-size: %dpx; font-family: "%s",sans-serif; color: %s } </style> <style type="text/css"> %s </style> </head> <body> %%s </body> <html> """ % ( f, fam, c, css, ) comments = u"" if comment_fields: comments = "\n".join(u"<div>%s</div>" % x for x in comment_fields) right_pane = u'<div id="comments" class="comments">%s</div>' % comments if vertical: ans = templ % (table + right_pane) else: ans = templ % ( u'<table><tr><td valign="top" ' 'style="padding-right:2em; width:40%%">%s</td><td valign="top">%s</td></tr></table>' % (table, right_pane) ) return ans
def render_html(mi, css, vertical, widget, all_fields=False): # {{{ table = render_data(mi, all_fields=all_fields, use_roman_numbers=config['use_roman_numerals_for_series_number']) def color_to_string(col): ans = '#000000' if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans fi = QFontInfo(QApplication.font(widget)) f = fi.pixelSize() + 1 + int(tweaks['change_book_details_font_size_by']) fam = unicode(fi.family()).strip().replace('"', '') if not fam: fam = 'sans-serif' c = color_to_string(QApplication.palette().color(QPalette.Normal, QPalette.WindowText)) templ = u'''\ <html> <head> <style type="text/css"> body, td { background-color: transparent; font-size: %dpx; font-family: "%s",sans-serif; color: %s } </style> <style type="text/css"> %s </style> </head> <body> %%s </body> <html> '''%(f, fam, c, css) fm = getattr(mi, 'field_metadata', field_metadata) fl = dict(get_field_list(fm)) show_comments = (all_fields or fl.get('comments', True)) comments = u'' if mi.comments and show_comments: comments = comments_to_html(force_unicode(mi.comments)) right_pane = u'<div id="comments" class="comments">%s</div>'%comments if vertical: ans = templ%(table+right_pane) else: ans = templ%(u'<table><tr><td valign="top" ' 'style="padding-right:2em; width:40%%">%s</td><td valign="top">%s</td></tr></table>' % (table, right_pane)) return ans
def set_font_style(self): fi = QFontInfo(QApplication.font(self)) f = fi.pixelSize() + 1 + int(tweaks['change_book_details_font_size_by']) fam = unicode(fi.family()).strip().replace('"', '') if not fam: fam = 'sans-serif' style = 'font-size: %fpx; font-family:"%s",sans-serif;' % (f, fam) # toList() is needed because PyQt on Debian is old/broken for body in self.page().mainFrame().documentElement().findAll('body').toList(): body.setAttribute('style', style) self.page().setContentEditable(not self.readonly)
def setup_styles(self, force_calibre_style): self.original_font = QFont(QApplication.font()) fi = gprefs["font"] if fi is not None: font = QFont(*(fi[:4])) s = gprefs.get("font_stretch", None) if s is not None: font.setStretch(s) QApplication.setFont(font) depth_ok = True if iswindows: # There are some people that still run 16 bit winxp installs. The # new style does not render well on 16bit machines. try: depth_ok = get_windows_color_depth() >= 32 except: import traceback traceback.print_exc() if not depth_ok: prints("Color depth is less than 32 bits disabling modern look") if force_calibre_style or (depth_ok and gprefs["ui_style"] != "system"): self.load_calibre_style() else: st = self.style() if st is not None: st = unicode(st.objectName()).lower() if (islinux or isbsd) and st in ("windows", "motif", "cde"): from PyQt4.Qt import QStyleFactory styles = set(map(unicode, QStyleFactory.keys())) if os.environ.get("KDE_FULL_SESSION", False): self.load_calibre_style() elif "Cleanlooks" in styles: self.setStyle("Cleanlooks")
def __init__(self, field_metadata, parent=None, revert_tooltip=None, datetime_fmt='MMMM yyyy', blank_as_equal=True, fields=('title', 'authors', 'series', 'tags', 'rating', 'publisher', 'pubdate', 'identifiers', 'languages', 'comments', 'cover')): QWidget.__init__(self, parent) self.l = l = QGridLayout() l.setContentsMargins(0, 0, 0, 0) self.setLayout(l) revert_tooltip = revert_tooltip or _('Revert %s') self.current_mi = None self.changed_font = QFont(QApplication.font()) self.changed_font.setBold(True) self.changed_font.setItalic(True) self.blank_as_equal = blank_as_equal self.widgets = OrderedDict() row = 0 for field in fields: m = field_metadata[field] dt = m['datatype'] extra = None if 'series' in {field, dt}: cls = SeriesEdit elif field == 'identifiers': cls = IdentifiersEdit elif field == 'languages': cls = LanguagesEdit elif 'comments' in {field, dt}: cls = CommentsEdit elif 'rating' in {field, dt}: cls = RatingsEdit elif dt == 'datetime': extra = datetime_fmt cls = DateEdit elif field == 'cover': cls = CoverView elif dt in {'text', 'enum'}: cls = LineEdit else: continue neww = cls(field, True, self, m, extra) neww.changed.connect(partial(self.changed, field)) oldw = cls(field, False, self, m, extra) newl = QLabel('&%s:' % m['name']) newl.setBuddy(neww) button = QToolButton(self) button.setIcon(QIcon(I('back.png'))) button.clicked.connect(partial(self.revert, field)) button.setToolTip(revert_tooltip % m['name']) self.widgets[field] = Widgets(neww, oldw, newl, button) for i, w in enumerate((newl, neww, button, oldw)): c = i if i < 2 else i + 1 if w is oldw: c += 1 l.addWidget(w, row, c) row += 1 self.sep = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 2, row, 1) self.sep2 = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 4, row, 1)
def render_html(current_book, css, vertical, widget, all_fields=False, render_data_func=None): u""" :param current_book: :param css: :param vertical: :param widget: :param all_fields: :param render_data_func: :return: """ table, comment_fields = render_data(current_book, all_fields=all_fields, use_roman_numbers=True) def color_to_string(col): ans = '#000000' if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans font_info = QFontInfo(QApplication.font(widget)) font_px = font_info.pixelSize() + 1 font_family = unicode(font_info.family()).strip().replace('"', '') if not font_family: font_family = 'sans-serif' body_td_color = color_to_string(QApplication.palette().color(QPalette.Normal, QPalette.WindowText)) template = u""" <html> <head> <style type="text/css"> body, td { background-color: transparent; font-size: %dpx; font-family: "%s", sans-serif; color: %s } </style> <style type="text/css"> %s </style> </head> <body> %%s </body> </html> """ % (font_px, font_family, body_td_color, css) comments = u'' comment_fields = None if comment_fields: comments = '\n'.join(u'<div>%s</div>' % x for x in comment_fields) right_pane = u'<div id="comments" class="comments">%s</div>' % comments if vertical: ans = template % (table+right_pane) else: ans = template % (u'<table><tr><td valign="top" ' 'style="padding-right:2em; width:40%%">%s</td><td valign="top">%s</td></tr></table>' % (table, right_pane)) return ans
def _setupHistogramPlot(self): self._histplot.setCanvasBackground(QColor("lightgray")) self._histplot.setAxisFont(QwtPlot.yLeft, QApplication.font()) self._histplot.setAxisFont(QwtPlot.xBottom, QApplication.font()) # add histogram curves self._histcurve1 = TiggerPlotCurve() self._histcurve2 = TiggerPlotCurve() self._histcurve1.setStyle(QwtPlotCurve.Steps) self._histcurve2.setStyle(QwtPlotCurve.Steps) self._histcurve1.setPen(QPen(Qt.NoPen)) self._histcurve1.setBrush(QBrush(QColor("slategrey"))) pen = QPen(QColor("red")) pen.setWidth(1) self._histcurve2.setPen(pen) self._histcurve1.setZ(0) self._histcurve2.setZ(100) # self._histcurve1.attach(self._histplot) self._histcurve2.attach(self._histplot) # add maxbin and half-max curves self._line_0 = self.HistogramLineMarker(self._histplot, color="grey50", linestyle=Qt.SolidLine, align=Qt.AlignTop | Qt.AlignLeft, z=90) self._line_mean = self.HistogramLineMarker(self._histplot, color="black", linestyle=Qt.SolidLine, align=Qt.AlignBottom | Qt.AlignRight, z=91, label="mean", zlabel=151) self._line_std = self.HistogramLineMarker(self._histplot, color="black", linestyle=Qt.SolidLine, align=Qt.AlignTop | Qt.AlignRight, z=91, label="std", zlabel=151) sym = QwtSymbol() sym.setStyle(QwtSymbol.VLine) sym.setSize(8) self._line_std.line.setSymbol(sym) self._line_maxbin = self.HistogramLineMarker(self._histplot, color="green", linestyle=Qt.DotLine, align=Qt.AlignTop | Qt.AlignRight, z=92, label="max bin", zlabel=150) self._line_halfmax = self.HistogramLineMarker(self._histplot, color="green", linestyle=Qt.DotLine, align=Qt.AlignBottom | Qt.AlignRight, z=90, label="half-max", yaxis=QwtPlot.yLeft) # add current range self._rangebox = TiggerPlotCurve() self._rangebox.setStyle(QwtPlotCurve.Steps) self._rangebox.setYAxis(QwtPlot.yRight) self._rangebox.setPen(QPen(Qt.NoPen)) self._rangebox.setBrush(QBrush(QColor("darkgray"))) self._rangebox.setZ(50) self._rangebox.attach(self._histplot) self._rangebox2 = TiggerPlotCurve() self._rangebox2.setStyle(QwtPlotCurve.Sticks) self._rangebox2.setYAxis(QwtPlot.yRight) self._rangebox2.setZ(60) # self._rangebox2.attach(self._histplot) # add intensity transfer function self._itfcurve = TiggerPlotCurve() self._itfcurve.setStyle(QwtPlotCurve.Lines) self._itfcurve.setPen(QPen(QColor("blue"))) self._itfcurve.setYAxis(QwtPlot.yRight) self._itfcurve.setZ(120) self._itfcurve.attach(self._histplot) self._itfmarker = TiggerPlotMarker() label = QwtText("ITF") label.setColor(QColor("blue")) self._itfmarker.setLabel(label) try: self._itfmarker.setSpacing(0) except AttributeError: pass self._itfmarker.setLabelAlignment(Qt.AlignTop | Qt.AlignRight) self._itfmarker.setZ(120) self._itfmarker.attach(self._histplot) # add colorbar self._cb_item = self.ColorBarPlotItem(1, 1 + self.ColorBarHeight) self._cb_item.setYAxis(QwtPlot.yRight) self._cb_item.attach(self._histplot) # add pickers self._hist_minpicker = self.HistLimitPicker(self._histplot, "low: %(x).4g") self._hist_minpicker.setMousePattern(QwtEventPattern.MouseSelect1, Qt.LeftButton) QObject.connect(self._hist_minpicker, SIGNAL("selected(const QwtDoublePoint &)"), self._selectLowLimit) self._hist_maxpicker = self.HistLimitPicker(self._histplot, "high: %(x).4g") self._hist_maxpicker.setMousePattern(QwtEventPattern.MouseSelect1, Qt.RightButton) QObject.connect(self._hist_maxpicker, SIGNAL("selected(const QwtDoublePoint &)"), self._selectHighLimit) self._hist_maxpicker1 = self.HistLimitPicker(self._histplot, "high: %(x).4g") self._hist_maxpicker1.setMousePattern(QwtEventPattern.MouseSelect1, Qt.LeftButton, Qt.CTRL) QObject.connect(self._hist_maxpicker1, SIGNAL("selected(const QwtDoublePoint &)"), self._selectHighLimit) self._hist_zoompicker = self.HistLimitPicker(self._histplot, label="zoom", tracker_mode=QwtPicker.AlwaysOn, track=self._trackHistCoordinates, color="black", mode=QwtPicker.RectSelection, rubber_band=QwtPicker.RectRubberBand) self._hist_zoompicker.setMousePattern(QwtEventPattern.MouseSelect1, Qt.LeftButton, Qt.SHIFT) QObject.connect(self._hist_zoompicker, SIGNAL("selected(const QwtDoubleRect &)"), self._zoomHistogramIntoRect)
def __init__(self, parent=None): QAbstractItemModel.__init__(self, parent) self.categories = ((_('Favorites'), ()), # {{{ (_('European scripts'), ( (_('Armenian'), (0x530, 0x58F)), (_('Armenian ligatures'), (0xFB13, 0xFB17)), (_('Coptic'), (0x2C80, 0x2CFF)), (_('Coptic in Greek block'), (0x3E2, 0x3EF)), (_('Cypriot Syllabary'), (0x10800, 0x1083F)), (_('Cyrillic'), (0x400, 0x4FF)), (_('Cyrillic Supplement'), (0x500, 0x52F)), (_('Cyrillic Extended-A'), (0x2DE0, 0x2DFF)), (_('Cyrillic Extended-B'), (0xA640, 0xA69F)), (_('Georgian'), (0x10A0, 0x10FF)), (_('Georgian Supplement'), (0x2D00, 0x2D2F)), (_('Glagolitic'), (0x2C00, 0x2C5F)), (_('Gothic'), (0x10330, 0x1034F)), (_('Greek and Coptic'), (0x370, 0x3FF)), (_('Greek Extended'), (0x1F00, 0x1FFF)), (_('Latin, Basic & Latin-1 Supplement'), (0x20, 0xFF)), (_('Latin Extended-A'), (0x100, 0x17F)), (_('Latin Extended-B'), (0x180, 0x24F)), (_('Latin Extended-C'), (0x2C60, 0x2C7F)), (_('Latin Extended-D'), (0xA720, 0xA7FF)), (_('Latin Extended Additional'), (0x1E00, 0x1EFF)), (_('Latin ligatures'), (0xFB00, 0xFB06)), (_('Fullwidth Latin letters'), (0xFF00, 0xFF5E)), (_('Linear B Syllabary'), (0x10000, 0x1007F)), (_('Linear B Ideograms'), (0x10080, 0x100FF)), (_('Ogham'), (0x1680, 0x169F)), (_('Old Italic'), (0x10300, 0x1032F)), (_('Phaistos Disc'), (0x101D0, 0x101FF)), (_('Runic'), (0x16A0, 0x16FF)), (_('Shavian'), (0x10450, 0x1047F)), )), (_('Phonetic Symbols'), ( (_('IPA Extensions'), (0x250, 0x2AF)), (_('Phonetic Extensions'), (0x1D00, 0x1D7F)), (_('Phonetic Extensions Supplement'), (0x1D80, 0x1DBF)), (_('Modifier Tone Letters'), (0xA700, 0xA71F)), (_('Spacing Modifier Letters'), (0x2B0, 0x2FF)), (_('Superscripts and Subscripts'), (0x2070, 0x209F)), )), (_('Combining Diacritics'), ( (_('Combining Diacritical Marks'), (0x300, 0x36F)), (_('Combining Diacritical Marks for Symbols'), (0x20D0, 0x20FF)), (_('Combining Diacritical Marks Supplement'), (0x1DC0, 0x1DFF)), (_('Combining Half Marks'), (0xFE20, 0xFE2F)), )), (_('African Scripts'), ( (_('Bamum'), (0xA6A0, 0xA6FF)), (_('Bamum Supplement'), (0x16800, 0x16A3F)), (_('Egyptian Hieroglyphs'), (0x13000, 0x1342F)), (_('Ethiopic'), (0x1200, 0x137F)), (_('Ethiopic Supplement'), (0x1380, 0x139F)), (_('Ethiopic Extended'), (0x2D80, 0x2DDF)), (_('Ethiopic Extended-A'), (0xAB00, 0xAB2F)), (_('Meroitic Cursive'), (0x109A0, 0x109FF)), (_('Meroitic Hieroglyphs*'), (0x10980, 0x1099F)), (_('N\'Ko'), (0x7C0, 0x7FF)), (_('Osmanya'), (0x10480, 0x104AF)), (_('Tifinagh'), (0x2D30, 0x2D7F)), (_('Vai'), (0xA500, 0xA63F)), )), (_('Middle Eastern Scripts'), ( (_('Arabic'), (0x600, 0x6FF)), (_('Arabic Supplement'), (0x750, 0x77F)), (_('Arabic Extended-A'), (0x8A0, 0x8FF)), (_('Arabic Presentation Forms-A'), (0xFB50, 0xFDFF)), (_('Arabic Presentation Forms-B'), (0xFE70, 0xFEFF)), (_('Avestan'), (0x10B00, 0x10B3F)), (_('Carian'), (0x102A0, 0x102DF)), (_('Cuneiform'), (0x12000, 0x123FF)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Hebrew'), (0x590, 0x5FF)), (_('Hebrew Presentation Forms'), (0xFB1D, 0xFB4F)), (_('Imperial Aramaic'), (0x10840, 0x1085F)), (_('Inscriptional Pahlavi'), (0x10B60, 0x10B7F)), (_('Inscriptional Parthian'), (0x10B40, 0x10B5F)), (_('Lycian'), (0x10280, 0x1029F)), (_('Lydian'), (0x10920, 0x1093F)), (_('Mandaic'), (0x840, 0x85F)), (_('Old Persian'), (0x103A0, 0x103DF)), (_('Old South Arabian'), (0x10A60, 0x10A7F)), (_('Phoenician'), (0x10900, 0x1091F)), (_('Samaritan'), (0x800, 0x83F)), (_('Syriac'), (0x700, 0x74F)), (_('Ugaritic'), (0x10380, 0x1039F)), )), (_('Central Asian Scripts'), ( (_('Mongolian'), (0x1800, 0x18AF)), (_('Old Turkic'), (0x10C00, 0x10C4F)), (_('Phags-pa'), (0xA840, 0xA87F)), (_('Tibetan'), (0xF00, 0xFFF)), )), (_('South Asian Scripts'), ( (_('Bengali'), (0x980, 0x9FF)), (_('Brahmi'), (0x11000, 0x1107F)), (_('Chakma'), (0x11100, 0x1114F)), (_('Devanagari'), (0x900, 0x97F)), (_('Devanagari Extended'), (0xA8E0, 0xA8FF)), (_('Gujarati'), (0xA80, 0xAFF)), (_('Gurmukhi'), (0xA00, 0xA7F)), (_('Kaithi'), (0x11080, 0x110CF)), (_('Kannada'), (0xC80, 0xCFF)), (_('Kharoshthi'), (0x10A00, 0x10A5F)), (_('Lepcha'), (0x1C00, 0x1C4F)), (_('Limbu'), (0x1900, 0x194F)), (_('Malayalam'), (0xD00, 0xD7F)), (_('Meetei Mayek'), (0xABC0, 0xABFF)), (_('Meetei Mayek Extensions*'), (0xAAE0, 0xAAEF)), (_('Ol Chiki'), (0x1C50, 0x1C7F)), (_('Oriya'), (0xB00, 0xB7F)), (_('Saurashtra'), (0xA880, 0xA8DF)), (_('Sinhala'), (0xD80, 0xDFF)), (_('Sharada'), (0x11180, 0x111DF)), (_('Sora Sompeng'), (0x110D0, 0x110FF)), (_('Syloti Nagri'), (0xA800, 0xA82F)), (_('Takri'), (0x11680, 0x116CF)), (_('Tamil'), (0xB80, 0xBFF)), (_('Telugu'), (0xC00, 0xC7F)), (_('Thaana'), (0x780, 0x7BF)), (_('Vedic Extensions'), (0x1CD0, 0x1CFF)), )), (_('Southeast Asian Scripts'), ( (_('Balinese'), (0x1B00, 0x1B7F)), (_('Batak'), (0x1BC0, 0x1BFF)), (_('Buginese'), (0x1A00, 0x1A1F)), (_('Cham'), (0xAA00, 0xAA5F)), (_('Javanese'), (0xA980, 0xA9DF)), (_('Kayah Li'), (0xA900, 0xA92F)), (_('Khmer'), (0x1780, 0x17FF)), (_('Khmer Symbols'), (0x19E0, 0x19FF)), (_('Lao'), (0xE80, 0xEFF)), (_('Myanmar'), (0x1000, 0x109F)), (_('Myanmar Extended-A'), (0xAA60, 0xAA7F)), (_('New Tai Lue'), (0x1980, 0x19DF)), (_('Rejang'), (0xA930, 0xA95F)), (_('Sundanese'), (0x1B80, 0x1BBF)), (_('Sundanese Supplement'), (0x1CC0, 0x1CCF)), (_('Tai Le'), (0x1950, 0x197F)), (_('Tai Tham'), (0x1A20, 0x1AAF)), (_('Tai Viet'), (0xAA80, 0xAADF)), (_('Thai'), (0xE00, 0xE7F)), )), (_('Philippine Scripts'), ( (_('Buhid'), (0x1740, 0x175F)), (_('Hanunoo'), (0x1720, 0x173F)), (_('Tagalog'), (0x1700, 0x171F)), (_('Tagbanwa'), (0x1760, 0x177F)), )), (_('East Asian Scripts'), ( (_('Bopomofo'), (0x3100, 0x312F)), (_('Bopomofo Extended'), (0x31A0, 0x31BF)), (_('CJK Unified Ideographs'), (0x4E00, 0x9FFF)), (_('CJK Unified Ideographs Extension-A'), (0x3400, 0x4DBF)), (_('CJK Unified Ideographs Extension B'), (0x20000, 0x2A6DF)), (_('CJK Unified Ideographs Extension C'), (0x2A700, 0x2B73F)), (_('CJK Unified Ideographs Extension D'), (0x2B740, 0x2B81F)), (_('CJK Compatibility Ideographs'), (0xF900, 0xFAFF)), (_('CJK Compatibility Ideographs Supplement'), (0x2F800, 0x2FA1F)), (_('Kangxi Radicals'), (0x2F00, 0x2FDF)), (_('CJK Radicals Supplement'), (0x2E80, 0x2EFF)), (_('CJK Strokes'), (0x31C0, 0x31EF)), (_('Ideographic Description Characters'), (0x2FF0, 0x2FFF)), (_('Hiragana'), (0x3040, 0x309F)), (_('Katakana'), (0x30A0, 0x30FF)), (_('Katakana Phonetic Extensions'), (0x31F0, 0x31FF)), (_('Kana Supplement'), (0x1B000, 0x1B0FF)), (_('Halfwidth Katakana'), (0xFF65, 0xFF9F)), (_('Kanbun'), (0x3190, 0x319F)), (_('Hangul Syllables'), (0xAC00, 0xD7AF)), (_('Hangul Jamo'), (0x1100, 0x11FF)), (_('Hangul Jamo Extended-A'), (0xA960, 0xA97F)), (_('Hangul Jamo Extended-B'), (0xD7B0, 0xD7FF)), (_('Hangul Compatibility Jamo'), (0x3130, 0x318F)), (_('Halfwidth Jamo'), (0xFFA0, 0xFFDC)), (_('Lisu'), (0xA4D0, 0xA4FF)), (_('Miao'), (0x16F00, 0x16F9F)), (_('Yi Syllables'), (0xA000, 0xA48F)), (_('Yi Radicals'), (0xA490, 0xA4CF)), )), (_('American Scripts'), ( (_('Cherokee'), (0x13A0, 0x13FF)), (_('Deseret'), (0x10400, 0x1044F)), (_('Unified Canadian Aboriginal Syllabics'), (0x1400, 0x167F)), (_('UCAS Extended'), (0x18B0, 0x18FF)), )), (_('Other'), ( (_('Alphabetic Presentation Forms'), (0xFB00, 0xFB4F)), (_('Halfwidth and Fullwidth Forms'), (0xFF00, 0xFFEF)), )), (_('Punctuation'), ( (_('General Punctuation'), (0x2000, 0x206F)), (_('ASCII Punctuation'), (0x21, 0x7F)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Latin-1 Punctuation'), (0xA1, 0xBF)), (_('Small Form Variants'), (0xFE50, 0xFE6F)), (_('Supplemental Punctuation'), (0x2E00, 0x2E7F)), (_('CJK Symbols and Punctuation'), (0x3000, 0x303F)), (_('CJK Compatibility Forms'), (0xFE30, 0xFE4F)), (_('Fullwidth ASCII Punctuation'), (0xFF01, 0xFF60)), (_('Vertical Forms'), (0xFE10, 0xFE1F)), )), (_('Alphanumeric Symbols'), ( (_('Arabic Mathematical Alphabetic Symbols'), (0x1EE00, 0x1EEFF)), (_('Letterlike Symbols'), (0x2100, 0x214F)), (_('Roman Symbols'), (0x10190, 0x101CF)), (_('Mathematical Alphanumeric Symbols'), (0x1D400, 0x1D7FF)), (_('Enclosed Alphanumerics'), (0x2460, 0x24FF)), (_('Enclosed Alphanumeric Supplement'), (0x1F100, 0x1F1FF)), (_('Enclosed CJK Letters and Months'), (0x3200, 0x32FF)), (_('Enclosed Ideographic Supplement'), (0x1F200, 0x1F2FF)), (_('CJK Compatibility'), (0x3300, 0x33FF)), )), (_('Technical Symbols'), ( (_('Miscellaneous Technical'), (0x2300, 0x23FF)), (_('Control Pictures'), (0x2400, 0x243F)), (_('Optical Character Recognition'), (0x2440, 0x245F)), )), (_('Numbers and Digits'), ( (_('Aegean Numbers'), (0x10100, 0x1013F)), (_('Ancient Greek Numbers'), (0x10140, 0x1018F)), (_('Common Indic Number Forms'), (0xA830, 0xA83F)), (_('Counting Rod Numerals'), (0x1D360, 0x1D37F)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Fullwidth ASCII Digits'), (0xFF10, 0xFF19)), (_('Number Forms'), (0x2150, 0x218F)), (_('Rumi Numeral Symbols'), (0x10E60, 0x10E7F)), (_('Superscripts and Subscripts'), (0x2070, 0x209F)), )), (_('Mathematical Symbols'), ( (_('Arrows'), (0x2190, 0x21FF)), (_('Supplemental Arrows-A'), (0x27F0, 0x27FF)), (_('Supplemental Arrows-B'), (0x2900, 0x297F)), (_('Miscellaneous Symbols and Arrows'), (0x2B00, 0x2BFF)), (_('Mathematical Alphanumeric Symbols'), (0x1D400, 0x1D7FF)), (_('Letterlike Symbols'), (0x2100, 0x214F)), (_('Mathematical Operators'), (0x2200, 0x22FF)), (_('Miscellaneous Mathematical Symbols-A'), (0x27C0, 0x27EF)), (_('Miscellaneous Mathematical Symbols-B'), (0x2980, 0x29FF)), (_('Supplemental Mathematical Operators'), (0x2A00, 0x2AFF)), (_('Ceilings and Floors'), (0x2308, 0x230B)), (_('Geometric Shapes'), (0x25A0, 0x25FF)), (_('Box Drawing'), (0x2500, 0x257F)), (_('Block Elements'), (0x2580, 0x259F)), )), (_('Musical Symbols'), ( (_('Musical Symbols'), (0x1D100, 0x1D1FF)), (_('More Musical Symbols'), (0x2669, 0x266F)), (_('Ancient Greek Musical Notation'), (0x1D200, 0x1D24F)), (_('Byzantine Musical Symbols'), (0x1D000, 0x1D0FF)), )), (_('Game Symbols'), ( (_('Chess'), (0x2654, 0x265F)), (_('Domino Tiles'), (0x1F030, 0x1F09F)), (_('Draughts'), (0x26C0, 0x26C3)), (_('Japanese Chess'), (0x2616, 0x2617)), (_('Mahjong Tiles'), (0x1F000, 0x1F02F)), (_('Playing Cards'), (0x1F0A0, 0x1F0FF)), (_('Playing Card Suits'), (0x2660, 0x2667)), )), (_('Other Symbols'), ( (_('Alchemical Symbols'), (0x1F700, 0x1F77F)), (_('Ancient Symbols'), (0x10190, 0x101CF)), (_('Braille Patterns'), (0x2800, 0x28FF)), (_('Currency Symbols'), (0x20A0, 0x20CF)), (_('Combining Diacritical Marks for Symbols'), (0x20D0, 0x20FF)), (_('Dingbats'), (0x2700, 0x27BF)), (_('Emoticons'), (0x1F600, 0x1F64F)), (_('Miscellaneous Symbols'), (0x2600, 0x26FF)), (_('Miscellaneous Symbols and Arrows'), (0x2B00, 0x2BFF)), (_('Miscellaneous Symbols And Pictographs'), (0x1F300, 0x1F5FF)), (_('Yijing Hexagram Symbols'), (0x4DC0, 0x4DFF)), (_('Yijing Mono and Digrams'), (0x268A, 0x268F)), (_('Yijing Trigrams'), (0x2630, 0x2637)), (_('Tai Xuan Jing Symbols'), (0x1D300, 0x1D35F)), (_('Transport And Map Symbols'), (0x1F680, 0x1F6FF)), )), (_('Other'), ( (_('Specials'), (0xFFF0, 0xFFFF)), (_('Tags'), (0xE0000, 0xE007F)), (_('Variation Selectors'), (0xFE00, 0xFE0F)), (_('Variation Selectors Supplement'), (0xE0100, 0xE01EF)), )), ) # }}} self.category_map = {} self.starts = [] for tlname, items in self.categories[1:]: for name, (start, end) in items: self.category_map[start] = (tlname, name) self.starts.append(start) self.starts.sort() self.bold_font = f = QApplication.font() f.setBold(True) self.fav_icon = QIcon(I('rating.png'))
def __init__( self, field_metadata, parent=None, revert_tooltip=None, datetime_fmt='MMMM yyyy', blank_as_equal=True, fields=('title', 'authors', 'series', 'tags', 'rating', 'publisher', 'pubdate', 'identifiers', 'languages', 'comments', 'cover')): QWidget.__init__(self, parent) self.l = l = QGridLayout() l.setContentsMargins(0, 0, 0, 0) self.setLayout(l) revert_tooltip = revert_tooltip or _('Revert %s') self.current_mi = None self.changed_font = QFont(QApplication.font()) self.changed_font.setBold(True) self.changed_font.setItalic(True) self.blank_as_equal = blank_as_equal self.widgets = OrderedDict() row = 0 for field in fields: m = field_metadata[field] dt = m['datatype'] extra = None if 'series' in {field, dt}: cls = SeriesEdit elif field == 'identifiers': cls = IdentifiersEdit elif field == 'languages': cls = LanguagesEdit elif 'comments' in {field, dt}: cls = CommentsEdit elif 'rating' in {field, dt}: cls = RatingsEdit elif dt == 'datetime': extra = datetime_fmt cls = DateEdit elif field == 'cover': cls = CoverView elif dt in {'text', 'enum'}: cls = LineEdit else: continue neww = cls(field, True, self, m, extra) neww.changed.connect(partial(self.changed, field)) oldw = cls(field, False, self, m, extra) newl = QLabel('&%s:' % m['name']) newl.setBuddy(neww) button = QToolButton(self) button.setIcon(QIcon(I('back.png'))) button.clicked.connect(partial(self.revert, field)) button.setToolTip(revert_tooltip % m['name']) self.widgets[field] = Widgets(neww, oldw, newl, button) for i, w in enumerate((newl, neww, button, oldw)): c = i if i < 2 else i + 1 if w is oldw: c += 1 l.addWidget(w, row, c) row += 1 self.sep = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 2, row, 1) self.sep2 = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 4, row, 1) if 'comments' in self.widgets and not gprefs.get('diff_widget_show_comments_controls', True): self.widgets['comments'].new.hide_toolbars()
def render_html(current_book, css, vertical, widget, all_fields=False, render_data_func=None): u""" :param current_book: :param css: :param vertical: :param widget: :param all_fields: :param render_data_func: :return: """ table, comment_fields = render_data(current_book, all_fields=all_fields, use_roman_numbers=True) def color_to_string(col): ans = '#000000' if col.isValid(): col = col.toRgb() if col.isValid(): ans = unicode(col.name()) return ans font_info = QFontInfo(QApplication.font(widget)) font_px = font_info.pixelSize() + 1 font_family = unicode(font_info.family()).strip().replace('"', '') if not font_family: font_family = 'sans-serif' body_td_color = color_to_string(QApplication.palette().color( QPalette.Normal, QPalette.WindowText)) template = u""" <html> <head> <style type="text/css"> body, td { background-color: transparent; font-size: %dpx; font-family: "%s", sans-serif; color: %s } </style> <style type="text/css"> %s </style> </head> <body> %%s </body> </html> """ % (font_px, font_family, body_td_color, css) comments = u'' comment_fields = None if comment_fields: comments = '\n'.join(u'<div>%s</div>' % x for x in comment_fields) right_pane = u'<div id="comments" class="comments">%s</div>' % comments if vertical: ans = template % (table + right_pane) else: ans = template % ( u'<table><tr><td valign="top" ' 'style="padding-right:2em; width:40%%">%s</td><td valign="top">%s</td></tr></table>' % (table, right_pane)) return ans
def __init__(self, parent=None): QAbstractItemModel.__init__(self, parent) self.categories = ( (_('Favorites'), ()), # {{{ (_('European scripts'), ( (_('Armenian'), (0x530, 0x58F)), (_('Armenian ligatures'), (0xFB13, 0xFB17)), (_('Coptic'), (0x2C80, 0x2CFF)), (_('Coptic in Greek block'), (0x3E2, 0x3EF)), (_('Cypriot Syllabary'), (0x10800, 0x1083F)), (_('Cyrillic'), (0x400, 0x4FF)), (_('Cyrillic Supplement'), (0x500, 0x52F)), (_('Cyrillic Extended-A'), (0x2DE0, 0x2DFF)), (_('Cyrillic Extended-B'), (0xA640, 0xA69F)), (_('Georgian'), (0x10A0, 0x10FF)), (_('Georgian Supplement'), (0x2D00, 0x2D2F)), (_('Glagolitic'), (0x2C00, 0x2C5F)), (_('Gothic'), (0x10330, 0x1034F)), (_('Greek and Coptic'), (0x370, 0x3FF)), (_('Greek Extended'), (0x1F00, 0x1FFF)), (_('Latin, Basic & Latin-1 Supplement'), (0x20, 0xFF)), (_('Latin Extended-A'), (0x100, 0x17F)), (_('Latin Extended-B'), (0x180, 0x24F)), (_('Latin Extended-C'), (0x2C60, 0x2C7F)), (_('Latin Extended-D'), (0xA720, 0xA7FF)), (_('Latin Extended Additional'), (0x1E00, 0x1EFF)), (_('Latin ligatures'), (0xFB00, 0xFB06)), (_('Fullwidth Latin letters'), (0xFF00, 0xFF5E)), (_('Linear B Syllabary'), (0x10000, 0x1007F)), (_('Linear B Ideograms'), (0x10080, 0x100FF)), (_('Ogham'), (0x1680, 0x169F)), (_('Old Italic'), (0x10300, 0x1032F)), (_('Phaistos Disc'), (0x101D0, 0x101FF)), (_('Runic'), (0x16A0, 0x16FF)), (_('Shavian'), (0x10450, 0x1047F)), )), (_('Phonetic Symbols'), ( (_('IPA Extensions'), (0x250, 0x2AF)), (_('Phonetic Extensions'), (0x1D00, 0x1D7F)), (_('Phonetic Extensions Supplement'), (0x1D80, 0x1DBF)), (_('Modifier Tone Letters'), (0xA700, 0xA71F)), (_('Spacing Modifier Letters'), (0x2B0, 0x2FF)), (_('Superscripts and Subscripts'), (0x2070, 0x209F)), )), (_('Combining Diacritics'), ( (_('Combining Diacritical Marks'), (0x300, 0x36F)), (_('Combining Diacritical Marks for Symbols'), (0x20D0, 0x20FF)), (_('Combining Diacritical Marks Supplement'), (0x1DC0, 0x1DFF)), (_('Combining Half Marks'), (0xFE20, 0xFE2F)), )), (_('African Scripts'), ( (_('Bamum'), (0xA6A0, 0xA6FF)), (_('Bamum Supplement'), (0x16800, 0x16A3F)), (_('Egyptian Hieroglyphs'), (0x13000, 0x1342F)), (_('Ethiopic'), (0x1200, 0x137F)), (_('Ethiopic Supplement'), (0x1380, 0x139F)), (_('Ethiopic Extended'), (0x2D80, 0x2DDF)), (_('Ethiopic Extended-A'), (0xAB00, 0xAB2F)), (_('Meroitic Cursive'), (0x109A0, 0x109FF)), (_('Meroitic Hieroglyphs*'), (0x10980, 0x1099F)), (_('N\'Ko'), (0x7C0, 0x7FF)), (_('Osmanya'), (0x10480, 0x104AF)), (_('Tifinagh'), (0x2D30, 0x2D7F)), (_('Vai'), (0xA500, 0xA63F)), )), (_('Middle Eastern Scripts'), ( (_('Arabic'), (0x600, 0x6FF)), (_('Arabic Supplement'), (0x750, 0x77F)), (_('Arabic Extended-A'), (0x8A0, 0x8FF)), (_('Arabic Presentation Forms-A'), (0xFB50, 0xFDFF)), (_('Arabic Presentation Forms-B'), (0xFE70, 0xFEFF)), (_('Avestan'), (0x10B00, 0x10B3F)), (_('Carian'), (0x102A0, 0x102DF)), (_('Cuneiform'), (0x12000, 0x123FF)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Hebrew'), (0x590, 0x5FF)), (_('Hebrew Presentation Forms'), (0xFB1D, 0xFB4F)), (_('Imperial Aramaic'), (0x10840, 0x1085F)), (_('Inscriptional Pahlavi'), (0x10B60, 0x10B7F)), (_('Inscriptional Parthian'), (0x10B40, 0x10B5F)), (_('Lycian'), (0x10280, 0x1029F)), (_('Lydian'), (0x10920, 0x1093F)), (_('Mandaic'), (0x840, 0x85F)), (_('Old Persian'), (0x103A0, 0x103DF)), (_('Old South Arabian'), (0x10A60, 0x10A7F)), (_('Phoenician'), (0x10900, 0x1091F)), (_('Samaritan'), (0x800, 0x83F)), (_('Syriac'), (0x700, 0x74F)), (_('Ugaritic'), (0x10380, 0x1039F)), )), (_('Central Asian Scripts'), ( (_('Mongolian'), (0x1800, 0x18AF)), (_('Old Turkic'), (0x10C00, 0x10C4F)), (_('Phags-pa'), (0xA840, 0xA87F)), (_('Tibetan'), (0xF00, 0xFFF)), )), (_('South Asian Scripts'), ( (_('Bengali'), (0x980, 0x9FF)), (_('Brahmi'), (0x11000, 0x1107F)), (_('Chakma'), (0x11100, 0x1114F)), (_('Devanagari'), (0x900, 0x97F)), (_('Devanagari Extended'), (0xA8E0, 0xA8FF)), (_('Gujarati'), (0xA80, 0xAFF)), (_('Gurmukhi'), (0xA00, 0xA7F)), (_('Kaithi'), (0x11080, 0x110CF)), (_('Kannada'), (0xC80, 0xCFF)), (_('Kharoshthi'), (0x10A00, 0x10A5F)), (_('Lepcha'), (0x1C00, 0x1C4F)), (_('Limbu'), (0x1900, 0x194F)), (_('Malayalam'), (0xD00, 0xD7F)), (_('Meetei Mayek'), (0xABC0, 0xABFF)), (_('Meetei Mayek Extensions*'), (0xAAE0, 0xAAEF)), (_('Ol Chiki'), (0x1C50, 0x1C7F)), (_('Oriya'), (0xB00, 0xB7F)), (_('Saurashtra'), (0xA880, 0xA8DF)), (_('Sinhala'), (0xD80, 0xDFF)), (_('Sharada'), (0x11180, 0x111DF)), (_('Sora Sompeng'), (0x110D0, 0x110FF)), (_('Syloti Nagri'), (0xA800, 0xA82F)), (_('Takri'), (0x11680, 0x116CF)), (_('Tamil'), (0xB80, 0xBFF)), (_('Telugu'), (0xC00, 0xC7F)), (_('Thaana'), (0x780, 0x7BF)), (_('Vedic Extensions'), (0x1CD0, 0x1CFF)), )), (_('Southeast Asian Scripts'), ( (_('Balinese'), (0x1B00, 0x1B7F)), (_('Batak'), (0x1BC0, 0x1BFF)), (_('Buginese'), (0x1A00, 0x1A1F)), (_('Cham'), (0xAA00, 0xAA5F)), (_('Javanese'), (0xA980, 0xA9DF)), (_('Kayah Li'), (0xA900, 0xA92F)), (_('Khmer'), (0x1780, 0x17FF)), (_('Khmer Symbols'), (0x19E0, 0x19FF)), (_('Lao'), (0xE80, 0xEFF)), (_('Myanmar'), (0x1000, 0x109F)), (_('Myanmar Extended-A'), (0xAA60, 0xAA7F)), (_('New Tai Lue'), (0x1980, 0x19DF)), (_('Rejang'), (0xA930, 0xA95F)), (_('Sundanese'), (0x1B80, 0x1BBF)), (_('Sundanese Supplement'), (0x1CC0, 0x1CCF)), (_('Tai Le'), (0x1950, 0x197F)), (_('Tai Tham'), (0x1A20, 0x1AAF)), (_('Tai Viet'), (0xAA80, 0xAADF)), (_('Thai'), (0xE00, 0xE7F)), )), (_('Philippine Scripts'), ( (_('Buhid'), (0x1740, 0x175F)), (_('Hanunoo'), (0x1720, 0x173F)), (_('Tagalog'), (0x1700, 0x171F)), (_('Tagbanwa'), (0x1760, 0x177F)), )), (_('East Asian Scripts'), ( (_('Bopomofo'), (0x3100, 0x312F)), (_('Bopomofo Extended'), (0x31A0, 0x31BF)), (_('CJK Unified Ideographs'), (0x4E00, 0x9FFF)), (_('CJK Unified Ideographs Extension-A'), (0x3400, 0x4DBF)), (_('CJK Unified Ideographs Extension B'), (0x20000, 0x2A6DF)), (_('CJK Unified Ideographs Extension C'), (0x2A700, 0x2B73F)), (_('CJK Unified Ideographs Extension D'), (0x2B740, 0x2B81F)), (_('CJK Compatibility Ideographs'), (0xF900, 0xFAFF)), (_('CJK Compatibility Ideographs Supplement'), (0x2F800, 0x2FA1F)), (_('Kangxi Radicals'), (0x2F00, 0x2FDF)), (_('CJK Radicals Supplement'), (0x2E80, 0x2EFF)), (_('CJK Strokes'), (0x31C0, 0x31EF)), (_('Ideographic Description Characters'), (0x2FF0, 0x2FFF)), (_('Hiragana'), (0x3040, 0x309F)), (_('Katakana'), (0x30A0, 0x30FF)), (_('Katakana Phonetic Extensions'), (0x31F0, 0x31FF)), (_('Kana Supplement'), (0x1B000, 0x1B0FF)), (_('Halfwidth Katakana'), (0xFF65, 0xFF9F)), (_('Kanbun'), (0x3190, 0x319F)), (_('Hangul Syllables'), (0xAC00, 0xD7AF)), (_('Hangul Jamo'), (0x1100, 0x11FF)), (_('Hangul Jamo Extended-A'), (0xA960, 0xA97F)), (_('Hangul Jamo Extended-B'), (0xD7B0, 0xD7FF)), (_('Hangul Compatibility Jamo'), (0x3130, 0x318F)), (_('Halfwidth Jamo'), (0xFFA0, 0xFFDC)), (_('Lisu'), (0xA4D0, 0xA4FF)), (_('Miao'), (0x16F00, 0x16F9F)), (_('Yi Syllables'), (0xA000, 0xA48F)), (_('Yi Radicals'), (0xA490, 0xA4CF)), )), (_('American Scripts'), ( (_('Cherokee'), (0x13A0, 0x13FF)), (_('Deseret'), (0x10400, 0x1044F)), (_('Unified Canadian Aboriginal Syllabics'), (0x1400, 0x167F)), (_('UCAS Extended'), (0x18B0, 0x18FF)), )), (_('Other'), ( (_('Alphabetic Presentation Forms'), (0xFB00, 0xFB4F)), (_('Halfwidth and Fullwidth Forms'), (0xFF00, 0xFFEF)), )), (_('Punctuation'), ( (_('General Punctuation'), (0x2000, 0x206F)), (_('ASCII Punctuation'), (0x21, 0x7F)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Latin-1 Punctuation'), (0xA1, 0xBF)), (_('Small Form Variants'), (0xFE50, 0xFE6F)), (_('Supplemental Punctuation'), (0x2E00, 0x2E7F)), (_('CJK Symbols and Punctuation'), (0x3000, 0x303F)), (_('CJK Compatibility Forms'), (0xFE30, 0xFE4F)), (_('Fullwidth ASCII Punctuation'), (0xFF01, 0xFF60)), (_('Vertical Forms'), (0xFE10, 0xFE1F)), )), (_('Alphanumeric Symbols'), ( (_('Arabic Mathematical Alphabetic Symbols'), (0x1EE00, 0x1EEFF)), (_('Letterlike Symbols'), (0x2100, 0x214F)), (_('Roman Symbols'), (0x10190, 0x101CF)), (_('Mathematical Alphanumeric Symbols'), (0x1D400, 0x1D7FF)), (_('Enclosed Alphanumerics'), (0x2460, 0x24FF)), (_('Enclosed Alphanumeric Supplement'), (0x1F100, 0x1F1FF)), (_('Enclosed CJK Letters and Months'), (0x3200, 0x32FF)), (_('Enclosed Ideographic Supplement'), (0x1F200, 0x1F2FF)), (_('CJK Compatibility'), (0x3300, 0x33FF)), )), (_('Technical Symbols'), ( (_('Miscellaneous Technical'), (0x2300, 0x23FF)), (_('Control Pictures'), (0x2400, 0x243F)), (_('Optical Character Recognition'), (0x2440, 0x245F)), )), (_('Numbers and Digits'), ( (_('Aegean Numbers'), (0x10100, 0x1013F)), (_('Ancient Greek Numbers'), (0x10140, 0x1018F)), (_('Common Indic Number Forms'), (0xA830, 0xA83F)), (_('Counting Rod Numerals'), (0x1D360, 0x1D37F)), (_('Cuneiform Numbers and Punctuation'), (0x12400, 0x1247F)), (_('Fullwidth ASCII Digits'), (0xFF10, 0xFF19)), (_('Number Forms'), (0x2150, 0x218F)), (_('Rumi Numeral Symbols'), (0x10E60, 0x10E7F)), (_('Superscripts and Subscripts'), (0x2070, 0x209F)), )), (_('Mathematical Symbols'), ( (_('Arrows'), (0x2190, 0x21FF)), (_('Supplemental Arrows-A'), (0x27F0, 0x27FF)), (_('Supplemental Arrows-B'), (0x2900, 0x297F)), (_('Miscellaneous Symbols and Arrows'), (0x2B00, 0x2BFF)), (_('Mathematical Alphanumeric Symbols'), (0x1D400, 0x1D7FF)), (_('Letterlike Symbols'), (0x2100, 0x214F)), (_('Mathematical Operators'), (0x2200, 0x22FF)), (_('Miscellaneous Mathematical Symbols-A'), (0x27C0, 0x27EF)), (_('Miscellaneous Mathematical Symbols-B'), (0x2980, 0x29FF)), (_('Supplemental Mathematical Operators'), (0x2A00, 0x2AFF)), (_('Ceilings and Floors'), (0x2308, 0x230B)), (_('Geometric Shapes'), (0x25A0, 0x25FF)), (_('Box Drawing'), (0x2500, 0x257F)), (_('Block Elements'), (0x2580, 0x259F)), )), (_('Musical Symbols'), ( (_('Musical Symbols'), (0x1D100, 0x1D1FF)), (_('More Musical Symbols'), (0x2669, 0x266F)), (_('Ancient Greek Musical Notation'), (0x1D200, 0x1D24F)), (_('Byzantine Musical Symbols'), (0x1D000, 0x1D0FF)), )), (_('Game Symbols'), ( (_('Chess'), (0x2654, 0x265F)), (_('Domino Tiles'), (0x1F030, 0x1F09F)), (_('Draughts'), (0x26C0, 0x26C3)), (_('Japanese Chess'), (0x2616, 0x2617)), (_('Mahjong Tiles'), (0x1F000, 0x1F02F)), (_('Playing Cards'), (0x1F0A0, 0x1F0FF)), (_('Playing Card Suits'), (0x2660, 0x2667)), )), (_('Other Symbols'), ( (_('Alchemical Symbols'), (0x1F700, 0x1F77F)), (_('Ancient Symbols'), (0x10190, 0x101CF)), (_('Braille Patterns'), (0x2800, 0x28FF)), (_('Currency Symbols'), (0x20A0, 0x20CF)), (_('Combining Diacritical Marks for Symbols'), (0x20D0, 0x20FF)), (_('Dingbats'), (0x2700, 0x27BF)), (_('Emoticons'), (0x1F600, 0x1F64F)), (_('Miscellaneous Symbols'), (0x2600, 0x26FF)), (_('Miscellaneous Symbols and Arrows'), (0x2B00, 0x2BFF)), (_('Miscellaneous Symbols And Pictographs'), (0x1F300, 0x1F5FF)), (_('Yijing Hexagram Symbols'), (0x4DC0, 0x4DFF)), (_('Yijing Mono and Digrams'), (0x268A, 0x268F)), (_('Yijing Trigrams'), (0x2630, 0x2637)), (_('Tai Xuan Jing Symbols'), (0x1D300, 0x1D35F)), (_('Transport And Map Symbols'), (0x1F680, 0x1F6FF)), )), (_('Other'), ( (_('Specials'), (0xFFF0, 0xFFFF)), (_('Tags'), (0xE0000, 0xE007F)), (_('Variation Selectors'), (0xFE00, 0xFE0F)), (_('Variation Selectors Supplement'), (0xE0100, 0xE01EF)), )), ) # }}} self.category_map = {} self.starts = [] for tlname, items in self.categories[1:]: for name, (start, end) in items: self.category_map[start] = (tlname, name) self.starts.append(start) self.starts.sort() self.bold_font = f = QApplication.font() f.setBold(True) self.fav_icon = QIcon(I('rating.png'))
def __init__( self, field_metadata, parent=None, revert_tooltip=None, datetime_fmt="MMMM yyyy", blank_as_equal=True, fields=( "title", "authors", "series", "tags", "rating", "publisher", "pubdate", "identifiers", "languages", "comments", "cover", ), ): QWidget.__init__(self, parent) self.l = l = QGridLayout() l.setContentsMargins(0, 0, 0, 0) self.setLayout(l) revert_tooltip = revert_tooltip or _("Revert %s") self.current_mi = None self.changed_font = QFont(QApplication.font()) self.changed_font.setBold(True) self.changed_font.setItalic(True) self.blank_as_equal = blank_as_equal self.widgets = OrderedDict() row = 0 for field in fields: m = field_metadata[field] dt = m["datatype"] extra = None if "series" in {field, dt}: cls = SeriesEdit elif field == "identifiers": cls = IdentifiersEdit elif field == "languages": cls = LanguagesEdit elif "comments" in {field, dt}: cls = CommentsEdit elif "rating" in {field, dt}: cls = RatingsEdit elif dt == "datetime": extra = datetime_fmt cls = DateEdit elif field == "cover": cls = CoverView elif dt in {"text", "enum"}: cls = LineEdit else: continue neww = cls(field, True, self, m, extra) neww.changed.connect(partial(self.changed, field)) oldw = cls(field, False, self, m, extra) newl = QLabel("&%s:" % m["name"]) newl.setBuddy(neww) button = QToolButton(self) button.setIcon(QIcon(I("back.png"))) button.clicked.connect(partial(self.revert, field)) button.setToolTip(revert_tooltip % m["name"]) self.widgets[field] = Widgets(neww, oldw, newl, button) for i, w in enumerate((newl, neww, button, oldw)): c = i if i < 2 else i + 1 if w is oldw: c += 1 l.addWidget(w, row, c) row += 1 self.sep = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 2, row, 1) self.sep2 = f = QFrame(self) f.setFrameShape(f.VLine) l.addWidget(f, 0, 4, row, 1)