📄 panel.java
字号:
int n = currentPointer - 1;
Component c = (Component) hotpots.get(n);
if (!componentInScreen(c) || c.getTop() < getTop() + verticalOffset + getTopHeight()) { //不在当前屏幕内,不管
verticalOffset -= getFont().getHeight() + Component.HORPADDING;
verticalOffset = verticalOffset < 0 ? 0 : verticalOffset;
findPointerInCurrentScreen(false);
} else {
((Component) hotpots.get(currentPointer)).setSelected(false);
c.setSelected(true);
currentPointer = n;
if (showscrollbar && verticalOffset > c.getTop()) {
verticalOffset = c.getTop();
}
}
return true;
}
} else if (key == Settings.VKEY_DOWN || key == Settings.VKEY_NUM8) { //下
if (currentPointer > hotpots.size() - 2) { //整个panel根本就没有热点
//分两种情况判断
if (hotpots.size() == 0 || !recycle) { //
if (showscrollbar) {
verticalOffset += getFont().getHeight() + Component.HORPADDING;
verticalOffset = verticalOffset > internalHeight - viewportHeight ? internalHeight
- viewportHeight : verticalOffset;
}
} else {
int n = 0;
Component c = (Component) hotpots.get(n);
((Component) hotpots.get(currentPointer)).setSelected(false);
c.setSelected(true);
currentPointer = n;
verticalOffset = 0;
// if (showscrollbar) {
// verticalOffset = c.getTop();
// if (internalHeight - c.getTop() < viewportHeight) {
// verticalOffset = internalHeight - viewportHeight;
// }
// } else {
// verticalOffset = 0;
// }
}
return true;
} else {
int n = currentPointer + 1;
Component c = (Component) hotpots.get(n);
if (!componentInScreen(c)) { //不在当前屏幕内,不管
verticalOffset += getFont().getHeight() + Component.HORPADDING;
verticalOffset = verticalOffset > internalHeight - viewportHeight ? internalHeight - viewportHeight
: verticalOffset;
findPointerInCurrentScreen(true);
} else {
((Component) hotpots.get(currentPointer)).setSelected(false);
c.setSelected(true);
currentPointer = n;
}
return true;
}
} else if (key == Settings.VKEY_FIRE || key == Settings.VKEY_NUM5) {
if (currentPointer == -1) {
return false;
}
Component c = (Component) hotpots.get(currentPointer);
return generateEvent(c);
} else if (key == Settings.VKEY_LEFT || key == Settings.VKEY_NUM4) {
if (animateDir == Settings.ANIMATE_NONE) {
if (viewportHeight < internalHeight) {
scrollCount = Settings.SCROLL_COUNT;
animateDir = Settings.ANIMATE_UP;
}
}
} else if (key == Settings.VKEY_RIGHT || key == Settings.VKEY_NUM6) {
//System.out.println("here......");
if (animateDir == Settings.ANIMATE_NONE) {
if (viewportHeight < internalHeight) {
scrollCount = Settings.SCROLL_COUNT;
animateDir = Settings.ANIMATE_DOWN;
}
}
} else if (key == Settings.VKEY_LSOFT || key == Settings.VKEY_STAR) {
if (getCommandListener() != null && leftCmd != null) {
if (null == leftPopup) {
getCommandListener().commandAction(leftCmd, null);
repaint = true;
} else {
mainCanvas.showPopup(leftPopup, Settings.ANIMATE_UP);
}
}
} else if (key == Settings.VKEY_RSOFT || key == Settings.VKEY_POUND) {
if (getCommandListener() != null && rightCmd != null) {
if (null == rightPopup) {
getCommandListener().commandAction(rightCmd, null);
repaint = true;
} else {
mainCanvas.showPopup(rightPopup, Settings.ANIMATE_UP);
}
}
} else if (key == Settings.VKEY_RETURN) {
return vkeyReturn();
} else if (key == Settings.VKEY_DELETE) {
return vkeyDelete();
}
return repaint;
}
public boolean vkeyReturn() {
return false;
}
public boolean vkeyDelete() {
return false;
}
/**
* 执行快捷键
*/
private boolean executeShortCut(int key) {
for (int i = 0; i < hotpots.size(); i++) {
Component c = (Component) hotpots.get(i);
if (c.getShortCut() == key) {
generateEvent(c);
return true;
}
}
return false;
}
private boolean generateEvent(Component c) {
c.setCommandListener(this);
if (c instanceof InputBlock) {
setCurrent(new RowTextBox((InputBlock) hotpots.get(currentPointer), this));
return false;
} else if (c instanceof DropList) {
new DropPanel((DropList) c, verticalOffset).show();
return false;
} else if (c instanceof SpinButton) {
return c.keyReleased(Settings.VKEY_FIRE);
} else {
return c.generateEvent();
}
}
/**
* DisplayableBlock是否在当前屏幕
* @param cmp
* @param top
* @return
*/
private boolean componentInScreen(Component cmp) {
return (cmp.getTop() + cmp.getHeight() > getTop() + getTopHeight() + verticalOffset && cmp.getTop() < getTop()
+ verticalOffset + getHeight() - getBottomHeight());
}
public void addCommand(Command c) {
if (c.getCommandType() != Command.EXIT) {
leftCmd = c;
leftPopup = null;
} else {
rightCmd = c;
rightPopup = null;
rightString = c.getLabel();
}
}
public void removeCommands() {
leftCmd = null;
rightCmd = null;
}
public void addCommand(Command popupCmd, PopMenu menu) {
if (popupCmd.getCommandType() != Command.EXIT) {
leftCmd = popupCmd;
leftPopup = menu;
leftPopup.validate();
if (PopMenu.alignLeft) {
leftPopup.setLocation(1, mainCanvas.getHeight() - leftPopup.getHeight() - getBottomHeight());
} else {
leftPopup.setLocation(getWidth() - 1 - leftPopup.getWidth(), mainCanvas.getHeight()
- leftPopup.getHeight() - getBottomHeight());
}
} else {
rightCmd = popupCmd;
rightPopup = menu;
rightPopup.validate();
if (PopMenu.alignLeft) {
rightPopup.setLocation(getWidth() - 1 - rightPopup.getWidth(), mainCanvas.getHeight()
- rightPopup.getHeight() - getBottomHeight());
} else {
rightPopup.setLocation(1, mainCanvas.getHeight() - rightPopup.getHeight() - getBottomHeight());
}
}
}
/**
* Removes all components from this panel. Its does not remove the commands
*
*/
public void removeAll() {
animateDir = Settings.ANIMATE_NONE;
currentPointer = -1;
verticalOffset = 0;
internalHeight = 0;
components = new ArrayList();
hotpots = new ArrayList();
}
public boolean clock() {
boolean repaint = false;
int scroll = Settings.SCROLL_STEP;
if (!Configure.enableAnimate) {
scroll *= Settings.SCROLL_COUNT;
scrollCount = 1;
// System.out.println("scroll = " + scroll);
}
if (animateDir == Settings.ANIMATE_UP) {
verticalOffset -= scroll;
--scrollCount;
if (verticalOffset <= 0) {
verticalOffset = 0;
scrollCount = 0;
}
if (scrollCount <= 0) {
animateDir = Settings.ANIMATE_NONE;
findPointerInCurrentScreen(false);
}
return true;
}
if (animateDir == Settings.ANIMATE_DOWN) {
verticalOffset += scroll;
--scrollCount;
if (verticalOffset > internalHeight - viewportHeight) {
verticalOffset = internalHeight - viewportHeight;
scrollCount = 0;
}
if (scrollCount <= 0) {
animateDir = Settings.ANIMATE_NONE;
findPointerInCurrentScreen(true);
}
return true;
}
if (pointerPressed && !pointerInscrollbar) {
if (null != pressedComponent) {
pointerPressedtime = System.currentTimeMillis();
return keyRepeated(Settings.VKEY_FIRE);
}
//System.out.println(System.currentTimeMillis() - pointerPressedtime);
if (System.currentTimeMillis() - pointerPressedtime > 2000) {
setBusymode(true, lastPointerX, lastPointerY);
}
return true;
}
for (int i = 0; i < components.size(); i++) {
Row row = (Row) components.get(i);
if (row.getTop() + row.getHeight() < verticalOffset) {
continue;
}
if (row.getTop() > verticalOffset + viewportHeight) {
break;
}
if (row.isAnimated(verticalOffset, viewportHeight)) {
row.clock(verticalOffset, viewportHeight);
repaint = true;
}
}
return repaint;
}
/**
* 查找当前屏幕上的下一个热点
* @param lookfor true表示向后查找
*/
private void findPointerInCurrentScreen(boolean lookfor) {
if (currentPointer != -1) {
Component c = (Component) hotpots.get(currentPointer);
if (componentInScreen(c)) {
return;
}
}
if (lookfor) {
for (int i = currentPointer + 1; currentPointer != -1 && i < hotpots.size(); i++) {
Component c = (Component) hotpots.get(i);
if (componentInScreen(c)) {
((Component) hotpots.get(currentPointer)).setSelected(false);
currentPointer = i;
((Component) hotpots.get(currentPointer)).setSelected(true);
break;
}
}
} else {
for (int i = currentPointer - 1; currentPointer != -1 && i > -1; i--) {
Component c = (Component) hotpots.get(i);
if (componentInScreen(c)) {
((Component) hotpots.get(currentPointer)).setSelected(false);
currentPointer = i;
((Component) hotpots.get(currentPointer)).setSelected(true);
break;
}
}
}
}
public void internalValidateEvent(Component c) {
if (mainCanvas != null) {
internalHeight -= c.getHeight();
c.setWidth((getWidth() - Settings.SCROLLBAR_WIDTH));
c.validate();
internalHeight += c.getHeight();
mainCanvas.repaint();
}
}
public void setCurrent(Displayable d) {
if (mainCanvas != null) {
Handset.getDisplay().setCurrent(d);
}
}
public void setContainerCurrent() {
if (mainCanvas != null) {
//control.setContainerCurrent();
}
}
synchronized public void validate() {
// Row memory = new Row();
// memory.add(new TextBlock(Demo.memory()));
// add(memory);
//onActive();
int width = mainCanvas.getWidth();
viewportHeight = mainCanvas.getHeight() - getTopHeight() - getBottomHeight();
//System.out.println("viewportHeight = " + viewportHeight + "/" + control.getHeight());
showscrollbar = false;
internalHeight = 0;
verticalOffset = 0;
//首先,假设不需要滚动条
int top = getTopHeight();
for (int i = 0; i < components.size(); ++i) {
Row c = (Row) components.get(i);
c.setInnerTop(top);
c.setWidth(width);
c.validate();
internalHeight += c.getHeight();
top += c.getHeight();
if (internalHeight > viewportHeight) { //需要滚动条
this.showscrollbar = true;
break;
}
}
if (!showscrollbar) {
setWidth(width);
setHeight(mainCanvas.getHeight());
resetPointer();
return;
}
//需要滚动条,重新计算
showscrollbar = true;
internalHeight = 0;
width -= Settings.SCROLLBAR_WIDTH;
top = getTopHeight();
for (int i = 0; i < components.size(); ++i) {
Row c = (Row) components.get(i);
c.setInnerTop(top);
c.setWidth(width);
c.validate();
internalHeight += c.getHeight();
top += c.getHeight();
// System.out.println("row[" + i + "]:" + c.getClass().getName()
// + ", innertop = " + c.getInnerTop() + ", innerleft = "
// + c.getInnerLeft());
}
internalHeight += 5;
setWidth(width);
scrollbarHeight = viewportHeight * viewportHeight / internalHeight;
scrollbarHeight = scrollbarHeight < 16 ? 16 : scrollbarHeight;
setHeight(mainCanvas.getHeight());
resetPointer();
}
public int getTopHeight() {
if (showTitle) {
return 20;
}
return 0;
}
protected void drawScrollbar(Graphics g, int adjustx, int adjusty) {
int width = getWidth();
if (showscrollbar) {
width += Settings.SCROLLBAR_WIDTH;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -