view mpui.js @ 131:9d17f991f102

Move undo and spare page management into buffers.pde as in Multipaint 2018.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 05 Aug 2018 10:44:45 +0300
parents 4d0bdd2b215d
children def42459c9a4
line wrap: on
line source

var mpMachine = 0;
var mpURL;

var mpMachines =
{
    0  : "C64 hires",
    10 : "C64 multicolor",
    6  : "ZX Spectrum",
    5  : "MSX1 mode 2",
    9  : "Plus4 hires",
    19 : "Plus4 multicolor",
    2  : "Amstrad CPC mode 0",
};


var mpSources =
[
  "buffers.pde",
  "draw_inputs.pde",
  "draw_outputs.pde",
  "draw_smart.pde",
  "events.pde",
  "exporters.pde",
  "Interface.pde",
  "multipaint.pde",
];


function stGE(obname)
{
  return document.getElementById(obname);
}


function stCE(obname, obid)
{
  var mob = document.createElement(obname);
  if (obid)
    mob.id = obid;
  return mob;
}


function stClearChildren(obnode)
{
  while (obnode.firstChild)
    obnode.removeChild(obnode.firstChild);
}


function stPRE(mstr)
{
  return mstr.toLowerCase().replace(/[^a-z0-9]/g, "_");
}


function stAddEventOb(obname, evobj, evtype, evcallback, evparam)
{
  if (evobj == null || typeof(evobj) == 'undefined')
  {
    console.log("Event object '"+ obname +"' == null.");
    return;
  }

  evobj.addEventListener(evtype, evcallback, false);
  evobj.evparam = evparam;
}


function stAddEvent(obname, evtype, evcallback, evparam)
{
  stAddEventOb(obname, stGE(obname), evtype, evcallback, evparam);
}


function mpShowMachineSelector()
{
  var mpCanvas = stGE("mpCanvas");
  mpCanvas.style.display = "none";

  var mpUI = stGE("mpUI");
  mobj = stCE("h2");
  mobj.textContent = "Multipaint.JS"
  mpUI.appendChild(mobj);

  var mdiv = stCE("div");
  mpUI.appendChild(mdiv);

  mobj = stCE("p");
  mobj.textContent = "Choose your target machine:";
  mdiv.appendChild(mobj);

  mobj = stCE("select", "machineID");
  var mlist = Object.keys(mpMachines).sort();
  for (var n = 0; n < mlist.length; n++)
  {
    var key = mlist[n];
    var opt = stCE("option");
    opt.value = key;
    opt.textContent = mpMachines[key];
    mobj.appendChild(opt);
  }
  mdiv.appendChild(mobj);

  mobj = stCE("button", "selectID");
  mobj.textContent = "RUN";
  stAddEventOb(mobj.name, mobj, "click", mpMachineSelected);
  mdiv.appendChild(mobj);

  mobj = stCE("div");
  mobj.innerHTML = 
    "<p><b>Things of note:</b></p>"+
    "<ul>"+
    "<li>Save ('S') and Load ('L') save to/load from <a href=\"https://en.wikipedia.org/wiki/Web_storage\">browser local storage</a> "+
    "(there can be only one \"save\" per machine type, so be careful.)</li>"+
    "<li>Each machine type has its own local storage save space.</li>"+
    "<li>Save as ('s') and Load from ('l') export and import Multipaint workfiles.</li>"+
    "<li>When loading/importing, you click on the load icon (or press key) and a HTML file selector button will appear "+
    "ON THE BOTTOM. You need to click that, too. Sorry, that can't be automated because of pop-up blocking etc.</li>"+
    "<li>Source code export does not work yet.</li>"+
    "<li>PNG/JPEG import/export does not work.</li>"+
    "<li> .. and there may be bugs.</li>"+
    "<li> .. though I've also fixed few bugs that exist in original Multipaint.</li>"+
    "</ul>"+
    "<p>You can also view <a href=\"https://tnsp.org/hg/forks/multipaint-psjs/\">Mercurial repository for this project</a>.</p>";

  mpUI.appendChild(mobj);

  mobj = stCE("hr");
  mpUI.appendChild(mobj);
}


function mpMachineSelected()
{
  var mpUI = stGE("mpUI");
  var id = stGE("machineID");
  mpMachine = id.selectedIndex >= 0 ? id.options[id.selectedIndex].value : 0;
  stClearChildren(mpUI);

  var mpCanvas = stGE("mpCanvas");
  mpCanvas.style.display = "block";

  window.location.href = mpURL +"?"+ mpMachine.toString();

  mpRunSketch(mpCanvas);
}


function mpStart()
{
  stGE("mpNote").innerHTML =
    "<a href=\"http://multipaint.kameli.net/\">Multipaint</a> (C) 2016-2017 <b>Tero 'Dr. TerrorZ' Heikkinen</b>, "+
    "ProcessingJS port and modifications by <b>Matti 'ccr' Hämäläinen</b> (2018)";

  var slink = window.location.href;
  var spos, found = false;
  if ((spos = slink.indexOf("?")) >= 0)
  {
    var tmp = parseInt(unescape(slink.substr(spos + 1)));
    mpURL = slink.substr(0, spos);

    for (var key in mpMachines)
    {
      if (key == tmp)
      {
        mpMachine = key;
        found = true;
        break;
      }
    }
  }
  else
    mpURL = slink;

  if (found)
  {
    mpRunSketch(stGE("mpCanvas"));
  }
  else
  {
    stAddEventOb("DOM", document, "DOMContentLoaded", mpShowMachineSelector);
  }
}