author | Michael Krelin <hacker@klever.net> | 2004-07-05 01:53:09 (UTC) |
---|---|---|
committer | Michael Krelin <hacker@klever.net> | 2004-07-05 01:53:09 (UTC) |
commit | 955d4e00adc9f39ab93bf21f07506eb75b013c70 (patch) (unidiff) | |
tree | 92493a2c9ac206b822e24a9e5a6f6b1589be6afb /shared-code/BellsNWhistles.h | |
download | T42-955d4e00adc9f39ab93bf21f07506eb75b013c70.zip T42-955d4e00adc9f39ab93bf21f07506eb75b013c70.tar.gz T42-955d4e00adc9f39ab93bf21f07506eb75b013c70.tar.bz2 |
initial commit into svn repository
git-svn-id: http://svn.klever.net/kin/T42/trunk@1 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (limited to 'shared-code/BellsNWhistles.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | shared-code/BellsNWhistles.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/shared-code/BellsNWhistles.h b/shared-code/BellsNWhistles.h new file mode 100644 index 0000000..1de77ae --- a/dev/null +++ b/shared-code/BellsNWhistles.h | |||
@@ -0,0 +1,146 @@ | |||
1 | #ifndef__BELLSNWHISTLES_H | ||
2 | #define __BELLSNWHISTLES_H | ||
3 | |||
4 | class CBellsNWhistles{ | ||
5 | public: | ||
6 | class CBang { | ||
7 | public: | ||
8 | CString m_codeName; | ||
9 | enum_bangType { | ||
10 | bangNone, bangSpeaker, bangSystem, bangResource, | ||
11 | bangWaveform | ||
12 | }m_type; | ||
13 | BOOL m_bLoop; | ||
14 | union{ | ||
15 | UINT system; | ||
16 | LPCTSTR resource; | ||
17 | LPCTSTR wave; | ||
18 | |||
19 | LPCTSTR str; | ||
20 | UINT id; | ||
21 | }; | ||
22 | CString m_strWave; | ||
23 | CBang() : m_type(bangNone), m_bLoop(FALSE) {} | ||
24 | }; | ||
25 | typedef CTypedPtrMap<CMapStringToPtr,CString,CBang*> CBangs; | ||
26 | structCBelling { | ||
27 | LPCSTR snd; | ||
28 | HMODULE hm; | ||
29 | DWORD flags; | ||
30 | CBelling(LPCSTR snd,HMODULE hm,DWORD flags) : snd(snd), hm(hm), | ||
31 | flags(flags) {} | ||
32 | CBelling(CBelling& s) : snd(s.snd), hm(s.hm), flags(s.flags) {} | ||
33 | CBelling& operator=(CBelling& s) { | ||
34 | snd=s.snd; hm=s.hm; flags=s.flags; | ||
35 | return *this; | ||
36 | } | ||
37 | }; | ||
38 | typedef CBelling* Whistling; | ||
39 | |||
40 | CBangs m_bangs; | ||
41 | |||
42 | ~CBellsNWhistles() { | ||
43 | POSITION p = m_bangs.GetStartPosition(); | ||
44 | while(p){ | ||
45 | CString s; CBang* b; | ||
46 | m_bangs.GetNextAssoc(p,s,b); | ||
47 | delete b; | ||
48 | } | ||
49 | m_bangs.RemoveAll(); | ||
50 | } | ||
51 | |||
52 | BOOL AssignSound(LPCTSTR codeName,LPCTSTR id,CBang::_bangType type=CBang::bangWaveform) { | ||
53 | CString cn = codeName; | ||
54 | cn.MakeLower(); | ||
55 | CBang* b; | ||
56 | if(!m_bangs.Lookup(cn,b)) { | ||
57 | b = new CBang; | ||
58 | b->m_codeName=cn; | ||
59 | m_bangs[cn]=b; | ||
60 | } | ||
61 | b->m_type=type; | ||
62 | b->str = id; | ||
63 | if(type==CBang::bangWaveform){ | ||
64 | b->m_strWave=id; b->str = b->m_strWave; | ||
65 | } | ||
66 | return TRUE; | ||
67 | } | ||
68 | BOOL AssignSound(LPCTSTR codeName,UINT nID,CBang::_bangType type=CBang::bangResource) { | ||
69 | CString cn = codeName; | ||
70 | cn.MakeLower(); | ||
71 | CBang* b; | ||
72 | if(!m_bangs.Lookup(cn,b)) { | ||
73 | b = new CBang; | ||
74 | b->m_codeName=cn; | ||
75 | m_bangs[cn]=b; | ||
76 | } | ||
77 | b->m_type=type; | ||
78 | b->id = nID; | ||
79 | ASSERT(type!=CBang::bangWaveform); | ||
80 | return TRUE; | ||
81 | } | ||
82 | BOOL UnassignSound(LPCTSTR codeName) { | ||
83 | CString cn = codeName; | ||
84 | cn.MakeLower(); | ||
85 | CBang* b; | ||
86 | if(m_bangs.Lookup(cn,b)) { | ||
87 | m_bangs.RemoveKey(cn); | ||
88 | delete b; | ||
89 | return TRUE; | ||
90 | } | ||
91 | return FALSE; | ||
92 | } | ||
93 | |||
94 | Whistling StartSound(LPCTSTR codeName) { | ||
95 | Whistling* rv = NULL; | ||
96 | CString cn = codeName; | ||
97 | CBang* b; | ||
98 | if(!m_bangs.Lookup(cn,b)){ | ||
99 | ::PlaySound(cn,AfxGetInstanceHandle(),SND_ASYNC|SND_NODEFAULT|SND_NOWAIT|SND_FILENAME); | ||
100 | return NULL; | ||
101 | } | ||
102 | UINT flags = SND_ASYNC|SND_NODEFAULT|SND_NOWAIT; | ||
103 | LPCSTR snd = NULL; | ||
104 | switch(b->m_type){ | ||
105 | case CBang::bangNone: return NULL; | ||
106 | case CBang::bangSpeaker: MessageBeep(0xFFFFFFFF); return NULL; | ||
107 | case CBang::bangSystem: MessageBeep(b->system); return NULL; | ||
108 | case CBang::bangResource: | ||
109 | snd = b->resource; | ||
110 | flags|=SND_RESOURCE; break; | ||
111 | case CBang::bangWaveform: | ||
112 | snd = b->wave; | ||
113 | flags|=SND_FILENAME; break; | ||
114 | #ifdef _DEBUG | ||
115 | default: | ||
116 | ASSERT(FALSE); return NULL; | ||
117 | #endif | ||
118 | } | ||
119 | if(b->m_bLoop) | ||
120 | flags|=SND_LOOP; | ||
121 | HMODULE hm = AfxGetInstanceHandle(); | ||
122 | if(!::PlaySound(snd,hm,flags)) | ||
123 | return NULL; | ||
124 | return b->m_bLoop?new CBelling(snd,hm,flags):NULL; | ||
125 | } | ||
126 | BOOL StopSound(Whistling whistle) { | ||
127 | if(!whistle) | ||
128 | return FALSE; | ||
129 | ::PlaySound(whistle->snd,whistle->hm,whistle->flags|SND_PURGE); | ||
130 | delete whistle; | ||
131 | return TRUE; | ||
132 | } | ||
133 | UINT FillInCombo(CComboBox* combo) { | ||
134 | POSITION p = m_bangs.GetStartPosition(); | ||
135 | UINT rv = 0; | ||
136 | while(p) { | ||
137 | CString s; | ||
138 | CBang* b; | ||
139 | m_bangs.GetNextAssoc(p,s,b); | ||
140 | combo->AddString(s); | ||
141 | } | ||
142 | return rv; | ||
143 | } | ||
144 | }; | ||
145 | |||
146 | #endif// _BELLSNWHISTLES_H \ No newline at end of file | ||