PanelPoll.cs 16.3 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.PowerPoint;
using GeneralLib;

namespace SunVoteARSPPT
{
    public partial class PanelPoll : UserControl, IPanel
    {
        TagSet mTagSet = null;
        public TagSet TagSet
        {
            get { return mTagSet; }
            set
            {
                mTagSet = value;
                ucResponsePara.TagSet = value;
                ucKeypadPara.TagSet = value;
            }
        }

        public PanelPoll()
        {
            InitializeComponent();
            FrmSystemSet.LanguageSetEvent += new FrmSystemSet.LanguageSetEventHander(FrmSystemSet_LanguageSetEvent);
            FrmVoteBar.PanelEnabledEvent += new FrmVoteBar.PanelEnabledEventHander(FrmVoteBar_PanelEnabledEvent);
            gbxChoise.Resize += gbxChoise_Resize;
            //设置控件大小
            //杨斌 2015-04-10
            //ucResponsePara.HideVoteRate();
            ucResponsePara.ShowSet(true, true);//杨斌 2018-01-30
            //ucResponsePara.ShowSet(true, true);//杨斌 2018-01-04

            ucKeypadPara.Top = ucResponsePara.Bottom + 6;
            this.Height = ucKeypadPara.Bottom;
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            lblChoiseLimit.Visible = false;//杨斌 2018-09-21
            chkChoiseLimit.Text = lblChoiseLimit.Text;//杨斌 2018-09-21

            //杨斌 2012-06-11
            switch (GlobalInfo.OEMLogo)
            {
                case OEMLogos.oem3eAnalyzer:
                    //ucKeypadPara.Visible = false;
                    //if (ucKeypadPara.cboSubmitMode.SelectedIndex != 0)
                    //    ucKeypadPara.cboSubmitMode.SelectedIndex = 0;
                    //this.Height = ucResponsePara.Bottom;
                    break;
                case OEMLogos.SunVote:
                default:
                    break;
            }

            //杨斌 2012-06-25
            ucKeypadPara.cboOptionMode.SelectedIndex = -1;
            ucKeypadPara.cboOptionMode.Enabled = false;
        }

        void gbxChoise_Resize(object sender, EventArgs e)
        {
            int pos = gbxChoise.ClientSize.Width / 2;
            int w = pos - 3;
            lblOptionCount.Left = pos;
            //lblOptionCount.Width = w;
            //杨斌 2018-09-21
            nudOptionLimit.Left = pos;
            numChoiseLimitMin.Left = pos;
            panRange.Left = pos;
        }

        void FrmVoteBar_PanelEnabledEvent(bool enabled)
        {
            //杨斌 2018-05-22
            this.Enabled = enabled;//杨斌 2020-06-17
            foreach (Control v in gbxChoise.Controls)
            {
                if (v.Name == btnPollList.Name)
                {
                    btnPollList.Tag = enabled ? "1" : "0";
                }
                else if (v.Name == chkUseModeLimitNumber.Name)
                {
                    List<string> lstKeypadType = new List<string>() { "M52Li", "G1" };//杨斌 2020-06-17
                    //if (SystemConfig.KeypadType == "M52Li")//杨斌 2018-12-27
                    if (lstKeypadType.Contains(SystemConfig.KeypadType))//杨斌 2020-06-17
                    {
                        v.Enabled = false;
                        chkUseModeLimitNumber.Checked = true;
                    }
                    else
                    {
                        v.Enabled = enabled;
                    }
                }
                else
                {
                    v.Enabled = enabled;
                }
            }
            ucResponsePara.Enabled = ucKeypadPara.Enabled = enabled;
        }

        void FrmSystemSet_LanguageSetEvent()
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            chkChoiseLimit.Text = lblChoiseLimit.Text;//杨斌 2018-09-21
        }

        private void btnChartSet_Click(object sender, EventArgs e)
        {
            new FrmChartSet().ShowDialog();
        }

        private void btnPollList_Click(object sender, EventArgs e)
        {
            new FrmPollList(TagSet, ucResponsePara.Enabled).ShowDialog();//杨斌 2018-05-22

            if (!ucResponsePara.Enabled)
                return;

            ControlOper.TrySetNumericUpDownValue(nudOptionCount, TagSet.LoadValue(TagKey.Poll_CandidatesCount, nudOptionCount.Value).ToInt);
            lblOptionCount.Text = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt.ToString();//杨斌 2012-11-07

            //屏蔽下面代码。杨斌 2014-10-22
            //PPTOper.AddRankTable(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit, Convert.ToInt32(nudOptionCount.Value));
            //AddPollRankList(Convert.ToInt32(nudOptionCount.Value));

            ResponseDB.ShowTablePollList(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit);//杨斌 2014-11-11

            FrmVoteBar.ActivateSlideShowWindow();
        }

        /// <summary>
        /// 刷新选举排行
        /// </summary>
        public static void AddPollRankList(int iCount)
        {
            if (iCount == 0) return;
            TagSet tagSet = new TagSet();
            tagSet.Tags = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit.Tags;
            ResponseType responseType = EnumName<ResponseType>.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value.ToString());
            if (responseType != ResponseType.Poll) return;
            Dictionary<string, int> pollRankList = new Dictionary<string, int>();
            if (iCount > 50) iCount = 50;
            int tableCount = Convert.ToInt32(iCount / 10) + ((iCount % 10) > 0 ? 1 : 0);
            try
            {

                foreach (Shape s in Globals.SunVoteARSAddIn.PPTEdit.SlideEdit.Shapes)
                {
                    string tableName = "";
                    try
                    {
                        tableName = s.Name.Substring(0, 8);
                    }
                    catch { continue; }
                    if (s.Name.Substring(0, 8) == "PollRank")
                    {
                        try
                        {
                            int tableNum = Convert.ToInt32(s.Name.Substring(8, s.Name.Length - 8));
                            int pos = 10;
                            if ((tableNum + 1) == tableCount)
                                pos = iCount - (tableNum) * 10;
                            for (int i = 1; i <= pos; i++)
                            {
                                s.Table.Cell(i + 1, 1).Shape.TextFrame.TextRange.Text = tagSet.LoadValue(TagKey.Poll_CandidatesID_, tableNum * 10 + (i - 1), "").Value.ToString();
                                s.Table.Cell(i + 1, 2).Shape.TextFrame.TextRange.Text = tagSet.LoadValue(TagKey.Poll_CandidatesName_, tableNum * 10 + (i - 1), "").Value.ToString();
                            }
                        }
                        catch { }

                    }


                }
            }
            catch (Exception ex)
            {
                SystemLog.WriterLog(ex);
            }
        }

        /// <summary>
        /// 是否支持多选选举的键盘型号。杨斌 2017-05-11
        /// </summary>
        public static bool IsMultiPollKeypad()
        {
            //杨斌 2020-07-27。EasyTest的键盘型号:ET50,M52。问了张珍珠对应关系:ET50=M50,M52=S53。
            //杨斌 2020-07-28。日本Votingeyes的SHV52plus=S53。但是暂未确认要添加到多选支持列表,因为键盘型号是老版本的
            //杨斌 2018-12-26。增加M52Li。i-Pericles的"Interact+"=="S52Plus","Interact++"=="M5",杨斌 2019-05-27。SHV52plus=S52Plus,增加S53,2019-12-04,2020-04-13增加G1
            List<string> lsMultiPoll = new List<string>() { "M52Li", "M52Plus", "Interact+", "Interact++", "S52Plus", "SHV52plus", "Smart Plus", "S53", "M52", "G1", "M5" };//杨斌 2020-06-22。2020-07-27。添加EasyTest的M52
            return lsMultiPoll.Contains(SystemConfig.KeypadType);
        }

        /// <summary>
        /// 加载参数面板数据
        /// </summary>
        public void LoadData()
        {
            //杨斌 2016-04-26
            //if ((GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll) && PanelPoll.IsMultiPollKeypad())            

            nudOptionLimit.Minimum = 1;
            nudOptionLimit.Maximum = GlobalInfo.maxNumberPollSelect;
            chkChoiseLimit.Visible = lblChoiseLimit.Visible = nudOptionLimit.Visible = IsMultiPollKeypad();//杨斌 2017-05-11

            ucResponsePara.LoadData();
            ucKeypadPara.LoadData();
            //ControlOper.TrySetNumericUpDownValue(nudOptionCount, TagSet.LoadValue(TagKey.Poll_CandidatesCount, nudOptionCount.Value).ToInt);
            //候选人数应默认为0,杨斌 2012-03-06
            ControlOper.TrySetNumericUpDownValue(nudOptionCount, TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt);
            lblOptionCount.Text = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt.ToString();//杨斌 2012-11-07
            //杨斌 2016-04-26
            ControlOper.TrySetNumericUpDownValue(nudOptionLimit, TagSet.LoadValue(TagKey.Poll_EffectiveVotes, 1).ToInt);
            //杨斌 2017-02-13
            chkChoiseLimit.Checked = (TagSet.GetValue(TagKey.Poll_Multi).ToInt == 1);
            nudOptionLimit.Enabled = chkChoiseLimit.Checked;

            nudOptionCount_ValueChanged(null, null);//杨斌 2017-03-23

            //加载分段式选举参数。杨斌 2018-09-29
            chkUseModeLimitNumber.Checked = (TagSet.GetValue(TagKey.Poll_UseModeLimitNumber).ToInt == 1);
            //杨斌 2020-06-19
            bool tempa = TagSet.ReadOnlyPPT;
            TagSet.ReadOnlyPPT = false;
            numRange1_ValueChanged(null, null);
            TagSet.ReadOnlyPPT = tempa;//杨斌 2020-06-19
            ControlOper.TrySetNumericUpDownValue(numChoiseLimitMin, TagSet.LoadValue(TagKey.Poll_MinSelects, 1).ToInt);
            chkCanRepeat.Checked = (TagSet.LoadValue(TagKey.Poll_CanRepeat, 1).ToInt == 0);//杨斌 2020-08-14。默认值为1不允许重复
            chkRange2.Checked = (TagSet.GetValue(TagKey.Poll_LimitRange2Enabled).ToInt == 1);
            chkRange3.Checked = (TagSet.GetValue(TagKey.Poll_LimitRange3Enabled).ToInt == 1);
            GetRangeNum(TagSet.GetValue(TagKey.Poll_LimitRange1).Value, numRangeStart1, numRangeEnd1);
            GetRangeNum(TagSet.GetValue(TagKey.Poll_LimitRange2).Value, numRangeStart2, numRangeEnd2);
            GetRangeNum(TagSet.GetValue(TagKey.Poll_LimitRange3).Value, numRangeStart3, numRangeEnd3);
            numChoiseLimitMin.Maximum = nudOptionLimit.Value;
            panLimitNumber.Enabled = chkUseModeLimitNumber.Checked;
            numRangeStart2.Enabled = numRangeEnd2.Enabled = chkRange2.Checked;
            numRangeStart3.Enabled = numRangeEnd3.Enabled = chkRange3.Checked;

            //刘红英说:以后M52Li和其他键盘不再支持数字选举模式。杨斌 2018-12-27
            List<string> lstKeypadType = new List<string>() { "M52Li", "G1" };//杨斌 2020-06-17
            //if (SystemConfig.KeypadType == "M52Li")
            if (lstKeypadType.Contains(SystemConfig.KeypadType))//杨斌 2020-06-17
            {
                chkUseModeLimitNumber.Enabled = false;
                if (!chkUseModeLimitNumber.Checked)
                {
                    bool temp = TagSet.ReadOnlyPPT;
                    TagSet.ReadOnlyPPT = false;
                    chkUseModeLimitNumber.Checked = true;
                    chkUseModeLimitNumber_CheckedChanged(null, null);
                    TagSet.ReadOnlyPPT = temp;
                }
            }
        }

        private void GetRangeNum(string range, NumericUpDown numStart, NumericUpDown numEnd)
        {
            try
            {
                var ary = range.Split('-');
                if (ary.Length >= 2)
                {
                    numStart.Value = ConvertOper.Convert(ary[0]).ToInt;
                    numEnd.Value = ConvertOper.Convert(ary[1]).ToInt;
                }
                else
                {
                    numStart.Value = numEnd.Minimum;
                    numEnd.Value = numEnd.Maximum;
                }
            }
            catch (Exception ex)
            {
                SystemLog.WriterLog(ex);
            }
        }

        private void PanelPoll_Load(object sender, EventArgs e)
        {
            GlobalInfo.SysLanguage.SetLanguage(this.Name, this);
            chkChoiseLimit.Text = lblChoiseLimit.Text;//杨斌 2018-09-21
        }
        //杨斌 2016-04-26
        private void nudOptionLimit_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_EffectiveVotes, (int)nudOptionLimit.Value);
            numChoiseLimitMin.Maximum = nudOptionLimit.Value;
        }
        //杨斌 2017-02-13
        private void chkChoiseLimit_CheckedChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_Multi, chkChoiseLimit.Checked ? 1 : 0);
            nudOptionLimit.Enabled = chkChoiseLimit.Checked;
            if (!nudOptionLimit.Enabled)//杨斌 2017-03-23
                nudOptionLimit.Value = 1;
        }
        //杨斌 2017-02-13
        private void lblChoiseLimit_Click(object sender, EventArgs e)
        {
            chkChoiseLimit.Checked = !chkChoiseLimit.Checked;
        }
        /// <summary>
        /// 是否使用多选选举模式。杨斌 2017-02-13
        /// </summary>
        public static bool IsUseMultiPoll(Slide sld)
        {
            bool res = false;
            try
            {
                TagSet tagSet = new TagSet(sld.Tags);
                res = (tagSet.GetValue(TagKey.Poll_Multi).ToInt == 1);
            }
            catch (Exception ex)
            {
                SystemLog.WriterLog(ex);
            }
            return res;
        }

        private void nudOptionCount_ValueChanged(object sender, EventArgs e)
        {
            //杨斌 2017-03-23
            decimal max = nudOptionCount.Value;
            if (max < 1)
                max = 1;
            if (max > GlobalInfo.maxNumberPollSelect)//杨斌 2020-04-10
                max = GlobalInfo.maxNumberPollSelect;
            nudOptionLimit.Minimum = 1;
            nudOptionLimit.Maximum = max;
        }

        //启用分段式选举。杨斌 2018-09-29,以下所有行皆为新增代码
        private void chkUseModeLimitNumber_CheckedChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_UseModeLimitNumber, chkUseModeLimitNumber.Checked ? 1 : 0);
            panLimitNumber.Enabled = chkUseModeLimitNumber.Checked;
            if (chkUseModeLimitNumber.Checked && !chkChoiseLimit.Checked)
            {
                chkChoiseLimit.Checked = true;
                chkChoiseLimit_CheckedChanged(null, null);
            }
        }

        private void numChoiseLimitMin_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_MinSelects, (int)numChoiseLimitMin.Value);
        }

        private void chkCanRepeat_CheckedChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_CanRepeat, chkCanRepeat.Checked ? 0 : 1);//注意0是启用默认
        }

        private void chkRange2_CheckedChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_LimitRange2Enabled, chkRange2.Checked ? 1 : 0);
            numRangeStart2.Enabled = numRangeEnd2.Enabled = chkRange2.Checked;
            numRange2_ValueChanged(null, null);//杨斌 2020-06-19
        }
        private void chkRange3_CheckedChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_LimitRange3Enabled, chkRange3.Checked ? 1 : 0);
            numRangeStart3.Enabled = numRangeEnd3.Enabled = chkRange3.Checked;
            numRange3_ValueChanged(null, null);//杨斌 2020-06-19
        }

        private void numRange1_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_LimitRange1, numRangeStart1.Value + "-" + numRangeEnd1.Value);
        }
        private void numRange2_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_LimitRange2, numRangeStart2.Value + "-" + numRangeEnd2.Value);
        }
        private void numRange3_ValueChanged(object sender, EventArgs e)
        {
            TagSet.SetValue(TagKey.Poll_LimitRange3, numRangeStart3.Value + "-" + numRangeEnd3.Value);
        }
    }
}