예제 #1
0
        private void SirenButton2_Click(object sender, EventArgs e)
        {
            int i = Form1.opts[Form1.optsName[31], 0];

            if (i > 0)
            {
                Ask.SoundSiren(2, i);
            }
        }
예제 #2
0
        private void analize1()
        {
            ParseAndTrimLog();

            if (workInterval <= 0)
            {
                throw new Exception("RtdbTimeCalc.cs: fatal algorithm error workInterval <= 0");
            }

            RelaxNeeded = 0;
            if (timeRecords.Count <= 1)
            {
                return;
            }

            ShiftAndTrim(timeRecords);

            long   relax, work, toRelax; int relaxSimpleStatus;
            double relaxState;

            toRelax = checkToRelax(timeRecords, out relax, out work, out RelaxNeeded, out relaxSimpleStatus, out relaxState);

            notifyIcon1.Text = "Экран учёта отдыха (" + RelaxNeeded / minute + ": " + relax / minute + "/" + ((double)work / (double)hour).ToString("f1") + ")";

            if (locked || currentStatus.work == TimeRecord.status.st.No)
            {
                return;
            }

            var NOW = DateTime.Now.Ticks;

            EndRelaxTime = NOW + toRelax;

            if (askIsVisible != 0 && askIsVisible + 20 * second < NOW)  // окно видно, но игнорируется более 20 секунд
            {
                if (ask != null)
                {
                    ask.Close();
                    ask.Dispose();
                    ask          = null;
                    askIsVisible = 0;

                    blackVisible();
                    return;
                }
                else
                {
                    Program.ToLogFile("Экран запроса на отдых должен быть активен, однако это не так [чёрный экран при превышении ожидания ответа пользователя]");
                }
            }

#if DEBUG
            if (Form1.locked && currentStatus.work != TimeRecord.status.st.No)
            {
                Program.toLogFile("Form1.locked && currentStatus.work != TimeRecord.status.st.No");
                MessageBox.Show("В программе Relaxtime Black Display возникла ошибка: Form1.locked && currentStatus.work != TimeRecord.status.st.No; сообщите разработчику по e-mail, указанному в меню 'О программе'");
                return;
            }
#endif

            if (currentStatus.work == TimeRecord.status.st.No)
            {
                return;
            }

            // Если пора отдыхать
            if (
                (askIsVisible == 0 || askIsVisible + continueInterval < NOW) &&
                toRelax > 0 && nextDialogTime < NOW && (isFullScreen <= 0 || !opts[optsName[15], true])
                )       // если окно видно продолжительное время или оно скрыто
            {
                if (ask != null)
                {
                    ask.Close();
                    ask.Dispose();
                    ask = null;
                }

                if (noReaction || noRelaxTime)
                {
                    return;
                }

                #if forLinux
                #else
                if (lastCheckedScreen != 0) // если активна экранная заставка, хотя это должно проверяться выше режимом работы
                {
                    return;
                }
                #endif

                if (shortAskForm != null)
                {
                    shortAskForm.Focus();
                    return;
                }

                tagLASTINPUTINFO p; int result; long dwTime;
                GetDelayTime(out p, out result, out dwTime, opts[optsName[25], true]);

                long k32 = opts[optsName[32], 0];
                DbgLog.dbg.messageToLog("Ask", "dwTime " + dwTime + ", onlySiren = " + onlySiren + ", k32 = " + k32);

                if (!onlySiren && k32 > 1 && dwTime < 1000 * 2.5 * k32)
                {
                    if (askCancelCount < 2 * k32)
                    {
                        askCancelCount++;
                        return;
                    }
                    else
                    {
                        Ask.SoundSiren(1, 2);
                        askCancelCount = 0;
                        return;
                    }
                }

                if (!onlySiren && (k32 == 1 && dwTime < 1000 * 7.5))
                {
                    if (askCancelCount < 2)
                    {
                        askCancelCount++;
                        return;
                    }
                }

                if (onlySiren || (k32 == 1 && askCancelCount > 1))
                {
                    ask = new Ask(this, relaxState);
                }
                else
                {
                    ask = new Ask(this, relaxSimpleStatus);
                }

                askCancelCount = 0;

                askIsVisible = DateTime.Now.Ticks;

                ask.relaxTimeLabel.Text = "К отдыху " + toRelax / minute + " минут (" + relax / minute + "/" + ((double)work / (double)hour).ToString("f1") + ")";
                ask.ShowOrSiren();
            }
        }