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

BIRT Discussion :

[2.3] Action sur double-click sur une série


Sujet :

BIRT

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut [2.3] Action sur double-click sur une série
    Bonjour à tous,

    J'ai intégré un graphique BIRT dans une application CRM (Eclipse 3.4 + Birt 2.3.0).
    Je me suis inspiré fortement de la vue "Chart Examples".
    J'aimerai maintenant pouvoir exécuter du code java en double-cliquant sur une série.
    Étonnamment, j'arrivais à le faire sous Eclipse 3.3 et Birt 2.2 en implémentant ICallBackNotifier mais mon code ne fonctionne plus.
    Y a-t-il une nouvelle méthode pour faire ceci ?

    Pour être plus clair, voici ma classe de rendu :
    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
     
    public class ChartRenderer implements PaintListener, ControlListener{
    	private Canvas canvas = null;
    	private Chart cm = null;
    	private boolean bIsPainting = false;
    	private Image buffer;
    	private static int X_OFFSET = 3;
    	private static int Y_OFFSET = 3;
    	private GeneratedChartState state;
     
    	public ChartRenderer() {
    	}
     
    	public ChartRenderer(Canvas canvas) {
    		this.canvas = canvas;
    		canvas.addPaintListener(this);
    		canvas.addControlListener(this);
    	}
     
    	public void renderModel(Chart cm) {
    		this.cm = cm;
     
    		if (canvas != null && !canvas.isDisposed()) {
    			updateBuffer();
    			canvas.redraw();
    		}
    	}
     
    	private void updateBuffer() {
    		if (bIsPainting) {
    			return;
    		}
    		Throwable paintError = null;
     
    		Rectangle re = canvas.getClientArea();
    		final Rectangle adjustedRe = new Rectangle(0, 0, re.width, re.height);
     
    		if (adjustedRe.width - 2 * X_OFFSET <= 0
    				|| adjustedRe.height - 2 * Y_OFFSET <= 0) {
    			if (buffer != null && !buffer.isDisposed()) {
    				buffer.dispose();
    				buffer = null;
    			}
    			return;
    		}
     
    		if (cm == null) {
    			buffer = null;
    		} else {
    			bIsPainting = true;
    			Image oldBuffer = null;
    			if (buffer == null) {
    				buffer = new Image(Display.getDefault(), adjustedRe);
    			} else {
    				Rectangle ore = buffer.getBounds();
     
    				oldBuffer = buffer;
     
    				if (!adjustedRe.equals(ore)) {
    					buffer = new Image(Display.getDefault(), adjustedRe);
    				}
    			}
     
    			GC gc = new GC(buffer);
     
    			// fill default background as white.
    			gc.setForeground(Display.getDefault().getSystemColor(
    					SWT.COLOR_WHITE));
    			gc.fillRectangle(buffer.getBounds());
     
    			final Bounds bo = BoundsImpl.create(X_OFFSET, Y_OFFSET,
    					adjustedRe.width - 2 * X_OFFSET, adjustedRe.height - 2
    							* Y_OFFSET);
     
    			IDeviceRenderer deviceRenderer = null;
    			try {
    				deviceRenderer = PluginSettings.instance().getDevice("dv.SWT");
    				deviceRenderer.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, gc);
    				bo.scale(72d / deviceRenderer.getDisplayServer().getDpiResolution());
     
    				// GENERATE AND RENDER THE CHART
    				final Generator gr = Generator.instance();
    				RunTimeContext rtc = new RunTimeContext();
     
    				state = gr.build(deviceRenderer
    						.getDisplayServer(), cm, bo, null, rtc, null);
    				gr.render(deviceRenderer, state);
    			} catch (Exception ex) {
    				paintError = ex;
    			} finally {
    				gc.dispose();
    				if (deviceRenderer != null) {
    					deviceRenderer.dispose();
    				}
    			}
     
    			if (paintError != null) {
    				buffer = oldBuffer;
    			}
    			if (oldBuffer != null && oldBuffer != buffer) {
    				oldBuffer.dispose();
    			}
    			bIsPainting = false;
    		}
     
    	}
     
    	public void paintControl(PaintEvent pe) {
    		GC gc = pe.gc;
    		if (buffer != null) {
    			gc.drawImage(buffer, 0, 0);
    		}
    	}
     
    	public void setCanvas(Canvas paintCanvas) {
    		this.canvas = paintCanvas;
    	}
     
    	public void controlMoved(ControlEvent e) {
    	}
     
    	public void controlResized(ControlEvent e) {
    		if (canvas != null && !canvas.isDisposed()) {
    			updateBuffer();
    			canvas.redraw();
    		}
    	}
    }

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut
    Pour pouvoir faire fonctionner mes anciens codes, j'ai désinstallé BIRT 2.3 pour installer la version 2.2.2.
    Évidemment, mes graphiques fonctionnent ainsi que les callbacks.
    Je reste bien sûr à l'écoute pour savoir quelles sont les modifications apportées à BIRT 2.3 pour obtenir le même résultat.

Discussions similaires

  1. Click sur Label / Click sur commandbutton
    Par Glherbier dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/02/2011, 11h10
  2. Réponses: 5
    Dernier message: 20/05/2010, 13h15
  3. Double click sur la ligne d'une listbox
    Par lince102 dans le forum Interfaces Graphiques
    Réponses: 13
    Dernier message: 24/01/2008, 14h11
  4. Réponses: 2
    Dernier message: 18/01/2007, 17h14
  5. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 10h45

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