PossibleFriendsScreen.as 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. import flash.external.*;
  2. import gfx.controls.TextInput;
  3. import gfx.controls.Button;
  4. import mx.utils.Delegate;
  5. class Screens.PossibleFriendsScreen extends ScreenWithPageNavigator
  6. {
  7. private var targetHandleEditBox:TextInput;
  8. private var subjectEditBox:TextInput;
  9. private var bodyEditBox:TextInput;
  10. private var emailStatusEditBox:TextInput;
  11. private var sendInviteButton:Button;
  12. private var acceptInviteButton:Button;
  13. private var rejectInviteButton:Button;
  14. private var btnMyFriends:Button;
  15. private var mcProfileImage:MovieClip;
  16. private var tfUsername:TextField;
  17. private var mcMail:Mail;
  18. public function PossibleFriendsScreen()
  19. {
  20. ConsoleWindow.Trace("Constructing FriendScreen");
  21. mScreenId = ScreenID.POSSIBLE_FRIENDS;
  22. mScreenTabId = ScreenTab.ID_FRIENDS;
  23. mEntriesPerPage = 10;
  24. mFirstEntryX = 440;
  25. mFirstEntryY = -245;
  26. mDeltaY = 10;
  27. }
  28. public function VOnFinishedLoading():Void
  29. {
  30. //Add click event for buttons
  31. sendInviteButton.addEventListener("click", this, "ShowInvitationMail_Outgoing");
  32. //acceptInviteButton.addEventListener("click", this, "f2c_AcceptInvite");
  33. //rejectInviteButton.addEventListener("click", this, "f2c_RejectInvite");
  34. btnMyFriends.addEventListener("click", this, "ShowMyFriends");
  35. //Add callbacks for C++
  36. ExternalInterface.addCallback("c2f_SendInviteResult", this, c2f_SendInviteResult);
  37. ExternalInterface.addCallback("c2f_AcceptInviteResult", this, c2f_AcceptInviteResult);
  38. ExternalInterface.addCallback("c2f_RejectInviteResult", this, c2f_RejectInviteResult);
  39. ExternalInterface.addCallback("c2f_GetFriendInvites", this, c2f_GetFriendInvites);
  40. //ExternalInterface.addCallback("c2f_GetFriends", this, c2f_GetFriends);
  41. mcMail._visible = false;
  42. super.VOnFinishedLoading();
  43. }
  44. public function OnShow():Void
  45. {
  46. super.OnShow();
  47. if ( !mcProfileImage.mcImageContainer.mcImage )
  48. {
  49. var imageIndex:Number = LobbyInterface.Instance.GetProfileImageIndex();
  50. mcProfileImage.attachMovie( "ProfileImage" + imageIndex, "mcImage", mcProfileImage.getNextHighestDepth() );
  51. }
  52. tfUsername.text = LobbyInterface.Instance.GetUsername();
  53. if ( mMovieClipList.length > 0 )
  54. {
  55. CleanUpMoveClipList( mMovieClipList );
  56. }
  57. mMovieClipList = new Array();
  58. mCurrentPage = 0;
  59. GoToPage( 1 );
  60. f2c_GetFriendInvites();
  61. //mIsWaitingForResponseFromServer = false;
  62. }
  63. public function ShowInvitationMail_Outgoing():Void
  64. {
  65. mcMail.Clear();
  66. mcMail.SetButton( 1, "CANCEL", Delegate.create(this, HideMail) );
  67. mcMail.SetButton( 2, "SEND", Delegate.create(this, f2c_SendInvite) );
  68. mcMail.SetTitle( "ASK " + targetHandleEditBox.text + " TO BE FRIENDS:" );
  69. mcMail.SetToDisplayText( "TO:" );
  70. mcMail.SetToField( targetHandleEditBox.text );
  71. mcMail.DisableToField();
  72. mcMail.swapDepths( getNextHighestDepth() );
  73. mcMail._visible = true;
  74. }
  75. public function ShowInvitationMail_Incoming( username:String ):Void
  76. {
  77. mcMail.Clear();
  78. mcMail.SetButton( 1, "IGNORE", Delegate.create(this, HideMail) );
  79. mcMail.SetButton( 2, "BE FRIENDS", Delegate.create(this, f2c_AcceptInvite) );
  80. mcMail.SetButton( 3, "DECLINE", Delegate.create(this, f2c_RejectInvite) );
  81. mcMail.SetTitle( username + " WANTS TO BE YOUR FRIEND:" );
  82. mcMail.SetToDisplayText( "FROM:" );
  83. mcMail.SetToField( username );
  84. mcMail.DisableToField();
  85. mcMail.swapDepths( getNextHighestDepth() );
  86. mcMail._visible = true;
  87. }
  88. public function HideMail():Void
  89. {
  90. mcMail._visible = false;
  91. }
  92. public function f2c_SendInvite():Void
  93. {
  94. ConsoleWindow.Trace("Attempting to send invitation: name = " + mcMail.GetToField() + ", subject = " + mcMail.GetSubjectField() + ", msg = " + mcMail.GetMsgField());
  95. ExternalInterface.call("f2c_SendInvite", mcMail.GetToField(), mcMail.GetSubjectField(), mcMail.GetMsgField(), "0");
  96. HideMail();
  97. }
  98. public function c2f_SendInviteResult(resultIdentifier:String):Void
  99. {
  100. switch (resultIdentifier)
  101. {
  102. case "Friends_SendInvite_UNKNOWN_TARGET_HANDLE":
  103. break;
  104. case "Friends_SendInvite_CANNOT_PERFORM_ON_SELF":
  105. break;
  106. case "DATABASE_CONSTRAINT_FAILURE":
  107. break;
  108. case "Friends_SendInvite_ALREADY_SENT_INVITE":
  109. break;
  110. case "Friends_SendInvite_ALREADY_FRIENDS":
  111. break;
  112. case "SUCCESS":
  113. ConsoleWindow.Trace("c2f_SendInviteResult: " + resultIdentifier);
  114. break;
  115. }
  116. if ( resultIdentifier != "SUCCESS" )
  117. {
  118. LobbyInterface.Instance.CreateMessageBox( resultIdentifier );
  119. }
  120. }
  121. public function f2c_AcceptInvite():Void
  122. {
  123. ConsoleWindow.Trace("f2c_AcceptInvite: name = " + mcMail.GetToField() + ", subject = " + mcMail.GetSubjectField() + ", msg = " + mcMail.GetMsgField());
  124. ExternalInterface.call("f2c_AcceptInvite", mcMail.GetToField(), mcMail.GetSubjectField(), mcMail.GetMsgField(), "0");
  125. HideMail();
  126. }
  127. public function c2f_AcceptInviteResult(resultIdentifier:String):Void
  128. {
  129. switch (resultIdentifier)
  130. {
  131. case "Friends_AcceptInvite_UNKNOWN_TARGET_HANDLE":
  132. break;
  133. case "Friends_AcceptInvite_CANNOT_PERFORM_ON_SELF":
  134. break;
  135. case "DATABASE_CONSTRAINT_FAILURE":
  136. break;
  137. case "Friends_AcceptInvite_NO_INVITE":
  138. break;
  139. case "Friends_AcceptInvite_NO_INVITE":
  140. break;
  141. case "SUCCESS":
  142. ConsoleWindow.Trace("c2f_AcceptInviteResult: " + resultIdentifier);
  143. break;
  144. }
  145. if ( resultIdentifier != "SUCCESS" )
  146. {
  147. LobbyInterface.Instance.CreateMessageBox( resultIdentifier );
  148. }
  149. }
  150. public function f2c_RejectInvite():Void
  151. {
  152. ConsoleWindow.Trace("f2c_RejectInvite: name = " + mcMail.GetToField() + ", subject = " + mcMail.GetSubjectField() + ", msg = " + mcMail.GetMsgField());
  153. ExternalInterface.call("f2c_RejectInvite", mcMail.GetToField(), mcMail.GetSubjectField(), mcMail.GetMsgField(), "0");
  154. HideMail();
  155. }
  156. public function c2f_RejectInviteResult(resultIdentifier:String):Void
  157. {
  158. switch (resultIdentifier)
  159. {
  160. case "Friends_RejectInvite_UNKNOWN_TARGET_HANDLE":
  161. break;
  162. case "Friends_RejectInvite_CANNOT_PERFORM_ON_SELF":
  163. break;
  164. case "DATABASE_CONSTRAINT_FAILURE":
  165. break;
  166. case "Friends_RejectInvite_NO_INVITE":
  167. break;
  168. case "SUCCESS":
  169. ConsoleWindow.Trace("c2f_RejectInviteResult = " + c2f_RejectInviteResult);
  170. break;
  171. }
  172. if ( resultIdentifier != "SUCCESS" )
  173. {
  174. LobbyInterface.Instance.CreateMessageBox( resultIdentifier );
  175. }
  176. }
  177. public function f2c_GetFriendInvites():Void
  178. {
  179. ExternalInterface.call("f2c_GetFriendInvites");
  180. }
  181. public function c2f_GetFriendInvites():Void
  182. {
  183. ConsoleWindow.Trace("c2f_GetFriendInvites...");
  184. var invitesSent:Number = arguments[0];
  185. var invitesReceived:Number = arguments[1];
  186. for (var i:Number = 0; i < invitesSent; i++)
  187. {
  188. var handleOfUserInviteSentTo:String = arguments[2+i];
  189. ConsoleWindow.Trace("invite sent to: " + handleOfUserInviteSentTo);
  190. AddListEntry( handleOfUserInviteSentTo, "INVITED" );
  191. }
  192. for (var i:Number = 0; i < invitesReceived; i++)
  193. {
  194. var handleOfUserInviteReceivedFrom:String = arguments[2+i+invitesSent];
  195. ConsoleWindow.Trace("invite received from: " + handleOfUserInviteReceivedFrom);
  196. AddListEntry( handleOfUserInviteReceivedFrom, "REQUESTED" );
  197. }
  198. //TODO: remove this once c++ sends down proper data
  199. for ( var n:Number = 0; n < 5; n++ )
  200. {
  201. AddListEntry( "possible friend" + mMovieClipList.length, "REQUESTED" );
  202. }
  203. OnMoveClipListUpdated();
  204. ShowPage(1);
  205. }
  206. public function InviteFriend( _username:String, _profileImageIndex:Number ):Void
  207. {
  208. AddListEntry( _username );
  209. RefreshPage();
  210. OnMoveClipListUpdated();
  211. }
  212. public function RemovePendingEntry( friendEntry:MovieClip ):Void
  213. {
  214. //TODO: should we notify c++ that en entry is removed here?
  215. RemoveEntryFromList( friendEntry, mMovieClipList );
  216. }
  217. private function AddListEntry( usernameToAdd:String, inviteText:String ):MovieClip
  218. {
  219. var userEntry:MovieClip = attachMovie("MyFriendsListEntry", "mcFriendEntry" + mMovieClipList.length, getNextHighestDepth() );
  220. userEntry._visible = false;
  221. userEntry.tfUsername.text = usernameToAdd;
  222. userEntry.tfInvitation.text = inviteText;
  223. mMovieClipList.push( userEntry );
  224. var self:PossibleFriendsScreen = this;
  225. userEntry.mcDelete.onPress = function() { self.RemovePendingEntry( this._parent ); }
  226. if ( inviteText == "REQUESTED" )
  227. {
  228. userEntry.mcMail.onPress = function() { self.ShowInvitationMail_Incoming( this._parent.tfUsername.text ); }
  229. }
  230. return userEntry;
  231. }
  232. private function ShowMyFriends():Void
  233. {
  234. LobbyInterface.Instance.ShowScreen( ScreenID.FRIENDS );
  235. }
  236. private function OnShowMovieClipEntry( mcEntry:MovieClip, index:Number ):Void
  237. {
  238. super.OnShowMovieClipEntry( mcEntry, index );
  239. //mcEntry.tfInvitation._visible = false;
  240. }
  241. }
粤ICP备19079148号