Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Label wrapping #233

Merged
merged 3 commits into from
Dec 22, 2022
Merged

Conversation

MariaRosariaFraraccio
Copy link
Contributor

No description provided.

@mnamici
Copy link
Collaborator

mnamici commented Nov 15, 2022

Al momento non riesco a testare queste modifiche, caricando un progetto non riesce a disegnare nessun nodo e creando un nuovo progetto e trascinando un nuovo nodo (es. concetto) esce fuori la seguente eccezione:

Traceback (most recent call last):
  File "/home/manuel/Workspace/eddy/eddy/ui/iri.py", line 637, in accept
    self.node.iri = inputIri
  File "/home/manuel/Workspace/eddy/eddy/core/items/nodes/common/base.py", line 764, in iri
    self.doUpdateNodeLabel()
  File "/home/manuel/Workspace/eddy/eddy/core/items/nodes/common/base.py", line 846, in doUpdateNodeLabel
    self.label = PredicateLabel(template=self.labelString, pos=self.initialLabelPosition, parent=self)
  File "/home/manuel/Workspace/eddy/eddy/core/items/nodes/common/label.py", line 133, in __init__
    super().__init__(**kwargs)
  File "/home/manuel/Workspace/eddy/eddy/core/items/nodes/common/label.py", line 60, in __init__
    super().__init__(template, movable, editable, parent=parent)
  File "/home/manuel/Workspace/eddy/eddy/core/items/common.py", line 300, in __init__
    self.wrapLabel()
  File "/home/manuel/Workspace/eddy/eddy/core/items/nodes/common/label.py", line 120, in wrapLabel
    elidedText = fm.elidedText(self.template, QtCore.Qt.ElideRight, maxLen)
TypeError: elidedText(self, str, Qt.TextElideMode, int, flags: int = 0): argument 3 has unexpected type 'float'

Puoi verificare se a te da lo stesso problema? Io sto provando su Python 3.10, PyQt 5.15.7.

@MariaRosariaFraraccio
Copy link
Contributor Author

A me non dava problemi, ho la stessa versione di PyQt però la versione di Python è 3.8. Ora ho provato a trasformare il float in int, funziona?

@mnamici
Copy link
Collaborator

mnamici commented Nov 15, 2022

Ah sì giusto, tempo fa quando ho introdotto il supporto a python 3.10 ho incontrato lo stesso problema. In sostanza a partire da 3.10 non c'è più il cast implicito da float a int, quindi va fatto esplicitamente.

Per riferimento puoi vedere bc8d59b che è il commit che introduce il supporto a python 3.10.

@MariaRosariaFraraccio
Copy link
Contributor Author

Ah ecco! Ora ho fatto una prova con la versione 3.10 e non mi dà problemi

eddy/core/items/common.py Show resolved Hide resolved
eddy/core/items/common.py Outdated Show resolved Hide resolved
eddy/core/items/nodes/common/label.py Outdated Show resolved Hide resolved
@mnamici
Copy link
Collaborator

mnamici commented Dec 22, 2022

Ho fatto il rebase e squash degli ultimi commit. Per riferimento credo sia meglio in futuro separare la funzionalità in una classe Label separata invece di lasciarla generale e filtrare in base al tipo di item genitore. Per ora lo integriamo così.

Va risolto il problema della floating-point exception che esce fuori quando si cambia font all'intero diagramma e poi si può integrare.

@MariaRosariaFraraccio
Copy link
Contributor Author

Non riesco a riprodurre l'errore che dà nei test però, perché in realtà cambiando il font del diagramma funziona tutto correttamente. A te dà qualche errore?

@mnamici
Copy link
Collaborator

mnamici commented Dec 22, 2022

L'errore esce fuori eseguendo i test, per riprodurlo localmente basta eseguire il test di cambio del font con il comando:

$ pytest tests/test_diagram.py::TestDiagram::test_change_diagram_font

Neanche io riesco a riprodurlo durante una normale esecuzione, tuttavia vorrei capire a cosa sia dovuto.

Da un primo test sembra che avvenga durante la seconda operazione di cambio del font del diagramma nel test, quando si fa setText nella wrapLabel avviene l'eccezione. Ho provato a lanciare il tutto sotto gdb e il backtrace mostra un segfault nel thread python.

EDIT: sono riuscito a riprodurre l'errore consistentemente durante la normale esecuzione. Per farlo apri un progetto e cambia la dimensione del font di un nodo (es. concetto) al valore massimo (40), poi chiudi senza salvare. A me crasha consistentemente python.
P.S. sto provando su python 3.10, PyQt 5.15.7. Fammi sapere se riesci a riprodurlo anche tu.

EDIT 2: Il crash si riproduce sia su Linux che su macOS che su Windows.

@mnamici
Copy link
Collaborator

mnamici commented Dec 22, 2022

Sono riuscito a trovare la causa dell'eccezione e ho ristrutturato un pò la logica di wrap dei label, dovrebbe essere un pò più "stretto" il contenimento del label nel bounding box dell'item genitore.

@mnamici mnamici merged commit 6fba510 into obdasystems:develop Dec 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEATURE]: Automatically wrap labels to fit node bounding box
2 participants