예제 #1
0
파일: Stop.cs 프로젝트: renyh1013/dp2
        // 设状态, 供Stop调
        // locks: 集合读锁(如果bLock == true)
        public void ChangeState(Stop stop,
            StateParts parts,
            bool bLock)
        {
            if (stops.Count == 0)
                return;

            // TODO: 这里的整个逻辑有问题: 即便视觉上不表现,内存也应当兑现修改,以备后面切换时显示出来。动态不那么及时更新是可以的,但是关键状态变化,例如显示、隐藏等动作,一定要兑现到内存
            if (stop != null && stop.ProgressValue == -1)
            {
                if ((parts & StateParts.ProgressValue) != 0)
                {
                    // 如果为隐藏progress的意图,
                    // 将max和min都设置为-1,以便将来刷新的时候能体现隐藏
                    // 2011/10/12
                    stop.ProgressMax = -1;
                    stop.ProgressMin = -1;
                }
            }

            if (bLock == true)
            {
                WriteDebugInfo("collection read lock 7\r\n");
                this.m_collectionlock.AcquireReaderLock(Stop.m_nLockTimeout);
            }
            bool bLoop = false;
            Stop active = null;

            try
            {

                if (bMultiple == false)
                {
                    if (stop == null)
                    {
                        stop = (Stop)stops[stops.Count - 1];
                    }
                    else
                    {
                        if (stop != stops[stops.Count - 1])
                            return;
                    }
                    bLoop = stop.State == 0 ? true : false;
                    active = stop;
                }
                else
                {
                    bool bFound = false;
                    for (int i = 0; i < stops.Count; i++)
                    {
                        Stop temp = (Stop)stops[i];
                        if (bLoop == false)
                        {
                            if (temp.State == 0)
                                bLoop = true;
                        }

                        if (stop == temp)
                        {
                            bFound = true;
                            active = temp;
                            break;
                        }
                    }
                    if (bFound == false)
                        return;

                }
                // 移走


            }
            finally
            {
                if (bLock == true)
                {
                    this.m_collectionlock.ReleaseReaderLock();
                    WriteDebugInfo("collection read unlock 7\r\n");
                }
            }

            //if (m_stopToolButton != null) //???
            //{
            if ((parts & StateParts.StopButton) != 0)
                EnableStopButtons(bLoop);

            if ((parts & StateParts.ReverseButtons) != 0)
                EnableReverseButtons(!bLoop,
                    parts);
            //}

            //if (m_messageStatusBar != null) 
            //{
            if ((parts & StateParts.Message) != 0)
                InternalSetMessage(active.Message);
            //}

            if ((parts & StateParts.ProgressRange) != 0)
            {
                // active.ProgressValue = 0;   // 初始化
                active.ProgressValue = active.ProgressMin;   // 初始化 2008/5/16 changed
                InternalSetProgressBar(active.ProgressMin, active.ProgressMax, -1);
            }

            if ((parts & StateParts.ProgressValue) != 0)
            {
                /*
                if (active.ProgressValue == -1)
                {
                    // 如果为隐藏progress的意图,
                    // 将max和min都设置为-1,以便将来刷新的时候能体现隐藏
                    // 2008/3/10
                    active.ProgressMax = -1;
                    active.ProgressMin = -1;
                }
                 * */

                InternalSetProgressBar(-1, -1, active.ProgressValue);
            }

        }
예제 #2
0
파일: Stop.cs 프로젝트: renyh1013/dp2
        // 整体改变reverse_buttons的Enabled状态。
        // 注意,在false时,是要改变为disabled状态;而true时,则是要恢复原来记忆(disable前)的状态
        // parameters:
        //      bEnabled    true表示希望恢复按钮原来状态;false希望disable按钮
        //      parts   SaveEnabledState希望先保存按钮原来的值;RestoreEnabledState表示要恢复按钮原来的值
        void EnableReverseButtons(bool bEnabled,
            StateParts parts)
        {
            if (m_reverseButtons == null)
                return;

            if (m_reverseButtonEnableStates == null)
                m_reverseButtonEnableStates = new List<int>();

            /*
            if ((parts & StateParts.All) != 0)
                throw new Exception("StateParts枚举中除了SaveEnabledState和RestoreEnabledState值外,其他值对于本函数没有意义");
             * */

            bool bSave = false;
            if ((parts & StateParts.SaveEnabledState) != 0)
                bSave = true;

            bool bRestore = false;
            if ((parts & StateParts.RestoreEnabledState) != 0)
                bRestore = true;


            // 保证两个数组的大小一致
            while (m_reverseButtonEnableStates.Count < m_reverseButtons.Count)
            {
                m_reverseButtonEnableStates.Add(-1);
            }

            for (int i = 0; i < m_reverseButtons.Count; i++)
            {
                int nOldState = m_reverseButtonEnableStates[i];

                bool bEnableResult = bEnabled;
                // TODO: 状态不明的时候,可以通过事件从外部索取信息
                // 如果bEnabled要求true,而旧状态不明,那就询问
                if (nOldState == -1 && bEnabled == true)
                {
                    if (this.OnAskReverseButtonState != null)
                    {
                        AskReverseButtonStateEventArgs e = new AskReverseButtonStateEventArgs();
                        e.EnableQuestion = true;
                        e.Button = m_reverseButtons[i];
                        this.OnAskReverseButtonState(this, e);
                        bEnableResult = e.EnableResult;
                    }
                }


                bool bOldState = (nOldState == 1 ? true : false);

                object button = m_reverseButtons[i];
                if (button is Button)
                {
                    bOldState = ((Button)button).Enabled;
                    // ((Button)button).Enabled = (bRestore == true ? bOldState : bEnabled);
                    Safe_EnableButton((Button)button,
                        (bRestore == true ? bOldState : bEnableResult));

                }
                else if (button is ToolBarButton)
                {
                    // ((ToolBarButton)button).Enabled = bEnabled;

                    bOldState = Safe_EnableToolBarButton(((ToolBarButton)button),
                        bRestore == true ? bOldState : bEnableResult);
                    /*
                    if (button.Parent.InvokeRequired)
                    {
                        Delegate_SetToolBarButtonEnable d = new Delegate_SetToolBarButtonEnable(SetToolBarButtonEnable);
                        button.Parent.Invoke(d, new object[] { button, bEnabled });
                    }
                    else
                    {
                        button.Enabled = bEnabled;
                    }
                     * */
                }
                else if (button is ToolStripButton)
                {
                    // ((ToolStripButton)button).Enabled = bEnabled;

                    bOldState = Safe_EnableToolStripButton(((ToolStripButton)button),
                        bRestore == true ? bOldState : bEnableResult);
                }

                // 主动disable前,记忆以前的状态
                if (bEnabled == false
                    && bSave == true)
                    m_reverseButtonEnableStates[i] = (bOldState == true ? 1 : 0);

            }
        }