guy ecd44500ea Patch level :
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
1999-01-22 15:25:14 +00:00

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;
}