diff -r 000000000000 -r d760517a8095 uidesigner/com.nokia.carbide.cpp.uiq.components/components/editorLibrary.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uidesigner/com.nokia.carbide.cpp.uiq.components/components/editorLibrary.js Tue Mar 24 22:20:21 2009 -0500
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+include("containerLibrary.js")
+include("embeddedControlImplLibrary.js")// for isSettingItemList
+
+editorLibraryStrings = getLocalizedStrings("editorLibrary");
+
+/**
+ * Set up rendering support for editor components. This clears out
+ * a rectangle of the component's size and draws text inside it
+ * according to a component-specific formatter and MFNE layout.
+ * This sets up a component to appear in a form.
+ *
+ * @param prototype the prototype to add IVisualAppearance to.
+ * The prototype must implement these functions:
+ *
+ *
+ * getDisplayText(instance): return the text formatted for display
+ * (may be empty or null). Return the entire
+ * string, even if longer than getMaxLength()
+ *
+ * getMaxLength(instance): return the character limit on the text
+ *
+ * getFlags(instance, laf): return an IFont#xxx mask desribing
+ * parameters to font.drawFormattedString()
+ *
+ */
+function setupEditorRendering(prototype) {
+ prototype.drawContent = function(instance, laf, graphics, rect) {
+ var properties = instance.properties;
+
+ if( properties.isVisible != null && properties.isVisible == false)
+ return;
+
+ var flags = this.getFlags(instance, laf);
+ if (isSettingItemList(instance.parent)) {
+ flags = (flags & ~Font.ALIGN_MASK) | Font.ALIGN_CENTER;
+
+ // white on blue doesn't look good antialiased
+ flags = (flags & ~Font.ANTIALIAS_MASK) | Font.ANTIALIAS_OFF;
+ }
+
+ var font = this.getFont(instance, laf);
+ if (font == null)
+ font = laf.getFont("NormalFont");
+
+ graphics.setFont(font);
+
+ //graphics.setBackground(laf.getColor("CAknSettingItemList.ContentBackground"));
+ graphics.setBackground(getBackgroundColor(instance, laf));
+ graphics.fillRectangle(rect);
+
+ var color = null;
+ if (prototype.getDisplayColor) {
+ color = prototype.getDisplayColor(instance, laf);
+ }
+ if (color == null && isSettingItemList(instance.parent))
+ color = laf.getColor("CAknSettingItemList.ContentForeground");
+
+ if (color == null)
+ color = laf.getColor("EEikColorControlText");
+ graphics.setForeground(color);
+
+ var text = "" + this.getDisplayText(instance);
+ if (instance.isInstanceOf("com.nokia.carbide.uiq.CEikEdwinBase"))
+ text = text.replace(/\n/,"");
+ else
+ text = chooseScalableText(text, font, rect.width);
+ var maxLength = this.getMaxLength(instance);
+ if (maxLength == 0 || text.length <= maxLength) {
+ // in settings list, blank text is replaced
+ if ((!text || text == "") && isSettingItemList(instance.parent)) {
+ text = instance.properties.itemEmptyText;
+ if (!text || text == "")
+ text = editorLibraryStrings.getString("EmptyText");
+ }
+
+ graphics.drawFormattedString(text, rect, flags, 0);
+ } else {
+ var visibleText = text.substring(0, maxLength);
+ var truncatedText = text.substring(maxLength);
+
+ var visibleSize = font.formattedStringExtent(visibleText, new Point(rect.width, rect.height), flags, 0);
+ var truncatedSize = font.formattedStringExtent(truncatedText, new Point(rect.width, rect.height), flags, 0);
+
+ // indicate truncated text
+ if (false) {
+ // dim background of truncated part
+ graphics.setBackground(laf.getColor("EEikColorControlHighlightBackground"));
+ graphics.fillRectangle(rect.x + visibleSize.x, rect.y, truncatedSize.x, rect.height);
+ graphics.drawFormattedString(text, rect, flags, 0);
+ } else {
+ // dim letters of truncated part
+ graphics.drawFormattedString(visibleText, rect, flags, 0);
+ graphics.setForeground(Colors.getColor(200, 200, 200));
+ rect.x += visibleSize.x;
+ graphics.drawFormattedString(truncatedText, rect, flags, 0);
+ }
+ }
+
+ }
+
+ prototype.getContentSize = function(instance, laf, size) {
+ var properties = instance.properties;
+ var isInForm = isForm(instance.parent);
+
+ var font = this.getFont(instance, laf);
+ if (font == null)
+ font = laf.getFont("NormalFont");
+
+ var flags = this.getFlags(instance, laf);
+ var text = this.getDisplayText(instance);
+ if (text == null || text == "")
+ text = "Temporary"; // provide enough space so click-added
+ // editor has some perceivable width
+
+ // use wrapping width to get adjusted height
+ var size = font.formattedStringExtent(text, size, flags, 0);
+
+ // this property is not necessarily present, in which case only one line is used
+ var lines = properties.lines;
+ if (isNaN(lines) || lines < 1)
+ lines = 1;
+
+ var linesHeight = getFontHeight(font) * lines;
+ var textHeight = size.y;
+
+ // this property flag is not necessarily present, in which case this code falls through
+ var isResizable = 'flags' in properties
+ && 'EEikEdwinResizable' in properties.flags
+ && properties.flags.EEikEdwinResizable;
+
+ //println("lines("+lines+"), linesHeight(" + linesHeight + "), textHeight(" + textHeight + "), resizable(" + isResizable + ")");
+
+ if (isResizable && (textHeight > linesHeight))
+ size.y = textHeight;
+ else if (!isInForm)
+ size.y = linesHeight; // don't resize if in container
+
+ return size;
+ }
+
+ // now make this form-able
+ setupEmbeddedRendering(prototype);
+
+}
+
+
+
+/**
+ * Format the number to have zeroes on the left.
+ */
+function padWithZeroes(number, count) {
+ var str = "" + number;
+ if (str.length >= count)
+ return str;
+ var zeroes = "0000000000000000000".substring(0, count);
+ return zeroes.substring(0, count - str.length) + str;
+}
+
+/**
+ * Format the number to have spaces on the left.
+ */
+function padWithSpaces(number, count) {
+ var str = "" + number;
+ if (str.length >= count)
+ return str;
+ var zeroes = " ".substring(0, count);
+ return zeroes.substring(0, count - str.length) + str;
+}
+
+/**
+ * Format a time the way S60 would. This is piggishly restricted
+ * to the American format, since S60 has some weirdness with formatting
+ * (hiding hours -- but not AM/PM!, and hiding seconds) which would make
+ * our task of mirroring these in a locale-dependent way too difficult.
+ *
+ * Likely it would be better to use a format string in the future.
+ */
+
+function formatTime(h, m, s, showHours, showMinutes, showSeconds, showAmPm) {
+ var str = "";
+ var suffix = "";
+
+ if (showAmPm) {
+ if (h >= 12) {
+ h -= 12;
+ suffix = " PM";
+ } else {
+ suffix = " AM";
+ }
+ if (h == 0)
+ h = 12;
+ }
+
+ if (showHours) {
+ str += padWithZeroes(h, 2) + ":";
+ }
+
+ if (showMinutes) {
+ str += padWithZeroes(m, 2);
+ }
+
+ if (showSeconds) {
+ str += ":" + padWithZeroes(s, 2);
+ }
+
+ str += suffix;
+
+ return str;
+
+}
+
+/**
+ * Format a date the way S60 would.
+ */
+
+function formatDate(d) {
+ return formatDateDMY(d.day, d.month, d.year);
+}
+
+function formatDateDMY(day, month, year) {
+ var str = "";
+ str = padWithZeroes(day - 0 + 1, 2) + "/" +
+ padWithZeroes(month - 0 + 1, 2) + "/" +
+ padWithZeroes(year, 4);
+ return str;
+
+}
+
+function commonEditorGetFlags(instance, laf) {
+ var properties = instance.properties;
+ var flags = 0;
+
+ if (properties.alignment == undefined)
+ return flags;
+
+ switch (properties.alignment) {
+ case "EAknEditorAlignCenter":
+ flags = Font.ALIGN_CENTER; break;
+ case "EAknEditorAlignLeft":
+ flags = Font.ALIGN_LEFT; break;
+ case "EAknEditorAlignRight":
+ flags = Font.ALIGN_RIGHT; break;
+ }
+
+ return flags;
+}
+
+var CONTROL_ID = "com.nokia.sdt.series60.CCoeControl";
+
+function isControl(instance) {
+ return instance.componentId == CONTROL_ID;
+}
+