Package org.jnode.apps.jpartition.swingview

Source Code of org.jnode.apps.jpartition.swingview.PartitionView$IdleState

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library 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 Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.apps.jpartition.swingview;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.Action;
import javax.swing.BorderFactory;

import org.jnode.apps.jpartition.Context;
import org.jnode.apps.jpartition.model.Partition;
import org.jnode.apps.jpartition.model.UserFacade;
import org.jnode.apps.jpartition.swingview.actions.AddPartitionAction;
import org.jnode.apps.jpartition.swingview.actions.FormatPartitionAction;
import org.jnode.apps.jpartition.swingview.actions.RemovePartitionAction;
import org.jnode.util.NumberUtils;

public class PartitionView extends DiskAreaView<Partition> {
    private static final long serialVersionUID = 1L;

    private final DeviceView deviceView;

    private PartitionState state = new IdleState();

    public PartitionView(Context context, DeviceView deviceView, Partition partition) {
        super(context);
        this.deviceView = deviceView;
        this.bounded = partition;
        update();

        if (partition.isUsed()) {
            addMouseMotionListener(new MouseAdapter() {
                @Override
                public void mouseMoved(MouseEvent e) {
                    int cursor = Cursor.DEFAULT_CURSOR;
                    state = new IdleState();

                    /*
                     if(e.getX() < borderWidth) {
                         cursor = Cursor.W_RESIZE_CURSOR;
                     } else
                     */
                    if (e.getX() >= (getWidth() - borderWidth)) {
                        cursor = Cursor.W_RESIZE_CURSOR;
                        state = new ResizeState();
                    }
                    // else
                    // {
                    // cursor = Cursor.MOVE_CURSOR;
                    // }
                    setCursor(Cursor.getPredefinedCursor(cursor));
                }

                @Override
                public void mouseDragged(MouseEvent e) {
                    state.mouseDragged(PartitionView.this, e);
                }
            });
        }
    }

    protected Color getColor(Partition partition) {
        Color color = Constants.UNALLOCATED;
        if ((partition != null) && partition.isUsed()) {
            if ("JFAT".equals(partition.getFormat())) {
                color = Constants.FAT32;
            } else if ("FAT".equals(partition.getFormat())) {
                color = Constants.FAT16;
            } else if ("EXT2".equals(partition.getFormat())) {
                color = Constants.EXT2;
            } else if ("NTFS".equals(partition.getFormat())) {
                color = Constants.NTFS;
            }
        }

        return color;
    }

    public void update() {
        super.update();

        if (bounded != null) {
            setInfos(bounded.getFormat() + " " + NumberUtils.toBinaryByte(bounded.getSize()));

            Color color = getColor(bounded);
            setBackground(color);

            if (!bounded.isUsed()) {
                setBorder(BorderFactory.createEmptyBorder());
            }
        }
    }

    public final Partition getPartition() {
        return bounded;
    }

    @Override
    protected Action[] getActions() {
        Action[] actions;
        if (bounded.isUsed()) {
            actions =
                    new Action[] {new FormatPartitionAction(context.getErrorReporter(), this),
                        new RemovePartitionAction(context.getErrorReporter(), this), };
        } else {
            actions = new Action[] {new AddPartitionAction(context.getErrorReporter(), this), };
        }
        return actions;
    }

    public DeviceView getDeviceView() {
        return deviceView;
    }

    private abstract static class PartitionState {

        protected abstract void mouseDragged(PartitionView partitionView, MouseEvent e);
    }

    private static class IdleState extends PartitionState {
        @Override
        protected void mouseDragged(PartitionView partitionView, MouseEvent e) {
            // do nothing
        }
    }

    private static class ResizeState extends PartitionState {
        @Override
        protected void mouseDragged(PartitionView partitionView, MouseEvent e) {
            long size = (long) ((double) e.getX() / partitionView.pixelsPerByte);
            try {
                UserFacade.getInstance()
                        .resizePartition(partitionView.bounded.getStart() + 1, size);
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    }
}
TOP

Related Classes of org.jnode.apps.jpartition.swingview.PartitionView$IdleState

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.