/* * Copyright 2011 Uwe Krueger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.mandelsoft.mand.tool; import com.mandelsoft.mand.MandelName; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JDialog; import javax.swing.event.TreeModelEvent; import com.mandelsoft.mand.image.MandelImage; import com.mandelsoft.mand.util.CachedUpstreamColormapSourceFactory; import com.mandelsoft.mand.util.MandelList; import com.mandelsoft.mand.util.MandelListFolder; import com.mandelsoft.swing.AbstractTreeModelListener; /** * * @author Uwe Krueger */ public class MandelListGaleryDialog extends MandelDialog { private MandelListProxyListModelForTable pmodel; private AbstractMandelListListModel model; private Listener listener; private MandelListFolderTreeModel fmodel; private MandelListFolder folder; private FListener flistener; private MandelListGaleryPanel galery; public MandelListGaleryDialog(MandelWindowAccess owner, MandelListFolderTreeModel fmodel, MandelListFolder f) { this(owner,fmodel.getMandelListModel(f),f.getPath()); this.fmodel=fmodel; this.folder=f; flistener=new FListener(); fmodel.addTreeModelListener(flistener); } public MandelListGaleryDialog(MandelWindowAccess owner, MandelListTableModel tmodel, String name) { this(owner,new MandelListProxyListModelForTable(tmodel),name); pmodel=(MandelListProxyListModelForTable)model; // remember local wrapper pmodel.setModifiable(!owner.getEnvironment().isReadonly()); } public MandelListGaleryDialog(MandelWindowAccess owner, MandelList tmplist, String name) { this(owner,new DefaultMandelListListModel(tmplist, owner.getEnvironment().getImageDataScanner()),name); } public MandelListGaleryDialog(MandelWindowAccess owner, AbstractMandelListListModel lmodel, String name) { super(owner,name); model=lmodel; MandelImage.Factory factory=new MandelImage.Factory(owner.getColormapModel()); model.setFactory(factory); MandelImagePanel mp=owner.getMandelImagePane(); if (mp!=null && mp.getParentColormapModel().isSet()) { model.setColormapSourceFactory( new CachedUpstreamColormapSourceFactory(model.getMandelScanner(), mp.getColormapModel(), owner.getEnvironment().getColormapCache())); System.out.println("-> galery with upstream colormap"); } else { System.out.println("-> galery with main colormap"); } galery=new MandelListGaleryPanel(model); if (owner.getMandelImagePane()!=null) { galery.setMaxFrame(owner.getMandelImagePane().getMaxFrame()); } add(galery); pack(); Dimension d=Toolkit.getDefaultToolkit().getScreenSize(); int w=this.getWidth(); int h=this.getHeight(); if (w>d.getWidth()-20) { w=(int)d.getWidth()-20; h=h+30; } else { if (w<100) w=100; else w+=30; } if (h>d.getHeight()-20) { h=(int)d.getHeight()-20; } else { if (h<100) h=100; else h+=30; } this.setSize(w, h); this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); this.setResizable(true); this.setVisible(true); owner.getEnvironment().addEnvironmentListener(listener=new Listener()); owner.getEnvironment().getMandelListFolderTreeModel().addMandelListFolderTreeModelListener( listener); } @Override public void dispose() { System.out.println("close galery"); if (pmodel!=null) pmodel.setModel(null); // cleanup local wrapper model getEnvironment().getMandelListFolderTreeModel().removeMandelListFolderTreeModelListener( listener); getEnvironment().removeEnvironmentListener(listener); if (fmodel!=null) fmodel.removeTreeModelListener(flistener); super.dispose(); } private class Listener extends ToolEnvironment.ListenerAdapter implements MandelListFolderTreeModelListener { @Override public void mandelListDeleted(MandelList list) { if (list==model.getList()) { dispose(); } } public void foldersDeleted(TreeModelEvent e) { Object[] children=e.getChildren(); if (children==null) { handle((MandelListFolder)e.getTreePath().getLastPathComponent()); } else { for (Object o:children) { handle((MandelListFolder)o); } } } protected void handle(MandelListFolder f) { if (model!=null&&model.getList()!=null) { if (f!=null&&f.containsTransitively(model.getList())) { dispose(); } } } } private class FListener extends AbstractTreeModelListener { @Override public void treeNodesChanged(TreeModelEvent e) { if (MandelListFolderListModel.getParentPath(e, MandelListFolderTreeModelSupport.getPathToRoot(folder))!=null) { setTitle(folder.getPath()); } } } ///////////////////////////////////////////////////////////// public void setRootName(MandelName rootName) { galery.setRootName(rootName); } public MandelName getRootName() { return galery.getRootName(); } }