Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Migliorie varie sul frontend


git-svn-id: svn://10.65.10.50/trunk@7679 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1999-01-21 16:40:02 +00:00
parent 4f99172ae0
commit 82ff5d5694
19 changed files with 263 additions and 117 deletions

View File

@ -49,7 +49,7 @@ static TFunctionName ftable[MAX_FUNC] =
{ "DongleModules", f_DongleModules, 1 }, { "DongleModules", f_DongleModules, 1 },
{ "DongleNumber", f_DongleNumber, 1 }, { "DongleNumber", f_DongleNumber, 1 },
{ "DongleYear", f_DongleYear, 1 }, { "DongleYear", f_DongleYear, 1 },
{ "UserLogin", f_UserLogin, 0 }, { "UserLogin", f_UserLogin, 0 },
{ "UserLogout", f_UserLogout, 0 }, { "UserLogout", f_UserLogout, 0 },
}; };

View File

@ -3,7 +3,7 @@
#include "connect.h" #include "connect.h"
#include "server.h" #include "server.h"
int CountPeerUser(TConnection& conn, void* pJolly) static int CountPeerUser(TConnection& conn, void* pJolly)
{ {
const CString& strPeerUser = *(CString*)pJolly; const CString& strPeerUser = *(CString*)pJolly;
const int at = strPeerUser.Find('@'); const int at = strPeerUser.Find('@');

View File

@ -43,7 +43,7 @@ BOOL CFrontEndDoc::OnNewDocument()
return FALSE; return FALSE;
SetTitle("PRASSI"); SetTitle("PRASSI");
return TRUE; return TRUE;
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@ -31,7 +31,7 @@ public:
#endif #endif
protected: protected:
virtual BOOL DoSave(LPCTSTR lpszPathName, BOOL bReplace); virtual BOOL DoSave(LPCTSTR lpszPathName, BOOL bReplace);
// Generated message map functions // Generated message map functions
protected: protected:

Binary file not shown.

View File

@ -2,24 +2,25 @@
[General Info] [General Info]
Version=1 Version=1
LastClass=CStatusDlg LastClass=CMainFrame
LastTemplate=CDialog LastTemplate=CDialog
NewFileInclude1=#include "stdafx.h" NewFileInclude1=#include "stdafx.h"
NewFileInclude2=#include "FrontEnd.h" NewFileInclude2=#include "FrontEnd.h"
LastPage=0 LastPage=0
ClassCount=6 ClassCount=7
Class1=CFrontEndApp Class1=CFrontEndApp
Class2=CFrontEndDoc Class2=CFrontEndDoc
Class3=CFrontEndView Class3=CFrontEndView
Class4=CMainFrame Class4=CMainFrame
ResourceCount=3 ResourceCount=3
Resource1=IDR_MAINFRAME Resource1=IDD_ABOUTBOX
Class5=CAboutDlg Class5=CAboutDlg
Resource2=IDD_STATUS Resource2=IDD_STATUS
Class6=CStatusDlg Class6=CStatusDlg
Resource3=IDD_ABOUTBOX Class7=TConnectionsDlg
Resource3=IDR_MAINFRAME
[CLS:CFrontEndApp] [CLS:CFrontEndApp]
Type=0 Type=0
@ -52,7 +53,7 @@ ImplementationFile=MainFrm.cpp
Filter=T Filter=T
BaseClass=CFrameWnd BaseClass=CFrameWnd
VirtualFilter=fWC VirtualFilter=fWC
LastObject=ID_NOTEPAD LastObject=CMainFrame
@ -87,10 +88,11 @@ Command3=ID_EDIT_CLEAR_ALL
Command4=ID_NOTEPAD Command4=ID_NOTEPAD
Command5=ID_VIEW_TRACE Command5=ID_VIEW_TRACE
Command6=ID_VIEW_STATUS Command6=ID_VIEW_STATUS
Command7=ID_VIEW_TOOLBAR Command7=ID_VIEW_TREE
Command8=ID_VIEW_STATUS_BAR Command8=ID_VIEW_TOOLBAR
Command9=ID_APP_ABOUT Command9=ID_VIEW_STATUS_BAR
CommandCount=9 Command10=ID_APP_ABOUT
CommandCount=10
[ACL:IDR_MAINFRAME] [ACL:IDR_MAINFRAME]
Type=1 Type=1
@ -112,7 +114,7 @@ CommandCount=13
[TB:IDR_MAINFRAME] [TB:IDR_MAINFRAME]
Type=1 Type=1
Class=? Class=CMainFrame
Command1=ID_FILE_SAVE_AS Command1=ID_FILE_SAVE_AS
Command2=ID_VIEW_TRACE Command2=ID_VIEW_TRACE
Command3=ID_EDIT_CLEAR_ALL Command3=ID_EDIT_CLEAR_ALL
@ -121,18 +123,6 @@ Command5=ID_APP_EXIT
Command6=ID_APP_ABOUT Command6=ID_APP_ABOUT
CommandCount=6 CommandCount=6
[DLG:IDD_STATUS]
Type=1
Class=CStatusDlg
ControlCount=7
Control1=IDOK,button,1342242817
Control2=IDC_STATIC,static,1342308352
Control3=IDC_USERS,static,1342312448
Control4=IDC_STATIC,static,1342308352
Control5=IDC_CONNECTIONS,static,1342312448
Control6=IDC_STATIC,static,1342308352
Control7=IDC_PEERS,static,1342312448
[CLS:CStatusDlg] [CLS:CStatusDlg]
Type=0 Type=0
HeaderFile=StatDlg.h HeaderFile=StatDlg.h
@ -142,3 +132,26 @@ Filter=D
LastObject=CStatusDlg LastObject=CStatusDlg
VirtualFilter=dWC VirtualFilter=dWC
[CLS:TConnectionsDlg]
Type=0
HeaderFile=ConnDlg.h
ImplementationFile=ConnDlg.cpp
BaseClass=CDialog
Filter=D
LastObject=IDC_USERS
VirtualFilter=dWC
[DLG:IDD_STATUS]
Type=1
Class=TConnectionsDlg
ControlCount=9
Control1=IDCANCEL,button,1342242816
Control2=IDC_TREE,SysTreeView32,1350631424
Control3=IDC_UPDATE,button,1342242816
Control4=IDC_STATIC,static,1342308352
Control5=IDC_USERS,static,1342312448
Control6=IDC_STATIC,static,1342308352
Control7=IDC_CONNECTIONS,static,1342312448
Control8=IDC_STATIC,static,1342308352
Control9=IDC_PEERS,static,1342312448

View File

@ -172,21 +172,6 @@ int CFrontEndApp::ExitInstance()
return CWinApp::ExitInstance(); return CWinApp::ExitInstance();
} }
void CFrontEndApp::OnAppExit()
{
BOOL bCanExit = !GetServer().HasConnections();
if (!bCanExit)
{
int nCode = AfxMessageBox("Ci sono ancora degli utenti collegati:\n"
"Si desidera uscire ugualmete?",
MB_YESNO | MB_ICONQUESTION);
if (nCode == IDYES)
bCanExit = TRUE;
}
if (bCanExit)
CWinApp::OnAppExit();
}
BOOL CAboutDlg::OnInitDialog() BOOL CAboutDlg::OnInitDialog()
{ {
CDialog::OnInitDialog(); CDialog::OnInitDialog();

View File

@ -29,7 +29,6 @@ public:
//{{AFX_MSG(CFrontEndApp) //{{AFX_MSG(CFrontEndApp)
afx_msg void OnAppAbout(); afx_msg void OnAppAbout();
afx_msg void OnAppExit();
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
}; };

View File

@ -114,7 +114,8 @@ BEGIN
POPUP "&Visualizza" POPUP "&Visualizza"
BEGIN BEGIN
MENUITEM "&Trace", ID_VIEW_TRACE MENUITEM "&Trace", ID_VIEW_TRACE
MENUITEM "Stato del sistema...", ID_VIEW_STATUS MENUITEM "Numero utenti...", ID_VIEW_STATUS
MENUITEM "Stato del sistema...", ID_VIEW_TREE
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Barra degli st&rumenti", ID_VIEW_TOOLBAR MENUITEM "Barra degli st&rumenti", ID_VIEW_TOOLBAR
MENUITEM "Barra di st&ato", ID_VIEW_STATUS_BAR MENUITEM "Barra di st&ato", ID_VIEW_STATUS_BAR
@ -170,18 +171,21 @@ BEGIN
LTEXT "Disco",IDC_STATIC,50,55,19,8 LTEXT "Disco",IDC_STATIC,50,55,19,8
END END
IDD_STATUS DIALOGEX 0, 0, 152, 78 IDD_STATUS DIALOGEX 0, 0, 267, 174
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Utenti del sistema" CAPTION "Connections"
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
DEFPUSHBUTTON "OK",IDOK,50,55,50,14 PUSHBUTTON "Close",IDCANCEL,210,153,50,14
LTEXT "Numero connessioni",IDC_STATIC,7,40,84,8 CONTROL "Tree1",IDC_TREE,"SysTreeView32",WS_BORDER | WS_TABSTOP,
LTEXT "0",IDC_USERS,111,23,34,10,SS_SUNKEN,WS_EX_RIGHT 7,7,195,160
LTEXT "Numero utenti",IDC_STATIC,7,25,84,8 PUSHBUTTON "Update Now",IDC_UPDATE,210,7,50,14
LTEXT "0",IDC_CONNECTIONS,111,38,34,10,SS_SUNKEN,WS_EX_RIGHT LTEXT "Connessioni",IDC_STATIC,207,102,53,8
LTEXT "Numero stazioni di lavoro",IDC_STATIC,7,9,84,8 LTEXT "0",IDC_USERS,207,76,53,10,SS_SUNKEN,WS_EX_RIGHT
LTEXT "0",IDC_PEERS,111,7,34,10,SS_SUNKEN,WS_EX_RIGHT LTEXT "Numero utenti",IDC_STATIC,207,66,50,8
LTEXT "0",IDC_CONNECTIONS,207,114,53,10,SS_SUNKEN,WS_EX_RIGHT
LTEXT "Stazioni",IDC_STATIC,209,31,51,8
LTEXT "0",IDC_PEERS,207,42,53,10,SS_SUNKEN,WS_EX_RIGHT
END END
@ -246,9 +250,9 @@ BEGIN
IDD_STATUS, DIALOG IDD_STATUS, DIALOG
BEGIN BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
RIGHTMARGIN, 145 RIGHTMARGIN, 260
TOPMARGIN, 7 TOPMARGIN, 7
BOTTOMMARGIN, 69 BOTTOMMARGIN, 167
END END
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
@ -368,6 +372,7 @@ STRINGTABLE DISCARDABLE
BEGIN BEGIN
ID_VIEW_TRACE "Logging degli eventi" ID_VIEW_TRACE "Logging degli eventi"
ID_VIEW_STATUS "Mostra lo stato del sistema\nStato del sistema..." ID_VIEW_STATUS "Mostra lo stato del sistema\nStato del sistema..."
ID_VIEW_TREE "Mostra le connessioni al sistema\nConnessioni..."
END END
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE

View File

@ -6,7 +6,7 @@
#include "FrontEnd.h" #include "FrontEnd.h"
#include "FrontDoc.h" #include "FrontDoc.h"
#include "FrontVw.h" #include "FrontVw.h"
#include "StatDlg.h" #include "Server.h"
#include "Tracing.h" #include "Tracing.h"
#ifdef _DEBUG #ifdef _DEBUG
@ -27,8 +27,6 @@ BEGIN_MESSAGE_MAP(CFrontEndView, CTreeView)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll) ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_ALL, OnUpdateEditClearAll)
ON_COMMAND(ID_VIEW_TRACE, OnViewTrace) ON_COMMAND(ID_VIEW_TRACE, OnViewTrace)
ON_UPDATE_COMMAND_UI(ID_VIEW_TRACE, OnUpdateViewTrace) ON_UPDATE_COMMAND_UI(ID_VIEW_TRACE, OnUpdateViewTrace)
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS, OnUpdateViewStatus)
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -90,15 +88,15 @@ CFrontEndDoc* CFrontEndView::GetDocument() // non-debug version is inline
void CFrontEndView::OnUpdateFileSaveAs(CCmdUI* pCmdUI) void CFrontEndView::OnUpdateFileSaveAs(CCmdUI* pCmdUI)
{ {
CTreeCtrl& pTreeCtrl = GetTreeCtrl(); CTreeCtrl& rTreeCtrl = GetTreeCtrl();
pCmdUI->Enable(pTreeCtrl.GetCount() > 0); pCmdUI->Enable(rTreeCtrl.GetCount() > 0);
} }
void CFrontEndView::OnEditClearAll() void CFrontEndView::OnEditClearAll()
{ {
CWaitCursor HourGlass; CWaitCursor HourGlass;
CTreeCtrl& pTreeCtrl = GetTreeCtrl(); CTreeCtrl& rTreeCtrl = GetTreeCtrl();
pTreeCtrl.DeleteAllItems(); rTreeCtrl.DeleteAllItems();
Invalidate(); Invalidate();
} }
@ -117,13 +115,3 @@ void CFrontEndView::OnUpdateViewTrace(CCmdUI* pCmdUI)
pCmdUI->SetCheck(TracingEnabled()); pCmdUI->SetCheck(TracingEnabled());
} }
void CFrontEndView::OnViewStatus()
{
CStatusDlg dlg(this);
dlg.DoModal();
}
void CFrontEndView::OnUpdateViewStatus(CCmdUI* pCmdUI)
{
pCmdUI->Enable();
}

View File

@ -41,8 +41,6 @@ protected:
afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI); afx_msg void OnUpdateEditClearAll(CCmdUI* pCmdUI);
afx_msg void OnViewTrace(); afx_msg void OnViewTrace();
afx_msg void OnUpdateViewTrace(CCmdUI* pCmdUI); afx_msg void OnUpdateViewTrace(CCmdUI* pCmdUI);
afx_msg void OnViewStatus();
afx_msg void OnUpdateViewStatus(CCmdUI* pCmdUI);
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
}; };

View File

@ -3,8 +3,10 @@
#include "stdafx.h" #include "stdafx.h"
#include "FrontEnd.h" #include "FrontEnd.h"
#include "Server.h"
#include "MainFrm.h" #include "MainFrm.h"
#include "StatDlg.h"
#ifdef _DEBUG #ifdef _DEBUG
#define new DEBUG_NEW #define new DEBUG_NEW
@ -22,6 +24,9 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE() ON_WM_CREATE()
ON_UPDATE_COMMAND_UI(ID_NOTEPAD, OnUpdateNotepad) ON_UPDATE_COMMAND_UI(ID_NOTEPAD, OnUpdateNotepad)
ON_COMMAND(ID_NOTEPAD, OnNotepad) ON_COMMAND(ID_NOTEPAD, OnNotepad)
ON_COMMAND(ID_VIEW_STATUS, OnViewStatus)
ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS, OnUpdateViewStatus)
ON_WM_CLOSE()
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -117,3 +122,25 @@ void CMainFrame::OnNotepad()
CString cmd = "notepad"; CString cmd = "notepad";
WinExec(cmd, SW_SHOWNORMAL); WinExec(cmd, SW_SHOWNORMAL);
} }
void CMainFrame::OnViewStatus()
{
TConnectionsDlg dlg;
dlg.DoModal();
}
void CMainFrame::OnUpdateViewStatus(CCmdUI* pCmdUI)
{
pCmdUI->Enable();
}
BOOL CMainFrame::OnQueryEndSession()
{
return GetServer().CanClose();
}
void CMainFrame::OnClose()
{
if (GetServer().CanClose())
CFrameWnd::OnClose();
}

View File

@ -17,6 +17,7 @@ public:
// Overrides // Overrides
// ClassWizard generated virtual function overrides // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame) //{{AFX_VIRTUAL(CMainFrame)
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL //}}AFX_VIRTUAL
@ -38,7 +39,12 @@ protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnUpdateNotepad(CCmdUI* pCmdUI); afx_msg void OnUpdateNotepad(CCmdUI* pCmdUI);
afx_msg void OnNotepad(); afx_msg void OnNotepad();
afx_msg void OnViewStatus();
afx_msg void OnUpdateViewStatus(CCmdUI* pCmdUI);
afx_msg void OnClose();
afx_msg BOOL OnQueryEndSession();
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
}; };

View File

@ -16,19 +16,22 @@
#define IDC_GRID 1009 #define IDC_GRID 1009
#define IDC_CONNECTIONS 1009 #define IDC_CONNECTIONS 1009
#define IDC_PEERS 1010 #define IDC_PEERS 1010
#define IDC_TREE 1011
#define IDC_UPDATE 1012
#define stc32 0x045f #define stc32 0x045f
#define ID_BUTTON32772 32772 #define ID_BUTTON32772 32772
#define ID_VIEW_TRACE 32773 #define ID_VIEW_TRACE 32773
#define ID_NOTEPAD 32775 #define ID_NOTEPAD 32775
#define ID_VIEW_STATUS 32776 #define ID_VIEW_STATUS 32776
#define ID_VIEW_TREE 32778
// Next default values for new objects // Next default values for new objects
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 134 #define _APS_NEXT_RESOURCE_VALUE 135
#define _APS_NEXT_COMMAND_VALUE 32778 #define _APS_NEXT_COMMAND_VALUE 32779
#define _APS_NEXT_CONTROL_VALUE 1010 #define _APS_NEXT_CONTROL_VALUE 1013
#define _APS_NEXT_SYMED_VALUE 105 #define _APS_NEXT_SYMED_VALUE 105
#endif #endif
#endif #endif

View File

@ -292,7 +292,6 @@ BOOL TDongleServer::OnConnect(const CString& topic)
return ok; return ok;
} }
TConnection* TDongleServer::OnCreateConnection(DWORD id) TConnection* TDongleServer::OnCreateConnection(DWORD id)
{ {
TConnection* c = NULL; TConnection* c = NULL;
@ -316,7 +315,8 @@ BOOL TDongleServer::OnRemoveConnection(DWORD id)
CString strPeer; CString strPeer;
GetPeerName(id, strPeer); GetPeerName(id, strPeer);
Trace(0, "Disconnecting %lu from %s", id, strPeer); Trace(0, "Disconnecting %lu from %s", id, strPeer);
return BASE_SERVER::OnRemoveConnection(id); BOOL ok = TSocketServer::OnRemoveConnection(id);
return ok;
} }
static int CountUsers(TConnection& conn, void* pJolly) static int CountUsers(TConnection& conn, void* pJolly)
@ -368,9 +368,21 @@ unsigned short TDongleServer::Peers() const
return nTotal; return nTotal;
} }
BOOL TDongleServer::CanClose() const
{
BOOL bCanExit = !HasConnections();
if (!bCanExit)
{
int nCode = AfxMessageBox("Ci sono ancora degli utenti collegati:\n"
"Si desidera uscire ugualmente?",
MB_YESNO | MB_ICONQUESTION);
bCanExit = nCode == IDYES;
}
return bCanExit;
}
TDongleServer::TDongleServer() TDongleServer::TDongleServer()
: BASE_SERVER("DONGLE") : TSocketServer("DONGLE")
{ {
_SerNo = 0xFFFF; _SerNo = 0xFFFF;
_MaxUsers = 0; _MaxUsers = 0;

View File

@ -1,22 +1,14 @@
#ifndef __SERVER_H__ #ifndef __SERVER_H__
#define __SERVER_H__ #define __SERVER_H__
/*
#ifndef __NETDDE_H__
#include "netdde.h"
#define BASE_SERVER TDDEServer
#endif
*/
#ifndef __NETSOCK_H__ #ifndef __NETSOCK_H__
#include "NetSock.h" #include "NetSock.h"
#endif #endif
#define BASE_SERVER TSocketServer
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// TDongleServer // TDongleServer
class TDongleServer : public BASE_SERVER class TDongleServer : public TSocketServer
{ {
enum { MAX_MODULES = 256 }; enum { MAX_MODULES = 256 };
@ -54,6 +46,8 @@ public:
unsigned short Users() const; unsigned short Users() const;
unsigned short Peers() const; unsigned short Peers() const;
BOOL CanClose() const;
TDongleServer(); TDongleServer();
virtual ~TDongleServer(); virtual ~TDongleServer();
}; };

View File

@ -1,9 +1,10 @@
// StatDlg.cpp : implementation file // ConnDlg.cpp : implementation file
// //
#include "stdafx.h" #include "stdafx.h"
#include "Connect.h"
#include "FrontEnd.h" #include "FrontEnd.h"
#include "Connect.h"
#include "StatDlg.h" #include "StatDlg.h"
#include "Server.h" #include "Server.h"
@ -14,46 +15,141 @@ static char THIS_FILE[] = __FILE__;
#endif #endif
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// CStatusDlg dialog // TConnectionsDlg dialog
CStatusDlg::CStatusDlg(CWnd* pParent /*=NULL*/) TConnectionsDlg::TConnectionsDlg(CWnd* pParent /*=NULL*/)
: CDialog(CStatusDlg::IDD, pParent) : CDialog(TConnectionsDlg::IDD, pParent)
{ {
//{{AFX_DATA_INIT(CStatusDlg) //{{AFX_DATA_INIT(TConnectionsDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT //}}AFX_DATA_INIT
} }
void CStatusDlg::DoDataExchange(CDataExchange* pDX) void TConnectionsDlg::DoDataExchange(CDataExchange* pDX)
{ {
CDialog::DoDataExchange(pDX); CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStatusDlg) //{{AFX_DATA_MAP(TConnectionsDlg)
DDX_Control(pDX, IDC_TREE, m_tree);
//}}AFX_DATA_MAP //}}AFX_DATA_MAP
} }
BEGIN_MESSAGE_MAP(CStatusDlg, CDialog) BEGIN_MESSAGE_MAP(TConnectionsDlg, CDialog)
//{{AFX_MSG_MAP(CStatusDlg) //{{AFX_MSG_MAP(TConnectionsDlg)
ON_WM_CLOSE()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_UPDATE, OnUpdateNow)
ON_NOTIFY(TVN_KEYDOWN, IDC_TREE, OnKeydownUsers)
//}}AFX_MSG_MAP //}}AFX_MSG_MAP
END_MESSAGE_MAP() END_MESSAGE_MAP()
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// CStatusDlg message handlers // TConnectionsDlg message handlers
static int add_to_tree(TConnection& rConnection, void* pJolly)
BOOL CStatusDlg::OnInitDialog()
{ {
CDialog::OnInitDialog(); const TPrassiConnection& conn = (const TPrassiConnection&)rConnection;
CTreeCtrl& tree = *(CTreeCtrl*)pJolly;
TDongleServer& srv = GetServer();
for (HTREEITEM hPeer = tree.GetRootItem(); hPeer;
hPeer = tree.GetNextSiblingItem(hPeer))
{
if (tree.GetItemText(hPeer) == conn.PeerName())
break;
}
if (!hPeer)
hPeer = tree.InsertItem(conn.PeerName());
for (HTREEITEM hUser = tree.GetChildItem(hPeer); hUser;
hUser = tree.GetNextSiblingItem(hUser))
{
if (tree.GetItemText(hUser) == conn.User())
break;
}
if (!hUser)
{
BOOL bNewPeer = !tree.ItemHasChildren(hPeer);
hUser = tree.InsertItem(conn.User(), hPeer);
if (bNewPeer)
tree.Expand(hPeer, TVE_EXPAND);
}
BOOL bNewUser = !tree.ItemHasChildren(hUser);
HTREEITEM hApp = tree.InsertItem(conn.Application(), hUser);
if (hApp) tree.SetItemData(hApp, conn.Id());
if (bNewUser)
tree.Expand(hUser, TVE_EXPAND);
return 1;
}
void TConnectionsDlg::UpdateStatus()
{
TDongleServer& srv = GetServer();
const int nPeers = srv.Peers(); const int nPeers = srv.Peers();
const int nUsers = srv.Users(); const int nUsers = srv.Users();
const int nConns = srv.Connections(); const int nConnections = srv.Connections();
SetDlgItemInt(IDC_PEERS, nPeers); SetDlgItemInt(IDC_PEERS, nPeers);
SetDlgItemInt(IDC_USERS, nUsers); SetDlgItemInt(IDC_USERS, nUsers);
SetDlgItemInt(IDC_CONNECTIONS, nConns); SetDlgItemInt(IDC_CONNECTIONS, nConnections);
return TRUE; // return TRUE unless you set the focus to a control m_tree.DeleteAllItems();
srv.ForEachConnection(add_to_tree, &m_tree);
}
BOOL TConnectionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateStatus();
m_nTimerId = SetTimer(1, 10000, NULL); // Ogni dieci secondi
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE // EXCEPTION: OCX Property Pages should return FALSE
} }
void TConnectionsDlg::OnClose()
{
KillTimer(m_nTimerId);
CDialog::OnClose();
}
void TConnectionsDlg::OnTimer(UINT nIDEvent)
{
if (m_nTimerId == nIDEvent)
{
UpdateStatus();
}
CDialog::OnTimer(nIDEvent);
}
void TConnectionsDlg::OnUpdateNow()
{
UpdateStatus();
}
void TConnectionsDlg::OnKeydownUsers(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
if (pTVKeyDown->wVKey == VK_DELETE)
{
HTREEITEM hCurrent = m_tree.GetSelectedItem();
if (hCurrent && !m_tree.ItemHasChildren(hCurrent))
{
DWORD nId = m_tree.GetItemData(hCurrent);
int nCode = AfxMessageBox("Confermate la chiusura della connessione?",
MB_YESNO | MB_ICONQUESTION);
if (nCode == IDYES)
{
GetServer().RemoveConnection(nId);
UpdateStatus();
}
}
}
*pResult = 0;
}

View File

@ -1,24 +1,32 @@
// StatDlg.h : header file #ifndef __CONNDLG_H
#define __CONNDLG_H
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// ConnDlg.h : header file
// //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// CStatusDlg dialog // TConnectionsDlg dialog
class CStatusDlg : public CDialog class TConnectionsDlg : public CDialog
{ {
// Construction // Construction
public: public:
CStatusDlg(CWnd* pParent = NULL); // standard constructor TConnectionsDlg(CWnd* pParent = NULL); // standard constructor
void UpdateStatus();
// Dialog Data // Dialog Data
//{{AFX_DATA(CStatusDlg) //{{AFX_DATA(TConnectionsDlg)
enum { IDD = IDD_STATUS }; enum { IDD = IDD_STATUS };
CTreeCtrl m_tree;
//}}AFX_DATA //}}AFX_DATA
// Overrides // Overrides
// ClassWizard generated virtual function overrides // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CStatusDlg) //{{AFX_VIRTUAL(TConnectionsDlg)
protected: protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL //}}AFX_VIRTUAL
@ -27,8 +35,20 @@ public:
protected: protected:
// Generated message map functions // Generated message map functions
//{{AFX_MSG(CStatusDlg) //{{AFX_MSG(TConnectionsDlg)
virtual BOOL OnInitDialog(); virtual BOOL OnInitDialog();
afx_msg void OnClose();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnUpdateNow();
afx_msg void OnKeydownUsers(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG //}}AFX_MSG
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
private:
UINT m_nTimerId;
}; };
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CONNDLG_H__F6F3B1E2_90D7_11D2_B123_00A0C91DD6F1__INCLUDED_)

View File

@ -28,7 +28,7 @@ BOOL Trace(int level, const char* fmt, ...)
ASSERT(pFrame); ASSERT(pFrame);
CTreeView* pTreeView = (CTreeView*)pFrame->GetActiveView(); CTreeView* pTreeView = (CTreeView*)pFrame->GetActiveView();
ASSERT(pTreeView); ASSERT(pTreeView);
CTreeCtrl& pTreeCtrl = pTreeView->GetTreeCtrl(); CTreeCtrl& rTreeCtrl = pTreeView->GetTreeCtrl();
char msg[256]; char msg[256];
va_list argptr; va_list argptr;
@ -36,8 +36,8 @@ BOOL Trace(int level, const char* fmt, ...)
vsprintf(msg,fmt,argptr); vsprintf(msg,fmt,argptr);
va_end(argptr); va_end(argptr);
HTREEITEM hItem = pTreeCtrl.InsertItem(msg, 0, 0); HTREEITEM hItem = rTreeCtrl.InsertItem(msg);
BOOL ok = hItem != NULL; BOOL ok = hItem != NULL;
return ok; return ok;
} }