/// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderLink"]/*' /> protected void RenderLink(WmlMobileTextWriter writer, String targetUrl, String softkeyLabel, bool implicitSoftkeyLabel, bool mapToSoftkey, String text, bool breakAfter) { RenderBeginLink(writer, targetUrl, softkeyLabel, implicitSoftkeyLabel, mapToSoftkey); writer.RenderText(text); RenderEndLink(writer, targetUrl, breakAfter); }
/// <include file='doc\WmlControlAdapter.uex' path='docs/doc[@for="WmlControlAdapter.RenderPostBackEvent1"]/*' /> protected void RenderPostBackEvent( WmlMobileTextWriter writer, String argument, String softkeyLabel, bool mapToSoftkey, String text, bool breakAfter, WmlPostFieldType postBackType) { bool implicitSoftkeyLabel = false; if (mapToSoftkey) { if (softkeyLabel == null || softkeyLabel.Length == 0) { softkeyLabel = text; implicitSoftkeyLabel = true; } if (!writer.IsValidSoftkeyLabel(softkeyLabel)) { // If softkey label was specified explicitly, then truncate. if (!implicitSoftkeyLabel && softkeyLabel.Length > 0) { softkeyLabel = softkeyLabel.Substring(0, Device.MaximumSoftkeyLabelLength); } else { softkeyLabel = GetDefaultLabel(GoLabel); implicitSoftkeyLabel = true; } } } writer.RenderBeginPostBack(softkeyLabel, implicitSoftkeyLabel, mapToSoftkey); writer.RenderText(text); writer.RenderEndPostBack(Control.UniqueID, argument, postBackType, true, breakAfter); }
/// <include file='doc\WmlObjectListAdapter.uex' path='docs/doc[@for="WmlObjectListAdapter.RenderItemDetails"]/*' /> protected virtual void RenderItemDetails(WmlMobileTextWriter writer, ObjectListItem item) { String backCommandText = Control.BackCommandText.Length == 0 ? GetDefaultLabel(BackLabel) : Control.BackCommandText; String softkeyLabel = backCommandText.Length <= Device.MaximumSoftkeyLabelLength ? backCommandText : null; Style labelStyle = Control.LabelStyle; writer.EnterStyle(labelStyle); writer.RenderText(item[Control.LabelFieldIndex], true); writer.ExitStyle(labelStyle); writer.EnterStyle(Style); IObjectListFieldCollection fields = Control.AllFields; int fieldIndex = 0; foreach (ObjectListField field in fields) { if (field.Visible) { String displayText = String.Format(CultureInfo.InvariantCulture, "{0}: {1}", field.Title, item[fieldIndex]); writer.RenderText(displayText, true); } fieldIndex++; } RenderPostBackEvent(writer, _backToList, softkeyLabel, true, backCommandText, true); writer.ExitStyle(Style); }
/// <include file='doc\WmlCalendarAdapter.uex' path='docs/doc[@for="WmlCalendarAdapter.Render"]/*' /> public override void Render(WmlMobileTextWriter writer) { ArrayList arr; DateTime tempDate; DateTimeFormatInfo currentDateTimeInfo = DateTimeFormatInfo.CurrentInfo; String abbreviatedMonthDayPattern = AbbreviateMonthPattern(currentDateTimeInfo.MonthDayPattern); _threadCalendar = currentDateTimeInfo.Calendar; // RendersWmlSelectsAsMenuCards is true means the list control will be // rendered as select/option tags, where the break tag before // them will become an extra line which doesn't like good. bool addBreakBeforeListControl = Device.RendersWmlSelectsAsMenuCards; writer.EnterStyle(Style); Debug.Assert(NotSecondaryUI == NotSecondaryUIInit); switch (SecondaryUIMode) { case FirstPrompt: String promptText = Control.CalendarEntryText; if (String.IsNullOrEmpty(promptText)) { promptText = SR.GetString(SR.CalendarAdapterFirstPrompt); } // Link to input option selection screen RenderPostBackEvent(writer, OptionPrompt.ToString(CultureInfo.InvariantCulture), GetDefaultLabel(GoLabel), true, promptText, true); break; // Render the first secondary page that provides differnt // options to select a date. case OptionPrompt: writer.RenderText(SR.GetString(SR.CalendarAdapterOptionPrompt), !addBreakBeforeListControl); arr = new ArrayList(); // Option to select the default date arr.Add(Control.VisibleDate.ToString( currentDateTimeInfo.ShortDatePattern, CultureInfo.CurrentCulture)); // Option to another page that can enter a date by typing arr.Add(SR.GetString(SR.CalendarAdapterOptionType)); // Options to a set of pages for selecting a date, a week // or a month by picking month/year, week and day // accordingly. Available options are determined by // SelectionMode. arr.Add(SR.GetString(SR.CalendarAdapterOptionChooseDate)); if (Control.SelectionMode == CalendarSelectionMode.DayWeek || Control.SelectionMode == CalendarSelectionMode.DayWeekMonth) { arr.Add(SR.GetString(SR.CalendarAdapterOptionChooseWeek)); if (Control.SelectionMode == CalendarSelectionMode.DayWeekMonth) { arr.Add(SR.GetString(SR.CalendarAdapterOptionChooseMonth)); } } DataBindAndRender(writer, _optionList, arr); break; // Render a title and textbox to capture a date entered by user case TypeDate: if (_textBoxErrorMessage != null) { writer.RenderText(_textBoxErrorMessage, true); } if (_selectList.Visible) { writer.RenderText(SR.GetString(SR.CalendarAdapterOptionEra), true); _selectList.RenderControl(writer); } String numericDateFormat = GetNumericDateFormat(); writer.RenderText(SR.GetString(SR.CalendarAdapterOptionType) + ":", true); writer.RenderText("("); writer.RenderText(numericDateFormat.ToUpper(CultureInfo.InvariantCulture)); writer.RenderText(")"); if (!_selectList.Visible) { writer.RenderText(GetEra(Control.VisibleDate)); } writer.RenderText(String.Empty, true); _textBox.Numeric = true; _textBox.Size = numericDateFormat.Length; _textBox.MaxLength = numericDateFormat.Length; _textBox.Text = Control.VisibleDate.ToString(numericDateFormat, CultureInfo.InvariantCulture); _textBox.Visible = true; _textBox.RenderControl(writer); String okLabel = GetDefaultLabel(OKLabel); // accept softkey for sending the textbox value back to the server RenderPostBackEvent(writer, TypeDateDone.ToString(CultureInfo.InvariantCulture), okLabel, true, okLabel, true, WmlPostFieldType.Raw); break; // Render a paged list for choosing a month case ChooseMonth: { String displayText = String.Format(CultureInfo.CurrentCulture, "{0}:", SR.GetString(SR.CalendarAdapterOptionChooseMonth)); writer.RenderText(displayText, !addBreakBeforeListControl); tempDate = Control.VisibleDate; String abbreviatedYearMonthPattern = AbbreviateMonthPattern(currentDateTimeInfo.YearMonthPattern); // This is to be consistent with ASP.NET Calendar control // on handling YearMonthPattern: // Some cultures have a comma in their YearMonthPattern, // which does not look right in a calendar. Here we // strip the comma off. int indexComma = abbreviatedYearMonthPattern.IndexOf(','); if (indexComma >= 0) { abbreviatedYearMonthPattern = abbreviatedYearMonthPattern.Remove(indexComma, 1); } arr = new ArrayList(); for (int i = 0; i < _monthsToDisplay; i++) { arr.Add(tempDate.ToString(abbreviatedYearMonthPattern, CultureInfo.CurrentCulture)); tempDate = _threadCalendar.AddMonths(tempDate, 1); } arr.Add(GetDefaultLabel(NextLabel)); arr.Add(GetDefaultLabel(PreviousLabel)); DataBindAndRender(writer, _monthList, arr); break; } // Based on the month selected in case ChooseMonth above, render a list of // availabe weeks of the month. case ChooseWeek: { String monthFormat = (GetNumericDateFormat()[0] == 'y') ? "yyyy/M" : "M/yyyy"; String displayText = String.Format(CultureInfo.CurrentCulture, "{0} ({1}):", SR.GetString(SR.CalendarAdapterOptionChooseWeek), Control.VisibleDate.ToString(monthFormat, CultureInfo.CurrentCulture)); writer.RenderText(displayText, !addBreakBeforeListControl); // List weeks of days of the selected month. May include // days from the previous and the next month to fill out // all six week choices. This is consistent with the // ASP.NET Calendar control. // Note that the event handling code of this list control // should be implemented according to the index content // generated here. tempDate = FirstCalendarDay(Control.VisibleDate); arr = new ArrayList(); String weekDisplay; for (int i = 0; i < 6; i++) { weekDisplay = tempDate.ToString(abbreviatedMonthDayPattern, CultureInfo.CurrentCulture); weekDisplay += DaySeparator; tempDate = _threadCalendar.AddDays(tempDate, 6); weekDisplay += tempDate.ToString(abbreviatedMonthDayPattern, CultureInfo.CurrentCulture); arr.Add(weekDisplay); tempDate = _threadCalendar.AddDays(tempDate, 1); } DataBindAndRender(writer, _weekList, arr); break; } // Based on the month and week selected in case ChooseMonth and ChooseWeek above, // render a list of the dates in the week. case ChooseDay: { String displayText = String.Format(CultureInfo.CurrentCulture, "{0}:", SR.GetString(SR.CalendarAdapterOptionChooseDate)); writer.RenderText(displayText, !addBreakBeforeListControl); tempDate = Control.VisibleDate; arr = new ArrayList(); String date; String dayName; StringBuilder dayDisplay = new StringBuilder(); bool dayNameFirst = (GetNumericDateFormat()[0] != 'y'); for (int i = 0; i < 7; i++) { date = tempDate.ToString(abbreviatedMonthDayPattern, CultureInfo.CurrentCulture); if (Control.ShowDayHeader) { // Use the short format for displaying day name dayName = GetAbbreviatedDayName(tempDate); dayDisplay.Length = 0; if (dayNameFirst) { dayDisplay.Append(dayName); dayDisplay.Append(Space); dayDisplay.Append(date); } else { dayDisplay.Append(date); dayDisplay.Append(Space); dayDisplay.Append(dayName); } arr.Add(dayDisplay.ToString()); } else { arr.Add(date); } tempDate = _threadCalendar.AddDays(tempDate, 1); } DataBindAndRender(writer, _dayList, arr); break; } default: Debug.Assert(false, "Unexpected Secondary UI Mode"); break; } writer.ExitStyle(Style); }
/// <include file='doc\WmlObjectListAdapter.uex' path='docs/doc[@for="WmlObjectListAdapter.RenderItemsList"]/*' /> protected virtual void RenderItemsList(WmlMobileTextWriter writer) { bool rendersAcceptsInline = Device.RendersWmlDoAcceptsInline; bool rendersSelectsAsMenuCards = Device.RendersWmlSelectsAsMenuCards; bool rendersBreaksAfterAnchor = Device.RendersBreaksAfterWmlAnchor; int pageStart = Control.FirstVisibleItemIndex; int pageSize = Control.VisibleItemCount; ObjectListItemCollection items = Control.Items; if (pageSize == 0 || items.Count == 0) { return; } bool hasDefaultCommand = HasDefaultCommand(); bool onlyHasDefaultCommand = OnlyHasDefaultCommand(); bool requiresSecondScreen = HasItemDetails() || (!onlyHasDefaultCommand && HasCommands()); bool itemRequiresHyperlink = requiresSecondScreen || hasDefaultCommand; writer.EnterLayout(Style); int[] tableFieldIndices = null; if (ShouldRenderAsTable() && (tableFieldIndices = Control.TableFieldIndices).Length != 0) { writer.BeginCustomMarkup(); int fieldCount = tableFieldIndices.Length; writer.Write("<table columns=\""); writer.Write(fieldCount.ToString(CultureInfo.InvariantCulture)); writer.WriteLine("\">"); if (ShouldRenderTableHeaders()) { writer.Write("<tr>"); foreach (int fieldIndex in tableFieldIndices) { writer.Write("<td>"); writer.RenderText(Control.AllFields[fieldIndex].Title); writer.Write("</td>"); } writer.WriteLine("</tr>"); } for (int i = 0; i < pageSize; i++) { ObjectListItem item = items[pageStart + i]; writer.Write("<tr>"); for (int field = 0; field < fieldCount; field++) { writer.Write("<td>"); if (field == 0 && itemRequiresHyperlink) { RenderPostBackEvent(writer, requiresSecondScreen ? String.Format(CultureInfo.InvariantCulture, _showMoreFormatAnchor, item.Index) : item.Index.ToString(CultureInfo.InvariantCulture), GetDefaultLabel(GoLabel), false, item[tableFieldIndices[0]], false, WmlPostFieldType.Raw); } else { writer.RenderText(item[tableFieldIndices[field]]); } writer.Write("</td>"); } writer.WriteLine("</tr>"); } writer.WriteLine("</table>"); writer.EndCustomMarkup(); } else { int labelFieldIndex = Control.LabelFieldIndex; ObjectListField labelField = Control.AllFields[labelFieldIndex]; writer.EnterFormat(Style); for (int i = 0; i < pageSize; i++) { ObjectListItem item = items[pageStart + i]; if (itemRequiresHyperlink) { RenderPostBackEvent(writer, requiresSecondScreen ? String.Format(CultureInfo.InvariantCulture, _showMoreFormatAnchor, item.Index) : item.Index.ToString(CultureInfo.InvariantCulture), GetDefaultLabel(GoLabel), false, item[labelFieldIndex], true, WmlPostFieldType.Raw); } else { writer.RenderText(item[labelFieldIndex], true); } } writer.ExitFormat(Style); } writer.ExitLayout(Style); }