- // dialog_playercard.cpp 
-   
- #include "../common.h" 
-   
-   
- // dialog template 
- #define THIS_DIALOG DIALOG_PLAYERCARD 
-   
-   
- // local definitions 
- #define TIMER_REFRESHDIALOG 1 
-   
-   
- // list view column definition 
- typedef struct listviewcolumn_s 
- { 
-    int width; 
-    int alignment; 
-    wchar_t *text; 
- } listviewcolumn_t; 
-   
-   
- // global variables used in this module only 
- static int listviewicons[sizeof (handlestatus) / sizeof (handlestatus_t)]; // as big as the handlestatus global array 
- static listviewcolumn_t listviewcolumns[] = 
- { 
-    { 80, LVCFMT_LEFT, NULL /*LOCALIZE (L"PlayerCard_GameStyle")*/}, // text address needs to be set at runtime, because it's mallocated 
-    { 45, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_Rating")*/}, 
-    { 40, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_RD")*/}, 
-    { 45, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_Wins")*/}, 
-    { 45, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_Losses")*/}, 
-    { 45, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_Draws")*/}, 
-    { 45, LVCFMT_CENTER, NULL /*LOCALIZE (L"PlayerCard_Totals")*/}, 
- }; 
- static wchar_t personalmessage_text[1024]; 
- static wchar_t invitee_nickname[32]; 
-   
-   
- // prototypes of local functions 
- static void StartThread_PlayerCard (void *thread_parms); 
- static int CALLBACK DialogProc_PlayerCard (HWND hWnd, unsigned int message, WPARAM wParam, LPARAM lParam); 
-   
-   
- void DialogBox_PlayerCard (int playercard_index) 
- { 
-    // helper function to fire up the modeless dialog box 
-   
-    _beginthread (StartThread_PlayerCard, 0, (void *) playercard_index); // fire up the thread 
-    return; // return as soon as the thread is fired up 
- } 
-   
-   
- void DialogBox_PlayerCard_Validated (void) 
- { 
-    // callback function called by the main game thread when the dialog box is validated 
-   
-    challenge_t *challenge; 
-   
-    // remember this callback is no longer to be called 
-    is_dialogbox_playercard_validated = false; 
-   
-    // TODO: verify if not ourselves 
-   
-    // player is available for an invitation. Is he already inviting us ? 
-    challenge = Challenge_Find (invitee_nickname); 
-    if ((challenge != NULL) && challenge->is_active && IsWindow (challenge->hWnd)) 
-       EndDialog (challenge->hWnd, 0); // if so, close the challenge dialog box (this will also make us decline it properly) 
-   
-    Interlocutor_FindOrCreate (invitee_nickname); // fire up the chat window with this player 
-    return; // finished, a new chat window has been opened with this player 
- } 
-   
-   
- static void StartThread_PlayerCard (void *thread_parms) 
- { 
-    // this function runs in a separate thread, for that's the only way (seemingly) 
-    // to implement a non-modal message box using the Common Controls library. 
-   
-    int playercard_index; 
-    playercard_t *playercard; 
-   
-    playercard_index = (int) thread_parms; 
-    if (playercard_index >= playercard_count) 
-       return; // consistency check; _endthread() implied 
-    playercard = &playercards[playercard_index]; // quick access to player card structure 
-   
-    // display the dialog box and attach this playercard to it 
-    if (DialogBoxParam (hAppInstance, MAKEINTRESOURCE (THIS_DIALOG), NULL, DialogProc_PlayerCard, (LPARAM) playercard_index) == 1) 
-       is_dialogbox_playercard_validated = true; 
-   
-    // now that we're sure the window disappeared... 
-    playercard = &playercards[playercard_index]; // quick access to player card structure (it may have relocated) 
-    playercard->is_active = false; // remember interlocutor has gone away 
-    SAFE_free ((void **) &playercard->fingertext); // free its text 
-    playercard->fingertext_length = 0; // and reset its text length 
-    SAFE_free ((void **) &playercard->gamestyleratings); // free its game style ratings 
-    playercard->gamestylerating_count = 0; // and reset its count 
-   
-    return; // _endthread() implied 
- } 
-   
-   
- static int CALLBACK DialogProc_PlayerCard (HWND hWnd, unsigned int message, WPARAM wParam, LPARAM lParam) 
- { 
-    // message handler for the dialog box 
-   
-    unsigned short wParam_hiword; 
-    unsigned short wParam_loword; 
-    gamestylerating_t *gamestylerating; 
-    onlineplayer_t *onlineplayer; 
-    playercard_t *playercard; 
-    wchar_t text_to_send[256]; 
-    wchar_t *current_line; 
-    wchar_t *wcstok_context; 
-    player_t *network_player; 
-    HIMAGELIST imagelist; 
-    HWND hListWnd; 
-    LVCOLUMN lvc; 
-    LVITEM lvi; 
-    int insert_index; 
-    int column_index; 
-    int player_index; 
-    int gsr_index; 
-   
-    // filter out the commonly used message values 
-    wParam_hiword = HIWORD (wParam); 
-    wParam_loword = LOWORD (wParam); 
-   
-    // have we just fired up this window ? 
-    if (message == WM_INITDIALOG) 
-    { 
-       playercard = &playercards[lParam]; // quick access to player card 
-       SetWindowLongPtr (hWnd, DWLP_USER, lParam); // attach player card 
-       playercard->hWnd = hWnd; // and save window handle 
-   
-       // center the window 
-       CenterWindow (hWnd, hMainWnd); 
-   
-       // set dialog icons (small one for title bar & big one for task manager) 
-       SendMessage (hWnd, WM_SETICON, ICON_SMALL, (LPARAM) LoadIcon (hAppInstance, MAKEINTRESOURCE (ICON_CARD))); 
-       SendMessage (hWnd, WM_SETICON, ICON_BIG, (LPARAM) LoadIcon (hAppInstance, MAKEINTRESOURCE (ICON_CARD))); 
-   
-       // find the remote player 
-       network_player = Player_FindByType (PLAYER_INTERNET); 
-   
-       // make network player ask an update from the server 
-       if (network_player != NULL) 
-       { 
-          if (lastonlineplayers_time + 5.0f < current_time) 
-             Player_SendBuffer_Add (network_player, 1000, L"who\n"); // finger requests need an updated player list 
-          Player_SendBuffer_Add (network_player, 1000, L"finger %s\n", playercard->nickname); // send the finger request 
-       } 
-   
-       // set the finger data text area font 
-       SendMessage (GetDlgItem (hWnd, EDITBOX_PLAYERCARD_FINGERDATA), WM_SETFONT, (WPARAM) hFontChat, false); 
-   
-       // set the dialog text editable if it's ours, and read-only if it's not 
-       Edit_SetReadOnly (GetDlgItem (hWnd, EDITBOX_PLAYERCARD_FINGERDATA), !playercard->is_own); 
-   
-       // prepare the list view : do it before anything that could trigger a fill 
-   
-       // get a quick access to the list control 
-       hListWnd = GetDlgItem (hWnd, COMBOBOX_GAMESTYLES); 
-   
-       // tell Windows which members of the LVCOLUMN structure we're filling 
-       memset (&lvc, 0, sizeof (lvc)); 
-       lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;  
-       for (column_index = 0; column_index < sizeof (listviewcolumns) / sizeof (listviewcolumn_t); column_index++) 
-       { 
-          lvc.iSubItem = column_index; 
-          if (column_index == 0) lvc.pszText = LOCALIZE (L"PlayerCard_GameStyle"); 
-          else if (column_index == 1) lvc.pszText = LOCALIZE (L"PlayerCard_Rating"); 
-          else if (column_index == 2) lvc.pszText = LOCALIZE (L"PlayerCard_RD"); 
-          else if (column_index == 3) lvc.pszText = LOCALIZE (L"PlayerCard_Wins"); 
-          else if (column_index == 4) lvc.pszText = LOCALIZE (L"PlayerCard_Losses"); 
-          else if (column_index == 5) lvc.pszText = LOCALIZE (L"PlayerCard_Draws"); 
-          else if (column_index == 6) lvc.pszText = LOCALIZE (L"PlayerCard_Totals"); 
-          lvc.cx = listviewcolumns[column_index].width; 
-          lvc.fmt = listviewcolumns[column_index].alignment; 
-          ListView_InsertColumn (hListWnd, column_index, &lvc); // add each column to list view 
-       } 
-   
-       // create the listview image list 
-       imagelist = ImageList_Create (16, 16, ILC_COLOR32, sizeof (handlestatus) / sizeof (handlestatus_t), 1); // create an imagelist holding N 32-bit images 
-       for (insert_index = 1; insert_index < sizeof (handlestatus) / sizeof (handlestatus_t); insert_index++) 
-          listviewicons[insert_index] = ImageList_AddIcon (imagelist, handlestatus[insert_index].icon); // add our icons in the image list 
-       ListView_SetImageList (hListWnd, imagelist, LVSIL_SMALL); // associate it with the listview 
-   
-       // set window title and control texts 
-       swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_TitleBuildingCard"), playercard->nickname); 
-       SetWindowText (hWnd, text_to_send); 
-       if (playercard->is_own) 
-          wcscpy_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_YourStats")); 
-       else 
-          swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_Stats"), playercard->nickname); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_STATSTEXT, text_to_send); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_ONLINEFORKEY, LOCALIZE (L"PlayerCard_OnlineForKey")); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_ONLINEFORVALUE, L""); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_CURRENTSTATUSKEY, LOCALIZE (L"PlayerCard_CurrentStatusKey")); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_CURRENTSTATUSVALUE, L""); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_GAMEPLAYEDKEY, LOCALIZE (L"PlayerCard_GamePlayedKey")); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_GAMEPLAYEDVALUE, L""); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_LASTACTIVITYKEY, LOCALIZE (L"PlayerCard_LastActivityKey")); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_LASTACTIVITYVALUE, L""); 
-       SetDlgItemText (hWnd, BUTTON_CLOSE, LOCALIZE (L"Button_Close")); 
-       SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_STATUSBAR, LOCALIZE (L"PlayerCard_StatusBar")); 
-   
-       // refresh the server message area every second 
-       SetTimer (hWnd, TIMER_REFRESHDIALOG, 1000, NULL); 
-       SendMessage (hWnd, WM_TIMER, TIMER_REFRESHDIALOG, 0); // but call it now 
-   
-       // convert the game played and status bar message to a hyperlink 
-       ConvertStaticToHyperlink (GetDlgItem (hWnd, STATICTEXT_PLAYERCARD_GAMEPLAYEDVALUE)); 
-       ConvertStaticToHyperlink (GetDlgItem (hWnd, STATICTEXT_PLAYERCARD_STATUSBAR)); 
-    } 
-   
-    // else did we click the close button on the title bar ? 
-    else if (message == WM_CLOSE) 
-    { 
-       playercard = &playercards[GetWindowLongPtr (hWnd, DWLP_USER)]; // quick access to player card 
-   
-       // was it our own card ? if so, update our personal info 
-       if (playercard->is_own) 
-       { 
-          // find the remote player 
-          network_player = Player_FindByType (PLAYER_INTERNET); 
-          if (network_player != NULL) 
-          { 
-             // retrieve the personal message text from the control 
-             GetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, personalmessage_text, WCHAR_SIZEOF (personalmessage_text)); 
-   
-             // is it NOT the default text ? 
-             if (wcscmp (personalmessage_text, LOCALIZE (L"PlayerCard_TypeYourPersonalMessageHere")) != NULL) 
-             { 
-                // set finger variables 1 to 10 (max 10 lines) 
-                current_line = wcstok_s (personalmessage_text, L"\r\n", &wcstok_context); 
-                for (insert_index = 1; insert_index < 10; insert_index++) 
-                { 
-                   Player_SendBuffer_Add (network_player, 1000, L"set %d %s\n", insert_index, (current_line != NULL ? current_line : L"")); 
-                   current_line = wcstok_s (NULL, L"\r\n", &wcstok_context); 
-                } 
-             } 
-          } 
-       } 
-   
-       KillTimer (hWnd, TIMER_REFRESHDIALOG); // destroy the timer we used to refresh the dialog text 
-       EndDialog (hWnd, 0); // close the dialog box 
-    } 
-   
-    // else did we take action on one of the controls ? 
-    else if (message == WM_COMMAND) 
-    { 
-       // did we cancel the dialog box ? (IDCANCEL is a system-wide dialog box handler value, that catches the ESC key) 
-       if (wParam_loword == IDCANCEL) 
-       { 
-          KillTimer (hWnd, TIMER_REFRESHDIALOG); // destroy the timer we used to refresh the dialog text 
-          EndDialog (hWnd, 0); // close the dialog box 
-       } 
-   
-       // else was it the game played hyperlink ? 
-       else if (wParam_loword == STATICTEXT_PLAYERCARD_GAMEPLAYEDVALUE) 
-       { 
-          playercard = &playercards[GetWindowLongPtr (hWnd, DWLP_USER)]; // quick access to player card 
-   
-          // see which player it is 
-          for (player_index = 0; player_index < onlineplayer_count; player_index++) 
-             if (wcscmp (onlineplayers[player_index].nickname, playercard->nickname) == 0) 
-                break; // stop searching as soon as player is found 
-   
-          // have we found it ? 
-          if (player_index < onlineplayer_count) 
-          { 
-             onlineplayer = &onlineplayers[player_index]; // quick access to online player 
-   
-             // is player actually playing a game ? 
-             if (playercard->game_played != 0) 
-                ; // yes, so watch it as spectator (TODO) 
-   
-             // else is player invitable ? 
-             else if ((playercard->minutes_online > 0) && !playercard->is_own 
-                      && (onlineplayer->handlestatus != HANDLESTATUS_NOTOPENFORAMATCH)) 
-             { 
-                // save concerned nickname before destroying window 
-                wcscpy_s (invitee_nickname, WCHAR_SIZEOF (invitee_nickname), playercard->nickname); 
-   
-                KillTimer (hWnd, TIMER_REFRESHDIALOG); // destroy the timer we used to refresh the dialog text 
-                EndDialog (hWnd, 1); // close the dialog box and return a success value 
-             } 
-          } 
-       } 
-   
-       // else was it the status bar hyperlink ? 
-       else if (wParam_loword == STATICTEXT_PLAYERCARD_STATUSBAR) 
-          ShellExecute (NULL, L"open", PROGRAM_URL, NULL, NULL, SW_MAXIMIZE); // open the donation page in the default browser, maximized 
-    } 
-   
-    // else is it a timer event AND is it our refresh timer ? 
-    else if ((message == WM_TIMER) && (wParam == TIMER_REFRESHDIALOG)) 
-    { 
-       playercard = &playercards[GetWindowLongPtr (hWnd, DWLP_USER)]; // quick access to player card 
-   
-       // do we need to update dialog ? 
-       if (playercard->update_dialog) 
-       { 
-          swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_Title"), playercard->nickname); 
-          SetWindowText (hWnd, text_to_send); // set window title 
-   
-          // does this player NOT exist ? 
-          if (playercard->doesnt_exist) 
-          { 
-             // set personal message 
-             SetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, L""); 
-   
-             // set statistics phrase 
-             swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_DoesNotExist"), playercard->nickname); 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_STATSTEXT, text_to_send); 
-   
-             // set current activity stats 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_ONLINEFORVALUE, L"-"); 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_CURRENTSTATUSVALUE, L"-"); 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_GAMEPLAYEDVALUE, L"-"); 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_LASTACTIVITYVALUE, L"-"); 
-          } 
-          else 
-          { 
-             // set personal message 
-             if (playercard->fingertext_length > 0) 
-                SetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, playercard->fingertext); 
-             else if (playercard->got_reply) 
-             { 
-                // if it's our card, invite player to write a personal message; else tell this player has none 
-                if (playercard->is_own) 
-                   SetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, LOCALIZE (L"PlayerCard_TypeYourPersonalMessageHere")); 
-                else 
-                   SetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, LOCALIZE (L"PlayerCard_NoPersonalMessage")); 
-             } 
-             else 
-                SetDlgItemText (hWnd, EDITBOX_PLAYERCARD_FINGERDATA, L""); 
-   
-             // if it's our card, select all the personal message text 
-             if (playercard->is_own) 
-                SendMessage (GetDlgItem (hWnd, EDITBOX_PLAYERCARD_FINGERDATA), EM_SETSEL, 0, -1); // select all text 
-   
-             // set statistics phrase 
-             if (playercard->gamestylerating_count > 0) 
-             { 
-                if (playercard->is_own) 
-                   wcscpy_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_YourStats")); 
-                else 
-                   swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_Stats"), playercard->nickname); 
-             } 
-             else if (playercard->got_reply) 
-             { 
-                if (playercard->is_own) 
-                   wcscpy_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_NoStatsYetForYou")); 
-                else 
-                   swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_NoStatsYet"), playercard->nickname); 
-             } 
-             else 
-                text_to_send[0] = 0; 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_STATSTEXT, text_to_send); 
-   
-             // set statistics 
-             hListWnd = GetDlgItem (hWnd, COMBOBOX_GAMESTYLES); // get a quick access to the list control 
-             ListView_DeleteAllItems (hListWnd); // start by emptying it first 
-             memset (&lvi, 0, sizeof (lvi)); // tell Windows which members of the LVCOLUMN structure we're filling 
-             lvi.mask = LVIF_IMAGE | LVIF_PARAM; // we want to set the image and the item's pointer 
-             for (gsr_index = 0; gsr_index < playercard->gamestylerating_count; gsr_index++) 
-             { 
-                gamestylerating = &playercard->gamestyleratings[gsr_index]; // quick access to game style rating 
-   
-                // set item's image and name 
-                lvi.iItem = gsr_index; 
-                lvi.iImage = listviewicons[HANDLESTATUS_INGAME];  
-                insert_index = ListView_InsertItem (hListWnd, &lvi); // add each item to list view 
-   
-                // set item's substrings 
-                ListView_SetItemText (hListWnd, insert_index, 0, gamestylerating->name); // game style name 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d", gamestylerating->rating); 
-                ListView_SetItemText (hListWnd, insert_index, 1, text_to_send); // rating 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%.1f", gamestylerating->rd); 
-                ListView_SetItemText (hListWnd, insert_index, 2, text_to_send); // RD 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d", gamestylerating->win_count); 
-                ListView_SetItemText (hListWnd, insert_index, 3, text_to_send); // wins 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d", gamestylerating->loss_count); 
-                ListView_SetItemText (hListWnd, insert_index, 4, text_to_send); // losses 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d", gamestylerating->draw_count); 
-                ListView_SetItemText (hListWnd, insert_index, 5, text_to_send); // draws 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d", gamestylerating->total_matches); 
-                ListView_SetItemText (hListWnd, insert_index, 6, text_to_send); // totals 
-             } 
-   
-             // set status 
-             swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"Opponents_StatusOffline")); // assume offline until found 
-   
-             // cycle through all online players and see if this one is online 
-             for (player_index = 0; player_index < onlineplayer_count; player_index++) 
-                if (wcscmp (onlineplayers[player_index].nickname, playercard->nickname) == 0) 
-                   break; // break as soon as we find it 
-   
-             // have we found it ? 
-             if (player_index < onlineplayer_count) 
-                onlineplayer = &onlineplayers[player_index]; // quick access to online player 
-             else 
-                onlineplayer = NULL; // else this player is not online 
-   
-             // is player online ? 
-             if (onlineplayer != NULL) 
-             { 
-                // verify status before setting it 
-                if (((onlineplayer->handlestatus == HANDLESTATUS_INGAME) || (onlineplayer->handlestatus == HANDLESTATUS_EXAMININGAGAME)) 
-                      && (playercard->game_played == 0)) 
-                   onlineplayer->handlestatus = HANDLESTATUS_AVAILABLE; // if player was reported playing but no game, mark it free 
-   
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_CURRENTSTATUSVALUE, handlestatus[onlineplayer->handlestatus].text); 
-             } 
-             else 
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_CURRENTSTATUSVALUE, handlestatus[HANDLESTATUS_OFFLINE].text); 
-   
-             // set played game name 
-             if (playercard->game_played != 0) 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d - %s", playercard->game_played, playercard->game_name); 
-             else if ((playercard->minutes_online > 0) && !playercard->is_own 
-                      && (onlineplayer != NULL) && (onlineplayer->handlestatus != HANDLESTATUS_NOTOPENFORAMATCH)) 
-                swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"PlayerCard_ChatOrInvite")); // no game ; if online, we can invite him 
-             else 
-                text_to_send[0] = 0; 
-             SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_GAMEPLAYEDVALUE, text_to_send); 
-   
-             // only set online time and idle time if player is not offline (if we have found him, then he's online) 
-             if (onlineplayer != NULL) 
-             { 
-                MinutesToWideCharString (text_to_send, WCHAR_SIZEOF (text_to_send), playercard->minutes_online); 
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_ONLINEFORVALUE, text_to_send); // set online time value 
-   
-                SecondsToWideCharString (text_to_send, WCHAR_SIZEOF (text_to_send), playercard->seconds_idle); 
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_LASTACTIVITYVALUE, text_to_send); // set idle time value 
-             } 
-             else 
-             { 
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_ONLINEFORVALUE, L"-"); // player is offline 
-   
-                if (playercard->disconnection_month == 1) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_January"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 2) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_February"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 3) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_March"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 4) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_April"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 5) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_May"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 6) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_June"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 7) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_July"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 8) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_August"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 9) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_September"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 10) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_October"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 11) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_November"), playercard->disconnection_year); 
-                else if (playercard->disconnection_month == 12) swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), L"%d %s %d", playercard->disconnection_day, LOCALIZE (L"Month_December"), playercard->disconnection_year); 
-                else swprintf_s (text_to_send, WCHAR_SIZEOF (text_to_send), LOCALIZE (L"Never")); 
-                SetDlgItemText (hWnd, STATICTEXT_PLAYERCARD_LASTACTIVITYVALUE, text_to_send); // print last disconnection date 
-             } 
-          } 
-   
-          playercard->update_dialog = false; // remember we refreshed dialog text 
-       } 
-    } 
-   
-    // call the default dialog message processing function to keep things going 
-    return (false); 
- } 
-