-
Notifications
You must be signed in to change notification settings - Fork 1
/
Application.cpp
133 lines (104 loc) · 2.57 KB
/
Application.cpp
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
131
132
133
#include "stdafx.h"
#include "Application.h"
#include "TrayIcon.h"
#include "resource.h"
#include "PowerMateBluetooth.h"
#include "PowerMateUSB.h"
#include "Volume.h"
#include <regex>
using namespace PowerMateTray;
static int g_UpdateIntervalMS = 1000 * 60;
Application::Application()
: m_MutexHandle( NULL )
, m_MutexName (wxT("PowerMateTray"))
, m_Title( wxT("PowerMateTray v") VERSION_STRING )
, m_TrayIcon( NULL )
{
}
Application::~Application()
{
}
void Application::OnInitCmdLine( wxCmdLineParser& parser )
{
SetVendorName( wxT("@gorlak") );
parser.SetLogo( wxT("PowerMateTray (c) 20xx - @gorlak\n") );
return __super::OnInitCmdLine( parser );
}
bool Application::OnCmdLineParsed( wxCmdLineParser& parser )
{
return __super::OnCmdLineParsed( parser );
}
bool Application::OnInit()
{
if ( !__super::OnInit() )
{
return false;
}
bool tryAgain = true;
bool haveMutex = false;
do
{
//---------------------------------------
// try to get the Mutex
m_MutexHandle = ::CreateMutex( NULL, true, m_MutexName.c_str() );
if ( m_MutexHandle == NULL || ::GetLastError() == ERROR_ALREADY_EXISTS )
{
// if we couldn't get it, ask if we want to try again
int promptResult = wxMessageBox(
wxT( "PowerMateTray is currently running.\n\nPlease close all instances of it now, then click OK to continue, or Cancel to exit." ),
wxT( "PowerMateTray" ),
wxOK |wxCANCEL | wxCENTER | wxICON_QUESTION );
if ( promptResult == wxCANCEL )
{
return false;
}
CloseHandle(m_MutexHandle);
m_MutexHandle = NULL;
tryAgain = true;
}
else
{
// we got it
haveMutex = true;
tryAgain = false;
}
}
while ( tryAgain );
wxInitAllImageHandlers();
wxImageHandler* curHandler = wxImage::FindHandler( wxBITMAP_TYPE_CUR );
if ( curHandler )
{
// Force the cursor handler to the end of the list so that it doesn't try to open TGA files.
wxImage::RemoveHandler( curHandler->GetName() );
curHandler = NULL;
wxImage::AddHandler( new wxCURHandler );
}
m_TrayIcon = new TrayIcon( this );
StartupVolume();
StartupPowerMateBluetooth();
StartupPowerMateUSB();
return true;
}
int Application::OnRun()
{
m_TrayIcon->Initialize();
return __super::OnRun();
}
int Application::OnExit()
{
// clean up the TrayIcon
m_TrayIcon->Cleanup();
delete m_TrayIcon;
m_TrayIcon = NULL;
wxImage::CleanUpHandlers();
CloseHandle(m_MutexHandle);
m_MutexHandle = NULL;
ShutdownPowerMateUSB();
ShutdownPowerMateBluetooth();
ShutdownVolume();
return __super::OnExit();
}
#ifdef _DEBUG
long& g_BreakOnAlloc (_crtBreakAlloc);
#endif
IMPLEMENT_APP( Application );