1 /*---------------------------------------------------------------------------*
2   Project:  HIO2 demos - dual
3   File:     dualView.cpp
4 
5   (C)2005 HUDSON SOFT
6 
7   $Header: /home/cvsroot/SDK/build/demos/hio2demo/vc++/dual/dualView.cpp,v 1.3 2006/03/15 06:31:26 mitu Exp $
8 
9   $NoKeywords: $
10  *---------------------------------------------------------------------------*/
11 
12 // dualView.cpp : implementation of the CDualView class
13 //
14 
15 #include "stdafx.h"
16 #include "dual.h"
17 
18 #include "dualDoc.h"
19 #include "dualView.h"
20 #include ".\dualview.h"
21 
22 #ifdef _DEBUG
23 #define new DEBUG_NEW
24 #endif
25 
26 
27 // CDualView
28 
IMPLEMENT_DYNCREATE(CDualView,CFormView)29 IMPLEMENT_DYNCREATE(CDualView, CFormView)
30 
31 BEGIN_MESSAGE_MAP(CDualView, CFormView)
32     ON_MESSAGE(WM_USER, OnMyMessage)	////////// for dualApp //////////
33 	ON_BN_CLICKED(IDC_BTN_CONNECT, OnBnClickedBtnConnect)
34 	ON_BN_CLICKED(IDC_BTN_DISCONNECT, OnBnClickedBtnDisconnect)
35 	ON_BN_CLICKED(IDC_BTN_EXIT, OnBnClickedBtnExit)
36 	ON_BN_CLICKED(IDC_RADIO_SYNC, OnBnClickedRadioSync)
37 	ON_BN_CLICKED(IDC_RADIO_ASYNC, OnBnClickedRadioAsync)
38 	ON_WM_HSCROLL()
39 END_MESSAGE_MAP()
40 
41 // CDualView construction/destruction
42 
43 CDualView::CDualView()
44 	: CFormView(CDualView::IDD)
45 {
46 	// TODO : add construction code here
47 
48 }
49 
~CDualView()50 CDualView::~CDualView()
51 {
52 }
53 
DoDataExchange(CDataExchange * pDX)54 void CDualView::DoDataExchange(CDataExchange* pDX)
55 {
56 	CFormView::DoDataExchange(pDX);
57 	DDX_Control(pDX, IDC_SLIDER_RED, m_cSliderRed);
58 	DDX_Control(pDX, IDC_SLIDER_GREEN, m_cSliderGreen);
59 	DDX_Control(pDX, IDC_SLIDER_BLUE, m_cSliderBlue);
60 }
61 
PreCreateWindow(CREATESTRUCT & cs)62 BOOL CDualView::PreCreateWindow(CREATESTRUCT& cs)
63 {
64 	// TODO : Modify the Window class or styles here by modifying
65 	//  the CREATESTRUCT cs
66 
67 	return CFormView::PreCreateWindow(cs);
68 }
69 
OnInitialUpdate()70 void CDualView::OnInitialUpdate()
71 {
72 	CFormView::OnInitialUpdate();
73 	GetParentFrame()->RecalcLayout();
74 	ResizeParentToFit();
75 
76 	////////// for dualApp //////////
77 
78 	// RGB buffer initialization
79 	ZeroMemory(&m_stRGB, sizeof(m_stRGB));
80 
81 	// set the range of the slider bar
82 	m_cSliderRed.SetRange(0, 255);
83 	m_cSliderGreen.SetRange(0, 255);
84 	m_cSliderBlue.SetRange(0, 255);
85 
86 	// radio button default setting ("SYNC")
87 	CheckRadioButton(IDC_RADIO_SYNC, IDC_RADIO_ASYNC, IDC_RADIO_SYNC);
88 }
89 
90 
91 // CDualView diagnostics
92 
93 #ifdef _DEBUG
AssertValid() const94 void CDualView::AssertValid() const
95 {
96 	CFormView::AssertValid();
97 }
98 
Dump(CDumpContext & dc) const99 void CDualView::Dump(CDumpContext& dc) const
100 {
101 	CFormView::Dump(dc);
102 }
103 
GetDocument() const104 CDualDoc* CDualView::GetDocument() const // non-debug version is inline
105 {
106 	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDualDoc)));
107 	return (CDualDoc*)m_pDocument;
108 }
109 #endif //_DEBUG
110 
111 ////////// for dualApp //////////
OnMyMessage(WPARAM wParam,LPARAM lParam)112 LRESULT	CDualView::OnMyMessage(WPARAM wParam, LPARAM lParam)
113 {
114 	switch ( wParam )
115 	{
116 	case EVENT_SET_SEND_STATUS:
117 		GetDlgItem(IDC_SEND_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_SEND));
118 		// change the state of the CONNECT/DISCONNECT button
119 		if ( lParam == EVENT_CONNECT )
120 		{
121 			GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
122 			GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
123 		}
124 		else if ( lParam == EVENT_DISCONNECT )
125 		{
126 			GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(TRUE);
127 			GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(FALSE);
128 		}
129 		// called once when else is launched (CDoublwApp->InitInstance)
130 		break;
131 	case EVENT_SET_RECV_STATUS:
132 		GetDlgItem(IDC_RECV_STATUS)->SetWindowText(GetApp()->GetStatus(CDualApp::APP_HIOIF_RECV));
133 		break;
134 	case EVENT_VALID_RECV_COLOR:
135 		GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(TRUE);
136 		break;
137 	case EVENT_INVALID_RECV_COLOR:
138 		GetDlgItem(IDC_STATIC_RECV_RGB)->EnableWindow(FALSE);
139 		break;
140 	case EVENT_UPDATE_COLOR:
141 		{
142 			CString cTmp;
143 			cTmp.Format("RECV R:%02X G:%02X B:%02X",
144 				GetRValue(lParam), GetGValue(lParam), GetBValue(lParam));
145 			SetDlgItemText(IDC_STATIC_RECV_RGB, (LPCSTR)cTmp);
146 		}
147 		break;
148 	}
149 
150 	return 0;
151 }
152 
153 
154 ////////// for dualApp //////////
155 
156 // CDualView message handlers
157 
OnBnClickedBtnConnect()158 void CDualView::OnBnClickedBtnConnect()
159 {
160 	// changes the state of the CONNECT/DISCONNECT button and initialized the slider bar
161 	GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
162 	GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
163 	m_cSliderRed.SetPos(0);
164 	m_cSliderGreen.SetPos(0);
165 	m_cSliderBlue.SetPos(0);
166 	SetDlgItemText(IDC_STATIC_RECV_RGB, "RECV R:00 G:00 B:00");
167 
168 	GetApp()->HioIfInit();
169 }
170 
OnBnClickedBtnDisconnect()171 void CDualView::OnBnClickedBtnDisconnect()
172 {
173 	GetApp()->m_pHioIf->EnterCriticalSection();
174 
175 	GetApp()->Disconnect(GetApp()->m_nRecvID);
176 	GetApp()->Disconnect(GetApp()->m_nSendID);
177 
178 	GetApp()->m_pHioIf->LeaveCriticalSection();
179 }
180 
OnBnClickedBtnExit()181 void CDualView::OnBnClickedBtnExit()
182 {
183 	GetParentFrame()->PostMessage(WM_CLOSE);
184 }
185 
OnBnClickedRadioSync()186 void CDualView::OnBnClickedRadioSync()
187 {
188 	GetApp()->m_bSync = FALSE;
189 }
190 
OnBnClickedRadioAsync()191 void CDualView::OnBnClickedRadioAsync()
192 {
193 	GetApp()->m_bSync = TRUE;
194 }
195 
OnHScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)196 void CDualView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
197 {
198 	// reflect the results of the slider bar in the window and send to NNGC
199 	switch(nSBCode){
200 	case SB_PAGELEFT:
201 	case SB_PAGERIGHT:
202 	case SB_LINELEFT:
203 	case SB_LINERIGHT:
204 	case SB_LEFT:
205 	case SB_RIGHT:
206 		{
207 			CSliderCtrl *pSlider = (CSliderCtrl*)pScrollBar;
208 			nPos = pSlider->GetPos();
209 		}
210 	case SB_THUMBPOSITION:
211 	case SB_THUMBTRACK:
212 		{
213 			// display communications status in the status bar
214 			DWORD dwRecvStat = 0, dwSendStat = 0;
215 			CString cTmp;
216 
217 			GetAppHioIf()->ReadStatus(GetApp()->m_nRecvID, dwRecvStat);
218 			GetAppHioIf()->ReadStatus(GetApp()->m_nSendID, dwSendStat);
219 			cTmp.Format("R:%04X S:%04X",dwRecvStat, dwSendStat);
220 			GetParentFrame()->SetMessageText((LPCSTR)cTmp);
221 
222 			// update the converted color via the slider bar
223 			if( pScrollBar == (CScrollBar *)(&m_cSliderRed) )
224 			{
225 				m_stRGB.rgbRed = nPos;
226 			}
227 			else if( pScrollBar == (CScrollBar *)(&m_cSliderGreen) )
228 			{
229 				m_stRGB.rgbGreen = nPos;
230 			}
231 			else if( pScrollBar == (CScrollBar *)(&m_cSliderBlue) )
232 			{
233 				m_stRGB.rgbBlue = nPos;
234 			}
235 
236 			// send the color data to NNGC
237 			HIO2IF_RESULT result = GetApp()->SendRGB(&m_stRGB);
238 			if ( HIO2IF_FAILED(result) )
239 			{
240 				MessageBox("Send Error", "ERROR", (MB_OK | MB_ICONWARNING));
241 				break;
242 			}
243 #if 0
244 			// communications failure (unable to send state, etc.)
245 			if ( !HIO2IF_SUCCESS(result) )
246 			{
247 				GetParentFrame()->SetMessageText(
248 					(GetAppHioIf()->GetLastError() == HIO2IF_ERROR_CANNOT_SEND_DATA)
249 					? AFX_IDS_BUSYMESSAGE : AFX_IDS_NOTCMESSAGE);
250 			}
251 			else
252 				GetParentFrame()->SetMessageText(AFX_IDS_IDLEMESSAGE);
253 #endif
254 		}
255 		break;
256 	case SB_ENDSCROLL:
257 	default:
258 		break;
259 	}
260 
261 	CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
262 }
263 
OnDraw(CDC *)264 void CDualView::OnDraw(CDC* /*pDC*/)
265 {
266 	// case when NNGC launched earlier
267 	if ( (GetApp()->m_nSendID != HIO2IF_INVALID_ID)
268 		&& (GetAppHioIf()->IsConnected(GetApp()->m_nSendID)) )
269 	{
270 		GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
271 		GetDlgItem(IDC_BTN_DISCONNECT)->EnableWindow(TRUE);
272 	}
273 }
274