IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[RCP] Vue avec plusieurs onglets


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut [RCP] Vue avec plusieurs onglets
    Bonjour à tous,

    Toujours dans le cadre du developpement d'une appli RCP (voir mes autres posts), je dois pouvoir implémenter des actions similaires à celles présentes dans eclipse. En d'autre termes, dans une vue de gauche, je dispose d'un arbre de telle sorte que lorsque je clique sur un noeud de l'arbre, les informations correspondantes s'affichent sous forme d'onglet dans ma vue de droite.

    La question que jme pose est donc celle de savoir à quoi correspont une situation comme celle ci : est ce une vue constituée de plusieurs onglets, ou bien est ce plusieurs vues organisées en onglets ?. Dans tous les cas, comment faire tout cela dynamiquement (car jne connais pas à la base le nombre de noeud présents dans mon arbre et donc le nombre d'onglets que je pourrais créer/instancier)? Je présume que je devrais disposer de classes me permettant d'instancier des onglets (et/ou des vues ?). Mais jne sais pas comment faire.

    En gros, jsuis complètement largué et une aide de vous de me sera tres précieuse (petit exemple faisant un truc pareil ou lien vers un tutoriel).

    Merci
    Merci d'avance

  2. #2
    Membre averti
    Avatar de DaveShot
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 238
    Points : 384
    Points
    384
    Par défaut
    Salut,
    je pense que c'est ce que tu cherches http://www.eclipse.org/articles/Arti...s/article.html

    David.
    - N'hésitez pas à consulter les liens vers les FAQs, les cours et tutoriels -

    Daveshot

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr DaveShot, et merci pour ta réponse!

    Malheuresement, elle ne correspond pas à ce que je voudrais faire (à moins que je ne comprenne pas moi meme ce que je veux faire).

    Comme à l'accoutumé, je connais à peu pres ce qu'il faut utiliser pour résoudre le problème, mais jne connais pas comment organiser cela (ou devrais je dire architecturer) avec le reste de mes appli.

    Je sais en effet que, je devrais mettre la propriété allowMultiple="true" de la vue dont je veux voir apparaître en plusieurs onglets (car jme rends de plus en plus compte que ce que je dois créer pluisieurs vues sous forme d'onglet). Je sais également que je dois créer un placeholder dans la classe "Perpective" pour mes vues et y ajouter ensuite mes vues crées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IFolderLayout principalView = layout.createFolder("bottom", IPageLayout.LEFT, 0.33f, IPageLayout.ID_EDITOR_AREA);
    principalView .addPlaceholder("maVueId:maSecondeVueId*");
    Seulement voilà, je dois créer mes onglets dynamiquement, cela impose donc que, losque je clique sur un noeud de mon arbre, que je puisse instancier ma vue (mon onglet?) avec le bon paramètre pour la méthode setInput (vu que je dois avoir une seule classe à instancier). De plus, à la suite de cette création, de quelle manière le le code de la classe perpective est affecté? Sachant qu'il faut prévoir que plus tard, je puisse vouloir acceder à une vue (onglet?) spécifique, comment doivent être gérés les différents "id".

    Voilà, jne sais pas si j'ai été assez clair, mais jsais au moins une chose, c'est que j'ai besoin d'éclairssissements sur ces questions.

    Merci

  4. #4
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut papaetoo,

    Comme je te l'ai déjà fait remarquer dans mon post sur ton sujet précédent (d'ailleurs, tu devrais éviter le multi-post, c'est pas autorisé et c'est vilain..), donc, je disais, comme je te l'ai déjà fait remarqué, ce que tu souhaites obtenir ce rapproche plutôt d'un lien entre une vue et des Editeurs.
    Dans Eclipse, les Editors sont très bien géré tout seul... Pas besoin de gérer les onglets. Il suffit juste d'ouvrir l'Editor avec le bon IEditorInput...
    Donc, chaque fois que ta sélection change dans ta vue, tu ouvres un nouvel Editor... qui ira gentiment se placer avec les autres Editors dans un onglet pour lui tout seul. Magique !!! A savoir que la méthode pour ouvrir un Editor est aussi compliqué que celle pour ouvrir une View :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(anEditorInput, anEditorID)

    Voilà, sous le vernis ironique réside une solution plus qu'acceptable

    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bonjour Gueritarish et merci de ta réponse

    Comme réponse à ton post, j'avais signalé que ta solution ne correspondais pas à ce que je voulais faire; et c'est le cas encore pour la réponse que tu viens de poster. J'utilise en effet des views et non des editors, car je dois, dans ces vues afficher des infos grâce à des tableViewer. Donc à moins que les editors puissent me permettre de le faire, je suis obligé de trouver une solution avec les views.

    Merci néanmoins pour ton aide, et je reste biensur en alerte pour une autre idée de solution.

    Bonne soirée

  6. #6
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Alors, bonjour papaetoo,

    Donc, je t'enlève tes mauvaises "idées" sur les Vues et les Editeurs... Regarde ce lien sur le wiki d'Eclipse qui explique les différences entre les Vues et les Editeurs et je suis sur que tu verras que ce qu'il explique s'applique parfaitement à ton problème...

    Et en confirmation, j'ajouterai que tu peux tout à fait mettre des TableViewers dans un Editor.

    Voilà, bonne journée,
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr Gueritarish,

    Effectivement, apres lecture du lien que tu as posté, je constate que les editors peuvent être utilisés dans mon cas. Je vais en parler à mon maitre de stage pour envisager plutot cette situation.

    Au cas ou il s'enterais à l'utilisation des editors, et pour ma propre culture (et celle d'autres personnes j'imagine), est-il réellement possible de le faire avec des views(j'imagine que oui), et comment le faire donc?

    Merci

  8. #8
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Bonjour papaetoo,

    Oui, on peut faire ce que tu veux faire avec des Views. Il faut savoir que les onglets que tu veux ajouter (et qui correspondent à une View chacun) sont ajouter automatiquement à l'instanciation de ta View dans le PlaceHolder. Donc, tu crées une instance de ta View chaque fois que la sélection change dans ton arbre avec le mode qui va bien :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("viewId", "secondaryId", mode)
    Sinon, sachant qu'il n'y a pas d'Input dans une View, je ne vois pas à quoi tu veux faire référence O_o (l'input d'un Viewer?)
    Sinon, pour gérer tes id secondaires, tu as plusieurs solutions... Encore faut-il savoir ce que représente les Views que tu veux mettre dans le PlaceHolder...

    Voilà, a+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  9. #9
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr gueritarish

    J'ai un tout petit avancé entre temps, même si entre temps, jme retrouve (encore?) bloqué.

    J'arrive à présent à avoir plusieurs instances de ma vue sous forme d'onglet. je le fais grâce à une action. Je compte donc utiliser cette action par la suite lors d'un click sur un noeud de mon arbre.

    Je suis en ce moment en train de faire (d'éssayer du moins) le lien entre mes deux vues (sans gérer pour l'instant le fait qu'un click ouvrirais un nouvel onglet). Je veux donc pourvoir recupérer des infos lors d'un click sur l'arbre de la vue de gauche et les afficher dans la vue de droite. J'utilise pour cela les "SelectionService" et je suis le nouvel (et excellent) tuto de monsieur keulkeul.

    Ainsi, dans ma classe de gauche, je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSite().setSelectionProvider(treeViewer);
    et dans ma classe de droite, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    this.getSite().getWorkbenchWindow().getSelectionService().addSelectionListener("simpleExplorer.navigationview", new ISelectionListener(){
    			public void selectionChanged(IWorkbenchPart part, ISelection selection) {
    				if (selection == null) {
    					return;
    				}
    				if (selection instanceof IStructuredSelection) {
    					IStructuredSelection structuredSelection = (IStructuredSelection)selection;
    					SubModule firstElement = (SubModule)structuredSelection.getFirstElement();
    					if (firstElement != null) {		
    						myProcStock = new ProcStock(firstElement.getQuery().getName());
    						modelProvider = new ModelProvider(myProcStock);
     
     
    						IViewPart viewPart = getViewSite().getWorkbenchWindow().getActivePage().findView(View.ID);
    	                    //getViewSite().getWorkbenchWindow().getActivePage().hideView(viewPart);
    	                    try {
    							getViewSite().getWorkbenchWindow().getActivePage().showView(View.ID);
    						} catch (PartInitException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}
     
    						createTableViewer(parent, modelProvider);
     
    				}
    			}
    });
    Je rapelle juste que ma méthode "createTableViewer(parent, modelProvider);" me permet de créer mon tableViewer. Elle fais appel elle même a la méthode "createColumns" qui se charge de créer les colonnes de ma future table, ce en fonction du modelProvider. Le modelProvider qui est quand à lui mon fournisseur d'objets(objets metiers, nom des colonnes, ...) issus de l'éxécution de la requête associée au fils selectionné.

    Le problème est que, une fois que tout cela esr mis en place, et que je clique sur un noeud de l'arbre, bah rien ne se passe. Je suis en train de penser que le pb viendrais des mes méthodes (createTableViewer et createColumns) qui ne s'auraient pas à quel parent se référencer.

    Ai je vu juste, ou le pb est il autre part?

    I need ur help plizzzzzzzzzzzzz

  10. #10
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    T'as essayé de mettre un point d'arrêt dans la méthode selectionChanged de ton Listener et de débuguer pour voir s'il passe à cet endroit?

    Parce que là, comme ça sans connaître tes méthodes createTableViewer ni createColumns... Je vois pas ce que je peux faire

    Juste au passage... Regarde dans la vue "Error Log" sur l'Eclipse du runtime... Il va surement y avoir des choses intéressantes

    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  11. #11
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Voici le code des méthodes utilisées pour créer la vue; ainsi qu'en pièce jointes, la classe modelProvider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    private void createTableViewer(final Composite parent,  final ModelProvider modelProvider){
     
    		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
    				| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
     
    		// création des colonnes de la table
    		//createColumns(viewer, headers, types);				
    		createColumns(viewer, modelProvider.getHearders(), modelProvider.getTypes());
     
     
    		viewer.setContentProvider(new TblRowContentProvider());
    		viewer.setLabelProvider(new TblRowLabelProvider());
     
    		// On récupère le content de la vue, la méthode setInput appelera getElements
    		// dans le contentProvider
     
    		//viewer.setInput(ModelProvider.getInstance().getTblRows());			
    		viewer.setInput(modelProvider.getTblRows());
     
    		// On active la sélection
    		getSite().setSelectionProvider(viewer);
     
    		// On active le Sorter sur notre table
    		tableSorter = new TableSorter();
    		viewer.setSorter(tableSorter);
    		filter = new TblRowFilter();
    		viewer.addFilter(filter);
     
    		// Layout the viewer
    		GridData gridData = new GridData();
    		gridData.verticalAlignment = GridData.FILL;
    		gridData.horizontalSpan = 2;
    		gridData.grabExcessHorizontalSpace = true;
    		gridData.grabExcessVerticalSpace = true;
    		gridData.horizontalAlignment = GridData.FILL;
    		viewer.getControl().setLayoutData(gridData);
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    private void createColumns(final TableViewer viewer, String[] headers, String[] types) {
     
    		Table table = viewer.getTable(); 
     
    		// à gérer dynamiquement
    		int[] bounds = { 100, 100, 100, 100, 100, 100, 100, 100, 100 };
     
    		for (int i = 0; i < headers.length; i++) {
    			final int index = i;
    			final TableViewerColumn viewerColumn = new TableViewerColumn(
    					viewer, SWT.NONE);
    			final TableColumn column = viewerColumn.getColumn();						
     
    			column.setText(headers[i]);
    			column.setWidth(bounds[i]);
    			column.setResizable(true);
    			column.setMoveable(true);
     
    			// Setting the right sorter
    			column.addSelectionListener(new SelectionAdapter() {
    				@Override
    				public void widgetSelected(SelectionEvent e) {
    					tableSorter.setColumn(index);
    					int dir = viewer.getTable().getSortDirection();
    					if (viewer.getTable().getSortColumn() == column) {
    						dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
    					} else {
    						dir = SWT.DOWN;
    					}
    					viewer.getTable().setSortDirection(dir);
    					viewer.getTable().setSortColumn(column);
    					viewer.refresh();
    				}
    			});
    			//viewerColumn.setEditingSupport(new TblRowEditingSupport(viewer, i)); 
    		}
    		table.setHeaderVisible(true);
    		table.setLinesVisible(true);
    	}
    thx
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    A priori rien de marquant...

    Il me manque la méthode createPartControl de la View multiple que tu souhaites affiché... Au passage, j'espère que l'identifiant View.ID correspond bien à l'identifiant de la View multiple !!!

    Gueritarish

    [EDIT:] Tu ne m'as pas dis si tu avais des Erreurs répertorié dans la vue "Error Log" de l'Eclipse du Runtime... Ni si tu avais passé le débugguer sur ton code -_-"
    Pas de questions technique par MP, les forums sont là pour ça.

  13. #13
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Merci!
    Je te passe en pièce jointe, le code (pas nétoyé) de ma classe view. je noterais juste pour l'instant, jne gere pas sa multiplicité". j'aimerais dans un premier temps, pouvoire afficher correctement les infos de ma selection dans la vue. Et à chaque fois que la sélection change, la vue de rafraichis et contient les nvells infos selectionnées.

    J'ai remarqué que la vue n'affichai rien car, c'est le "selectionChanged" que j'y implementais, or il n'yavaus juske lors aucune selection d'active et donc aucun parent à référence lors de l'utilisation de la méthode "createTableViewer". J'ai donc rajouté le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myProcStock = new ProcStock("dbo.rep_getAnnouncePendingAcknowledgementLN");
    		modelProvider = new ModelProvider(myProcStock);
    createTableViewer(parent, modelProvider);
    qui me permet de créer mon tableViewer pour une première fois lors de l'éxécution de l'appli. Ensuite, comme tu le remarqueras dans le code de la vue, je suis obligé de cacher et de reafficher ma vue active afin de pouvoir prendre en compte la nouvelle selection. Deja que cette méthode n'est pas "propre", mais en plus j'ai même l'impression que le tableViewer n'est pas reconstruit a chaque fois, car jme retrouve avec les même noms de colonnes dans la table (alors qu'avec le changement de selection, de nouvelles données devraient être renvoyés pour la construction des entêtes).

    Pour ce qui sont des erreurs, j'en ai pas dans la vue Error log, si ce ne sont des erreurs par rapport a la javadoc.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Pas trop le temps de regarder ça tout de suite... Mais j'y jetterais un œil demain matin si possible !!

    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  15. #15
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bonjour à tous,

    Toujours dans la recherche d'une solution à mon problème, j'ai un tout petit peu avancé. J'arrive en effet, lors d'un click sur un element de mon tree (dans la vue de gauche), à mettre à jour le tableau présent dans ma vue de droite. Seulement voilà, jsuis confronté à un problème de taille qui est tres embarassant. Ya pas réellement de mise à jour du tableau; quand je selection un noeud de l'arbre, rien n' a l'air de se passer. Ce n'est que quand j'applique une action sur ma vue (agrandissement, restauration, ...) que j'appercois les tableaux correspondants aux noeuds que j'ai selectionnés. ils sont tous présents dans la même vue, les uns en dessous des autres.

    J'imagine que c'est un simple problème de refresh, mais j'arrive pas à le resoudre. Je voudrais en effet qu'à chaque selection d'un nouvel element du tree, que la vue de droite (le tableViewer qu'il contient) se mette complement à jour.

    Help me plizzz

  16. #16
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Tu as pensé à faire un layout(true) sur le Composite parent qui contient tes tableaux quand tu les ajoutes?
    Cette méthode sert à informer le-dit Composite qu'il y a eu des changements dans son Layout et que donc, il faut qu'il se mette à jour...

    Essaye ça, ça devrait normalement te corriger le problème.

    Voilà,
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  17. #17
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Oui Gueritarish, j'ai fais cela, ainsi que tous les refresh possibles et ca ne fonctionne toujours pas

    Là je décide de passer directement à l'étape du dessus, c'est à dire ouvrir un onglet(contenant une une instance de ma vue) chaque fois que je clique sur un noeud de l'arbre. Je suis donc confronté aux questions suivantes :
    - je sais que pour instancier mon onglet, jdois faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PrincipalView ViewInstance= (PrincipalView)page.showView(PrincipalView.ID, secondaryId, IWorkbenchPage.VIEW_CREATE);
    Sachant qu'au niveau de ma classe persective, je crée les vues de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IFolderLayout folderResults = layout.createFolder("Results", IPageLayout.BOTTOM, 0.5f, editorArea);
    folderResults.addPlaceholder(PrincipalView .ID + ":*");
    folderResults.addView(PrincipalView .ID);
    Je me pose donc la question de comment se gèrent exactement les "secondaryID" et ou exactement dois je instancier mon instance de vue

    - Comment attacher les "bonnes" données à la bonne vue? En d'autres malgré le fait que je voudrais avoir plusieurs instances de ma vue, chacune de ces instances devra avoir des données différentes (en fonction de ce qui aura été sélectionné dans l'arbre)

    - Pour info, jpeux, grâce à une action(attachée au menu), créer une instance de ma vue. Le code de l'action est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    public class OpenViewAction extends Action {
     
    	private final IWorkbenchWindow window;
    	private int instanceNum = 0;
    	private final String viewId;
     
    	public OpenViewAction(IWorkbenchWindow window, String label, String viewId) {
    		this.window = window;
    		this.viewId = viewId;
            setText(label);
    		setId(ICommandIds.CMD_OPEN);
    		setActionDefinitionId(ICommandIds.CMD_OPEN);
    		setImageDescriptor(simpleexplorer.Activator.getImageDescriptor("/icons/sample2.gif"));
    	}
     
    	public void run() {
    		if(window != null) {	
    			try {
    				window.getActivePage().showView(viewId, Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);
    			} catch (PartInitException e) {
    				MessageDialog.openError(window.getShell(), "Error", "Error opening view:" + e.getMessage());
    			}
    		}
    	}
    }

  18. #18
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Bon, je vais corriger quelques unes de tes "erreurs" (de langage j'imagine)...
    - Tu n'ouvres pas des "onglets"... Les onglets sont une conséquence de l'ouverture de ta vue dans le PlaceHolder.
    - Les secondaryID sont tout simplement des identifiants.... (capitaine obvious !!!) Tu leur donnes la valeur que tu veux, sachant qu'il faut ensuite que tu puisses récupérer une vue à partir de cet identifiant. Qu'est-ce qui distingue une vue d'une autre de ton point de vue? Je peux pas faire de spécification à ta place...
    - Les vues ne sont pas des Editors. Les vues n'ont pas de données à proprement parler (de mon point de vue). Si tu veux associer des données à ta Vue considère le fait qu'il vaudrait peut-être mieux utiliser un Editor qui a un input... Je sais que je reviens trainer mon Editor, c'est pas par sentimentalisme, c'est juste que des APIs sont faites pour les utiliser et que le framework Eclipse marche plutôt dans ce sens.

    Bon, si tu tiens tellement aux View que tu peux pas t'en passer... Soit! A ce moment là, pour gérer tes secondaryId je te dirais de passer par les données que tu souhaites associer à chaque Vue (c'est bien ce qui les rends uniques entre elles).

    a+,
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  19. #19
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Gueritarish Voir le message
    Qu'est-ce qui distingue une vue d'une autre de ton point de vue? Je peux pas faire de spécification à ta place...
    A mon sens, ce qui distingue une vue d'une autre, c'est son contenu (celui du tableViewer qu'il possède en occurence)
    Citation Envoyé par Gueritarish Voir le message
    - Les vues ne sont pas des Editors. Les vues n'ont pas de données à proprement parler (de mon point de vue). Si tu veux associer des données à ta Vue considère le fait qu'il vaudrait peut-être mieux utiliser un Editor qui a un input... Je sais que je reviens trainer mon Editor, c'est pas par sentimentalisme, c'est juste que des APIs sont faites pour les utiliser et que le framework Eclipse marche plutôt dans ce sens.
    Quand je parle d'associer des données à ma vue, effectivement, il s'agit là d'un abus de langage. Jveux dire en faite : "associer des données au tableViewer de la vue"

    Citation Envoyé par Gueritarish Voir le message
    je te dirais de passer par les données que tu souhaites associer à chaque Vue (c'est bien ce qui les rends uniques entre elles).
    Qu'entends tu exactement par cela? Aurais tu un tout ptit exemple sous la main?
    a+,

  20. #20
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par papaetoo Voir le message
    Qu'entends tu exactement par cela? Aurais tu un tout ptit exemple sous la main?
    Bah ne connaissant ni ce qui est présent dans la vue de gauche (avec un TreeViewer si j'ai bien compris) , ni ce qui est présent dans la vue de droite (celle avec un TableViewer) je vois mal l'exemple que je pourrais te donner

    Bon, maintenant, j'imagine que tu passes une liste à ta table (ou quelque chose approchant...). Il me semble que tu récupères des données d'une table en base... Donc, tu dois avoir des clés avec ces données. Donc, tu peux éventuellement te faire un id secondaire avec les valeurs de chacune des clés (ou même les HashCode de chacune de ces clés).
    Par exemple, après ton appel en base, tu te retrouves avec une liste de 3 éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        A  (primaryKey = 123); 
        B  (primaryKey = 456);
        C  (primaryKey = 789);
    Ton secondaryId pour une vue contenant ces données serait "123456789"... Bon, c'est un exemple bidon, mais je fais comme je peux .

    Je comprends pas ton problème avec cet ID. C'est juste une chaine qu'il te faut pouvoir récupérer, c'est tout.

    a+,
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [débutant]Vue avec plusieurs onglets
    Par pingoui dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 07/10/2008, 15h23
  2. Générer un Fichier EXCEL avec plusieur onglet.
    Par Portoss dans le forum kettle/PDI
    Réponses: 1
    Dernier message: 16/06/2008, 17h25
  3. Panel avec plusieurs onglets
    Par logiciel_const dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/03/2008, 10h53
  4. Créer une vue avec des onglets
    Par Flackou dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2007, 11h43
  5. ORACLE 9.2 : Création d'une vue avec plusieurs clauses WHERE
    Par soffinette dans le forum Administration
    Réponses: 4
    Dernier message: 01/02/2007, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo