/
VolcanoByte
/
vbNotes
Обзор
Документация
Войти
/
VolcanoByte
/
vbNotes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
sources/uClasses.py
110 строк
3 KB
Johnny McLaren
fix: code editor
08 фев 2026, 08:31
08 фев 2026, 08:31
71bf0c7
Код
Авторство
О чём код?
from PyQt6.QtCore import Qt, QSortFilterProxyModel from PyQt6.QtGui import QFont from PyQt6.QtSql import QSqlQueryModel from PyQt6.QtWidgets import (QListView, QComboBox) from uDB import db from uSQL import SQL_NOTE_SELECT_ALL, SQL_TAG_SELECT_ALL class NoteListView(QListView): def __init__(self, parent): super().__init__(parent) self.noteQuery = db.queryAllNotes() self.noteModel = QSqlQueryModel() self.noteModel.setQuery(self.noteQuery) self.noteProxy = NoteProxyModel(self.noteModel) self.setModel(self.noteProxy) self.setModelColumn(1) self.editFunc = None def mouseDoubleClickEvent(self, event): if self.editFunc: self.editFunc() class NoteProxyModel(QSortFilterProxyModel): """Промежуточная модель для фильтрации и цветового выделения""" def __init__(self, model: QSqlQueryModel): super().__init__() self.setSourceModel(model) class TagListView(QListView): def __init__(self, parent): super().__init__(parent) self.tagsSelected = set() self.refreshFunc = None self.tagModel = TagQueryModel(self) self.tagModel.setQuery(SQL_TAG_SELECT_ALL) self.setModel(self.tagModel) self.setModelColumn(1) def refresh(self): if self.refreshFunc: if self.tagsSelected: self.refreshFunc(db.queryTagsNotes(self.tagsSelected)) else: self.refreshFunc(SQL_NOTE_SELECT_ALL) def clearTags(self): self.tagsSelected.clear() if self.refreshFunc: self.refreshFunc(SQL_NOTE_SELECT_ALL) def mouseDoubleClickEvent(self, event): _item = self.indexAt(event.pos()) if _item is None or _item.data() is None: return _name = _item.data() _id = db.getTagId(_name) if _id in self.tagsSelected: self.tagsSelected.remove(_id) else: self.tagsSelected.add(_id) self.refresh() def checkIsTagsExists(self): """Метод вызывается после удаления заметки и после процедуры DB.prepareTags и убирает удаленные теги из self.tagsSelected, затем пересчитывает заметки.""" self.tagsSelected = set(filter(lambda n: db.getTagName(n) is not None, self.tagsSelected)) self.refresh() class TagQueryModel(QSqlQueryModel): def __init__(self, parent): super().__init__() self.parent = parent def data(self, item, role=None): res = QSqlQueryModel.data(self, item, role) if role == Qt.ItemDataRole.FontRole: _id = db.getTagId(item.data()) if _id in self.parent.tagsSelected: font = QFont() font.setBold(True) return font return res class TagComboBox(QComboBox): def __init__(self, parent): super().__init__(parent) # Модель для тегов ComboBox self.tagComboBoxModel = QSqlQueryModel(self) self.tagComboBoxModel.setQuery(SQL_TAG_SELECT_ALL) self.setModel(self.tagComboBoxModel) self.setModelColumn(1)