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 :

Changer de vue


Sujet :

SWT/JFace Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut Changer de vue
    Bonjour à tous

    J'ai un petit problème étant donné que je suis débutant dans Eclispe RCP et SWT.

    J'ai donc une application RCP avec 3 vues qui prennent toute la fenêtre.
    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
    41
     
    package com.eclipse.rcp.app1;
     
    import org.eclipse.ui.IPageLayout;
    import org.eclipse.ui.IPerspectiveFactory;
    import org.eclipse.ui.IViewLayout;
     
    public class Perspective implements IPerspectiveFactory {
     
    	public void createInitialLayout(IPageLayout layout) {
    		// On masque la zone d'édition
    	    layout.setEditorAreaVisible(false);
     
    		String editorArea = layout.getEditorArea();
     
    	    // Affichage de la vue "Etapes"
    	    layout.addView("com.eclipse.rcp.app1.etapes",
    	    		IPageLayout.LEFT, 0.15f, editorArea);
    	    IViewLayout viewEtapes = layout.getViewLayout("com.eclipse.rcp.app1.etapes");
    	    viewEtapes.setCloseable(false);
     
    	    //Affichage de la vue "Compléments"
    	    layout.addView("com.eclipse.rcp.app1.complements",
    	    		IPageLayout.BOTTOM, 0.7f, editorArea);
    	    IViewLayout viewComplements = layout.getViewLayout("com.eclipse.rcp.app1.complements");
    	    viewComplements.setCloseable(false);
     
    	    //Affichage de la vue "Paramétrages"
    	    layout.addView("com.eclipse.rcp.app1.parametrageStep1",
    	    		layout.TOP, layout.RATIO_MAX, editorArea);
    	    IViewLayout viewParametrageStep1 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep1");
    	    viewParametrageStep1.setCloseable(false);
     
    	    /**layout.addView("com.eclipse.rcp.app1.parametrageStep2",
                            layout.TOP, layout.RATIO_MAX, editorArea);
                IViewLayout viewParametrageStep2 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep2");
                viewParametrageStep2.setCloseable(false);*/
     
    	}
     
    }
    Ma vue principale étant parametrageStep1. Au départ j'ai essayé de créer la vue parametrageStep2 mais c'est impossible (surement parcequ'il n'y a plus de place).

    Donc j'ai codé ma vue parametrageStep1 et ensuite j'ai un bouton "suivant". Jaimerai savoir comment faire lorsque je clique sur ce bouton pour fermer la vue et en créer une nouvelle qui prend sa place ?

    Je vous remercie de votre aide.

    Cordialement,

    Leniouns

  2. #2
    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 : 41
    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
    Par défaut
    Salut,

    Niveau utilisateur, ça va être un peu perturbant non?
    Tu cliques sur un bouton d'une vue, ça ferme cette vue et ça en ouvre une autre? Pourquoi utiliser 2 vues? Selon moi, tu as 2 possibilités (au moins):
    • Soit tu changes le contenu de ta première vue.
    • Soit tu passes plutôt par un Wizard. Enfin, tout dépend de ce que tu souhaites afficher.
    Dis nous en plus sur ton contexte, si tu peux / veux. Sinon, si tu tiens réellement à faire ceci, ça reste assez simple à mettre en œuvre:
    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
    final IWorkbenchWindow iActiveWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    if (iActiveWorkbenchWindow != null) {
      final IWorkbenchPage iActivePage = iActiveWorkbenchWindow.getActivePage();
      if (iActivePage != null) {
        final IViewPart iMyView = iActivePage.findView("my.view.id");
        if (iMyView != null) {
          iActivePage.hideView(iMyView);
          try {
            iActivePage.showView("my.second.view");
          } catch (final PartInitException iException) {
            iException.printStackTrace();
          }
        }
      }
    }
    Voilà, à+
    Gueritarish

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Bhe je ne pense pas que je devrai changer le contenue de la vue. En effet par la suite j'aimerai pouvoir passer d'une vue à une autre en cliquant sur le numéro de l'étape. Dans la vue de gauche j'aurai toutes les étapes qui représenteront une vue et ainsi pouvoir aller directement à une vue en cliquant sur l'étape associée.

    Et sinon suivant ta proposition de code le problème c'est que ma seconde vue "n'est pas en place".

    Dans le code que j'ai mis je n'ai pas pu l'insérer dans le layout.

  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 : 41
    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
    Par défaut
    C'est parce qu'il te faut modifier la définition du layout de ta perspective.
    Il te faut inclure un placeholder (zone qui va définir où ta vue sera ouverte):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Affichage de la vue "Paramétrages"
    IFolderLayout iMainLayout = layout.createFolder("topFolder", layout.TOP, layout.RATIO_MAX, editorArea);
    iMainLayout.addView("com.eclipse.rcp.app1.parametrageStep1");
    iMainLayout.addPlaceholder("com.eclipse.rcp.app1.parametrageStep2");
    IViewLayout viewParametrageStep1 = layout.getViewLayout("com.eclipse.rcp.app1.parametrageStep1");
    viewParametrageStep1.setCloseable(false);
    Voilà, à+
    Gueritarish

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Excuse moi mais je n'ai pas trop compris ce que tu as fait Gueritarish

    De plus j'ai testé mais j'ai ce message :

    !MESSAGE Unable to find view with id: com.eclipse.rcp.app1.parametrageStep2, when creating perspective com.eclipse.rcp.app1.perspective

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    tu peux te baser sur les org.eclipse.jface.wizard.Wizard pour faire ça : habituellement on utilise un dialogue pour les wizard, mais on peut rendre un éditeur ou une vue parent du wizard. Ainsi tu bénéficie du mécanisme des wizards pour tes changements d'étapes.

    Dans la méthode createPartControl tu crées un composite, qui te servira de parent à ton wizard, passé dans le constructeur.

    Il faudra implémenter l'interface org.eclipse.jface.wizard.IWizardContainer sur ta vue (ou ton éditeur) et indiquer à ton wizard que son container est la vue ou l'éditeur. Utilise un StackLayout pour le layout des pages. Il faudra également créer les boutons, et les brancher sur les méthodes du wizard, pour changer de page, annuler ou valider (branché sur les méthodes de sauvegarde de l'éditeur le cas échéant).

    Tu peux prendre exemple sur les sources de la classe WizardDialog pour te guider pour une implémentation complète.

    Canevas de base rapide pour un une vue :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    public abstract class AbstractWizardView 
    extends ViewPart implements IWizardContainer {
     
    public void createPartControl(Composite parent) {
     
                    container = new Composite( parent, SWT.NONE );
     
    		layout = new StackLayout();
    		container.setLayout( layout );
    		wizard = new SamplelWizard(container) {	
     
    				@Override
    				public IWizardContainer getContainer() {
    					return AbstractWizardView.this;
    				}
    			};
     
                    wizard.addPages();
     
    parent.addDisposeListener( new DisposeListener() {
     
    			public void widgetDisposed(DisposeEvent e) {
    				wizard.dispose();
    			}
    		} );
     
                    createButtonBar( parent );
     
                    IWizardPage startingPage = wizard.getStartingPage();
    		if (startingPage == null) {
    			log.warn("no starting page for wizard");
    		} else {
    			startingPage.createControl(root);
    			showPage(startingPage);
    		}
     
            ...
         }
     
    public void showPage(IWizardPage page) {
    		if (page != currentPage) {
    			IWizardPage old = currentPage;
    			currentPage = page;
    			layout.topControl =  page.getControl();
     
    			if( old != null ) {
    				old.setVisible( false );
    			}
    			page.setVisible( true );
    			container .layout();
    			update();
    		}
    	}
     
            // exemple pour le code pour avancer dans les pages:
         protected void nextPressed() {
    			IWizardPage page = currentPage.getNextPage();
    				showPage(page);
    	}
     
    ...
     
    public IWizardPage getCurrentPage() {
    		return currentPage;
    	}
    ...
     
    public Shell getShell() {
    		return getSite().getShell();
    	}
     
    ...
     
    public void updateButtons() {
    		boolean canFlipToNextPage = false;
    		boolean canFinish = wizard.canFinish();
    		if (backButton != null) {
    			backButton.setEnabled(currentPage.getPreviousPage() != null);
    		}
    		if (nextButton != null) {
    			canFlipToNextPage = currentPage.canFlipToNextPage();
    			nextButton.setEnabled(canFlipToNextPage);
    		}
    		finishButton.setEnabled(canFinish);
    		if (canFlipToNextPage && (!canFinish || forceNextDefault )) {
    			getShell().setDefaultButton(nextButton);
    		} else {
    			getShell().setDefaultButton(finishButton);
    		}
    	}
     
    ....
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Salut joel.drigo. Merci pour ton aide. C'est obligatoire de passer par les Wizard ?

    Je ne m'y connais psa trop mais j'ai déjà créer toute ma première vue avec les listeners. J'ai peur de devoir "casser" pas mal de chose.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Non, non, c'est pas obligatoire.

    Je trouve ça personnellement plutôt clean. C'est vrai que ça demande pas mal de boulot, mais quand l'abstraction est faite, elle est réutilisable.

    Après c'est toi qui voit.

    Mais a mon avis essayer de jongler avec plusieurs vues risque d'être assez siouxe à mettre au point, et tu pourras jamais être sur qu'un utilisateur trouvera pas un moyen (involontairement ou pas) de tout faire foirer (genre afficher 2 étapes en même temps et ensuite faire foirer ton système de changement d'étape), ou s'il y a pas une autre faille, avec la MRU, ou avec les preférences d'Eclipse, le docking et plein d'autres choses.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Car en fait voici ma vue avec les updates. Je ne sais pas trop si c'est propre. Il faudrait que je me penche réellement sur ta solution.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
     
    package com.eclipse.rcp.app1.view;
     
    import java.io.File;
    import java.util.ArrayList;
     
    import org.eclipse.jface.dialogs.MessageDialog;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.graphics.Font;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.*;
    import org.eclipse.ui.IViewPart;
    import org.eclipse.ui.PartInitException;
    import org.eclipse.ui.part.ViewPart;
     
    import com.eclipse.rcp.app1.controller.ParametrageController;
    import com.eclipse.rcp.app1.view.parametrage.listeners.AffaireSelectionListener;
    import com.eclipse.rcp.app1.view.parametrage.listeners.ListMatSelectionListener;
     
    import com.eclipse.rcp.app1.view.parametrage.listeners.MatSelectionListener;
     
    public class ParametrageStep1 extends ViewPart {
     
    	private ParametrageController parametrageController = null;
     
     
    	private Text textLieu = null;
    	private Text textMat = null;
    	private Label labelListMat = null;
    	private Table tableMat = null;
    	private Button btnNext = null;
    	private Composite parent = null;
     
    	public ParametrageStep1() {
    		parametrageController = new ParametrageController(this);
    	}
     
    	@Override
    	public void createPartControl(Composite parent) {
    		this.parent = parent;
    		GridLayout lieuAffaire = new GridLayout(3,false);
    		parent.setLayout(lieuAffaire);
    		lieuAffaire.marginLeft = 300;
     
    		Label labelTitre = new Label(parent,SWT.NONE);
    		labelTitre.setText("Sélection du lieu de l'affaire et des matrices de test");
    		labelTitre.setFont(new Font(null,"Arial",14,0));
    		GridData titreGD = new GridData(GridData.FILL_HORIZONTAL);
    		titreGD.horizontalSpan = 3;
    		titreGD.heightHint = 70;
    		labelTitre.setLayoutData(titreGD);
     
    		Label labelLieu = new Label(parent, SWT.NONE);
    		labelLieu.setText("Lieu de l'affaire : ");
    		labelLieu.setFont(new Font(null,"Arial",10,0));
    		labelLieu.setToolTipText("Indiquer le dossier racine de l'affaire");
    		textLieu = new Text(parent, SWT.BORDER);
    		textLieu.setText("Chemin de l'affaire");
    		textLieu.setFont(new Font(null,"Arial",10,0));
    		GridData affaireGD = new GridData(GridData.CENTER);
    		affaireGD.widthHint = 300;
    		textLieu.setLayoutData(affaireGD);
    		Button btnLieuAffaire = new Button(parent, SWT.NONE);
    		btnLieuAffaire.setText("...");
    		btnLieuAffaire.addSelectionListener(new AffaireSelectionListener(parametrageController));
     
    		Label labelMat = new Label(parent, SWT.NONE);
    		labelMat.setText("Lieu des matrices de test : ");
    		labelMat.setFont(new Font(null,"Arial",10,0));
    		labelMat.setToolTipText("Indiquer le dossier racine des matrices de test");
    		textMat = new Text(parent, SWT.BORDER);
    		textMat.setText("Chemin des matrices de test");
    		textMat.setFont(new Font(null,"Arial",10,0));
    		affaireGD.widthHint = 300;
    		textMat.setLayoutData(affaireGD);
    		Button btnLieuMat = new Button(parent, SWT.NONE);
    		btnLieuMat.setText("...");
    		btnLieuMat.addSelectionListener(new MatSelectionListener(parametrageController));
     
    	}
     
    	@Override
    	public void setFocus() {
    	}
     
     
    	/**
             * Update TextLieu and TextMat with the selected path
             * @param myUpdatedText
             */
    	public void updateTextLieuAndMat(String myUpdatedText){
    		textLieu.setText(myUpdatedText);
    		textMat.setText(myUpdatedText + "path");
     
    	}
     
    	/**
             * Update TextMat with the selected path
             * @param myUpdatedText
             */
    	public void updateTextMat(String myUpdatedText){
    		textMat.setText(myUpdatedText);
    	}
     
    	/**
             * Update the list of matrices
             * @param myUpdateListMat
             */
    	public void updateListMat(String[] listMat){	
     
    		if (labelListMat == null){
    			Label labelListMat = new Label(this.parent, SWT.NONE);
    			labelListMat.setText("Matrices présentes : ");
    			labelListMat.setFont(new Font(null,"Arial",10,0));
    			labelListMat = labelListMat;
    		}
     
    		//Si un tableau de matrice existe déjà alors le supprimer 
    		//pour en créer un nouveau
    		if (tableMat != null){
    			tableMat.dispose();
    		}
     
    		Table tableMat = new Table(this.parent, SWT.CHECK);
    		TableColumn columnMatName = new TableColumn(tableMat, SWT.LEFT);
    		columnMatName.setText("Nom de la matrice");
    		columnMatName.setWidth(300);
    		columnMatName.setResizable(false);
    		tableMat.setHeaderVisible(true);
    		tableMat.setLinesVisible(true); 
     
    		//Création du tableau comportant les différentes matrices
    		for (int i=0; i<listMat.length; i++){
    			File mat = new File(listMat[i]);
    			TableItem line = new TableItem(tableMat,SWT.NONE);
    			line.setText(mat.getName());
    			line.setChecked(true);
    		}
    		GridData tabMatGD = new GridData(GridData.FILL_HORIZONTAL);
    		tabMatGD.horizontalSpan = 2;
    		tabMatGD.horizontalAlignment = SWT.LEFT;
    		tableMat.setLayoutData(tabMatGD);
    		tableMat.setToolTipText("Indiquer les matrices de test que l'on veut traiter");
    		this.tableMat = tableMat;
     
    		if (btnNext != null){
    			btnNext.dispose();
    		}
     
    		GridData btnNextGD = new GridData(GridData.FILL_HORIZONTAL);
    		btnNextGD.horizontalSpan = 3;
    		btnNextGD.horizontalAlignment = SWT.CENTER;
    		btnNextGD.verticalIndent = 40;
    		Button btnNext = new Button(parent, SWT.NONE);
    		btnNext.setText("Suivant");
    		btnNext.setLayoutData(btnNextGD);
    		btnNext.addSelectionListener(new ListMatSelectionListener(parametrageController));
    		btnNext = btnNext;
     
    		this.parent.layout();
    	}
     
    	//Retourne une liste contenant les matrices cochées dans la table des matrices
    	public ArrayList<String> getListTableChecked(){
    		TableItem[] listItem = tableMat.getItems();
    		ArrayList<String> listMatChecked = new ArrayList<String>();
    		for (int i=0; i<listItem.length; i++){
    			boolean checked = listItem[i].getChecked();
    			if (checked){
    				listMatChecked.add(listItem[i].getText());
    			}	
    		}
    		return listMatChecked;
     
    	}
     
    	//Retourne une liste contenant les matrices NON cochées dans la table des matrices
    	public ArrayList<String> getListTableNotChecked(){
    		TableItem[] listItem = tableMat.getItems();
    		ArrayList<String> listMatNotChecked = new ArrayList<String>();
    		for (int i=0; i<listItem.length; i++){
    			boolean checked = listItem[i].getChecked();
    			if (!checked){
    				listMatNotChecked.add(listItem[i].getText());
    			}	
    		}
    		return listMatNotChecked;
     
    	}
     
    	public void updateNextView(ArrayList<String> listMatNotChecked){
    		Boolean reponse = true;
    		if (!listMatNotChecked.isEmpty()){
    			reponse = MessageDialog.openConfirm(this.parent.getShell(), 
    					"Confirmation", "Vous n'avez pas sélectionné les matrices suivantes : \n\n" 
    					+ listMatNotChecked.toString()+ ". \n\nEtes vous sûr de vouloir continuer?");
     
    		}
    		if (reponse){
     
    		} 
    	}
    }

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Avec ma solution, il te suffit de créer une ParametrageStep1 extends WizardPage au lieu de extends ViewPart.

    Le bouton next (btnLieuMat) sera dans l'abstraction (et sera commun à toutes tes pages).

    Utilise une classe DataHandler à toi pour communiquer des datas entre page, comme ta liste de matrice listMatNotChecked.

    Au lieu d'avoir un message qui dit que quelque chose n'est pas sélectionné lorsque tu cliques sur le bouton next, il suffit d'utiliser les warnings et de gérer le canFlipToNextPage.

    C'est pas grand chose à faire pour migrer, surtout qu'il est assez tôt dans ton dev. Ensuite tu verras, que insérer des pages, ajouter des conditions pour avancer ou reculer, sauter des étapes, etc... sera beaucoup plus simple à mon avis.

    Et ta vue-wizard sera autonome (on peut dédocker par exemple une vue et la "sortir" du workbench, ce qui peut être pratique à l'usage).

    Choisis bien dès le départ si tu fais une vue ou un éditeur. Dans le cas de l'éditeur il suffit d'ajouter les notions de sauvegarde (ISaveablePart ou ISaveablePart2), sinon le reste est quasi identique.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Autre chose qui n'a rien à voir avec la question d'origine :

    attention aux trucs du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    labelMat.setFont(new Font(null,"Arial",10,0));
    tout élément SWT, comme une police par exemple, nécessite un handle, et donc doit être disposée quand tu n'en a plus besoin, sinon le handle restera bloqué tant que tu reboote pas ton poste.

    donc soit, tu mémorises la référence sur ta police, et dans la méthode dispose de ta vue, tu las disposes, soit mieux, tu utilises un DisposeListener, ou encore beaucoup mieux, tu utilises une org.eclipse.jface.resource.FontRegistry (ce qui te permettra d'utiliser plusieurs fois une même police, au lieu de consommer un handle différent à chaque fois que tu l'utilises).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Ok merci de ton aide. Je vais regarder ça.

    [EDIT]Bon décidément je suis un réel débutant...
    Je ne vois pas du tout comment je dois m'y prendre

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Bonjour joel.drigo,

    Alors j'ai commencé à regarder ta solution. Il me semble en effet que l'utilisation de wizard est le plus approprié.

    Cependant j'ai un soucis. Je ne sais pas comment faire pour que le wizard soit intégré dans ma vue et non pas que ce soit une fenêtre à part.

    Du coup je n'ai pas trop compris ton passage où tu instancies ton wizard en mettant le composite en paramètre du constructeur. Je comprend que cela est utile pour dire par la suite que la vue sera le composite du wizard mais je ne sais pas comment l'implanter au niveau du code du wizard en fait.

    Je te remercie pour ton aide

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    habituellement on créé un wizard en utilisant la classe WizardDialog qui intègre le wizard dans un dialogue modal.

    mais on peut intégrer un dialogue dans n'importe quel type d'interface, en l'occurence dans une vue ou un éditeur, en fait dans un IWizardContainer (qui correspond à un interface qui définit un machin qui contient (et controle) un wizard)

    Je l'ai personnellement pour un éditeur, mais pour une vue c'est le même principe.

    Dans le code que j'ai posté, je fais 2 choses principales :

    - j'implémente l'interface IWizardContainer sur mon éditeur (ou ta vue)
    - et j'indique au wizard (une extension de IWizard) quand je l'instancie que mon container est mon éditeur (ou ta vue)

    et je précise qu'il est nécessaire "d'habiller" toi même ta vue avec la Bannière et boutons comme le ferai un WizardDialog (c'est pour ça que je te parlais de regarder le code source de cette classe)

    j'ai pas trop de temps la maintenant de rentrer plus dans le détail, je repasserai dès que possible.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Ok je te remercie déjà pour cette aide En fait je comprend le principe mais c'est au niveau du code du wizard où sa bloque. J'ai compris comment créer des pages etc, c'est juste au niveau du wizard pour coder le fait qu'il sera dans la vue.

    D'ailleurs si certains ont des compléments de réponse ?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Bonjour,

    J'ai enfin réussi à créer mon wizard dans ma vue. Je m’attèle maintenant à créer les boutons next, back, cancel, finish. Donc créer le pied de page du wizard. J'essaye de m'inspirer de DialogPage. Le soucis c'est que les méthodes de DialogPage utlisent des méthodes de Dialog (que moi je ne peux utiliser). De plus DialogPage utilise des méthodes assez complexe j'ai l'impression. Ma question est donc de savoir si je dois utiliser des méthodes de Dialog ou juste m'en inspirer et les rendre moins complexe ?

    Merci de votre aide.

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    regarde plutot les méthodes de WizardDialog chargées de construire les boutons qui ne sont pas si compliquées que ça :

    - en gros y'a un createButtonsForButtonBar qui appelle d'autres méthodes pour créer les boutons nécessaires (help, finish, cancel, next, previous)
    - une méthode chargé d'affecter le bon layoutData à un bouton
    - des méthodes spécifiques (pour le help, le next et previous) etc...
    - createButton pour créer un bouton (ce qu'il affiche, ce qu'il fait quand on clique dessus, etc..)

    pour récupérer le click, la méthode buttonPressed

    les méthodes spécifiques sont genre createCancelButton pour créer le bouton cancel, qui utilise un listener différent (qui appelle pas buttonPressed mais cancelPressed,






    tu n'es pas obligé de copier ou de t'inspirer de ça, tu peux reproduire l'idée, mais l'avantage c'est que tout est traité selon les conventions (dimensions, positionnement des boutons, alignements, boutons par défaut, etc...) alors que si tu le fais toi même tu risque d'oublier un petit bout.

    mais c'est vrai qu'il y a beaucoup de chose à reprendre, mais si tu regardes bien ce n'est pas si compliqué que ça

    mais tu peux bien sûr faire ta propre barre de bouton

    en gros tu dois avoir des boutons, plutôt conventionnellement aligné sur la droite (sauf pour help), previous, finish, cancel, next (sur windows en tout cas). a la limite le help, tu peux l'ignorer (ou le faire plus tard si tu veux)

    chaque bouton est un push, avec des propriétés (nom, obtenues depuis les resources jface, donc conventionnel, localisé (en particulier si tu installe babel), etc...

    si tu refais complètement la barre de bouton toi même, prend au moins exemple sur les appels de createButton, pour les id et les labels comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    finishButton = createButton(parent, IDialogConstants.FINISH_ID,
    				IDialogConstants.FINISH_LABEL, true);

    pour l'enablement des boutons, je te conseille quand même de regarder updataButtons de WizardDialog. Si tu as bien implémenté l'interface IWizardContainer, elle est très facile à comprendre et reprendre
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Bonjour joel.drigo, merci pour ton aide.

    Justement pour createButon il est présent dans Dialog. Et utilise également d'autres méthodes etc. De fil à aiguille ça me fait beaucoup de méthodes. Car je n'arrive pas à utiliser tout simplement createButon de Dialog.

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    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
    protected Button createButton(Composite parent, int id, String label,
    			boolean defaultButton) {
    		// increment the number of columns in the button bar
    		((GridLayout) parent.getLayout()).numColumns++;
                    /* si tu as bien utilisé un GridLayout pas de problème */
    		Button button = new Button(parent, SWT.PUSH);
    		button.setText(label);
    		button.setFont(JFaceResources.getDialogFont());
    		button.setData(new Integer(id));
    		button.addSelectionListener(new SelectionAdapter() {
    			public void widgetSelected(SelectionEvent event) {
    				buttonPressed(((Integer)
    /*cette méthode est assez simple et facile a utiliser*/ event.widget.getData()).intValue());
    			}
    		});
    		if (defaultButton) {
    			Shell shell = parent.getShell();
    /*remplace cet appel par Shell shell = getSite().getShell()*/
    			if (shell != null) {
    				shell.setDefaultButton(button);
    			}
    		}
    		buttons.put(new Integer(id), button);
    		setButtonLayoutData(button);/*la méthode appelée est très simple, il y a juste une subtilité avec convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); voir plus loin...*/
    		return button;
    	}

    donc convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);

    cette méthode à pour but de mettre en place le dimensionnement conventionnel pour les boutons de dialogue : tu peux si tu veux ignorer complètement cette méthode et utiliser le spacing de ton gridlayout,
    mais l'utiliser est relativement simple

    il est juste nécessaire d'avoir un variable fontMetrics dans ta vue, et de l'initialiser

    regarde createContents de dialog : il faut juste appeler

    initializeDialogUnits(composite);

    avant de créer tes propres composant dans createPartControl de ta vue
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Alors j'arrive à peu près à construire les boutons. Cependant j'ai un problème pour créer la "boutton bar".

    Voici mon createPartControl :
    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
     
    @Override
    	public void createPartControl(Composite parent) {
     
    		container = new Composite( parent, SWT.NONE );
    		layout = new StackLayout();
    		container.setLayout(layout);
    		myWizard = new MyWizard(container){
    			@Override
    			public IWizardContainer getContainer() {
    				return Parametrages.this;
    			}
    		};
    		myWizard.addPages();
     
    		parent.addDisposeListener( new DisposeListener() {
     
    			public void widgetDisposed(DisposeEvent e) {
    				myWizard.dispose();
    			}
     
    		} );
     
     
           IWizardPage startingPage = myWizard.getStartingPage();
    		if (startingPage == null) {
    		} else {
    			startingPage.createControl(parent);
    			showPage(startingPage);
    		}
    		createButtonBar(container);
    	}
    Et mon createButtonBar :
    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
     
    protected Control createButtonBar(Composite parent) {
    		Composite composite = new Composite(parent, SWT.NONE);
    		// create a layout with spacing and margins appropriate for the font
    		// size.
    		GridLayout layout = new GridLayout();
    		layout.numColumns = 0; // this is incremented by createButton
    		layout.makeColumnsEqualWidth = true;
    		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
    		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
    		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
    		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
    		composite.setLayout(layout);
    		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END
    				| GridData.VERTICAL_ALIGN_CENTER);
    		composite.setLayoutData(data);
    		composite.setFont(parent.getFont());
     
    		// Add the buttons to the button bar.
    		createButtonsForButtonBar(composite);
    		return composite;
    	}
    Le problème c'est que la bar de boutons s'affiche juste en dessous de mes composants du wizard. Et quand je clique sur un bouton un tableau apparait mais ce dernier apparait en dessous de mes boutons et pas mal de composants se décalent. :s

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

Discussions similaires

  1. Changer la vue de source de données d'un cube
    Par phenomeno dans le forum SSAS
    Réponses: 1
    Dernier message: 30/10/2012, 15h40
  2. [RCP]Comment changer de vue avec mon plugin ?
    Par Cpt Anderson dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 15/12/2010, 12h43
  3. BIG HELP : changer de vue
    Par romeo9423 dans le forum MFC
    Réponses: 2
    Dernier message: 19/05/2007, 19h23
  4. changer de vue et de doc
    Par LesLemmings dans le forum MFC
    Réponses: 10
    Dernier message: 07/05/2007, 12h02
  5. SDI - changer de vue en cliquant sur un bouton
    Par Psykotik dans le forum MFC
    Réponses: 3
    Dernier message: 29/11/2005, 16h09

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