📄 stringitem.java
字号:
*/ int callPreferredHeight(int w) { if (w == -1) { w = DEFAULT_WIDTH; } if (isButton()) { int buttonPad = 2 * (BUTTON_BORDER + BUTTON_PAD); int prefH = Text.getTwoStringsHeight(label, str, LABEL_FONT, font, w - buttonPad, LABEL_PAD); return (prefH > 0 ? prefH + buttonPad : 0); } return Text.getTwoStringsHeight(label, str, LABEL_FONT, font, w, LABEL_PAD); } /** * Determine if this Item should have a newline before it * * @return true if it should have a newline before */ boolean equateNLB() { // If label starts with a\n, // put this StringItem on a newline no matter what if (label != null && label.length() > 0) { if (label.charAt(0) == '\n') { return true; } } else if (str != null && str.length() > 0) { // If there is no label and our content starts with a \n, // this StringItem starts on a newline if (str.charAt(0) == '\n') { return true; } } else { // empty StringItem return false; } if ((layout & Item.LAYOUT_2) == Item.LAYOUT_2) { return ((layout & Item.LAYOUT_NEWLINE_BEFORE) == Item.LAYOUT_NEWLINE_BEFORE); } // in MIDP1.0 new any StringItem with a non-null label would // go on a new line return label != null && label.length() > 0; } /** * Determine if this Item should have a newline after it * * @return true if it should have a newline after */ boolean equateNLA() { // If content ends with a \n, // there is a newline after this StringItem no matter what if (str != null && str.length() > 0) { if (str.charAt(str.length() - 1) == '\n') { return true; } } else if (label != null && label.length() > 0) { // If there is no content and our label ends with a \n, // there is a newline after this StringItem if (label.charAt(label.length() - 1) == '\n') { return true; } } else { // empty StringItem return false; } if ((layout & Item.LAYOUT_2) == Item.LAYOUT_2) { return ((layout & Item.LAYOUT_NEWLINE_AFTER) == Item.LAYOUT_NEWLINE_AFTER); } return false; } /** * Determine if Form should not traverse to this StringItem * * @return true if Form should not traverse to this StringItem */ boolean shouldSkipTraverse() { if ((label == null || label.length() == 0) && (str == null || str.length() == 0)) { return true; } return skipTraverse; } /** * Paint this StringItem * * @param g the Graphics object to paint to * @param width the width of this item * @param height the height of this item */ void callPaint(Graphics g, int width, int height) { int w = width; int h = height; int translateY = 0; int translateX = 0; if (isButton()) { translateX = translateY = BUTTON_BORDER + BUTTON_PAD; w -= 2*translateX; h -= 2*translateY; g.translate(translateX, translateY); } Font lFont = (LABEL_BOLD_ON_TRAVERSE && !hasFocus) ? Screen.CONTENT_FONT : LABEL_FONT; int labelHeight = getLabelHeight(w); int offset = Text.paint(label, lFont, g, w, labelHeight, 0, Text.NORMAL, null); if (offset > 0) { offset += LABEL_PAD; } int mode = Text.NORMAL; if (numCommands > 0 && appearanceMode == Item.HYPERLINK) { mode = hasFocus ? (Text.INVERT | Text.HYPERLINK) : (Text.NORMAL | Text.HYPERLINK); } int yOffset = labelHeight; if (labelHeight > 0) { yOffset -= (lFont.getHeight() < font.getHeight() ? lFont.getHeight() : font.getHeight()); } g.translate(0, yOffset); translateY += yOffset; Text.paint(str, font, g, w, h - yOffset, offset, mode, null); g.translate(-translateX, -translateY); if (isButton()) { drawButtonBorder(g, 0, 0, width, height, hasFocus); } } /** * Called by the system to signal a key press * * @param keyCode the key code of the key that has been pressed * @see #getInteractionModes */ void callKeyPressed(int keyCode) { if (keyCode != Display.KEYCODE_SELECT) { return; } // StringItem takes focus only if there are one or more Item Commands // attached to it if (!(getCommandCount() > 0) || commandListener == null) { return; } ItemCommandListener cl = null; Command defaultCmd = null; synchronized (Display.LCDUILock) { cl = commandListener; defaultCmd = defaultCommand; } // synchronized // SYNC NOTE: The call to the listener must occur outside // of the lock if (cl != null) { try { // SYNC NOTE: We lock on calloutLock around any calls // into application code synchronized (Display.calloutLock) { if (defaultCmd != null) { cl.commandAction(defaultCmd, this); } else { // REMINDER : Needs HI decision // either call the first command // from the command list or // invoke the menu } } } catch (Throwable thr) { Display.handleThrowable(thr); } } } /** * Adds a context sensitive Command to the item. * @param cmd the command to be removed */ void addCommandImpl(Command cmd) { synchronized (Display.LCDUILock) { // The super class will update the command set of the Form super.addCommandImpl(cmd); if ((numCommands >= 1) && (appearanceMode == Item.PLAIN)) { // restore the value of the original appearanceMode // if it is a button // otherwise simple change the appearanceMode // to hyperlink this.appearanceMode = originalAppearanceMode == Item.BUTTON ? Item.BUTTON : Item.HYPERLINK; } checkTraverse(); invalidate(); } // synchronized } /** * Removes the context sensitive command from item. * @param cmd the command to be removed */ void removeCommandImpl(Command cmd) { synchronized (Display.LCDUILock) { // The super class will update the command set of the Form super.removeCommandImpl(cmd); if ((numCommands < 1) && (appearanceMode != Item.PLAIN)) { // store value of the original appearanceMode originalAppearanceMode = this.appearanceMode; // change the appearanceMode to plain this.appearanceMode = Item.PLAIN; } checkTraverse(); invalidate(); } // synchronized } /** * Check that given the label, text, and commands, Form * should traverse this StringItem. Updates the internal * 'skipTraverse' variable. */ private void checkTraverse() { if (str == null && label == null) { skipTraverse = true; } else if (str == null && label.trim().equals("")) { skipTraverse = true; } else if (label == null && str.trim().equals("")) { skipTraverse = true; } else { skipTraverse = false; } } /** * Determines if this StringItem should be rendered with the button border. * @return true if the StringItem should be rendered with * the button border, false - otherwise */ private boolean isButton() { return (numCommands > 0 && appearanceMode == Item.BUTTON); } /** The text of this StringItem */ private String str; /** The Font to render this StringItem's text in */ private Font font; /** The appearance hint */ private int appearanceMode; /** The original appearance hint before switching */ private int originalAppearanceMode; /** Minimum height for one line */ private int minimumLineHeight; /** * An internal flag. True if Form should not traverse * to this StringItem */ private boolean skipTraverse; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -