Files correlati : Ricompilazione Demo : [ ] Commento : Migliorati controlli sulla chiusura del progrqamma Aggiunti facciotti e pallotoliere git-svn-id: svn://10.65.10.50/trunk@7687 c028cbd2-c16b-5b4b-a496-9718f37d4682
163 lines
3.7 KiB
C++
Executable File
163 lines
3.7 KiB
C++
Executable File
// ConnDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "FrontEnd.h"
|
|
|
|
#include "Connect.h"
|
|
#include "StatDlg.h"
|
|
#include "Server.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// TConnectionsDlg dialog
|
|
|
|
|
|
TConnectionsDlg::TConnectionsDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(TConnectionsDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(TConnectionsDlg)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void TConnectionsDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(TConnectionsDlg)
|
|
DDX_Control(pDX, IDC_TREE, m_tree);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(TConnectionsDlg, CDialog)
|
|
//{{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
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// TConnectionsDlg message handlers
|
|
|
|
static int add_to_tree(TConnection& rConnection, void* pJolly)
|
|
{
|
|
const TPrassiConnection& conn = (const TPrassiConnection&)rConnection;
|
|
CTreeCtrl& tree = *(CTreeCtrl*)pJolly;
|
|
|
|
for (HTREEITEM hPeer = tree.GetRootItem(); hPeer;
|
|
hPeer = tree.GetNextSiblingItem(hPeer))
|
|
{
|
|
if (tree.GetItemText(hPeer) == conn.PeerName())
|
|
break;
|
|
}
|
|
|
|
if (!hPeer)
|
|
hPeer = tree.InsertItem(conn.PeerName(), 0, 0);
|
|
|
|
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(), 1, 1, hPeer);
|
|
if (bNewPeer)
|
|
tree.Expand(hPeer, TVE_EXPAND);
|
|
}
|
|
|
|
BOOL bNewUser = !tree.ItemHasChildren(hUser);
|
|
HTREEITEM hApp = tree.InsertItem(conn.Application(), 2, 2, 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 nUsers = srv.Users();
|
|
const int nConnections = srv.Connections();
|
|
SetDlgItemInt(IDC_PEERS, nPeers);
|
|
SetDlgItemInt(IDC_USERS, nUsers);
|
|
SetDlgItemInt(IDC_CONNECTIONS, nConnections);
|
|
|
|
m_tree.DeleteAllItems();
|
|
srv.ForEachConnection(add_to_tree, &m_tree);
|
|
}
|
|
|
|
BOOL TConnectionsDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
HINSTANCE hInst = AfxGetResourceHandle();
|
|
m_Images.Create(24, 24, ILC_MASK, 3, 0);
|
|
m_Images.Add(::LoadIcon(hInst, "Tree_Computer"));
|
|
m_Images.Add(::LoadIcon(hInst, "Tree_User"));
|
|
m_Images.Add(::LoadIcon(hInst, "Tree_Program"));
|
|
m_tree.SetImageList(&m_Images,TVSIL_NORMAL);
|
|
|
|
UpdateStatus();
|
|
m_nTimerId = SetTimer(1, 10000, NULL); // Ogni dieci secondi
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
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;
|
|
}
|