📄 mapcanvas.java
字号:
}
public Float getSpeed()
{
if(m_lastLocation == null)
return new Float(0L);
else
return m_lastLocation.speed;
}
public Float getDir()
{
if(m_lastLocation == null)
return new Float(0L);
else
return m_lastLocation.m_dir;
}
public Float getAlt()
{
if(m_lastLocation == null)
return new Float(0L);
else
return m_lastLocation.speed;
}
public static Float convLat(int fromY)
{
Float orig = new Float(0x1000000L);
Float res = new Float(fromY);
Float div = orig.Div(Float.PI).Neg();
res = Float.exp(res.Sub(orig).Div(div));
res = Float.toDegrees(Float.atan(res).Mul(2L).Sub(Float.PIdiv2));
return res;
}
public boolean selNext(int dir)
{
if(listPlaces.size() != 0)
{
int pos = 0;
if(currentSel != null)
pos = listPlaces.indexOf(currentSel) + dir;
if(pos >= listPlaces.size())
pos = 0;
if(pos < 0)
pos = listPlaces.size() - 1;
setSelectedLoc((OneLoc)listPlaces.elementAt(pos));
if(UtilMidp.DEBUG)
System.out.println("new pos:" + pos);
gotoLonLat(currentSel.m_lon, currentSel.m_lat, zoom, m_modeSat);
wayPoint = currentSel;
if(m_autoPositionningEnabeld)
m_autoTrack = false;
repaint();
return true;
} else
{
return false;
}
}
public void setInfoOnScreen(String inInfo)
{
infoOnScreen = inInfo;
infoTimeStamp = System.currentTimeMillis();
repaint();
}
int drawAnIcon(Graphics g, int id, String val, int x, int y)
{
int size = g.getFont().stringWidth(val) + 8;
x -= size - 2;
g.setColor(0);
g.fillRoundRect(x, y, size, sizeIcon, 6, 6);
g.setColor(0xffffff);
g.drawRoundRect(x, y, size, sizeIcon, 6, 6);
g.drawString(val, x + size / 2, y, 17);
offset[id][0] = x;
offset[id][1] = size;
return size;
}
public void paintIcons(Graphics g)
{
g.setFont(fontm);
int h = g.getFont().getHeight();
sizeIcon = h;
posPlusIcon = (offx + width) - 4;
int x = posPlusIcon;
int y = 4 + offy;
x -= drawAnIcon(g, 0, "X", x, y) + 4;
x -= drawAnIcon(g, 1, "+", x, y) + 4;
x -= drawAnIcon(g, 2, "-", x, y) + 4;
x -= drawAnIcon(g, 3, m_modeSat ? "Map" : "Sat", x, y) + 4;
x -= drawAnIcon(g, 4, ">", x, y) + 4;
}
int getIconPressed(int x, int y)
{
if(y >= 4 && y <= 4 + sizeIcon)
{
for(int i = 0; i < offset.length; i++)
if(x >= offset[i][0] && x <= offset[0][0] + offset[0][1])
return i;
}
return -1;
}
protected void pointerPressed(int x, int y)
{
int icoIdx = getIconPressed(x, y);
switch(icoIdx)
{
case 0: // '\0'
m_fullScreen = !m_fullScreen;
setFullScreenMode(m_fullScreen);
if(m_fullScreen)
setInfoOnScreen("FullScreen");
else
setInfoOnScreen("Normal");
break;
case 1: // '\001'
setInfoOnScreen("Zoom +");
setZoom(zoom - 1);
break;
case 2: // '\002'
setInfoOnScreen("Zoom -");
setZoom(zoom + 1);
break;
case 3: // '\003'
changeSatMode();
break;
case 4: // '\004'
keyPressedImpl(48);
break;
}
if(icoIdx == -1)
{
dgx = x;
dgy = y;
OneLoc oldLoc = currentSel;
setSelectedLoc(getSelectedItem(null, px + (dgx - width / 2) * (1 << zoom), py + (dgy - height / 2) * (1 << zoom), zoom, 10, false));
if(oldLoc == currentSel)
{
boolean doIt = true;
Enumeration en = m_listTrack.elements();
do
{
if(!en.hasMoreElements())
break;
Track tr = (Track)en.nextElement();
if(tr.listPlaces.contains(currentSel))
doIt = !tr.fireOpened(currentSel);
} while(true);
if((currentSel != null) & doIt)
fireOnLocationSelected(currentSel);
}
}
repaint();
}
protected void checkMove()
{
if(px == oldpx && py == oldpy && oldzoom == zoom)
{
if(lastMove != 0L && System.currentTimeMillis() - lastMove > 3000L)
{
lastMove = 0L;
Enumeration en = m_listTrack.elements();
do
{
if(!en.hasMoreElements())
break;
Track tr = (Track)en.nextElement();
if(tr.m_refreshType == 1)
tr.refreshTrack(this);
} while(true);
fireOnMoveEnd();
}
} else
{
lastMove = System.currentTimeMillis();
}
oldpx = px;
oldpy = py;
oldzoom = zoom;
}
protected void setSelectedLoc(OneLoc loc)
{
if(loc != currentSel)
{
if(loc != null)
{
Enumeration en = m_listTrack.elements();
do
{
if(!en.hasMoreElements())
break;
Track tr = (Track)en.nextElement();
if(tr.listPlaces.contains(loc))
tr.fireSelected(loc);
} while(true);
}
currentSel = loc;
}
}
protected void pointerDragged(int x, int y)
{
if(UtilMidp.DEBUG)
System.out.println("dragged:" + x + " " + y);
int dx = x - dgx;
int dy = y - dgy;
px -= dx * (1 << zoom);
py -= dy * (1 << zoom);
dgx = x;
dgy = y;
repaint();
}
public void keyRepeated(int i)
{
}
public void keyPressed(int keyCode)
{
if(fireMapKeyPressed(keyCode))
keyPressedImpl(keyCode);
super.keyPressed(keyCode);
}
public void keyPressedImpl(int keyCode)
{
lastZoomTimeStamp = System.currentTimeMillis();
int action = getGameAction(keyCode);
if(UtilMidp.DEBUG)
System.out.println("code :" + keyCode + "(" + (char)keyCode + ") action:" + action);
int div = 1 << zoom;
boolean processed = false;
if(m_modeShortkey)
{
if(extendedMenu != null)
processed = extendedMenu.onMenuSelected(keyCode - 48);
m_modeShortkey = false;
repaint();
return;
}
switch(keyCode)
{
case 48: // '0'
case 100: // 'd'
setCurSat(getCurSat() + 1);
switch(getCurSat())
{
case 0: // '\0'
setInfoOnScreen("Using Google data");
break;
case 1: // '\001'
setInfoOnScreen("Using VirtualEarth data");
break;
case 2: // '\002'
setInfoOnScreen("Using Ask.com data");
break;
case 3: // '\003'
setInfoOnScreen("Using Yahoo.com data");
break;
}
zoomingMode = false;
processed = true;
break;
case 45: // '-'
case 49: // '1'
case 117: // 'u'
if(zoom < 17)
{
if(zoomingMode)
{
requestedZoom++;
if(requestedZoom == zoom)
zoomingMode = false;
} else
{
setZoom(zoom + 1);
}
setInfoOnScreen("Zoom out...");
}
processed = true;
break;
case 43: // '+'
case 51: // '3'
case 105: // 'i'
if(zoom > -2)
{
if(!zoomingMode)
{
zpx = width / 2;
zpy = height / 2;
requestedZoom = zoom;
}
if(requestedZoom > -2)
requestedZoom--;
zoomingMode = true;
setInfoOnScreen("Zoom in...");
}
processed = true;
break;
case 55: // '7'
case 111: // 'o'
if(selNext(-1))
setInfoOnScreen("Sel previous element...");
else
setInfoOnScreen("No element to select.");
processed = true;
break;
case 57: // '9'
case 112: // 'p'
if(selNext(1))
setInfoOnScreen("Sel next element...");
else
setInfoOnScreen("No element to select.");
processed = true;
break;
case 35: // '#'
case 113: // 'q'
m_displaySize = !m_displaySize;
if(m_displaySize)
setInfoOnScreen("Show scale bar");
else
setInfoOnScreen("Remove scale bar");
BufferImage.dumpState();
processed = true;
break;
case 42: // '*'
case 97: // 'a'
case 109: // 'm'
m_modeShortkey = !m_modeShortkey;
break;
case 32: // ' '
case 53: // '5'
if(!zoomingMode)
changeSatMode();
else
stopZooming();
processed = true;
break;
}
if(!processed)
if(!zoomingMode)
switch(action)
{
case 3: // '\003'
case 4: // '\004'
case 7: // '\007'
default:
break;
case 2: // '\002'
px -= 20 * div;
m_autoTrack = false;
break;
case 5: // '\005'
px += 20 * div;
m_autoTrack = false;
break;
case 1: // '\001'
py -= 20 * div;
m_autoTrack = false;
break;
case 6: // '\006'
py += 20 * div;
m_autoTrack = false;
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -