Package com.salas.bb.remixfeeds.editor

Source Code of com.salas.bb.remixfeeds.editor.PostEditor

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2006 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: PostEditor.java,v 1.39 2007/02/21 16:58:29 spyromus Exp $
//

package com.salas.bb.remixfeeds.editor;

import com.jgoodies.binding.adapter.ComboBoxAdapter;
import com.jgoodies.binding.beans.PropertyAdapter;
import com.jgoodies.binding.list.ArrayListModel;
import com.salas.bb.remixfeeds.prefs.TargetBlog;
import com.salas.bb.utils.i18n.Strings;
import com.salas.bb.utils.uif.BBFormBuilder;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;

/** Post editor. */
public class PostEditor extends AbstractPostEditor
{
    private JComboBox cbCategories;

    private ArrayListModel categories;
    private TargetBlog.Category category;
    private TargetBlog targetBlog;

    private JLabel lbCategories;

    /**
     * Creates post editor.
     *
     * @param frame main frame.
     * @param richText <code>TRUE</code> to show rich text editor.
     */
    public PostEditor(Frame frame, boolean richText)
    {
        super(frame, richText);

        categories = new ArrayListModel();

        lbCategories = new JLabel(Strings.message("ptb.category"));
    }

    /**
     * Enables / disables all controls during posting.
     *
     * @param en <code>TRUE</code> to enable.
     */
    protected void enableControls(boolean en)
    {
        super.enableControls(en);

        lbCategories.setEnabled(en);
        cbCategories.setEnabled(en);
    }

    // ----------------------------------------------------------------------------------
    // Initial properties
    // ----------------------------------------------------------------------------------

    /**
     * Sets the target blog.
     *
     * @param targetBlog   the target blog.
     */
    public void setTargetBlog(TargetBlog targetBlog)
    {
        this.targetBlog = targetBlog;

        // Initialize the arrays
        cbCategories = new JComboBox();
        categories = new ArrayListModel();
        category = targetBlog.getDefaultCategory();

        initCategories(targetBlog, targetBlog.getDefaultCategory());
        PropertyAdapter adapter = new PropertyAdapter(this, "category", true);
        cbCategories = new JComboBox(new ComboBoxAdapter((ListModel)categories, adapter));
        setDraft(targetBlog.isDraft());

        updateTitle(new TargetBlog[] { targetBlog });
    }

    /**
     * Initializes the list of categories for a given blog. If the categories aren't
     * available, loads them and then selects the given default.
     *
     * @param blog      blog to initialize.
     * @param cat       category to select.
     */
    private void initCategories(final TargetBlog blog, final TargetBlog.Category cat)
    {
        // If there are no categories in the blog object yet, let it be the default category.
        // We'll start loading them right away.
        TargetBlog.Category[] cats = blog.getCategories();
        boolean noCategories = cats.length == 0;
        if (noCategories) cats = new TargetBlog.Category[] { cat };

        // Populate the list of categories with defaults
        ArrayListModel categories = this.categories;
        if (categories == null)
        {
            categories = new ArrayListModel();
            this.categories = categories;
        }
        categories.clear();
        categories.addAll(Arrays.asList(cats));

        // Select the category
        setCategory(cat);

        if (noCategories)
        {
            // Load categories for this blog
            blog.loadCategories(new Runnable()
            {
                public void run()
                {
                    initCategories(blog, category);
                }
            });
        }
    }

    /**
     * Sets the category for a given blog.
     *
     * @param cat   category.
     */
    public void setCategory(TargetBlog.Category cat)
    {
        cat = findEqualCategory(categories, cat);

        // Set and fire
        TargetBlog.Category old = category;
        category = cat;
        firePropertyChange("category", old, cat);
    }

    /**
     * Returns the selected category.
     *
     * @return category.
     */
    public TargetBlog.Category getCategory()
    {
        return category;
    }


    /**
     * The hook to add custom control elements to the toolbar.
     *
     * @param builder builder.
     */
    protected void addCustomControls(BBFormBuilder builder)
    {
        BBFormBuilder b = new BBFormBuilder("p, 2dlu, p, 4dlu, p");
        b.append(lbCategories, cbCategories);
        b.append(chDraft);

        builder.append(b.getPanel());
    }

    // ------------------------------------------------------------------------
    // Implementations
    // ------------------------------------------------------------------------

    /**
     * Returns the list of categories selected for the given blog.
     *
     * @param blogIndex index of blog in list.
     *
     * @return categories.
     */
    protected java.util.List<TargetBlog.Category> getCategoriesForBlog(int blogIndex)
    {
        java.util.List<TargetBlog.Category> l = new ArrayList<TargetBlog.Category>();
        l.add(category);
        return l;
    }

    /**
     * Returns a blog at a given index.
     *
     * @param i index.
     *
     * @return blog.
     */
    protected TargetBlog getBlogAt(int i)
    {
        return targetBlog;
    }
}
TOP

Related Classes of com.salas.bb.remixfeeds.editor.PostEditor

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.