[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.technology.nebula] Re: select item in the gallery widget

Nicolas Richeton escribió:
Vicente Rico Guillén a écrit :

It doesn't work. I get a nullpointerexception..
-------------------------------------------------------------------------------


java.lang.NullPointerException
at org.eclipse.nebula.widgets.gallery.AbstractGridGroupRenderer.getVisibleItems(AbstractGridGroupRenderer.java:280)


at org.eclipse.nebula.widgets.gallery.NoGroupRenderer.draw(NoGroupRenderer.java:43)

at org.eclipse.nebula.widgets.gallery.Gallery._drawGroup(Gallery.java:1339)
at org.eclipse.nebula.widgets.gallery.Gallery.onPaint(Gallery.java:1183)
at org.eclipse.nebula.widgets.gallery.Gallery$2.paintControl(Gallery.java:586)


at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
--------------------------------------------------------------------------------



Please open a bug for this NPE



I show you the main code related to this:

------------------------------------------------
public void selectItemNumber(int number) { if (GlobalSettings.moviesList.size() > 0) {
moviesGallery.setFocus();
moviesGallery.setSelection( new GalleryItem[]{ moviesGallery.getItem( 0 ) } );

You get a NPE because you're trying to select a group, not an item

Replace by
moviesGallery.setSelection( new GalleryItem[]{ moviesGallery.getItem( 0 ).getItem(0) } );


It should work.

No, once more, it doesn't work. I'm sorry for make to you spend the time with me. For me it's important, because all in my app works fine except this problem.

The error :
java.lang.NullPointerException
at org.eclipse.nebula.widgets.gallery.AbstractGridGroupRenderer.getVisibleItems(AbstractGridGroupRenderer.java:280)
at org.eclipse.nebula.widgets.gallery.NoGroupRenderer.draw(NoGroupRenderer.java:43)
at org.eclipse.nebula.widgets.gallery.Gallery._drawGroup(Gallery.java:1339)
at org.eclipse.nebula.widgets.gallery.Gallery.onPaint(Gallery.java:1183)
at org.eclipse.nebula.widgets.gallery.Gallery$2.paintControl(Gallery.java:586)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
------------------------------------


I post all the class if case can catch another problem in another place in the code.


package org.VisualDivX.Components;

import java.util.LinkedList;
import java.util.TreeMap;
import java.util.Vector;

import org.VisualDivX.GUI;
import org.VisualDivX.GlobalSettings;
import org.apache.commons.lang.StringUtils;
import org.eclipse.nebula.widgets.gallery.DefaultGalleryItemRenderer;
import org.eclipse.nebula.widgets.gallery.Gallery;
import org.eclipse.nebula.widgets.gallery.GalleryItem;
import org.eclipse.nebula.widgets.gallery.NoGroupRenderer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;

public class MoviesListCovers {
	private Composite composite;
	public static Gallery moviesGallery;
	final Font font3 = new Font(GUI.display, "Arial", 7, SWT.NORMAL);
	private GUI gui;
	private TreeMap<String, Image> imgCache;
	private String baseDirForImages;
	private NoGroupRenderer gr;
	private LinkedList<Image> listaImagenes;
	private MovieCardComponent secundaryControl;

public MoviesListCovers(GUI gui, Composite composite, MovieCardComponent secundaryControl) {
this.gui = gui;
this.composite = composite;
this.secundaryControl=secundaryControl;
listaImagenes=new LinkedList<Image>();
}


	public void init() {
		createMoviesGallery();
		initListeners();
		refresh();
	}
	
	public void dispose(){
		for (int a=0;a<listaImagenes.size();a++){
			listaImagenes.get(a).dispose();
		}
	}	

private void createMoviesGallery() {
moviesGallery = new Gallery(composite, SWT.V_SCROLL | SWT.BORDER
| SWT.VIRTUAL);
//moviesGallery.setBackground(GUI.display.getSystemColor(SWT.COLOR_BLACK));
gr = new NoGroupRenderer();
gr.setItemSize(90,120);
// gr.setItemSize(140, 170);


		gr.setMinMargin(0);

		DefaultGalleryItemRenderer ir = new DefaultGalleryItemRenderer();
		// ir.setDropShadows(true);
		// ir.setDropShadowsSize(5);
		moviesGallery.setGroupRenderer(gr);
		moviesGallery.setItemRenderer(ir);
		moviesGallery.setVirtualGroups(true);
		moviesGallery.setLayoutData(new GridData(GridData.FILL_BOTH));
		moviesGallery.setFont(font3);
		switch (GlobalSettings.qualityCoversWanted) {
		case LOW:
			moviesGallery.setAntialias(SWT.OFF);
			moviesGallery.setInterpolation(SWT.OFF);
			baseDirForImages = GlobalSettings.DATABASE_IN_USE_MINI_IMAGES_DIR
					+ GlobalSettings.PATH_SEPARATOR;
			break;
		case MEDIUM:
			//moviesGallery.setAntialias(SWT.ON);
			//moviesGallery.setInterpolation(SWT.ON);
			baseDirForImages = GlobalSettings.DATABASE_IN_USE_MINI_IMAGES_DIR
					+ GlobalSettings.PATH_SEPARATOR;
			break;
		case HIGH:
			baseDirForImages = GlobalSettings.DATABASE_IN_USE_IMAGES_DIR
					+ GlobalSettings.PATH_SEPARATOR;
			break;
		}
		moviesGallery.setLowQualityOnUserAction(true);
	}
	
	public void initListeners() {


moviesGallery.addListener(SWT.SetData, new Listener() {


public void handleEvent(Event event) {
if (GlobalSettings.moviesList.size()==0) return;
GalleryItem item = (GalleryItem) event.item;
int index;
index = moviesGallery.indexOf(item);
Long movieID= GlobalSettings.moviesList.get(index);
String caratula = getCover(index);
if (StringUtils.isBlank(caratula)) {
caratula = "noCover.jpg";
}
//item.setImage(ImageManager.getImageFromFile(baseDirForImages + caratula));
item.setImage(new Image(GUI.display,baseDirForImages+caratula));
listaImagenes.add(item.getImage());
item.setData(movieID);
item.setItemCount(GlobalSettings.moviesList.size());
}
});

/*moviesGallery.addListener(SWT.Resize, new Listener() {
public void handleEvent(Event event) {
int alfa = moviesGallery.getClientArea().width;
int beta = moviesGallery.getClientArea().height;
gr.setItemSize(alfa
/ GlobalSettings.listViewCovers_Horizontal_Covers, beta
/ GlobalSettings.listViewCovers_Vertical_Covers);
}
});*/

moviesGallery.addListener(SWT.MenuDetect, new Listener() {
public void handleEvent(Event event) {
Menu menu = gui.getPopUpMenu().init();
menu.setLocation(event.x, event.y);
menu.setVisible(true);
while (!menu.isDisposed() && menu.isVisible()) {
if (!GUI.display.readAndDispatch())
GUI.display.sleep();
}
menu.dispose();
}
});

moviesGallery.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
if (getSelectedMovies().size() == 0)
return;
Long alfa = (Long) getSelectedMovies().get(0);
long number = alfa.longValue();
gui.getDataBase().loadMovieObjectIntoMemory(number);
if (secundaryControl!=null) {
secundaryControl.fillData();
}else{
}
}
});



		
		/*moviesGallery.addListener(SWT.PaintItem, new Listener() {

			public void handleEvent(Event e) {
				GalleryItem item = (GalleryItem) e.item;
				Long data=(Long) item.getData();
				String alfa = gui.getDataBase().getMovieObjectByIndex(data).getCover();
				e.gc.setBackground(GUI.display.getSystemColor(
						SWT.COLOR_GRAY));
				e.gc.fillRectangle(e.x, e.y, e.width, e.height);
				Image imagen=new Image(GUI.display,baseDirForImages+alfa);
				e.gc.drawImage(imagen,e.x,e.y);
				imagen.dispose();
				}

		});*/


} public Vector<Long> getSelectedMovies() { Vector<Long> items = new Vector<Long>(); GalleryItem[] selection = moviesGallery.getSelection(); for (int i = 0; i < selection.length; i++) { if (selection[i].getData() != null) items.add((Long) selection[i].getData()); selection[i].getText(); } return items; }

	private String getCover(int index) {
		long id = GlobalSettings.moviesList.get(index);
		String alfa = gui.getDataBase().getMovieObjectByIndex(id).getCover();
		if (StringUtils.isBlank(alfa)) alfa="noCover.jpg";
		return alfa;
	}

	public Image getImageInCache(String image) {
		if (imgCache == null)
			return null;
		if (imgCache.containsKey(image)) {
			return imgCache.get(image);
		} else {
			return null;
		}
	}


public void refresh() { GalleryItem[] items = moviesGallery.getItems(); for(int i=0; items != null && i < items.length; i++) { if(items[i].getImage() != null) items[i].getImage().dispose(); } moviesGallery.clearAll(); moviesGallery.setItemCount(1); }

	public Gallery getMoviesGallery() {
		return moviesGallery;
	}

public void selectItemNumber(int number) {
if (GlobalSettings.moviesList.size() > 0) {
moviesGallery.setFocus();
moviesGallery.setSelection( new GalleryItem[]{ moviesGallery.getItem(0).getItem(0) } );
moviesGallery.notifyListeners(SWT.Selection, new Event());
return;
} else {
return;
}
}


	
	
	

}