From b078dfb78c89aea87cd422eae52694738e473cf3 Mon Sep 17 00:00:00 2001 From: dartraiden Date: Sun, 21 Jul 2019 19:59:18 +0300 Subject: Restore "Free for chat" status support (fixes #1963) --- include/delphi/m_protosvc.inc | 1 + include/delphi/m_skin.inc | 3 ++- include/delphi/statusmodes.inc | 3 ++- include/m_protosvc.h | 2 ++ include/m_skin.h | 3 ++- include/statusmodes.h | 3 ++- plugins/Actman/services.ini | 10 ++++++---- plugins/BASS_interface/res/Bass.rc | 3 ++- plugins/BASS_interface/src/Main.cpp | 8 +++++--- plugins/BASS_interface/src/Resource.h | 1 + plugins/BossKeyPlus/src/BossKey.cpp | 2 +- plugins/BossKeyPlus/src/stdafx.h | 2 +- plugins/BuddyPounce/res/resource.rc | 1 + plugins/BuddyPounce/src/dialog.cpp | 12 ++++++++---- plugins/BuddyPounce/src/main.cpp | 2 ++ plugins/BuddyPounce/src/resource.h | 3 +++ plugins/BuddyPounce/src/stdafx.h | 3 ++- plugins/Clist_blind/src/clcopts.cpp | 2 ++ plugins/Clist_blind/src/contact.cpp | 3 ++- plugins/Clist_modern/res/MicroChat.ico | Bin 0 -> 1150 bytes plugins/Clist_modern/res/chat.ico | Bin 0 -> 1150 bytes plugins/Clist_modern/res/resource.rc | 4 ++++ plugins/Clist_modern/src/modern_clc.h | 1 + plugins/Clist_modern/src/modern_clcmsgs.cpp | 1 + plugins/Clist_modern/src/modern_clcopts.cpp | 7 +++++-- plugins/Clist_modern/src/modern_clcpaint.cpp | 3 +++ plugins/Clist_modern/src/modern_clcpaint.h | 1 + plugins/Clist_modern/src/modern_clisttray.cpp | 1 + plugins/Clist_modern/src/modern_clui.cpp | 6 ++++-- plugins/Clist_modern/src/modern_contact.cpp | 3 ++- plugins/Clist_modern/src/modern_rowheight_funcs.cpp | 2 +- plugins/Clist_modern/src/resource.h | 2 ++ plugins/Clist_nicer/src/clcopts.cpp | 4 ++-- plugins/Clist_nicer/src/contact.cpp | 3 ++- plugins/Clist_nicer/src/extBackg.cpp | 4 ++++ plugins/CmdLine/src/mimcmd_data.h | 2 +- plugins/CmdLine/src/mimcmd_handlers.cpp | 2 ++ plugins/ExternalAPI/m_account.h | 3 ++- plugins/FloatingContacts/src/main.cpp | 1 + plugins/KeyboardNotify/res/resources.rc | 3 ++- plugins/KeyboardNotify/src/constants.h | 3 ++- plugins/KeyboardNotify/src/main.cpp | 1 + plugins/KeyboardNotify/src/options.cpp | 4 ++++ plugins/KeyboardNotify/src/resource.h | 1 + plugins/MirandaG15/src/CAppletManager.cpp | 2 ++ plugins/MirandaG15/src/CAppletManager.h | 2 +- plugins/MirandaG15/src/CContactList.cpp | 3 ++- plugins/MyDetails/res/resource.rc | 1 + plugins/MyDetails/src/data.cpp | 1 + plugins/MyDetails/src/frame.cpp | 2 +- plugins/NewAwaySysMod/res/NewAwaySys.rc | 5 +++++ plugins/NewAwaySysMod/src/AwayOpt.cpp | 12 ++++++++++++ plugins/NewAwaySysMod/src/AwaySys.cpp | 1 + plugins/NewAwaySysMod/src/Client.cpp | 1 + plugins/NewAwaySysMod/src/MsgEventAdded.cpp | 1 + plugins/NewAwaySysMod/src/MsgTree.cpp | 2 ++ plugins/NewAwaySysMod/src/Properties.cpp | 1 + plugins/NewAwaySysMod/src/Properties.h | 4 +++- plugins/NewAwaySysMod/src/resource.h | 10 ++++++++-- plugins/NewAwaySysMod/src/stdafx.h | 1 + plugins/NewXstatusNotify/res/resource.rc | 20 +++++++++++++------- plugins/NewXstatusNotify/src/indsnd.cpp | 2 +- plugins/NewXstatusNotify/src/main.cpp | 12 ++++++++++++ plugins/NewXstatusNotify/src/resource.h | 14 +++++++++----- plugins/NewXstatusNotify/src/utils.cpp | 1 + plugins/NotifyAnything/src/main.cpp | 1 + plugins/Nudge/res/resource.rc | 3 ++- plugins/Nudge/src/main.cpp | 4 +++- plugins/Nudge/src/nudge.h | 3 ++- plugins/Nudge/src/options.cpp | 5 ++++- plugins/Nudge/src/resource.h | 1 + plugins/Popup/res/resource.rc | 2 ++ plugins/Popup/src/opt_class.cpp | 14 +++++++++----- plugins/Popup/src/opt_gen.cpp | 3 +++ plugins/Popup/src/resource.h | 2 ++ plugins/Scriver/src/msgoptions.cpp | 1 + plugins/Scriver/src/msgs.cpp | 2 ++ plugins/SeenPlugin/res/resource.rc | 3 +++ plugins/SeenPlugin/src/utils.cpp | 5 +++-- plugins/SimpleAR/src/Main.cpp | 8 ++++---- plugins/SimpleAR/src/Options.cpp | 12 ++++++------ plugins/SimpleStatusMsg/src/main.cpp | 5 +++-- plugins/SimpleStatusMsg/src/utils.cpp | 2 ++ plugins/SkypeStatusChange/src/main.cpp | 3 ++- plugins/SkypeStatusChange/src/stdafx.h | 2 ++ plugins/StatusChange/res/resource.rc | 4 +++- plugins/StatusChange/src/main.cpp | 13 +++++++++++++ plugins/StatusChange/src/resource.h | 6 ++++-- plugins/StatusChange/src/stdafx.h | 1 + plugins/StatusManager/src/advancedautoaway.cpp | 2 +- plugins/StatusManager/src/commonstatus.cpp | 5 ++++- plugins/StatusManager/src/ss_options.cpp | 1 + plugins/StatusManager/src/startupstatus.cpp | 2 ++ plugins/TabSRMM/res/resource.rc | 1 + plugins/TabSRMM/src/sendlater.cpp | 2 +- plugins/Utils.pas/protocols.pas | 9 +++++++-- plugins/Watrack/status/i_status.inc | 1 + plugins/WinterSpeak/res/Speak.rc | 2 ++ plugins/WinterSpeak/src/AnnounceDatabase.h | 1 + plugins/WinterSpeak/src/AnnounceDialog.cpp | 3 +++ plugins/WinterSpeak/src/ConfigDatabase.h | 1 + plugins/WinterSpeak/src/DialogConfigActive.cpp | 3 +++ plugins/WinterSpeak/src/SpeakAnnounce.cpp | 3 +++ plugins/WinterSpeak/src/SpeakConfig.cpp | 3 +++ plugins/WinterSpeak/src/UserInformation.cpp | 1 + plugins/WinterSpeak/src/resource.h | 2 ++ plugins/XSoundNotify/src/xsn_main.cpp | 3 ++- plugins/YARelay/res/yaRelay.rc | 4 +++- plugins/YARelay/src/main.cpp | 1 + plugins/YARelay/src/options.cpp | 6 ++++-- plugins/YARelay/src/resource.h | 1 + plugins/YARelay/src/stdafx.h | 3 ++- plugins/ZeroNotification/src/options.cpp | 3 ++- protocols/Discord/proto_discord/src/resource.h | 1 + protocols/Dummy/proto_dummy/res/FFC.ico | Bin 0 -> 5430 bytes protocols/Dummy/proto_dummy/res/Proto_Dummy.rc | 1 + protocols/Dummy/proto_dummy/src/resource.h | 1 + protocols/Dummy/src/dummy_proto.cpp | 4 ++-- protocols/EmLanProto/src/amdproto.cpp | 4 ++-- protocols/EmLanProto/src/mlan.cpp | 6 ++++++ protocols/EmLanProto/src/mlan.h | 1 + protocols/FacebookRM/src/json.cpp | 2 +- protocols/FacebookRM/src/proto.cpp | 3 +++ protocols/Gadu-Gadu/proto_gg/res/FFC.ico | Bin 0 -> 5430 bytes protocols/Gadu-Gadu/proto_gg/res/Proto_GG.rc | 1 + protocols/Gadu-Gadu/proto_gg/src/resource.h | 1 + protocols/Gadu-Gadu/src/core.cpp | 19 +++++++++++++++++-- protocols/Gadu-Gadu/src/dialogs.cpp | 7 +++++++ protocols/Gadu-Gadu/src/gg_proto.cpp | 8 ++++++-- protocols/Gadu-Gadu/src/gg_proto.h | 1 + protocols/Gadu-Gadu/src/services.cpp | 5 +++++ protocols/ICQ-WIM/proto_icq/src/resource.h | 1 + protocols/ICQ-WIM/proto_mra/src/resource.h | 1 + protocols/ICQCorp/src/protocol.cpp | 10 ++++++++++ protocols/ICQCorp/src/protocol.h | 2 ++ protocols/ICQCorp/src/services.cpp | 4 ++-- protocols/IRCG/src/commandmonitor.cpp | 1 + protocols/IRCG/src/ircproto.cpp | 6 +++--- protocols/IRCG/src/options.cpp | 1 + protocols/JabberG/proto_jabber/res/FFC.ico | Bin 0 -> 5430 bytes protocols/JabberG/proto_jabber/res/Proto_Jabber.rc | 1 + protocols/JabberG/proto_jabber/src/resource.h | 1 + protocols/JabberG/src/jabber_chat.cpp | 5 ++++- protocols/JabberG/src/jabber_groupchat.cpp | 1 + protocols/JabberG/src/jabber_icolib.cpp | 3 ++- protocols/JabberG/src/jabber_list.cpp | 12 ++++++++---- protocols/JabberG/src/jabber_menu.cpp | 1 + protocols/JabberG/src/jabber_misc.cpp | 1 + protocols/JabberG/src/jabber_proto.cpp | 9 +++++++-- protocols/JabberG/src/jabber_rc.cpp | 5 +++++ protocols/JabberG/src/jabber_svc.cpp | 3 +++ protocols/JabberG/src/jabber_thread.cpp | 1 + protocols/JabberG/src/jabber_util.cpp | 7 +++++++ protocols/JabberG/src/stdafx.h | 1 + protocols/MSN/src/msn_misc.cpp | 1 + protocols/Non-IM Contact/res/resource.rc | 1 + protocols/Non-IM Contact/src/contactinfo.cpp | 4 +++- protocols/Non-IM Contact/src/resource.h | 3 ++- protocols/Non-IM Contact/src/services.cpp | 2 +- protocols/Sametime/src/sametime_session.cpp | 1 + protocols/SkypeWeb/src/skype_proto.cpp | 4 ++++ protocols/Steam/proto_steam/res/FFC.ico | Bin 0 -> 5430 bytes protocols/Steam/proto_steam/res/Proto_Steam.rc | 1 + protocols/Steam/proto_steam/src/resource.h | 1 + protocols/Steam/src/steam_contacts.cpp | 7 ++++++- protocols/Steam/src/steam_proto.cpp | 4 ++-- protocols/Steam/src/steam_utils.cpp | 6 ++++-- protocols/Tox/src/tox_utils.cpp | 4 ++++ protocols/Twitter/src/proto.cpp | 6 +++--- protocols/Weather/src/stdafx.h | 4 +++- protocols/Weather/src/weather_conv.cpp | 9 ++++++--- protocols/Weather/src/weather_svcs.cpp | 8 ++++---- protocols/WebView/src/webview_services.cpp | 2 +- protocols/YAMN/res/YAMN.rc | 3 ++- protocols/YAMN/src/proto/pop3/pop3opt.cpp | 14 +++++++++++--- protocols/YAMN/src/resource.h | 1 + protocols/YAMN/src/yamn.cpp | 6 +++++- src/core/stdautoaway/src/autoaway.cpp | 4 ++-- src/core/stdaway/src/sendmsg.cpp | 4 +++- src/core/stdclist/src/clcopts.cpp | 4 +++- src/core/stdclist/src/contact.cpp | 1 + src/core/stdmsg/src/msgoptions.cpp | 3 ++- src/core/stdmsg/src/msgs.cpp | 1 + src/core/stduseronline/src/useronline.cpp | 2 +- src/icons/proto_metacontacts/res/FFC.ico | Bin 0 -> 5430 bytes .../proto_metacontacts/res/Proto_MetaContacts.rc | 1 + src/icons/proto_metacontacts/src/resource.h | 1 + src/mir_app/res/resource.rc | 3 ++- src/mir_app/src/clcidents.cpp | 1 + src/mir_app/src/clcutils.cpp | 1 + src/mir_app/src/clistmod.cpp | 3 +++ src/mir_app/src/menu_clist.cpp | 1 + src/mir_app/src/meta_services.cpp | 6 +++--- src/mir_app/src/meta_utils.cpp | 11 ++++++----- src/mir_app/src/skinicons.cpp | 3 ++- 195 files changed, 526 insertions(+), 153 deletions(-) create mode 100644 plugins/Clist_modern/res/MicroChat.ico create mode 100644 plugins/Clist_modern/res/chat.ico create mode 100644 protocols/Dummy/proto_dummy/res/FFC.ico create mode 100644 protocols/Gadu-Gadu/proto_gg/res/FFC.ico create mode 100644 protocols/JabberG/proto_jabber/res/FFC.ico create mode 100644 protocols/Steam/proto_steam/res/FFC.ico create mode 100644 src/icons/proto_metacontacts/res/FFC.ico diff --git a/include/delphi/m_protosvc.inc b/include/delphi/m_protosvc.inc index bd27ef33ac..f56e18adb2 100644 --- a/include/delphi/m_protosvc.inc +++ b/include/delphi/m_protosvc.inc @@ -104,6 +104,7 @@ const PF2_LONGAWAY = $00000008; // NA on ICQ, Away on MSN PF2_LIGHTDND = $00000010; // Occupied on ICQ, Busy on MSN PF2_HEAVYDND = $00000020; // DND on ICQ + PF2_FREECHAT = $00000040; PF2_IDLE = $00000200; //added during 0.3.4 (2004/09/13) PFLAGNUM_3 = 3; //the status modes that the protocol supports diff --git a/include/delphi/m_skin.inc b/include/delphi/m_skin.inc index d487bcc5c1..862b309305 100644 --- a/include/delphi/m_skin.inc +++ b/include/delphi/m_skin.inc @@ -103,7 +103,8 @@ const SKINICON_STATUS_NA = 3; SKINICON_STATUS_OCCUPIED = 4; SKINICON_STATUS_DND = 5; - SKINICON_STATUS_INVISIBLE = 6; + SKINICON_STATUS_FREE4CHAT = 6; + SKINICON_STATUS_INVISIBLE = 7; function Skin_LoadProtoIcon(protoName:PAnsiChar; iconId:int; big:byte) : HICON; stdcall; external AppDLL name 'Skin_LoadProtoIcon'; diff --git a/include/delphi/statusmodes.inc b/include/delphi/statusmodes.inc index 795522d856..9628d86644 100644 --- a/include/delphi/statusmodes.inc +++ b/include/delphi/statusmodes.inc @@ -41,7 +41,8 @@ const ID_STATUS_DND = 40074; ID_STATUS_NA = 40075; ID_STATUS_OCCUPIED = 40076; - ID_STATUS_INVISIBLE = 40077; + ID_STATUS_FREECHAT = 40077; + ID_STATUS_INVISIBLE = 40078; ID_STATUS_IDLE = 40081; // do not use as a status ID_STATUS_MIN = ID_STATUS_OFFLINE; diff --git a/include/m_protosvc.h b/include/m_protosvc.h index d511666fcb..f137982ebd 100644 --- a/include/m_protosvc.h +++ b/include/m_protosvc.h @@ -94,6 +94,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define PF2_LONGAWAY 0x00000008 // NA on ICQ, Away on MSN #define PF2_LIGHTDND 0x00000010 // Occupied on ICQ, Busy on MSN #define PF2_HEAVYDND 0x00000020 // DND on ICQ +#define PF2_FREECHAT 0x00000040 #define PF2_IDLE 0x00000200 #define PF2_NONE 0x10000000 // protocol has no statuses at all @@ -116,6 +117,7 @@ static __inline unsigned long Proto_Status2Flag(int status) case ID_STATUS_NA: return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; case ID_STATUS_DND: return PF2_HEAVYDND; + case ID_STATUS_FREECHAT: return PF2_FREECHAT; case ID_STATUS_IDLE: return PF2_IDLE; } return 0; diff --git a/include/m_skin.h b/include/m_skin.h index 8a9f27b1ca..deb3cc6dc5 100644 --- a/include/m_skin.h +++ b/include/m_skin.h @@ -105,7 +105,8 @@ EXTERN_C MIR_APP_DLL(HANDLE) Skin_GetIconHandle(int idx); #define SKINICON_STATUS_NA 3 #define SKINICON_STATUS_OCCUPIED 4 #define SKINICON_STATUS_DND 5 -#define SKINICON_STATUS_INVISIBLE 6 +#define SKINICON_STATUS_FREE4CHAT 6 +#define SKINICON_STATUS_INVISIBLE 7 ///////////////////////////////////////////////////////////////////////////////////////// // Loads an icon representing the status mode for a particular protocol. diff --git a/include/statusmodes.h b/include/statusmodes.h index e712dd51f1..4528be307d 100644 --- a/include/statusmodes.h +++ b/include/statusmodes.h @@ -49,7 +49,8 @@ __forceinline bool IsStatusConnecting(int iStatus) #define ID_STATUS_DND 40074 #define ID_STATUS_NA 40075 #define ID_STATUS_OCCUPIED 40076 -#define ID_STATUS_INVISIBLE 40077 +#define ID_STATUS_FREECHAT 40077 +#define ID_STATUS_INVISIBLE 40078 #define ID_STATUS_IDLE 40081 /* do not use as a status */ #define ID_STATUS_MIN ID_STATUS_OFFLINE diff --git a/plugins/Actman/services.ini b/plugins/Actman/services.ini index 276b16487b..8988683537 100644 --- a/plugins/Actman/services.ini +++ b/plugins/Actman/services.ini @@ -75,7 +75,7 @@ descr=Change 'hide offline contacts' option value [Service:CList/SetStatusMode] alias=MS_CLIST_SETSTATUSMODE -wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Invisible +wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Free for chat|40078 Invisible lparam=0 return=int 0, if successful descr=Set global status @@ -442,14 +442,14 @@ descr=Manage Jabber Bookmarks [Service:/SetAwayMsg] alias=PS_SETAWAYMSG -wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Invisible +wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Free for chat|40078 Invisible lparam=text return=int 0, if successful descr=Set status message [Service:/SetStatus] alias=PS_SETSTATUS -wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Invisible +wparam=40071 Offline|40072 Online|40073 Away|40074 Do not disturb|40075 Not available|40076 Occupied|40077 Free for chat|40078 Invisible lparam=0 return=int 0, if successful descr=Set protocol status @@ -531,8 +531,10 @@ value=40074 value=40075 [Const:ID_STATUS_OCCUPIED] value=40076 -[Const:ID_STATUS_INVISIBLE] +[Const:ID_STATUS_FREECHAT] value=40077 +[Const:ID_STATUS_INVISIBLE] +value=40078 [Const:ID_STATUS_IDLE] value=40081 diff --git a/plugins/BASS_interface/res/Bass.rc b/plugins/BASS_interface/res/Bass.rc index d703bc910e..c45058741e 100644 --- a/plugins/BASS_interface/res/Bass.rc +++ b/plugins/BASS_interface/res/Bass.rc @@ -63,7 +63,8 @@ BEGIN AUTOCHECKBOX "Not available", IDC_CHECKBOX4, 240, 50, 65, 8 AUTOCHECKBOX "Occupied", IDC_CHECKBOX5, 240, 60, 65, 8 AUTOCHECKBOX "Do not disturb", IDC_CHECKBOX6, 240, 70, 65, 8 - AUTOCHECKBOX "Invisible", IDC_CHECKBOX7, 240, 80, 65, 8 + AUTOCHECKBOX "Free for chat", IDC_CHECKBOX7, 240, 80, 65, 8 + AUTOCHECKBOX "Invisible", IDC_CHECKBOX8, 240, 90, 65, 8 AUTOCHECKBOX "Preview", IDC_PREVIEW, 200, 165, 90, 8, BS_RIGHT, WS_EX_RIGHT END diff --git a/plugins/BASS_interface/src/Main.cpp b/plugins/BASS_interface/src/Main.cpp index b402c4c583..51d0489a95 100644 --- a/plugins/BASS_interface/src/Main.cpp +++ b/plugins/BASS_interface/src/Main.cpp @@ -82,6 +82,7 @@ static int OnPlaySnd(WPARAM wParam, LPARAM lParam) WORD currstat = 1; switch (CallService(MS_CLIST_GETSTATUSMODE, 0, 0)) { case ID_STATUS_INVISIBLE: currstat <<= 1; + case ID_STATUS_FREECHAT: currstat <<= 1; case ID_STATUS_DND: currstat <<= 1; case ID_STATUS_OCCUPIED: currstat <<= 1; case ID_STATUS_NA: currstat <<= 1; @@ -159,7 +160,7 @@ INT_PTR CALLBACK OptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara CheckDlgButton(hwndDlg, IDC_PREVIEW, EnPreview ? BST_CHECKED : BST_UNCHECKED); - for (int i = IDC_CHECKBOX1; i <= IDC_CHECKBOX7; i++) + for (int i = IDC_CHECKBOX1; i <= IDC_CHECKBOX8; i++) if (StatMask & (1 << (i - IDC_CHECKBOX1))) CheckDlgButton(hwndDlg, i, BST_CHECKED); @@ -176,7 +177,7 @@ INT_PTR CALLBACK OptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara EnableWindow(GetDlgItem(hwndDlg, IDC_QUIETTIME), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_PREVIEW), FALSE); - for (int i = IDC_CHECKBOX1; i <= IDC_CHECKBOX7; i++) + for (int i = IDC_CHECKBOX1; i <= IDC_CHECKBOX8; i++) EnableWindow(GetDlgItem(hwndDlg, i), FALSE); } else { @@ -243,7 +244,7 @@ INT_PTR CALLBACK OptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara g_plugin.setByte(OPT_PREVIEW, EnPreview); StatMask = 0; - for (int i = IDC_CHECKBOX7; i >= IDC_CHECKBOX1; i--) { + for (int i = IDC_CHECKBOX8; i >= IDC_CHECKBOX1; i--) { StatMask <<= 1; if (IsDlgButtonChecked(hwndDlg, i) == BST_CHECKED) StatMask |= 1; @@ -287,6 +288,7 @@ INT_PTR CALLBACK OptionsProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara case IDC_CHECKBOX5: case IDC_CHECKBOX6: case IDC_CHECKBOX7: + case IDC_CHECKBOX8: case IDC_PREVIEW: SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; diff --git a/plugins/BASS_interface/src/Resource.h b/plugins/BASS_interface/src/Resource.h index fd38b008df..75c22636ac 100644 --- a/plugins/BASS_interface/src/Resource.h +++ b/plugins/BASS_interface/src/Resource.h @@ -19,6 +19,7 @@ #define IDC_CHECKBOX5 1104 #define IDC_CHECKBOX6 1105 #define IDC_CHECKBOX7 1106 +#define IDC_CHECKBOX8 1107 #define IDC_PREVIEW 1110 #define IDI_BASSSoundOn 1111 #define IDI_BASSSoundOff 1112 diff --git a/plugins/BossKeyPlus/src/BossKey.cpp b/plugins/BossKeyPlus/src/BossKey.cpp index a4c0d993d3..1b73a0f61b 100644 --- a/plugins/BossKeyPlus/src/BossKey.cpp +++ b/plugins/BossKeyPlus/src/BossKey.cpp @@ -207,7 +207,7 @@ static int ChangeAllProtoStatuses(unsigned statusMode, wchar_t *msg) unsigned status = Proto_GetStatus(proto[i]->szModuleName); if ( (g_wMask & OPT_ONLINEONLY) ? // check "Change only if current status is Online" option - ((status == ID_STATUS_ONLINE)) // process only "online" + ((status == ID_STATUS_ONLINE) || (status == ID_STATUS_FREECHAT)) // process only "online" and "free for chat" : ((status > ID_STATUS_OFFLINE) && (status < ID_STATUS_IDLE) && (status != ID_STATUS_INVISIBLE))) // process all existing statuses except for "invisible" & "offline" { if (g_wMask & OPT_SETONLINEBACK) { // need to save old statuses & status messages diff --git a/plugins/BossKeyPlus/src/stdafx.h b/plugins/BossKeyPlus/src/stdafx.h index 1b04427190..75f6861180 100644 --- a/plugins/BossKeyPlus/src/stdafx.h +++ b/plugins/BossKeyPlus/src/stdafx.h @@ -86,7 +86,7 @@ struct CMPlugin : public PLUGIN #define MS_BOSSKEY_HIDE "BossKey/HideMiranda" #define MS_BOSSKEY_ISMIRANDAHIDDEN "BossKey/IsMirandaHidden" -const unsigned STATUS_ARR_TO_ID[] = { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_INVISIBLE }; +const unsigned STATUS_ARR_TO_ID[] = { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_FREECHAT, ID_STATUS_INVISIBLE }; extern bool g_fOptionsOpen; // options dialog is open. be sure not to hide anything while we're there. extern WORD g_wMask, g_wMaskAdv; extern bool g_bWindowHidden; diff --git a/plugins/BuddyPounce/res/resource.rc b/plugins/BuddyPounce/res/resource.rc index 444811a285..da3f356938 100644 --- a/plugins/BuddyPounce/res/resource.rc +++ b/plugins/BuddyPounce/res/resource.rc @@ -88,6 +88,7 @@ BEGIN CONTROL "Check1",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,66,74,10 CONTROL "Check1",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,17,81,10 CONTROL "Check1",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,30,81,10 + CONTROL "Check1",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,42,81,10 END IDD_OPTIONS DIALOGEX 0, 0, 314, 249 diff --git a/plugins/BuddyPounce/src/dialog.cpp b/plugins/BuddyPounce/src/dialog.cpp index db306951f4..1e1ef44a5c 100644 --- a/plugins/BuddyPounce/src/dialog.cpp +++ b/plugins/BuddyPounce/src/dialog.cpp @@ -97,7 +97,8 @@ INT_PTR CALLBACK StatusModesDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM l | (IsDlgButtonChecked(hwnd, IDC_CHECK4) << 3) | (IsDlgButtonChecked(hwnd, IDC_CHECK5) << 4) | (IsDlgButtonChecked(hwnd, IDC_CHECK6) << 5) - | (IsDlgButtonChecked(hwnd, IDC_CHECK7) << 6); + | (IsDlgButtonChecked(hwnd, IDC_CHECK7) << 6) + | (IsDlgButtonChecked(hwnd, IDC_CHECK8) << 7); if (!mir_wstrcmp(type, L"Any")) { if (LOWORD(wParam) == IDOK) @@ -135,7 +136,8 @@ void statusModes(windowInfo *wi, int myStatusMode) // myStatusMode=1 sendIfMySta SetDlgItemText(hwnd, IDC_CHECK4, TranslateT("Not available")); SetDlgItemText(hwnd, IDC_CHECK5, TranslateT("Occupied")); SetDlgItemText(hwnd, IDC_CHECK6, TranslateT("Do not disturb")); - SetDlgItemText(hwnd, IDC_CHECK7, TranslateT("Invisible")); + SetDlgItemText(hwnd, IDC_CHECK7, TranslateT("Free for chat")); + SetDlgItemText(hwnd, IDC_CHECK8, TranslateT("Invisible")); } } else { @@ -153,7 +155,8 @@ void statusModes(windowInfo *wi, int myStatusMode) // myStatusMode=1 sendIfMySta SetDlgItemText(hwnd, IDC_CHECK4, TranslateT("To Not available")); SetDlgItemText(hwnd, IDC_CHECK5, TranslateT("To Occupied")); SetDlgItemText(hwnd, IDC_CHECK6, TranslateT("To Do not disturb")); - SetDlgItemText(hwnd, IDC_CHECK7, TranslateT("To Invisible")); + SetDlgItemText(hwnd, IDC_CHECK7, TranslateT("To Free for chat")); + SetDlgItemText(hwnd, IDC_CHECK8, TranslateT("To Invisible")); } } CheckDlgButton(hwnd, IDC_CHECK1, (statusFlag & ANY) ? BST_CHECKED : BST_UNCHECKED); @@ -162,7 +165,8 @@ void statusModes(windowInfo *wi, int myStatusMode) // myStatusMode=1 sendIfMySta CheckDlgButton(hwnd, IDC_CHECK4, (statusFlag & NA) >> 3 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHECK5, (statusFlag & OCCUPIED) >> 4 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHECK6, (statusFlag & DND) >> 5 ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(hwnd, IDC_CHECK7, (statusFlag & INVISIBLE) >> 6 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECK7, (statusFlag & FFC) >> 6 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECK8, (statusFlag & INVISIBLE) >> 7 ? BST_CHECKED : BST_UNCHECKED); } void deletePounce(MCONTACT hContact) diff --git a/plugins/BuddyPounce/src/main.cpp b/plugins/BuddyPounce/src/main.cpp index c20ac1913a..19a9b86bbd 100644 --- a/plugins/BuddyPounce/src/main.cpp +++ b/plugins/BuddyPounce/src/main.cpp @@ -97,6 +97,8 @@ int statusCheck(int statusFlag, int status) return (statusFlag & OCCUPIED); case ID_STATUS_DND: return (statusFlag & DND); + case ID_STATUS_FREECHAT: + return (statusFlag & FFC); case ID_STATUS_INVISIBLE: return (statusFlag & INVISIBLE); } diff --git a/plugins/BuddyPounce/src/resource.h b/plugins/BuddyPounce/src/resource.h index 91afce81c7..d9f13a992e 100644 --- a/plugins/BuddyPounce/src/resource.h +++ b/plugins/BuddyPounce/src/resource.h @@ -17,12 +17,14 @@ #define CHK_NA 1006 #define CHK_OCCUPIED 1007 #define CHK_DND 1008 +#define CHK_FFC 1009 #define CHK_ANYSTATUS 1012 #define CHK_ONLINE2 1013 #define CHK_AWAY2 1014 #define CHK_NA2 1015 #define CHK_OCCUPIED2 1016 #define CHK_DND2 1017 +#define CHK_FFC2 1018 #define CHK_REUSE 1028 #define IDC_REUSETIMES 1029 #define CHK_GIVEUP 1030 @@ -56,6 +58,7 @@ #define IDC_CHECK5 1085 #define IDC_CHECK6 1086 #define IDC_CHECK7 1087 +#define IDC_CHECK8 1088 #define IDC_SETTINGMSG2 1095 #define IDC_USEADVANCED 1096 #define IDC_SHOWDELIVERYMSGS 1097 diff --git a/plugins/BuddyPounce/src/stdafx.h b/plugins/BuddyPounce/src/stdafx.h index 14808a2ac5..dcebbbcd04 100644 --- a/plugins/BuddyPounce/src/stdafx.h +++ b/plugins/BuddyPounce/src/stdafx.h @@ -43,7 +43,8 @@ struct CMPlugin : public PLUGIN #define NA 8 #define OCCUPIED 16 #define DND 32 -#define INVISIBLE 64 +#define FFC 64 +#define INVISIBLE 128 //======================================================= // Variables diff --git a/plugins/Clist_blind/src/clcopts.cpp b/plugins/Clist_blind/src/clcopts.cpp index 526d7536f5..41ce8f2b11 100644 --- a/plugins/Clist_blind/src/clcopts.cpp +++ b/plugins/Clist_blind/src/clcopts.cpp @@ -62,6 +62,7 @@ static const struct CheckBoxValues_t greyoutValues[] = { { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb")}, + { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") }, }; @@ -72,6 +73,7 @@ static const struct CheckBoxValues_t offlineValues[] = { { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb")}, + { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") }, }; diff --git a/plugins/Clist_blind/src/contact.cpp b/plugins/Clist_blind/src/contact.cpp index 8265e70aec..a53a66bb52 100644 --- a/plugins/Clist_blind/src/contact.cpp +++ b/plugins/Clist_blind/src/contact.cpp @@ -37,7 +37,8 @@ static statusModeOrder[] = { { ID_STATUS_DND, 110 }, { ID_STATUS_NA, 450 }, { ID_STATUS_OCCUPIED, 100 }, - { ID_STATUS_INVISIBLE, 20 }, + { ID_STATUS_FREECHAT, 0 }, + { ID_STATUS_INVISIBLE, 20 } }; static int GetStatusModeOrdering(int statusMode) diff --git a/plugins/Clist_modern/res/MicroChat.ico b/plugins/Clist_modern/res/MicroChat.ico new file mode 100644 index 0000000000..a0eea80aae Binary files /dev/null and b/plugins/Clist_modern/res/MicroChat.ico differ diff --git a/plugins/Clist_modern/res/chat.ico b/plugins/Clist_modern/res/chat.ico new file mode 100644 index 0000000000..8f065e41dc Binary files /dev/null and b/plugins/Clist_modern/res/chat.ico differ diff --git a/plugins/Clist_modern/res/resource.rc b/plugins/Clist_modern/res/resource.rc index ebfdc4212a..a286dff11b 100644 --- a/plugins/Clist_modern/res/resource.rc +++ b/plugins/Clist_modern/res/resource.rc @@ -53,6 +53,8 @@ IDI_AVATAR_OVERLAY_DND ICON "DND.ico" IDI_AVATAR_OVERLAY_INVISIBLE ICON "invisible.ico" +IDI_AVATAR_OVERLAY_CHAT ICON "chat.ico" + IDI_STATUS_OVERLAY_NA ICON "MicroNA.ico" IDI_STATUS_OVERLAY_OCCUPIED ICON "Microoccupied.ico" @@ -65,6 +67,8 @@ IDI_STATUS_OVERLAY_DND ICON "MicroDND.ico" IDI_STATUS_OVERLAY_INVISIBLE ICON "Microinvisible.ico" +IDI_STATUS_OVERLAY_CHAT ICON "Microchat.ico" + IDI_ICQC1 ICON "1.ico" IDI_ICQC2 ICON "2.ico" diff --git a/plugins/Clist_modern/src/modern_clc.h b/plugins/Clist_modern/src/modern_clc.h index 967d6b17aa..c26cc854b2 100644 --- a/plugins/Clist_modern/src/modern_clc.h +++ b/plugins/Clist_modern/src/modern_clc.h @@ -82,6 +82,7 @@ void clcSetDelayTimer(UINT_PTR uIDEvent, HWND hwnd, int nDelay = -1); #define FONTID_DND 11 #define FONTID_NA 12 #define FONTID_OCCUPIED 13 +#define FONTID_CHAT 14 #define FONTID_INVISIBLE 15 #define FONTID_CONTACT_TIME 18 #define FONTID_CLOSEDGROUPS 19 diff --git a/plugins/Clist_modern/src/modern_clcmsgs.cpp b/plugins/Clist_modern/src/modern_clcmsgs.cpp index 79aaedf31f..12928facf9 100644 --- a/plugins/Clist_modern/src/modern_clcmsgs.cpp +++ b/plugins/Clist_modern/src/modern_clcmsgs.cpp @@ -87,6 +87,7 @@ LRESULT cli_ProcessExternalMessages(HWND hwnd, ClcData *dat, UINT msg, WPARAM wP dat->fontModernInfo[FONTID_DND].colour = lParam; dat->fontModernInfo[FONTID_NA].colour = lParam; dat->fontModernInfo[FONTID_OCCUPIED].colour = lParam; + dat->fontModernInfo[FONTID_CHAT].colour = lParam; dat->fontModernInfo[FONTID_INVISIBLE].colour = lParam; dat->fontModernInfo[FONTID_CONTACT_TIME].colour = lParam; break; diff --git a/plugins/Clist_modern/src/modern_clcopts.cpp b/plugins/Clist_modern/src/modern_clcopts.cpp index 790ae94055..5bf36d5ccf 100644 --- a/plugins/Clist_modern/src/modern_clcopts.cpp +++ b/plugins/Clist_modern/src/modern_clcopts.cpp @@ -74,6 +74,7 @@ static fontOptionsList[] = { FIDF_CLASSGENERAL, FONTID_DND, CLCGROUP, LPGENW("Do not disturb contacts"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, { FIDF_CLASSGENERAL, FONTID_NA, CLCGROUP, LPGENW("Not available contacts"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, { FIDF_CLASSGENERAL, FONTID_OCCUPIED, CLCGROUP, LPGENW("Occupied contacts"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, + { FIDF_CLASSGENERAL, FONTID_CHAT, CLCGROUP, LPGENW("Free for chat contacts"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, { FIDF_CLASSGENERAL, FONTID_INVISIBLE, CLCGROUP, LPGENW("Invisible contacts"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, { FIDF_CLASSGENERAL, FONTID_OFFLINE, CLCGROUP, LPGENW("Offline contacts"), DEFAULT_GREYCOLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, { FIDF_CLASSGENERAL, FONTID_INVIS, CLCGROUP, LPGENW("Online contacts to whom you have a different visibility"), DEFAULT_COLOUR, DEFAULT_FAMILY, DEFAULT_CHARSET, FONTF_NORMAL, DEFAULT_SIZE, DEFAULT_EFFECT }, @@ -253,7 +254,8 @@ static const struct CheckBoxValues_t greyoutValues[] = { { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, - { PF2_INVISIBLE, LPGENW("Invisible") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, + { PF2_INVISIBLE, LPGENW("Invisible") } }; static const struct CheckBoxValues_t offlineValues[] = { @@ -263,7 +265,8 @@ static const struct CheckBoxValues_t offlineValues[] = { { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, - { PF2_INVISIBLE, LPGENW("Invisible") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, + { PF2_INVISIBLE, LPGENW("Invisible") } }; static void FillCheckBoxTree(HWND hwndTree, const struct CheckBoxValues_t *values, int nValues, DWORD style) diff --git a/plugins/Clist_modern/src/modern_clcpaint.cpp b/plugins/Clist_modern/src/modern_clcpaint.cpp index 04280de335..0e25c8159c 100644 --- a/plugins/Clist_modern/src/modern_clcpaint.cpp +++ b/plugins/Clist_modern/src/modern_clcpaint.cpp @@ -54,6 +54,7 @@ const char* CLCPaint::HASHTEXT[hi_LastItem] = { "DND", "NA", "OCCUPIED", + "FREECHAT", "INVISIBLE", "IDLE", "OFFLINE", @@ -170,6 +171,7 @@ int CLCPaint::GetBasicFontID(ClcContact *contact) case ID_STATUS_DND: return FONTID_DND; case ID_STATUS_NA: return FONTID_NA; case ID_STATUS_OCCUPIED: return FONTID_OCCUPIED; + case ID_STATUS_FREECHAT: return FONTID_CHAT; case ID_STATUS_INVISIBLE: return FONTID_INVISIBLE; } @@ -521,6 +523,7 @@ MODERNMASK* CLCPaint::_GetCLCContactRowBackModernMask(ClcGroup *group, ClcContac case ID_STATUS_DND: _AddParamShort(mpModernMask, hi_Status, hi_DND); break; case ID_STATUS_NA: _AddParamShort(mpModernMask, hi_Status, hi_NA); break; case ID_STATUS_OCCUPIED: _AddParamShort(mpModernMask, hi_Status, hi_OCCUPIED); break; + case ID_STATUS_FREECHAT: _AddParamShort(mpModernMask, hi_Status, hi_FREECHAT); break; case ID_STATUS_INVISIBLE: _AddParamShort(mpModernMask, hi_Status, hi_INVISIBLE); break; case ID_STATUS_IDLE: _AddParamShort(mpModernMask, hi_Status, hi_IDLE); break; default: _AddParamShort(mpModernMask, hi_Status, hi_OFFLINE); diff --git a/plugins/Clist_modern/src/modern_clcpaint.h b/plugins/Clist_modern/src/modern_clcpaint.h index d6bb60af40..20699e003c 100644 --- a/plugins/Clist_modern/src/modern_clcpaint.h +++ b/plugins/Clist_modern/src/modern_clcpaint.h @@ -62,6 +62,7 @@ private: hi_DND, hi_NA, hi_OCCUPIED, + hi_FREECHAT, hi_INVISIBLE, hi_IDLE, hi_OFFLINE, diff --git a/plugins/Clist_modern/src/modern_clisttray.cpp b/plugins/Clist_modern/src/modern_clisttray.cpp index 596a7256df..e464d57e8b 100644 --- a/plugins/Clist_modern/src/modern_clisttray.cpp +++ b/plugins/Clist_modern/src/modern_clisttray.cpp @@ -63,6 +63,7 @@ int GetStatusVal(int status) switch (status) { case ID_STATUS_OFFLINE: return 50; case ID_STATUS_ONLINE: return 100; + case ID_STATUS_FREECHAT: return 110; case ID_STATUS_INVISIBLE: return 120; case ID_STATUS_AWAY: return 200; case ID_STATUS_DND: return 210; diff --git a/plugins/Clist_modern/src/modern_clui.cpp b/plugins/Clist_modern/src/modern_clui.cpp index cf75e7b84e..6641cd1c62 100644 --- a/plugins/Clist_modern/src/modern_clui.cpp +++ b/plugins/Clist_modern/src/modern_clui.cpp @@ -119,7 +119,8 @@ OVERLAYICONINFO g_pAvatarOverlayIcons[MAX_STATUS_COUNT] = { "AVATAR_OVERLAY_DND", LPGEN("Do not disturb"), IDI_AVATAR_OVERLAY_DND, -1 }, { "AVATAR_OVERLAY_NA", LPGEN("Not available"), IDI_AVATAR_OVERLAY_NA, -1 }, { "AVATAR_OVERLAY_OCCUPIED", LPGEN("Occupied"), IDI_AVATAR_OVERLAY_OCCUPIED, -1 }, - { "AVATAR_OVERLAY_INVISIBLE", LPGEN("Invisible"), IDI_AVATAR_OVERLAY_INVISIBLE, -1 }, + { "AVATAR_OVERLAY_CHAT", LPGEN("Free for chat"), IDI_AVATAR_OVERLAY_CHAT, -1 }, + { "AVATAR_OVERLAY_INVISIBLE", LPGEN("Invisible"), IDI_AVATAR_OVERLAY_INVISIBLE, -1 } }; OVERLAYICONINFO g_pStatusOverlayIcons[MAX_STATUS_COUNT] = @@ -130,7 +131,8 @@ OVERLAYICONINFO g_pStatusOverlayIcons[MAX_STATUS_COUNT] = { "STATUS_OVERLAY_DND", LPGEN("Do not disturb"), IDI_STATUS_OVERLAY_DND, -1 }, { "STATUS_OVERLAY_NA", LPGEN("Not available"), IDI_STATUS_OVERLAY_NA, -1 }, { "STATUS_OVERLAY_OCCUPIED", LPGEN("Occupied"), IDI_STATUS_OVERLAY_OCCUPIED, -1 }, - { "STATUS_OVERLAY_INVISIBLE", LPGEN("Invisible"), IDI_STATUS_OVERLAY_INVISIBLE, -1 }, + { "STATUS_OVERLAY_CHAT", LPGEN("Free for chat"), IDI_STATUS_OVERLAY_CHAT, -1 }, + { "STATUS_OVERLAY_INVISIBLE", LPGEN("Invisible"), IDI_STATUS_OVERLAY_INVISIBLE, -1 } }; //////////////// CLUI CLASS IMPLEMENTATION // /////////////////////////////// diff --git a/plugins/Clist_modern/src/modern_contact.cpp b/plugins/Clist_modern/src/modern_contact.cpp index d3592fb2f7..78789e5d80 100644 --- a/plugins/Clist_modern/src/modern_contact.cpp +++ b/plugins/Clist_modern/src/modern_contact.cpp @@ -36,7 +36,8 @@ static statusModeOrder[] = { ID_STATUS_DND, 110 }, { ID_STATUS_NA, 450 }, { ID_STATUS_OCCUPIED, 100 }, - { ID_STATUS_INVISIBLE, 20 }, + { ID_STATUS_FREECHAT, 0 }, + { ID_STATUS_INVISIBLE, 20 } }; static int LocaleId = -1; diff --git a/plugins/Clist_modern/src/modern_rowheight_funcs.cpp b/plugins/Clist_modern/src/modern_rowheight_funcs.cpp index f9e3497a45..588ba21e21 100644 --- a/plugins/Clist_modern/src/modern_rowheight_funcs.cpp +++ b/plugins/Clist_modern/src/modern_rowheight_funcs.cpp @@ -324,7 +324,7 @@ BOOL RowHeights_Alloc(ClcData *dat, int size) static int contact_fonts[] = { FONTID_CONTACTS, FONTID_INVIS, FONTID_OFFLINE, FONTID_NOTONLIST, FONTID_OFFINVIS, - FONTID_AWAY, FONTID_DND, FONTID_NA, FONTID_OCCUPIED, FONTID_INVISIBLE }; + FONTID_AWAY, FONTID_DND, FONTID_NA, FONTID_OCCUPIED, FONTID_CHAT, FONTID_INVISIBLE }; static int other_fonts[] = { FONTID_OPENGROUPS, FONTID_OPENGROUPCOUNTS, FONTID_CLOSEDGROUPS, FONTID_CLOSEDGROUPCOUNTS, FONTID_DIVIDERS, FONTID_CONTACT_TIME }; diff --git a/plugins/Clist_modern/src/resource.h b/plugins/Clist_modern/src/resource.h index 4d1e111c47..ddaf7b5b40 100644 --- a/plugins/Clist_modern/src/resource.h +++ b/plugins/Clist_modern/src/resource.h @@ -71,6 +71,7 @@ #define IDI_AVATAR_OVERLAY_AWAY 362 #define IDI_AVATAR_OVERLAY_DND 363 #define IDI_AVATAR_OVERLAY_INVISIBLE 364 +#define IDI_AVATAR_OVERLAY_CHAT 366 #define IDI_ICQC1 367 #define IDI_ICQC2 368 #define IDI_ICQC3 369 @@ -93,6 +94,7 @@ #define IDI_STATUS_OVERLAY_AWAY 405 #define IDI_STATUS_OVERLAY_DND 406 #define IDI_STATUS_OVERLAY_INVISIBLE 407 +#define IDI_STATUS_OVERLAY_CHAT 409 #define IDR_TGA_DEFAULT_SKIN 413 #define IDR_MSF_DEFAULT_SKIN 413 #define IDD_OPT_CLUI_2 451 diff --git a/plugins/Clist_nicer/src/clcopts.cpp b/plugins/Clist_nicer/src/clcopts.cpp index 92f5503a22..1c1a4c3ddb 100644 --- a/plugins/Clist_nicer/src/clcopts.cpp +++ b/plugins/Clist_nicer/src/clcopts.cpp @@ -67,11 +67,11 @@ struct CheckBoxValues_t { static const struct CheckBoxValues_t greyoutValues[] = { { GREYF_UNFOCUS, LPGENW("Not focused") }, { MODEF_OFFLINE, LPGENW("Offline") }, { PF2_ONLINE, LPGENW("Online") }, { PF2_SHORTAWAY, LPGENW("Away") }, - { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, { PF2_INVISIBLE, LPGENW("Invisible") }, + { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") }, }; static const struct CheckBoxValues_t offlineValues[] = { { MODEF_OFFLINE, LPGENW("Offline") }, { PF2_ONLINE, LPGENW("Online") }, { PF2_SHORTAWAY, LPGENW("Away") }, { PF2_LONGAWAY, LPGENW("Not available") }, - { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, { PF2_INVISIBLE, LPGENW("Invisible") } + { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") } }; static UINT sortCtrlIDs[] = { IDC_SORTPRIMARY, IDC_SORTTHEN, IDC_SORTFINALLY, 0 }; diff --git a/plugins/Clist_nicer/src/contact.cpp b/plugins/Clist_nicer/src/contact.cpp index 9b97456527..055b63d012 100644 --- a/plugins/Clist_nicer/src/contact.cpp +++ b/plugins/Clist_nicer/src/contact.cpp @@ -36,7 +36,8 @@ statusModeOrder[] = { ID_STATUS_DND, 110 }, { ID_STATUS_NA, 450 }, { ID_STATUS_OCCUPIED, 100 }, - { ID_STATUS_INVISIBLE, 20 }, + { ID_STATUS_FREECHAT, 0 }, + { ID_STATUS_INVISIBLE, 20 } }; static int GetContactStatus(MCONTACT hContact) diff --git a/plugins/Clist_nicer/src/extBackg.cpp b/plugins/Clist_nicer/src/extBackg.cpp index 0357fe0d22..1ac9c420a8 100644 --- a/plugins/Clist_nicer/src/extBackg.cpp +++ b/plugins/Clist_nicer/src/extBackg.cpp @@ -68,6 +68,10 @@ static StatusItems_t _StatusItems[] = { CLCDEFAULT_GRADIENT,CLCDEFAULT_CORNER, CLCDEFAULT_COLOR, CLCDEFAULT_COLOR2, CLCDEFAULT_COLOR2_TRANSPARENT, CLCDEFAULT_TEXTCOLOR, CLCDEFAULT_ALPHA, CLCDEFAULT_MRGN_LEFT, CLCDEFAULT_MRGN_TOP, CLCDEFAULT_MRGN_RIGHT, CLCDEFAULT_MRGN_BOTTOM, CLCDEFAULT_IGNORE + }, {"Free for chat", "EXBK_FFC", ID_STATUS_FREECHAT, + CLCDEFAULT_GRADIENT,CLCDEFAULT_CORNER, + CLCDEFAULT_COLOR, CLCDEFAULT_COLOR2, CLCDEFAULT_COLOR2_TRANSPARENT, CLCDEFAULT_TEXTCOLOR, CLCDEFAULT_ALPHA, CLCDEFAULT_MRGN_LEFT, + CLCDEFAULT_MRGN_TOP, CLCDEFAULT_MRGN_RIGHT, CLCDEFAULT_MRGN_BOTTOM, CLCDEFAULT_IGNORE }, {"Invisible", "EXBK_Invisible", ID_STATUS_INVISIBLE, CLCDEFAULT_GRADIENT,CLCDEFAULT_CORNER, CLCDEFAULT_COLOR, CLCDEFAULT_COLOR2, CLCDEFAULT_COLOR2_TRANSPARENT, CLCDEFAULT_TEXTCOLOR, CLCDEFAULT_ALPHA, CLCDEFAULT_MRGN_LEFT, diff --git a/plugins/CmdLine/src/mimcmd_data.h b/plugins/CmdLine/src/mimcmd_data.h index 9351596ef9..2d22334a87 100644 --- a/plugins/CmdLine/src/mimcmd_data.h +++ b/plugins/CmdLine/src/mimcmd_data.h @@ -89,7 +89,7 @@ typedef TSharedData *PSharedData; #define MIMCMD_IGNORE 19 #define MIMCMD_LUA 20 -#define MIMCMD_HELP_STATUS LPGENW("Changes account status either globally or per account.\nUsage: status [].\nPossible values for are: offline, online, away, dnd, na, occupied, invisible.\n is an optional parameter specifying the account to set the status for. If it's not specified then the command will issue a global status change.") +#define MIMCMD_HELP_STATUS LPGENW("Changes account status either globally or per account.\nUsage: status [].\nPossible values for are: offline, online, away, dnd, na, occupied, freechat, invisible.\n is an optional parameter specifying the account to set the status for. If it's not specified then the command will issue a global status change.") #define MIMCMD_HELP_AWAYMSG LPGENW("Changes away message either globally or per account.\nUsage: awaymsg [].\n is the new away message.\n is an optional parameter specifying the account to set the away message for. If not specified then the away message will be set globally.") #define MIMCMD_HELP_XSTATUS LPGENW("Changes extended status either globally or per account.\nUsage: xstatus [].\n is the new extended status to set. Possible values are: ...\n is an optional parameter specifying the account for which extended status is set. If not specified then extended status for all accounts will be changed.\nNOTE: Not all accounts/protocols support extended status.") #define MIMCMD_HELP_POPUPS LPGENW("Disables or enables popups display.\nUsage: popups (disable | enable | toggle).\nThe command will either enable or disable popups display.") diff --git a/plugins/CmdLine/src/mimcmd_handlers.cpp b/plugins/CmdLine/src/mimcmd_handlers.cpp index c871496362..89f1fb131e 100644 --- a/plugins/CmdLine/src/mimcmd_handlers.cpp +++ b/plugins/CmdLine/src/mimcmd_handlers.cpp @@ -166,6 +166,8 @@ int ParseStatusParam(const wchar_t *status) return ID_STATUS_NA; if (!mir_wstrcmp(lower, L"occupied")) return ID_STATUS_OCCUPIED; + if (!mir_wstrcmp(lower, L"freechat")) + return ID_STATUS_FREECHAT; if (!mir_wstrcmp(lower, L"invisible")) return ID_STATUS_INVISIBLE; return 0; diff --git a/plugins/ExternalAPI/m_account.h b/plugins/ExternalAPI/m_account.h index fe01813f33..8505db47c0 100644 --- a/plugins/ExternalAPI/m_account.h +++ b/plugins/ExternalAPI/m_account.h @@ -127,7 +127,8 @@ typedef struct CAccount #define YAMN_ACC_ST3 0x00000008 //Check (countdown) when Not available #define YAMN_ACC_ST4 0x00000010 //Check (countdown) when Occupied #define YAMN_ACC_ST5 0x00000020 //Check (countdown) when DND - #define YAMN_ACC_ST6 0x00000040 //Check (countdown) when Invisible + #define YAMN_ACC_ST6 0x00000040 //Check (countdown) when Free for chat + #define YAMN_ACC_ST7 0x00000080 //Check (countdown) when Invisible #define YAMN_ACC_STARTA 0x00010000 //Check on start anyway #define YAMN_ACC_STARTS 0x00020000 //Check on start regarding to status setting diff --git a/plugins/FloatingContacts/src/main.cpp b/plugins/FloatingContacts/src/main.cpp index 05949a2092..dbea0666ee 100644 --- a/plugins/FloatingContacts/src/main.cpp +++ b/plugins/FloatingContacts/src/main.cpp @@ -596,6 +596,7 @@ static int ClcStatusToPf2(int status) case ID_STATUS_DND: return PF2_HEAVYDND; case ID_STATUS_NA: return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; + case ID_STATUS_FREECHAT: return PF2_FREECHAT; case ID_STATUS_INVISIBLE: return PF2_INVISIBLE; case ID_STATUS_OFFLINE: return MODEF_OFFLINE; } diff --git a/plugins/KeyboardNotify/res/resources.rc b/plugins/KeyboardNotify/res/resources.rc index 6291f253a1..34ba5aa856 100644 --- a/plugins/KeyboardNotify/res/resources.rc +++ b/plugins/KeyboardNotify/res/resources.rc @@ -80,7 +80,8 @@ BEGIN CONTROL "Occupied",IDC_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,118,128,9 CONTROL "Not available",IDC_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,108,128,9 CONTROL "Do not disturb",IDC_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,128,85,9 - CONTROL "Invisible",IDC_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,138,128,9 + CONTROL "Free for chat",IDC_FREECHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,138,127,9 + CONTROL "Invisible",IDC_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,168,148,128,9 GROUPBOX "Pending Events",IDC_STATIC,155,189,147,28 LTEXT "Remind me every",IDC_STATIC,168,200,58,9 EDITTEXT IDC_SREMCHECK,226,198,37,13,ES_NUMBER diff --git a/plugins/KeyboardNotify/src/constants.h b/plugins/KeyboardNotify/src/constants.h index d8f36a41b9..175b33d6bc 100644 --- a/plugins/KeyboardNotify/src/constants.h +++ b/plugins/KeyboardNotify/src/constants.h @@ -41,7 +41,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define MAP_NA 4 #define MAP_OCCUPIED 8 #define MAP_DND 16 -#define MAP_INVISIBLE 32 +#define MAP_FREECHAT 32 +#define MAP_INVISIBLE 64 #define MAP_OFFLINE 512 // Default settings diff --git a/plugins/KeyboardNotify/src/main.cpp b/plugins/KeyboardNotify/src/main.cpp index 1abeb64cb1..230b99e734 100644 --- a/plugins/KeyboardNotify/src/main.cpp +++ b/plugins/KeyboardNotify/src/main.cpp @@ -156,6 +156,7 @@ BOOL isStatusEnabled(int status) case ID_STATUS_NA: return wStatusMap & MAP_NA; case ID_STATUS_OCCUPIED: return wStatusMap & MAP_OCCUPIED; case ID_STATUS_DND: return wStatusMap & MAP_DND; + case ID_STATUS_FREECHAT: return wStatusMap & MAP_FREECHAT; case ID_STATUS_INVISIBLE: return wStatusMap & MAP_INVISIBLE; } return FALSE; diff --git a/plugins/KeyboardNotify/src/options.cpp b/plugins/KeyboardNotify/src/options.cpp index 780efa029b..4446fcbbf1 100644 --- a/plugins/KeyboardNotify/src/options.cpp +++ b/plugins/KeyboardNotify/src/options.cpp @@ -644,6 +644,7 @@ static INT_PTR CALLBACK DlgProcBasicOptions(HWND hwndDlg, UINT msg, WPARAM wPara CheckDlgButton(hwndDlg, IDC_NA, wStatusMap & MAP_NA ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_OCCUPIED, wStatusMap & MAP_OCCUPIED ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DND, wStatusMap & MAP_DND ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_FREECHAT, wStatusMap & MAP_FREECHAT ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_INVISIBLE, wStatusMap & MAP_INVISIBLE ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_OFFLINE, wStatusMap & MAP_OFFLINE ? BST_CHECKED : BST_UNCHECKED); @@ -686,6 +687,7 @@ static INT_PTR CALLBACK DlgProcBasicOptions(HWND hwndDlg, UINT msg, WPARAM wPara case IDC_NA: case IDC_OCCUPIED: case IDC_DND: + case IDC_FREECHAT: case IDC_INVISIBLE: case IDC_OFFLINE: EnableWindow(GetDlgItem(hwndDlg, IDC_IFNOTTOP), IsDlgButtonChecked(hwndDlg, IDC_IFOPEN) == BST_CHECKED); @@ -779,6 +781,8 @@ static INT_PTR CALLBACK DlgProcBasicOptions(HWND hwndDlg, UINT msg, WPARAM wPara statusMap |= MAP_OCCUPIED; if (IsDlgButtonChecked(hwndDlg, IDC_DND) == BST_CHECKED) statusMap |= MAP_DND; + if (IsDlgButtonChecked(hwndDlg, IDC_FREECHAT) == BST_CHECKED) + statusMap |= MAP_FREECHAT; if (IsDlgButtonChecked(hwndDlg, IDC_INVISIBLE) == BST_CHECKED) statusMap |= MAP_INVISIBLE; if (IsDlgButtonChecked(hwndDlg, IDC_OFFLINE) == BST_CHECKED) diff --git a/plugins/KeyboardNotify/src/resource.h b/plugins/KeyboardNotify/src/resource.h index af747a03fe..d645b050e2 100644 --- a/plugins/KeyboardNotify/src/resource.h +++ b/plugins/KeyboardNotify/src/resource.h @@ -39,6 +39,7 @@ #define IDC_NA 1024 #define IDC_OCCUPIED 1025 #define IDC_DND 1026 +#define IDC_FREECHAT 1027 #define IDC_INVISIBLE 1028 #define IDC_OFFLINE 1031 #define IDC_REMCHECK 1032 diff --git a/plugins/MirandaG15/src/CAppletManager.cpp b/plugins/MirandaG15/src/CAppletManager.cpp index 8c88700675..602fec49f4 100644 --- a/plugins/MirandaG15/src/CAppletManager.cpp +++ b/plugins/MirandaG15/src/CAppletManager.cpp @@ -499,6 +499,8 @@ HBITMAP CAppletManager::GetStatusBitmap(int iStatus) return m_ahStatusBitmaps[5]; case ID_STATUS_INVISIBLE: return m_ahStatusBitmaps[6]; + case ID_STATUS_FREECHAT: + return m_ahStatusBitmaps[7]; case ID_STATUS_AWAY: default: return m_ahStatusBitmaps[2]; diff --git a/plugins/MirandaG15/src/CAppletManager.h b/plugins/MirandaG15/src/CAppletManager.h index 35cc98ac7e..80a29d9603 100644 --- a/plugins/MirandaG15/src/CAppletManager.h +++ b/plugins/MirandaG15/src/CAppletManager.h @@ -181,7 +181,7 @@ private: bool m_bScreensaver = false; - HBITMAP m_ahStatusBitmaps[7]; + HBITMAP m_ahStatusBitmaps[8]; HBITMAP m_ahEventBitmaps[4]; HBITMAP m_ahLargeEventBitmaps[4]; }; diff --git a/plugins/MirandaG15/src/CContactList.cpp b/plugins/MirandaG15/src/CContactList.cpp index ee7bd5a20d..c385b7965b 100644 --- a/plugins/MirandaG15/src/CContactList.cpp +++ b/plugins/MirandaG15/src/CContactList.cpp @@ -11,7 +11,8 @@ const int aiStatusPriority[] = 1, // ID_STATUS_DND 40074 7, // ID_STATUS_NA 40075 6, // ID_STATUS_OCCUPIED 40076 - 9 // ID_STATUS_INVISIBLE 40077 + 10, // ID_STATUS_FREECHAT 40077 + 9 // ID_STATUS_INVISIBLE 40078 }; //************************************************************************ diff --git a/plugins/MyDetails/res/resource.rc b/plugins/MyDetails/res/resource.rc index bc260f831a..9a9f840222 100644 --- a/plugins/MyDetails/res/resource.rc +++ b/plugins/MyDetails/res/resource.rc @@ -196,6 +196,7 @@ BEGIN MENUITEM "&Not available", ID_STATUS_NA MENUITEM "Occ&upied", ID_STATUS_OCCUPIED MENUITEM "&Do not disturb", ID_STATUS_DND + MENUITEM "&Free for chat", ID_STATUS_FREECHAT MENUITEM "&Invisible", ID_STATUS_INVISIBLE END POPUP "Context popup" diff --git a/plugins/MyDetails/src/data.cpp b/plugins/MyDetails/src/data.cpp index 3f68fdb273..086901bf6b 100644 --- a/plugins/MyDetails/src/data.cpp +++ b/plugins/MyDetails/src/data.cpp @@ -532,6 +532,7 @@ static char *StatusModeToDbSetting(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; diff --git a/plugins/MyDetails/src/frame.cpp b/plugins/MyDetails/src/frame.cpp index f2b75f23df..8d2dc7f25c 100644 --- a/plugins/MyDetails/src/frame.cpp +++ b/plugins/MyDetails/src/frame.cpp @@ -1456,7 +1456,7 @@ void ShowProtocolStatusMenu(HWND hwnd, MyDetailsFrameData *data, Protocol *proto } else { // Well, lets do it by hand - static unsigned statusModePf2List[] = { 0xFFFFFFFF, PF2_ONLINE, PF2_SHORTAWAY, PF2_LONGAWAY, PF2_LIGHTDND, PF2_HEAVYDND, PF2_INVISIBLE }; + static unsigned statusModePf2List[] = { 0xFFFFFFFF, PF2_ONLINE, PF2_SHORTAWAY, PF2_LONGAWAY, PF2_LIGHTDND, PF2_HEAVYDND, PF2_FREECHAT, PF2_INVISIBLE }; menu = LoadMenu(g_plugin.getInst(), MAKEINTRESOURCE(IDR_MENU1)); submenu = GetSubMenu(menu, 0); diff --git a/plugins/NewAwaySysMod/res/NewAwaySys.rc b/plugins/NewAwaySysMod/res/NewAwaySys.rc index a5055cf6b4..4ae3503068 100644 --- a/plugins/NewAwaySysMod/res/NewAwaySys.rc +++ b/plugins/NewAwaySysMod/res/NewAwaySys.rc @@ -100,6 +100,7 @@ BEGIN CONTROL "&Not available",IDC_REPLYDLG_DISABLE_NA,"MButtonClass",WS_TABSTOP,53,146,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Occ&upied",IDC_REPLYDLG_DISABLE_OCC,"MButtonClass",WS_TABSTOP,69,146,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Do not disturb",IDC_REPLYDLG_DISABLE_DND,"MButtonClass",WS_TABSTOP,85,146,16,14,WS_EX_NOACTIVATE | 0x10000000L + CONTROL "&Free for chat",IDC_REPLYDLG_DISABLE_FFC,"MButtonClass",WS_TABSTOP,101,146,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Invisible",IDC_REPLYDLG_DISABLE_INV,"MButtonClass",WS_TABSTOP,117,146,16,14,WS_EX_NOACTIVATE | 0x10000000L LTEXT "Autoreply format:",IDC_REPLYDLG_STATIC_FORMAT,13,168,283,8 EDITTEXT IDC_REPLYDLG_PREFIX,21,180,209,30,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL @@ -144,6 +145,7 @@ BEGIN CONTROL "&Not available",IDC_MESSAGEDLG_DEF_NA,"MButtonClass",WS_TABSTOP,181,197,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Occ&upied",IDC_MESSAGEDLG_DEF_OCC,"MButtonClass",WS_TABSTOP,197,197,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Do not disturb",IDC_MESSAGEDLG_DEF_DND,"MButtonClass",WS_TABSTOP,213,197,16,14,WS_EX_NOACTIVATE | 0x10000000L + CONTROL "&Free for chat",IDC_MESSAGEDLG_DEF_FFC,"MButtonClass",WS_TABSTOP,229,197,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Invisible",IDC_MESSAGEDLG_DEF_INV,"MButtonClass",WS_TABSTOP,245,197,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "New message",IDC_MESSAGEDLG_NEWMSG,"MButtonClass",WS_TABSTOP,138,166,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "New category",IDC_MESSAGEDLG_NEWCAT,"MButtonClass",WS_TABSTOP,154,166,16,14,WS_EX_NOACTIVATE | 0x10000000L @@ -198,6 +200,8 @@ BEGIN CONTROL "&Not available",IDC_MOREOPTDLG_DONTPOPDLG_NA,"MButtonClass",WS_TABSTOP,44,212,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Occ&upied",IDC_MOREOPTDLG_DONTPOPDLG_OCC,"MButtonClass",WS_TABSTOP,60,212,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Do not disturb",IDC_MOREOPTDLG_DONTPOPDLG_DND,"MButtonClass",WS_TABSTOP,76,212,16,14,WS_EX_NOACTIVATE | 0x10000000L + CONTROL "&Free for chat",IDC_MOREOPTDLG_DONTPOPDLG_FFC, + "MButtonClass",WS_TABSTOP,92,212,16,14,WS_EX_NOACTIVATE | 0x10000000L CONTROL "&Invisible",IDC_MOREOPTDLG_DONTPOPDLG_INV,"MButtonClass",WS_TABSTOP,108,212,16,14,WS_EX_NOACTIVATE | 0x10000000L END @@ -354,6 +358,7 @@ BEGIN MENUITEM "&Not available", IDR_MSGTREEMENU_DEF_NA MENUITEM "Occ&upied", IDR_MSGTREEMENU_DEF_OCC MENUITEM "&Do not disturb", IDR_MSGTREEMENU_DEF_DND + MENUITEM "&Free for chat", IDR_MSGTREEMENU_DEF_FFC MENUITEM "&Invisible", IDR_MSGTREEMENU_DEF_INV END MENUITEM SEPARATOR diff --git a/plugins/NewAwaySysMod/src/AwayOpt.cpp b/plugins/NewAwaySysMod/src/AwayOpt.cpp index 9169604e39..66c463d752 100644 --- a/plugins/NewAwaySysMod/src/AwayOpt.cpp +++ b/plugins/NewAwaySysMod/src/AwayOpt.cpp @@ -104,6 +104,7 @@ static Dlg1DefMsgDlgItems[] = { { IDC_MESSAGEDLG_DEF_NA, ID_STATUS_NA, ILI_PROTO_NA }, { IDC_MESSAGEDLG_DEF_OCC, ID_STATUS_OCCUPIED, ILI_PROTO_OCC }, { IDC_MESSAGEDLG_DEF_DND, ID_STATUS_DND, ILI_PROTO_DND }, + { IDC_MESSAGEDLG_DEF_FFC, ID_STATUS_FREECHAT, ILI_PROTO_FFC }, { IDC_MESSAGEDLG_DEF_INV, ID_STATUS_INVISIBLE, ILI_PROTO_INV } }; @@ -262,6 +263,7 @@ static INT_PTR CALLBACK MessagesOptDlg(HWND hwndDlg, UINT msg, WPARAM wParam, LP case IDC_MESSAGEDLG_DEF_NA: case IDC_MESSAGEDLG_DEF_OCC: case IDC_MESSAGEDLG_DEF_DND: + case IDC_MESSAGEDLG_DEF_FFC: case IDC_MESSAGEDLG_DEF_INV: for (int i = 0; i < _countof(Dlg1DefMsgDlgItems); i++) { if (LOWORD(wParam) == Dlg1DefMsgDlgItems[i].DlgItem) { @@ -344,6 +346,7 @@ static Dlg2StatusButtons[] = { { IDC_MOREOPTDLG_DONTPOPDLG_NA, ID_STATUS_NA, ILI_PROTO_NA }, { IDC_MOREOPTDLG_DONTPOPDLG_OCC, ID_STATUS_OCCUPIED, ILI_PROTO_OCC }, { IDC_MOREOPTDLG_DONTPOPDLG_DND, ID_STATUS_DND, ILI_PROTO_DND }, + { IDC_MOREOPTDLG_DONTPOPDLG_FFC, ID_STATUS_FREECHAT, ILI_PROTO_FFC }, { IDC_MOREOPTDLG_DONTPOPDLG_INV, ID_STATUS_INVISIBLE, ILI_PROTO_INV } }; @@ -410,6 +413,7 @@ static INT_PTR CALLBACK MoreOptDlg(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM case IDC_MOREOPTDLG_DONTPOPDLG_NA: case IDC_MOREOPTDLG_DONTPOPDLG_OCC: case IDC_MOREOPTDLG_DONTPOPDLG_DND: + case IDC_MOREOPTDLG_DONTPOPDLG_FFC: case IDC_MOREOPTDLG_DONTPOPDLG_INV: SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); return 0; @@ -464,6 +468,7 @@ Dlg3StatusButtons[] = { { IDC_REPLYDLG_DISABLE_NA, ID_STATUS_NA, ILI_PROTO_NA }, { IDC_REPLYDLG_DISABLE_OCC, ID_STATUS_OCCUPIED, ILI_PROTO_OCC }, { IDC_REPLYDLG_DISABLE_DND, ID_STATUS_DND, ILI_PROTO_DND }, + { IDC_REPLYDLG_DISABLE_FFC, ID_STATUS_FREECHAT, ILI_PROTO_FFC }, { IDC_REPLYDLG_DISABLE_INV, ID_STATUS_INVISIBLE, ILI_PROTO_INV }, }; @@ -588,6 +593,7 @@ INT_PTR CALLBACK AutoreplyOptDlg(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM l case IDC_REPLYDLG_DISABLE_NA: case IDC_REPLYDLG_DISABLE_OCC: case IDC_REPLYDLG_DISABLE_DND: + case IDC_REPLYDLG_DISABLE_FFC: case IDC_REPLYDLG_DISABLE_INV: if (!ChangeLock) SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0); @@ -636,6 +642,7 @@ Dlg4DefMsgDlgItems[] = { { IDC_MESSAGEDLG_DEF_NA, ID_STATUS_NA, ILI_PROTO_NA }, { IDC_MESSAGEDLG_DEF_OCC, ID_STATUS_OCCUPIED, ILI_PROTO_OCC }, { IDC_MESSAGEDLG_DEF_DND, ID_STATUS_DND, ILI_PROTO_DND }, + { IDC_MESSAGEDLG_DEF_FFC, ID_STATUS_FREECHAT, ILI_PROTO_FFC }, { IDC_MESSAGEDLG_DEF_INV, ID_STATUS_INVISIBLE, ILI_PROTO_INV } }; @@ -1034,6 +1041,7 @@ void InitOptions() g_MessagesOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MESSAGEDLG_DEF_NA, nullptr, DBVT_BYTE, 0, 0, IDC_MESSAGEDLG_MSGTREE)); g_MessagesOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MESSAGEDLG_DEF_OCC, nullptr, DBVT_BYTE, 0, 0, IDC_MESSAGEDLG_MSGTREE)); g_MessagesOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MESSAGEDLG_DEF_DND, nullptr, DBVT_BYTE, 0, 0, IDC_MESSAGEDLG_MSGTREE)); + g_MessagesOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MESSAGEDLG_DEF_FFC, nullptr, DBVT_BYTE, 0, 0, IDC_MESSAGEDLG_MSGTREE)); g_MessagesOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MESSAGEDLG_DEF_INV, nullptr, DBVT_BYTE, 0, 0, IDC_MESSAGEDLG_MSGTREE)); TreeItemArray DefMsgTree; @@ -1055,6 +1063,8 @@ void InitOptions() DefMsgTree.AddElem(CTreeItem(TranslateT("Occupied"), ParentID1, ID++, 0, TranslateT("Not right now."))); g_MsgTreePage.Items.AddElem(new COptItem_IntDBSetting(IDS_MESSAGEDLG_DEF_DND, StatusToDBSetting(ID_STATUS_DND, MESSAGES_DB_MSGTREEDEF), DBVT_WORD, false, ID)); DefMsgTree.AddElem(CTreeItem(TranslateT("Do not disturb"), ParentID1, ID++, 0, TranslateT("Give a guy some peace, would ya?"))); + g_MsgTreePage.Items.AddElem(new COptItem_IntDBSetting(IDS_MESSAGEDLG_DEF_FFC, StatusToDBSetting(ID_STATUS_FREECHAT, MESSAGES_DB_MSGTREEDEF), DBVT_WORD, false, ID)); + DefMsgTree.AddElem(CTreeItem(TranslateT("Free for chat"), ParentID1, ID++, 0, TranslateT("I'm a chatbot!"))); g_MsgTreePage.Items.AddElem(new COptItem_IntDBSetting(IDS_MESSAGEDLG_DEF_INV, StatusToDBSetting(ID_STATUS_INVISIBLE, MESSAGES_DB_MSGTREEDEF), DBVT_WORD, false, ID)); DefMsgTree.AddElem(CTreeItem(TranslateT("Invisible"), ParentID1, ID++, 0, TranslateT("I'm hiding from the mafia."))); g_MsgTreePage.Items.AddElem(new COptItem_TreeCtrl(IDV_MSGTREE, "MsgTree", DefMsgTree, RootItems, 0, "Text")); @@ -1084,6 +1094,7 @@ void InitOptions() g_MoreOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MOREOPTDLG_DONTPOPDLG_NA, "DontPopDlg", DBVT_WORD, MOREOPTDLG_DEF_DONTPOPDLG, SF_NA)); g_MoreOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MOREOPTDLG_DONTPOPDLG_OCC, "DontPopDlg", DBVT_WORD, MOREOPTDLG_DEF_DONTPOPDLG, SF_OCC)); g_MoreOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MOREOPTDLG_DONTPOPDLG_DND, "DontPopDlg", DBVT_WORD, MOREOPTDLG_DEF_DONTPOPDLG, SF_DND)); + g_MoreOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MOREOPTDLG_DONTPOPDLG_FFC, "DontPopDlg", DBVT_WORD, MOREOPTDLG_DEF_DONTPOPDLG, SF_FFC)); g_MoreOptPage.Items.AddElem(new COptItem_Checkbox(IDC_MOREOPTDLG_DONTPOPDLG_INV, "DontPopDlg", DBVT_WORD, MOREOPTDLG_DEF_DONTPOPDLG, SF_INV)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_ENABLEREPLY, DB_ENABLEREPLY, DBVT_BYTE, AUTOREPLY_DEF_REPLY)); @@ -1105,6 +1116,7 @@ void InitOptions() g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_DISABLE_NA, "DisableReply", DBVT_WORD, AUTOREPLY_DEF_DISABLEREPLY, SF_NA, IDC_REPLYDLG_ENABLEREPLY)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_DISABLE_OCC, "DisableReply", DBVT_WORD, AUTOREPLY_DEF_DISABLEREPLY, SF_OCC, IDC_REPLYDLG_ENABLEREPLY)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_DISABLE_DND, "DisableReply", DBVT_WORD, AUTOREPLY_DEF_DISABLEREPLY, SF_DND, IDC_REPLYDLG_ENABLEREPLY)); + g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_DISABLE_FFC, "DisableReply", DBVT_WORD, AUTOREPLY_DEF_DISABLEREPLY, SF_FFC, IDC_REPLYDLG_ENABLEREPLY)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Checkbox(IDC_REPLYDLG_DISABLE_INV, "DisableReply", DBVT_WORD, AUTOREPLY_DEF_DISABLEREPLY, SF_INV, IDC_REPLYDLG_ENABLEREPLY)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Generic(IDC_REPLYDLG_STATIC_FORMAT, IDC_REPLYDLG_ENABLEREPLY)); g_AutoreplyOptPage.Items.AddElem(new COptItem_Edit(IDC_REPLYDLG_PREFIX, "ReplyPrefix", AWAY_MSGDATA_MAX, AUTOREPLY_DEF_PREFIX, IDC_REPLYDLG_ENABLEREPLY)); diff --git a/plugins/NewAwaySysMod/src/AwaySys.cpp b/plugins/NewAwaySysMod/src/AwaySys.cpp index 93872e8f48..596f77e72f 100644 --- a/plugins/NewAwaySysMod/src/AwaySys.cpp +++ b/plugins/NewAwaySysMod/src/AwaySys.cpp @@ -134,6 +134,7 @@ static StatusModeList[] = { { ID_STATUS_NA, IDC_REPLYDLG_DISABLE_NA, IDC_MOREOPTDLG_DONTPOPDLG_NA }, { ID_STATUS_OCCUPIED, IDC_REPLYDLG_DISABLE_OCC, IDC_MOREOPTDLG_DONTPOPDLG_OCC }, { ID_STATUS_DND, IDC_REPLYDLG_DISABLE_DND, IDC_MOREOPTDLG_DONTPOPDLG_DND }, + { ID_STATUS_FREECHAT, IDC_REPLYDLG_DISABLE_FFC, IDC_MOREOPTDLG_DONTPOPDLG_FFC }, { ID_STATUS_INVISIBLE, IDC_REPLYDLG_DISABLE_INV, IDC_MOREOPTDLG_DONTPOPDLG_INV }, }; diff --git a/plugins/NewAwaySysMod/src/Client.cpp b/plugins/NewAwaySysMod/src/Client.cpp index 33f6eb3e6d..1c2d519969 100644 --- a/plugins/NewAwaySysMod/src/Client.cpp +++ b/plugins/NewAwaySysMod/src/Client.cpp @@ -110,6 +110,7 @@ void ChangeProtoMessages(char* szProto, int iMode, const TCString &Msg) ID_STATUS_NA, "Na", ID_STATUS_DND, "Dnd", ID_STATUS_OCCUPIED, "Occupied", + ID_STATUS_FREECHAT, "FreeChat", ID_STATUS_INVISIBLE, "Inv", ID_STATUS_IDLE, "Idl" }; diff --git a/plugins/NewAwaySysMod/src/MsgEventAdded.cpp b/plugins/NewAwaySysMod/src/MsgEventAdded.cpp index 72dcceb839..f66cd6dc24 100644 --- a/plugins/NewAwaySysMod/src/MsgEventAdded.cpp +++ b/plugins/NewAwaySysMod/src/MsgEventAdded.cpp @@ -33,6 +33,7 @@ static StatusModeList[] = { ID_STATUS_NA, IDC_REPLYDLG_DISABLE_NA, IDC_MOREOPTDLG_DONTPOPDLG_NA }, { ID_STATUS_OCCUPIED, IDC_REPLYDLG_DISABLE_OCC, IDC_MOREOPTDLG_DONTPOPDLG_OCC }, { ID_STATUS_DND, IDC_REPLYDLG_DISABLE_DND, IDC_MOREOPTDLG_DONTPOPDLG_DND }, + { ID_STATUS_FREECHAT, IDC_REPLYDLG_DISABLE_FFC, IDC_MOREOPTDLG_DONTPOPDLG_FFC }, { ID_STATUS_INVISIBLE, IDC_REPLYDLG_DISABLE_INV, IDC_MOREOPTDLG_DONTPOPDLG_INV }, }; diff --git a/plugins/NewAwaySysMod/src/MsgTree.cpp b/plugins/NewAwaySysMod/src/MsgTree.cpp index 7304da2dd8..8917fcd961 100644 --- a/plugins/NewAwaySysMod/src/MsgTree.cpp +++ b/plugins/NewAwaySysMod/src/MsgTree.cpp @@ -42,6 +42,7 @@ SettingsList[] = { IDS_MESSAGEDLG_DEF_NA, ID_STATUS_NA, IDR_MSGTREEMENU_DEF_NA }, { IDS_MESSAGEDLG_DEF_OCC, ID_STATUS_OCCUPIED, IDR_MSGTREEMENU_DEF_OCC }, { IDS_MESSAGEDLG_DEF_DND, ID_STATUS_DND, IDR_MSGTREEMENU_DEF_DND }, + { IDS_MESSAGEDLG_DEF_FFC, ID_STATUS_FREECHAT, IDR_MSGTREEMENU_DEF_FFC }, { IDS_MESSAGEDLG_DEF_INV, ID_STATUS_INVISIBLE, IDR_MSGTREEMENU_DEF_INV }, }; @@ -418,6 +419,7 @@ LRESULT CALLBACK MsgTreeSubclassProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM case IDR_MSGTREEMENU_DEF_NA: case IDR_MSGTREEMENU_DEF_OCC: case IDR_MSGTREEMENU_DEF_DND: + case IDR_MSGTREEMENU_DEF_FFC: case IDR_MSGTREEMENU_DEF_INV: for (int i = 0; i < _countof(SettingsList); i++) { if (SettingsList[i].MenuItemID == MenuResult) { diff --git a/plugins/NewAwaySysMod/src/Properties.cpp b/plugins/NewAwaySysMod/src/Properties.cpp index a60b45b70f..e4e1e2b22d 100644 --- a/plugins/NewAwaySysMod/src/Properties.cpp +++ b/plugins/NewAwaySysMod/src/Properties.cpp @@ -305,6 +305,7 @@ TCString CProtoSettings::GetMsgFormat(int Flags, int *pOrder) IDS_MESSAGEDLG_DEF_NA, ID_STATUS_NA, IDS_MESSAGEDLG_DEF_OCC, ID_STATUS_OCCUPIED, IDS_MESSAGEDLG_DEF_DND, ID_STATUS_DND, + IDS_MESSAGEDLG_DEF_FFC, ID_STATUS_FREECHAT, IDS_MESSAGEDLG_DEF_INV, ID_STATUS_INVISIBLE, }; diff --git a/plugins/NewAwaySysMod/src/Properties.h b/plugins/NewAwaySysMod/src/Properties.h index 9a445d8a2d..09790acdb5 100644 --- a/plugins/NewAwaySysMod/src/Properties.h +++ b/plugins/NewAwaySysMod/src/Properties.h @@ -82,6 +82,7 @@ private: #define ILI_PROTO_NA 4 #define ILI_PROTO_OCC 5 #define ILI_PROTO_DND 6 +#define ILI_PROTO_FFC 7 #define ILI_PROTO_INV 8 #define ILI_DOT 11 #define ILI_MSGICON 12 @@ -97,7 +98,7 @@ private: static unsigned Icons[] = { SKINICON_EVENT_MESSAGE | IL_SKINICON, SKINICON_EVENT_FILE | IL_SKINICON, - ID_STATUS_ONLINE | IL_PROTOICON, ID_STATUS_AWAY | IL_PROTOICON, ID_STATUS_NA | IL_PROTOICON, ID_STATUS_OCCUPIED | IL_PROTOICON, ID_STATUS_DND | IL_PROTOICON, ID_STATUS_INVISIBLE | IL_PROTOICON, + ID_STATUS_ONLINE | IL_PROTOICON, ID_STATUS_AWAY | IL_PROTOICON, ID_STATUS_NA | IL_PROTOICON, ID_STATUS_OCCUPIED | IL_PROTOICON, ID_STATUS_DND | IL_PROTOICON, ID_STATUS_FREECHAT | IL_PROTOICON, ID_STATUS_INVISIBLE | IL_PROTOICON, IDI_DOT, IDI_MSGICON, IDI_IGNORE, IDI_SOE_ENABLED, IDI_SOE_DISABLED, IDI_NEWMESSAGE, IDI_NEWCATEGORY, IDI_SAVE, IDI_SAVEASNEW, IDI_DELETE, IDI_SETTINGS }; @@ -286,6 +287,7 @@ StatusSettings[] = { { ID_STATUS_NA, "Na" }, { ID_STATUS_DND, "Dnd" }, { ID_STATUS_OCCUPIED, "Occ" }, + { ID_STATUS_FREECHAT, "Ffc" }, { ID_STATUS_INVISIBLE, "Inv" }, { ID_STATUS_IDLE, "Idle" } }; diff --git a/plugins/NewAwaySysMod/src/resource.h b/plugins/NewAwaySysMod/src/resource.h index 144ea69431..bbf83c6415 100644 --- a/plugins/NewAwaySysMod/src/resource.h +++ b/plugins/NewAwaySysMod/src/resource.h @@ -116,6 +116,7 @@ #define IDC_POPUPOPTDLG_NANOTIFY 1085 #define IDC_POPUPOPTDLG_OCCNOTIFY 1086 #define IDC_POPUPOPTDLG_DNDNOTIFY 1087 +#define IDC_POPUPOPTDLG_FFCNOTIFY 1088 #define IDC_POPUPOPTDLG_DEFBGCOLOUR 1089 #define IDC_POPUPOPTDLG_DEFTEXTCOLOUR 1090 #define IDC_NOTIFYVARS_STATIC_TIME 1091 @@ -143,6 +144,7 @@ #define IDC_MESSAGEDLG_DEF_NA 1114 #define IDC_MESSAGEDLG_DEF_OCC 1115 #define IDC_MESSAGEDLG_DEF_DND 1116 +#define IDC_MESSAGEDLG_DEF_FFC 1117 #define IDC_MESSAGEDLG_MSGTITLE 1120 #define IDC_MOREOPTDLG_DONTPOPDLG_INV 1120 #define IDC_MESSAGEDLG_MSGTREE 1121 @@ -152,6 +154,7 @@ #define IDC_MESSAGEDLG_NEWMSG 1123 #define IDC_REPLYDLG_DISABLE_OCC 1123 #define IDC_REPLYDLG_DISABLE_DND 1124 +#define IDC_REPLYDLG_DISABLE_FFC 1125 #define IDC_REPLYDLG_DISABLE_INV 1128 #define IDC_MOREOPTDLG_RECENTMSGSCOUNT 1129 #define IDC_MOREOPTDLG_UPDATEMSGSPERIOD 1130 @@ -162,6 +165,7 @@ #define IDC_MOREOPTDLG_DONTPOPDLG_NA 1135 #define IDC_MOREOPTDLG_DONTPOPDLG_OCC 1136 #define IDC_MOREOPTDLG_DONTPOPDLG_DND 1137 +#define IDC_MOREOPTDLG_DONTPOPDLG_FFC 1138 #define IDC_REPLYDLG_STATIC_TIMES 1141 #define IDC_MESSAGEDLG_TEST 1142 #define IDC_MOREOPTDLG_EDITMESSAGES 1142 @@ -201,7 +205,8 @@ #define IDS_MESSAGEDLG_DEF_NA 20002 #define IDS_MESSAGEDLG_DEF_OCC 20003 #define IDS_MESSAGEDLG_DEF_DND 20004 -#define IDS_MESSAGEDLG_DEF_INV 20005 +#define IDS_MESSAGEDLG_DEF_FFC 20005 +#define IDS_MESSAGEDLG_DEF_INV 20006 #define IDV_MSGTREE 20009 #define IDS_SAWAYMSG_SHOWMSGTREE 20100 #define IDS_SAWAYMSG_SHOWCONTACTTREE 20101 @@ -222,7 +227,8 @@ #define IDR_MSGTREEMENU_DEF_NA 40039 #define IDR_MSGTREEMENU_DEF_OCC 40040 #define IDR_MSGTREEMENU_DEF_DND 40041 -#define IDR_MSGTREEMENU_DEF_INV 40042 +#define IDR_MSGTREEMENU_DEF_FFC 40042 +#define IDR_MSGTREEMENU_DEF_INV 40043 #define IDM_SAM_OPTIONS_DISABLEVARIABLES 40047 #define IDC_READAWAYMSG_MSG 54765 diff --git a/plugins/NewAwaySysMod/src/stdafx.h b/plugins/NewAwaySysMod/src/stdafx.h index d73d285e65..c71216797b 100644 --- a/plugins/NewAwaySysMod/src/stdafx.h +++ b/plugins/NewAwaySysMod/src/stdafx.h @@ -91,6 +91,7 @@ #define SF_NA 0x8 #define SF_OCC 0x10 #define SF_DND 0x20 +#define SF_FFC 0x40 #define SF_INV 0x80 #define SF_OTHER 0x80000000 diff --git a/plugins/NewXstatusNotify/res/resource.rc b/plugins/NewXstatusNotify/res/resource.rc index 2055800986..d4793b9347 100644 --- a/plugins/NewXstatusNotify/res/resource.rc +++ b/plugins/NewXstatusNotify/res/resource.rc @@ -33,6 +33,7 @@ BEGIN CONTROL "Online",IDC_CHK_ONLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,14,89,8 CONTROL "Offline",IDC_CHK_OFFLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,14,87,8 CONTROL "Invisible",IDC_CHK_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,14,94,8 + CONTROL "Free for chat",IDC_CHK_FREECHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,25,89,8 CONTROL "Away",IDC_CHK_AWAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,103,25,87,8 CONTROL "Not available",IDC_CHK_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,196,25,94,8 CONTROL "Occupied",IDC_CHK_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,36,89,8 @@ -124,9 +125,12 @@ BEGIN LTEXT "Do not disturb",IDC_STATIC,10,103,56,8 CONTROL "",IDC_DND_BG,"ColourPicker",WS_TABSTOP,73,101,24,12 CONTROL "",IDC_DND_TX,"ColourPicker",WS_TABSTOP,106,101,24,12 - LTEXT "Invisible",IDC_STATIC,10,118,56,8 - CONTROL "",IDC_INVISIBLE_BG,"ColourPicker",WS_TABSTOP,73,116,24,12 - CONTROL "",IDC_INVISIBLE_TX,"ColourPicker",WS_TABSTOP,106,116,24,12 + LTEXT "Free for chat",IDC_STATIC,10,118,56,8 + CONTROL "",IDC_FREEFORCHAT_BG,"ColourPicker",WS_TABSTOP,73,116,24,12 + CONTROL "",IDC_FREEFORCHAT_TX,"ColourPicker",WS_TABSTOP,106,116,24,12 + CONTROL "",IDC_INVISIBLE_BG,"ColourPicker",WS_TABSTOP,73,131,24,12 + CONTROL "",IDC_INVISIBLE_TX,"ColourPicker",WS_TABSTOP,106,131,24,12 + LTEXT "Invisible",IDC_STATIC,10,133,56,8 LTEXT "Extra status",IDC_STATIC,10,178,56,8 CONTROL "",IDC_XSTATUS_TX,"ColourPicker",WS_TABSTOP,106,176,24,12 CONTROL "",IDC_XSTATUS_BG,"ColourPicker",WS_TABSTOP,73,176,24,12 @@ -206,15 +210,17 @@ BEGIN LTEXT "Disable when my status is:",IDC_STATIC,15,37,116,8 CONTROL "Online",IDC_CHK_ONLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,49,116,10 CONTROL "Invisible",IDC_CHK_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,59,116,10 - CONTROL "Away",IDC_CHK_AWAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,69,116,10 - CONTROL "Not available",IDC_CHK_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,79,116,10 - CONTROL "Occupied",IDC_CHK_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,89,116,10 - CONTROL "Do not disturb",IDC_CHK_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,99,116,10 + CONTROL "Free for chat",IDC_CHK_FREECHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,69,116,10 + CONTROL "Away",IDC_CHK_AWAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,79,116,10 + CONTROL "Not available",IDC_CHK_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,89,116,10 + CONTROL "Occupied",IDC_CHK_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,99,116,10 + CONTROL "Do not disturb",IDC_CHK_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,109,116,10 GROUPBOX "Sounds",IDC_STATIC,147,8,132,136 CONTROL "Disable globally",IDC_CHK_SGLOBAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,20,116,10 LTEXT "Disable when my status is:",IDC_STATIC,157,36,116,8 CONTROL "Online",IDC_CHK_ONLINE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,50,116,10 CONTROL "Invisible",IDC_CHK_INVISIBLE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,60,116,10 + CONTROL "Free for chat",IDC_CHK_FREECHAT2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,70,116,10 CONTROL "Away",IDC_CHK_AWAY2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,80,116,10 CONTROL "Not available",IDC_CHK_NA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,90,116,10 CONTROL "Occupied",IDC_CHK_OCCUPIED2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,157,100,116,10 diff --git a/plugins/NewXstatusNotify/src/indsnd.cpp b/plugins/NewXstatusNotify/src/indsnd.cpp index 65224d27af..ba3d8cedc7 100644 --- a/plugins/NewXstatusNotify/src/indsnd.cpp +++ b/plugins/NewXstatusNotify/src/indsnd.cpp @@ -137,7 +137,7 @@ INT_PTR CALLBACK DlgProcSoundUIPage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA for (int i = ID_STATUS_MAX; i >= ID_STATUS_MIN; i--) { int flags = CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_2, 0); if (flags == 0) - flags = PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + flags = PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; if ((flags & Proto_Status2Flag(i)) || i == ID_STATUS_OFFLINE) { LV_ITEM lvi = { 0 }; diff --git a/plugins/NewXstatusNotify/src/main.cpp b/plugins/NewXstatusNotify/src/main.cpp index a1a1187bdb..c79d025169 100644 --- a/plugins/NewXstatusNotify/src/main.cpp +++ b/plugins/NewXstatusNotify/src/main.cpp @@ -880,6 +880,18 @@ void InitStatusList() mir_wstrncpy(StatusList[index].lpzSkinSoundFile, L"invisible.wav", MAX_PATH); StatusList[index].colorBack = g_plugin.getDword("40078bg", COLOR_BG_AVAILDEFAULT); StatusList[index].colorText = g_plugin.getDword("40078tx", COLOR_TX_DEFAULT); + + //Free for chat + index = Index(ID_STATUS_FREECHAT); + mir_wstrncpy(StatusList[index].lpzMStatusText, TranslateT("(M) feels talkative!"), MAX_STATUSTEXT); + mir_wstrncpy(StatusList[index].lpzFStatusText, TranslateT("(F) feels talkative!"), MAX_STATUSTEXT); + mir_wstrncpy(StatusList[index].lpzUStatusText, TranslateT("(U) feels talkative!"), MAX_STATUSTEXT); + mir_wstrncpy(StatusList[index].lpzStandardText, TranslateT("Free for chat"), MAX_STANDARDTEXT); + mir_strncpy(StatusList[index].lpzSkinSoundName, "UserFreeForChat", MAX_SKINSOUNDNAME); + mir_wstrncpy(StatusList[index].lpzSkinSoundDesc, LPGENW("User: Free for chat"), MAX_SKINSOUNDDESC); + mir_wstrncpy(StatusList[index].lpzSkinSoundFile, L"free4chat.wav", MAX_PATH); + StatusList[index].colorBack = g_plugin.getDword("40077bg", COLOR_BG_AVAILDEFAULT); + StatusList[index].colorText = g_plugin.getDword("40077tx", COLOR_TX_DEFAULT); //Away index = Index(ID_STATUS_AWAY); diff --git a/plugins/NewXstatusNotify/src/resource.h b/plugins/NewXstatusNotify/src/resource.h index 8a89753da3..a9c756c42e 100644 --- a/plugins/NewXstatusNotify/src/resource.h +++ b/plugins/NewXstatusNotify/src/resource.h @@ -146,7 +146,8 @@ #define IDC_CHK_DND 40074 #define IDC_CHK_NA 40075 #define IDC_CHK_OCCUPIED 40076 -#define IDC_CHK_INVISIBLE 40077 +#define IDC_CHK_FREECHAT 40077 +#define IDC_CHK_INVISIBLE 40078 #define IDC_CHK_XSTATUS 40081 #define IDC_CHK_STATUS_MESSAGE 40082 #define IDC_CHK_FROMOFFLINE 40083 @@ -156,6 +157,7 @@ #define IDC_DND_TX 41074 #define IDC_NA_TX 41075 #define IDC_OCCUPIED_TX 41076 +#define IDC_FREEFORCHAT_TX 41077 #define IDC_INVISIBLE_TX 41078 #define IDC_XSTATUS_TX 41081 #define IDC_STATUSMSG_TX 41082 @@ -170,10 +172,12 @@ #define IDC_CHK_NA2 42075 #define IDC_OCCUPIED_BG 42076 #define IDC_CHK_OCCUPIED2 42076 -#define IDC_INVISIBLE_BG 42077 -#define IDC_CHK_INVISIBLE2 42077 -#define IDC_XSTATUS_BG 42078 -#define IDC_STATUSMSG_BG 42079 +#define IDC_FREEFORCHAT_BG 42077 +#define IDC_CHK_FREECHAT2 42077 +#define IDC_INVISIBLE_BG 42078 +#define IDC_CHK_INVISIBLE2 42078 +#define IDC_XSTATUS_BG 42079 +#define IDC_STATUSMSG_BG 42080 // Next default values for new objects // diff --git a/plugins/NewXstatusNotify/src/utils.cpp b/plugins/NewXstatusNotify/src/utils.cpp index 2133bcda7e..cce0b55f51 100644 --- a/plugins/NewXstatusNotify/src/utils.cpp +++ b/plugins/NewXstatusNotify/src/utils.cpp @@ -66,6 +66,7 @@ BOOL StatusHasAwayMessage(char *szProto, int status) case ID_STATUS_NA: case ID_STATUS_OCCUPIED: case ID_STATUS_DND: + case ID_STATUS_FREECHAT: return TRUE; default: diff --git a/plugins/NotifyAnything/src/main.cpp b/plugins/NotifyAnything/src/main.cpp index 231751a9f8..c47d8fb24d 100644 --- a/plugins/NotifyAnything/src/main.cpp +++ b/plugins/NotifyAnything/src/main.cpp @@ -166,6 +166,7 @@ HICON getIcon(const std::wstring &name) icons[L"away"] = Skin_LoadIcon(SKINICON_STATUS_AWAY); icons[L"na"] = Skin_LoadIcon(SKINICON_STATUS_NA); icons[L"occupied"] = Skin_LoadIcon(SKINICON_STATUS_OCCUPIED); + icons[L"free4chat"] = Skin_LoadIcon(SKINICON_STATUS_FREE4CHAT); icons[L"dnd"] = Skin_LoadIcon(SKINICON_STATUS_DND); icons[L"invisible"] = Skin_LoadIcon(SKINICON_STATUS_INVISIBLE); diff --git a/plugins/Nudge/res/resource.rc b/plugins/Nudge/res/resource.rc index 94c3fbc250..071d5b48f3 100644 --- a/plugins/Nudge/res/resource.rc +++ b/plugins/Nudge/res/resource.rc @@ -91,7 +91,8 @@ BEGIN CONTROL "Not available",IDC_CHECKST3,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,18,177,58,9 CONTROL "Occupied",IDC_CHECKST4,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,18,187,58,9 CONTROL "Do not disturb",IDC_CHECKST5,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,84,147,72,9 - CONTROL "Invisible",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,84,157,72,9 + CONTROL "Free for chat",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,84,157,72,9 + CONTROL "Invisible",IDC_CHECKST7,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,84,167,72,9 END IDD_OPT_SHAKE DIALOGEX 0, 0, 309, 184 diff --git a/plugins/Nudge/src/main.cpp b/plugins/Nudge/src/main.cpp index de3edb2e3d..d3febef813 100644 --- a/plugins/Nudge/src/main.cpp +++ b/plugins/Nudge/src/main.cpp @@ -121,7 +121,8 @@ static int NudgeReceived(WPARAM hContact, LPARAM lParam) ((p->statusFlags & NUDGE_ACC_ST3) && (Status == ID_STATUS_DND)) || ((p->statusFlags & NUDGE_ACC_ST4) && (Status == ID_STATUS_NA)) || ((p->statusFlags & NUDGE_ACC_ST5) && (Status == ID_STATUS_OCCUPIED)) || - ((p->statusFlags & NUDGE_ACC_ST6) && (Status == ID_STATUS_INVISIBLE))) + ((p->statusFlags & NUDGE_ACC_ST6) && (Status == ID_STATUS_FREECHAT)) || + ((p->statusFlags & NUDGE_ACC_ST7) && (Status == ID_STATUS_INVISIBLE))) { if (diff >= GlobalNudge.recvTimeSec) { if (p->showPopup) @@ -161,6 +162,7 @@ static int NudgeReceived(WPARAM hContact, LPARAM lParam) ((DefaultNudge.statusFlags & NUDGE_ACC_ST3) && (Status == ID_STATUS_DND)) || ((DefaultNudge.statusFlags & NUDGE_ACC_ST4) && (Status == ID_STATUS_NA)) || ((DefaultNudge.statusFlags & NUDGE_ACC_ST5) && (Status == ID_STATUS_OCCUPIED)) || + ((DefaultNudge.statusFlags & NUDGE_ACC_ST6) && (Status == ID_STATUS_FREECHAT)) || ((DefaultNudge.statusFlags & NUDGE_ACC_ST6) && (Status == ID_STATUS_INVISIBLE))) { if (diff >= GlobalNudge.recvTimeSec) { diff --git a/plugins/Nudge/src/nudge.h b/plugins/Nudge/src/nudge.h index 792a98444d..8b48a3ccf8 100644 --- a/plugins/Nudge/src/nudge.h +++ b/plugins/Nudge/src/nudge.h @@ -10,7 +10,8 @@ #define NUDGE_ACC_ST3 0x00000008 //Check (countdown) when Not available #define NUDGE_ACC_ST4 0x00000010 //Check (countdown) when Occupied #define NUDGE_ACC_ST5 0x00000020 //Check (countdown) when DND -#define NUDGE_ACC_ST6 0x00000040 //Check (countdown) when Invisible +#define NUDGE_ACC_ST6 0x00000040 //Check (countdown) when Free for chat +#define NUDGE_ACC_ST7 0x00000080 //Check (countdown) when Invisible #define TEXT_LEN 1024 diff --git a/plugins/Nudge/src/options.cpp b/plugins/Nudge/src/options.cpp index 4c88ba1d50..fada736a01 100644 --- a/plugins/Nudge/src/options.cpp +++ b/plugins/Nudge/src/options.cpp @@ -49,6 +49,7 @@ static void UpdateControls(HWND hwnd) CheckDlgButton(hwnd, IDC_CHECKST4, ActualNudge->statusFlags & NUDGE_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHECKST5, ActualNudge->statusFlags & NUDGE_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwnd, IDC_CHECKST6, ActualNudge->statusFlags & NUDGE_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd, IDC_CHECKST7, ActualNudge->statusFlags & NUDGE_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED); SetDlgItemText(hwnd, IDC_SENDTEXT, ActualNudge->senText); SetDlgItemText(hwnd, IDC_RECVTEXT, ActualNudge->recText); } @@ -266,6 +267,7 @@ static INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd, UINT msg, WPARAM wParam, LPAR case IDC_CHECKST4: case IDC_CHECKST5: case IDC_CHECKST6: + case IDC_CHECKST7: case IDC_CHECKPOP: case IDC_OPENMESSAGE: case IDC_CHECKCLIST: @@ -315,7 +317,8 @@ static INT_PTR CALLBACK DlgProcNudgeOpt(HWND hwnd, UINT msg, WPARAM wParam, LPAR ((IsDlgButtonChecked(hwnd, IDC_CHECKST3) == BST_CHECKED) ? NUDGE_ACC_ST3 : 0) | ((IsDlgButtonChecked(hwnd, IDC_CHECKST4) == BST_CHECKED) ? NUDGE_ACC_ST4 : 0) | ((IsDlgButtonChecked(hwnd, IDC_CHECKST5) == BST_CHECKED) ? NUDGE_ACC_ST5 : 0) | - ((IsDlgButtonChecked(hwnd, IDC_CHECKST6) == BST_CHECKED) ? NUDGE_ACC_ST6 : 0); + ((IsDlgButtonChecked(hwnd, IDC_CHECKST6) == BST_CHECKED) ? NUDGE_ACC_ST6 : 0) | + ((IsDlgButtonChecked(hwnd, IDC_CHECKST7) == BST_CHECKED) ? NUDGE_ACC_ST7 : 0); GetDlgItemText(hwnd, IDC_SENDTEXT, ActualNudge->senText, TEXT_LEN); GetDlgItemText(hwnd, IDC_RECVTEXT, ActualNudge->recText, TEXT_LEN); diff --git a/plugins/Nudge/src/resource.h b/plugins/Nudge/src/resource.h index e6ef117378..34b0d091fd 100644 --- a/plugins/Nudge/src/resource.h +++ b/plugins/Nudge/src/resource.h @@ -48,6 +48,7 @@ #define IDC_CHECKST4 1023 #define IDC_CHECKST5 1024 #define IDC_CHECKST6 1025 +#define IDC_CHECKST7 1026 #define IDC_POPUPTEXTCOLOR 1027 #define IDC_BGCOLOUR 1030 #define IDC_PROTOLIST 1031 diff --git a/plugins/Popup/res/resource.rc b/plugins/Popup/res/resource.rc index 8f211e2d4a..4a435e304a 100644 --- a/plugins/Popup/res/resource.rc +++ b/plugins/Popup/res/resource.rc @@ -231,6 +231,7 @@ BEGIN CONTROL "",IDC_SNA,"MButtonClass",WS_TABSTOP,180,120,15,14 CONTROL "",IDC_SOCCUPIED,"MButtonClass",WS_TABSTOP,196,120,15,14 CONTROL "",IDC_SDND,"MButtonClass",WS_TABSTOP,212,120,15,14 + CONTROL "",IDC_SFREE4CHAT,"MButtonClass",WS_TABSTOP,228,120,15,14 CONTROL "",IDC_SINVISIBLE,"MButtonClass",WS_TABSTOP,244,120,15,14 LTEXT "Disable when relevant protocol's status is...",IDC_TXT_TITLE4,112,138,180,8 CONTROL "",IDC_SOFFLINE2,"MButtonClass",WS_TABSTOP,132,151,15,14 @@ -239,6 +240,7 @@ BEGIN CONTROL "",IDC_SNA2,"MButtonClass",WS_TABSTOP,180,151,15,14 CONTROL "",IDC_SOCCUPIED2,"MButtonClass",WS_TABSTOP,196,151,15,14 CONTROL "",IDC_SDND2,"MButtonClass",WS_TABSTOP,212,151,15,14 + CONTROL "",IDC_SFREE4CHAT2,"MButtonClass",WS_TABSTOP,228,151,15,14 CONTROL "",IDC_SINVISIBLE2,"MButtonClass",WS_TABSTOP,244,151,15,14 ICON IDI_MB_INFO,IDC_ICO_INFO,112,170,20,20,SS_CENTERIMAGE | SS_REALSIZEIMAGE LTEXT "Colors can be configured in\r\nCustomize -> Fonts and colors",IDC_TXT_COLORS,132,171,108,24 diff --git a/plugins/Popup/src/opt_class.cpp b/plugins/Popup/src/opt_class.cpp index 3bcb6c722e..5297481083 100644 --- a/plugins/Popup/src/opt_class.cpp +++ b/plugins/Popup/src/opt_class.cpp @@ -71,6 +71,7 @@ static ctrlsAll[] = { { IDC_SNA, 0, 1, 0 }, { IDC_SOCCUPIED, 0, 1, 0 }, { IDC_SDND, 0, 1, 0 }, + { IDC_SFREE4CHAT, 0, 1, 0 }, { IDC_SINVISIBLE, 0, 1, 0 }, { IDC_TXT_TITLE4, 0, 0, 0 }, @@ -80,6 +81,7 @@ static ctrlsAll[] = { { IDC_SNA2, 0, 0, 0 }, { IDC_SOCCUPIED2, 0, 0, 0 }, { IDC_SDND2, 0, 0, 0 }, + { IDC_SFREE4CHAT2, 0, 0, 0 }, { IDC_SINVISIBLE2, 0, 0, 0 }, { IDC_ICO_INFO, 0, 1, 1 }, @@ -108,16 +110,16 @@ static UINT ctrlsEnable[] = { IDC_ICO_INFO, IDC_TXT_COLORS, IDC_MORE, IDC_SOFFLINE, IDC_SONLINE, IDC_SAWAY, IDC_SNA, - IDC_SOCCUPIED, IDC_SDND, IDC_SINVISIBLE, + IDC_SOCCUPIED, IDC_SDND, IDC_SFREE4CHAT, IDC_SINVISIBLE, IDC_SOFFLINE2, IDC_SONLINE2, IDC_SAWAY2, IDC_SNA2, - IDC_SOCCUPIED2, IDC_SDND2, IDC_SINVISIBLE2, + IDC_SOCCUPIED2, IDC_SDND2, IDC_SFREE4CHAT2, IDC_SINVISIBLE2, }; static UINT ctrlsContact[] = { IDC_TXT_TITLE4, IDC_SOFFLINE2, IDC_SONLINE2, IDC_SAWAY2, IDC_SNA2, - IDC_SOCCUPIED2, IDC_SDND2, IDC_SINVISIBLE2, + IDC_SOCCUPIED2, IDC_SDND2, IDC_SFREE4CHAT2, IDC_SINVISIBLE2, }; static int titleIds[] = { @@ -140,6 +142,7 @@ static statusButtons[] = { { IDC_SNA, SKINICON_STATUS_NA, "Not available", PF2_LONGAWAY, PF2_LONGAWAY }, { IDC_SOCCUPIED, SKINICON_STATUS_OCCUPIED, "Occupied", PF2_LIGHTDND, PF2_LIGHTDND }, { IDC_SDND, SKINICON_STATUS_DND, "Do not disturb", PF2_HEAVYDND, PF2_HEAVYDND }, + { IDC_SFREE4CHAT, SKINICON_STATUS_FREE4CHAT, "Free for chat", PF2_FREECHAT, PF2_FREECHAT }, { IDC_SINVISIBLE, SKINICON_STATUS_INVISIBLE, "Invisible", PF2_INVISIBLE, PF2_INVISIBLE }, { IDC_SOFFLINE2, SKINICON_STATUS_OFFLINE, "Offline", PF2_IDLE, PF2_IDLE << 16 }, @@ -148,6 +151,7 @@ static statusButtons[] = { { IDC_SNA2, SKINICON_STATUS_NA, "Not available", PF2_LONGAWAY, PF2_LONGAWAY << 16 }, { IDC_SOCCUPIED2, SKINICON_STATUS_OCCUPIED, "Occupied", PF2_LIGHTDND, PF2_LIGHTDND << 16 }, { IDC_SDND2, SKINICON_STATUS_DND, "Do not disturb", PF2_HEAVYDND, PF2_HEAVYDND << 16 }, + { IDC_SFREE4CHAT2, SKINICON_STATUS_FREE4CHAT, "Free for chat", PF2_FREECHAT, PF2_FREECHAT << 16 }, { IDC_SINVISIBLE2, SKINICON_STATUS_INVISIBLE, "Invisible", PF2_INVISIBLE, PF2_INVISIBLE << 16 }, }; @@ -357,9 +361,9 @@ INT_PTR CALLBACK DlgProcOptsClasses(HWND hwnd, UINT msg, WPARAM wParam, LPARAM l break; case IDC_SOFFLINE: case IDC_SONLINE: case IDC_SAWAY: case IDC_SNA: case IDC_SOCCUPIED: - case IDC_SDND: case IDC_SINVISIBLE: + case IDC_SDND: case IDC_SFREE4CHAT: case IDC_SINVISIBLE: case IDC_SOFFLINE2: case IDC_SONLINE2: case IDC_SAWAY2: case IDC_SNA2: case IDC_SOCCUPIED2: - case IDC_SDND2: case IDC_SINVISIBLE2: + case IDC_SDND2: case IDC_SFREE4CHAT2: case IDC_SINVISIBLE2: ptd->disableWhen = 0; for (auto &it : statusButtons) { if (IsDlgButtonChecked(hwnd, it.idCtrl)) diff --git a/plugins/Popup/src/opt_gen.cpp b/plugins/Popup/src/opt_gen.cpp index 1938b05e6e..c5e3a31340 100644 --- a/plugins/Popup/src/opt_gen.cpp +++ b/plugins/Popup/src/opt_gen.cpp @@ -35,6 +35,7 @@ static int CountStatusModes(DWORD flags) if (flags & PF2_LONGAWAY) ++res; if (flags & PF2_LIGHTDND) ++res; if (flags & PF2_HEAVYDND) ++res; + if (flags & PF2_FREECHAT) ++res; if (res) ++res; // Offline return res; } @@ -59,6 +60,7 @@ int AddStatusMode(OPTTREE_OPTION *options, int pos, LPTSTR prefix, DWORD flag) case PF2_LONGAWAY: mir_wstrcat(options[pos].pszOptionName, LPGENW("Not available")); break; case PF2_LIGHTDND: mir_wstrcat(options[pos].pszOptionName, LPGENW("Occupied")); break; case PF2_HEAVYDND: mir_wstrcat(options[pos].pszOptionName, LPGENW("Do not disturb")); break; + case PF2_FREECHAT: mir_wstrcat(options[pos].pszOptionName, LPGENW("Free for chat")); break; } return pos + 1; } @@ -72,6 +74,7 @@ int AddStatusModes(OPTTREE_OPTION *options, int pos, LPTSTR prefix, DWORD flags) pos = AddStatusMode(options, pos, prefix, flags & PF2_LONGAWAY); pos = AddStatusMode(options, pos, prefix, flags & PF2_LIGHTDND); pos = AddStatusMode(options, pos, prefix, flags & PF2_HEAVYDND); + pos = AddStatusMode(options, pos, prefix, flags & PF2_FREECHAT); return pos; } diff --git a/plugins/Popup/src/resource.h b/plugins/Popup/src/resource.h index 8146f57751..58014debaa 100644 --- a/plugins/Popup/src/resource.h +++ b/plugins/Popup/src/resource.h @@ -76,6 +76,7 @@ #define IDC_SNA 1102 #define IDC_SOCCUPIED 1103 #define IDC_SDND 1104 +#define IDC_SFREE4CHAT 1105 #define IDC_SINVISIBLE 1106 #define IDC_TIMEOUT 1110 #define IDC_SOFFLINE2 1111 @@ -90,6 +91,7 @@ #define IDC_TXT_TIMEOUT_SEC 1122 #define IDC_PREVIEWBOX 1123 #define IDC_TXT_TIMEOUT_INFINITE 1124 +#define IDC_SFREE4CHAT2 1125 #define IDC_TXT_TIMEOUT_DEFAULT 1126 #define IDC_POPUP_LIST 1134 #define IDC_SHOWHISTORY 1135 diff --git a/plugins/Scriver/src/msgoptions.cpp b/plugins/Scriver/src/msgoptions.cpp index cbf965d353..cd4a247429 100644 --- a/plugins/Scriver/src/msgoptions.cpp +++ b/plugins/Scriver/src/msgoptions.cpp @@ -215,6 +215,7 @@ static const struct CheckBoxValues_t statusValues[] = { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") } }; diff --git a/plugins/Scriver/src/msgs.cpp b/plugins/Scriver/src/msgs.cpp index 98f80447fc..468894c6eb 100644 --- a/plugins/Scriver/src/msgs.cpp +++ b/plugins/Scriver/src/msgs.cpp @@ -44,6 +44,8 @@ static int SRMMStatusToPf2(int status) return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; + case ID_STATUS_FREECHAT: + return PF2_FREECHAT; case ID_STATUS_INVISIBLE: return PF2_INVISIBLE; case ID_STATUS_OFFLINE: diff --git a/plugins/SeenPlugin/res/resource.rc b/plugins/SeenPlugin/res/resource.rc index abfd36e220..1446a3e89f 100644 --- a/plugins/SeenPlugin/res/resource.rc +++ b/plugins/SeenPlugin/res/resource.rc @@ -103,6 +103,9 @@ BEGIN RTEXT "Do not disturb",IDC_STATIC,10,163,60,10 CONTROL "",ID_STATUS_DND,"ColourPicker",WS_TABSTOP,80,160,20,14 CONTROL "",40094,"ColourPicker",WS_TABSTOP,105,160,20,14 + RTEXT "Free for chat",IDC_STATIC,140,123,60,10 + CONTROL "",ID_STATUS_FREECHAT,"ColourPicker",WS_TABSTOP,210,120,20,14 + CONTROL "",40097,"ColourPicker",WS_TABSTOP,235,120,20,14 RTEXT "Invisible",IDC_STATIC,140,143,60,10 CONTROL "",ID_STATUS_INVISIBLE,"ColourPicker",WS_TABSTOP,210,140,20,14 CONTROL "",40098,"ColourPicker",WS_TABSTOP,235,140,20,14 diff --git a/plugins/SeenPlugin/src/utils.cpp b/plugins/SeenPlugin/src/utils.cpp index a5ccd6ef54..59e62d1c71 100644 --- a/plugins/SeenPlugin/src/utils.cpp +++ b/plugins/SeenPlugin/src/utils.cpp @@ -426,7 +426,8 @@ DWORD StatusColors15bits[] = { 0x295C0000, // 0x005050E0, 0x00000000, DND - DarkRed 0x5EFD0000, // 0x00B8B8E8, 0x00000000, Not available - LightRed 0x295C0000, // 0x005050E0, 0x00000000, Occupied - 0x76AF0000 // 0x00E8A878, 0x00000000, Invisible + 0x43900000, // 0x0080E080, 0x00000000, Free for chat - LightGreen + 0x76AF0000, // 0x00E8A878, 0x00000000, Invisible }; DWORD GetDWordFromColors(COLORREF First, COLORREF Second) @@ -498,7 +499,7 @@ void myPlaySound(MCONTACT hcontact, WORD newStatus, WORD oldStatus) if (CallService(MS_IGNORE_ISIGNORED, (WPARAM)hcontact, IGNOREEVENT_USERONLINE)) return; //oldStatus and hcontact are not used yet char *soundname = nullptr; - if (newStatus == ID_STATUS_ONLINE) soundname = "LastSeenTrackedStatusOnline"; + if ((newStatus == ID_STATUS_ONLINE) || (newStatus == ID_STATUS_FREECHAT)) soundname = "LastSeenTrackedStatusOnline"; else if (newStatus == ID_STATUS_OFFLINE) soundname = "LastSeenTrackedStatusOffline"; else if (oldStatus == ID_STATUS_OFFLINE) soundname = "LastSeenTrackedStatusFromOffline"; else soundname = "LastSeenTrackedStatusChange"; diff --git a/plugins/SimpleAR/src/Main.cpp b/plugins/SimpleAR/src/Main.cpp index d3c87a0104..d189657681 100644 --- a/plugins/SimpleAR/src/Main.cpp +++ b/plugins/SimpleAR/src/Main.cpp @@ -98,7 +98,7 @@ INT CheckDefaults(WPARAM, LPARAM) mir_free(ptszVal); for (int c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) { - if (c == ID_STATUS_ONLINE || c == ID_STATUS_INVISIBLE) + if (c == ID_STATUS_ONLINE || c == ID_STATUS_FREECHAT || c == ID_STATUS_INVISIBLE) continue; else { char szStatus[6] = { 0 }; @@ -106,7 +106,7 @@ INT CheckDefaults(WPARAM, LPARAM) ptszVal = g_plugin.getWStringA(szStatus); if (ptszVal == nullptr) { wchar_t *ptszDefault; - if (c < ID_STATUS_OCCUPIED) + if (c < ID_STATUS_FREECHAT) // This mode does not have a preset message ptszDefault = ptszDefaultMsg[c - ID_STATUS_ONLINE - 1]; else @@ -131,11 +131,11 @@ INT addEvent(WPARAM hContact, LPARAM hDBEvent) { BOOL fEnabled = g_plugin.getByte(KEY_ENABLED, 1); if (!fEnabled || !hContact || !hDBEvent) - return FALSE; /// unspecifyed error + return FALSE; /// unspecified error char *pszProto = GetContactProto(hContact); int status = Proto_GetStatus(pszProto); - if (status == ID_STATUS_ONLINE || status == ID_STATUS_INVISIBLE) + if (status == ID_STATUS_ONLINE || status == ID_STATUS_FREECHAT || status == ID_STATUS_INVISIBLE) return FALSE; // detect size of msg diff --git a/plugins/SimpleAR/src/Options.cpp b/plugins/SimpleAR/src/Options.cpp index 391020267b..9ffef53047 100644 --- a/plugins/SimpleAR/src/Options.cpp +++ b/plugins/SimpleAR/src/Options.cpp @@ -23,13 +23,13 @@ INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara for (INT c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) { mir_snprintf(tszStatus, "%d", c); wchar_t *pszStatus = Clist_GetStatusModeDescription(c, 0); - if (c == ID_STATUS_ONLINE || c == ID_STATUS_INVISIBLE) + if (c == ID_STATUS_ONLINE || c == ID_STATUS_FREECHAT || c == ID_STATUS_INVISIBLE) continue; else { SendDlgItemMessage(hwndDlg, IDC_STATUSMODE, CB_ADDSTRING, 0, (LPARAM)pszStatus); if (!g_plugin.getWString(tszStatus, &dbv)) { - if (c < ID_STATUS_OCCUPIED) + if (c < ID_STATUS_FREECHAT) ptszMessage[c - ID_STATUS_ONLINE - 1] = wcsdup(dbv.pwszVal); else if (c > ID_STATUS_INVISIBLE) ptszMessage[c - ID_STATUS_ONLINE - 3] = wcsdup(dbv.pwszVal); @@ -99,13 +99,13 @@ INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara GetDlgItemText(hwndDlg, IDC_MESSAGE, ptszMessage[lastIndex], size); for (int c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) { - if (c == ID_STATUS_ONLINE || c == ID_STATUS_INVISIBLE) + if (c == ID_STATUS_ONLINE || c == ID_STATUS_FREECHAT || c == ID_STATUS_INVISIBLE) continue; else { char szStatus[6] = { 0 }; mir_snprintf(szStatus, "%d", c); - if (c < ID_STATUS_OCCUPIED && ptszMessage[c - ID_STATUS_ONLINE - 1]) + if (c < ID_STATUS_FREECHAT && ptszMessage[c - ID_STATUS_ONLINE - 1]) g_plugin.setWString(szStatus, ptszMessage[c - ID_STATUS_ONLINE - 1]); else if (c > ID_STATUS_INVISIBLE && ptszMessage[c - ID_STATUS_ONLINE - 3]) g_plugin.setWString(szStatus, ptszMessage[c - ID_STATUS_ONLINE - 3]); @@ -119,10 +119,10 @@ INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPara case WM_DESTROY: for (int c = ID_STATUS_ONLINE; c < ID_STATUS_IDLE; c++) { - if (c == ID_STATUS_ONLINE || c == ID_STATUS_INVISIBLE) + if (c == ID_STATUS_ONLINE || c == ID_STATUS_FREECHAT || c == ID_STATUS_INVISIBLE) continue; - if (c < ID_STATUS_OCCUPIED) + if (c < ID_STATUS_FREECHAT) ptszMessage[c - ID_STATUS_ONLINE - 1] = nullptr; else if (c > ID_STATUS_INVISIBLE) ptszMessage[c - ID_STATUS_ONLINE - 3] = nullptr; diff --git a/plugins/SimpleStatusMsg/src/main.cpp b/plugins/SimpleStatusMsg/src/main.cpp index ca42180c0f..96ea1e0525 100644 --- a/plugins/SimpleStatusMsg/src/main.cpp +++ b/plugins/SimpleStatusMsg/src/main.cpp @@ -492,7 +492,8 @@ int CheckProtoSettings(const char *szProto, int iInitialStatus) case 2: return ID_STATUS_AWAY; case 3: return ID_STATUS_NA; case 4: return ID_STATUS_DND; - case 5: return ID_STATUS_INVISIBLE; + case 5: return ID_STATUS_FREECHAT; + case 6: return ID_STATUS_INVISIBLE; default: return iInitialStatus; } } @@ -1352,7 +1353,7 @@ static int OnIdleChanged(WPARAM, LPARAM lParam) // we're entering idle if (lParam & IDF_ISIDLE) { - if (!db_get_b(0, "AutoAway", pa->szModuleName, 0) && iCurrentStatus != ID_STATUS_ONLINE) + if (!db_get_b(0, "AutoAway", pa->szModuleName, 0) && iCurrentStatus != ID_STATUS_ONLINE && iCurrentStatus != ID_STATUS_FREECHAT) return 0; } else { diff --git a/plugins/SimpleStatusMsg/src/utils.cpp b/plugins/SimpleStatusMsg/src/utils.cpp index 3fd0d1b8d2..b516a2a71d 100644 --- a/plugins/SimpleStatusMsg/src/utils.cpp +++ b/plugins/SimpleStatusMsg/src/utils.cpp @@ -79,6 +79,7 @@ const wchar_t *GetDefaultMessage(int status) case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!"); case ID_STATUS_OCCUPIED: return TranslateT("Not right now."); case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?"); + case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!"); case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here."); case ID_STATUS_OFFLINE: return TranslateT("Nope, not here."); case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia."); @@ -97,6 +98,7 @@ const char *StatusModeToDbSetting(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; diff --git a/plugins/SkypeStatusChange/src/main.cpp b/plugins/SkypeStatusChange/src/main.cpp index 61a529e27b..01ae8cf5f4 100644 --- a/plugins/SkypeStatusChange/src/main.cpp +++ b/plugins/SkypeStatusChange/src/main.cpp @@ -58,9 +58,10 @@ const CMirandaStatus2SkypeStatus g_aStatusCode[MAX_STATUS_COUNT] = {ID_STATUS_NA, "AWAY",L"Not available"}, // removed in Skype 5 {ID_STATUS_DND, "DND",L"Do not disturb"}, {ID_STATUS_ONLINE, "ONLINE",L"Online"}, + {ID_STATUS_FREECHAT, "ONLINE",L"Free for chat"}, // SKYPEME status doesn't work in Skype 4! {ID_STATUS_OFFLINE, "OFFLINE",L"Offline"}, {ID_STATUS_INVISIBLE, "INVISIBLE",L"Invisible"}, - {ID_STATUS_OCCUPIED,"DND",L"Occupied"}, + {ID_STATUS_OCCUPIED,"DND",L"Occupied"} }; enum { INVALID_INDEX = 0xFFFFFFFF }; diff --git a/plugins/SkypeStatusChange/src/stdafx.h b/plugins/SkypeStatusChange/src/stdafx.h index 20a71727e0..80a056e8ee 100644 --- a/plugins/SkypeStatusChange/src/stdafx.h +++ b/plugins/SkypeStatusChange/src/stdafx.h @@ -33,6 +33,7 @@ class COptions cssLongAway = 0x00000010, cssLightDND = 0x00000020, cssHeavyDND = 0x00000040, + cssFreeChat = 0x00000080, cssIdle = 0x00000400, cssAll = 0x80000000 }; @@ -47,6 +48,7 @@ class COptions case ID_STATUS_NA: return cssLongAway; case ID_STATUS_OCCUPIED: return cssLightDND; case ID_STATUS_DND: return cssHeavyDND; + case ID_STATUS_FREECHAT: return cssFreeChat; case ID_STATUS_IDLE: return cssIdle; } return 0; diff --git a/plugins/StatusChange/res/resource.rc b/plugins/StatusChange/res/resource.rc index dbe60e5071..952d9b5928 100644 --- a/plugins/StatusChange/res/resource.rc +++ b/plugins/StatusChange/res/resource.rc @@ -41,13 +41,15 @@ BEGIN CONTROL "Not available",IDC_RAD_NA,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,60,131,95,10 CONTROL "Occupied",IDC_RAD_OCCUPIED,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,60,141,95,10 CONTROL "Do not disturb",IDC_RAD_DND,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,165,101,95,10 - CONTROL "Invisible",IDC_RAD_INVISIBLE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,165,111,95,10 + CONTROL "Free for chat",IDC_RAD_FREECHAT,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,165,111,95,10 + CONTROL "Invisible",IDC_RAD_INVISIBLE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,165,121,95,10 CONTROL "Offline",IDC_CHK_OFFLINE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,60,178,95,10 CONTROL "Online",IDC_CHK_ONLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,188,95,10 CONTROL "Away",IDC_CHK_AWAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,198,95,10 CONTROL "Not available",IDC_CHK_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,208,95,10 CONTROL "Occupied",IDC_CHK_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,217,95,10 CONTROL "Do not disturb",IDC_CHK_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,178,95,10 + CONTROL "Free for chat",IDC_CHK_FREECHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,188,95,10 CONTROL "Invisible",IDC_CHK_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,198,95,10 GROUPBOX "On events...",-1,45,10,220,73,WS_GROUP CTEXT "Send",-1,149,17,41,9,NOT WS_GROUP diff --git a/plugins/StatusChange/src/main.cpp b/plugins/StatusChange/src/main.cpp index 723cb289c3..cfe19ada93 100644 --- a/plugins/StatusChange/src/main.cpp +++ b/plugins/StatusChange/src/main.cpp @@ -42,6 +42,7 @@ void LoadOptions() Options.IfNA = (BOOL)g_plugin.getByte("IfNA", TRUE); Options.IfOccupied = (BOOL)g_plugin.getByte("IfOccupied", FALSE); Options.IfDND = (BOOL)g_plugin.getByte("IfDND", FALSE); + Options.IfFreeforchat = (BOOL)g_plugin.getByte("IfFreeforchat", FALSE); Options.IfInvisible = (BOOL)g_plugin.getByte("IfInvisible", FALSE); } @@ -66,6 +67,7 @@ static int StatusChangeGetMessage(WPARAM, LPARAM hDbEvent) case ID_STATUS_NA: change_status = Options.IfNA; break; case ID_STATUS_OCCUPIED: change_status = Options.IfOccupied; break; case ID_STATUS_DND: change_status = Options.IfDND; break; + case ID_STATUS_FREECHAT: change_status = Options.IfFreeforchat; break; case ID_STATUS_INVISIBLE: change_status = Options.IfInvisible; break; default: change_status = FALSE; break; } @@ -127,6 +129,7 @@ static INT_PTR CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM w case ID_STATUS_DND: CheckDlgButton(hwndDlg, IDC_RAD_DND, BST_CHECKED); break; case ID_STATUS_NA: CheckDlgButton(hwndDlg, IDC_RAD_NA, BST_CHECKED); break; case ID_STATUS_OCCUPIED: CheckDlgButton(hwndDlg, IDC_RAD_OCCUPIED, BST_CHECKED); break; + case ID_STATUS_FREECHAT: CheckDlgButton(hwndDlg, IDC_RAD_FREECHAT, BST_CHECKED); break; case ID_STATUS_INVISIBLE: CheckDlgButton(hwndDlg, IDC_RAD_INVISIBLE, BST_CHECKED); break; } @@ -136,6 +139,7 @@ static INT_PTR CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM w CheckDlgButton(hwndDlg, IDC_CHK_DND, Options.IfDND ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CHK_NA, Options.IfNA ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CHK_OCCUPIED, Options.IfOccupied ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_CHK_FREECHAT, Options.IfFreeforchat ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CHK_INVISIBLE, Options.IfInvisible ? BST_CHECKED : BST_UNCHECKED); return TRUE; @@ -182,6 +186,10 @@ static INT_PTR CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM w Options.ChangeTo = ID_STATUS_OCCUPIED; PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; + case IDC_RAD_FREECHAT: + Options.ChangeTo = ID_STATUS_FREECHAT; + PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; case IDC_RAD_INVISIBLE: Options.ChangeTo = ID_STATUS_INVISIBLE; PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); @@ -211,6 +219,10 @@ static INT_PTR CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM w Options.IfOccupied = !Options.IfOccupied; PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); break; + case IDC_CHK_FREECHAT: + Options.IfFreeforchat = !Options.IfFreeforchat; + PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; case IDC_CHK_INVISIBLE: Options.IfInvisible = !Options.IfInvisible; PostMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); @@ -238,6 +250,7 @@ static INT_PTR CALLBACK DlgProcStatusChangeOpts(HWND hwndDlg, UINT msg, WPARAM w g_plugin.setByte("IfNA", (BYTE)Options.IfNA); g_plugin.setByte("IfDND", (BYTE)Options.IfDND); g_plugin.setByte("IfOccupied", (BYTE)Options.IfOccupied); + g_plugin.setByte("IfFreeforchat", (BYTE)Options.IfFreeforchat); g_plugin.setByte("IfInvisible", (BYTE)Options.IfInvisible); return TRUE; } diff --git a/plugins/StatusChange/src/resource.h b/plugins/StatusChange/src/resource.h index 1b0a7294da..0c576b576e 100644 --- a/plugins/StatusChange/src/resource.h +++ b/plugins/StatusChange/src/resource.h @@ -9,14 +9,16 @@ #define IDC_CHK_DND 1004 #define IDC_CHK_NA 1005 #define IDC_CHK_OCCUPIED 1006 -#define IDC_CHK_INVISIBLE 1007 +#define IDC_CHK_FREECHAT 1007 +#define IDC_CHK_INVISIBLE 1008 #define IDC_RAD_OFFLINE 2001 #define IDC_RAD_ONLINE 2002 #define IDC_RAD_AWAY 2003 #define IDC_RAD_DND 2004 #define IDC_RAD_NA 2005 #define IDC_RAD_OCCUPIED 2006 -#define IDC_RAD_INVISIBLE 2007 +#define IDC_RAD_FREECHAT 2007 +#define IDC_RAD_INVISIBLE 2008 #define IDC_CHK_MESSAGEREAD 3001 #define IDC_CHK_MESSAGESEND 3002 #define IDC_CHK_FILEREAD 3005 diff --git a/plugins/StatusChange/src/stdafx.h b/plugins/StatusChange/src/stdafx.h index 5424e7de8d..2b0485647d 100644 --- a/plugins/StatusChange/src/stdafx.h +++ b/plugins/StatusChange/src/stdafx.h @@ -38,5 +38,6 @@ struct TOPTIONS BOOL IfNA; BOOL IfOccupied; BOOL IfDND; + BOOL IfFreeforchat; BOOL IfInvisible; }; diff --git a/plugins/StatusManager/src/advancedautoaway.cpp b/plugins/StatusManager/src/advancedautoaway.cpp index 39c6418a99..aa630ccb36 100644 --- a/plugins/StatusManager/src/advancedautoaway.cpp +++ b/plugins/StatusManager/src/advancedautoaway.cpp @@ -439,7 +439,7 @@ int LoadAutoAwaySetting(SMProto &autoAwaySetting, char *protoName) mir_snprintf(setting, "%s_NATime", protoName); autoAwaySetting.naTime = AAAPlugin.getWord(setting, SETTING_NATIME_DEFAULT); mir_snprintf(setting, "%s_StatusFlags", protoName); - autoAwaySetting.statusFlags = AAAPlugin.getWord(setting, StatusModeToProtoFlag(ID_STATUS_ONLINE)); + autoAwaySetting.statusFlags = AAAPlugin.getWord(setting, StatusModeToProtoFlag(ID_STATUS_ONLINE) | StatusModeToProtoFlag(ID_STATUS_FREECHAT)); int flags; if (g_bAAASettingSame) diff --git a/plugins/StatusManager/src/commonstatus.cpp b/plugins/StatusManager/src/commonstatus.cpp index 365ce16081..da4fbf2163 100644 --- a/plugins/StatusManager/src/commonstatus.cpp +++ b/plugins/StatusManager/src/commonstatus.cpp @@ -29,7 +29,8 @@ StatusModeMap statusModes[MAX_STATUS_COUNT] = { ID_STATUS_NA, PF2_LONGAWAY }, { ID_STATUS_OCCUPIED, PF2_LIGHTDND }, { ID_STATUS_DND, PF2_HEAVYDND }, - { ID_STATUS_INVISIBLE, PF2_INVISIBLE }, + { ID_STATUS_FREECHAT, PF2_FREECHAT }, + { ID_STATUS_INVISIBLE, PF2_INVISIBLE } }; // handles for hooks and other Miranda thingies @@ -87,6 +88,7 @@ char* StatusModeToDbSetting(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; @@ -107,6 +109,7 @@ DWORD StatusModeToProtoFlag(int status) case ID_STATUS_NA: return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; case ID_STATUS_DND: return PF2_HEAVYDND; + case ID_STATUS_FREECHAT: return PF2_FREECHAT; } return 0; } diff --git a/plugins/StatusManager/src/ss_options.cpp b/plugins/StatusManager/src/ss_options.cpp index b9b903eaf7..d1e10551c0 100644 --- a/plugins/StatusManager/src/ss_options.cpp +++ b/plugins/StatusManager/src/ss_options.cpp @@ -36,6 +36,7 @@ static char* GetStatusDesc(int status) case ID_STATUS_NA: return "na"; case ID_STATUS_DND: return "dnd"; case ID_STATUS_OCCUPIED: return "occupied"; + case ID_STATUS_FREECHAT: return "freechat"; case ID_STATUS_ONLINE: return "online"; case ID_STATUS_OFFLINE: return "offline"; case ID_STATUS_INVISIBLE: return "invisible"; diff --git a/plugins/StatusManager/src/startupstatus.cpp b/plugins/StatusManager/src/startupstatus.cpp index bbca4a5843..9b586ebece 100644 --- a/plugins/StatusManager/src/startupstatus.cpp +++ b/plugins/StatusManager/src/startupstatus.cpp @@ -54,6 +54,8 @@ static int IsValidStatusDesc(char* statusDesc) return ID_STATUS_DND; if (!strncmp("occupied", statusDesc, 8)) return ID_STATUS_OCCUPIED; + if (!strncmp("freechat", statusDesc, 8)) + return ID_STATUS_FREECHAT; if (!strncmp("online", statusDesc, 6)) return ID_STATUS_ONLINE; if (!strncmp("offline", statusDesc, 7)) diff --git a/plugins/TabSRMM/res/resource.rc b/plugins/TabSRMM/res/resource.rc index 37aaa4797b..7f3e1cb25f 100644 --- a/plugins/TabSRMM/res/resource.rc +++ b/plugins/TabSRMM/res/resource.rc @@ -131,6 +131,7 @@ BEGIN CONTROL "",ID_STATUS_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,84,82,11 CONTROL "",ID_STATUS_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,39,82,11 CONTROL "",ID_STATUS_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,114,54,82,11 + CONTROL "",ID_STATUS_FREECHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,99,82,11 END IDD_MSGCONTAINER DIALOGEX 0, 0, 436, 233 diff --git a/plugins/TabSRMM/src/sendlater.cpp b/plugins/TabSRMM/src/sendlater.cpp index a56b3c20be..892a4c1910 100644 --- a/plugins/TabSRMM/src/sendlater.cpp +++ b/plugins/TabSRMM/src/sendlater.cpp @@ -384,7 +384,7 @@ int CSendLater::sendIt(CSendLaterJob *job) return 0; } if (job->szId[0] == 'S') { - if (wMyStatus != ID_STATUS_ONLINE) { + if (wMyStatus != ID_STATUS_ONLINE || wMyStatus != ID_STATUS_FREECHAT) { job->bCode = CSendLaterJob::JOB_MYSTATUS; return 0; } diff --git a/plugins/Utils.pas/protocols.pas b/plugins/Utils.pas/protocols.pas index 3d039e7511..f805e38824 100644 --- a/plugins/Utils.pas/protocols.pas +++ b/plugins/Utils.pas/protocols.pas @@ -41,6 +41,7 @@ const psf_longaway = $0008; psf_lightdnd = $0010; psf_heavydnd = $0020; + psf_freechat = $0040; psf_enabled = $0800; psf_all = $08FF; // protocol properties @@ -64,10 +65,11 @@ const ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, - ID_STATUS_DND); + ID_STATUS_DND, + ID_STATUS_FREECHAT); const StatNames:array [0..MAX_STATUS_COUNT-1] of PWideChar=( - 'Default'{'Offline'},'Online','Invisible','Away','Not available','Occupied','Do not disturb' + 'Default'{'Offline'},'Online','Invisible','Away','Not available','Occupied','Do not disturb,'Free for chat' ); type @@ -325,6 +327,7 @@ begin if (status and psf_longaway )<>0 then AddString(4,(enabled and psf_longaway )<>0); if (status and psf_lightdnd )<>0 then AddString(5,(enabled and psf_lightdnd )<>0); if (status and psf_heavydnd )<>0 then AddString(6,(enabled and psf_heavydnd )<>0); + if (status and psf_freechat )<>0 then AddString(7,(enabled and psf_freechat )<>0); end; ListView_SetColumnWidth(list,0,LVSCW_AUTOSIZE); end; @@ -342,6 +345,7 @@ procedure CheckStatusList(list:HWND;ProtoNum:uint_ptr); ID_STATUS_NA: i:=psf_longaway; ID_STATUS_OCCUPIED: i:=psf_lightdnd; ID_STATUS_DND: i:=psf_heavydnd; + ID_STATUS_FREECHAT: i:=psf_freechat; else exit; end; @@ -421,6 +425,7 @@ begin if (flag and PF2_LONGAWAY) <>0 then status:=status or psf_longaway; if (flag and PF2_LIGHTDND) <>0 then status:=status or psf_lightdnd; if (flag and PF2_HEAVYDND) <>0 then status:=status or psf_heavydnd; + if (flag and PF2_FREECHAT) <>0 then status:=status or psf_freechat; flag:=CallProtoService(name,PS_GETCAPS,PFLAGNUM_1,0); if ((flag and PF1_CHAT)<>0) or diff --git a/plugins/Watrack/status/i_status.inc b/plugins/Watrack/status/i_status.inc index 1dba7db29d..609dce1b73 100644 --- a/plugins/Watrack/status/i_status.inc +++ b/plugins/Watrack/status/i_status.inc @@ -30,6 +30,7 @@ begin else if status=ID_STATUS_NA then mask:=psf_longaway else if status=ID_STATUS_DND then mask:=psf_heavydnd else if status=ID_STATUS_OCCUPIED then mask:=psf_lightdnd + else if status=ID_STATUS_FREECHAT then mask:=psf_freechat else mask:=0; result:=(protomask and mask)<>0; end; diff --git a/plugins/WinterSpeak/res/Speak.rc b/plugins/WinterSpeak/res/Speak.rc index 0c96a907b4..318ca0dc6b 100644 --- a/plugins/WinterSpeak/res/Speak.rc +++ b/plugins/WinterSpeak/res/Speak.rc @@ -58,6 +58,7 @@ BEGIN CONTROL "Do not disturb",IDC_STATUS_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,52,85,10 CONTROL "Not available",IDC_STATUS_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,63,85,10 CONTROL "Occupied",IDC_STATUS_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,74,85,10 + CONTROL "Free for chat",IDC_STATUS_FREEFORCHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,85,85,10 CONTROL "Invisible",IDC_STATUS_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,96,85,10 GROUPBOX "Occurring Events",IDC_STATIC,7,117,99,74 CONTROL "Incoming message",IDC_EVENT_MESSAGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,131,85,10 @@ -88,6 +89,7 @@ BEGIN CONTROL "Do not disturb",IDC_ACTIVE_DND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,35,75,10 CONTROL "Not available",IDC_ACTIVE_NA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,46,75,10 CONTROL "Occupied",IDC_ACTIVE_OCCUPIED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,57,75,10 + CONTROL "Free for chat",IDC_ACTIVE_FREEFORCHAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,68,75,10 CONTROL "Invisible",IDC_ACTIVE_INVISIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,79,75,10 GROUPBOX "Active Users",IDC_STATIC,95,0,210,240 LTEXT "The following events are being ignored:",IDC_STATIC,100,10,200,8 diff --git a/plugins/WinterSpeak/src/AnnounceDatabase.h b/plugins/WinterSpeak/src/AnnounceDatabase.h index 1d1629851a..06014843ac 100644 --- a/plugins/WinterSpeak/src/AnnounceDatabase.h +++ b/plugins/WinterSpeak/src/AnnounceDatabase.h @@ -14,6 +14,7 @@ class AnnounceDatabase StatusFlag_Dnd, StatusFlag_Na, StatusFlag_Occupied, + StatusFlag_FreeForChat, StatusFlag_Invisible, StatusFlag_SpeakStatusMsg, StatusFlag_SuppressConnect, diff --git a/plugins/WinterSpeak/src/AnnounceDialog.cpp b/plugins/WinterSpeak/src/AnnounceDialog.cpp index 1fd67a492a..eb07e5fa5b 100644 --- a/plugins/WinterSpeak/src/AnnounceDialog.cpp +++ b/plugins/WinterSpeak/src/AnnounceDialog.cpp @@ -60,6 +60,7 @@ void AnnounceDialog::command(HWND window, int control) case IDC_STATUS_DND: case IDC_STATUS_NA: case IDC_STATUS_OCCUPIED: + case IDC_STATUS_FREEFORCHAT: case IDC_STATUS_INVISIBLE: case IDC_SPEAK_STATUS_MSG: case IDC_SUPPRESS_CONNECT: @@ -96,6 +97,7 @@ AnnounceDialog::load(HWND window) CheckDlgButton(window, IDC_STATUS_DND, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Dnd) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_STATUS_NA, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Na) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_STATUS_OCCUPIED, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Occupied) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(window, IDC_STATUS_FREEFORCHAT, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_FreeForChat) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_STATUS_INVISIBLE, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Invisible) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_SPEAK_STATUS_MSG, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_SpeakStatusMsg) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_SUPPRESS_CONNECT, m_db.getStatusFlag(AnnounceDatabase::StatusFlag_SuppressConnect) ? BST_CHECKED : BST_UNCHECKED); @@ -123,6 +125,7 @@ AnnounceDialog::save(HWND window) m_db.setStatusFlag(AnnounceDatabase::StatusFlag_Dnd, (IsDlgButtonChecked(window, IDC_STATUS_DND) != 0)); m_db.setStatusFlag(AnnounceDatabase::StatusFlag_Na, (IsDlgButtonChecked(window, IDC_STATUS_NA) != 0)); m_db.setStatusFlag(AnnounceDatabase::StatusFlag_Occupied, (IsDlgButtonChecked(window, IDC_STATUS_OCCUPIED) != 0)); + m_db.setStatusFlag(AnnounceDatabase::StatusFlag_FreeForChat, (IsDlgButtonChecked(window, IDC_STATUS_FREEFORCHAT) != 0)); m_db.setStatusFlag(AnnounceDatabase::StatusFlag_Invisible, (IsDlgButtonChecked(window, IDC_STATUS_INVISIBLE) != 0)); m_db.setStatusFlag(AnnounceDatabase::StatusFlag_SpeakStatusMsg, (IsDlgButtonChecked(window, IDC_SPEAK_STATUS_MSG) != 0)); m_db.setStatusFlag(AnnounceDatabase::StatusFlag_SuppressConnect, (IsDlgButtonChecked(window, IDC_SUPPRESS_CONNECT) != 0)); diff --git a/plugins/WinterSpeak/src/ConfigDatabase.h b/plugins/WinterSpeak/src/ConfigDatabase.h index 668f38d47d..4e7f546aa1 100644 --- a/plugins/WinterSpeak/src/ConfigDatabase.h +++ b/plugins/WinterSpeak/src/ConfigDatabase.h @@ -17,6 +17,7 @@ public: ActiveFlag_Dnd, ActiveFlag_Na, ActiveFlag_Occupied, + ActiveFlag_FreeForChat, ActiveFlag_Invisible }; diff --git a/plugins/WinterSpeak/src/DialogConfigActive.cpp b/plugins/WinterSpeak/src/DialogConfigActive.cpp index be288305d9..dad1d5153b 100644 --- a/plugins/WinterSpeak/src/DialogConfigActive.cpp +++ b/plugins/WinterSpeak/src/DialogConfigActive.cpp @@ -58,6 +58,7 @@ INT_PTR CALLBACK DialogConfigActive::process(HWND window, UINT message, WPARAM w case IDC_ACTIVE_DND: case IDC_ACTIVE_NA: case IDC_ACTIVE_OCCUPIED: + case IDC_ACTIVE_FREEFORCHAT: case IDC_ACTIVE_INVISIBLE: m_instance->changed(window); break; @@ -149,6 +150,7 @@ void DialogConfigActive::load(HWND window) CheckDlgButton(window, IDC_ACTIVE_DND, m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Dnd) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_ACTIVE_NA, m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Na) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_ACTIVE_OCCUPIED, m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Occupied) ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(window, IDC_ACTIVE_FREEFORCHAT, m_db.getActiveFlag(ConfigDatabase::ActiveFlag_FreeForChat) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(window, IDC_ACTIVE_INVISIBLE, m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Invisible) ? BST_CHECKED : BST_UNCHECKED); HWND listview = GetDlgItem(window, IDC_ACTIVE_USERS); @@ -320,6 +322,7 @@ void DialogConfigActive::save(HWND window) m_db.setActiveFlag(ConfigDatabase::ActiveFlag_Dnd, (IsDlgButtonChecked(window, IDC_ACTIVE_DND) != 0)); m_db.setActiveFlag(ConfigDatabase::ActiveFlag_Na, (IsDlgButtonChecked(window, IDC_ACTIVE_NA) != 0)); m_db.setActiveFlag(ConfigDatabase::ActiveFlag_Occupied, (IsDlgButtonChecked(window, IDC_ACTIVE_OCCUPIED) != 0)); + m_db.setActiveFlag(ConfigDatabase::ActiveFlag_FreeForChat, (IsDlgButtonChecked(window, IDC_ACTIVE_FREEFORCHAT) != 0)); m_db.setActiveFlag(ConfigDatabase::ActiveFlag_Invisible, (IsDlgButtonChecked(window, IDC_ACTIVE_INVISIBLE) != 0)); for (auto &hContact : Contacts()) { diff --git a/plugins/WinterSpeak/src/SpeakAnnounce.cpp b/plugins/WinterSpeak/src/SpeakAnnounce.cpp index 87f01038d4..e9b8160138 100644 --- a/plugins/WinterSpeak/src/SpeakAnnounce.cpp +++ b/plugins/WinterSpeak/src/SpeakAnnounce.cpp @@ -48,6 +48,9 @@ void SpeakAnnounce::statusChange(DBCONTACTWRITESETTING *write_setting, MCONTACT case ID_STATUS_OCCUPIED: speak = m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Occupied); break; + case ID_STATUS_FREECHAT: + speak = m_db.getStatusFlag(AnnounceDatabase::StatusFlag_FreeForChat); + break; case ID_STATUS_INVISIBLE: speak = m_db.getStatusFlag(AnnounceDatabase::StatusFlag_Invisible); break; diff --git a/plugins/WinterSpeak/src/SpeakConfig.cpp b/plugins/WinterSpeak/src/SpeakConfig.cpp index b02de945c3..1d0d4185d7 100644 --- a/plugins/WinterSpeak/src/SpeakConfig.cpp +++ b/plugins/WinterSpeak/src/SpeakConfig.cpp @@ -68,6 +68,9 @@ bool SpeakConfig::say(const std::wstring &sentence, MCONTACT user, bool message) case ID_STATUS_OCCUPIED: active = m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Occupied); break; + case ID_STATUS_FREECHAT: + active = m_db.getActiveFlag(ConfigDatabase::ActiveFlag_FreeForChat); + break; case ID_STATUS_INVISIBLE: active = m_db.getActiveFlag(ConfigDatabase::ActiveFlag_Invisible); break; diff --git a/plugins/WinterSpeak/src/UserInformation.cpp b/plugins/WinterSpeak/src/UserInformation.cpp index bdf89ec6e6..7769261257 100644 --- a/plugins/WinterSpeak/src/UserInformation.cpp +++ b/plugins/WinterSpeak/src/UserInformation.cpp @@ -11,6 +11,7 @@ UserInformation::UserInformation() : m_status_info(), m_status_strings() { m_status_strings[ID_STATUS_NA] = LPGENW("%u is not available"); m_status_strings[ID_STATUS_DND] = LPGENW("%u does not want to be disturbed"); m_status_strings[ID_STATUS_OCCUPIED] = LPGENW("%u is occupied"); + m_status_strings[ID_STATUS_FREECHAT] = LPGENW("%u is free for chat"); } //------------------------------------------------------------------------------ diff --git a/plugins/WinterSpeak/src/resource.h b/plugins/WinterSpeak/src/resource.h index c7aca68d1a..a4e8e7ed1c 100644 --- a/plugins/WinterSpeak/src/resource.h +++ b/plugins/WinterSpeak/src/resource.h @@ -23,6 +23,7 @@ #define IDC_ACTIVE_DND 1011 #define IDC_ACTIVE_NA 1012 #define IDC_ACTIVE_OCCUPIED 1013 +#define IDC_ACTIVE_FREEFORCHAT 1014 #define IDC_ACTIVE_INVISIBLE 1015 #define IDC_BUTTON_TEST 1016 #define IDC_STATUS_OFFLINE 1100 @@ -31,6 +32,7 @@ #define IDC_STATUS_DND 1103 #define IDC_STATUS_NA 1104 #define IDC_STATUS_OCCUPIED 1105 +#define IDC_STATUS_FREEFORCHAT 1106 #define IDC_STATUS_INVISIBLE 1107 #define IDC_SPEAK_STATUS_MSG 1108 #define IDC_EVENT_MESSAGE 1109 diff --git a/plugins/XSoundNotify/src/xsn_main.cpp b/plugins/XSoundNotify/src/xsn_main.cpp index 0a1aba74a0..3437461d9f 100644 --- a/plugins/XSoundNotify/src/xsn_main.cpp +++ b/plugins/XSoundNotify/src/xsn_main.cpp @@ -51,7 +51,8 @@ static selfSounds[] = { ID_STATUS_DND, "SelfDND" }, { ID_STATUS_NA, "SelfNA" }, { ID_STATUS_OCCUPIED, "SelfOccupied" }, - { ID_STATUS_INVISIBLE, "SelfInvisible" }, + { ID_STATUS_FREECHAT, "SelfFreeForChat" }, + { ID_STATUS_INVISIBLE, "SelfInvisible" } }; void InitSelfSounds() diff --git a/plugins/YARelay/res/yaRelay.rc b/plugins/YARelay/res/yaRelay.rc index add9c7612d..9a09e0dab8 100644 --- a/plugins/YARelay/res/yaRelay.rc +++ b/plugins/YARelay/res/yaRelay.rc @@ -53,8 +53,10 @@ BEGIN WS_TABSTOP,78,64,67,10 CONTROL "Do not disturb",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 78,75,67,10 - CONTROL "Invisible",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | + CONTROL "Free for chat",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,78,86,67,10 + CONTROL "Invisible",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,78,97,67,10 GROUPBOX "Forward messages to...",IDC_STATIC,158,3,147,45 GROUPBOX "Template",IDC_STATIC,158,51,147,61 EDITTEXT IDC_EDIT_TEMPLATE,163,62,138,27,ES_MULTILINE | diff --git a/plugins/YARelay/src/main.cpp b/plugins/YARelay/src/main.cpp index db2ddb9847..4a29fedc9f 100644 --- a/plugins/YARelay/src/main.cpp +++ b/plugins/YARelay/src/main.cpp @@ -105,6 +105,7 @@ static int MessageEventAdded(WPARAM hContact, LPARAM hDBEvent) case ID_STATUS_NA: statMask = STATUS_NA ;break; case ID_STATUS_OCCUPIED: statMask = STATUS_OCCUPIED ;break; case ID_STATUS_DND: statMask = STATUS_DND ;break; + case ID_STATUS_FREECHAT: statMask = STATUS_FREECHAT ;break; case ID_STATUS_INVISIBLE:statMask = STATUS_INVISIBLE;break; default: return 0; } diff --git a/plugins/YARelay/src/options.cpp b/plugins/YARelay/src/options.cpp index 3f0f2639d2..7e4d1eceef 100644 --- a/plugins/YARelay/src/options.cpp +++ b/plugins/YARelay/src/options.cpp @@ -95,7 +95,8 @@ static INT_PTR CALLBACK OptionsFrameProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, if (iForwardOnStatus & STATUS_NA ) CheckDlgButton(hwndDlg, IDC_CHECK4, BST_CHECKED); if (iForwardOnStatus & STATUS_OCCUPIED ) CheckDlgButton(hwndDlg, IDC_CHECK5, BST_CHECKED); if (iForwardOnStatus & STATUS_DND ) CheckDlgButton(hwndDlg, IDC_CHECK6, BST_CHECKED); - if (iForwardOnStatus & STATUS_INVISIBLE) CheckDlgButton(hwndDlg, IDC_CHECK7, BST_CHECKED); + if (iForwardOnStatus & STATUS_FREECHAT ) CheckDlgButton(hwndDlg, IDC_CHECK7, BST_CHECKED); + if (iForwardOnStatus & STATUS_INVISIBLE) CheckDlgButton(hwndDlg, IDC_CHECK8, BST_CHECKED); // template SetDlgItemText(hwndDlg, IDC_EDIT_TEMPLATE, tszForwardTemplate); @@ -155,7 +156,8 @@ static INT_PTR CALLBACK OptionsFrameProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, if (IsDlgButtonChecked(hwndDlg, IDC_CHECK4) == BST_CHECKED) iForwardOnStatus |= STATUS_NA; if (IsDlgButtonChecked(hwndDlg, IDC_CHECK5) == BST_CHECKED) iForwardOnStatus |= STATUS_OCCUPIED; if (IsDlgButtonChecked(hwndDlg, IDC_CHECK6) == BST_CHECKED) iForwardOnStatus |= STATUS_DND; - if (IsDlgButtonChecked(hwndDlg, IDC_CHECK7) == BST_CHECKED) iForwardOnStatus |= STATUS_INVISIBLE; + if (IsDlgButtonChecked(hwndDlg, IDC_CHECK7) == BST_CHECKED) iForwardOnStatus |= STATUS_FREECHAT; + if (IsDlgButtonChecked(hwndDlg, IDC_CHECK8) == BST_CHECKED) iForwardOnStatus |= STATUS_INVISIBLE; GetDlgItemText(hwndDlg, IDC_EDIT_TEMPLATE, tszForwardTemplate, _countof(tszForwardTemplate)); if (IsDlgButtonChecked(hwndDlg, IDC_CHECK_SPLIT) == BST_CHECKED) iSplit = 1; else iSplit = 0; iSplitMaxSize = GetDlgItemInt(hwndDlg, IDC_EDIT_MAXSIZE, nullptr, FALSE); diff --git a/plugins/YARelay/src/resource.h b/plugins/YARelay/src/resource.h index b894e2d895..b9104ff1a1 100644 --- a/plugins/YARelay/src/resource.h +++ b/plugins/YARelay/src/resource.h @@ -16,6 +16,7 @@ #define IDC_CHECK5 1008 #define IDC_CHECK6 1009 #define IDC_CHECK7 1010 +#define IDC_CHECK8 1011 #define IDC_EDIT_TEMPLATE 1012 #define IDC_CHECK_SPLIT 1013 #define IDC_EDIT_MAXSIZE 1014 diff --git a/plugins/YARelay/src/stdafx.h b/plugins/YARelay/src/stdafx.h index 11a4d8fe31..85acbb020a 100644 --- a/plugins/YARelay/src/stdafx.h +++ b/plugins/YARelay/src/stdafx.h @@ -41,7 +41,8 @@ Features: #define STATUS_NA 0x8 #define STATUS_OCCUPIED 0x10 #define STATUS_DND 0x20 -#define STATUS_INVISIBLE 0x40 +#define STATUS_FREECHAT 0x40 +#define STATUS_INVISIBLE 0x80 #define MAXTEMPLATESIZE 1024 diff --git a/plugins/ZeroNotification/src/options.cpp b/plugins/ZeroNotification/src/options.cpp index 4a3d1df6bf..83d71d9343 100644 --- a/plugins/ZeroNotification/src/options.cpp +++ b/plugins/ZeroNotification/src/options.cpp @@ -29,7 +29,8 @@ static const statusValues[] = { PF2_LONGAWAY, TEXT("Not available") }, { PF2_LIGHTDND, TEXT("Occupied") }, { PF2_HEAVYDND, TEXT("Do not disturb") }, - { PF2_INVISIBLE, TEXT("Invisible") }, + { PF2_FREECHAT, TEXT("Free for chat") }, + { PF2_INVISIBLE, TEXT("Invisible") } }; static void FillCheckBoxTree(HWND hwndTree, const struct CheckBoxValues_t *values, int nValues, DWORD style) diff --git a/protocols/Discord/proto_discord/src/resource.h b/protocols/Discord/proto_discord/src/resource.h index df3be36b36..70e0dd0372 100644 --- a/protocols/Discord/proto_discord/src/resource.h +++ b/protocols/Discord/proto_discord/src/resource.h @@ -9,6 +9,7 @@ #define IDI_ICON5 131 #define IDI_ICON6 158 #define IDI_ICON7 159 +#define IDI_ICON8 129 // Next default values for new objects // diff --git a/protocols/Dummy/proto_dummy/res/FFC.ico b/protocols/Dummy/proto_dummy/res/FFC.ico new file mode 100644 index 0000000000..f0d7976014 Binary files /dev/null and b/protocols/Dummy/proto_dummy/res/FFC.ico differ diff --git a/protocols/Dummy/proto_dummy/res/Proto_Dummy.rc b/protocols/Dummy/proto_dummy/res/Proto_Dummy.rc index 8aa8f437ee..6ee7d50d4e 100644 --- a/protocols/Dummy/proto_dummy/res/Proto_Dummy.rc +++ b/protocols/Dummy/proto_dummy/res/Proto_Dummy.rc @@ -58,6 +58,7 @@ IDI_ICON4 ICON "Invisible.ico" IDI_ICON5 ICON "NA.ico" IDI_ICON6 ICON "DND.ico" IDI_ICON7 ICON "Occupied.ico" +IDI_ICON8 ICON "FFC.ico" #endif // Russian (Russia) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/Dummy/proto_dummy/src/resource.h b/protocols/Dummy/proto_dummy/src/resource.h index 4db7c6c8e9..8a14b9dbc0 100644 --- a/protocols/Dummy/proto_dummy/src/resource.h +++ b/protocols/Dummy/proto_dummy/src/resource.h @@ -9,6 +9,7 @@ #define IDI_ICON5 131 #define IDI_ICON6 158 #define IDI_ICON7 159 +#define IDI_ICON8 129 // Next default values for new objects // diff --git a/protocols/Dummy/src/dummy_proto.cpp b/protocols/Dummy/src/dummy_proto.cpp index b17c86f3a5..0911ce15a5 100644 --- a/protocols/Dummy/src/dummy_proto.cpp +++ b/protocols/Dummy/src/dummy_proto.cpp @@ -93,7 +93,7 @@ INT_PTR CDummyProto::GetCaps(int type, MCONTACT) return PF1_IM | PF1_BASICSEARCH | PF1_ADDSEARCHRES; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: return 0; @@ -102,7 +102,7 @@ INT_PTR CDummyProto::GetCaps(int type, MCONTACT) return PF4_AVATARS | PF4_NOAUTHDENYREASON | PF4_NOCUSTOMAUTH; case PFLAGNUM_5: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_MAXLENOFMESSAGE: return 0; diff --git a/protocols/EmLanProto/src/amdproto.cpp b/protocols/EmLanProto/src/amdproto.cpp index 31609cec3e..fc620b8cae 100644 --- a/protocols/EmLanProto/src/amdproto.cpp +++ b/protocols/EmLanProto/src/amdproto.cpp @@ -66,9 +66,9 @@ static INT_PTR __cdecl EMPGetCaps(WPARAM wParam, LPARAM) return PF1_IM | PF1_BASICSEARCH | PF1_ADDSEARCHRES | PF1_PEER2PEER | PF1_INDIVSTATUS | PF1_MODEMSG | PF1_FILE | PF1_CANRENAMEFILE | PF1_FILERESUME; case PFLAGNUM_2: - return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: - return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_UNIQUEIDTEXT: return (INT_PTR)Translate("User name, IP address or '*'"); default: diff --git a/protocols/EmLanProto/src/mlan.cpp b/protocols/EmLanProto/src/mlan.cpp index 6c2b9e13b2..6ad76e2f95 100644 --- a/protocols/EmLanProto/src/mlan.cpp +++ b/protocols/EmLanProto/src/mlan.cpp @@ -41,6 +41,7 @@ CMLan::CMLan() m_amesNa = nullptr; m_amesOccupied = nullptr; m_amesDnd = nullptr; + m_amesFfc = nullptr; m_pFileConnectionList = nullptr; @@ -61,6 +62,7 @@ CMLan::~CMLan() delete[] m_amesNa; delete[] m_amesOccupied; delete[] m_amesDnd; + delete[] m_amesFfc; } void CMLan::DeleteCache() @@ -321,6 +323,7 @@ void CMLan::OnRecvPacket(u_char *mes, int len, in_addr from) case ID_STATUS_NA: mesAway = m_amesNa; break; case ID_STATUS_OCCUPIED: mesAway = m_amesOccupied; break; case ID_STATUS_DND: mesAway = m_amesDnd; break; + case ID_STATUS_FREECHAT: mesAway = m_amesFfc; break; } if (mesAway) { @@ -508,6 +511,9 @@ int CMLan::SetAwayMsg(u_int status, char* msg) case ID_STATUS_DND: ppMsg = &m_amesDnd; break; + case ID_STATUS_FREECHAT: + ppMsg = &m_amesFfc; + break; default: return 1; } diff --git a/protocols/EmLanProto/src/mlan.h b/protocols/EmLanProto/src/mlan.h index df3793a3a1..8396f5d105 100644 --- a/protocols/EmLanProto/src/mlan.h +++ b/protocols/EmLanProto/src/mlan.h @@ -141,6 +141,7 @@ private: char* m_amesNa; char* m_amesOccupied; char* m_amesDnd; + char* m_amesFfc; struct TFileConnection { diff --git a/protocols/FacebookRM/src/json.cpp b/protocols/FacebookRM/src/json.cpp index 4901848b7d..1e309e9c1e 100644 --- a/protocols/FacebookRM/src/json.cpp +++ b/protocols/FacebookRM/src/json.cpp @@ -1062,7 +1062,7 @@ int FacebookProto::ParseMessages(std::string &pData, std::vectorgetWord(GG_KEY_LEAVESTATUS, GG_KEYDEF_LEAVESTATUS)) { @@ -275,6 +276,9 @@ static INT_PTR CALLBACK gg_genoptsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam, case ID_STATUS_DND: SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_SETCURSEL, 3, 0); break; + case ID_STATUS_FREECHAT: + SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_SETCURSEL, 4, 0); + break; case ID_STATUS_INVISIBLE: SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_SETCURSEL, 5, 0); break; @@ -464,6 +468,9 @@ static INT_PTR CALLBACK gg_genoptsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam, gg->setWord(GG_KEY_LEAVESTATUS, ID_STATUS_DND); break; case 4: + gg->setWord(GG_KEY_LEAVESTATUS, ID_STATUS_FREECHAT); + break; + case 5: gg->setWord(GG_KEY_LEAVESTATUS, ID_STATUS_INVISIBLE); break; default: diff --git a/protocols/Gadu-Gadu/src/gg_proto.cpp b/protocols/Gadu-Gadu/src/gg_proto.cpp index 6554b18d49..4c11cd975a 100644 --- a/protocols/Gadu-Gadu/src/gg_proto.cpp +++ b/protocols/Gadu-Gadu/src/gg_proto.cpp @@ -112,6 +112,7 @@ GaduProto::~GaduProto() if (modemsg.online) mir_free(modemsg.online); if (modemsg.away) mir_free(modemsg.away); if (modemsg.dnd) mir_free(modemsg.dnd); + if (modemsg.freechat) mir_free(modemsg.freechat); if (modemsg.invisible) mir_free(modemsg.invisible); if (modemsg.offline) mir_free(modemsg.offline); } @@ -145,10 +146,10 @@ INT_PTR GaduProto::GetCaps(int type, MCONTACT) return PF1_IM | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_EXTSEARCHUI | PF1_SEARCHBYNAME | PF1_MODEMSG | PF1_NUMERICUSERID | PF1_VISLIST | PF1_FILE; case PFLAGNUM_2: - return PF2_ONLINE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_INVISIBLE | + return PF2_ONLINE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_FREECHAT | PF2_INVISIBLE | PF2_LONGAWAY; case PFLAGNUM_3: - return PF2_ONLINE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_INVISIBLE; + return PF2_ONLINE | PF2_SHORTAWAY | PF2_HEAVYDND | PF2_FREECHAT | PF2_INVISIBLE; case PFLAGNUM_4: return PF4_NOCUSTOMAUTH | PF4_SUPPORTTYPING | PF4_AVATARS | PF4_IMSENDOFFLINE; case PFLAGNUM_5: @@ -631,6 +632,9 @@ int GaduProto::SetAwayMsg(int iStatus, const wchar_t *newMsg) case ID_STATUS_DND: msgPtr = &modemsg.dnd; break; + case ID_STATUS_FREECHAT: + msgPtr = &modemsg.freechat; + break; case ID_STATUS_INVISIBLE: msgPtr = &modemsg.invisible; break; diff --git a/protocols/Gadu-Gadu/src/gg_proto.h b/protocols/Gadu-Gadu/src/gg_proto.h index 2e9db7566c..ada0efe1d8 100644 --- a/protocols/Gadu-Gadu/src/gg_proto.h +++ b/protocols/Gadu-Gadu/src/gg_proto.h @@ -239,6 +239,7 @@ struct GaduProto : public PROTO wchar_t *online; wchar_t *away; wchar_t *dnd; + wchar_t *freechat; wchar_t *invisible; wchar_t *offline; }; diff --git a/protocols/Gadu-Gadu/src/services.cpp b/protocols/Gadu-Gadu/src/services.cpp index eac7fcbd63..2b959d6e9d 100644 --- a/protocols/Gadu-Gadu/src/services.cpp +++ b/protocols/Gadu-Gadu/src/services.cpp @@ -32,6 +32,7 @@ char *gg_status2db(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; @@ -56,6 +57,9 @@ wchar_t* GaduProto::getstatusmsg(int status) case ID_STATUS_DND: return modemsg.dnd; break; + case ID_STATUS_FREECHAT: + return modemsg.freechat; + break; case ID_STATUS_INVISIBLE: return modemsg.invisible; break; @@ -128,6 +132,7 @@ int gg_normalizestatus(int status) switch (status) { case ID_STATUS_ONLINE: return ID_STATUS_ONLINE; case ID_STATUS_DND: return ID_STATUS_DND; + case ID_STATUS_FREECHAT: return ID_STATUS_FREECHAT; case ID_STATUS_OFFLINE: return ID_STATUS_OFFLINE; case ID_STATUS_INVISIBLE: return ID_STATUS_INVISIBLE; } diff --git a/protocols/ICQ-WIM/proto_icq/src/resource.h b/protocols/ICQ-WIM/proto_icq/src/resource.h index df3be36b36..70e0dd0372 100644 --- a/protocols/ICQ-WIM/proto_icq/src/resource.h +++ b/protocols/ICQ-WIM/proto_icq/src/resource.h @@ -9,6 +9,7 @@ #define IDI_ICON5 131 #define IDI_ICON6 158 #define IDI_ICON7 159 +#define IDI_ICON8 129 // Next default values for new objects // diff --git a/protocols/ICQ-WIM/proto_mra/src/resource.h b/protocols/ICQ-WIM/proto_mra/src/resource.h index 862336f18a..fcdca143d6 100644 --- a/protocols/ICQ-WIM/proto_mra/src/resource.h +++ b/protocols/ICQ-WIM/proto_mra/src/resource.h @@ -9,6 +9,7 @@ #define IDI_ICON5 131 #define IDI_ICON6 158 #define IDI_ICON7 159 +#define IDI_ICON8 129 // Next default values for new objects // diff --git a/protocols/ICQCorp/src/protocol.cpp b/protocols/ICQCorp/src/protocol.cpp index bdf3686354..c43c3b6fad 100644 --- a/protocols/ICQCorp/src/protocol.cpp +++ b/protocols/ICQCorp/src/protocol.cpp @@ -32,6 +32,7 @@ unsigned short toIcqStatus(unsigned short status) case ID_STATUS_DND: return ICQ_STATUS_DND; case ID_STATUS_NA: return ICQ_STATUS_NA; case ID_STATUS_OCCUPIED: return ICQ_STATUS_OCCUPIED; + case ID_STATUS_FREECHAT: return ICQ_STATUS_FREECHAT; case ID_STATUS_INVISIBLE: return ICQ_STATUS_PRIVATE; } return ICQ_STATUS_ONLINE; @@ -48,6 +49,7 @@ unsigned short toIdStatus(unsigned short status) case ICQ_STATUS_DND: return ID_STATUS_DND; case ICQ_STATUS_NA: return ID_STATUS_NA; case ICQ_STATUS_OCCUPIED: return ID_STATUS_OCCUPIED; + case ICQ_STATUS_FREECHAT: return ID_STATUS_FREECHAT; case ICQ_STATUS_PRIVATE: return ID_STATUS_INVISIBLE; } return ID_STATUS_ONLINE; @@ -1401,6 +1403,7 @@ ICQEvent *ICQ::sendTCP(ICQUser *u, unsigned short cmd, char *cmdStr, char *m) unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1526,6 +1529,7 @@ ICQEvent *ICQ::sendReadAwayMsg(ICQUser *u) case ID_STATUS_DND: cmd = ICQ_CMDxTCP_READxDNDxMSG; break; case ID_STATUS_NA: cmd = ICQ_CMDxTCP_READxNAxMSG; break; case ID_STATUS_OCCUPIED: cmd = ICQ_CMDxTCP_READxOCCUPIEDxMSG; break; + case ID_STATUS_FREECHAT: cmd = ICQ_CMDxTCP_READxFREECHATxMSG; break; default: return nullptr; } @@ -1566,6 +1570,7 @@ ICQTransfer *ICQ::sendFile(ICQUser *u, char *description, char *filename, unsign unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1612,6 +1617,7 @@ void ICQ::acceptFile(ICQUser *u, unsigned long hTransfer, char*) unsigned long status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1656,6 +1662,7 @@ void ICQ::refuseFile(ICQUser *u, unsigned long hTransfer, char *reason) unsigned int status; switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; @@ -1798,6 +1805,7 @@ void ICQ::processTcpPacket(Packet &packet, unsigned int hSocket) case ICQ_CMDxTCP_READxOCCUPIEDxMSG: case ICQ_CMDxTCP_READxNAxMSG: case ICQ_CMDxTCP_READxDNDxMSG: + case ICQ_CMDxTCP_READxFREECHATxMSG: Netlib_Logf(hNetlibUser, "[tcp] %d requested read of away message.\n", checkUin); packet >> theTCPSequence; @@ -1871,6 +1879,7 @@ void ICQ::processTcpPacket(Packet &packet, unsigned int hSocket) case ICQ_CMDxTCP_READxOCCUPIEDxMSG: case ICQ_CMDxTCP_READxNAxMSG: case ICQ_CMDxTCP_READxDNDxMSG: + case ICQ_CMDxTCP_READxFREECHATxMSG: packet >> theTCPSequence; addAwayMsg(u, message, theTCPSequence, time(0)); break; @@ -1919,6 +1928,7 @@ void ICQ::ackTCP(Packet &packet, ICQUser *u, unsigned short newCommand, unsigned switch (statusVal) { case ID_STATUS_ONLINE: status = 0x00100000; break; + case ID_STATUS_FREECHAT: status = 0x00000000; break; // ?? case ID_STATUS_AWAY: status = 0x01100000; break; case ID_STATUS_NA: status = 0x00100000; break; case ID_STATUS_DND: status = 0x00100000; break; diff --git a/protocols/ICQCorp/src/protocol.h b/protocols/ICQCorp/src/protocol.h index b3b3e875dd..ba75de163b 100644 --- a/protocols/ICQCorp/src/protocol.h +++ b/protocols/ICQCorp/src/protocol.h @@ -98,6 +98,7 @@ const unsigned short ICQ_CMDxTCP_READxAWAYxMSG = 0x03E8; const unsigned short ICQ_CMDxTCP_READxOCCUPIEDxMSG = 0x03E9; const unsigned short ICQ_CMDxTCP_READxNAxMSG = 0x03EA; const unsigned short ICQ_CMDxTCP_READxDNDxMSG = 0x03EB; +const unsigned short ICQ_CMDxTCP_READxFREECHATxMSG = 0x03EC; const unsigned short ICQ_CMDxTCP_HANDSHAKE = 0x03FF; const unsigned short ICQ_CMDxTCP_HANDSHAKE2 = 0x04FF; const unsigned short ICQ_CMDxTCP_HANDSHAKE3 = 0x02FF; @@ -109,6 +110,7 @@ const unsigned short int ICQ_STATUS_AWAY = 0x0001; const unsigned short int ICQ_STATUS_NA = 0x0005; const unsigned short int ICQ_STATUS_OCCUPIED = 0x0011; const unsigned short int ICQ_STATUS_DND = 0x0013; +const unsigned short int ICQ_STATUS_FREECHAT = 0x0020; const unsigned short int ICQ_STATUS_PRIVATE = 0x0100; // miscellaneous constants diff --git a/protocols/ICQCorp/src/services.cpp b/protocols/ICQCorp/src/services.cpp index f632f67c64..0781c67d5c 100644 --- a/protocols/ICQCorp/src/services.cpp +++ b/protocols/ICQCorp/src/services.cpp @@ -28,10 +28,10 @@ static INT_PTR icqGetCaps(WPARAM wParam, LPARAM) return PF1_IM | PF1_FILE | PF1_MODEMSG | PF1_AUTHREQ | PF1_PEER2PEER | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_CANRENAMEFILE | PF1_FILERESUME | PF1_ADDSEARCHRES | PF1_SEARCHBYEMAIL | PF1_SEARCHBYNAME | PF1_NUMERICUSERID; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: - return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_UNIQUEIDTEXT: return (INT_PTR)Translate("ICQ number"); diff --git a/protocols/IRCG/src/commandmonitor.cpp b/protocols/IRCG/src/commandmonitor.cpp index 9f3e6cd526..448336e3c9 100644 --- a/protocols/IRCG/src/commandmonitor.cpp +++ b/protocols/IRCG/src/commandmonitor.cpp @@ -2349,6 +2349,7 @@ bool CIrcProto::DoOnConnect(const CIrcMessage*) if (IsConnected()) { DoPerform(_T2A(m_info.sNetwork)); switch (Temp) { + case ID_STATUS_FREECHAT: DoPerform("Event: Free for chat"); break; case ID_STATUS_ONLINE: DoPerform("Event: Available"); break; } } diff --git a/protocols/IRCG/src/ircproto.cpp b/protocols/IRCG/src/ircproto.cpp index 4e70654649..d05c5a5027 100644 --- a/protocols/IRCG/src/ircproto.cpp +++ b/protocols/IRCG/src/ircproto.cpp @@ -721,12 +721,12 @@ int CIrcProto::SetStatusInternal(int iNewStatus, bool bIsInternal) if (!bIsInternal) m_iDesiredStatus = iNewStatus; - if ((iNewStatus == ID_STATUS_ONLINE || iNewStatus == ID_STATUS_AWAY) && !IsConnected()) //go from offline to online + if ((iNewStatus == ID_STATUS_ONLINE || iNewStatus == ID_STATUS_AWAY || iNewStatus == ID_STATUS_FREECHAT) && !IsConnected()) //go from offline to online { if (!m_bConnectThreadRunning) ConnectToServer(); } - else if (iNewStatus == ID_STATUS_ONLINE && IsConnected() && m_iStatus == ID_STATUS_AWAY) //go to online while connected + else if ((iNewStatus == ID_STATUS_ONLINE || iNewStatus == ID_STATUS_FREECHAT) && IsConnected() && m_iStatus == ID_STATUS_AWAY) //go to online while connected { m_statusMessage = L""; PostIrcMessage(L"/AWAY"); @@ -784,7 +784,7 @@ HANDLE CIrcProto::GetAwayMsg(MCONTACT hContact) int CIrcProto::SetAwayMsg(int status, const wchar_t* msg) { switch (status) { - case ID_STATUS_ONLINE: case ID_STATUS_INVISIBLE: + case ID_STATUS_ONLINE: case ID_STATUS_INVISIBLE: case ID_STATUS_FREECHAT: case ID_STATUS_CONNECTING: case ID_STATUS_OFFLINE: break; diff --git a/protocols/IRCG/src/options.cpp b/protocols/IRCG/src/options.cpp index 74bdeb75bf..e289ccaeb6 100644 --- a/protocols/IRCG/src/options.cpp +++ b/protocols/IRCG/src/options.cpp @@ -930,6 +930,7 @@ static char* sttPerformEvents[] = { LPGEN("Event: Not available"), LPGEN("Event: Occupied"), LPGEN("Event: Do not disturb"), + LPGEN("Event: Free for chat"), LPGEN("Event: Disconnect"), LPGEN("ALL NETWORKS") }; diff --git a/protocols/JabberG/proto_jabber/res/FFC.ico b/protocols/JabberG/proto_jabber/res/FFC.ico new file mode 100644 index 0000000000..dbc899c02a Binary files /dev/null and b/protocols/JabberG/proto_jabber/res/FFC.ico differ diff --git a/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc b/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc index f6a19debab..3a9e85cae0 100644 --- a/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc +++ b/protocols/JabberG/proto_jabber/res/Proto_Jabber.rc @@ -57,6 +57,7 @@ IDI_ICON3 ICON "Away.ico" IDI_ICON4 ICON "Invisible.ico" IDI_ICON5 ICON "NA.ico" IDI_ICON6 ICON "DND.ico" +IDI_ICON7 ICON "FFC.ico" #endif // Russian (Russia) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/JabberG/proto_jabber/src/resource.h b/protocols/JabberG/proto_jabber/src/resource.h index f59e3ec356..e1031b138e 100644 --- a/protocols/JabberG/proto_jabber/src/resource.h +++ b/protocols/JabberG/proto_jabber/src/resource.h @@ -8,6 +8,7 @@ #define IDI_ICON4 130 #define IDI_ICON5 131 #define IDI_ICON6 158 +#define IDI_ICON7 129 // Next default values for new objects // diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp index 99556d85b7..c0e3fa6923 100644 --- a/protocols/JabberG/src/jabber_chat.cpp +++ b/protocols/JabberG/src/jabber_chat.cpp @@ -49,7 +49,8 @@ enum { IDM_PRESENCE_ONLINE = ID_STATUS_ONLINE, IDM_PRESENCE_AWAY = ID_STATUS_AWAY, IDM_PRESENCE_NA = ID_STATUS_NA, - IDM_PRESENCE_DND = ID_STATUS_DND + IDM_PRESENCE_DND = ID_STATUS_DND, + IDM_PRESENCE_FREE4CHAT = ID_STATUS_FREECHAT }; struct TRoleOrAffiliationInfo @@ -425,6 +426,7 @@ static gc_item sttLogListItems[] = { LPGENW("Away"), IDM_PRESENCE_AWAY, MENU_POPUPITEM }, { LPGENW("Not available"), IDM_PRESENCE_NA, MENU_POPUPITEM }, { LPGENW("Do not disturb"), IDM_PRESENCE_DND, MENU_POPUPITEM }, + { LPGENW("Free for chat"), IDM_PRESENCE_FREE4CHAT, MENU_POPUPITEM }, { LPGENW("&Leave chat session"), IDM_LEAVE, MENU_ITEM } }; @@ -1294,6 +1296,7 @@ static void sttLogListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* g case IDM_PRESENCE_AWAY: case IDM_PRESENCE_NA: case IDM_PRESENCE_DND: + case IDM_PRESENCE_FREE4CHAT: if (MCONTACT h = ppro->HContactFromJID(item->jid)) ppro->OnMenuHandleDirectPresence((WPARAM)h, 0, gch->dwData); break; diff --git a/protocols/JabberG/src/jabber_groupchat.cpp b/protocols/JabberG/src/jabber_groupchat.cpp index 67b3d17568..7e18ceae1b 100644 --- a/protocols/JabberG/src/jabber_groupchat.cpp +++ b/protocols/JabberG/src/jabber_groupchat.cpp @@ -844,6 +844,7 @@ void CJabberProto::GroupchatProcessPresence(const TiXmlElement *node) if (!mir_strcmp(pszStatus, "away")) status = ID_STATUS_AWAY; else if (!mir_strcmp(pszStatus, "xa")) status = ID_STATUS_NA; else if (!mir_strcmp(pszStatus, "dnd")) status = ID_STATUS_DND; + else if (!mir_strcmp(pszStatus, "chat")) status = ID_STATUS_FREECHAT; } // process custom nick change diff --git a/protocols/JabberG/src/jabber_icolib.cpp b/protocols/JabberG/src/jabber_icolib.cpp index 6a81703261..feedbec77a 100644 --- a/protocols/JabberG/src/jabber_icolib.cpp +++ b/protocols/JabberG/src/jabber_icolib.cpp @@ -29,6 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define IDI_ONLINE 104 #define IDI_OFFLINE 105 #define IDI_AWAY 128 +#define IDI_FREE4CHAT 129 #define IDI_INVISIBLE 130 #define IDI_NA 131 #define IDI_DND 158 @@ -72,7 +73,7 @@ static CTransportProtoTableItem TransportProtoTable[] = { "meinvz*", "MeinVZ" }, }; -static int skinIconStatusToResourceId[] = { IDI_OFFLINE, IDI_ONLINE, IDI_AWAY, IDI_DND, IDI_NA, IDI_NA, IDI_OCCUPIED, IDI_INVISIBLE }; +static int skinIconStatusToResourceId[] = { IDI_OFFLINE, IDI_ONLINE, IDI_AWAY, IDI_DND, IDI_NA, IDI_NA, IDI_OCCUPIED, IDI_FREE4CHAT, IDI_INVISIBLE }; /////////////////////////////////////////////////////////////////////////////// // CIconPool class diff --git a/protocols/JabberG/src/jabber_list.cpp b/protocols/JabberG/src/jabber_list.cpp index 8582963ebe..08e7eb0cff 100644 --- a/protocols/JabberG/src/jabber_list.cpp +++ b/protocols/JabberG/src/jabber_list.cpp @@ -394,19 +394,23 @@ char* CJabberProto::ListGetBestClientResourceNamePtr(const char *jid) for (auto &it : LI->arResources) { bool foundBetter = false; switch (it->m_iStatus) { - case ID_STATUS_ONLINE: + case ID_STATUS_FREECHAT: foundBetter = true; break; + case ID_STATUS_ONLINE: + if (status != ID_STATUS_FREECHAT) + foundBetter = true; + break; case ID_STATUS_DND: - if (status != ID_STATUS_ONLINE) + if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE) foundBetter = true; break; case ID_STATUS_AWAY: - if (status != ID_STATUS_ONLINE && status != ID_STATUS_DND) + if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND) foundBetter = true; break; case ID_STATUS_NA: - if (status != ID_STATUS_ONLINE && status != ID_STATUS_DND && status != ID_STATUS_AWAY) + if (status != ID_STATUS_FREECHAT && status != ID_STATUS_ONLINE && status != ID_STATUS_DND && status != ID_STATUS_AWAY) foundBetter = true; break; } diff --git a/protocols/JabberG/src/jabber_menu.cpp b/protocols/JabberG/src/jabber_menu.cpp index 0f7fcf3409..bdd1684ca2 100644 --- a/protocols/JabberG/src/jabber_menu.cpp +++ b/protocols/JabberG/src/jabber_menu.cpp @@ -61,6 +61,7 @@ static PresenceModeArray[] = { SKINICON_STATUS_AWAY, ID_STATUS_AWAY }, { SKINICON_STATUS_NA, ID_STATUS_NA }, { SKINICON_STATUS_DND, ID_STATUS_DND }, + { SKINICON_STATUS_FREE4CHAT, ID_STATUS_FREECHAT }, }; static HGENMENU g_hMenuDirectPresence[_countof(PresenceModeArray) + 1]; diff --git a/protocols/JabberG/src/jabber_misc.cpp b/protocols/JabberG/src/jabber_misc.cpp index 9395d2b6a5..b6ef4735d9 100755 --- a/protocols/JabberG/src/jabber_misc.cpp +++ b/protocols/JabberG/src/jabber_misc.cpp @@ -215,6 +215,7 @@ void CJabberProto::SetServerStatus(int iNewStatus) switch (iNewStatus) { case ID_STATUS_ONLINE: case ID_STATUS_NA: + case ID_STATUS_FREECHAT: case ID_STATUS_INVISIBLE: m_iStatus = iNewStatus; break; diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp index 296f12e516..2803329e83 100755 --- a/protocols/JabberG/src/jabber_proto.cpp +++ b/protocols/JabberG/src/jabber_proto.cpp @@ -240,6 +240,7 @@ CJabberProto::~CJabberProto() mir_free(m_modeMsgs.szAway); mir_free(m_modeMsgs.szNa); mir_free(m_modeMsgs.szDnd); + mir_free(m_modeMsgs.szFreechat); mir_free(m_transportProtoTableStartIndex); @@ -579,9 +580,9 @@ INT_PTR CJabberProto::GetCaps(int type, MCONTACT hContact) case PFLAGNUM_1: return PF1_IM | PF1_AUTHREQ | PF1_CHAT | PF1_SERVERCLIST | PF1_MODEMSG | PF1_BASICSEARCH | PF1_EXTSEARCH | PF1_FILE | PF1_CONTACT; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: - return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND; + return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_4: return PF4_FORCEAUTH | PF4_NOCUSTOMAUTH | PF4_NOAUTHDENYREASON | PF4_SUPPORTTYPING | PF4_AVATARS; case PFLAG_UNIQUEIDTEXT: @@ -1198,6 +1199,10 @@ int CJabberProto::SetAwayMsg(int status, const wchar_t *msg) szMsg = &m_modeMsgs.szDnd; status = ID_STATUS_DND; break; + + case ID_STATUS_FREECHAT: + szMsg = &m_modeMsgs.szFreechat; + break; default: return 1; diff --git a/protocols/JabberG/src/jabber_rc.cpp b/protocols/JabberG/src/jabber_rc.cpp index e880fb9f60..3f19deda87 100644 --- a/protocols/JabberG/src/jabber_rc.cpp +++ b/protocols/JabberG/src/jabber_rc.cpp @@ -238,6 +238,7 @@ static char *StatusModeToDbSetting(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; @@ -286,6 +287,9 @@ int CJabberProto::AdhocSetStatusHandler(const TiXmlElement*, CJabberIqInfo *pInf case ID_STATUS_OCCUPIED: fieldNode << XCHILD("value", "dnd"); break; + case ID_STATUS_FREECHAT: + fieldNode << XCHILD("value", "chat"); + break; case ID_STATUS_ONLINE: default: fieldNode << XCHILD("value", "online"); @@ -342,6 +346,7 @@ int CJabberProto::AdhocSetStatusHandler(const TiXmlElement*, CJabberIqInfo *pInf if (!mir_strcmp(pszValue, "away")) status = ID_STATUS_AWAY; else if (!mir_strcmp(pszValue, "xa")) status = ID_STATUS_NA; else if (!mir_strcmp(pszValue, "dnd")) status = ID_STATUS_DND; + else if (!mir_strcmp(pszValue, "chat")) status = ID_STATUS_FREECHAT; else if (!mir_strcmp(pszValue, "online")) status = ID_STATUS_ONLINE; else if (!mir_strcmp(pszValue, "invisible")) status = ID_STATUS_INVISIBLE; else if (!mir_strcmp(pszValue, "offline")) status = ID_STATUS_OFFLINE; diff --git a/protocols/JabberG/src/jabber_svc.cpp b/protocols/JabberG/src/jabber_svc.cpp index d1119b6bbf..ad263039bd 100644 --- a/protocols/JabberG/src/jabber_svc.cpp +++ b/protocols/JabberG/src/jabber_svc.cpp @@ -54,6 +54,9 @@ INT_PTR __cdecl CJabberProto::GetMyAwayMsg(WPARAM wParam, LPARAM lParam) case ID_STATUS_OCCUPIED: szStatus = m_modeMsgs.szDnd; break; + case ID_STATUS_FREECHAT: + szStatus = m_modeMsgs.szFreechat; + break; default: // Should not reach here break; } diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index 64ea91d5b4..bd146d967a 100755 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -1614,6 +1614,7 @@ void CJabberProto::OnProcessPresence(const TiXmlElement *node, ThreadData *info) if (!mir_strcmp(show, "away")) status = ID_STATUS_AWAY; else if (!mir_strcmp(show, "xa")) status = ID_STATUS_NA; else if (!mir_strcmp(show, "dnd")) status = ID_STATUS_DND; + else if (!mir_strcmp(show, "chat")) status = ID_STATUS_FREECHAT; } int priority = XmlGetChildInt(node, "priority"); diff --git a/protocols/JabberG/src/jabber_util.cpp b/protocols/JabberG/src/jabber_util.cpp index db99565983..87b69204e7 100755 --- a/protocols/JabberG/src/jabber_util.cpp +++ b/protocols/JabberG/src/jabber_util.cpp @@ -197,6 +197,7 @@ void JabberHttpUrlDecode(wchar_t *str) int JabberCombineStatus(int status1, int status2) { // Combine according to the following priority (high to low) + // ID_STATUS_FREECHAT // ID_STATUS_ONLINE // ID_STATUS_DND // ID_STATUS_AWAY @@ -204,6 +205,8 @@ int JabberCombineStatus(int status1, int status2) // ID_STATUS_INVISIBLE (valid only for TLEN_PLUGIN) // ID_STATUS_OFFLINE // other ID_STATUS in random order (actually return status1) + if (status1 == ID_STATUS_FREECHAT || status2 == ID_STATUS_FREECHAT) + return ID_STATUS_FREECHAT; if (status1 == ID_STATUS_ONLINE || status2 == ID_STATUS_ONLINE) return ID_STATUS_ONLINE; if (status1 == ID_STATUS_DND || status2 == ID_STATUS_DND) @@ -475,6 +478,10 @@ void CJabberProto::SendPresenceTo(int status, const char *to, const TiXmlElement p << XCHILD("show", "dnd"); if (!msg) msg = m_modeMsgs.szDnd; break; + case ID_STATUS_FREECHAT: + p << XCHILD("show", "chat"); + if (!msg) msg = m_modeMsgs.szFreechat; + break; default: // Should not reach here break; } diff --git a/protocols/JabberG/src/stdafx.h b/protocols/JabberG/src/stdafx.h index 71067a498c..d7710f32a6 100755 --- a/protocols/JabberG/src/stdafx.h +++ b/protocols/JabberG/src/stdafx.h @@ -401,6 +401,7 @@ struct JABBER_MODEMSGS char *szAway; char *szNa; char *szDnd; + char *szFreechat; }; typedef enum { FT_SI, FT_OOB, FT_BYTESTREAM, FT_IBB } JABBER_FT_TYPE; diff --git a/protocols/MSN/src/msn_misc.cpp b/protocols/MSN/src/msn_misc.cpp index cbb853a090..d38ac42e3c 100644 --- a/protocols/MSN/src/msn_misc.cpp +++ b/protocols/MSN/src/msn_misc.cpp @@ -62,6 +62,7 @@ char** CMsnProto::GetStatusMsgLoc(int status) ID_STATUS_DND, ID_STATUS_NA, ID_STATUS_OCCUPIED, + ID_STATUS_FREECHAT, ID_STATUS_INVISIBLE, }; diff --git a/protocols/Non-IM Contact/res/resource.rc b/protocols/Non-IM Contact/res/resource.rc index f4e7ae70ff..27d8600dba 100644 --- a/protocols/Non-IM Contact/res/resource.rc +++ b/protocols/Non-IM Contact/res/resource.rc @@ -74,6 +74,7 @@ BEGIN CONTROL "",CHK_NA,"Button",BS_AUTORADIOBUTTON | BS_ICON | BS_PUSHLIKE | WS_TABSTOP,109,95,16,16 CONTROL "",CHK_OCC,"Button",BS_AUTORADIOBUTTON | BS_ICON | BS_PUSHLIKE | WS_TABSTOP,128,95,16,16 CONTROL "",CHK_DND,"Button",BS_AUTORADIOBUTTON | BS_ICON | BS_PUSHLIKE | WS_TABSTOP,147,95,16,16 + CONTROL "",CHK_FFC,"Button",BS_AUTORADIOBUTTON | BS_ICON | BS_PUSHLIKE | WS_TABSTOP,166,95,16,16 CONTROL "",CHK_INVISIBLE,"Button",BS_AUTORADIOBUTTON | BS_ICON | BS_PUSHLIKE | WS_TABSTOP,185,95,16,16 LTEXT "Group:",IDC_STATIC,12,81,29,8 LTEXT "Status Icon",IDC_STATIC,12,99,54,8 diff --git a/protocols/Non-IM Contact/src/contactinfo.cpp b/protocols/Non-IM Contact/src/contactinfo.cpp index 38a6312728..797a328501 100644 --- a/protocols/Non-IM Contact/src/contactinfo.cpp +++ b/protocols/Non-IM Contact/src/contactinfo.cpp @@ -140,7 +140,7 @@ INT_PTR CALLBACK DlgProcOtherStuff(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP SetDlgItemTextW(hwnd, IDC_GROUP, wszGroup); /* icons */ - CheckRadioButton(hwnd, 40072, 40077, g_plugin.getWord(hContact, "Icon", ID_STATUS_ONLINE)); + CheckRadioButton(hwnd, 40072, 40078, g_plugin.getWord(hContact, "Icon", ID_STATUS_ONLINE)); SetWindowLongPtr(GetDlgItem(hwnd, CHK_ONLINE), GWLP_USERDATA, (LONG_PTR)Skin_LoadProtoIcon(MODNAME, ID_STATUS_ONLINE)); g_PrevBtnWndProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(hwnd, CHK_ONLINE), GWLP_WNDPROC, (LONG_PTR)ButtWndProc); for (int i = ID_STATUS_ONLINE; i <= ID_STATUS_MAX; i++) { @@ -599,6 +599,8 @@ INT_PTR ImportContacts(WPARAM, LPARAM) mir_snprintf(tmp, "Icon: DND\r\n"); else if (icon == ID_STATUS_OCCUPIED) mir_snprintf(tmp, "Icon: Occupied\r\n"); + else if (icon == ID_STATUS_FREECHAT) + mir_snprintf(tmp, "Icon: Free for chat\r\n"); else if (icon == ID_STATUS_INVISIBLE) mir_snprintf(tmp, "Icon: Invisible\r\n"); else { diff --git a/protocols/Non-IM Contact/src/resource.h b/protocols/Non-IM Contact/src/resource.h index 6cf12110fc..a81de3f2a4 100644 --- a/protocols/Non-IM Contact/src/resource.h +++ b/protocols/Non-IM Contact/src/resource.h @@ -59,7 +59,8 @@ #define CHK_DND 40074 #define CHK_NA 40075 #define CHK_OCC 40076 -#define CHK_INVISIBLE 40077 +#define CHK_FFC 40077 +#define CHK_INVISIBLE 40078 // Next default values for new objects // diff --git a/protocols/Non-IM Contact/src/services.cpp b/protocols/Non-IM Contact/src/services.cpp index 72ef8ec790..4a584e653a 100644 --- a/protocols/Non-IM Contact/src/services.cpp +++ b/protocols/Non-IM Contact/src/services.cpp @@ -9,7 +9,7 @@ INT_PTR GetLCCaps(WPARAM wParam, LPARAM) if (wParam == PFLAGNUM_1) return 0; if (wParam == PFLAGNUM_2) - return PF2_ONLINE | PF2_LONGAWAY | PF2_SHORTAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_INVISIBLE; // add the possible statuses here. + return PF2_ONLINE | PF2_LONGAWAY | PF2_SHORTAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT | PF2_INVISIBLE; // add the possible statuses here. if (wParam == PFLAGNUM_3) return 0; return 0; diff --git a/protocols/Sametime/src/sametime_session.cpp b/protocols/Sametime/src/sametime_session.cpp index 4b01d29174..e9cd06818c 100644 --- a/protocols/Sametime/src/sametime_session.cpp +++ b/protocols/Sametime/src/sametime_session.cpp @@ -249,6 +249,7 @@ int CSametimeProto::SetSessionStatus(int status) //us.time = 0; switch (status) { + case ID_STATUS_FREECHAT: case ID_STATUS_ONLINE: us.desc = AwayMessages.szOnline; us.status = mwStatus_ACTIVE; break; diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index eb57d4741d..9ca67827bb 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -241,6 +241,10 @@ int CSkypeProto::SetStatus(int iNewStatus) return 0; switch (iNewStatus) { + case ID_STATUS_FREECHAT: + iNewStatus = ID_STATUS_ONLINE; + break; + case ID_STATUS_NA: iNewStatus = ID_STATUS_AWAY; break; diff --git a/protocols/Steam/proto_steam/res/FFC.ico b/protocols/Steam/proto_steam/res/FFC.ico new file mode 100644 index 0000000000..1e8b4f3bad Binary files /dev/null and b/protocols/Steam/proto_steam/res/FFC.ico differ diff --git a/protocols/Steam/proto_steam/res/Proto_Steam.rc b/protocols/Steam/proto_steam/res/Proto_Steam.rc index 7658ab5894..00ad7ff43c 100644 --- a/protocols/Steam/proto_steam/res/Proto_Steam.rc +++ b/protocols/Steam/proto_steam/res/Proto_Steam.rc @@ -56,6 +56,7 @@ IDI_ICON2 ICON "Online.ico" IDI_ICON3 ICON "Away.ico" IDI_ICON5 ICON "NA.ico" IDI_ICON6 ICON "DND.ico" +IDI_ICON8 ICON "FFC.ico" #endif // Russian (Russia) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/protocols/Steam/proto_steam/src/resource.h b/protocols/Steam/proto_steam/src/resource.h index f0b1594ea6..0ecf950bc3 100644 --- a/protocols/Steam/proto_steam/src/resource.h +++ b/protocols/Steam/proto_steam/src/resource.h @@ -7,6 +7,7 @@ #define IDI_ICON3 128 #define IDI_ICON5 131 #define IDI_ICON6 158 +#define IDI_ICON8 129 // Next default values for new objects // diff --git a/protocols/Steam/src/steam_contacts.cpp b/protocols/Steam/src/steam_contacts.cpp index 4cd9ffc563..63e4c05905 100644 --- a/protocols/Steam/src/steam_contacts.cpp +++ b/protocols/Steam/src/steam_contacts.cpp @@ -19,6 +19,11 @@ void CSteamProto::SetContactStatus(MCONTACT hContact, WORD status) // Special handling of some statuses switch (status) { + case ID_STATUS_FREECHAT: + // Contact is looking to play, save it to as status message + db_set_ws(hContact, "CList", "StatusMsg", TranslateT("Looking to play")); + break; + case ID_STATUS_OFFLINE: // if contact is offline, remove played game info delSetting(hContact, "GameID"); @@ -162,7 +167,7 @@ void CSteamProto::UpdateContactDetails(MCONTACT hContact, const JSONNode &data) if (stateflags == PersonaStateFlag::None) { // nothing special, either standard client or in different status (only online, I want to play, I want to trade statuses support this flags) WORD status = getWord(hContact, "Status", ID_STATUS_OFFLINE); - if (status == ID_STATUS_ONLINE) + if (status == ID_STATUS_ONLINE || status == ID_STATUS_FREECHAT) setWString(hContact, "MirVer", L"Steam"); } else if (contains_flag(stateflags, PersonaStateFlag::InJoinableGame)) { diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp index 143a26e444..40d6e8ae09 100644 --- a/protocols/Steam/src/steam_proto.cpp +++ b/protocols/Steam/src/steam_proto.cpp @@ -189,11 +189,11 @@ INT_PTR CSteamProto::GetCaps(int type, MCONTACT) case PFLAGNUM_1: return PF1_IM | PF1_BASICSEARCH | PF1_SEARCHBYNAME | PF1_AUTHREQ | PF1_SERVERCLIST | PF1_ADDSEARCHRES | PF1_MODEMSGRECV; case PFLAGNUM_2: - return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND; + return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_4: return PF4_AVATARS | PF4_NOCUSTOMAUTH | PF4_NOAUTHDENYREASON | PF4_FORCEAUTH | PF4_SUPPORTIDLE | PF4_SUPPORTTYPING;// | PF4_IMSENDOFFLINE; case PFLAGNUM_5: - return PF2_HEAVYDND; + return PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_UNIQUEIDTEXT: return (INT_PTR)Translate("SteamID"); default: diff --git a/protocols/Steam/src/steam_utils.cpp b/protocols/Steam/src/steam_utils.cpp index e4a45e7dbe..ad6b8b3732 100644 --- a/protocols/Steam/src/steam_utils.cpp +++ b/protocols/Steam/src/steam_utils.cpp @@ -13,9 +13,9 @@ WORD CSteamProto::SteamToMirandaStatus(PersonaState state) return ID_STATUS_AWAY; case PersonaState::Snooze: return ID_STATUS_NA; - - case PersonaState::LookingToTrade: case PersonaState::LookingToPlay: + return ID_STATUS_FREECHAT; + case PersonaState::LookingToTrade: default: return ID_STATUS_ONLINE; } @@ -34,6 +34,8 @@ PersonaState CSteamProto::MirandaToSteamState(int status) return PersonaState::Away; case ID_STATUS_NA: return PersonaState::Snooze; + case ID_STATUS_FREECHAT: + return PersonaState::LookingToPlay; default: return PersonaState::Online; } diff --git a/protocols/Tox/src/tox_utils.cpp b/protocols/Tox/src/tox_utils.cpp index 6caff2c40b..d39deee198 100644 --- a/protocols/Tox/src/tox_utils.cpp +++ b/protocols/Tox/src/tox_utils.cpp @@ -3,6 +3,10 @@ int CToxProto::MapStatus(int status) { switch (status) { + case ID_STATUS_FREECHAT: + status = ID_STATUS_ONLINE; + break; + case ID_STATUS_NA: status = ID_STATUS_AWAY; break; diff --git a/protocols/Twitter/src/proto.cpp b/protocols/Twitter/src/proto.cpp index 0496409e9b..e7d1e8806f 100644 --- a/protocols/Twitter/src/proto.cpp +++ b/protocols/Twitter/src/proto.cpp @@ -169,8 +169,8 @@ int TwitterProto::SetStatus(int new_status) return 0; m_iDesiredStatus = new_status; - // 40072 - 40077 are the "online" statuses, basically every status except offline. see statusmodes.h - if (new_status >= 40072 && new_status <= 40077) { + // 40072 - 40078 are the "online" statuses, basically every status except offline. see statusmodes.h + if (new_status >= 40072 && new_status <= 40078) { m_iDesiredStatus = ID_STATUS_ONLINE; //i think i have to set this so it forces the twitter proto to be online (and not away, DND, etc) @@ -179,7 +179,7 @@ int TwitterProto::SetStatus(int new_status) return 0; // if we're already connected, and we change to another connected status, don't try and reconnect! - if (old_status >= 40072 && old_status <= 40077) + if (old_status >= 40072 && old_status <= 40078) return 0; // i think here we tell the proto interface struct that we're connecting, just so it knows diff --git a/protocols/Weather/src/stdafx.h b/protocols/Weather/src/stdafx.h index b2c3e5db15..7a8156af5e 100644 --- a/protocols/Weather/src/stdafx.h +++ b/protocols/Weather/src/stdafx.h @@ -76,7 +76,9 @@ along with this program. If not, see . #define CLOUDY ID_STATUS_NA #define RAIN ID_STATUS_OCCUPIED #define FOG ID_STATUS_DND -#define SNOW ID_STATUS_INVISIBLE +#define SNOW ID_STATUS_FREECHAT +#define LIGHT ID_STATUS_INVISIBLE +#define THUNDER ID_STATUS_INVISIBLE #define UNAVAIL 40081 // status diff --git a/protocols/Weather/src/weather_conv.cpp b/protocols/Weather/src/weather_conv.cpp index 584cb4f1bd..9ce8a16ad3 100644 --- a/protocols/Weather/src/weather_conv.cpp +++ b/protocols/Weather/src/weather_conv.cpp @@ -316,8 +316,8 @@ void GetElev(wchar_t *tempchar, wchar_t *unit, wchar_t *str) // cond = the string for weather condition // return value = status for the icon (ONLINE, OFFLINE, etc) -static const wchar_t *statusStr[10] = { L"Fog", L"Snow", L"Rain", L"Partly Cloudy", L"Cloudy", L"Sunny", L"N/A" }; -static const WORD statusValue[10] = { FOG, SNOW, RAIN, PCLOUDY, CLOUDY, SUNNY, NA }; +static const wchar_t *statusStr[10] = { L"Lightning", L"Fog", L"Snow", L"Rain", L"Partly Cloudy", L"Cloudy", L"Sunny", L"N/A" }; +static const WORD statusValue[10] = { LIGHT, FOG, SNOW, RAIN, PCLOUDY, CLOUDY, SUNNY, NA }; WORD GetIcon(const wchar_t* cond, WIDATA *Data) { @@ -333,6 +333,9 @@ WORD GetIcon(const wchar_t* cond, WIDATA *Data) if (wcsstr(cond, L"sunny") || wcsstr(cond, L"clear") || wcsstr(cond, L"fair")) return SUNNY; + if (wcsstr(cond, L"thunder") || wcsstr(cond, L"t-storm")) + return LIGHT; + if (wcsstr(cond, L"cloud") || wcsstr(cond, L"overcast")) return CLOUDY; @@ -342,7 +345,7 @@ WORD GetIcon(const wchar_t* cond, WIDATA *Data) if (wcsstr(cond, L"snow") || wcsstr(cond, L"ice") || wcsstr(cond, L"freezing") || wcsstr(cond, L"wintry")) return SNOW; - if (wcsstr(cond, L"thunder") || wcsstr(cond, L"t-storm") || wcsstr(cond, L"drizzle") || wcsstr(cond, L"rain")) + if (wcsstr(cond, L"drizzle") || wcsstr(cond, L"rain")) return RAIN; // set the icon using langpack diff --git a/protocols/Weather/src/weather_svcs.cpp b/protocols/Weather/src/weather_svcs.cpp index ef021fb633..c3c9b4ab4b 100644 --- a/protocols/Weather/src/weather_svcs.cpp +++ b/protocols/Weather/src/weather_svcs.cpp @@ -62,7 +62,7 @@ INT_PTR WeatherGetCaps(WPARAM wParam, LPARAM) break; case PFLAGNUM_2: - ret = PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + ret = PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; break; case PFLAGNUM_4: @@ -70,7 +70,7 @@ INT_PTR WeatherGetCaps(WPARAM wParam, LPARAM) break; case PFLAGNUM_5: /* this is PFLAGNUM_5 change when alpha SDK is released */ - ret = PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + ret = PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; break; case PFLAG_UNIQUEIDTEXT: @@ -116,8 +116,8 @@ INT_PTR WeatherGetInfo(WPARAM, LPARAM lParam) } // avatars -static const wchar_t *statusStr[] = { L"Fog", L"Snow", L"Rain", L"PCloudy", L"Cloudy", L"Sunny", L"NA" }; -static const WORD statusValue[] = { FOG, SNOW, RAIN, PCLOUDY, CLOUDY, SUNNY, NA }; +static const wchar_t *statusStr[] = { L"Light", L"Fog", L"Snow", L"Rain", L"PCloudy", L"Cloudy", L"Sunny", L"NA" }; +static const WORD statusValue[] = { LIGHT, FOG, SNOW, RAIN, PCLOUDY, CLOUDY, SUNNY, NA }; INT_PTR WeatherGetAvatarInfo(WPARAM, LPARAM lParam) { diff --git a/protocols/WebView/src/webview_services.cpp b/protocols/WebView/src/webview_services.cpp index 898b4405ae..5371ff0780 100644 --- a/protocols/WebView/src/webview_services.cpp +++ b/protocols/WebView/src/webview_services.cpp @@ -207,7 +207,7 @@ INT_PTR GetCaps(WPARAM wParam, LPARAM) case PFLAGNUM_4: return PF4_NOCUSTOMAUTH | PF4_NOAUTHDENYREASON; case PFLAGNUM_5: - return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_UNIQUEIDTEXT: return (INT_PTR)Translate("Site URL"); default: diff --git a/protocols/YAMN/res/YAMN.rc b/protocols/YAMN/res/YAMN.rc index a9edf2e7f5..75cd039e7d 100644 --- a/protocols/YAMN/res/YAMN.rc +++ b/protocols/YAMN/res/YAMN.rc @@ -238,7 +238,8 @@ BEGIN CONTROL "Not available",IDC_CHECKST3,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,83,70,9 CONTROL "Occupied",IDC_CHECKST4,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,104,70,9 CONTROL "Do not disturb",IDC_CHECKST5,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,19,70,9 - CONTROL "Invisible",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,39,70,9 + CONTROL "Free for chat",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,39,70,9 + CONTROL "Invisible",IDC_CHECKST7,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,62,70,9 END IDD_YAMNOPT DIALOGEX 0, 0, 312, 121 diff --git a/protocols/YAMN/src/proto/pop3/pop3opt.cpp b/protocols/YAMN/src/proto/pop3/pop3opt.cpp index e22e966c57..fc111ef7c7 100644 --- a/protocols/YAMN/src/proto/pop3/pop3opt.cpp +++ b/protocols/YAMN/src/proto/pop3/pop3opt.cpp @@ -8,7 +8,7 @@ //-------------------------------------------------------------------------------------------------- -static BOOL Check0, Check1, Check2, Check3, Check4, Check5, Check6; +static BOOL Check0, Check1, Check2, Check3, Check4, Check5, Check6, Check7; static char DlgInput[MAX_PATH]; void CheckMenuItems(); @@ -192,6 +192,7 @@ BOOL DlgEnableAccountStatus(HWND hDlg, WPARAM wParam, LPARAM) EnableWindow(GetDlgItem(hDlg, IDC_CHECKST4), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_CHECKST5), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_CHECKST6), (BOOL)wParam); + EnableWindow(GetDlgItem(hDlg, IDC_CHECKST7), (BOOL)wParam); return TRUE; } @@ -239,7 +240,7 @@ BOOL DlgEnableAccount(HWND hDlg, WPARAM wParam, LPARAM) EnableWindow(GetDlgItem(hDlg, IDC_CHECKFSND), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_CHECKFMSG), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_CHECKFICO), (BOOL)wParam); - + EnableWindow(GetDlgItem(hDlg, IDC_CHECKSTART), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_CHECKFORCE), (BOOL)wParam); EnableWindow(GetDlgItem(hDlg, IDC_COMBOCP), (BOOL)wParam); @@ -274,6 +275,7 @@ BOOL DlgShowAccountStatus(HWND hDlg, WPARAM wParam, LPARAM lParam) CheckDlgButton(hDlg, IDC_CHECKST4, ActualAccount->StatusFlags & YAMN_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKST5, ActualAccount->StatusFlags & YAMN_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKST6, ActualAccount->StatusFlags & YAMN_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hDlg, IDC_CHECKST7, ActualAccount->StatusFlags & YAMN_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED); ReadDone(ActualAccount); } else { @@ -284,6 +286,7 @@ BOOL DlgShowAccountStatus(HWND hDlg, WPARAM wParam, LPARAM lParam) CheckDlgButton(hDlg, IDC_CHECKST4, BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKST5, BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKST6, BST_UNCHECKED); + CheckDlgButton(hDlg, IDC_CHECKST7, BST_CHECKED); } return TRUE; } @@ -389,7 +392,7 @@ BOOL DlgShowAccount(HWND hDlg, WPARAM wParam, LPARAM lParam) CheckDlgButton(hDlg, IDC_CHECKNOTLS, ActualAccount->Flags & YAMN_ACC_NOTLS ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKAPOP, ActualAccount->Flags & YAMN_ACC_APOP ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_AUTOBODY, ActualAccount->Flags & YAMN_ACC_BODY ? BST_CHECKED : BST_UNCHECKED); - + Check0 = ActualAccount->StatusFlags & YAMN_ACC_ST0; Check1 = ActualAccount->StatusFlags & YAMN_ACC_ST1; Check2 = ActualAccount->StatusFlags & YAMN_ACC_ST2; @@ -397,6 +400,7 @@ BOOL DlgShowAccount(HWND hDlg, WPARAM wParam, LPARAM lParam) Check4 = ActualAccount->StatusFlags & YAMN_ACC_ST4; Check5 = ActualAccount->StatusFlags & YAMN_ACC_ST5; Check6 = ActualAccount->StatusFlags & YAMN_ACC_ST6; + Check7 = ActualAccount->StatusFlags & YAMN_ACC_ST7; CheckDlgButton(hDlg, IDC_CHECKSTART, ActualAccount->StatusFlags & YAMN_ACC_STARTS ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_CHECKFORCE, ActualAccount->StatusFlags & YAMN_ACC_FORCE ? BST_CHECKED : BST_UNCHECKED); @@ -531,6 +535,7 @@ INT_PTR CALLBACK DlgProcPOP3AccStatusOpt(HWND hDlg, UINT msg, WPARAM wParam, LPA CheckDlgButton(hDlg, IDC_CHECKST4, BST_CHECKED); CheckDlgButton(hDlg, IDC_CHECKST5, BST_CHECKED); CheckDlgButton(hDlg, IDC_CHECKST6, BST_CHECKED); + CheckDlgButton(hDlg, IDC_CHECKST7, BST_CHECKED); } TranslateDialogDefault(hDlg); SendMessage(GetParent(hDlg), PSM_UNCHANGED, (WPARAM)hDlg, 0); @@ -546,6 +551,7 @@ INT_PTR CALLBACK DlgProcPOP3AccStatusOpt(HWND hDlg, UINT msg, WPARAM wParam, LPA Check4 = (IsDlgButtonChecked(hDlg, IDC_CHECKST4) == BST_CHECKED); Check5 = (IsDlgButtonChecked(hDlg, IDC_CHECKST5) == BST_CHECKED); Check6 = (IsDlgButtonChecked(hDlg, IDC_CHECKST6) == BST_CHECKED); + Check7 = (IsDlgButtonChecked(hDlg, IDC_CHECKST7) == BST_CHECKED); WindowList_BroadcastAsync(YAMNVar.MessageWnds, WM_YAMN_CHANGESTATUSOPTION, 0, 0); EndDialog(hDlg, 0); DestroyWindow(hDlg); @@ -708,6 +714,7 @@ INT_PTR CALLBACK DlgProcPOP3AccOpt(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP case IDC_CHECKST4: case IDC_CHECKST5: case IDC_CHECKST6: + case IDC_CHECKST7: case IDC_CHECKSTART: case IDC_CHECKFORCE: case IDC_EDITAPPPARAM: @@ -1012,6 +1019,7 @@ INT_PTR CALLBACK DlgProcPOP3AccOpt(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lP (Check4 ? YAMN_ACC_ST4 : 0) | (Check5 ? YAMN_ACC_ST5 : 0) | (Check6 ? YAMN_ACC_ST6 : 0) | + (Check7 ? YAMN_ACC_ST7 : 0) | (CheckStart ? YAMN_ACC_STARTS : 0) | (CheckForce ? YAMN_ACC_FORCE : 0); diff --git a/protocols/YAMN/src/resource.h b/protocols/YAMN/src/resource.h index cac621bb44..096cc42f60 100644 --- a/protocols/YAMN/src/resource.h +++ b/protocols/YAMN/src/resource.h @@ -43,6 +43,7 @@ #define IDC_CHECKST4 1023 #define IDC_CHECKST5 1024 #define IDC_CHECKST6 1025 +#define IDC_CHECKST7 1026 #define IDC_EDITAPP 1027 #define IDC_CHECKCONTACT 1030 #define IDC_CHECKCONTACTNICK 1031 diff --git a/protocols/YAMN/src/yamn.cpp b/protocols/YAMN/src/yamn.cpp index 1b4b9e4f01..d355ed3b13 100644 --- a/protocols/YAMN/src/yamn.cpp +++ b/protocols/YAMN/src/yamn.cpp @@ -160,6 +160,9 @@ void CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD) case ID_STATUS_OCCUPIED: DebugLog(SynchroFile, "TimerProc:ActualAccountSO-read enter status occupied\n"); break; + case ID_STATUS_FREECHAT: + DebugLog(SynchroFile, "TimerProc:ActualAccountSO-read enter status freechat\n"); + break; case ID_STATUS_INVISIBLE: DebugLog(SynchroFile, "TimerProc:ActualAccountSO-read enter status invisible\n"); break; @@ -177,7 +180,8 @@ void CALLBACK TimerProc(HWND, UINT, UINT_PTR, DWORD) ((ActualAccount->StatusFlags & YAMN_ACC_ST3) && (Status==ID_STATUS_DND)) || ((ActualAccount->StatusFlags & YAMN_ACC_ST4) && (Status==ID_STATUS_NA)) || ((ActualAccount->StatusFlags & YAMN_ACC_ST5) && (Status==ID_STATUS_OCCUPIED)) || - ((ActualAccount->StatusFlags & YAMN_ACC_ST6) && (Status==ID_STATUS_INVISIBLE)))) + ((ActualAccount->StatusFlags & YAMN_ACC_ST6) && (Status==ID_STATUS_FREECHAT)) || + ((ActualAccount->StatusFlags & YAMN_ACC_ST7) && (Status==ID_STATUS_INVISIBLE)))) { if ((!ActualAccount->Interval && !ActualAccount->TimeLeft) || ActualAccount->Plugin->Fcn->TimeoutFcnPtr==nullptr) diff --git a/src/core/stdautoaway/src/autoaway.cpp b/src/core/stdautoaway/src/autoaway.cpp index 6511746e2a..40f9c2779d 100644 --- a/src/core/stdautoaway/src/autoaway.cpp +++ b/src/core/stdautoaway/src/autoaway.cpp @@ -75,7 +75,7 @@ static int AutoAwayEvent(WPARAM, LPARAM lParam) status = ID_STATUS_AWAY; if (lParam & IDF_ISIDLE) { - if (pa->iRealStatus != ID_STATUS_ONLINE) { + if (pa->iRealStatus != ID_STATUS_ONLINE && pa->iRealStatus != ID_STATUS_FREECHAT) { Netlib_Logf(0, "%s: '%s' isn't online (%d), skipping", MODULENAME, pa->szModuleName, pa->iRealStatus); continue; } @@ -87,7 +87,7 @@ static int AutoAwayEvent(WPARAM, LPARAM lParam) } else { int oldstatus = g_plugin.getWord(pa->szModuleName, 0); - if (oldstatus != ID_STATUS_ONLINE) { + if (oldstatus != ID_STATUS_ONLINE && oldstatus != ID_STATUS_FREECHAT) { Netlib_Logf(0, "%s: '%s' wasn't online (%d), skipping", MODULENAME, pa->szModuleName, oldstatus); continue; } diff --git a/src/core/stdaway/src/sendmsg.cpp b/src/core/stdaway/src/sendmsg.cpp index bd4b8440ee..bd6e9c6446 100644 --- a/src/core/stdaway/src/sendmsg.cpp +++ b/src/core/stdaway/src/sendmsg.cpp @@ -34,6 +34,7 @@ static const wchar_t* GetDefaultMessage(int status) case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!"); case ID_STATUS_OCCUPIED: return TranslateT("Not right now."); case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?"); + case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!"); case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here."); case ID_STATUS_OFFLINE: return TranslateT("Nope, not here."); case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia."); @@ -52,6 +53,7 @@ static const char* StatusModeToDbSetting(int status, const char *suffix) case ID_STATUS_NA: prefix = "Na"; break; case ID_STATUS_DND: prefix = "Dnd"; break; case ID_STATUS_OCCUPIED: prefix = "Occupied"; break; + case ID_STATUS_FREECHAT: prefix = "FreeChat"; break; case ID_STATUS_ONLINE: prefix = "On"; break; case ID_STATUS_OFFLINE: prefix = "Off"; break; case ID_STATUS_INVISIBLE: prefix = "Inv"; break; @@ -334,7 +336,7 @@ static int StatusModeChange(WPARAM wParam, LPARAM lParam) static const int statusModes[] = { ID_STATUS_OFFLINE, ID_STATUS_ONLINE, ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, - ID_STATUS_INVISIBLE, ID_STATUS_IDLE + ID_STATUS_FREECHAT, ID_STATUS_INVISIBLE, ID_STATUS_IDLE }; struct AwayMsgInfo diff --git a/src/core/stdclist/src/clcopts.cpp b/src/core/stdclist/src/clcopts.cpp index c9070e91f3..ee4c3860f2 100644 --- a/src/core/stdclist/src/clcopts.cpp +++ b/src/core/stdclist/src/clcopts.cpp @@ -66,6 +66,7 @@ static const struct CheckBoxValues_t greyoutValues[] = { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb")}, + { PF2_FREECHAT, LPGENW("Free for chat") }, { PF2_INVISIBLE, LPGENW("Invisible") } }; @@ -77,7 +78,8 @@ static const struct CheckBoxValues_t offlineValues[] = { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb")}, - { PF2_INVISIBLE, LPGENW("Invisible") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, + { PF2_INVISIBLE, LPGENW("Invisible") } }; static void FillCheckBoxTree(HWND hwndTree, const struct CheckBoxValues_t *values, int nValues, DWORD style) diff --git a/src/core/stdclist/src/contact.cpp b/src/core/stdclist/src/contact.cpp index 3a561482d0..9b40331e2f 100644 --- a/src/core/stdclist/src/contact.cpp +++ b/src/core/stdclist/src/contact.cpp @@ -38,6 +38,7 @@ static statusModeOrder[] = { ID_STATUS_DND, 110 }, { ID_STATUS_NA, 450 }, { ID_STATUS_OCCUPIED, 100 }, + { ID_STATUS_FREECHAT, 0 }, { ID_STATUS_INVISIBLE, 20 } }; diff --git a/src/core/stdmsg/src/msgoptions.cpp b/src/core/stdmsg/src/msgoptions.cpp index e4ce31045b..5d8565a7a2 100644 --- a/src/core/stdmsg/src/msgoptions.cpp +++ b/src/core/stdmsg/src/msgoptions.cpp @@ -139,7 +139,8 @@ statusValues[] = { PF2_LONGAWAY, LPGENW("Not available") }, { PF2_LIGHTDND, LPGENW("Occupied") }, { PF2_HEAVYDND, LPGENW("Do not disturb") }, - { PF2_INVISIBLE, LPGENW("Invisible") }, + { PF2_FREECHAT, LPGENW("Free for chat") }, + { PF2_INVISIBLE, LPGENW("Invisible") } }; class COptionMainDlg : public CDlgBase diff --git a/src/core/stdmsg/src/msgs.cpp b/src/core/stdmsg/src/msgs.cpp index e78c57968a..50c98f7a98 100644 --- a/src/core/stdmsg/src/msgs.cpp +++ b/src/core/stdmsg/src/msgs.cpp @@ -108,6 +108,7 @@ static int SRMMStatusToPf2(int status) case ID_STATUS_DND: return PF2_HEAVYDND; case ID_STATUS_NA: return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; + case ID_STATUS_FREECHAT: return PF2_FREECHAT; case ID_STATUS_INVISIBLE: return PF2_INVISIBLE; case ID_STATUS_OFFLINE: return MODEF_OFFLINE; } diff --git a/src/core/stduseronline/src/useronline.cpp b/src/core/stduseronline/src/useronline.cpp index e1de0b8f03..1c3a6d3640 100644 --- a/src/core/stduseronline/src/useronline.cpp +++ b/src/core/stduseronline/src/useronline.cpp @@ -46,7 +46,7 @@ static int UserOnlineSettingChanged(WPARAM hContact, LPARAM lParam) } } - if (newStatus == ID_STATUS_ONLINE && oldStatus != ID_STATUS_ONLINE) { + if ((newStatus == ID_STATUS_ONLINE || newStatus == ID_STATUS_FREECHAT) && oldStatus != ID_STATUS_ONLINE && oldStatus != ID_STATUS_FREECHAT) { DWORD ticked = g_plugin.getDword(cws->szModule, GetTickCount()); // only play the sound (or show event) if this event happens at least 10 secs after the proto went from offline if (GetTickCount() - ticked > (1000 * 10)) { diff --git a/src/icons/proto_metacontacts/res/FFC.ico b/src/icons/proto_metacontacts/res/FFC.ico new file mode 100644 index 0000000000..94b2d4f21f Binary files /dev/null and b/src/icons/proto_metacontacts/res/FFC.ico differ diff --git a/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc b/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc index e39cda7890..50e13a3a29 100644 --- a/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc +++ b/src/icons/proto_metacontacts/res/Proto_MetaContacts.rc @@ -58,6 +58,7 @@ IDI_ICON4 ICON "Invisible.ico" IDI_ICON5 ICON "NA.ico" IDI_ICON6 ICON "DND.ico" IDI_ICON7 ICON "Occupied.ico" +IDI_ICON8 ICON "FFC.ico" #endif // Russian (Russia) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/icons/proto_metacontacts/src/resource.h b/src/icons/proto_metacontacts/src/resource.h index 5f167b1511..d90362ca11 100644 --- a/src/icons/proto_metacontacts/src/resource.h +++ b/src/icons/proto_metacontacts/src/resource.h @@ -5,6 +5,7 @@ #define IDI_ICON2 104 #define IDI_ICON1 105 #define IDI_ICON3 128 +#define IDI_ICON8 129 #define IDI_ICON4 130 #define IDI_ICON5 131 #define IDI_ICON6 158 diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index db270fefd9..90b54f150f 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -1310,7 +1310,8 @@ BEGIN MENUITEM "&Not available\tCtrl+3", ID_STATUS_NA MENUITEM "Occ&upied\tCtrl+4", ID_STATUS_OCCUPIED MENUITEM "&Do not disturb\tCtrl+5", ID_STATUS_DND - MENUITEM "&Invisible\tCtrl+6", ID_STATUS_INVISIBLE + MENUITEM "&Free for chat\tCtrl+6", ID_STATUS_FREECHAT + MENUITEM "&Invisible\tCtrl+7", ID_STATUS_INVISIBLE END END diff --git a/src/mir_app/src/clcidents.cpp b/src/mir_app/src/clcidents.cpp index 931975a599..0d4e3952b9 100644 --- a/src/mir_app/src/clcidents.cpp +++ b/src/mir_app/src/clcidents.cpp @@ -246,6 +246,7 @@ MIR_APP_DLL(int) Clist_GetGeneralizedStatus(char **szProto) int iStatusWeight; switch (pa->iRealStatus) { + case ID_STATUS_FREECHAT: iStatusWeight = 110; break; case ID_STATUS_ONLINE: iStatusWeight = 100; break; case ID_STATUS_OCCUPIED: iStatusWeight = 60; break; case ID_STATUS_DND: iStatusWeight = 40; break; diff --git a/src/mir_app/src/clcutils.cpp b/src/mir_app/src/clcutils.cpp index 980a424d57..2ba762e39a 100644 --- a/src/mir_app/src/clcutils.cpp +++ b/src/mir_app/src/clcutils.cpp @@ -624,6 +624,7 @@ MIR_APP_DLL(int) Clist_ClcStatusToPf2(int status) case ID_STATUS_DND: return PF2_HEAVYDND; case ID_STATUS_NA: return PF2_LONGAWAY; case ID_STATUS_OCCUPIED: return PF2_LIGHTDND; + case ID_STATUS_FREECHAT: return PF2_FREECHAT; case ID_STATUS_INVISIBLE: return PF2_INVISIBLE; case ID_STATUS_OFFLINE: return MODEF_OFFLINE; } diff --git a/src/mir_app/src/clistmod.cpp b/src/mir_app/src/clistmod.cpp index 70a5fde409..ed2f250eb5 100644 --- a/src/mir_app/src/clistmod.cpp +++ b/src/mir_app/src/clistmod.cpp @@ -74,6 +74,9 @@ MIR_APP_DLL(wchar_t*) Clist_GetStatusModeDescription(int mode, int flags) case ID_STATUS_OCCUPIED: descr = LPGENW("Occupied"); break; + case ID_STATUS_FREECHAT: + descr = LPGENW("Free for chat"); + break; case ID_STATUS_INVISIBLE: descr = LPGENW("Invisible"); break; diff --git a/src/mir_app/src/menu_clist.cpp b/src/mir_app/src/menu_clist.cpp index e266b712d5..181df23c64 100644 --- a/src/mir_app/src/menu_clist.cpp +++ b/src/mir_app/src/menu_clist.cpp @@ -63,6 +63,7 @@ MStatus g_statuses[MAX_STATUS_COUNT] = { ID_STATUS_NA, SKINICON_STATUS_NA, PF2_LONGAWAY }, { ID_STATUS_OCCUPIED, SKINICON_STATUS_OCCUPIED, PF2_LIGHTDND }, { ID_STATUS_DND, SKINICON_STATUS_DND, PF2_HEAVYDND }, + { ID_STATUS_FREECHAT, SKINICON_STATUS_FREE4CHAT, PF2_FREECHAT }, { ID_STATUS_INVISIBLE, SKINICON_STATUS_INVISIBLE, PF2_INVISIBLE }, }; diff --git a/src/mir_app/src/meta_services.cpp b/src/mir_app/src/meta_services.cpp index 7b89a95b1a..ad63a46862 100644 --- a/src/mir_app/src/meta_services.cpp +++ b/src/mir_app/src/meta_services.cpp @@ -56,16 +56,16 @@ INT_PTR Meta_GetCaps(WPARAM wParam, LPARAM) return PF1_IM | PF1_CHAT | PF1_FILESEND | PF1_MODEMSGRECV | PF1_NUMERICUSERID; case PFLAGNUM_2: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_3: - return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_ONLINE | PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAGNUM_4: return PF4_SUPPORTTYPING | PF4_AVATARS; case PFLAGNUM_5: - return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND; + return PF2_INVISIBLE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND | PF2_HEAVYDND | PF2_FREECHAT; case PFLAG_MAXLENOFMESSAGE: return 2000; diff --git a/src/mir_app/src/meta_utils.cpp b/src/mir_app/src/meta_utils.cpp index 2b7ccab6a2..75e02fa608 100644 --- a/src/mir_app/src/meta_utils.cpp +++ b/src/mir_app/src/meta_utils.cpp @@ -209,11 +209,12 @@ MCONTACT Meta_GetMostOnline(DBCachedContact *cc) static int GetStatusPriority(int status) { switch (status) { - case ID_STATUS_AWAY: return 1; - case ID_STATUS_OCCUPIED: return 2; - case ID_STATUS_NA: return 3; - case ID_STATUS_DND: return 4; - case ID_STATUS_OFFLINE: return 5; + case ID_STATUS_FREECHAT: return 1; + case ID_STATUS_AWAY: return 2; + case ID_STATUS_OCCUPIED: return 3; + case ID_STATUS_NA: return 4; + case ID_STATUS_DND: return 5; + case ID_STATUS_OFFLINE: return 6; } return 0; diff --git a/src/mir_app/src/skinicons.cpp b/src/mir_app/src/skinicons.cpp index b5ecd34c88..8f7f7c7624 100644 --- a/src/mir_app/src/skinicons.cpp +++ b/src/mir_app/src/skinicons.cpp @@ -108,7 +108,8 @@ static struct StandardIconDescription statusIcons[] = { ID_STATUS_NA, LPGEN("Not available"), -IDI_NA, PF2_LONGAWAY }, { ID_STATUS_OCCUPIED, LPGEN("Occupied"), -IDI_OCCUPIED, PF2_LIGHTDND }, { ID_STATUS_DND, LPGEN("Do not disturb"), -IDI_DND, PF2_HEAVYDND }, - { ID_STATUS_INVISIBLE, LPGEN("Invisible"), -IDI_INVISIBLE, PF2_INVISIBLE }, + { ID_STATUS_FREECHAT, LPGEN("Free for chat"), -IDI_FREE4CHAT, PF2_FREECHAT }, + { ID_STATUS_INVISIBLE, LPGEN("Invisible"), -IDI_INVISIBLE, PF2_INVISIBLE } }; const char mainIconsFmt[] = "core_main_"; -- cgit v1.2.3