summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/delphi/m_protosvc.inc1
-rw-r--r--include/delphi/m_skin.inc3
-rw-r--r--include/delphi/statusmodes.inc3
-rw-r--r--include/m_protosvc.h2
-rw-r--r--include/m_skin.h3
-rw-r--r--include/statusmodes.h3
-rw-r--r--plugins/Actman/services.ini10
-rw-r--r--plugins/BASS_interface/res/Bass.rc3
-rw-r--r--plugins/BASS_interface/src/Main.cpp8
-rw-r--r--plugins/BASS_interface/src/Resource.h1
-rw-r--r--plugins/BossKeyPlus/src/BossKey.cpp2
-rw-r--r--plugins/BossKeyPlus/src/stdafx.h2
-rw-r--r--plugins/BuddyPounce/res/resource.rc1
-rw-r--r--plugins/BuddyPounce/src/dialog.cpp12
-rw-r--r--plugins/BuddyPounce/src/main.cpp2
-rw-r--r--plugins/BuddyPounce/src/resource.h3
-rw-r--r--plugins/BuddyPounce/src/stdafx.h3
-rw-r--r--plugins/Clist_blind/src/clcopts.cpp2
-rw-r--r--plugins/Clist_blind/src/contact.cpp3
-rw-r--r--plugins/Clist_modern/res/MicroChat.icobin0 -> 1150 bytes
-rw-r--r--plugins/Clist_modern/res/chat.icobin0 -> 1150 bytes
-rw-r--r--plugins/Clist_modern/res/resource.rc4
-rw-r--r--plugins/Clist_modern/src/modern_clc.h1
-rw-r--r--plugins/Clist_modern/src/modern_clcmsgs.cpp1
-rw-r--r--plugins/Clist_modern/src/modern_clcopts.cpp7
-rw-r--r--plugins/Clist_modern/src/modern_clcpaint.cpp3
-rw-r--r--plugins/Clist_modern/src/modern_clcpaint.h1
-rw-r--r--plugins/Clist_modern/src/modern_clisttray.cpp1
-rw-r--r--plugins/Clist_modern/src/modern_clui.cpp6
-rw-r--r--plugins/Clist_modern/src/modern_contact.cpp3
-rw-r--r--plugins/Clist_modern/src/modern_rowheight_funcs.cpp2
-rw-r--r--plugins/Clist_modern/src/resource.h2
-rw-r--r--plugins/Clist_nicer/src/clcopts.cpp4
-rw-r--r--plugins/Clist_nicer/src/contact.cpp3
-rw-r--r--plugins/Clist_nicer/src/extBackg.cpp4
-rw-r--r--plugins/CmdLine/src/mimcmd_data.h2
-rw-r--r--plugins/CmdLine/src/mimcmd_handlers.cpp2
-rw-r--r--plugins/ExternalAPI/m_account.h3
-rw-r--r--plugins/FloatingContacts/src/main.cpp1
-rw-r--r--plugins/KeyboardNotify/res/resources.rc3
-rw-r--r--plugins/KeyboardNotify/src/constants.h3
-rw-r--r--plugins/KeyboardNotify/src/main.cpp1
-rw-r--r--plugins/KeyboardNotify/src/options.cpp4
-rw-r--r--plugins/KeyboardNotify/src/resource.h1
-rw-r--r--plugins/MirandaG15/src/CAppletManager.cpp2
-rw-r--r--plugins/MirandaG15/src/CAppletManager.h2
-rw-r--r--plugins/MirandaG15/src/CContactList.cpp3
-rw-r--r--plugins/MyDetails/res/resource.rc1
-rw-r--r--plugins/MyDetails/src/data.cpp1
-rw-r--r--plugins/MyDetails/src/frame.cpp2
-rw-r--r--plugins/NewAwaySysMod/res/NewAwaySys.rc5
-rw-r--r--plugins/NewAwaySysMod/src/AwayOpt.cpp12
-rw-r--r--plugins/NewAwaySysMod/src/AwaySys.cpp1
-rw-r--r--plugins/NewAwaySysMod/src/Client.cpp1
-rw-r--r--plugins/NewAwaySysMod/src/MsgEventAdded.cpp1
-rw-r--r--plugins/NewAwaySysMod/src/MsgTree.cpp2
-rw-r--r--plugins/NewAwaySysMod/src/Properties.cpp1
-rw-r--r--plugins/NewAwaySysMod/src/Properties.h4
-rw-r--r--plugins/NewAwaySysMod/src/resource.h10
-rw-r--r--plugins/NewAwaySysMod/src/stdafx.h1
-rw-r--r--plugins/NewXstatusNotify/res/resource.rc20
-rw-r--r--plugins/NewXstatusNotify/src/indsnd.cpp2
-rw-r--r--plugins/NewXstatusNotify/src/main.cpp12
-rw-r--r--plugins/NewXstatusNotify/src/resource.h14
-rw-r--r--plugins/NewXstatusNotify/src/utils.cpp1
-rw-r--r--plugins/NotifyAnything/src/main.cpp1
-rw-r--r--plugins/Nudge/res/resource.rc3
-rw-r--r--plugins/Nudge/src/main.cpp4
-rw-r--r--plugins/Nudge/src/nudge.h3
-rw-r--r--plugins/Nudge/src/options.cpp5
-rw-r--r--plugins/Nudge/src/resource.h1
-rw-r--r--plugins/Popup/res/resource.rc2
-rw-r--r--plugins/Popup/src/opt_class.cpp14
-rw-r--r--plugins/Popup/src/opt_gen.cpp3
-rw-r--r--plugins/Popup/src/resource.h2
-rw-r--r--plugins/Scriver/src/msgoptions.cpp1
-rw-r--r--plugins/Scriver/src/msgs.cpp2
-rw-r--r--plugins/SeenPlugin/res/resource.rc3
-rw-r--r--plugins/SeenPlugin/src/utils.cpp5
-rw-r--r--plugins/SimpleAR/src/Main.cpp8
-rw-r--r--plugins/SimpleAR/src/Options.cpp12
-rw-r--r--plugins/SimpleStatusMsg/src/main.cpp5
-rw-r--r--plugins/SimpleStatusMsg/src/utils.cpp2
-rw-r--r--plugins/SkypeStatusChange/src/main.cpp3
-rw-r--r--plugins/SkypeStatusChange/src/stdafx.h2
-rw-r--r--plugins/StatusChange/res/resource.rc4
-rw-r--r--plugins/StatusChange/src/main.cpp13
-rw-r--r--plugins/StatusChange/src/resource.h6
-rw-r--r--plugins/StatusChange/src/stdafx.h1
-rw-r--r--plugins/StatusManager/src/advancedautoaway.cpp2
-rw-r--r--plugins/StatusManager/src/commonstatus.cpp5
-rw-r--r--plugins/StatusManager/src/ss_options.cpp1
-rw-r--r--plugins/StatusManager/src/startupstatus.cpp2
-rw-r--r--plugins/TabSRMM/res/resource.rc1
-rw-r--r--plugins/TabSRMM/src/sendlater.cpp2
-rw-r--r--plugins/Utils.pas/protocols.pas9
-rw-r--r--plugins/Watrack/status/i_status.inc1
-rw-r--r--plugins/WinterSpeak/res/Speak.rc2
-rw-r--r--plugins/WinterSpeak/src/AnnounceDatabase.h1
-rw-r--r--plugins/WinterSpeak/src/AnnounceDialog.cpp3
-rw-r--r--plugins/WinterSpeak/src/ConfigDatabase.h1
-rw-r--r--plugins/WinterSpeak/src/DialogConfigActive.cpp3
-rw-r--r--plugins/WinterSpeak/src/SpeakAnnounce.cpp3
-rw-r--r--plugins/WinterSpeak/src/SpeakConfig.cpp3
-rw-r--r--plugins/WinterSpeak/src/UserInformation.cpp1
-rw-r--r--plugins/WinterSpeak/src/resource.h2
-rw-r--r--plugins/XSoundNotify/src/xsn_main.cpp3
-rw-r--r--plugins/YARelay/res/yaRelay.rc4
-rw-r--r--plugins/YARelay/src/main.cpp1
-rw-r--r--plugins/YARelay/src/options.cpp6
-rw-r--r--plugins/YARelay/src/resource.h1
-rw-r--r--plugins/YARelay/src/stdafx.h3
-rw-r--r--plugins/ZeroNotification/src/options.cpp3
-rw-r--r--protocols/Discord/proto_discord/src/resource.h1
-rw-r--r--protocols/Dummy/proto_dummy/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--protocols/Dummy/proto_dummy/res/Proto_Dummy.rc1
-rw-r--r--protocols/Dummy/proto_dummy/src/resource.h1
-rw-r--r--protocols/Dummy/src/dummy_proto.cpp4
-rw-r--r--protocols/EmLanProto/src/amdproto.cpp4
-rw-r--r--protocols/EmLanProto/src/mlan.cpp6
-rw-r--r--protocols/EmLanProto/src/mlan.h1
-rw-r--r--protocols/FacebookRM/src/json.cpp2
-rw-r--r--protocols/FacebookRM/src/proto.cpp3
-rw-r--r--protocols/Gadu-Gadu/proto_gg/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--protocols/Gadu-Gadu/proto_gg/res/Proto_GG.rc1
-rw-r--r--protocols/Gadu-Gadu/proto_gg/src/resource.h1
-rw-r--r--protocols/Gadu-Gadu/src/core.cpp19
-rw-r--r--protocols/Gadu-Gadu/src/dialogs.cpp7
-rw-r--r--protocols/Gadu-Gadu/src/gg_proto.cpp8
-rw-r--r--protocols/Gadu-Gadu/src/gg_proto.h1
-rw-r--r--protocols/Gadu-Gadu/src/services.cpp5
-rw-r--r--protocols/ICQ-WIM/proto_icq/src/resource.h1
-rw-r--r--protocols/ICQ-WIM/proto_mra/src/resource.h1
-rw-r--r--protocols/ICQCorp/src/protocol.cpp10
-rw-r--r--protocols/ICQCorp/src/protocol.h2
-rw-r--r--protocols/ICQCorp/src/services.cpp4
-rw-r--r--protocols/IRCG/src/commandmonitor.cpp1
-rw-r--r--protocols/IRCG/src/ircproto.cpp6
-rw-r--r--protocols/IRCG/src/options.cpp1
-rw-r--r--protocols/JabberG/proto_jabber/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--protocols/JabberG/proto_jabber/res/Proto_Jabber.rc1
-rw-r--r--protocols/JabberG/proto_jabber/src/resource.h1
-rw-r--r--protocols/JabberG/src/jabber_chat.cpp5
-rw-r--r--protocols/JabberG/src/jabber_groupchat.cpp1
-rw-r--r--protocols/JabberG/src/jabber_icolib.cpp3
-rw-r--r--protocols/JabberG/src/jabber_list.cpp12
-rw-r--r--protocols/JabberG/src/jabber_menu.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_misc.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_proto.cpp9
-rw-r--r--protocols/JabberG/src/jabber_rc.cpp5
-rw-r--r--protocols/JabberG/src/jabber_svc.cpp3
-rwxr-xr-xprotocols/JabberG/src/jabber_thread.cpp1
-rwxr-xr-xprotocols/JabberG/src/jabber_util.cpp7
-rwxr-xr-xprotocols/JabberG/src/stdafx.h1
-rw-r--r--protocols/MSN/src/msn_misc.cpp1
-rw-r--r--protocols/Non-IM Contact/res/resource.rc1
-rw-r--r--protocols/Non-IM Contact/src/contactinfo.cpp4
-rw-r--r--protocols/Non-IM Contact/src/resource.h3
-rw-r--r--protocols/Non-IM Contact/src/services.cpp2
-rw-r--r--protocols/Sametime/src/sametime_session.cpp1
-rw-r--r--protocols/SkypeWeb/src/skype_proto.cpp4
-rw-r--r--protocols/Steam/proto_steam/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--protocols/Steam/proto_steam/res/Proto_Steam.rc1
-rw-r--r--protocols/Steam/proto_steam/src/resource.h1
-rw-r--r--protocols/Steam/src/steam_contacts.cpp7
-rw-r--r--protocols/Steam/src/steam_proto.cpp4
-rw-r--r--protocols/Steam/src/steam_utils.cpp6
-rw-r--r--protocols/Tox/src/tox_utils.cpp4
-rw-r--r--protocols/Twitter/src/proto.cpp6
-rw-r--r--protocols/Weather/src/stdafx.h4
-rw-r--r--protocols/Weather/src/weather_conv.cpp9
-rw-r--r--protocols/Weather/src/weather_svcs.cpp8
-rw-r--r--protocols/WebView/src/webview_services.cpp2
-rw-r--r--protocols/YAMN/res/YAMN.rc3
-rw-r--r--protocols/YAMN/src/proto/pop3/pop3opt.cpp14
-rw-r--r--protocols/YAMN/src/resource.h1
-rw-r--r--protocols/YAMN/src/yamn.cpp6
-rw-r--r--src/core/stdautoaway/src/autoaway.cpp4
-rw-r--r--src/core/stdaway/src/sendmsg.cpp4
-rw-r--r--src/core/stdclist/src/clcopts.cpp4
-rw-r--r--src/core/stdclist/src/contact.cpp1
-rw-r--r--src/core/stdmsg/src/msgoptions.cpp3
-rw-r--r--src/core/stdmsg/src/msgs.cpp1
-rw-r--r--src/core/stduseronline/src/useronline.cpp2
-rw-r--r--src/icons/proto_metacontacts/res/FFC.icobin0 -> 5430 bytes
-rw-r--r--src/icons/proto_metacontacts/res/Proto_MetaContacts.rc1
-rw-r--r--src/icons/proto_metacontacts/src/resource.h1
-rw-r--r--src/mir_app/res/resource.rc3
-rw-r--r--src/mir_app/src/clcidents.cpp1
-rw-r--r--src/mir_app/src/clcutils.cpp1
-rw-r--r--src/mir_app/src/clistmod.cpp3
-rw-r--r--src/mir_app/src/menu_clist.cpp1
-rw-r--r--src/mir_app/src/meta_services.cpp6
-rw-r--r--src/mir_app/src/meta_utils.cpp11
-rw-r--r--src/mir_app/src/skinicons.cpp3
195 files changed, 526 insertions, 153 deletions
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:<proto>/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:<proto>/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<CMPlugin>
#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<CMPlugin>
#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
--- /dev/null
+++ b/plugins/Clist_modern/res/MicroChat.ico
Binary files differ
diff --git a/plugins/Clist_modern/res/chat.ico b/plugins/Clist_modern/res/chat.ico
new file mode 100644
index 0000000000..8f065e41dc
--- /dev/null
+++ b/plugins/Clist_modern/res/chat.ico
Binary files 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 <status> [<account>].\nPossible values for <status> are: offline, online, away, dnd, na, occupied, invisible.\n<Account> 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 <status> [<account>].\nPossible values for <status> are: offline, online, away, dnd, na, occupied, freechat, invisible.\n<Account> 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 <message> [<account>].\n<Message> is the new away message.\n<Account> 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 <xStatus> [<account>].\n<xStatus> is the new extended status to set. Possible values are: ...\n<Account> 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
--- /dev/null
+++ b/protocols/Dummy/proto_dummy/res/FFC.ico
Binary files 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::vector<facebook_messag
// const JSONNode &ol_ = itNodes["ol"]; // possible values: -1 (when goes to offline), 0 (when goes back online) (something more?)
// const JSONNode &p_ = itNodes["p"]; // class with fbAppStatus, messengerStatus, otherStatus, status, webStatus
- int status = ID_STATUS_INVISIBLE; // INVISIBLE to easily spot some problem, as we expect it will always be p==0 or p==2 below
+ int status = ID_STATUS_FREECHAT; // FREECHAT to easily spot some problem, as we expect it will always be p==0 or p==2 below
if (a_) {
int a = a_.as_int();
diff --git a/protocols/FacebookRM/src/proto.cpp b/protocols/FacebookRM/src/proto.cpp
index 916614a34f..294a3411b6 100644
--- a/protocols/FacebookRM/src/proto.cpp
+++ b/protocols/FacebookRM/src/proto.cpp
@@ -176,6 +176,9 @@ int FacebookProto::SetStatus(int new_status)
case ID_STATUS_NA:
m_iDesiredStatus = ID_STATUS_AWAY;
break;
+ case ID_STATUS_FREECHAT:
+ m_iDesiredStatus = ID_STATUS_ONLINE;
+ break;
default:
m_iDesiredStatus = getByte(FACEBOOK_KEY_MAP_STATUSES, DEFAULT_MAP_STATUSES) ? ID_STATUS_INVISIBLE : ID_STATUS_AWAY;
break;
diff --git a/protocols/Gadu-Gadu/proto_gg/res/FFC.ico b/protocols/Gadu-Gadu/proto_gg/res/FFC.ico
new file mode 100644
index 0000000000..d145072f08
--- /dev/null
+++ b/protocols/Gadu-Gadu/proto_gg/res/FFC.ico
Binary files differ
diff --git a/protocols/Gadu-Gadu/proto_gg/res/Proto_GG.rc b/protocols/Gadu-Gadu/proto_gg/res/Proto_GG.rc
index f6a19debab..3a9e85cae0 100644
--- a/protocols/Gadu-Gadu/proto_gg/res/Proto_GG.rc
+++ b/protocols/Gadu-Gadu/proto_gg/res/Proto_GG.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/Gadu-Gadu/proto_gg/src/resource.h b/protocols/Gadu-Gadu/proto_gg/src/resource.h
index f3e095d876..16c501a888 100644
--- a/protocols/Gadu-Gadu/proto_gg/src/resource.h
+++ b/protocols/Gadu-Gadu/proto_gg/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/Gadu-Gadu/src/core.cpp b/protocols/Gadu-Gadu/src/core.cpp
index ba9d0597b2..1ed90ba67c 100644
--- a/protocols/Gadu-Gadu/src/core.cpp
+++ b/protocols/Gadu-Gadu/src/core.cpp
@@ -98,6 +98,17 @@ void GaduProto::disconnect()
}
break;
+ case ID_STATUS_FREECHAT:
+ gg_EnterCriticalSection(&modemsg_mutex, "disconnect", 9, "modemsg_mutex", 1);
+ szMsg = mir_utf8encodeW(modemsg.freechat);
+ gg_LeaveCriticalSection(&modemsg_mutex, "disconnect", 9, 1, "modemsg_mutex", 1);
+ if (!szMsg && !db_get_s(0, "SRAway", gg_status2db(ID_STATUS_FREECHAT, "Default"), &dbv, DBVT_WCHAR)) {
+ if (dbv.pwszVal && *(dbv.pwszVal))
+ szMsg = mir_utf8encodeW(dbv.pwszVal);
+ db_free(&dbv);
+ }
+ break;
+
case ID_STATUS_INVISIBLE:
gg_EnterCriticalSection(&modemsg_mutex, "disconnect", 10, "modemsg_mutex", 1);
szMsg = mir_utf8encodeW(modemsg.invisible);
@@ -1536,6 +1547,7 @@ int GaduProto::status_m2gg(int status, int descr)
case ID_STATUS_ONLINE: return GG_STATUS_AVAIL_DESCR | mask;
case ID_STATUS_AWAY: return GG_STATUS_BUSY_DESCR | mask;
case ID_STATUS_DND: return GG_STATUS_DND_DESCR | mask;
+ case ID_STATUS_FREECHAT: return GG_STATUS_FFC_DESCR | mask;
case ID_STATUS_INVISIBLE: return GG_STATUS_INVISIBLE_DESCR | mask;
default: return GG_STATUS_BUSY_DESCR | mask;
}
@@ -1546,6 +1558,7 @@ int GaduProto::status_m2gg(int status, int descr)
case ID_STATUS_ONLINE: return GG_STATUS_AVAIL | mask;
case ID_STATUS_AWAY: return GG_STATUS_BUSY | mask;
case ID_STATUS_DND: return GG_STATUS_DND | mask;
+ case ID_STATUS_FREECHAT: return GG_STATUS_FFC | mask;
case ID_STATUS_INVISIBLE: return GG_STATUS_INVISIBLE | mask;
default: return GG_STATUS_BUSY | mask;
}
@@ -1569,8 +1582,6 @@ int GaduProto::status_gg2m(int status)
case GG_STATUS_AVAIL:
case GG_STATUS_AVAIL_DESCR:
- case GG_STATUS_FFC:
- case GG_STATUS_FFC_DESCR:
return ID_STATUS_ONLINE;
case GG_STATUS_BUSY:
@@ -1580,6 +1591,10 @@ int GaduProto::status_gg2m(int status)
case GG_STATUS_DND:
case GG_STATUS_DND_DESCR:
return ID_STATUS_DND;
+
+ case GG_STATUS_FFC:
+ case GG_STATUS_FFC_DESCR:
+ return ID_STATUS_FREECHAT;
case GG_STATUS_INVISIBLE:
case GG_STATUS_INVISIBLE_DESCR:
diff --git a/protocols/Gadu-Gadu/src/dialogs.cpp b/protocols/Gadu-Gadu/src/dialogs.cpp
index a9d5bb73c9..4302ba3cbd 100644
--- a/protocols/Gadu-Gadu/src/dialogs.cpp
+++ b/protocols/Gadu-Gadu/src/dialogs.cpp
@@ -263,6 +263,7 @@ static INT_PTR CALLBACK gg_genoptsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam,
SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(ID_STATUS_ONLINE, 0));
SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(ID_STATUS_AWAY, 0));
SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(ID_STATUS_DND, 0));
+ SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(ID_STATUS_FREECHAT, 0));
SendDlgItemMessage(hwndDlg, IDC_LEAVESTATUS, CB_ADDSTRING, 0, (LPARAM)Clist_GetStatusModeDescription(ID_STATUS_INVISIBLE, 0));
switch (gg->getWord(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<GaduProto>
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
--- /dev/null
+++ b/protocols/JabberG/proto_jabber/res/FFC.ico
Binary files 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
--- /dev/null
+++ b/protocols/Steam/proto_steam/res/FFC.ico
Binary files 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 <http://www.gnu.org/licenses/>.
#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
--- /dev/null
+++ b/src/icons/proto_metacontacts/res/FFC.ico
Binary files 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_";