OptionFriends.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. // OptionFriends.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "cp_main.h"
  5. #include "OptionFriends.h"
  6. #include "FriendDetails.h"
  7. #include "DimWnd.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. #define EMPTRY_STRING "----"
  14. /////////////////////////////////////////////////////////////////////////////
  15. // COptionFriends property page
  16. IMPLEMENT_DYNCREATE(COptionFriends, CPropertyPage)
  17. COptionFriends::COptionFriends() : CPropertyPage(COptionFriends::IDD)
  18. {
  19. m_csTitle = theApp.m_Language.GetString("FriendsTitle", "Friends");
  20. m_psp.pszTitle = m_csTitle;
  21. m_psp.dwFlags |= PSP_USETITLE;
  22. //{{AFX_DATA_INIT(COptionFriends)
  23. m_PlaceOnClipboard = _T("");
  24. m_csPassword = _T("");
  25. m_csAdditionalPasswords = _T("");
  26. //}}AFX_DATA_INIT
  27. }
  28. COptionFriends::~COptionFriends()
  29. {
  30. }
  31. void COptionFriends::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CPropertyPage::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(COptionFriends)
  35. DDX_Control(pDX, IDC_CHECK_DISABLE_FRIENDS, m_bDisableRecieve);
  36. DDX_Control(pDX, IDC_CHECK_LOG_SEND_RECIEVE, m_SendRecieve);
  37. DDX_Control(pDX, IDC_LIST, m_List);
  38. DDX_Text(pDX, IDC_EDIT_PLACE_ON_CLIPBOARD, m_PlaceOnClipboard);
  39. DDX_Text(pDX, IDC_EDIT_PASSWORD, m_csPassword);
  40. DDX_Text(pDX, IDC_EDIT_ADDITIONAL, m_csAdditionalPasswords);
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(COptionFriends, CPropertyPage)
  44. //{{AFX_MSG_MAP(COptionFriends)
  45. ON_NOTIFY(NM_DBLCLK, IDC_LIST, OnDblclkList)
  46. ON_NOTIFY(LVN_KEYDOWN, IDC_LIST, OnKeydownList)
  47. ON_BN_CLICKED(IDC_CHECK_DISABLE_FRIENDS, OnCheckDisableFriends)
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // COptionFriends message handlers
  52. BOOL COptionFriends::OnInitDialog()
  53. {
  54. CPropertyPage::OnInitDialog();
  55. m_pParent = (COptionsSheet *)GetParent();
  56. m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT);
  57. InitListCtrlCols();
  58. InsertItems();
  59. m_SendRecieve.SetCheck(CGetSetOptions::GetLogSendReceiveErrors());
  60. m_bDisableRecieve.SetCheck(CGetSetOptions::GetDisableRecieve());
  61. m_PlaceOnClipboard = g_Opt.m_csIPListToPutOnClipboard;
  62. m_csPassword = g_Opt.m_csPassword;
  63. m_csAdditionalPasswords = CGetSetOptions::GetExtraNetworkPassword(false);
  64. if(g_Opt.GetRequestFilesUsingIP())
  65. {
  66. ::CheckDlgButton(m_hWnd, IDC_RADIO_USE_IP, BST_CHECKED);
  67. }
  68. else
  69. {
  70. ::CheckDlgButton(m_hWnd, IDC_RADIO_USE_HOST_NAME, BST_CHECKED);
  71. }
  72. UpdateData(FALSE);
  73. theApp.m_Language.UpdateOptionFriends(this);
  74. return FALSE;
  75. }
  76. BOOL COptionFriends::OnApply()
  77. {
  78. CSendClients client;
  79. for (int i = 0; i < MAX_SEND_CLIENTS; i++)
  80. {
  81. if(m_List.GetItemText(i, 1) == "X")
  82. client.bSendAll = TRUE;
  83. else
  84. client.bSendAll = FALSE;
  85. client.csIP = m_List.GetItemText(i, 2);
  86. if(client.csIP == EMPTRY_STRING)
  87. client.csIP = "";
  88. client.csDescription = m_List.GetItemText(i, 3);
  89. if(client.csDescription == EMPTRY_STRING)
  90. client.csDescription = "";
  91. g_Opt.SetSendClients(client, i);
  92. }
  93. CGetSetOptions::SetNetworkPassword(m_csPassword);
  94. CGetSetOptions::SetLogSendReceiveErrors(m_SendRecieve.GetCheck());
  95. CGetSetOptions::SetDisableRecieve(m_bDisableRecieve.GetCheck());
  96. theApp.StartStopServerThread();
  97. UpdateData();
  98. g_Opt.SetListToPutOnClipboard(m_PlaceOnClipboard);
  99. g_Opt.SetNetworkPassword(m_csPassword);
  100. g_Opt.GetClientSendCount();
  101. g_Opt.SetExtraNetworkPassword(m_csAdditionalPasswords);
  102. //get get to refill the array extra passwords
  103. g_Opt.GetExtraNetworkPassword(true);
  104. if(::IsDlgButtonChecked(m_hWnd, IDC_RADIO_USE_IP) == BST_CHECKED)
  105. {
  106. g_Opt.SetRequestFilesUsingIP(TRUE);
  107. }
  108. else if(::IsDlgButtonChecked(m_hWnd, IDC_RADIO_USE_HOST_NAME) == BST_CHECKED)
  109. {
  110. g_Opt.SetRequestFilesUsingIP(FALSE);
  111. }
  112. return CPropertyPage::OnApply();
  113. }
  114. void COptionFriends::InitListCtrlCols()
  115. {
  116. // Insert some columns
  117. m_List.InsertColumn(0, _T(""), LVCFMT_LEFT, 25);
  118. m_List.InsertColumn(1, theApp.m_Language.GetString("Send_All_Copies", "Send All Copies"), LVCFMT_LEFT, 90);
  119. m_List.InsertColumn(2, theApp.m_Language.GetString("IP_Name", "IP/Name"), LVCFMT_LEFT, 135);
  120. m_List.InsertColumn(3, theApp.m_Language.GetString("Descriptions", "Descriptions"), LVCFMT_LEFT, 157);
  121. }
  122. void COptionFriends::InsertItems()
  123. {
  124. // Delete the current contents
  125. m_List.DeleteAllItems();
  126. // Use the LV_ITEM structure to insert the items
  127. LVITEM lvi;
  128. CString strItem;
  129. for (int i = 0; i < MAX_SEND_CLIENTS; i++)
  130. {
  131. // Insert the first item
  132. lvi.mask = LVIF_TEXT;
  133. lvi.iItem = i;
  134. //-------------------------------------------------------------------
  135. strItem.Format(_T("%d"), i+1);
  136. lvi.iSubItem = 0;
  137. lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
  138. m_List.InsertItem(&lvi);
  139. //-------------------------------------------------------------------
  140. if(g_Opt.m_SendClients[i].bSendAll)
  141. strItem = "X";
  142. else
  143. strItem = EMPTRY_STRING;
  144. m_List.SetItemText(i, 1, strItem);
  145. //-------------------------------------------------------------------
  146. strItem = g_Opt.m_SendClients[i].csIP;
  147. if(g_Opt.m_SendClients[i].csIP.GetLength() <= 0)
  148. {
  149. strItem = EMPTRY_STRING;
  150. }
  151. m_List.SetItemText(i, 2, strItem);
  152. //-------------------------------------------------------------------
  153. strItem = g_Opt.m_SendClients[i].csDescription;
  154. if(g_Opt.m_SendClients[i].csDescription.GetLength() <= 0)
  155. {
  156. strItem = EMPTRY_STRING;
  157. }
  158. m_List.SetItemText(i, 3, strItem);
  159. }
  160. }
  161. void COptionFriends::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
  162. {
  163. POSITION pos = m_List.GetFirstSelectedItemPosition();
  164. if(pos)
  165. {
  166. int nItem = m_List.GetNextSelectedItem(pos);
  167. EditItem(nItem);
  168. }
  169. *pResult = 0;
  170. }
  171. BOOL COptionFriends::EditItem(int nItem)
  172. {
  173. CDimWnd dim(this->GetParent());
  174. CFriendDetails dlg(this);
  175. if(m_List.GetItemText(nItem, 1) == "X")
  176. dlg.m_checkSendAll = TRUE;
  177. else
  178. dlg.m_checkSendAll = FALSE;
  179. dlg.m_csIP = m_List.GetItemText(nItem, 2);
  180. if(dlg.m_csIP == EMPTRY_STRING)
  181. dlg.m_csIP = "";
  182. dlg.m_csDescription = m_List.GetItemText(nItem, 3);
  183. if(dlg.m_csDescription == EMPTRY_STRING)
  184. dlg.m_csDescription = "";
  185. if(dlg.DoModal() == IDOK)
  186. {
  187. if(dlg.m_checkSendAll)
  188. {
  189. m_List.SetItemText(nItem, 1, _T("X"));
  190. }
  191. else
  192. m_List.SetItemText(nItem, 1, _T(""));
  193. m_List.SetItemText(nItem, 2, dlg.m_csIP);
  194. m_List.SetItemText(nItem, 3, dlg.m_csDescription);
  195. return TRUE;
  196. }
  197. return FALSE;
  198. }
  199. void COptionFriends::OnKeydownList(NMHDR* pNMHDR, LRESULT* pResult)
  200. {
  201. LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
  202. switch (pLVKeyDow->wVKey)
  203. {
  204. case VK_DELETE:
  205. {
  206. POSITION pos = m_List.GetFirstSelectedItemPosition();
  207. if(pos)
  208. {
  209. int nItem = m_List.GetNextSelectedItem(pos);
  210. m_List.SetItemText(nItem, 1, _T(EMPTRY_STRING));
  211. m_List.SetItemText(nItem, 2, _T(EMPTRY_STRING));
  212. m_List.SetItemText(nItem, 3, _T(EMPTRY_STRING));
  213. }
  214. }
  215. break;
  216. case VK_RETURN:
  217. {
  218. POSITION pos = m_List.GetFirstSelectedItemPosition();
  219. if(pos)
  220. {
  221. int nItem = m_List.GetNextSelectedItem(pos);
  222. EditItem(nItem);
  223. }
  224. }
  225. break;
  226. }
  227. *pResult = 0;
  228. }
  229. void COptionFriends::OnCheckDisableFriends()
  230. {
  231. if(m_bDisableRecieve.GetCheck() == BST_CHECKED)
  232. GetDlgItem(IDC_EDIT_PLACE_ON_CLIPBOARD)->EnableWindow(FALSE);
  233. else
  234. GetDlgItem(IDC_EDIT_PLACE_ON_CLIPBOARD)->EnableWindow(TRUE);
  235. }