view java.pde @ 0:ebd5689e2985

Initial import of Multipaint sketch version 22.5.2017.
author Tero Heikkinen
date Tue, 03 Jul 2018 20:56:55 +0300
parents
children 5eb3559e1778
line wrap: on
line source


// Pure Java UI elements, such as a file selector
// Adapted from Marq's PETSCII editor
// (this crap really makes me lose all my will to live, but it's needed now)

import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.Dimension;
import java.awt.GridLayout;

class Selector extends JPanel implements ActionListener
{
    int selection;
    protected JButton b[];
    
    Selector(String s) // Split string into options
    {
        String splitz[]=splitTokens(s,",");
        b=new JButton[splitz.length];
        
        setLayout(new GridLayout(splitz.length,1,1,1));
        
        for(int i=0;i<splitz.length;i++)
        {
            b[i]=new JButton(splitz[i]);
            b[i].setActionCommand(str(i+'0'));
            b[i].addActionListener(this);
            b[i].setHorizontalAlignment(SwingConstants.LEFT);
            
            add(b[i]);
        }
        
        selection=-1;
    }
    public void actionPerformed(ActionEvent e)
    {
        for(int i=0;i<b.length;i++)
        {
            if(str(i+'0').equals(e.getActionCommand()))
                selection=i;
        }
    }
}

// Select from a list
int selector(String title,String opt)
{
    JFrame frame=new JFrame(title);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    
    Selector s=new Selector(opt);
    s.setOpaque(true);
    frame.setContentPane(s);
 
    //Display the window.
    frame.pack();
    frame.setVisible(true);
    
    frame.setLocationRelativeTo(null); // About in the middle
    
    while(s.selection==-1)
    {
        frame.toFront(); // A bit of a kludge to force the window on top
        frame.repaint();
        try { Thread.sleep(200); }
        catch(Exception e){};
    }
    
    frame.setVisible(false);
    
    System.gc(); // It'll leak anyway...
    return(s.selection);
}

final int LOADPIX=0,
          LOADIMG=1,
          SAVEIMG=2,
          SAVETXT=3,
          SAVEEMU=4,
          SAVEFMT=5,
          LOADFMT=6;

// File selector
String fileselector(String dir,int mode)
{
    JFileChooser fc=new JFileChooser(dir);
    
    fc.setPreferredSize(new Dimension(480, 500));
    fc.setDialogTitle("Select a File");
    
    if(mode==LOADPIX) // Show image files
        fc.setFileFilter(new FileNameExtensionFilter("Images (*.png,*.gif,*.jpg)",
                         "png","gif","jpg","jpeg"));
    if(mode==LOADIMG||mode==SAVEIMG)
        fc.setFileFilter(new FileNameExtensionFilter("Multipaint files (*.bin) or png (*.png)","bin","png","jpg"));
    if(mode==SAVEEMU)
        fc.setFileFilter(new FileNameExtensionFilter("Export files (*."+g_expname+") ",g_expname));
    if(mode==SAVETXT)
        fc.setFileFilter(new FileNameExtensionFilter("Export source (*.txt) ","c","asm","txt"));
    if(mode==SAVEFMT||mode==LOADFMT)
        fc.setFileFilter(new FileNameExtensionFilter(g_formatname+" (*."+g_formatextension+")",g_formatextension));
        
    if(mode<=LOADIMG||mode==LOADFMT)
        fc.setApproveButtonText("Load");
    if(mode==SAVEIMG)
        fc.setApproveButtonText("Save");
    if(mode==SAVETXT|mode==SAVEEMU||mode==SAVEFMT)
        fc.setApproveButtonText("Export");        
    int returnVal = fc.showOpenDialog(null);
    
    if(returnVal==JFileChooser.APPROVE_OPTION)
    {
        // Save cwd for next time
        if(mode==LOADPIX)
            refpath=fc.getCurrentDirectory().getPath();
        else
            path=fc.getCurrentDirectory().getPath();
        
        File file = fc.getSelectedFile();
        return file.getPath();
    }
    else
        return null;
}