link result view and source view
This commit is contained in:
36
bigtext.py
36
bigtext.py
@@ -2,7 +2,7 @@ import math
|
||||
import os
|
||||
import re
|
||||
import time
|
||||
from typing import Optional, List
|
||||
from typing import Optional, List, Callable
|
||||
import PyQt6.QtGui
|
||||
from PyQt6 import QtGui
|
||||
|
||||
@@ -78,25 +78,36 @@ class BigText(QWidget):
|
||||
self.grid.setVerticalSpacing(0)
|
||||
self.setLayout(self.grid)
|
||||
|
||||
big_text = InnerBigText(self, model)
|
||||
big_text.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding))
|
||||
self.big_text = InnerBigText(self, model)
|
||||
self.big_text.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding))
|
||||
|
||||
self.h_scroll_bar = QScrollBar(Qt.Orientation.Horizontal)
|
||||
self.h_scroll_bar.setMinimum(0)
|
||||
self.h_scroll_bar.setMaximum(1)
|
||||
self.h_scroll_bar.valueChanged.connect(big_text.h_scroll_event)
|
||||
self.h_scroll_bar.valueChanged.connect(self.big_text.h_scroll_event)
|
||||
|
||||
self.v_scroll_bar = ScaledScrollBar()
|
||||
# self.v_scroll_bar.setPageStep(1)
|
||||
self.v_scroll_bar.valueChanged.connect(big_text.v_scroll_event)
|
||||
self.v_scroll_bar.valueChanged.connect(self.big_text.v_scroll_event)
|
||||
|
||||
self.grid.addWidget(big_text, 0, 0)
|
||||
self.grid.addWidget(self.big_text, 0, 0)
|
||||
self.grid.addWidget(self.h_scroll_bar, 1, 0)
|
||||
self.grid.addWidget(self.v_scroll_bar, 0, 1)
|
||||
|
||||
def get_file(self):
|
||||
return self.model.get_file()
|
||||
|
||||
def add_line_click_listener(self, listener: Callable[[int], None]):
|
||||
"""
|
||||
|
||||
:param listener: a callable, the parameter is the byte offset of the clicked line
|
||||
:return:
|
||||
"""
|
||||
self.big_text.line_click_listeners.append(listener)
|
||||
|
||||
def scroll_to_byte(self, byte_offset: int):
|
||||
self.big_text.scroll_to_byte(byte_offset)
|
||||
|
||||
def destruct(self):
|
||||
self.watchdog.destruct()
|
||||
pass
|
||||
@@ -123,6 +134,8 @@ class InnerBigText(QWidget):
|
||||
self._last_double_click_time = 0
|
||||
self._last_double_click_line_number = -1
|
||||
|
||||
self.line_click_listeners: [Callable[[int], None]] = []
|
||||
|
||||
def keyPressEvent(self, e: QKeyEvent) -> None:
|
||||
|
||||
# print("%s + %s" % (e.keyCombination().keyboardModifiers(), e.key()))
|
||||
@@ -187,6 +200,11 @@ class InnerBigText(QWidget):
|
||||
self.update()
|
||||
self.parent.v_scroll_bar.setValue(self._byte_offset)
|
||||
|
||||
def scroll_to_byte(self, byte_offset: int):
|
||||
self._byte_offset = min(byte_offset, self.model.byte_count())
|
||||
self.update()
|
||||
self.parent.v_scroll_bar.setValue(self._byte_offset)
|
||||
|
||||
def mousePressEvent(self, e: QtGui.QMouseEvent) -> None:
|
||||
if e.buttons() == Qt.MouseButton.LeftButton and e.modifiers() == Qt.KeyboardModifier.ShiftModifier:
|
||||
offset = self.to_byte_offset(e)
|
||||
@@ -210,6 +228,12 @@ class InnerBigText(QWidget):
|
||||
self.selection_highlight.set_end_byte(offset)
|
||||
self.update()
|
||||
|
||||
line_number = self.y_pos_to_line(e.pos().y())
|
||||
if line_number < len(self.lines):
|
||||
line = self.lines[line_number]
|
||||
for listener in self.line_click_listeners:
|
||||
listener(line.byte_offset())
|
||||
|
||||
def mouseDoubleClickEvent(self, e: QtGui.QMouseEvent) -> None:
|
||||
if e.buttons() == Qt.MouseButton.LeftButton:
|
||||
self._last_double_click_time = time.time()
|
||||
|
||||
Reference in New Issue
Block a user