From 8bed7960b99979ec40cae299adae9c714dd78f5c Mon Sep 17 00:00:00 2001 From: fcolin Date: Thu, 1 Feb 2007 12:52:19 +0000 Subject: Utilisateur : Fcolin Date : 25/10/01 Heure : 11:44 Créé (vss 1) --- Horloge/HorlogeDlg.cpp | 259 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 Horloge/HorlogeDlg.cpp (limited to 'Horloge') diff --git a/Horloge/HorlogeDlg.cpp b/Horloge/HorlogeDlg.cpp new file mode 100644 index 0000000..1bce992 --- /dev/null +++ b/Horloge/HorlogeDlg.cpp @@ -0,0 +1,259 @@ +// HorlogeDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "Horloge.h" +#include "HorlogeDlg.h" +#include "HorlogeParseCmdLine.h" + +#include "IvyApplication.h" + +#ifdef _DEBUG +#define new DEBUG_NEW +#undef THIS_FILE +static char THIS_FILE[] = __FILE__; +#endif + +///////////////////////////////////////////////////////////////////////////// +// CHorlogeDlg dialog + +CHorlogeDlg::CHorlogeDlg(CWnd* pParent /*=NULL*/) + : CDialog(CHorlogeDlg::IDD, pParent) +{ + //{{AFX_DATA_INIT(CHorlogeDlg) + m_busnumber = _T(""); + m_big_speed = FALSE; + //}}AFX_DATA_INIT + // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); + + bus = NULL; + rate = 1.0; +} + +void CHorlogeDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); + //{{AFX_DATA_MAP(CHorlogeDlg) + DDX_Control(pDX, IDC_SETTIME, m_setTime); + DDX_Control(pDX, IDC_APPLIST, m_applist); + DDX_Control(pDX, IDC_SPEED, m_Speed); + DDX_Control(pDX, IDC_TIME, m_Time); + DDX_Text(pDX, IDC_BUSNUMBER, m_busnumber); + DDX_Check(pDX, IDC_BIGSPEED, m_big_speed); + //}}AFX_DATA_MAP +} + +BEGIN_MESSAGE_MAP(CHorlogeDlg, CDialog) + //{{AFX_MSG_MAP(CHorlogeDlg) + ON_WM_PAINT() + ON_WM_QUERYDRAGICON() + ON_BN_CLICKED(IDC_IVYSTART, OnIvystart) + ON_BN_CLICKED(IDC_PAUSE, OnPause) + ON_BN_CLICKED(IDC_START, OnStart) + ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SETTIME, OnDatetimechangeSettime) + ON_BN_CLICKED(IDC_BACKWARD, OnBackward) + ON_BN_CLICKED(IDC_FORWARD, OnForward) + ON_BN_CLICKED(IDC_BACK_5, OnBack5) + ON_BN_CLICKED(IDC_BACK_2, OnBack2) + ON_BN_CLICKED(IDC_BACK_1, OnBack1) + ON_BN_CLICKED(IDC_FORW_1, OnForw1) + ON_BN_CLICKED(IDC_FORW_2, OnForw2) + ON_BN_CLICKED(IDC_FORW_5, OnForw5) + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + +///////////////////////////////////////////////////////////////////////////// +// CHorlogeDlg message handlers + +BOOL CHorlogeDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // Set the icon for this dialog. The framework does this automatically + // when the application's main window is not a dialog + //SetIcon(m_hIcon, TRUE); // Set big icon + SetIcon(m_hIcon, FALSE); // Set small icon + + ((CButton*)GetDlgItem(IDC_FORWARD))->SetIcon( AfxGetApp()->LoadIcon(IDI_FORWARD)); + ((CButton*)GetDlgItem(IDC_BACKWARD))->SetIcon(AfxGetApp()->LoadIcon(IDI_BACKWARD)); + ((CButton*)GetDlgItem(IDC_PAUSE))->SetIcon(AfxGetApp()->LoadIcon(IDI_PAUSE)); + ((CButton*)GetDlgItem(IDC_START))->SetIcon(AfxGetApp()->LoadIcon(IDI_START)); + + + m_Time.Format("%02d:%02d:%02d", 0,0,0); + m_Speed.Format("%.2f", rate ); + + bus = new Ivy( "Horloge","Horloge READY",this,TRUE); + + // parse command Line Info + HorlogeParseCmdLine cmd; + cmd.m_busNumber = bus->GetDomain( NULL ); + + AfxGetApp()->ParseCommandLine( cmd ); + + // Set Argument from Command Line + m_busnumber = cmd.m_busNumber; + + + bus->BindMsg("^ClockEvent Time=([0-9]+):([0-9]+):([0-9]+) Rate=([-.0-9]+) Bs=([0-9]+)", BUS_CALLBACK_OF(CHorlogeDlg, IvyClockEvent )); + bus->BindMsg("^ClockDatas Time=([0-9]+):([0-9]+):([0-9]+) Rate=([-.0-9]+) Bs=([0-9]+)", BUS_CALLBACK_OF(CHorlogeDlg, IvyClockEvent )); + bus->BindMsg("^rejeu READY", BUS_CALLBACK_OF(CHorlogeDlg, IvyRejeuReady)); + + m_busnumber = bus->GetDomain( m_busnumber ); + UpdateData(FALSE); + + // force bus start in case of start + if ( cmd.m_start ) + OnIvystart(); + + return TRUE; // return TRUE unless you set the focus to a control +} + +// If you add a minimize button to your dialog, you will need the code below +// to draw the icon. For MFC applications using the document/view model, +// this is automatically done for you by the framework. + +void CHorlogeDlg::OnPaint() +{ + if (IsIconic()) + { + CPaintDC dc(this); // device context for painting + + SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); + + // Center icon in client rectangle + int cxIcon = GetSystemMetrics(SM_CXICON); + int cyIcon = GetSystemMetrics(SM_CYICON); + CRect rect; + GetClientRect(&rect); + int x = (rect.Width() - cxIcon + 1) / 2; + int y = (rect.Height() - cyIcon + 1) / 2; + + // Draw the icon + dc.DrawIcon(x, y, m_hIcon); + } + else + { + CDialog::OnPaint(); + } +} + +// The system calls this to obtain the cursor to display while the user drags +// the minimized window. +HCURSOR CHorlogeDlg::OnQueryDragIcon() +{ + return (HCURSOR) m_hIcon; +} + +void CHorlogeDlg::OnIvystart() +{ + UpdateData(TRUE); + bus->stop(); + m_busnumber = bus->GetDomain( m_busnumber ); + bus->start(m_busnumber); + m_applist.ResetContent(); + UpdateData(FALSE); +} +void CHorlogeDlg::OnApplicationConnected(IvyApplication *app) +{ + m_applist.AddString( app->GetName() ); +} +void CHorlogeDlg::OnApplicationDisconnected(IvyApplication *app) +{ + m_applist.DeleteString(m_applist.FindString(0, app->GetName()) ); +} +void CHorlogeDlg::IvyClockEvent( IvyApplication *app, int argc, const char **argv ) +{ + // Ivy ClockEvent Time=10:23:45 Rate=3 Bs=0 + time.wHour = atoi( *argv++ ); + time.wMinute = atoi( *argv++ ); + time.wSecond = atoi( *argv++ ); + rate = atof( *argv++ ); + int BigSpeed = atoi( *argv++ ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); + m_Speed.Format("%.2f", rate ); + m_big_speed = BigSpeed; + m_setTime.SetTime(&time); + UpdateData(FALSE); +} +void CHorlogeDlg::IvyRejeuReady( IvyApplication *app, int argc, const char **argv ) +{ + bus->SendMsg("GetClockDatas"); +} + +void CHorlogeDlg::OnPause() +{ + bus->SendMsg("ClockPause"); +} + +void CHorlogeDlg::OnStart() +{ + bus->SendMsg("ClockStart"); +} + +void CHorlogeDlg::OnBackward() +{ + rate -= 0.5; + m_Speed.Format("%.2f", rate ); + bus->SendMsg("SetClock Rate=%f",rate); +} + +void CHorlogeDlg::OnForward() +{ + rate += 0.5; + m_Speed.Format("%.2f", rate ); + bus->SendMsg("SetClock Rate=%f",rate); +} + + +void CHorlogeDlg::OnDatetimechangeSettime(NMHDR* pNMHDR, LRESULT* pResult) +{ + m_setTime.GetTime(&time); + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); + *pResult = 0; +} + + +void CHorlogeDlg::OnBack5() +{ + time.wMinute -= 5; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} + +void CHorlogeDlg::OnBack2() +{ + time.wMinute -= 2; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} + +void CHorlogeDlg::OnBack1() +{ + time.wMinute -= 1; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} + +void CHorlogeDlg::OnForw1() +{ + time.wMinute += 1; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} + +void CHorlogeDlg::OnForw2() +{ + time.wMinute += 2; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} + +void CHorlogeDlg::OnForw5() +{ + time.wMinute += 5; + bus->SendMsg( "SetClock Time=%d:%d:%d", time.wHour, time.wMinute, time.wSecond ); + m_Time.Format("%02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond); +} -- cgit v1.1