示例#1
0
        /// <summary>
        /// 获取指定类型分组标记的输出内容结构体
        /// </summary>
        /// <param name="groupType">分组标记的类型</param>
        /// <param name="groupTextWidth">分组公共信息的宽度</param>
        /// <returns></returns>
        private static OutputInfoStruct GetGroupFlagOutput(OrderOutputTextType groupType, int groupTextWidth)
        {
            Rectangle bounds        = new Rectangle();
            int       startPosition = GridSetting.WidthOfContentCell
                                      - DrawSetting.Margin.Right - groupTextWidth - DrawSetting.GroupFlagWidth + 1;
            int flagWidth = DrawSetting.GroupFlagWidth - 3;

            switch (groupType)
            {
            case OrderOutputTextType.GroupStart:
                bounds = new Rectangle(startPosition
                                       , GridSetting.RowHeight / 2
                                       , flagWidth
                                       , GridSetting.RowHeight / 2);
                break;

            case OrderOutputTextType.GroupMiddle:
                bounds = new Rectangle(startPosition, 0
                                       , flagWidth, GridSetting.RowHeight);
                break;

            case OrderOutputTextType.GroupEnd:
                bounds = new Rectangle(startPosition, 0
                                       , flagWidth, GridSetting.RowHeight / 2);
                break;
            }

            return(new OutputInfoStruct("", bounds, DrawSetting.DefaultFont.Font, groupType));
        }
示例#2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="text"></param>
 /// <param name="bounds"></param>
 /// <param name="font"></param>
 /// <param name="outputType"></param>
 public OutputInfoStruct(string text, Rectangle bounds, Font font, OrderOutputTextType outputType)
 {
     _text       = text;
     _bounds     = bounds;
     _font       = font;
     _outputType = outputType;
 }
示例#3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="text"></param>
 /// <param name="outputType"></param>
 public OutputInfoStruct(string text, OrderOutputTextType outputType)
 {
     _text       = text;
     _outputType = outputType;
     _bounds     = new Rectangle();
     _font       = new Font("SimSun", 10.5F, FontStyle.Regular, GraphicsUnit.Point
                            , ((byte)(134)));
 }
示例#4
0
        /// <summary>
        /// 根据传入的文本信息,生成输出信息列表(包括)
        /// </summary>
        /// <param name="texts"></param>
        /// <returns></returns>
        public static Collection <OutputInfoStruct> CreateOutputeInfo(Collection <OutputInfoStruct> texts)
        {
            if ((texts == null) || (texts.Count == 0))
            {
                return(new Collection <OutputInfoStruct>());
            }

            int maxWidth = DrawSetting.OutputSizeOfContent.Width;             // 供一般信息输出的最大宽度(有分组和无分组时是不一样的)
            Collection <string> outputTexts = new Collection <string>();      // 实际需要输出的文本
            OrderOutputTextType groupType   = OrderOutputTextType.NormalText; // 分组类型,NormalText表示非分组记录
            string           usageText      = "";                             // 用法信息
            string           frequencyText  = "";                             // 频次信息
            string           groupText      = "";                             // 分组时输出的公共信息
            int              groupTextWidth = 0;                              // 分组信息在默认字体下的宽度
            int              insertPos      = -1;                             // 未分组时,向输出的List中插入用法、频次
            string           cancelText     = "";                             // 取消信息
            OutputInfoStruct info;

            for (int index = 0; index < texts.Count; index++)
            {
                info = texts[index];
                switch (info.OutputType)
                {
                case OrderOutputTextType.GroupStart:
                case OrderOutputTextType.GroupMiddle:
                case OrderOutputTextType.GroupEnd:
                    groupType = info.OutputType;
                    break;

                case OrderOutputTextType.CancelInfo:
                    cancelText = info.Text;
                    break;

                case OrderOutputTextType.ItemUsage:
                    insertPos = index; // 用法肯定在频次前面
                    usageText = info.Text;
                    break;

                case OrderOutputTextType.ItemFrequency:
                    frequencyText = info.Text;
                    break;

                default:
                    outputTexts.Add(info.Text);
                    break;
                }
            }

            // 判断是否是分组的记录(同组的用法、频次只显示一次), 然后提取需要输出的文本
            if (groupType != OrderOutputTextType.NormalText)
            {
                groupText      = usageText + frequencyText.Trim();
                groupTextWidth = CalcStringWidth(groupText, DrawSetting.DefaultFont.Font);
                // 重新计算一般信息允许输出的最大宽度,在处理完一般信息后,再处理分组信息的输出
                maxWidth = maxWidth - groupTextWidth - DrawSetting.GroupFlagWidth;
            }
            else
            {
                if (insertPos > 0)
                {
                    outputTexts.Insert(insertPos, usageText);
                    outputTexts.Insert(insertPos + 1, frequencyText);
                }
                else
                {
                    if (usageText.Length > 0)
                    {
                        outputTexts.Add(usageText);
                    }
                    if (frequencyText.Length > 0)
                    {
                        outputTexts.Add(frequencyText);
                    }
                }
            }

            // 首先生成一般信息的输出
            Collection <OutputInfoStruct> results = CreateNormalOutputInfos(outputTexts, maxWidth);

            // 处理分组信息
            if (groupType != OrderOutputTextType.NormalText)
            {
                // 原先的想法是让分组信息紧跟着前面的信息,但是因为每一条记录是单独处理
                // 同一组的记录其分组标志的位置可能错位。因此改成从右到左显示分组信息

                // 先处理公共信息(只有组的第一条记录才需要分组的公共信息)
                if (groupType == OrderOutputTextType.GroupStart)
                {
                    results.Add(GetGroupPublicOutput(groupText, groupTextWidth));
                }
                // 再画分组标记
                results.Add(GetGroupFlagOutput(groupType, groupTextWidth));

                //maxWidth = 0;
                //foreach (OutputInfoStruct text in results)
                //   if (maxWidth < text.Bounds.Width)
                //      maxWidth = text.Bounds.Width;

                //// 分组标志紧跟着最长的那行
                //results.Add(GetGroupFlagOutput(groupType, maxWidth));
                //// 只有组的第一条记录才需要分组的公共信息
                //if (groupType == OrderOutputTextType.GroupStart)
                //   results.Add(GetGroupPublicOutput(groupText, maxWidth + GroupFlagWidth));
            }
            // 处理取消信息
            if (cancelText.Length > 0)
            {
                results.Add(new OutputInfoStruct(cancelText, DrawSetting.BoundsOfCancel
                                                 , DrawSetting.FontOfCancel.Font
                                                 , OrderOutputTextType.CancelInfo));
            }

            return(results);
        }