956 lines
34 KiB
Plaintext
956 lines
34 KiB
Plaintext
|
|
/*
|
||
|
|
Awtool.zob
|
||
|
|
*
|
||
|
|
* Copyright (c) 2000-2001 Ted Nelson and Tuomas Lukka
|
||
|
|
* Copyright (c) 2000-2001 Kimmo Wideroos
|
||
|
|
*
|
||
|
|
* You may use and distribute under the terms of either the GNU Lesser
|
||
|
|
* General Public License, either version 2 of the license or,
|
||
|
|
* at your choice, any later version. Alternatively, you may use and
|
||
|
|
* distribute under the terms of the XPL.
|
||
|
|
*
|
||
|
|
* See the LICENSE.lgpl and LICENSE.xpl files for the specific terms of
|
||
|
|
* the licenses.
|
||
|
|
*
|
||
|
|
* This software 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 README
|
||
|
|
* file for more details.
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
/*
|
||
|
|
* Written by Kimmo Wideroos (inspired by Benjamin Fallenstein's notemap module)
|
||
|
|
*/
|
||
|
|
|
||
|
|
/** Awt = A(ssociative) writing tool -demo
|
||
|
|
*/
|
||
|
|
|
||
|
|
package org.gzigzag.module;
|
||
|
|
import org.gzigzag.*;
|
||
|
|
import java.util.*;
|
||
|
|
import java.awt.*;
|
||
|
|
|
||
|
|
public abstract class Awtool implements FlobView, FlobSet.DragCursor, ZOb {
|
||
|
|
public static final String rcsid = "";
|
||
|
|
public static boolean dbg = true;
|
||
|
|
static void p(String s) { if(dbg) System.out.println(s); }
|
||
|
|
static void pa(String s) { System.out.println(s); }
|
||
|
|
|
||
|
|
STRUCTPARAMS {
|
||
|
|
/** View dimension (not in use now...) */
|
||
|
|
int viewWidth
|
||
|
|
= 600;
|
||
|
|
int viewHeight
|
||
|
|
= 600;
|
||
|
|
int viewX
|
||
|
|
= 100;
|
||
|
|
int viewY
|
||
|
|
= 100;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
static boolean NileOn = false;
|
||
|
|
static AwtNote dragNote;
|
||
|
|
static Point dragOffs = new Point(0, 0);
|
||
|
|
static Point dragCoord = new Point(0, 0);
|
||
|
|
|
||
|
|
static boolean creatingNote = false;
|
||
|
|
|
||
|
|
static long focusChangedLastTime = -1; // millisecs
|
||
|
|
|
||
|
|
static AwtCursor c_cursor1 = new AwtCursor(Color.red, true);
|
||
|
|
static AwtCursor c_cursor2 = new AwtCursor(Color.gray, true);
|
||
|
|
static AwtCursor c_activeCategory = new AwtCursor(Color.orange, false);
|
||
|
|
static AwtCursor c_metrics = new AwtCursor(Color.white, false);
|
||
|
|
|
||
|
|
public boolean accept(Object o) {
|
||
|
|
if(!(o instanceof ZZCell)) return false;
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
static public Hashtable categ;
|
||
|
|
static public Hashtable notes;
|
||
|
|
static public Hashtable validNotes;
|
||
|
|
|
||
|
|
static class NotemapBM extends BooleanMesh {
|
||
|
|
public NotemapBM(ZZCell bStructure) { super(bStructure); }
|
||
|
|
public boolean testBelonging(ZZCell nhc, ZZCell category) {
|
||
|
|
for(ZZCell l=category.h(AwtUtil.d_clone).s(AwtUtil.d_to); l != null; l=l.s(AwtUtil.d_to) )
|
||
|
|
if(l.h(AwtUtil.d_from,1).h(AwtUtil.d_clone).equals(nhc)) return true;
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/* categories are a kind of layers containing notes (i.e. (text) elements).
|
||
|
|
* this class provides with logical operations for categories (AND, OR).
|
||
|
|
* the resulting categories should be able to store permanently in zzspace.
|
||
|
|
* heavily under construction ...
|
||
|
|
*/
|
||
|
|
public class Categories extends ZObCellRepr {
|
||
|
|
private Hashtable AllNoteHeadCells = null;
|
||
|
|
private Hashtable AllNotes = null;
|
||
|
|
private Hashtable AllValidNotes = null;
|
||
|
|
private Hashtable ValidNotes = null;
|
||
|
|
private Hashtable K = new Hashtable();
|
||
|
|
private NotemapBM bm;
|
||
|
|
private String categoryName = "SCRATCH";
|
||
|
|
|
||
|
|
public boolean isCategory(ZZCell c) {
|
||
|
|
return (c.h(AwtUtil.d_clone).getRankLength(AwtUtil.d_categories)>1);
|
||
|
|
}
|
||
|
|
|
||
|
|
public Categories(ZZCell bStructure) {
|
||
|
|
setCell(bStructure);
|
||
|
|
_findCategories(bStructure);
|
||
|
|
bm = new NotemapBM(bStructure);
|
||
|
|
|
||
|
|
AllNotes = new Hashtable();
|
||
|
|
AllNoteHeadCells = new Hashtable();
|
||
|
|
AllValidNotes = new Hashtable();
|
||
|
|
ValidNotes = new Hashtable();
|
||
|
|
|
||
|
|
ZZCell note, chc, nhc;
|
||
|
|
for(Enumeration e = K.keys(); e.hasMoreElements(); ) {
|
||
|
|
// chc = category headcell
|
||
|
|
chc = ((ZZCell)e.nextElement());
|
||
|
|
for(ZZCell linkc = chc.s(AwtUtil.d_to); linkc != null;
|
||
|
|
linkc = linkc.s(AwtUtil.d_to) )
|
||
|
|
{
|
||
|
|
note = linkc.h(AwtUtil.d_from, 1);
|
||
|
|
nhc = note.h(AwtUtil.d_clone);
|
||
|
|
AllNotes.put(note, nhc);
|
||
|
|
if(!AllNoteHeadCells.containsKey(nhc))
|
||
|
|
// AllNoteHeadCells must keep track of all note headcells
|
||
|
|
AllNoteHeadCells.put(nhc, note);
|
||
|
|
if(AllValidNotes.containsKey(nhc))
|
||
|
|
// AllValidNotes store valid headcells AND clones
|
||
|
|
// all together
|
||
|
|
AllValidNotes.put(note, nhc);
|
||
|
|
else if(bm.evaluate(nhc)) AllValidNotes.put(note, nhc);
|
||
|
|
if(AllValidNotes.containsKey(note)) {
|
||
|
|
// If there exist 2 or more valid note clones, ValidNotes
|
||
|
|
// store note headcell (otherwise note clone).
|
||
|
|
if(ValidNotes.containsKey(nhc)) ValidNotes.put(nhc, nhc);
|
||
|
|
else ValidNotes.put(nhc, note);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private void _findCategories(ZZCell bStructure) {
|
||
|
|
if(isCategory(bStructure)) {
|
||
|
|
K.put(bStructure.h(AwtUtil.d_clone), bStructure);
|
||
|
|
return;
|
||
|
|
} else
|
||
|
|
{
|
||
|
|
_findCategories(bStructure.s("d.1"));
|
||
|
|
_findCategories(bStructure.s("d.2"));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getNoteCells() {
|
||
|
|
ZZCell[] n = new ZZCell[AllNotes.size()];
|
||
|
|
Enumeration e = AllNotes.elements();
|
||
|
|
int i = 0;
|
||
|
|
while (e.hasMoreElements()) {
|
||
|
|
n[i] = (ZZCell)e.nextElement(); i++;
|
||
|
|
}
|
||
|
|
return n;
|
||
|
|
}
|
||
|
|
public AwtNote[] getNotes() {
|
||
|
|
AwtNote[] n = new AwtNote[AllNotes.size()];
|
||
|
|
Enumeration e = AllNotes.elements();
|
||
|
|
ZZCell ncell;
|
||
|
|
int i = 0;
|
||
|
|
while (e.hasMoreElements()) {
|
||
|
|
ncell = (ZZCell)e.nextElement();
|
||
|
|
n[i] = (AwtNote)AwtUtil.readZObClone(ncell);
|
||
|
|
n[i].setCell(ncell);
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return n;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getAllValidNoteCells() {
|
||
|
|
ZZCell[] ln = new ZZCell[AllValidNotes.size()];
|
||
|
|
int i = 0;
|
||
|
|
for(Enumeration e=AllValidNotes.keys(); e.hasMoreElements();) {
|
||
|
|
ln[i] = (ZZCell)e.nextElement();
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return ln;
|
||
|
|
}
|
||
|
|
|
||
|
|
public AwtNote[] getAllValidNotes() {
|
||
|
|
AwtNote[] ln = new AwtNote[AllValidNotes.size()];
|
||
|
|
ZZCell ncell;
|
||
|
|
int i = 0;
|
||
|
|
for(Enumeration e=AllValidNotes.keys(); e.hasMoreElements();) {
|
||
|
|
ncell = (ZZCell)e.nextElement();
|
||
|
|
ln[i] = (AwtNote)AwtUtil.readZObClone(ncell);
|
||
|
|
ln[i].setCell(ncell);
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return ln;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getValidNoteCells() {
|
||
|
|
ZZCell[] ln = new ZZCell[ValidNotes.size()];
|
||
|
|
int i = 0;
|
||
|
|
for(Enumeration e=ValidNotes.elements(); e.hasMoreElements(); ) {
|
||
|
|
ln[i] = (ZZCell)e.nextElement();
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return ln;
|
||
|
|
}
|
||
|
|
|
||
|
|
public AwtNote[] getValidNotes() {
|
||
|
|
AwtNote[] ln = new AwtNote[ValidNotes.size()];
|
||
|
|
ZZCell ncell;
|
||
|
|
int i = 0;
|
||
|
|
for(Enumeration e=ValidNotes.elements(); e.hasMoreElements(); ) {
|
||
|
|
ncell = (ZZCell)e.nextElement();
|
||
|
|
ln[i] = (AwtNote)AwtUtil.readZObClone(ncell);
|
||
|
|
ln[i].setCell(ncell);
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return ln;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getK() {
|
||
|
|
ZZCell[] cat = new ZZCell[K.size()];
|
||
|
|
Enumeration e = K.elements();
|
||
|
|
int i = 0;
|
||
|
|
while (e.hasMoreElements())
|
||
|
|
cat[i] = (ZZCell)e.nextElement(); i++;
|
||
|
|
return cat;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getAllValidLinkCells(boolean internal, boolean external) {
|
||
|
|
return _getvalidlinks(internal, external, AllValidNotes.keys());
|
||
|
|
}
|
||
|
|
|
||
|
|
public AwtLink[] getAllValidLinks(boolean internal, boolean external)
|
||
|
|
{
|
||
|
|
ZZCell[] linkcells = _getvalidlinks(internal, external, AllValidNotes.keys());
|
||
|
|
AwtLink[] links = new AwtLink[linkcells.length];
|
||
|
|
for(int i = 0; i<linkcells.length; i++ ) {
|
||
|
|
links[i] = (AwtLink)AwtUtil.readZObClone(linkcells[i]);
|
||
|
|
links[i].setCell(linkcells[i]);
|
||
|
|
}
|
||
|
|
return links;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZZCell[] getValidLinkCells(boolean internal, boolean external) {
|
||
|
|
return _getvalidlinks(internal, external, ValidNotes.elements());
|
||
|
|
}
|
||
|
|
|
||
|
|
public AwtLink[] getValidLinks(boolean internal, boolean external) {
|
||
|
|
ZZCell[] linkcells = _getvalidlinks(internal, external, AllValidNotes.keys());
|
||
|
|
AwtLink[] links = new AwtLink[linkcells.length];
|
||
|
|
for(int i = 0; i<linkcells.length; i++ ) {
|
||
|
|
links[i] = (AwtLink)AwtUtil.readZObClone(linkcells[i]);
|
||
|
|
links[i].setCell(linkcells[i]);
|
||
|
|
}
|
||
|
|
return links;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Get the links in this category
|
||
|
|
private ZZCell[] _getvalidlinks(boolean internal, boolean
|
||
|
|
external, Enumeration noteEnum) {
|
||
|
|
Hashtable links = new Hashtable();
|
||
|
|
ZZCell nhc, note, trgnote;
|
||
|
|
for(Enumeration e=noteEnum; e.hasMoreElements();) {
|
||
|
|
note = (ZZCell)e.nextElement();
|
||
|
|
nhc = note.h(AwtUtil.d_clone);
|
||
|
|
if(external)
|
||
|
|
for(ZZCell el=nhc.s(AwtUtil.d_to); el != null; el=el.s(AwtUtil.d_to)) {
|
||
|
|
// note has global relations
|
||
|
|
trgnote = el.h(AwtUtil.d_from, 1);
|
||
|
|
if(AllNoteHeadCells.containsKey(trgnote)) links.put(el, el);
|
||
|
|
}
|
||
|
|
if(internal && !(external && note.equals(nhc)))
|
||
|
|
for(ZZCell il=note.s(AwtUtil.d_to); il != null; il=il.s(AwtUtil.d_to)) {
|
||
|
|
// note has categorywide relations
|
||
|
|
trgnote = il.h(AwtUtil.d_from, 1);
|
||
|
|
if(AllValidNotes.containsKey(trgnote)) links.put(il, il);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
int s = links.size(), i=0;
|
||
|
|
ZZCell[] res = new ZZCell[s];
|
||
|
|
for(Enumeration e=links.elements(); e.hasMoreElements(); ) {
|
||
|
|
res[i] = (ZZCell)e.nextElement();
|
||
|
|
i++;
|
||
|
|
}
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
|
||
|
|
public String getZObName() {
|
||
|
|
return "Catecory/Layer";
|
||
|
|
}
|
||
|
|
|
||
|
|
/* store category back in cellstructure */
|
||
|
|
public String cellRepr(ZZCell start, boolean clone) {
|
||
|
|
ZZCell c, retCell, catCell = null;
|
||
|
|
AwtLink catlink = new AwtLink();
|
||
|
|
|
||
|
|
catCell.setText(getZObName());
|
||
|
|
catCell = catCell.getOrNewCell(AwtUtil.d_to);
|
||
|
|
AwtNote note;
|
||
|
|
AwtNote[] validNotes = getValidNotes();
|
||
|
|
for(int i=validNotes.length; i>=0; i--) {
|
||
|
|
note = validNotes[i];
|
||
|
|
catlink.setX(note.getX()); catlink.setY(note.getY());
|
||
|
|
catlink.cellRepr(catCell, false);
|
||
|
|
// note's centralcell is a clone of its (ZOb's) original
|
||
|
|
// central cell; that's why '...im2), true);'
|
||
|
|
note.cellRepr(catCell.getOrNewCell(AwtUtil.d_from), true);
|
||
|
|
catCell = catCell.getOrNewCell(AwtUtil.d_to);
|
||
|
|
}
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/** return note cell, if possible
|
||
|
|
*/
|
||
|
|
static ZZCell getNoteCellOrCursor(Object ob) {
|
||
|
|
ZZCell c = null;
|
||
|
|
if(ob instanceof ZZCursor) c = ((ZZCursor)ob).get();
|
||
|
|
else if(ob instanceof ZZCell) c = (ZZCell)ob;
|
||
|
|
else return null;
|
||
|
|
ZZCell link = c.s(AwtUtil.d_from, -1);
|
||
|
|
if(link == null) return null;
|
||
|
|
if(link.s(AwtUtil.d_to, -1) == null) return null;
|
||
|
|
return c;
|
||
|
|
}
|
||
|
|
|
||
|
|
static public void nile_action(String id, ZZCell vc1, ZZCell vc2, String key,
|
||
|
|
ZZCursor cur) {
|
||
|
|
|
||
|
|
boolean split = false;
|
||
|
|
|
||
|
|
ZZCell viewCell = vc1;
|
||
|
|
ZZCell otherCell = vc2;
|
||
|
|
|
||
|
|
p("Nile action: id: '"+id+"' key: '"+key);
|
||
|
|
|
||
|
|
StringTokenizer st = new StringTokenizer(id);
|
||
|
|
String[] toks = new String[st.countTokens()];
|
||
|
|
for(int i=0; i<toks.length; i++)
|
||
|
|
toks[i] = st.nextToken();
|
||
|
|
|
||
|
|
int dir = 0;
|
||
|
|
Nile2Unit unit = null;
|
||
|
|
if(toks.length > 1) {
|
||
|
|
if(toks[1].equals("+")) dir = 1;
|
||
|
|
else if(toks[1].equals("-")) dir = -1;
|
||
|
|
|
||
|
|
if(toks.length > 2) {
|
||
|
|
if(toks[2].equals("CHAR"))
|
||
|
|
unit = new Nile2Unit.Char();
|
||
|
|
else if(toks[2].equals("WORD"))
|
||
|
|
unit = new Nile2Unit.Word();
|
||
|
|
else if(toks[2].equals("SENT"))
|
||
|
|
unit = new Nile2Unit.Sentence();
|
||
|
|
else if(toks[2].equals("PARA"))
|
||
|
|
unit = new Nile2Unit.Paragraph();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
id = toks[0];
|
||
|
|
|
||
|
|
if(id.equals("Cursor")) {
|
||
|
|
p("Cursor: "+dir);
|
||
|
|
Nile2Ops.moveCursor(unit, viewCell, dir);
|
||
|
|
ZZUpdateManager.setFast(null);
|
||
|
|
}
|
||
|
|
else if(id.equals("AdjLeft")) {
|
||
|
|
Nile2Ops.adjust(unit, viewCell, -1, dir);
|
||
|
|
ZZUpdateManager.setFast(null);
|
||
|
|
}
|
||
|
|
else if(id.equals("AdjRight")) {
|
||
|
|
Nile2Ops.adjust(unit, viewCell, 1, dir);
|
||
|
|
ZZUpdateManager.setFast(null);
|
||
|
|
}
|
||
|
|
else if(id.equals("Hop")) {
|
||
|
|
Nile2Ops.hop(unit, viewCell, dir);
|
||
|
|
}
|
||
|
|
else if(id.equals("Mode")) {
|
||
|
|
Nile2Ops.setCursor(unit, viewCell, null);
|
||
|
|
if(split)
|
||
|
|
Nile2Ops.setCursor(unit, otherCell, null);
|
||
|
|
}
|
||
|
|
else if(id.equals("Insert")) {
|
||
|
|
Nile2Ops.insert(viewCell, key);
|
||
|
|
|
||
|
|
// Set the selection of other half to char mode, too
|
||
|
|
if(split)
|
||
|
|
Nile2Ops.setCursor(new Nile2Unit.Char(), otherCell, null);
|
||
|
|
}
|
||
|
|
else if(id.equals("BackSpace")) {
|
||
|
|
Nile2Ops.backspace(unit, viewCell);
|
||
|
|
}
|
||
|
|
else if(id.equals("Delete")) {
|
||
|
|
Nile2Ops.del(unit, viewCell);
|
||
|
|
}
|
||
|
|
else if(id.equals("BreakParagraph")) {
|
||
|
|
Nile2Ops.breakParagraph(unit, viewCell);
|
||
|
|
}
|
||
|
|
else if(id.equals("Tunnel")) {
|
||
|
|
if(otherCell != null) {
|
||
|
|
Nile2Ops.tunnel(unit, otherCell, viewCell, dir, false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(id.equals("Transcopy")) {
|
||
|
|
if(otherCell != null) {
|
||
|
|
Nile2Ops.tunnel(unit, otherCell, viewCell, dir, true);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(id.equals("PUICopy")) {
|
||
|
|
ZZCell c = ZZCursorReal.get(viewCell);
|
||
|
|
String s = Nile2Ops.stringify(c);
|
||
|
|
ZZUtil.puiCopy(s);
|
||
|
|
}
|
||
|
|
/*
|
||
|
|
else if(id.equals("TraverseTranscopies")) {
|
||
|
|
Nile2Ops.traverseTranscopies(viewCell, dir);
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
//Object ob = null;
|
||
|
|
//if(pt != null)
|
||
|
|
// ob = xi.getObjectAt(pt.x, pt.y);
|
||
|
|
|
||
|
|
if(id.equals("MouseSetCursor") && cur!=null) {
|
||
|
|
p("Setting cursor from mouse! Unit: "+unit);
|
||
|
|
if(cur.get().h("d.nile").equals(viewCell)) {
|
||
|
|
Nile2Ops.setCursor(unit, viewCell, cur);
|
||
|
|
} else
|
||
|
|
if(cur.get().h("d.nile").equals(otherCell)) {
|
||
|
|
Nile2Ops.setCursor(unit, otherCell, cur);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
abstract public void raster(FlobSet into, FlobFactory fact,
|
||
|
|
ZZCell view, String[] dims, ZZCell accursed);
|
||
|
|
|
||
|
|
static public ZZModule module = new ZZModule() {
|
||
|
|
public void action(String id,
|
||
|
|
ZZCell code,
|
||
|
|
ZZCell target,
|
||
|
|
ZZView view, ZZView cview, String key, Point pt, ZZScene xi) {
|
||
|
|
|
||
|
|
ZZUpdateManager.setFast(view);
|
||
|
|
Object ob = null;
|
||
|
|
AwtNote note = null;
|
||
|
|
AwtMetrics M;
|
||
|
|
ZZCell nc;
|
||
|
|
Point noteRVCoord = null;
|
||
|
|
double[] noteVVCoord = null;
|
||
|
|
double deltaX, deltaY;
|
||
|
|
|
||
|
|
if(pt != null && xi != null) ob = xi.getObjectAt(pt.x, pt.y);
|
||
|
|
|
||
|
|
nc = getNoteCellOrCursor(ob);
|
||
|
|
|
||
|
|
if(nc != null) {
|
||
|
|
note = (AwtNote)AwtUtil.readZObClone(nc);
|
||
|
|
note.setCell(nc);
|
||
|
|
}
|
||
|
|
|
||
|
|
boolean forceOrigoChange = false;
|
||
|
|
ZZCell AwtSystemList;
|
||
|
|
ZZCell vc = view.getViewcell();
|
||
|
|
|
||
|
|
pa("NOTECELL: "+nc);
|
||
|
|
|
||
|
|
pa("Note action! '"+id+"' key: "+key);
|
||
|
|
|
||
|
|
// is nile mode on?
|
||
|
|
boolean nileOn = false;
|
||
|
|
ZZCell curb = vc.h("d.bind", 1, true);
|
||
|
|
if(curb!=null) {
|
||
|
|
String mode = ZZCursorReal.get(curb).getText();
|
||
|
|
if(mode.indexOf("Nile") >= 0)
|
||
|
|
nileOn = true;
|
||
|
|
}
|
||
|
|
pa("OBJECT: "+ob);
|
||
|
|
boolean isC = false;
|
||
|
|
if(ob instanceof ZZCursor) isC = true;
|
||
|
|
pa("IS CURSOR?: "+isC);
|
||
|
|
// if we have object which is not cursor, then nile action is impossible
|
||
|
|
if(nileOn && !(!(ob instanceof ZZCursor) && (ob != null)) ) {
|
||
|
|
ZZCell nvc1 = AwtUtil.getCursoredCell(c_cursor1, vc);
|
||
|
|
ZZCell nvc2 = AwtUtil.getCursoredCell(c_cursor2, vc);
|
||
|
|
if(nvc1==null) return;
|
||
|
|
|
||
|
|
if(nvc1.s("d.cursor-cargo", -1)==null) {
|
||
|
|
ZZCursorReal.set(nvc1, nvc1);
|
||
|
|
ZZCursorReal.setOffs(nvc1, 0);
|
||
|
|
}
|
||
|
|
if(nvc2!=null)
|
||
|
|
if(nvc2.s("d.cursor-cargo", -1)==null) {
|
||
|
|
ZZCursorReal.set(nvc2, nvc2);
|
||
|
|
ZZCursorReal.setOffs(nvc2, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
nile_action(id, nvc1, nvc2, key, (ZZCursor)ob);
|
||
|
|
//Nile1.module.action(id,code,target,nview,cview,key,pt,xi);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(id.equals("TESTWIN")) {
|
||
|
|
AwtSystemList = target;
|
||
|
|
|
||
|
|
// set awt dims
|
||
|
|
AwtUtil.addDims(ZZDefaultSpace.findDefaultDimlist(code.getHomeCell()));
|
||
|
|
|
||
|
|
// Cursors
|
||
|
|
ZZCell curs = AwtSystemList.findText(AwtUtil.d_awtool, 1, "Cursors");
|
||
|
|
if(curs == null) {
|
||
|
|
ZZCell nCurs1, nCurs2, cat1;
|
||
|
|
ZZCell cursors = AwtSystemList.N(AwtUtil.d_awtool);
|
||
|
|
cursors.setText("Cursors");
|
||
|
|
cursors.N("d.1");
|
||
|
|
}
|
||
|
|
|
||
|
|
// View
|
||
|
|
ZZCell rastname, rl, rc = AwtSystemList.findText(AwtUtil.d_awtool, 1, "View");
|
||
|
|
if(rc == null) {
|
||
|
|
rc = AwtSystemList.N(AwtUtil.d_awtool);
|
||
|
|
rc.setText("View");
|
||
|
|
rl = rc.N("d.1");
|
||
|
|
rl.connect("d.2", 1, rl);
|
||
|
|
rl.setText("Awtool");
|
||
|
|
rastname = rl.N("d.1");
|
||
|
|
rastname.setText("Awtool.View1");
|
||
|
|
} else {
|
||
|
|
rl = rc.s("d.1");
|
||
|
|
rastname = rl.s("d.1");
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// Bindings
|
||
|
|
ZZCell bindhome = AwtSystemList.findText(AwtUtil.d_awtool, 1, "Bind");
|
||
|
|
if(bindhome == null) {
|
||
|
|
bindhome = AwtSystemList.N(AwtUtil.d_awtool);
|
||
|
|
bindhome.setText("Bind");
|
||
|
|
bindhome = bindhome.N("d.1", 1);
|
||
|
|
|
||
|
|
//ZZDefaultSpace.mkCorner(bindhome, actions);
|
||
|
|
actions(bindhome.h("d.2", 1));
|
||
|
|
} else {
|
||
|
|
bindhome = bindhome.s("d.1");
|
||
|
|
}
|
||
|
|
// View metrics
|
||
|
|
ZZCell metr = AwtSystemList.findText(AwtUtil.d_awtool, 1, "Metrics");
|
||
|
|
if(metr == null) {
|
||
|
|
Dimension RV = new Dimension(400, 400);
|
||
|
|
Dimension VV = new Dimension(1000, 1000);
|
||
|
|
// create 'metrics collection'
|
||
|
|
metr = AwtSystemList.N(AwtUtil.d_awtool);
|
||
|
|
metr.setText("Metrics");
|
||
|
|
ZZCell mnew, metrList;
|
||
|
|
|
||
|
|
mnew = metrList = metr.N("d.1");
|
||
|
|
|
||
|
|
M = new AwtMetricsNormal(mnew, RV, VV, 0.0,0.0);
|
||
|
|
M.cellRepr();
|
||
|
|
|
||
|
|
mnew = mnew.N("d.2");
|
||
|
|
M = new AwtMetricsFC(mnew, RV, VV, 0.0, 0.0);
|
||
|
|
M.cellRepr();
|
||
|
|
|
||
|
|
mnew = mnew.N("d.2");
|
||
|
|
M = new AwtMetricsFC2(mnew, RV, VV, 0.0, 0.0);
|
||
|
|
M.cellRepr();
|
||
|
|
|
||
|
|
// make circle
|
||
|
|
mnew.connect("d.2", 1, metrList);
|
||
|
|
AwtUtil.setCursor(c_metrics, metrList, AwtSystemList);
|
||
|
|
|
||
|
|
|
||
|
|
} else {
|
||
|
|
ZZCell currentMetrics =
|
||
|
|
AwtUtil.getCursoredCell(c_metrics, AwtSystemList);
|
||
|
|
if(currentMetrics == null) {
|
||
|
|
currentMetrics = metr.s("d.1");
|
||
|
|
AwtUtil.setCursor(c_metrics, currentMetrics, AwtSystemList);
|
||
|
|
}
|
||
|
|
M = (AwtMetrics)AwtUtil.readZObClone(currentMetrics);
|
||
|
|
M.setCell(currentMetrics);
|
||
|
|
}
|
||
|
|
|
||
|
|
// searching for active category ...
|
||
|
|
ZZCell ac = AwtUtil.getCursoredCell(c_activeCategory, AwtSystemList);
|
||
|
|
if(ac == null) {
|
||
|
|
if(AwtSystemList.getRankLength(AwtUtil.d_categories)>1) {
|
||
|
|
ac = AwtSystemList.s(AwtUtil.d_categories);
|
||
|
|
} else {
|
||
|
|
ac = AwtSystemList.N(AwtUtil.d_categories);
|
||
|
|
ac.setText("* SCRATCH *");
|
||
|
|
}
|
||
|
|
AwtUtil.setCursor(c_activeCategory, ac, AwtSystemList);
|
||
|
|
}
|
||
|
|
|
||
|
|
ZZCell v = ZZDefaultSpace.newToplevelView(rc.getSpace(),
|
||
|
|
"awtool", 0, 0, M.RealView[0], M.RealView[1],
|
||
|
|
rl, null,
|
||
|
|
null, null,
|
||
|
|
null,
|
||
|
|
new Color(0xFFFFB1));
|
||
|
|
|
||
|
|
// Then, set bindings
|
||
|
|
ZZCell bcurs = v.getOrNewCell("d.bind", 1);
|
||
|
|
ZZCursorReal.set(bcurs, bindhome);
|
||
|
|
ZZCursorReal.setColor(bcurs, Color.black);
|
||
|
|
|
||
|
|
|
||
|
|
ZZCell awtc = v.h("d.2", 1).N("d.2");
|
||
|
|
awtc.setText("AwtSystemList");
|
||
|
|
ZZCursorReal.set(awtc, AwtSystemList);
|
||
|
|
// init shared cursors
|
||
|
|
ZZCell scursors = v.h("d.2",1).N("d.2");
|
||
|
|
scursors.setText("SharedCursors");
|
||
|
|
scursors.N("d.1");
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
AwtSystemList = AwtUtil.getAwtSysList(view.getViewcell());
|
||
|
|
if(AwtSystemList == null && !id.equals("TESTWIN")) {
|
||
|
|
throw new ZZError("Awtool: AwtSystemList missing!!");
|
||
|
|
}
|
||
|
|
|
||
|
|
M = AwtUtil.getAwtMetrics(AwtSystemList);
|
||
|
|
|
||
|
|
if(id.equals("StartDrag")) {
|
||
|
|
if(note != null) {
|
||
|
|
dragNote = note;
|
||
|
|
noteRVCoord = M.mapToRealView(note.getX(), note.getY());
|
||
|
|
dragOffs.x = noteRVCoord.x - pt.x;
|
||
|
|
dragOffs.y = noteRVCoord.y - pt.y;
|
||
|
|
}
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("StopDrag") && dragNote != null) {
|
||
|
|
noteVVCoord = M.mapToVirtualView(pt.x + dragOffs.x, pt.y + dragOffs.y);
|
||
|
|
dragNote.setCoord(noteVVCoord[0], noteVVCoord[1]);
|
||
|
|
dragNote.cellRepr();
|
||
|
|
dragOffs.x = 0; dragOffs.y = 0;
|
||
|
|
dragNote = null;
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("Dragged") && dragNote != null) {
|
||
|
|
noteVVCoord = M.mapToVirtualView(pt.x + dragOffs.x, pt.y + dragOffs.y);
|
||
|
|
dragNote.setCoord(noteVVCoord[0], noteVVCoord[1]);
|
||
|
|
ZZUpdateManager.chg();
|
||
|
|
//dragNote.cellRepr();
|
||
|
|
} else
|
||
|
|
|
||
|
|
|
||
|
|
if(id.equals("StartResize")) {
|
||
|
|
if(note != null) {
|
||
|
|
dragNote = note;
|
||
|
|
noteRVCoord = M.mapToRealView(note.getX(), note.getY());
|
||
|
|
dragOffs.x = noteRVCoord.x - pt.x;
|
||
|
|
dragOffs.y = noteRVCoord.y - pt.y;
|
||
|
|
}
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("StopResize") && dragNote != null) {
|
||
|
|
noteVVCoord = M.mapToVirtualView(pt.x + dragOffs.x, pt.y + dragOffs.y);
|
||
|
|
dragNote.setCoord(noteVVCoord[0], noteVVCoord[1]);
|
||
|
|
dragNote.cellRepr();
|
||
|
|
dragOffs.x = 0; dragOffs.y = 0;
|
||
|
|
dragNote = null;
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("Resizing") && dragNote != null) {
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("StartCreatingNote")) {
|
||
|
|
dragCoord = pt;
|
||
|
|
// this is chanced to 'true' when dragging occurs
|
||
|
|
creatingNote = false;
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("CreatingNote")) {
|
||
|
|
creatingNote = true;
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("StopCreatingNote") && creatingNote) {
|
||
|
|
ZZCell newNoteCell;
|
||
|
|
AwtNote newNote;
|
||
|
|
int cx = (dragCoord.x+pt.x)>>1;
|
||
|
|
int cy = (dragCoord.y+pt.y)>>1;
|
||
|
|
double[] ndim, nvcenter = M.mapToVirtualView(cx, cy);
|
||
|
|
Dimension nd = new Dimension(Math.abs(dragCoord.x-pt.x), Math.abs(dragCoord.y-pt.y));
|
||
|
|
ndim = M.getVirtualDimension(cx, cy, nd);
|
||
|
|
|
||
|
|
ZZCell ac = AwtUtil.getCursoredCell(c_activeCategory, vc);
|
||
|
|
|
||
|
|
ZZCell noteCell =
|
||
|
|
ac.h(AwtUtil.d_to).N(AwtUtil.d_to).N(AwtUtil.d_from);
|
||
|
|
|
||
|
|
AwtUtil.createNewNote(noteCell, nvcenter, ndim);
|
||
|
|
// attach new note also to 'notes' dimension along
|
||
|
|
// active category cell.
|
||
|
|
ac.h(AwtUtil.d_notes, 1).connect(AwtUtil.d_notes, 1, noteCell);
|
||
|
|
dragCoord.x = 0;
|
||
|
|
dragCoord.y = 0;
|
||
|
|
creatingNote = false;
|
||
|
|
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("SetCursor1") && nc != null) {
|
||
|
|
ZZCell red = AwtUtil.getCursoredCell(c_cursor1, vc);
|
||
|
|
if(red.equals(nc)) return;
|
||
|
|
AwtUtil.setCursor(c_cursor2, red, vc);
|
||
|
|
AwtUtil.setCursor(c_cursor1, nc, vc);
|
||
|
|
if(red!=null) {
|
||
|
|
red.excise("d.nile-wins");
|
||
|
|
nc.connect("d.nile-wins", 1, red);
|
||
|
|
nc.connect("d.nile-wins", -1, red);
|
||
|
|
}
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("SetCursor2") && nc != null) {
|
||
|
|
ZZCell gray = AwtUtil.getCursoredCell(c_cursor2, vc);
|
||
|
|
if(gray.equals(nc)) return;
|
||
|
|
AwtUtil.setCursor(c_cursor1, gray, vc);
|
||
|
|
AwtUtil.setCursor(c_cursor2, nc, vc);
|
||
|
|
if(gray!=null) {
|
||
|
|
gray.excise("d.nile-wins");
|
||
|
|
nc.connect("d.nile-wins", 1, gray);
|
||
|
|
nc.connect("d.nile-wins", -1, gray);
|
||
|
|
}
|
||
|
|
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("NewLink")) {
|
||
|
|
ZZCell c1, c2;
|
||
|
|
c1 = AwtUtil.getCursoredCell(c_cursor1, vc);
|
||
|
|
c2 = AwtUtil.getCursoredCell(c_cursor2, vc);
|
||
|
|
if(c1 != null && c2 != null && c1 != c2) {
|
||
|
|
AwtUtil.createNewLink(c1, c2);
|
||
|
|
}
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("ChangeMetrics")) {
|
||
|
|
// save current metrics (focus, origo, etc.)
|
||
|
|
M.cellRepr();
|
||
|
|
ZZCell mc = AwtUtil.getCursoredCell(c_metrics, vc);
|
||
|
|
mc = mc.s("d.2");
|
||
|
|
AwtUtil.setCursor(c_metrics, mc, vc);
|
||
|
|
M = (AwtMetrics)AwtUtil.readZObClone(mc);
|
||
|
|
M.setCell(mc);
|
||
|
|
ZZUpdateManager.chg();
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("ResetOrigo")) {
|
||
|
|
//pa("ORIGO RESET!");
|
||
|
|
M.setOrigo(0.0, 0.0);
|
||
|
|
ZZUpdateManager.chg();
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("GridOnOff")) {
|
||
|
|
//pa("GRID ON/OFF!");
|
||
|
|
boolean gon = M.GridOn;
|
||
|
|
M.GridOn = gon ? false : true;
|
||
|
|
if(M.GridOn != gon) {
|
||
|
|
M.cellRepr();
|
||
|
|
}
|
||
|
|
ZZUpdateManager.chg();
|
||
|
|
} else
|
||
|
|
|
||
|
|
if(id.equals("FocusOrigoAndSelect")) {
|
||
|
|
long elapsedTime = Long.MAX_VALUE;
|
||
|
|
long cur = System.currentTimeMillis();
|
||
|
|
double[] vf1, vf2;
|
||
|
|
|
||
|
|
vf1 = M.mapToVirtualView(pt.x, pt.y);
|
||
|
|
M.setFocusOrigo(pt.x, pt.y, nc);
|
||
|
|
vf2 = M.mapToVirtualView(pt.x, pt.y);
|
||
|
|
M.moveOrigo(vf1[0]-vf2[0], vf1[1]-vf2[1]);
|
||
|
|
M.cellRepr();
|
||
|
|
|
||
|
|
if(focusChangedLastTime > 0) {
|
||
|
|
elapsedTime = cur - focusChangedLastTime;
|
||
|
|
focusChangedLastTime = -1;
|
||
|
|
} else {
|
||
|
|
focusChangedLastTime = cur;
|
||
|
|
}
|
||
|
|
|
||
|
|
pa("ELAPSED_TIME: "+elapsedTime);
|
||
|
|
|
||
|
|
if(elapsedTime < 1500) {
|
||
|
|
// 'doubleclick'-focus should change also origo
|
||
|
|
// this does not work reasonably
|
||
|
|
// forceOrigoChange = true;
|
||
|
|
forceOrigoChange = false;
|
||
|
|
} else { ZZUpdateManager.chg(); }
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if(id.equals("ChangeOrigo") || forceOrigoChange) {
|
||
|
|
double[] vvp = M.mapToVirtualView(pt.x, pt.y);
|
||
|
|
// new origo is wanted to be in the center of realview
|
||
|
|
double[] realOrigo = M.mapToVirtualView(M.RealView[0]>>1,
|
||
|
|
M.RealView[1]>>1);
|
||
|
|
M.moveOrigo(vvp[0]-realOrigo[0], vvp[1]-realOrigo[1]);
|
||
|
|
M.cellRepr();
|
||
|
|
ZZUpdateManager.chg();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public ZOb newZOb(String id) {
|
||
|
|
if(id.equals("View1"))
|
||
|
|
return new AwtView1();
|
||
|
|
else
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
// This is really hacky part...
|
||
|
|
static ZZCell curAct;
|
||
|
|
static void a(String key, String act) { a(key, act, null); }
|
||
|
|
static void a(String key, String act, ZZCell next) {
|
||
|
|
curAct = curAct.N("d.2", 1);
|
||
|
|
curAct.setText(key);
|
||
|
|
ZZCell n = curAct.N("d.1", 1);
|
||
|
|
n.setText("Awtool." + act);
|
||
|
|
if(next != null)
|
||
|
|
next.insert("d.3", 1, n);
|
||
|
|
}
|
||
|
|
|
||
|
|
static void actions(ZZCell start) {
|
||
|
|
ZZCell awtact = start; awtact.setText("Awtool mode");
|
||
|
|
ZZCell nchar = awtact.N("d.1",1); nchar.setText("Nile char");
|
||
|
|
ZZCell nword = nchar.N("d.1", 1); nword.setText("Nile word");
|
||
|
|
ZZCell nsent = nword.N("d.1", 1); nsent.setText("Nile sent");
|
||
|
|
ZZCell npara = nsent.N("d.1", 1); npara.setText("Nile para");
|
||
|
|
|
||
|
|
ZZCell ncommon = npara.N("d.1", 1); ncommon.setText("Nile common");
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
curAct = nword;
|
||
|
|
// Annoying - these should be structurally
|
||
|
|
// describable!!!
|
||
|
|
a("MouseClicked1", "MouseSetCursor 0 WORD");
|
||
|
|
a("Backspace", "BackSpace 0 WORD");
|
||
|
|
a("Delete", "Delete 0 WORD");
|
||
|
|
a("Alt-Backspace", "Delete 0 WORD");
|
||
|
|
a("Ctrl-P", "Tunnel - WORD"); // P for pull
|
||
|
|
a("Ctrl-T", "Transcopy - WORD");
|
||
|
|
a("Left", "Cursor - WORD");
|
||
|
|
a("Right", "Cursor + WORD");
|
||
|
|
a("Shift-Left", "AdjLeft - WORD");
|
||
|
|
a("Shift-Right", "AdjRight + WORD");
|
||
|
|
a("Ctrl-Left", "AdjRight - WORD");
|
||
|
|
a("Ctrl-Right", "AdjLeft + WORD");
|
||
|
|
a("Alt-Left", "Hop - WORD");
|
||
|
|
a("Alt-Right", "Hop + WORD");
|
||
|
|
a("Enter", "BreakParagraph 0 WORD");
|
||
|
|
|
||
|
|
a("Up", "Cursor - SENT");
|
||
|
|
a("Down", "Cursor + SENT");
|
||
|
|
a("Alt-Up", "Hop - SENT");
|
||
|
|
a("Alt-Down", "Hop + SENT");
|
||
|
|
|
||
|
|
a("INSERT", "Insert", nchar);
|
||
|
|
a("Tab", "Mode 0 SENT", nsent);
|
||
|
|
// awtool specific
|
||
|
|
a("Alt-N", "NileOnOff", awtact);
|
||
|
|
|
||
|
|
curAct = nsent;
|
||
|
|
a("MouseClicked1", "MouseSetCursor 0 SENT");
|
||
|
|
a("Backspace", "BackSpace 0 SENT");
|
||
|
|
a("Delete", "Delete 0 SENT");
|
||
|
|
a("Alt-Backspace", "Delete 0 SENT");
|
||
|
|
a("Ctrl-P", "Tunnel - SENT"); // P for push
|
||
|
|
a("Ctrl-T", "Transcopy - SENT");
|
||
|
|
a("Left", "Cursor - SENT");
|
||
|
|
a("Right", "Cursor + SENT");
|
||
|
|
a("Shift-Left", "AdjLeft - SENT");
|
||
|
|
a("Shift-Right", "AdjRight + SENT");
|
||
|
|
a("Ctrl-Left", "AdjRight - SENT");
|
||
|
|
a("Ctrl-Right", "AdjLeft + SENT");
|
||
|
|
a("Alt-Left", "Hop - SENT");
|
||
|
|
a("Alt-Right", "Hop + SENT");
|
||
|
|
a("Enter", "BreakParagraph 0 SENT");
|
||
|
|
|
||
|
|
a("Up", "Cursor - PARA");
|
||
|
|
a("Down", "Cursor + PARA");
|
||
|
|
a("Alt-Up", "Hop - PARA");
|
||
|
|
a("Alt-Down", "Hop + PARA");
|
||
|
|
|
||
|
|
a("INSERT", "Insert", nchar);
|
||
|
|
a("Tab", "Mode 0 CHAR", nchar);
|
||
|
|
// awtool specific
|
||
|
|
a("Alt-N", "NileOnOff", awtact);
|
||
|
|
|
||
|
|
/*
|
||
|
|
curAct = npara;
|
||
|
|
a("MouseClicked1", "MouseSetCursor 0 PARA");
|
||
|
|
a("Backspace", "BackSpace 0 PARA");
|
||
|
|
a("Delete", "Delete 0 PARA");
|
||
|
|
a("Alt-Backspace", "Delete 0 PARA");
|
||
|
|
a("Left", "Cursor - PARA");
|
||
|
|
a("Right", "Cursor + PARA");
|
||
|
|
a("Shift-Left", "AdjLeft - PARA");
|
||
|
|
a("Shift-Right", "AdjRight + PARA");
|
||
|
|
a("Ctrl-Left", "AdjRight - PARA");
|
||
|
|
a("Ctrl-Right", "AdjLeft + PARA");
|
||
|
|
a("Alt-Left", "Hop - PARA");
|
||
|
|
a("Alt-Right", "Hop + PARA");
|
||
|
|
|
||
|
|
a("INSERT", "Insert");
|
||
|
|
a("Tab", "Mode 0 CHAR", nchar);
|
||
|
|
*/
|
||
|
|
|
||
|
|
curAct = nchar;
|
||
|
|
a("MouseClicked1", "MouseSetCursor 0 CHAR");
|
||
|
|
a("Left", "Cursor - CHAR");
|
||
|
|
a("Right", "Cursor + CHAR");
|
||
|
|
a("Backspace", "BackSpace 0 CHAR");
|
||
|
|
a("Delete", "Delete 0 CHAR");
|
||
|
|
a("Alt-Backspace", "Delete 0 CHAR");
|
||
|
|
a("INSERT", "Insert");
|
||
|
|
a("Tab", "Mode 0 WORD", nword);
|
||
|
|
a("Enter", "BreakParagraph 0 CHAR");
|
||
|
|
|
||
|
|
a("Ctrl-C", "PUICopy 0 CHAR");
|
||
|
|
|
||
|
|
a("Up", "Cursor - WORD");
|
||
|
|
a("Down", "Cursor + WORD");
|
||
|
|
// awtool specific
|
||
|
|
a("Alt-N", "NileOnOff", awtact);
|
||
|
|
|
||
|
|
// awtool acts
|
||
|
|
curAct = awtact;
|
||
|
|
a("MouseStartDrag", "StartDrag");
|
||
|
|
a("MouseDragged1", "Dragged");
|
||
|
|
a("MouseReleased1", "StopDrag");
|
||
|
|
a("Shift-MouseStartDrag", "StartCreatingNote");
|
||
|
|
a("Shift-MouseDragged1", "CreatingNote");
|
||
|
|
a("Shift-MouseReleased1", "StopCreatingNote");
|
||
|
|
a("Shift-MouseClicked3", "ChangeOrigo");
|
||
|
|
a("MouseClicked3", "FocusOrigoAndSelect");
|
||
|
|
a("Shift-MouseClicked1", "SetCursor2");
|
||
|
|
a("MouseClicked1", "SetCursor1");
|
||
|
|
a("l", "NewLink");
|
||
|
|
a("m", "ChangeMetrics");
|
||
|
|
a("g", "GridOnOff");
|
||
|
|
a("r", "ResetOrigo");
|
||
|
|
a("Alt-N", "NileOnOff", nchar);
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|