Antares Simulator
Power System Simulator
disabler.h
1 /*
2  * Copyright 2007-2025, RTE (https://www.rte-france.com)
3  * See AUTHORS.txt
4  * SPDX-License-Identifier: MPL-2.0
5  * This file is part of Antares-Simulator,
6  * Adequacy and Performance assessment for interconnected energy networks.
7  *
8  * Antares_Simulator is free software: you can redistribute it and/or modify
9  * it under the terms of the Mozilla Public Licence 2.0 as published by
10  * the Mozilla Foundation, either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * Antares_Simulator is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * Mozilla Public Licence 2.0 for more details.
17  *
18  * You should have received a copy of the Mozilla Public Licence 2.0
19  * along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20  */
21 #ifndef __ANTARES_APPLICATION_MAIN_DISABLER_H__
22 #define __ANTARES_APPLICATION_MAIN_DISABLER_H__
23 
24 namespace Antares::Forms
25 {
26 template<class WindowT>
27 class Disabler final
28 {
29 public:
30  Disabler(WindowT& p):
31  pWindow(p)
32  {
33  if (!pWindow.pUpdateCountLocker++)
34  {
35  pWindow.Enable(false);
36  }
37  }
38 
39  ~Disabler()
40  {
41  assert(pWindow.pUpdateCountLocker > 0);
42  if (!(--pWindow.pUpdateCountLocker))
43  {
44  pWindow.Enable(true);
45  pWindow.SetFocus();
46  }
47  }
48 
49 private:
50  WindowT& pWindow;
51 };
52 
53 template<>
54 class Disabler<ApplWnd> final
55 {
56 public:
57  Disabler(ApplWnd& p):
58  pWindow(p)
59  {
60  if (!pWindow.pUpdateCountLocker++)
61  {
62  // disable the background timer
63  pWindow.backgroundTimerStop();
64  // disable the drag-drop target
65  pWindow.SetDropTarget(nullptr);
66  }
67  }
68 
69  ~Disabler()
70  {
71  assert(pWindow.pUpdateCountLocker > 0);
72  if (!(--pWindow.pUpdateCountLocker))
73  {
74  // resetting the text of the status bar
75  pWindow.resetDefaultStatusBarText();
76  // The Form may have lost its focus
77  // This action must be delayed
78  pWindow.delayForceFocus();
79  // restore the drag-drop
80  pWindow.resetDragAndDrop();
81  }
82  }
83 
84 private:
86  ApplWnd& pWindow;
87 };
88 
89 } // namespace Antares::Forms
90 
91 #endif // __ANTARES_APPLICATION_MAIN_DISABLER_H__
Main Frame of the Antares UI application.
Definition: main.h:50
Definition: disabler.h:28