Exemple #1
0
 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())
Exemple #2
0
 def __init__(self, *args, **kwargs):
     QStyledItemDelegate.__init__(self, *args)
     self.is_half_star = kwargs.get('is_half_star', False)
     self.table_widget = args[0]
     self.rf = QFont(rating_font())
     self.em = Qt.TextElideMode.ElideMiddle
     delta = 0
     if iswindows and sys.getwindowsversion().major >= 6:
         delta = 2
     self.rf.setPointSize(QFontInfo(QApplication.font()).pointSize()+delta)
Exemple #3
0
    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'),
                 db=None):
        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.setObjectName(field)
            connect_lambda(
                neww.changed, self,
                lambda self: self.changed(self.sender().objectName()))
            if isinstance(neww, EditWithComplete):
                try:
                    neww.update_items_cache(db.new_api.all_field_names(field))
                except ValueError:
                    pass  # A one-one field like title
            if isinstance(neww, SeriesEdit):
                neww.set_db(db.new_api)
            oldw = cls(field, False, self, m, extra)
            newl = QLabel('&%s:' % m['name'])
            newl.setBuddy(neww)
            button = RightClickButton(self)
            button.setIcon(QIcon(I('back.png')))
            button.setObjectName(field)
            connect_lambda(
                button.clicked, self,
                lambda self: self.revert(self.sender().objectName()))
            button.setToolTip(revert_tooltip % m['name'])
            if field == 'identifiers':
                button.m = m = QMenu(button)
                button.setMenu(m)
                button.setPopupMode(
                    QToolButton.ToolButtonPopupMode.DelayedPopup)
                m.addAction(button.toolTip()).triggered.connect(button.click)
                m.actions()[0].setIcon(button.icon())
                m.addAction(_('Merge identifiers')).triggered.connect(
                    self.merge_identifiers)
                m.actions()[1].setIcon(QIcon(I('merge.png')))
            elif field == 'tags':
                button.m = m = QMenu(button)
                button.setMenu(m)
                button.setPopupMode(
                    QToolButton.ToolButtonPopupMode.DelayedPopup)
                m.addAction(button.toolTip()).triggered.connect(button.click)
                m.actions()[0].setIcon(button.icon())
                m.addAction(_('Merge tags')).triggered.connect(self.merge_tags)
                m.actions()[1].setIcon(QIcon(I('merge.png')))

            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

        if 'comments' in self.widgets and not gprefs.get(
                'diff_widget_show_comments_controls', True):
            self.widgets['comments'].new.hide_toolbars()
Exemple #4
0
    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'))