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

com.l2fprod.common.demo.PropertySheetPage3 Maven / Gradle / Ivy

There is a newer version: 1.3.0
Show newest version
/*
 * Copyright 2015 Matthew Aguirre
 * 
 * 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.l2fprod.common.demo;

import com.l2fprod.common.propertysheet.DefaultProperty;
import com.l2fprod.common.propertysheet.Property;
import com.l2fprod.common.propertysheet.PropertySheet;
import com.l2fprod.common.propertysheet.PropertySheetPanel;
import com.l2fprod.common.swing.LookAndFeelTweaks;
import com.l2fprod.common.util.ResourceManager;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class PropertySheetPage3 extends JPanel {

    private static final Class THIS_CLASS = PropertySheetPage3.class;
    static ResourceManager RESOURCE = ResourceManager.get(THIS_CLASS);

    @SuppressWarnings("OverridableMethodCallInConstructor")
    public PropertySheetPage3() {
        setLayout(LookAndFeelTweaks.createVerticalPercentLayout());

        JTextArea message = new JTextArea();
        message.setText(PropertySheetMain.RESOURCE.getString("Main.sheet1.message"));
        LookAndFeelTweaks.makeMultilineLabel(message);
        add(message);

        final Colorful data = new Colorful();
        data.setColor(new Color(255, 153, 102));

        DefaultProperty level0 = new NoReadWriteProperty();
        level0.setDisplayName("Level 0");
        level0.setCategory("A category");
        DefaultProperty level1 = new NoReadWriteProperty();
        level1.setDisplayName("Level 1");
        level1.setCategory("Another category");
        level0.addSubProperty(level1);
        DefaultProperty level2 = new NoReadWriteProperty();
        level2.setDisplayName("Level 2");
        level1.addSubProperty(level2);
        DefaultProperty level21 = new NoReadWriteProperty();
        level21.setDisplayName("Level 3");
        level1.addSubProperty(level21);

        DefaultProperty level211 = new NoReadWriteProperty();
        level211.setDisplayName("Level 3.1");
        level21.addSubProperty(level211);

        DefaultProperty root = new NoReadWriteProperty();
        root.setDisplayName("Root");

        final PropertySheetPanel sheet = new PropertySheetPanel();
        sheet.setMode(PropertySheet.VIEW_AS_FLAT_LIST);
        sheet.setProperties(new Property[]{new ColorProperty(), level0, root});
        sheet.readFromObject(data);
        sheet.setDescriptionVisible(true);
        sheet.setSortingCategories(true);
        sheet.setSortingProperties(true);
        add(sheet, "*");

        // everytime a property change, update the button with it
        PropertyChangeListener listener = new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                Property prop = (Property) evt.getSource();
                prop.writeToObject(data);
                System.out.println("Updated object to " + data);
            }
        };
        sheet.addPropertySheetChangeListener(listener);

        JButton button = new JButton(new AbstractAction("Click to setWantsExtraIndent(true)") {
            @Override
            public void actionPerformed(ActionEvent e) {
                sheet.getTable().setWantsExtraIndent(!sheet.getTable().getWantsExtraIndent());
                putValue(NAME, "Click to setWantsExtraIndent(" + !sheet.getTable().getWantsExtraIndent() + ")");
            }
        });
        add(button);
    }

    static class NoReadWriteProperty extends DefaultProperty {

        @Override
        public void readFromObject(Object object) {
        }

        @Override
        public void writeToObject(Object object) {
        }
    }

    public static class Colorful {

        private Color color;

        public Color getColor() {
            return color;
        }

        public void setColor(Color color) {
            this.color = color;
        }

        public int getRed() {
            return color.getRed();
        }

        public void setRed(int red) {
            color = new Color(red, getGreen(), getBlue());
        }

        public int getGreen() {
            return color.getGreen();
        }

        public void setGreen(int green) {
            color = new Color(getRed(), green, getBlue());
        }

        public int getBlue() {
            return color.getBlue();
        }

        public void setBlue(int blue) {
            color = new Color(getRed(), getGreen(), blue);
        }

        @Override
        public String toString() {
            return color.toString();
        }
    }

    public static class ColorProperty extends DefaultProperty {

        @SuppressWarnings("OverridableMethodCallInConstructor")
        public ColorProperty() {
            setName("color");
            setCategory(RESOURCE.getString("color.cat"));
            setDisplayName(RESOURCE.getString("color.name"));
            setShortDescription(RESOURCE.getString("color.desc"));
            setType(Color.class);

            addSubProperty(new ColorComponentProperty("red"));
            addSubProperty(new ColorComponentProperty("green"));
            addSubProperty(new ColorComponentProperty("blue"));
        }
    }

    public static class ColorComponentProperty extends DefaultProperty {

        @SuppressWarnings("OverridableMethodCallInConstructor")
        public ColorComponentProperty(String name) {
            setName(name);
            setDisplayName(RESOURCE.getString(name + ".name"));
            setShortDescription(RESOURCE.getString(name + ".desc"));
            setType(int.class);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy