summaryrefslogtreecommitdiff
path: root/support/dktools/Dk4WxAutostartController.cpp
blob: 113573c1453538c5139a10e0ae3200231fffc1d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
Copyright (C) 2015-2020, Dirk Krause
SPDX-License-Identifier: BSD-3-Clause
*/

/*
	WARNING: This file was generated by the dkct program (see
	http://dktools.sourceforge.net/ for details).
	Changes you make here will be lost if dkct is run again!
	You should modify the original source and run dkct on it.
	Original source: Dk4WxAutostartController.cpt
*/

/**	@file Dk4WxAutostartController.cpp The Dk4WxAutostartController module.
*/


#line 211 "Dk4WxAutostartController.cpt"


#include "dk4conf.h"
#include "Dk4WxAutostartController.h"





#line 219 "Dk4WxAutostartController.cpt"



Dk4WxAutostartController::Dk4WxAutostartController()
{
  iExitTime = (dk4_time_t)0UL;
  iState = STATE_NONE;
  bAutostart = false;
  bAutoexit = false;
}



void
Dk4WxAutostartController::SetAutoStart(bool fl)
{
  {
    wxCriticalSectionLocker	lock(csProtect);
    bAutostart = fl;
  }
}



void
Dk4WxAutostartController::SetAutoExit(bool fl)
{
  {
    wxCriticalSectionLocker	lock(csProtect);
    bAutoexit = fl;
  }
}



int
Dk4WxAutostartController::GetReaction(void)
{
  dk4_time_t	 timer	= (dk4_time_t)0UL;
  int		 back	= REACTION_IGNORE;

  {
    wxCriticalSectionLocker	lock(csProtect);
    switch (iState) {
      case STATE_NONE : {
        if (bAutostart) {
	  back = REACTION_START;
	  iState = STATE_EXPECT_START;
	}
      } break;
#if 0
      case STATE_EXPECT_START : {
      } break;
      case STATE_PROCESSING : {
      } break;
#endif
      case STATE_EXPECT_EXIT : {
        back = REACTION_MORE;
	dk4time_get(&timer);
	if (timer >= iExitTime) {
	  iState = STATE_FINISHED;
	  back = REACTION_EXIT;
	}
      } break;
#if 0
      case STATE_FINISHED : {
      } break;
#endif
    }
  }
  return back;
}



void
Dk4WxAutostartController::StartProcessing(void)
{
  wxCriticalSectionLocker	lock(csProtect);
  iState = STATE_PROCESSING;
}



void
Dk4WxAutostartController::EndProcessing(bool success)
{
  dk4_time_t	timer	= (dk4_time_t)0UL;
  dk4time_get(&timer);
  {
    wxCriticalSectionLocker	lock(csProtect);
    if ((bAutostart) && (bAutoexit) && (success)) {
      iExitTime = timer + (dk4_time_t)2UL;
      iState = STATE_EXPECT_EXIT;
    } else {
      iState = STATE_FINISHED;
    }
  }
}