Package simtools.ui

Source Code of simtools.ui.DefaultPageListModel$DefaultPageModel

package simtools.ui;

import java.util.ArrayList;
import java.util.List;

import javax.swing.Icon;
import javax.swing.JComponent;

import simtools.util.ListenerManager;

/**
*
* The default implementation of PageListModel.
* This model is used by stackPanel to aggregate the components contained in its stack
* @author zxpletran007
*
*/
public class DefaultPageListModel implements PageListModel{

    /** List of pages */
    protected List pages;

    /**  Current selected page */
    protected PageModel selectedPage;
   
    /** Page list model listeners. */
    protected ListenerManager listeners;
   
   
    public DefaultPageListModel(){
      
        pages = new ArrayList();         // Create an empty list
        listeners = new ListenerManager();
        selectedPage = null;
    }
   
   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#addPageAt(simtools.ui.PageListModel.PageModel, int)
     */
    public void addPageAt(PageModel page, int index) {
        checkIndex(index);
        pages.add(index, page);
        fireContentsChanged();
    }
   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#addPage(simtools.ui.PageListModel.PageModel)
     */
    public void addPage(PageModel page) {
        boolean listHasChanged = pages.add(page);

        if (listHasChanged){
            fireContentsChanged();
        }
    }
   
    public void addPage(String pageTitle, Icon pageIcon, JComponent pageContent) {
        addPage(new DefaultPageModel(pageTitle, pageIcon, pageContent));   
    }
   
    public void addPage(String pageTitle, JComponent pageContent) {
        addPage(pageTitle, null, pageContent);   
    }

   
    /**
     * Assert that the given index is a valid index (0 to size of list -1)
     * @param index
     */
    private void checkIndex(int index) {
        if (index < 0 || index >= pages.size()) {
            throw new IndexOutOfBoundsException("Index: "+index+", Tab count: " + pages.size());
        }
    }

    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#deletePage(simtools.ui.PageListModel.PageModel)
     */
    public void deletePage(PageModel page) {
        boolean listHasChanged = pages.remove(page);

        if (listHasChanged){
            fireContentsChanged();
        }
    }


    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#getPageAt(int)
     */
    public PageModel getPageAt(int index) {
        checkIndex(index);
        return (PageModel)pages.get(index);
    }

  
    /**
     * get the page whose title is equal to given String
     * @param pageTitle
     * @return the page corresponding to the given title or null is no page matches.
     */
    public PageModel getPageFromTitle(String pageTitle) {
        PageModel res = null;
        for(int i = 0; i < getSize() && res == null; i++) {
            PageModel c = (PageModel)pages.get(i);
            if ((c != null && c.getPageTitle().equals(pageTitle))) {
                res = c;
            }
        }
        return res;
    }
   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#getSelectedPage()
     */
    public PageModel getSelectedPage() {
        return selectedPage;
    }
   
   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#getSelectedIndex()
     */
    public int getSelectedIndex(){
        return indexOfPage(selectedPage);
    }
   
    private int indexOfPage(PageModel page) {
        for(int i = 0; i < getSize(); i++) {
            PageModel c = (PageModel)pages.get(i);
            if ((c != null && c.equals(page)) || (c == null && c == page)) {
                return i;
            }
        }
        return -1;
    }
   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#getSize()
     */
    public int getSize() {
        return pages.size();
    }

   
    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#setSelectedPage(simtools.ui.PageListModel.PageModel)
     */
    public void setSelectedPage(PageModel aPage) {

        PageModel oldSelectedPage = selectedPage;
        if (aPage == null || indexOfPage(aPage)==-1) {
            selectedPage = null;

        } else {
            selectedPage = aPage;
        }

        if (oldSelectedPage != selectedPage){
            fireSelectionHasChanged();   
        }
    }

    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#setSelectedPage(java.lang.String)
     */
    public void setSelectedPage(String pageTitle){
        setSelectedPage(getPageFromTitle(pageTitle));
    }
   
    // Listeners related functions. Take care of duplicates
    public void addListener(PageListListener dsl) {
        listeners.add(dsl);
    }

    /* (non-Javadoc)
     * @see simtools.ui.PageListModel#removeListener(simtools.ui.PageListModel.PageListListener)
     */
    public void removeListener(PageListListener dsl) {
        listeners.remove(dsl);
    }

    private void fireContentsChanged(){
        int n = listeners.size(); // only one call outside loop
        for (int i = 0; i < n; ++i) {
            PageListListener pll = (PageListListener) listeners.get(i);
            if (pll != null) {
                pll.contentHasChanged();
            }
        }
    }
   
    private void fireSelectionHasChanged(){
        int n = listeners.size(); // only one call outside loop
        for (int i = 0; i < n; ++i) {
            PageListListener pll = (PageListListener) listeners.get(i);
            if (pll != null) {
                pll.selectionHasChanged();
            }
        }
    }

   
    /**
     * @author zxpletran007
     *
     */
    public static class DefaultPageModel implements PageModel{

        String pageTitle;
        Icon pageIcon;
        JComponent pageContent;
       
        public DefaultPageModel(String pageTitle, Icon pageIcon, JComponent pageContent) {
            super();
            this.pageTitle = pageTitle;
            this.pageIcon = pageIcon;
            this.pageContent = pageContent;
        }
       
        public DefaultPageModel(String pageTitle, JComponent pageContent) {
           this(pageTitle, null, pageContent);
        }

       
        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#getPageContent()
         */
        public JComponent getPageContent() {
            return pageContent;
        }

        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#getPageIcon()
         */
        public Icon getPageIcon() {
            return pageIcon;
        }

        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#getPageTitle()
         */
        public String getPageTitle() {
            return pageTitle;
        }

        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#setPageContent(javax.swing.JComponent)
         */
        public void setPageContent(JComponent pageContent) {
            this.pageContent = pageContent;
        }

        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#setPageIcon(javax.swing.Icon)
         */
        public void setPageIcon(Icon pageIcon) {
            this.pageIcon = pageIcon;     
        }

        /* (non-Javadoc)
         * @see simtools.ui.PageListModel.PageModel#setPageTitle(java.lang.String)
         */
        public void setPageTitle(String pageTitle) {
            this.pageTitle = pageTitle;
        }
    }
}
TOP

Related Classes of simtools.ui.DefaultPageListModel$DefaultPageModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.