summaryrefslogtreecommitdiff
path: root/src/lockwidget.h
blob: 9c555ac9852c82795c9e73c5663414d943db0ba6 (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
#pragma once

#include <QMainWindow>

class LockWidget
{
public:
  enum Reasons
  {
    NoReason = 0,
    LockUI,
    OutputRequired,
    PreventExit
  };

  enum Results
  {
    NoResult = 0,
    StillLocked,
    ForceUnlocked,
    Cancelled
  };

  LockWidget(QWidget* parent, Reasons reason=NoReason);
  ~LockWidget();

  void lock(Reasons reason);
  void unlock();

  void setInfo(DWORD pid, const QString& name);
  Results result() const;

private:
  class Filter : public QObject
  {
  public:
    std::function<void ()> resized;

  protected:
    bool eventFilter(QObject* o, QEvent* e) override
    {
      if (e->type() == QEvent::Resize) {
        if (resized) {
          resized();
        }
      }

      return QObject::eventFilter(o, e);
    }
  };


  QWidget* m_parent;
  std::unique_ptr<QWidget> m_overlay;
  QLabel* m_info;
  Results m_result;
  std::unique_ptr<Filter> m_filter;
  std::vector<QPointer<QWidget>> m_disabled;

  void createUi(Reasons reason);

  void onForceUnlock();
  void onCancel();

  void disableAll();
  void enableAll();
  void disable(QWidget* w);
};