Page 1 sur 1

[Résolu][Calc] Dialogues non modaux en chaîne figent calc

MessagePublié: 01 Sep 2019 17:21
par marhra
Bonjour,

Dans un classeur très (très) sécurisé, j'ai retiré toutes les barres d'outils et créé une boite de dialogue BASIC non-modale permettant d'effectuer les actions autorisées.
(Merci au passage aux contributeurs qui m'ont permis de trouver et appliquer cette méthode :super: )

Le blocage (gel de LibreOffice avec obligation de forcer la fermeture pour stopper le symptôme) intervient quand je lance une seconde boite de dialogue non-modale à partir de la première.
A noter que lorsque je lance une boite de dialogue modale à partir de la non-modale, tout se passe bien.

J'avais pris comme modèle l'exemple donné en toute fin de ce fil : https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=46799#p254292
Il se trouve que le symptôme est strictement le même sur mon fichier que sur le fichier donné en exemple. Je joints donc ce dernier.

J'ai deux hypothèses :
- 1- les listeners des deux boîtes sont en conflit et prennent toutes les ressources.
- 2- Une cascade de dialogues non-modaux est incompatible avec la version de LibreOfffice utilisée (le lien initial date de 3 ans).
Dans les deux cas, je sèche :fou: ...

Merci d'avance pour votre aide et vos pistes.

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 02 Sep 2019 14:46
par Dude
Salut,

Je n'ai pas de problème notable sur le classeur en question.
Un peu de lenteur mais c'est normal puisqu'on lance un second dialogue non modal.
no_problemo.gif
Clic pour voir l'animation
Test réalisé sous AOO 4.1.6 et Windows 7 x64 Pro

marhra a écrit: j'ai retiré toutes les barres d'outils et créé une boite de dialogue BASIC non-modale permettant d'effectuer les actions autorisées.

Mauvaise idée, un dialogue n'est pas fait pour interagir avec l'application ou alors de manière très limitée.
Pourquoi ne pas créer ta propre barre d'outils ou mieux, utiliser la barre latérale ?

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 02 Sep 2019 17:11
par marhra
Bonjour,

Merci de t'être penché sur mon problème,

Effectivement, de la lenteur...
Le second dialogue finit par s'ouvrir, mais avec un temps d'attente variant d'une trentaine de secondes à .... (pas eu la patience d'attendre plus de 15 mn...)
marhra a écrit:
j'ai retiré toutes les barres d'outils et créé une boite de dialogue BASIC non-modale permettant d'effectuer les actions autorisées.


Mauvaise idée, un dialogue n'est pas fait pour interagir avec l'application ou alors de manière très limitée.
Pourquoi ne pas créer ta propre barre d'outils ou mieux, utiliser la barre latérale ?

Ma propre barre d'outils ou la barre latérale serait assez intéressante, en effet, et je compte bien travailler là-dessus. J'ai un peu regardé pour la barre d'outils, mais il semblerait qu'il y ait une difficulté avec la méthode brutale employée pour masquer les barres d'outils existantes... A voir avec la barre latérale, si elle n'est pas gérée de la même manière, ce qui m'étonnerait.
Code : Tout sélectionner   AgrandirRéduire
ThisComponent.CurrentController.Frame.LayoutManager.setVisible(False)
mais cela pourrait (devrait) faire l'objet d'un autre fil.
Il y aurait aussi éventuellement le passage par un formulaire séparé, mais je ne suis pas convaincu par ce dernier...

En attendant, j'ai réussi à concocter un dialogue non-modal fonctionnel, avec ce que les utilisateurs peuvent faire (naviguer d'une feuille à l'autre, imprimer, verrouiller/déverrouiller la modification des données saisies, avec en plus un mode avancé, qui permet de modifier le <Titre> du document, protéger/déprotéger les feuilles, modifier des mots de passe, etc...) le tout soit par bouton direct, soit en lançant des dialogues (normaux, eux). Il me manquait juste un second dialogue non modal contenant des boutons déclenchant des filtres prédéfinis.
Le but étant de fournir un outil fonctionnel, le temps de passer à la v.4.1. sans dialogue non-modal. Ce qui risque de prendre un peu de temps, vu que j'apprends au fur et à mesure que je fabrique mon code.

Le plus simple pour moi serait peut-être de modifier mon dialogue non-modal initial (qui fait ce que j'attends de lui sans rien bloquer), pour qu'il affiche une taille plus grande et fasse apparaître les boutons des filtres en question...

Je propose donc de clôturer ce fil en conseillant de NE PAS utiliser de dialogues non-modaux en cascade... Mais je ne sais pas si le [Résolu] est adapté...

Sans vouloir abuser, dans quelle direction je pourrais orienter ma lampe torche pour cette histoire de barre latérale ? Toujours via macros, ou par un genre de plug-in ? Autre ?

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 02 Sep 2019 19:34
par OOotremer971
Bonjour,
marhra a écrit:Le plus simple pour moi serait peut-être de modifier mon dialogue non-modal initial (qui fait ce que j'attends de lui sans rien bloquer), pour qu'il affiche une taille plus grande et fasse apparaître les boutons des filtres en question...

Tu devrais t'intéresser à la propriété Step de ton dialogue et celle de ses contrôles. Cette propriété est disponible dans le panneau de dialogue lorsque le dialogue est sélectionné par son cadre :
en regard de page (pas)
marhra1.png

idem pour les contrôles lorsqu'ils sont sélectionnés :
marhra2.png


Lorsque que le Step (pas) du dialogue est identique à celui des contrôles ils deviennent visibles. Cette valeur est modifiable par Model.Step du dialogue. Sauf lorsque le Step est à zéro (valeur par défaut) car quelque soit le Step du panneau les contrôles à zéro sont toujours visible.

L'idée est de créer un dialogue avec un Step à 1 et une série de bouton avec un Spet à 1 puis une série de bouton avec un Step à 2 (superposés aux boutons ayant le Step1). Parmi les boutons de step 1, un est consacré à modifier le Step du dialogue pour le passer à 2 (Dialogue.Model.Step). Là tous les boutons de Step 1 deviennent invisibles et ceux de Step 2 prennent le relais (toujours dans la même boite de dialogue) jusqu'à modification du Step du dialogue.

Si je trouve un peu de temps dans la soirée je te ferai un petit exemple à partir de ton fichier.

A+

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 02 Sep 2019 23:42
par marhra
Bonsoir OOottremer 971 !
Depuis le temps que je voyais cette propriété ! Je me demandais à quoi ça pouvait bien servir !

Si je comprends bien, je peux avoir quatre ou cinq configurations différentes du même dialogue, toujours non modal, en fonction du Step affecté à chaque contrôle...
Ça me laisse rêveur quant aux possibilités ouvertes... :wink: :idea:
Bon là, il est un peu tard pour me pencher sur la chose, mais je vais voir ça de mon côté avec mon vrai fichier et je proposerai aussi un exemple un peu plus poussé.
Avec éventuellement un changement de titre du fil genre [*]Dialogue non modal multiple sans ralentissement[*]
A demain ou dans les prochains jours...

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 03 Sep 2019 00:08
par OOotremer971
marhra a écrit:Si je comprends bien, je peux avoir quatre ou cinq configurations différentes du même dialogue, toujours non modal, en fonction du Step affecté à chaque contrôle...
Ça me laisse rêveur quant aux possibilités ouvertes... :wink: :idea:

C'est exactement cela ! Je te laisse découvrir dans le fichier joint :
14-010048_Mod1.ods
(11.35 Kio) Téléchargé 39 fois

Pour voir les différentes pages (couches) de ton dialogue en vue de travailler dessus, tu dois le sélectionner par son cadre puis modifier manuellement son Step puis cliquer au centre du dialogue pour observer le changement (depuis l'EDI). N'oublie pas de le remettre ensuite à sa valeur initiale (1 en l'occurrence) car il s'ouvrira sur la mauvaise page. :aie: :lol:

A+

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 06 Sep 2019 02:38
par marhra
Bonsoir,

Merci Oootremer971 pour ces précisions et l'exemple :super: :bravo:
J'ai travaillé un peu sur mon fichier original et j'ai obtenu le résultat escompté
Je me suis aperçu en plus qu'avec SetVisible(True), on pouvait fait apparaitre dans un page du dialogue les boutons d'une autre page...
C'est pratique, ça évite d'avoir à copier et renommer trois fois des boutons qui remplissent la même fonction, alors que le menu n'as pas la même tête sur trois feuilles différentes.

Je ne souhaite pas encore clôturer le fil, le temps de poster un exemple finalisé et anonymes de mon fichier, ce qui pourrait être utile à d'autres
Ça risque de prendre un peu plus d'une semaine, le temps que je rentre de vacances...

A bientôt

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 06 Sep 2019 04:02
par OOotremer971
Bonjour,
marhra a écrit:Je me suis aperçu en plus qu'avec SetVisible(True), on pouvait fait apparaitre dans un page du dialogue les boutons d'une autre page...
C'est pratique, ça évite d'avoir à copier et renommer trois fois des boutons qui remplissent la même fonction,

Comme je le disais un peu plus haut, un contrôle avec un pas à zéro est visibles sur toutes les couches (pages) du dialogue. Du coup tu fais l'économie de le rendre visible.
OOotremer971 a écrit:Lorsque que le Step (pas) du dialogue est identique à celui des contrôles ils deviennent visibles. Cette valeur est modifiable par Model.Step du dialogue. Sauf lorsque le Step est à zéro (valeur par défaut) car quelque soit le Step du panneau les contrôles à zéro sont toujours visibles.


A+

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 06 Sep 2019 07:32
par marhra
Oui, du coup, j’ai bien des boutons qui sont à 0 (Quitter), mais j’avais aussi besoin que quelques autres du Step1 soient visibles aux Steps 2, 3 et 4, mais pas aux Steps 5 et 6...

Mon projet était ambitieux au départ : un menu non- modal visible en permanence sur une fenêtre sans aucune barre d’outils, qui permet de faire les opérations autorisées :
- aller d’une feuille à l’autre ;
- imprimer la feuille active ;
- fixer- défixer les colonnes de certaines pages, en choisissant les colonnes ;
- protéger- déprotéger les cellules remplies, parfois avec un MDP, sur certaines feuilles ;
- effacer le contenu de certaines cellules sur certaines feuilles ;
- accéder à des filtres préréglés sur une feuille et exporter le résultat en .pdf ou en .ods
- avoir un mode Concepteur, qui permet de
- protéger- déprotéger la feuille active avec MDP ;
- changer les MDP
- modifier le titre du fichier (dans les propriétés)

Passer par des boutons sur chaque feuille me bouffait la moitié de la fenêtre, d’où l’idée du menu non modal dont l’aspect change selon le mode et/ou la page actifs...
Et je me suis retrouvé avec ce souci de pouvoir disposer des boutons de navigation sur les Steps 1 à 4, mais pas sur les autres. Comme je ne voulais pas me retrouver avec 4 versions des 13 mêmes boutons, j’ai résolu le problème en rendant visibles ces boutons affectés au Step 1 sur les 3 autres, avec SetVisible.
Ma dernière nuit blanche m’a permis de rendre le tout fonctionnel à la fois sous Ununtu et MacOS ( pas encore testé Win 10 Pro...)

La solution proposée plus haut par Dude me semble au final plus adaptée, mais comme je l’ai dit, j’ai besoin de la version 4.0 avec dialogue non modal à court terme, en attendant de fabriquer la version 5.0, avec fenêtre de menu séparée, qui va me demander pas mal de temps, vu que je travaille sur cette pseudo-base sur mon temps libre.
En attendant, je posterai un fichier exemple complet d’ici une semaine.
Edité le 02/01/20 : Finalement, j'ai pas eu le temps, entre boulot et mutation en cours... Mais je ne désespère pas. Je considère le sujet comme clos et résolu.

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 06 Sep 2019 07:56
par Dude

Re: [Calc] Dialogues non modaux enchainés figent le tableur

MessagePublié: 06 Sep 2019 15:30
par marhra
Merci, je vais regarder ça avec une grande attention…