add context menu actions to set range start and end
This commit is contained in:
@@ -87,7 +87,10 @@ class BigText(QWidget):
|
||||
|
||||
self.v_scroll_bar = ScaledScrollBar()
|
||||
|
||||
self.big_text = InnerBigText(self, model, self.v_scroll_bar)
|
||||
self.range_limit = RangeSlider()
|
||||
self.range_limit.value_changed.connect(self._range_limit_event)
|
||||
|
||||
self.big_text = InnerBigText(self, model, self.v_scroll_bar, self.range_limit)
|
||||
self.big_text.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding))
|
||||
|
||||
self.h_scroll_bar = QScrollBar(Qt.Orientation.Horizontal)
|
||||
@@ -99,8 +102,7 @@ class BigText(QWidget):
|
||||
self.v_scroll_bar.scaledValueChanged.connect(self.big_text.v_scroll_event)
|
||||
self.v_scroll_bar.scrolled_to_end.connect(self.big_text.v_scroll_update_follow_tail)
|
||||
|
||||
self.range_limit = RangeSlider()
|
||||
self.range_limit.value_changed.connect(self._range_limit_event)
|
||||
|
||||
|
||||
if show_range_slider:
|
||||
self.grid.addWidget(self.range_limit, 0, 0)
|
||||
@@ -112,12 +114,9 @@ class BigText(QWidget):
|
||||
QThreadPool.globalInstance().start(self.watchdog)
|
||||
self.trigger_update.connect(self.big_text._file_changed)
|
||||
|
||||
def _range_limit_event(self, lower_value: float, upper_value: float):
|
||||
byte_count = self.model.byte_count()
|
||||
range_start = int(byte_count * (lower_value / 100.0))
|
||||
range_end = int(byte_count * (upper_value / 100.0))
|
||||
print(f"-> {lower_value}, {upper_value}, {range_start}, {range_end} -- range limit event")
|
||||
self.big_text.set_range(range_start, range_end)
|
||||
def _range_limit_event(self, range_start: str, range_end: str):
|
||||
# print("-> %s, %s -- range limit event" %(range_start, range_end))
|
||||
self.big_text.set_range(int(range_start), int(range_end))
|
||||
|
||||
def get_file(self):
|
||||
return self.model.get_file()
|
||||
@@ -150,12 +149,14 @@ class InnerBigText(QWidget):
|
||||
_range_start = 0
|
||||
_range_end = -1
|
||||
|
||||
def __init__(self, parent: BigText, model: LogFileModel, v_scaled_scrollbar: ScaledScrollBar):
|
||||
def __init__(self, parent: BigText, model: LogFileModel, v_scaled_scrollbar: ScaledScrollBar,
|
||||
range_limit: RangeSlider):
|
||||
super(InnerBigText, self).__init__()
|
||||
self.char_height = None
|
||||
self.char_width = None
|
||||
self.model = model
|
||||
self._v_scaled_scrollbar = v_scaled_scrollbar
|
||||
self._range_limit = range_limit
|
||||
self.parent = parent
|
||||
self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
|
||||
self.setFocusPolicy(Qt.FocusPolicy.WheelFocus)
|
||||
@@ -232,7 +233,7 @@ class InnerBigText(QWidget):
|
||||
# print("wheel event fired :) %s" % (direction))
|
||||
self.scroll_by_lines(direction * 3)
|
||||
|
||||
def _open_menu(self, position):
|
||||
def _open_menu(self, position: QPoint):
|
||||
menu = QMenu(self)
|
||||
|
||||
copy_clipboard = QAction(Icon.fromTheme("edit-copy", "icons/myicons/edit-copy.svg"), _("&Copy to Clipboard"),
|
||||
@@ -261,8 +262,52 @@ class InnerBigText(QWidget):
|
||||
manage_highlighting.setShortcut("CTRL+H")
|
||||
menu.addAction(manage_highlighting)
|
||||
|
||||
menu.addSeparator()
|
||||
|
||||
set_range_start = QAction(
|
||||
Icon("icons/myicons/range-start.svg"),
|
||||
_("Set Range Start"),
|
||||
self,
|
||||
triggered=lambda: self._set_range_start_by_y_pos(position.y())
|
||||
)
|
||||
menu.addAction(set_range_start)
|
||||
|
||||
set_range_end = QAction(
|
||||
Icon("icons/myicons/range-end.svg"),
|
||||
_("Set Range End"),
|
||||
self,
|
||||
triggered=lambda: self._set_range_end_by_y_pos(position.y())
|
||||
)
|
||||
menu.addAction(set_range_end)
|
||||
|
||||
reset_range = QAction(
|
||||
_("Reset Range"),
|
||||
self,
|
||||
triggered=lambda: self._reset_range()
|
||||
)
|
||||
menu.addAction(reset_range)
|
||||
|
||||
menu.exec(self.mapToGlobal(position))
|
||||
|
||||
def _set_range_start_by_y_pos(self, y_pos: int) -> None:
|
||||
line_number = self.y_pos_to_line(y_pos)
|
||||
self.lines = self.model.data(self._byte_offset, 0, line_number + 1, self._range_start,
|
||||
self._range_end)
|
||||
range_start = self.lines[line_number].byte_offset()
|
||||
self.parent.range_limit.set_range_start(range_start)
|
||||
|
||||
def _set_range_end_by_y_pos(self, y_pos: int) -> None:
|
||||
line_number = self.y_pos_to_line(y_pos)
|
||||
self.lines = self.model.data(self._byte_offset, 0, line_number + 1, self._range_start,
|
||||
self._range_end)
|
||||
range_end = self.lines[line_number].byte_end() + 1
|
||||
|
||||
self.parent.range_limit.set_range_end(range_end)
|
||||
|
||||
def _reset_range(self):
|
||||
self.parent.range_limit.set_range_start(0)
|
||||
self.parent.range_limit.set_range_end(self.model.byte_count())
|
||||
|
||||
def scroll_by_lines(self, scroll_lines: int):
|
||||
self.scroll_lines = scroll_lines
|
||||
self.update()
|
||||
@@ -511,8 +556,10 @@ class InnerBigText(QWidget):
|
||||
self._byte_offset = self.lines[0].byte_offset() if len(self.lines) > 0 else 0
|
||||
# print("new byte offset: ", self._byte_offset)
|
||||
# document length == maximum + pageStep + aFewBytesSoThatTheLastLineIsShown
|
||||
vmax = self.model.byte_count() - 1 if self._range_end < 0 else min(self._range_end, self.model.byte_count() - 1)
|
||||
byte_count = self.model.byte_count()
|
||||
vmax = byte_count - 1 if self._range_end < 0 else min(self._range_end, self.model.byte_count() - 1)
|
||||
self.parent.v_scroll_bar.setMaximum(vmax)
|
||||
self.parent.range_limit.set_maximum(byte_count)
|
||||
|
||||
for line in self.lines:
|
||||
self.update_longest_line(len(line.line()))
|
||||
|
||||
Reference in New Issue
Block a user