acoused/View/note_tab.py

257 lines
9.8 KiB
Python

import os
import logging
from PyQt5.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QHBoxLayout,
QTextEdit, QPushButton, QSpacerItem, QSpinBox,
QSizePolicy, QFontComboBox, QColorDialog
)
from PyQt5.QtGui import QPixmap, QIcon, QFont
from PyQt5.QtCore import Qt, QTimer
import settings as stg
from tools import trace
logger = logging.getLogger("acoused")
class NoteTab(QWidget):
''' This class generates a enhanced notepad in Note Tab '''
def _path_icon(self, icon):
return os.path.join("icons", icon)
def __init__(self, widget_tab):
super().__init__()
self.changed = False
self.verticalLayout_main_note_tab = QVBoxLayout(widget_tab)
self.horizontalLayout_toolbar = QHBoxLayout()
self.verticalLayout_main_note_tab.addLayout(self.horizontalLayout_toolbar)
self.textEdit = QTextEdit()
self.filename_text = ""
self.pushbutton_new_txt = QPushButton()
self.icon_new_txt = QPixmap(self._path_icon("new_text.png"))
self.pushbutton_new_txt.setIcon(QIcon(self.icon_new_txt))
# self.pushbutton_new_txt.clicked.connect(self.new_text)
self.horizontalLayout_toolbar.addWidget(self.pushbutton_new_txt)
self.pushbutton_save_txt = QPushButton()
self.icon_save_txt = QPixmap(self._path_icon("save_txt.png"))
self.pushbutton_save_txt.setIcon(QIcon(self.icon_save_txt))
# self.pushbutton_save_txt.clicked.connect(self.save_text)
self.horizontalLayout_toolbar.addWidget(self.pushbutton_save_txt)
self.pushbutton_open_txt = QPushButton()
self.icon_open_txt = QPixmap(self._path_icon("open_txt.png"))
self.pushbutton_open_txt.setIcon(QIcon(self.icon_open_txt))
# self.pushbutton_open_txt.clicked.connect(self.open_text)
self.horizontalLayout_toolbar.addWidget(self.pushbutton_open_txt)
self.fontbox = QFontComboBox()
self.fontbox.currentFontChanged.connect(
lambda font : self.textEdit.setCurrentFont(font)
)
self.horizontalLayout_toolbar.addWidget(self.fontbox)
self.fontSize = QSpinBox()
self.fontSize.setSuffix("pt")
self.fontSize.valueChanged.connect(
lambda size: self.textEdit.setFontPointSize(size)
)
self.fontSize.setValue(14)
self.horizontalLayout_toolbar.addWidget(self.fontSize)
self.fontColor = QPushButton()
self.icon_fontColor = QPixmap(self._path_icon("font_color.png"))
self.fontColor.setIcon(QIcon(self.icon_fontColor))
# self.QAction(QIcon("couleur_police.png"), "Changer la couleur du texte", self)couleur_fond.png
self.fontColor.clicked.connect(self.fontColorChanged)
self.horizontalLayout_toolbar.addWidget(self.fontColor)
self.backColor = QPushButton()
self.icon_backColor = QPixmap(self._path_icon("background_color.png"))
self.backColor.setIcon(QIcon(self.icon_backColor))
self.backColor.clicked.connect(self.highlight)
self.horizontalLayout_toolbar.addWidget(self.backColor)
self.boldAction = QPushButton()
self.icon_boldAction = QPixmap(self._path_icon("bold.png"))
self.boldAction.setIcon(QIcon(self.icon_boldAction))
self.boldAction.clicked.connect(self.bold)
self.horizontalLayout_toolbar.addWidget(self.boldAction)
self.italicAction = QPushButton()
self.icon_italicAction = QPixmap(self._path_icon("italic.png"))
self.italicAction.setIcon(QIcon(self.icon_italicAction))
self.italicAction.clicked.connect(self.italic)
self.horizontalLayout_toolbar.addWidget(self.italicAction)
self.underlineAction = QPushButton()
self.icon_underlineAction = QPixmap(self._path_icon("underline.png"))
self.underlineAction.setIcon(QIcon(self.icon_underlineAction))
self.underlineAction.clicked.connect(self.underline)
self.horizontalLayout_toolbar.addWidget(self.underlineAction)
self.strikeAction = QPushButton()
self.icon_strikeAction = QPixmap(self._path_icon("strike.png"))
self.strikeAction.setIcon(QIcon(self.icon_strikeAction))
self.strikeAction.clicked.connect(self.strike)
self.horizontalLayout_toolbar.addWidget(self.strikeAction)
self.alignLeftAction = QPushButton()
self.icon_alignLeftAction = QPixmap(self._path_icon("left.png"))
self.alignLeftAction.setIcon(QIcon(self.icon_alignLeftAction))
self.alignLeftAction.clicked.connect(self.alignLeft)
self.horizontalLayout_toolbar.addWidget(self.alignLeftAction)
self.alignCenterAction = QPushButton()
self.icon_alignCenterAction = QPixmap(self._path_icon("centre.png"))
self.alignCenterAction.setIcon(QIcon(self.icon_alignCenterAction))
self.alignCenterAction.clicked.connect(self.alignCenter)
self.horizontalLayout_toolbar.addWidget(self.alignCenterAction)
self.alignRightAction = QPushButton()
self.icon_alignRightAction = QPixmap(self._path_icon("right.png"))
self.alignRightAction.setIcon(QIcon(self.icon_alignRightAction))
self.alignRightAction.clicked.connect(self.alignRight)
self.horizontalLayout_toolbar.addWidget(self.alignRightAction)
self.alignJustifyAction = QPushButton()
self.icon_alignJustifyAction = QPixmap(self._path_icon("justify.png"))
self.alignJustifyAction.setIcon(QIcon(self.icon_alignJustifyAction))
self.alignJustifyAction.clicked.connect(self.alignJustify)
self.horizontalLayout_toolbar.addWidget(self.alignJustifyAction)
self.horizontalSpacerItem_toolbar_note_tab = QSpacerItem(
500, 10, QSizePolicy.Expanding, QSizePolicy.Minimum
)
self.horizontalLayout_toolbar.addItem(
self.horizontalSpacerItem_toolbar_note_tab
)
self.pushbutton_print_settings = QPushButton()
self.pushbutton_print_settings.setText("EDIT SETTINGS")
self.pushbutton_print_settings.clicked.connect(self.print_settings)
self.verticalLayout_main_note_tab.addWidget(self.pushbutton_print_settings)
self.verticalLayout_main_note_tab.addWidget(self.textEdit)
self.textEdit.textChanged.connect(self.setTextChanged)
self._alarm = QTimer()
self._alarm.timeout.connect(self.applyTextOnStg)
self._alarm.start(1000)
## -------------------------------
## ---------- Functions ----------
## -------------------------------
def full_update(self):
self.blockSignals(True)
self.textEdit.blockSignals(True)
self._alarm.blockSignals(True)
logger.debug(f"{__name__}: Update")
self.applyStgOnText()
self._alarm.blockSignals(False)
self.textEdit.blockSignals(False)
self.blockSignals(False)
def setTextChanged(self):
self.changed = True
def applyTextOnStg(self):
text = self.textEdit.toHtml()
stg.notes = text
def applyStgOnText(self):
text = self.textEdit.setText(stg.notes)
# def new_text(self):
# window = self.ui_mainwindow.tab5
# window.show()
# def open_text(self):
# self.filename_text = QFileDialog.getOpenFileName(self, 'Open File', ".", "(*.txt")
# if self.filename_text:
# with open(self.filename_text, 'txt') as file:
# self.text.setText(file.read())
# def save_text(self):
# if not self.filename_text:
# self.filename_text = QFileDialog.getSaveFileName(self, 'Save File')
#
# if not self.filename_text.endswith(".txt"):
# self.filename_text += ".txt"
#
# with open(self.filename_text, "txt") as file:
# file.write(self.text.toHtml())
def fontColorChanged(self):
color = QColorDialog.getColor()
self.textEdit.setTextColor(color)
def highlight(self):
color = QColorDialog.getColor()
self.textEdit.setTextBackgroundColor(color)
def bold(self):
if self.textEdit.fontWeight() == QFont.Bold:
self.textEdit.setFontWeight(QFont.Normal)
else:
self.textEdit.setFontWeight(QFont.Bold)
def italic(self):
state = self.textEdit.fontItalic()
self.textEdit.setFontItalic(not state)
def underline(self):
state = self.textEdit.fontUnderline()
self.textEdit.setFontUnderline(not state)
def strike(self):
fmt = self.textEdit.currentCharFormat()
fmt.setFontStrikeOut(not fmt.fontStrikeOut())
self.textEdit.setCurrentCharFormat(fmt)
def alignLeft(self):
self.textEdit.setAlignment(Qt.AlignLeft)
def alignRight(self):
self.textEdit.setAlignment(Qt.AlignRight)
def alignCenter(self):
self.textEdit.setAlignment(Qt.AlignCenter)
def alignJustify(self):
self.textEdit.setAlignment(Qt.AlignJustify)
def print_settings(self):
self.textEdit.setText(
"Acoustic data: \n\n"
f" ABS raw data file: {stg.path_BS_raw_data}/{stg.filename_BS_raw_data} \n"
f" ABS noise data file: {stg.path_BS_noise_data}/{stg.filename_BS_noise_data} \n"
"\n\n"
"------------------------------------------------------------------------- \n\n\n"
"Particle size data: \n"
f" Fine sediments data file: {stg.path_fine}/{stg.filename_fine} \n"
f" Sand sediments data file: {stg.path_sand}/{stg.filename_sand} \n"
"\n\n"
"------------------------------------------------------------------------- \n\n\n"
)
# "Acoustic Inversion parameters: \n"
# f" frequencies to compute VBI: {stg.freq_text[int(stg.frequencies_to_compute_VBI[0, 0])]}, "
# f"{stg.freq_text[int(stg.frequencies_to_compute_VBI[1, 0])]} \n"
# f" frequency to compute SSC: {stg.freq_text[int(stg.frequency_to_compute_SSC[0])]}")