Skip to content

Commit

Permalink
Merge pull request #372 from qipe-nlab/show-py-in-monitr
Browse files Browse the repository at this point in the history
View .py file in monitr
  • Loading branch information
marcosfrenkel committed Feb 20, 2023
2 parents ecd3203 + 75c2226 commit df5c369
Showing 1 changed file with 47 additions and 20 deletions.
67 changes: 47 additions & 20 deletions plottr/apps/monitr.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class ContentType(Enum):
tag = auto()
json = auto()
md = auto()
py = auto()
image = auto()
unknown = auto()

Expand All @@ -108,6 +109,8 @@ def sort(cls, file: Optional[Union[str, Path]] = None) -> "ContentType":
return ContentType.json
elif extension == 'md':
return ContentType.md
elif extension == 'py':
return ContentType.py
elif extension == 'jpg' or extension == 'jpeg' or extension == 'png' or extension == 'image':
return ContentType.image
else:
Expand All @@ -130,7 +133,7 @@ def sort_Qcolor(cls, item: Optional["ContentType"] = None) -> QtGui.QBrush:

class SupportedDataTypes:

valid_types = ['.ddh5', '.md', '.json']
valid_types = ['.ddh5', '.md', '.json', '.py']

@classmethod
def check_valid_data(cls, file_names: Sequence[Union[str, Path]]) -> bool:
Expand Down Expand Up @@ -2060,21 +2063,15 @@ def mousePressEvent(self, event: QtGui.QMouseEvent) -> None:
self.setText(self.edit_text)


class TextEditWidget(QtWidgets.QTextEdit):
class TextViewWidget(QtWidgets.QTextEdit):
"""
Widget that displays md files that are in the same folder as a ddh5 file.
It contains a floating button that allows for editing and saving changes done in the editing phase. Text is not
editable before clicking the button.
Widget that displays a text-based file such as .md or .py in the same folder as a ddh5 file.
"""

def __init__(self, path: Path, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs)
self.path = path

self.floating_button = FloatingButtonWidget(parent=self)
self.floating_button.hide()

size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
self.setSizePolicy(size_policy)

Expand All @@ -2088,23 +2085,13 @@ def __init__(self, path: Path, *args: Any, **kwargs: Any):
self.setPlainText(self.file_text)
document = QtGui.QTextDocument(self.file_text, parent=self)
self.setDocument(document)
self.text_before_edit = self.toPlainText()
self.floating_button.save_activated.connect(self.save_activated)
self.floating_button.edit_activated.connect(self.edit_activated)
self.document().contentsChanged.connect(self.size_change)

# Arbitrary threshold height.
self.max_threshold_height = 211
self.min_threshold_height = 2
self.size_change()

def resizeEvent(self, event: QtGui.QResizeEvent) -> None:
"""
Called every time the size of the widget changes. Triggers the change in position of the floating button.
"""
super().resizeEvent(event)
self.floating_button.update_position()

def size_change(self) -> None:
"""
Changes the minimum height of the widget. Gets called every time the document changes.
Expand All @@ -2126,6 +2113,29 @@ def sizeHint(self) -> QtCore.QSize:

return QtCore.QSize(width, height)


class TextEditWidget(TextViewWidget):
"""
Widget that displays md files that are in the same folder as a ddh5 file.
It contains a floating button that allows for editing and saving changes done in the editing phase. Text is not
editable before clicking the button.
"""

def __init__(self, path: Path, *args: Any, **kwargs: Any):
super().__init__(path, *args, **kwargs)
self.floating_button = FloatingButtonWidget(parent=self)
self.floating_button.hide()
self.floating_button.save_activated.connect(self.save_activated)
self.floating_button.edit_activated.connect(self.edit_activated)

def resizeEvent(self, event: QtGui.QResizeEvent) -> None:
"""
Called every time the size of the widget changes. Triggers the change in position of the floating button.
"""
super().resizeEvent(event)
self.floating_button.update_position()

def enterEvent(self, *args: Any, **kwargs: Any) -> None:
super().enterEvent(*args, **kwargs)
self.floating_button.show()
Expand Down Expand Up @@ -2716,7 +2726,7 @@ def _fill_dict(self, data_in: Optional[dict], files_dict: Dict[Path, ContentType
if not only_data_files:
if file_type == ContentType.tag:
data_in['tag_labels'].append(prefix_text + str(file.stem))
elif file_type == ContentType.json or file_type == ContentType.md or file_type == ContentType.image:
elif file_type in [ContentType.json, ContentType.md, ContentType.py, ContentType.image]:
# Check if the files exist.
if file.is_file():
data_in['extra_files'].append((file, prefix_text + str(file.name), file_type))
Expand Down Expand Up @@ -3210,6 +3220,23 @@ def add_all_files(self, files_data: List[Tuple[Path, str, ContentType]]) -> None
self.file_windows.append(plain_text_edit)
self.right_side_layout.addWidget(plain_text_edit)

elif file_type == ContentType.py:
expand = True
if file in self.collapsed_state_dictionary:
expand = self.collapsed_state_dictionary[file]
plain_text_edit = Collapsible(widget=TextViewWidget(path=file),
title=name, expanding=expand, icon=get_md_icon())

plain_text_edit.widget.setVisible(expand)
plain_text_edit.btn.setChecked(expand)
if expand:
plain_text_edit.btn.setText(plain_text_edit.expandedTitle)
else:
plain_text_edit.btn.setText(plain_text_edit.collapsedTitle)

self.file_windows.append(plain_text_edit)
self.right_side_layout.addWidget(plain_text_edit)

elif file_type == ContentType.image:
expand = True
if file in self.collapsed_state_dictionary:
Expand Down

0 comments on commit df5c369

Please sign in to comment.