All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bibliothek.notes.view.menu.PanelList Maven / Gradle / Ivy

package bibliothek.notes.view.menu;

import java.util.HashMap;
import java.util.Map;

import javax.swing.JMenu;

import bibliothek.gui.DockController;
import bibliothek.gui.DockFrontend;
import bibliothek.gui.Dockable;
import bibliothek.gui.dock.event.DockRegisterAdapter;
import bibliothek.notes.model.Note;
import bibliothek.notes.model.NoteModel;
import bibliothek.notes.model.NoteModelListener;
import bibliothek.notes.view.ViewManager;
import bibliothek.notes.view.panels.ListView;
import bibliothek.notes.view.panels.NoteView;

/**
 * A menu showing selectable items for each {@link Dockable} of this application.
 * The menu is divided in a part of always available {@link Dockable}s like
 * the {@link ListView}, and changing Dockables like the
 * {@link NoteView}s.
 * @author Benjamin Sigg
 */
public class PanelList extends JMenu implements NoteModelListener{
    /** the manager of all {@link Dockable}s */
	private ViewManager manager;
	
	/** The {@link Note}s and their item in this menu */
	private Map notes = new HashMap();
	/** The item for the {@link ListView} */
	private DockableItem listItem;
	
	/**
	 * Creates a new menu.
	 * @param manager the manager of all {@link Dockable}s
	 * @param model the set of {@link Note}s in this application
	 */
	public PanelList( ViewManager manager, NoteModel model ){
		this.manager = manager;
		DockFrontend frontend = manager.getFrontend();
		
		setText( "Panels" );
		
		listItem = new DockableItem( frontend, manager.getList() );
		add( listItem );
		
		model.addNoteModelListener( this );
		
		frontend.getController().getRegister().addDockRegisterListener( new DockRegisterAdapter(){
			@Override
			public void dockableRegistered( DockController controller, Dockable dockable ){
				setSilent( dockable, true );
			}
			
			@Override
			public void dockableUnregistered( DockController controller, Dockable dockable ){
				setSilent( dockable, false );
			}
		});
	}
	
	/**
	 * Silently changes the state of the item that represents the
	 * visibility-state of dockable to the new state.
	 * @param dockable the element whose visibility-state has changed
	 * @param state the new visibility-state
	 */
	private void setSilent( Dockable dockable, boolean state ){
		if( dockable == manager.getList() )
			listItem.setSilent( state );
		else if( dockable instanceof NoteView ){
			NoteItem item = notes.get( ((NoteView)dockable).getNote() );
			if( item != null )
				item.setSilent( state );
		}
	}
	
	public void noteAdded( NoteModel model, Note note ){
		if( notes.isEmpty() )
			addSeparator();
			
		NoteItem item = new NoteItem( manager.getNotes(), note );
		notes.put( note, item );
		add( item );
	}
	
	public void noteRemoved( NoteModel model, Note note ){
		NoteItem item = notes.remove( note );
		remove( item );
		if( notes.isEmpty() )
			remove( 1 );
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy