From 21549db08d22a6e41443799b917525da1dbf9853 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 10 Aug 2012 10:35:58 +0000 Subject: - SRMM, Chat & Clist_Classic made standard git-svn-id: http://svn.miranda-ng.org/main/trunk@1422 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Chat/chat_10.vcxproj | 235 --- plugins/Chat/chat_10.vcxproj.filters | 86 - plugins/Chat/docs/Chat_Readme.txt | 82 - plugins/Chat/docs/Chat_license.txt | 340 ---- plugins/Chat/docs/chat-translation.txt | 300 ---- plugins/Chat/res/1.ico | Bin 1742 -> 0 bytes plugins/Chat/res/2.ico | Bin 1742 -> 0 bytes plugins/Chat/res/3.ico | Bin 1742 -> 0 bytes plugins/Chat/res/4.ico | Bin 1742 -> 0 bytes plugins/Chat/res/5.ico | Bin 1742 -> 0 bytes plugins/Chat/res/6.ico | Bin 1742 -> 0 bytes plugins/Chat/res/action.ico | Bin 2550 -> 0 bytes plugins/Chat/res/addmode.ico | Bin 2550 -> 0 bytes plugins/Chat/res/bkgcolor.ico | Bin 2550 -> 0 bytes plugins/Chat/res/blank.ico | Bin 318 -> 0 bytes plugins/Chat/res/bold.ico | Bin 2550 -> 0 bytes plugins/Chat/res/chat.rc | 455 ------ plugins/Chat/res/close.ico | Bin 2550 -> 0 bytes plugins/Chat/res/color.ico | Bin 2550 -> 0 bytes plugins/Chat/res/filter.ico | Bin 2550 -> 0 bytes plugins/Chat/res/filter2.ico | Bin 2550 -> 0 bytes plugins/Chat/res/highlight.ico | Bin 2550 -> 0 bytes plugins/Chat/res/history.ico | Bin 6830 -> 0 bytes plugins/Chat/res/info.ico | Bin 2550 -> 0 bytes plugins/Chat/res/italics.ico | Bin 2550 -> 0 bytes plugins/Chat/res/join.ico | Bin 2550 -> 0 bytes plugins/Chat/res/kick.ico | Bin 2550 -> 0 bytes plugins/Chat/res/message.ico | Bin 2550 -> 0 bytes plugins/Chat/res/messageout.ico | Bin 2550 -> 0 bytes plugins/Chat/res/nick.ico | Bin 2550 -> 0 bytes plugins/Chat/res/nicklist.ico | Bin 2550 -> 0 bytes plugins/Chat/res/nicklist2.ico | Bin 2550 -> 0 bytes plugins/Chat/res/notice.ico | Bin 2550 -> 0 bytes plugins/Chat/res/overlay.ico | Bin 2550 -> 0 bytes plugins/Chat/res/part.ico | Bin 2550 -> 0 bytes plugins/Chat/res/quit.ico | Bin 2550 -> 0 bytes plugins/Chat/res/removestatus.ico | Bin 2550 -> 0 bytes plugins/Chat/res/smiley.ico | Bin 2550 -> 0 bytes plugins/Chat/res/smileyc.ico | Bin 2038 -> 0 bytes plugins/Chat/res/tag1.ico | Bin 1590 -> 0 bytes plugins/Chat/res/tag2.ico | Bin 4726 -> 0 bytes plugins/Chat/res/topic.ico | Bin 2550 -> 0 bytes plugins/Chat/res/topicbut.ico | Bin 2550 -> 0 bytes plugins/Chat/res/underline.ico | Bin 2550 -> 0 bytes plugins/Chat/res/version.rc | 56 - plugins/Chat/res/window.ico | Bin 10086 -> 0 bytes plugins/Chat/src/chat.h | 552 ------- plugins/Chat/src/clist.cpp | 360 ----- plugins/Chat/src/colorchooser.cpp | 266 ---- plugins/Chat/src/log.cpp | 712 --------- plugins/Chat/src/main.cpp | 288 ---- plugins/Chat/src/manager.cpp | 1611 ------------------- plugins/Chat/src/message.cpp | 356 ----- plugins/Chat/src/options.cpp | 1123 ------------- plugins/Chat/src/resource.h | 141 -- plugins/Chat/src/richutil.cpp | 293 ---- plugins/Chat/src/richutil.h | 55 - plugins/Chat/src/services.cpp | 874 ---------- plugins/Chat/src/tools.cpp | 917 ----------- plugins/Chat/src/version.h | 3 - plugins/Chat/src/window.cpp | 2725 -------------------------------- 61 files changed, 11830 deletions(-) delete mode 100644 plugins/Chat/chat_10.vcxproj delete mode 100644 plugins/Chat/chat_10.vcxproj.filters delete mode 100644 plugins/Chat/docs/Chat_Readme.txt delete mode 100644 plugins/Chat/docs/Chat_license.txt delete mode 100644 plugins/Chat/docs/chat-translation.txt delete mode 100644 plugins/Chat/res/1.ico delete mode 100644 plugins/Chat/res/2.ico delete mode 100644 plugins/Chat/res/3.ico delete mode 100644 plugins/Chat/res/4.ico delete mode 100644 plugins/Chat/res/5.ico delete mode 100644 plugins/Chat/res/6.ico delete mode 100644 plugins/Chat/res/action.ico delete mode 100644 plugins/Chat/res/addmode.ico delete mode 100644 plugins/Chat/res/bkgcolor.ico delete mode 100644 plugins/Chat/res/blank.ico delete mode 100644 plugins/Chat/res/bold.ico delete mode 100644 plugins/Chat/res/chat.rc delete mode 100644 plugins/Chat/res/close.ico delete mode 100644 plugins/Chat/res/color.ico delete mode 100644 plugins/Chat/res/filter.ico delete mode 100644 plugins/Chat/res/filter2.ico delete mode 100644 plugins/Chat/res/highlight.ico delete mode 100644 plugins/Chat/res/history.ico delete mode 100644 plugins/Chat/res/info.ico delete mode 100644 plugins/Chat/res/italics.ico delete mode 100644 plugins/Chat/res/join.ico delete mode 100644 plugins/Chat/res/kick.ico delete mode 100644 plugins/Chat/res/message.ico delete mode 100644 plugins/Chat/res/messageout.ico delete mode 100644 plugins/Chat/res/nick.ico delete mode 100644 plugins/Chat/res/nicklist.ico delete mode 100644 plugins/Chat/res/nicklist2.ico delete mode 100644 plugins/Chat/res/notice.ico delete mode 100644 plugins/Chat/res/overlay.ico delete mode 100644 plugins/Chat/res/part.ico delete mode 100644 plugins/Chat/res/quit.ico delete mode 100644 plugins/Chat/res/removestatus.ico delete mode 100644 plugins/Chat/res/smiley.ico delete mode 100644 plugins/Chat/res/smileyc.ico delete mode 100644 plugins/Chat/res/tag1.ico delete mode 100644 plugins/Chat/res/tag2.ico delete mode 100644 plugins/Chat/res/topic.ico delete mode 100644 plugins/Chat/res/topicbut.ico delete mode 100644 plugins/Chat/res/underline.ico delete mode 100644 plugins/Chat/res/version.rc delete mode 100644 plugins/Chat/res/window.ico delete mode 100644 plugins/Chat/src/chat.h delete mode 100644 plugins/Chat/src/clist.cpp delete mode 100644 plugins/Chat/src/colorchooser.cpp delete mode 100644 plugins/Chat/src/log.cpp delete mode 100644 plugins/Chat/src/main.cpp delete mode 100644 plugins/Chat/src/manager.cpp delete mode 100644 plugins/Chat/src/message.cpp delete mode 100644 plugins/Chat/src/options.cpp delete mode 100644 plugins/Chat/src/resource.h delete mode 100644 plugins/Chat/src/richutil.cpp delete mode 100644 plugins/Chat/src/richutil.h delete mode 100644 plugins/Chat/src/services.cpp delete mode 100644 plugins/Chat/src/tools.cpp delete mode 100644 plugins/Chat/src/version.h delete mode 100644 plugins/Chat/src/window.cpp (limited to 'plugins/Chat') diff --git a/plugins/Chat/chat_10.vcxproj b/plugins/Chat/chat_10.vcxproj deleted file mode 100644 index 9bf9977902..0000000000 --- a/plugins/Chat/chat_10.vcxproj +++ /dev/null @@ -1,235 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - Chat - {268BD296-8DD3-4715-A386-CF120398EC98} - - - - DynamicLibrary - Unicode - true - - - DynamicLibrary - Unicode - - - DynamicLibrary - Unicode - true - - - DynamicLibrary - Unicode - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30128.1 - $(SolutionDir)$(Configuration)\Plugins\ - $(SolutionDir)$(Configuration)\Obj\$(ProjectName)\ - $(SolutionDir)$(Configuration)64\Plugins\ - $(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\ - $(SolutionDir)$(Configuration)\Plugins\ - $(SolutionDir)$(Configuration)\Obj\$(ProjectName)\ - $(SolutionDir)$(Configuration)64\Plugins\ - $(SolutionDir)$(Configuration)64\Obj\$(ProjectName)\ - true - - - - Disabled - ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;CHAT_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - Level3 - EditAndContinue - 4996;%(DisableSpecificWarnings) - Use - chat.h - - - _DEBUG;%(PreprocessorDefinitions) - ..\..\include;..\..\include\msapi - - - /DLL %(AdditionalOptions) - Version.lib;%(AdditionalDependencies) - type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 - true - false - $(IntDir)$(TargetName).lib - Windows - $(SolutionDir)\lib - - - - - Disabled - ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) - WIN64;_DEBUG;_WINDOWS;_USRDLL;CHAT_EXPORTS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - true - Level3 - 4996;%(DisableSpecificWarnings) - Use - chat.h - - - _DEBUG;%(PreprocessorDefinitions) - ..\..\include;..\..\include\msapi - - - /DLL %(AdditionalOptions) - Version.lib;%(AdditionalDependencies) - type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) - true - false - $(IntDir)$(TargetName).lib - Windows - $(SolutionDir)\lib - - - - - Full - OnlyExplicitInline - true - Size - ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;CHAT_EXPORTS;%(PreprocessorDefinitions) - true - false - false - true - Fast - Level3 - 4996;%(DisableSpecificWarnings) - Use - chat.h - - - NDEBUG;%(PreprocessorDefinitions) - ..\..\include;..\..\include\msapi - - - /PDBALTPATH:%_PDB% - Version.lib;%(AdditionalDependencies) - type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 - true - true - true - false - $(IntDir)$(TargetName).lib - Windows - $(SolutionDir)\lib - - - - - Full - OnlyExplicitInline - true - Size - ..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories) - WIN64;NDEBUG;_WINDOWS;_USRDLL;CHAT_EXPORTS;%(PreprocessorDefinitions) - true - false - false - true - Fast - Level3 - 4996;%(DisableSpecificWarnings) - Use - chat.h - - - NDEBUG;%(PreprocessorDefinitions) - ..\..\include;..\..\include\msapi - - - /PDBALTPATH:%_PDB% - Version.lib;%(AdditionalDependencies) - type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27*%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies) - true - true - true - false - $(IntDir)$(TargetName).lib - Windows - $(SolutionDir)\lib - - - - - - - - Create - - - - - - NotUsing - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plugins/Chat/chat_10.vcxproj.filters b/plugins/Chat/chat_10.vcxproj.filters deleted file mode 100644 index f0744d306e..0000000000 --- a/plugins/Chat/chat_10.vcxproj.filters +++ /dev/null @@ -1,86 +0,0 @@ - - - - - {ce9c3130-07ac-478e-8752-265c31f3bc8f} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - {b87dc5b7-8e8e-49a1-8291-b27797a443b7} - h;hpp;hxx;hm;inl - - - {ac500f7b-22cc-423c-a5e9-35da455c5e6a} - ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe - - - {6f7bae66-5f17-4ccb-8721-25f55e5c4e64} - .txt - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - - - Documentation - - - Documentation - - - Documentation - - - - - Resource Files - - - Resource Files - - - \ No newline at end of file diff --git a/plugins/Chat/docs/Chat_Readme.txt b/plugins/Chat/docs/Chat_Readme.txt deleted file mode 100644 index 331fc555fc..0000000000 --- a/plugins/Chat/docs/Chat_Readme.txt +++ /dev/null @@ -1,82 +0,0 @@ -----------------------------oOo---------------------------- - - Chat v 0.3.1.6 - - Released 2004-05-26, last updated 2005-08-19 - ------------------------------------------------------------- - -Important information ----------- - -#1 This plugin provides a groupchat interface for any protocol that wish to use it. - -#2 End users need not worry about anything more than setting your preferences in - -#3 Developers can take a look at the included m_chat.h for - an introduction on how to use it. Feel free to contact me if you need more - information on how to get it working. - - - -Change log ----------- - -Please go to: -http://www.miranda-im.org/download/details.php?action=viewlog&id=1309 - - - -Author ---------- - -My name is Jörgen Persson, also known as Matrix, I have been using -Miranda IM since 2001 and so far I have been responsible for the IRC part and -I am nowadays considered to be a 'core guy'. If you wish to contact me you can e-mail -me at: i_am_matrix at users dot sourceforge dot net. You can also join #miranda -on the FreeNode network, where you can talk to me and other fans of Miranda IM. - - - -How to install ----------- - -Use an unzipper of choice (I use WinZip) and extract the files to the 'Plugins' -directory of your Miranda IM installation. Please note that you must restart -Miranda IM for the installation to complete. If you are upgrading to another -version you will have to shut down Miranda before extracting the files -or the process will fail. - - - -Credits ----------- - -Egodust, "The coding encyclopedia". Thanks! We miss You!!! -Valkyre, Thanks for the bold, italics and underline icons - - -Base Address ----------- - -0x54 110000 (matrix) - - - -Copyright and license ---------------------- -Copyright (C) 2005 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. \ No newline at end of file diff --git a/plugins/Chat/docs/Chat_license.txt b/plugins/Chat/docs/Chat_license.txt deleted file mode 100644 index 7f1161073d..0000000000 --- a/plugins/Chat/docs/Chat_license.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/plugins/Chat/docs/chat-translation.txt b/plugins/Chat/docs/chat-translation.txt deleted file mode 100644 index 24c8d5c97a..0000000000 --- a/plugins/Chat/docs/chat-translation.txt +++ /dev/null @@ -1,300 +0,0 @@ -; Common strings that belong to many files -;[%s disables \'%s\' status for %s] -;[%s enables \'%s\' status for %s] -;[%s has disconnected] -;[%s has joined] -;[%s has left] -;[%s is now known as %s] -;[%s kicked %s] -;[&Message] -;[Background] -;[Background colour] -;[Information] -;[Text colour] -;[Timestamp] - -; ../../plugins/Chat/chat.rc -;[&Close tab] -;[&Copy link] -;[&Open at this position] -;[&Open in current browser window] -;[&Send] -;[(The timeout require at least PopUp plugin v 1.0.1.9. Setting it to 0 means default setting and -1 means indefinite time)] -;[Actions] -;[Add new rooms to group:] -;[C&lose other tabs] -;[Clear] -;[Clear lo&g] -;[Co&py all] -;[Copy] -;[Custom1] -;[Custom2] -;[Cut] -;[Disconnects] -;[Enable highlighting] -;[Enable logging to disk] -;[Google] -;[Limit log text to (events):] -;[Link] -;[List] -;[Log] -;[Log Options] -;[Log directory] -;[Log timestamp] -;[Message] -;[Messages] -;[Nick changes] -;[Notices] -;[OK] -;[Open a &new browser window] -;[Options] -;[Other] -;[Other name] -;[Paste] -;[Popups for the Chat plugin] -;[Redo] -;[Select All] -;[Show these events only:] -;[Spin1] -;[Status changes] -;[Tab1] -;[Tabs] -;[Text] -;[Timeout (s)] -;[Topic changes] -;[Trim to (kB)] -;[Undo ] -;[Use custom colours] -;[Use default colours] -;[Use same style as in the message log] -;[User kicks] -;[Userlist row distance (pixels):] -;[Users joining] -;[Users leaving] -;[Wikipedia] -;[Word lookup] -;[Words to highlight (wildcards allowed)] -;[Your name] - -; ../../plugins/Chat/clist.cpp -;[Join chat] -;[Open chat window] - -; ../../plugins/Chat/log.cpp -;[ (set by %s on %s)] -;[ (set by %s)] -;[Notice from %s: ] -;[The topic is \'%s%s\'] -;[You are now known as %s] -;[You have joined %s] - -; ../../plugins/Chat/main.cpp -;[Miranda could not load the Chat plugin because Microsoft Rich Edit v 3 is missing.\nIf you are using Windows 95/98/NT or WINE please upgrade your Rich Edit control.\n\nDo you want to download an update now?.] - -; ../../plugins/Chat/options.cpp -;[Action (10x10)] -;[Action message] -;[Add Status (10x10)] -;[Add \':\' to auto-completed user names] -;[Appearance and functionality of chat room windows] -;[Appearance of the message log] -;[Bold] -;[Chat] -;[Chat Log] -;[Chat Module] -;[Close] -;[Close tab on doubleclick] -;[Default events to show in new chat rooms if the \'event filter\' is enabled] -;[Display contact status icon before user role icon] -;[Do not play sounds when the chat room is focused] -;[Do not pop up the window when joining a chat room] -;[Enable the \'event filter\' for new rooms] -;[Event filter disabled] -;[Event filter enabled] -;[Flash window when a word is highlighted] -;[Flash window when someone speaks] -;[General] -;[Group Chats] -;[Group Chats Log] -;[Group chats] -;[Hide userlist] -;[Highlight (10x10)] -;[Highlighted message] -;[Icon overlay] -;[Icons to display in the message log] -;[Icons to display in the tray] -;[Incoming message] -;[Indent the second line of a message] -;[Information (10x10)] -;[Information messages] -;[Italics] -;[Join (10x10)] -;[Kick (10x10)] -;[Leave (10x10)] -;[Limit user names in the message log to 20 characters] -;[Message Background] -;[Message Sessions] -;[Message in (10x10)] -;[Message is highlighted] -;[Message out (10x10)] -;[Message typing area] -;[Messaging] -;[Nickchange (10x10)] -;[Notice (10x10)] -;[Notice from user] -;[Only prefix with timestamp if it has changed] -;[Options for using a tabbed interface] -;[Others nicknames] -;[Outgoing message] -;[Pop-ups to display] -;[Popups] -;[Prefix all events with a timestamp] -;[Quit (10x10)] -;[Remove status (10x10)] -;[Restore previously open tabs when showing the window] -;[Room history] -;[Room settings] -;[Save the size and position of chat rooms] -;[Select Folder] -;[Send message by pressing the Enter key] -;[Send message by pressing the Enter key twice] -;[Show actions] -;[Show button for sending messages] -;[Show button menus when right clicking the buttons] -;[Show buttons for controlling the chat room] -;[Show buttons for formatting the text you are typing] -;[Show contact statuses if protocol supports them] -;[Show icon for actions] -;[Show icon for highlights] -;[Show icon for information messages] -;[Show icon for messages] -;[Show icon for name changes] -;[Show icon for notices ] -;[Show icon for status changes] -;[Show icon for topic changes] -;[Show icon for users disconnecting] -;[Show icon for users joining] -;[Show icon for users kicking other user] -;[Show icon for users leaving] -;[Show icon in tray for actions] -;[Show icon in tray for highlights] -;[Show icon in tray for information messages] -;[Show icon in tray for messages] -;[Show icon in tray for name changes] -;[Show icon in tray for notices ] -;[Show icon in tray for status changes] -;[Show icon in tray for topic changes] -;[Show icon in tray for users disconnecting] -;[Show icon in tray for users joining] -;[Show icon in tray for users kicking other user] -;[Show icon in tray for users leaving] -;[Show icons in tray only when the chat room is not active] -;[Show information messages] -;[Show list of users in the chat room] -;[Show messages] -;[Show new windows cascaded] -;[Show notices] -;[Show pop-up for actions] -;[Show pop-up for highlights] -;[Show pop-up for information messages] -;[Show pop-up for messages] -;[Show pop-up for name changes] -;[Show pop-up for notices ] -;[Show pop-up for status changes] -;[Show pop-up for topic changes] -;[Show pop-up for users disconnecting] -;[Show pop-up for users joining] -;[Show pop-up for users kicking other user] -;[Show pop-up for users leaving] -;[Show pop-ups only when the chat room is not active] -;[Show status changes of users] -;[Show tabs at the bottom] -;[Show the topic of the room on your contact list (if supported)] -;[Show topic changes] -;[Show userlist] -;[Show users being kicked] -;[Show users changing name] -;[Show users disconnecting] -;[Show users joining] -;[Show users leaving] -;[Smiley button] -;[Status 1 (10x10)] -;[Status 2 (10x10)] -;[Status 3 (10x10)] -;[Status 4 (10x10)] -;[Status 5 (10x10)] -;[Status 6 (10x10)] -;[Strip colors from messages in the log] -;[The topic has been changed] -;[The topic is ...] -;[Timestamp has same colour as the event] -;[Toggle the visible state when double clicking in the contact list] -;[Topic (10x10)] -;[Underlined] -;[Use a tabbed interface] -;[User disables status for ...] -;[User enables status for ...] -;[User has changed name] -;[User has disconnected] -;[User has joined] -;[User has kicked some other user] -;[User has left] -;[User has performed an action] -;[User has sent a notice] -;[User is now known as ...] -;[User kicked ...] -;[User list members (Online)] -;[User list members (away)] -;[User's status was changed] -;[Userlist Background] -;[Userlist Background (selected)] -;[Userlist Lines] -;[Window Icon] -;[Your nickname] - -; ../../plugins/Chat/services.cpp -;[&Join] -;[&Leave] - -; ../../plugins/Chat/tools.cpp -;[%s %c %s\n] -;[%s %s\n] -;[%s disables \'%s\' status for %s in %s] -;[%s enables \'%s\' status for %s in %s] -;[%s has disconnected (%s)] -;[%s has joined %s] -;[%s has left %s] -;[%s has left (%s)] -;[%s kicked %s (%s)] -;[%s kicked %s from %s] -;[%s says: %s] -;[%s speaks in %s] -;[%s wants your attention in %s] -;[Information in %s] -;[Look up \'%s\':] -;[No word to look up] -;[Notice from %s] -;[Notice from %s: %s] -;[The topic is \'%s\'] -;[The topic is \'%s\' (set by %s)] -;[Topic change in %s] - -; ../../plugins/Chat/window.cpp -;[%s: Chat Room (%u user)] -;[%s: Chat Room (%u users)] -;[%s: Message Session] -;[%s: Message Session (%u users)] -;[Close current tab (CTRL+F4)] -;[Control this room (CTRL+O)] -;[Enable/disable the event filter (CTRL+F)] -;[Insert a smiley] -;[Make the text bold (CTRL+B)] -;[Make the text italicized (CTRL+I)] -;[Make the text underlined (CTRL+U)] -;[Nick name] -;[Select a background color for the text (CTRL+L)] -;[Select a foreground color for the text (CTRL+K)] -;[Show the history (CTRL+H)] -;[Show/hide the nicklist (CTRL+N)] -;[Status] -;[Unique id] diff --git a/plugins/Chat/res/1.ico b/plugins/Chat/res/1.ico deleted file mode 100644 index 51dcdc4648..0000000000 Binary files a/plugins/Chat/res/1.ico and /dev/null differ diff --git a/plugins/Chat/res/2.ico b/plugins/Chat/res/2.ico deleted file mode 100644 index 819ecc1d7a..0000000000 Binary files a/plugins/Chat/res/2.ico and /dev/null differ diff --git a/plugins/Chat/res/3.ico b/plugins/Chat/res/3.ico deleted file mode 100644 index 0928e257fe..0000000000 Binary files a/plugins/Chat/res/3.ico and /dev/null differ diff --git a/plugins/Chat/res/4.ico b/plugins/Chat/res/4.ico deleted file mode 100644 index 5dcea114fa..0000000000 Binary files a/plugins/Chat/res/4.ico and /dev/null differ diff --git a/plugins/Chat/res/5.ico b/plugins/Chat/res/5.ico deleted file mode 100644 index 6aa5806c53..0000000000 Binary files a/plugins/Chat/res/5.ico and /dev/null differ diff --git a/plugins/Chat/res/6.ico b/plugins/Chat/res/6.ico deleted file mode 100644 index c35cc39ebc..0000000000 Binary files a/plugins/Chat/res/6.ico and /dev/null differ diff --git a/plugins/Chat/res/action.ico b/plugins/Chat/res/action.ico deleted file mode 100644 index 44816c42d7..0000000000 Binary files a/plugins/Chat/res/action.ico and /dev/null differ diff --git a/plugins/Chat/res/addmode.ico b/plugins/Chat/res/addmode.ico deleted file mode 100644 index a6a7e6f38c..0000000000 Binary files a/plugins/Chat/res/addmode.ico and /dev/null differ diff --git a/plugins/Chat/res/bkgcolor.ico b/plugins/Chat/res/bkgcolor.ico deleted file mode 100644 index e3322ef34b..0000000000 Binary files a/plugins/Chat/res/bkgcolor.ico and /dev/null differ diff --git a/plugins/Chat/res/blank.ico b/plugins/Chat/res/blank.ico deleted file mode 100644 index 7845f62fed..0000000000 Binary files a/plugins/Chat/res/blank.ico and /dev/null differ diff --git a/plugins/Chat/res/bold.ico b/plugins/Chat/res/bold.ico deleted file mode 100644 index fc34113b6b..0000000000 Binary files a/plugins/Chat/res/bold.ico and /dev/null differ diff --git a/plugins/Chat/res/chat.rc b/plugins/Chat/res/chat.rc deleted file mode 100644 index fc81743d84..0000000000 --- a/plugins/Chat/res/chat.rc +++ /dev/null @@ -1,455 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "..\src\resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" -#include "richedit.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Neutral resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1251) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_CHANNEL DIALOGEX 0, 0, 252, 140 -STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | - WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | - WS_THICKFRAME -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - CONTROL "",IDC_MESSAGE,RICHEDIT_CLASS,ES_MULTILINE | - ES_AUTOVSCROLL | ES_NOHIDESEL | ES_WANTRETURN | - ES_NUMBER | WS_VSCROLL | WS_TABSTOP,0,128,127,12, - WS_EX_STATICEDGE - PUSHBUTTON "&Send",IDOK,136,126,115,14,WS_DISABLED - CONTROL "",IDC_SMILEY,"MButtonClass",WS_DISABLED | WS_TABSTOP,112,108,15,13,0x18000000L - CONTROL "",IDC_BOLD,"MButtonClass",WS_DISABLED | WS_TABSTOP,8,108,15,13,0x18000000L - CONTROL "",IDC_ITALICS,"MButtonClass",WS_DISABLED | WS_TABSTOP,24,108,15,13,0x18000000L - CONTROL "",IDC_UNDERLINE,"MButtonClass",WS_DISABLED | WS_TABSTOP,40,108,15,13,0x18000000L - CONTROL "",IDC_COLOR,"MButtonClass",WS_DISABLED | WS_TABSTOP,68,108,15,13,0x18000000L - CONTROL "",IDC_BKGCOLOR,"MButtonClass",WS_DISABLED | WS_TABSTOP,84,108,15,13,0x18000000L - CONTROL "",IDC_HISTORY,"MButtonClass",WS_TABSTOP,188,108,15,13,0x18000000L - CONTROL "",IDC_FILTER,"MButtonClass",WS_TABSTOP,220,108,15,13,0x18000000L - CONTROL "",IDC_CHANMGR,"MButtonClass",WS_DISABLED | WS_TABSTOP,204,108,15,13,0x18000000L - CONTROL "",IDC_SHOWNICKLIST,"MButtonClass",WS_TABSTOP,236,108,15,13,0x18000000L - CONTROL "",IDC_LOG,RICHEDIT_CLASS,ES_MULTILINE | ES_AUTOVSCROLL | - ES_READONLY | ES_NUMBER | WS_VSCROLL | WS_TABSTOP,8,23, - 164,73,WS_EX_STATICEDGE - CONTROL "",IDC_SPLITTERX,"Static",SS_ENHMETAFILE,172,23,10,73 - CONTROL "",IDC_SPLITTERY,"Static",SS_ENHMETAFILE,0,102,251,6 - LISTBOX IDC_LIST,182,23,69,73,LBS_OWNERDRAWFIXED | - LBS_NOINTEGRALHEIGHT | LBS_NODATA | NOT WS_BORDER | - WS_VSCROLL | WS_TABSTOP,WS_EX_STATICEDGE - CONTROL "Tab1",IDC_TAB,"SysTabControl32",TCS_MULTILINE,0,0,231,102 - CONTROL "",IDC_CLOSE,"MButtonClass",WS_TABSTOP,236,2,15,13,0x18000000L -END - -IDD_FILTER DIALOGEX 0, 0, 83, 125 -STYLE DS_FIXEDSYS | DS_SETFONT | WS_POPUP | WS_BORDER -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - CTEXT "Show these events only:",IDC_TEXTO,0,0,83,13, - SS_CENTERIMAGE - LTEXT "",IDC_STATIC,0,13,83,112 - CONTROL "Actions",IDC_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,13,73,10 - CONTROL "Messages",IDC_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,23,73,10 - CONTROL "Nick changes",IDC_3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,33,73,10 - CONTROL "Users joining",IDC_4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,43,73,10 - CONTROL "Users leaving",IDC_5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,53,73,10 - CONTROL "Topic changes",IDC_6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,63,73,10 - CONTROL "Status changes",IDC_7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,73,73,10 - CONTROL "Information",IDC_8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,83,73,10 - CONTROL "Disconnects",IDC_9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,93,73,10 - CONTROL "User kicks",IDC_10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,103,73,10 - CONTROL "Notices",IDC_11,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,113,73,10 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_CHANNEL, DIALOG - BEGIN - RIGHTMARGIN, 251 - VERTGUIDE, 8 - VERTGUIDE, 172 - VERTGUIDE, 182 - VERTGUIDE, 237 - HORZGUIDE, 8 - HORZGUIDE, 23 - HORZGUIDE, 70 - HORZGUIDE, 96 - HORZGUIDE, 102 - HORZGUIDE, 108 - HORZGUIDE, 121 - END - - IDD_FILTER, DIALOG - BEGIN - VERTGUIDE, 5 - VERTGUIDE, 78 - HORZGUIDE, 13 - HORZGUIDE, 117 - END -END -#endif // APSTUDIO_INVOKED - -#endif // Neutral resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// Neutral (Default) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEUD) -#ifdef _WIN32 -LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT -#pragma code_page(1251) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_OPTIONS1 DIALOGEX 0, 0, 300, 230 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - CONTROL "Tree1",IDC_CHECKBOXES,"SysTreeView32",TVS_HASBUTTONS | - TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | - TVS_FULLROWSELECT | WS_BORDER | WS_TABSTOP,10,12,280,205 - GROUPBOX "Options",IDC_STATIC,0,0,300,227 -END - -IDD_OPTIONS2 DIALOGEX 0, 0, 300, 200 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - GROUPBOX "Log Options",IDC_STATIC,1,1,294,134 - EDITTEXT IDC_OUTSTAMP,10,19,35,14,ES_AUTOHSCROLL - EDITTEXT IDC_INSTAMP,60,19,35,14,ES_AUTOHSCROLL - LTEXT "Log timestamp",IDC_STATIC,205,11,81,8 - EDITTEXT IDC_LOGTIMESTAMP,205,19,81,14,ES_AUTOHSCROLL - LTEXT "Timestamp",IDC_STATIC,119,11,78,8 - EDITTEXT IDC_TIMESTAMP,118,19,81,14,ES_AUTOHSCROLL - LTEXT "Other name",IDC_STATIC,60,11,57,8 - LTEXT "Your name",IDC_STATIC,10,11,50,8 - CONTROL "Enable highlighting",IDC_HIGHLIGHT,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,10,46,118,10 - LTEXT "Limit log text to (events):",IDC_STATIC,133,46,112,8 - LTEXT "Trim to (kB)",IDC_STATIC,248,104,38,8 - EDITTEXT IDC_LOGLIMIT,248,44,38,14,ES_RIGHT | ES_AUTOHSCROLL | - ES_NUMBER - CONTROL "Spin1",IDC_SPIN2,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | - UDS_NOTHOUSANDS | UDS_HOTTRACK,275,43,11,14 - LTEXT "Words to highlight (wildcards allowed)",IDC_STATIC,10, - 58,240,8 - EDITTEXT IDC_HIGHLIGHTWORDS,10,67,276,14,ES_AUTOHSCROLL - CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,86,275,1 - CONTROL "Enable logging to disk",IDC_LOGGING,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,10,94,211,10 - LTEXT "Log directory",IDC_STATIC,10,106,211,8 - EDITTEXT IDC_LOGDIRECTORY,10,114,211,14,ES_AUTOHSCROLL | - ES_READONLY - PUSHBUTTON "...",IDC_FONTCHOOSE,221,114,19,14 - EDITTEXT IDC_LIMIT,248,114,38,14,ES_RIGHT | ES_AUTOHSCROLL | - ES_NUMBER - CONTROL "Spin1",IDC_SPIN3,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | - UDS_NOTHOUSANDS | UDS_HOTTRACK,275,112,11,14 - GROUPBOX "Other",IDC_STATIC,1,145,294,53 - LTEXT "Add new rooms to group:",IDC_STATIC,11,159,132,8 - EDITTEXT IDC_GROUP,158,158,49,14,ES_AUTOHSCROLL - LTEXT "Userlist row distance (pixels):",IDC_STATIC,11,180,132, - 8 - EDITTEXT IDC_NICKROW2,158,178,29,14,ES_RIGHT | ES_AUTOHSCROLL | - ES_NUMBER - CONTROL "",IDC_SPIN4,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | - UDS_NOTHOUSANDS | UDS_HOTTRACK,183,178,11,14 -END - -IDD_OPTIONSPOPUP DIALOGEX 0, 0, 277, 177 -STYLE DS_FIXEDSYS | DS_SETFONT | WS_POPUP | WS_VISIBLE -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - CONTROL "Use same style as in the message log",IDC_RADIO1,"Button", - BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,33,29,225,10 - CONTROL "Use default colours",IDC_RADIO2,"Button", - BS_AUTORADIOBUTTON,33,62,217,10 - CONTROL "Use custom colours",IDC_RADIO3,"Button", - BS_AUTORADIOBUTTON,33,95,105,10 - CONTROL "Custom1",IDC_TEXT,"ColourPicker",WS_TABSTOP,141,93,50, - 14,0x18000000L - CONTROL "Custom2",IDC_BKG,"ColourPicker",WS_TABSTOP,201,93,50,14, - 0x18000000L - EDITTEXT IDC_TIMEOUT,132,134,38,14,ES_RIGHT | ES_AUTOHSCROLL | - ES_NUMBER - CONTROL "Spin1",IDC_SPIN1,"msctls_updown32",UDS_SETBUDDYINT | - UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | - UDS_NOTHOUSANDS | UDS_HOTTRACK,169,135,11,14 - GROUPBOX "Popups for the Chat plugin",IDC_STATIC,0,0,277,174 - LTEXT "Timeout (s)",IDC_STATIC,33,138,92,8 - LTEXT "Text",IDC_STATIC,141,83,49,8 - LTEXT "Background",IDC_STATIC,201,83,67,8 - LTEXT "(The timeout require at least PopUp plugin v 1.0.1.9. Setting it to 0 means default setting and -1 means indefinite time)", - IDC_STATIC,33,151,207,17 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_OPTIONS1, DIALOG - BEGIN - VERTGUIDE, 10 - VERTGUIDE, 153 - VERTGUIDE, 181 - VERTGUIDE, 202 - VERTGUIDE, 290 - HORZGUIDE, 12 - HORZGUIDE, 174 - HORZGUIDE, 192 - HORZGUIDE, 213 - END - - IDD_OPTIONS2, DIALOG - BEGIN - LEFTMARGIN, 1 - RIGHTMARGIN, 295 - VERTGUIDE, 10 - VERTGUIDE, 60 - VERTGUIDE, 144 - VERTGUIDE, 158 - VERTGUIDE, 183 - VERTGUIDE, 221 - VERTGUIDE, 286 - TOPMARGIN, 1 - BOTTOMMARGIN, 198 - HORZGUIDE, 108 - HORZGUIDE, 126 - HORZGUIDE, 146 - HORZGUIDE, 158 - HORZGUIDE, 174 - END - - IDD_OPTIONSPOPUP, DIALOG - BEGIN - VERTGUIDE, 33 - VERTGUIDE, 157 - VERTGUIDE, 201 - HORZGUIDE, 49 - HORZGUIDE, 81 - HORZGUIDE, 174 - END -END -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_TAG1 ICON "tag1.ico" -IDI_TAG2 ICON "tag2.ico" -#endif // Neutral (Default) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// Swedish resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_SVE) -#ifdef _WIN32 -LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_COLORCHOOSER DIALOGEX 0, 0, 198, 150 -STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | - WS_VISIBLE | WS_BORDER -EXSTYLE WS_EX_TOPMOST -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,172,136,26,14,NOT WS_TABSTOP - CTEXT "",IDC_COLORTEXT,0,0,197,12,SS_CENTERIMAGE -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_BUNDERLINE ICON "underline.ico" -IDI_BBOLD ICON "bold.ico" -IDI_BITALICS ICON "italics.ico" -IDI_BSMILEY ICON "smiley.ico" -IDI_JOIN ICON "join.ico" -IDI_TOPIC ICON "topic.ico" -IDI_ADDSTATUS ICON "addmode.ico" -IDI_INFO ICON "info.ico" -IDI_KICK ICON "kick.ico" -IDI_MESSAGE ICON "message.ico" -IDI_NICK ICON "nick.ico" -IDI_NOTICE ICON "notice.ico" -IDI_PART ICON "part.ico" -IDI_QUIT ICON "quit.ico" -IDI_REMSTATUS ICON "removestatus.ico" -IDI_HIGHLIGHT ICON "highlight.ico" -IDI_MESSAGEOUT ICON "messageout.ico" -IDI_ACTION ICON "action.ico" -IDI_TOPICBUT ICON "topicbut.ico" -IDI_BKGCOLOR ICON "bkgcolor.ico" -IDI_CHANMGR ICON "window.ico" -IDI_COLOR ICON "color.ico" -IDI_FILTER ICON "filter.ico" -IDI_HISTORY ICON "history.ico" -IDI_NICKLIST ICON "nicklist.ico" -IDI_BLANK ICON "blank.ico" -IDI_STATUS3 ICON "4.ico" -IDI_STATUS2 ICON "3.ico" -IDI_STATUS4 ICON "5.ico" -IDI_STATUS1 ICON "2.ico" -IDI_STATUS0 ICON "1.ico" -IDI_STATUS5 ICON "6.ico" -IDI_CLOSE ICON "close.ico" -IDI_OVERLAY ICON "overlay.ico" -IDI_NICKLIST2 ICON "nicklist2.ico" -IDI_FILTER2 ICON "filter2.ico" - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "..\\src\\resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "#include ""richedit.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Menu -// - -IDR_MENU MENU -BEGIN - POPUP "List" - BEGIN - MENUITEM "&Message", ID_MESS - END - POPUP "Log" - BEGIN - MENUITEM "Clear lo&g", ID_CLEARLOG - MENUITEM SEPARATOR - MENUITEM "Co&py all", ID_COPYALL - MENUITEM SEPARATOR - POPUP "Word lookup", GRAYED - BEGIN - MENUITEM "Google", ID_SEARCH_GOOGLE - MENUITEM "Wikipedia", ID_SEARCH_WIKIPEDIA - END - END - POPUP "Link" - BEGIN - MENUITEM "Open a &new browser window", ID_NEW - MENUITEM "&Open in current browser window", ID_CURR - MENUITEM "&Copy link", ID_COPY - END - MENUITEM "", 65535 - POPUP "Message" - BEGIN - MENUITEM "Undo ", ID_MESSAGE_UNDO, GRAYED - MENUITEM "Redo", ID_MESSAGE_REDO, GRAYED - MENUITEM SEPARATOR - MENUITEM "Copy", ID_MESSAGE_COPY, GRAYED - MENUITEM "Cut", ID_MESSAGE_CUT, GRAYED - MENUITEM "Paste", ID_MESSAGE_PASTE - MENUITEM "Select All", ID_MESSAGE_SELECTALL - MENUITEM SEPARATOR - MENUITEM "Clear", ID_MESSAGE_CLEAR - END - POPUP "Tabs" - BEGIN - MENUITEM "&Close tab", ID_CLOSE - MENUITEM "C&lose other tabs", ID_CLOSEOTHER - MENUITEM SEPARATOR - MENUITEM "&Open at this position", ID_LOCKPOSITION - END -END - -#endif // Swedish resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/plugins/Chat/res/close.ico b/plugins/Chat/res/close.ico deleted file mode 100644 index 20f12dd61f..0000000000 Binary files a/plugins/Chat/res/close.ico and /dev/null differ diff --git a/plugins/Chat/res/color.ico b/plugins/Chat/res/color.ico deleted file mode 100644 index 689762edbb..0000000000 Binary files a/plugins/Chat/res/color.ico and /dev/null differ diff --git a/plugins/Chat/res/filter.ico b/plugins/Chat/res/filter.ico deleted file mode 100644 index 7c99edb58c..0000000000 Binary files a/plugins/Chat/res/filter.ico and /dev/null differ diff --git a/plugins/Chat/res/filter2.ico b/plugins/Chat/res/filter2.ico deleted file mode 100644 index 701890522b..0000000000 Binary files a/plugins/Chat/res/filter2.ico and /dev/null differ diff --git a/plugins/Chat/res/highlight.ico b/plugins/Chat/res/highlight.ico deleted file mode 100644 index 552c912eaa..0000000000 Binary files a/plugins/Chat/res/highlight.ico and /dev/null differ diff --git a/plugins/Chat/res/history.ico b/plugins/Chat/res/history.ico deleted file mode 100644 index e757b93e54..0000000000 Binary files a/plugins/Chat/res/history.ico and /dev/null differ diff --git a/plugins/Chat/res/info.ico b/plugins/Chat/res/info.ico deleted file mode 100644 index 1acdb7190b..0000000000 Binary files a/plugins/Chat/res/info.ico and /dev/null differ diff --git a/plugins/Chat/res/italics.ico b/plugins/Chat/res/italics.ico deleted file mode 100644 index 5c61422a71..0000000000 Binary files a/plugins/Chat/res/italics.ico and /dev/null differ diff --git a/plugins/Chat/res/join.ico b/plugins/Chat/res/join.ico deleted file mode 100644 index 151cd93211..0000000000 Binary files a/plugins/Chat/res/join.ico and /dev/null differ diff --git a/plugins/Chat/res/kick.ico b/plugins/Chat/res/kick.ico deleted file mode 100644 index c93e92dd77..0000000000 Binary files a/plugins/Chat/res/kick.ico and /dev/null differ diff --git a/plugins/Chat/res/message.ico b/plugins/Chat/res/message.ico deleted file mode 100644 index 19957e4ac8..0000000000 Binary files a/plugins/Chat/res/message.ico and /dev/null differ diff --git a/plugins/Chat/res/messageout.ico b/plugins/Chat/res/messageout.ico deleted file mode 100644 index 637196b745..0000000000 Binary files a/plugins/Chat/res/messageout.ico and /dev/null differ diff --git a/plugins/Chat/res/nick.ico b/plugins/Chat/res/nick.ico deleted file mode 100644 index 3f199ffd50..0000000000 Binary files a/plugins/Chat/res/nick.ico and /dev/null differ diff --git a/plugins/Chat/res/nicklist.ico b/plugins/Chat/res/nicklist.ico deleted file mode 100644 index f2f611d6a4..0000000000 Binary files a/plugins/Chat/res/nicklist.ico and /dev/null differ diff --git a/plugins/Chat/res/nicklist2.ico b/plugins/Chat/res/nicklist2.ico deleted file mode 100644 index cba204fe5e..0000000000 Binary files a/plugins/Chat/res/nicklist2.ico and /dev/null differ diff --git a/plugins/Chat/res/notice.ico b/plugins/Chat/res/notice.ico deleted file mode 100644 index 1ba34d7244..0000000000 Binary files a/plugins/Chat/res/notice.ico and /dev/null differ diff --git a/plugins/Chat/res/overlay.ico b/plugins/Chat/res/overlay.ico deleted file mode 100644 index 28742d898d..0000000000 Binary files a/plugins/Chat/res/overlay.ico and /dev/null differ diff --git a/plugins/Chat/res/part.ico b/plugins/Chat/res/part.ico deleted file mode 100644 index 39c24868aa..0000000000 Binary files a/plugins/Chat/res/part.ico and /dev/null differ diff --git a/plugins/Chat/res/quit.ico b/plugins/Chat/res/quit.ico deleted file mode 100644 index d7fbdaf4b7..0000000000 Binary files a/plugins/Chat/res/quit.ico and /dev/null differ diff --git a/plugins/Chat/res/removestatus.ico b/plugins/Chat/res/removestatus.ico deleted file mode 100644 index ea3cef3fef..0000000000 Binary files a/plugins/Chat/res/removestatus.ico and /dev/null differ diff --git a/plugins/Chat/res/smiley.ico b/plugins/Chat/res/smiley.ico deleted file mode 100644 index e0d066ce33..0000000000 Binary files a/plugins/Chat/res/smiley.ico and /dev/null differ diff --git a/plugins/Chat/res/smileyc.ico b/plugins/Chat/res/smileyc.ico deleted file mode 100644 index d5b8ab0d28..0000000000 Binary files a/plugins/Chat/res/smileyc.ico and /dev/null differ diff --git a/plugins/Chat/res/tag1.ico b/plugins/Chat/res/tag1.ico deleted file mode 100644 index 1dc687becd..0000000000 Binary files a/plugins/Chat/res/tag1.ico and /dev/null differ diff --git a/plugins/Chat/res/tag2.ico b/plugins/Chat/res/tag2.ico deleted file mode 100644 index 4fac50a4c8..0000000000 Binary files a/plugins/Chat/res/tag2.ico and /dev/null differ diff --git a/plugins/Chat/res/topic.ico b/plugins/Chat/res/topic.ico deleted file mode 100644 index e4bb7da7e0..0000000000 Binary files a/plugins/Chat/res/topic.ico and /dev/null differ diff --git a/plugins/Chat/res/topicbut.ico b/plugins/Chat/res/topicbut.ico deleted file mode 100644 index ddb72fb8ca..0000000000 Binary files a/plugins/Chat/res/topicbut.ico and /dev/null differ diff --git a/plugins/Chat/res/underline.ico b/plugins/Chat/res/underline.ico deleted file mode 100644 index 01cf64a36a..0000000000 Binary files a/plugins/Chat/res/underline.ico and /dev/null differ diff --git a/plugins/Chat/res/version.rc b/plugins/Chat/res/version.rc deleted file mode 100644 index c415fe9f91..0000000000 --- a/plugins/Chat/res/version.rc +++ /dev/null @@ -1,56 +0,0 @@ -#ifdef APSTUDIO_INVOKED -#error this file is not editable by Microsoft Visual C++ -#endif //APSTUDIO_INVOKED - -#include -#include "..\src\version.h" - -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page( 1252) -#endif //_WIN32 - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION __FILEVERSION_STRING - PRODUCTVERSION __FILEVERSION_STRING - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "\0" - VALUE "CompanyName", "Miranda\0" - VALUE "FileDescription", "Group chats\0" - VALUE "FileVersion", __VERSION_STRING "\0" - VALUE "InternalName", "chat\0" - VALUE "LegalCopyright", "Copyright ( c) 2002-12 Miranda team\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", "chat.dll\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "Chat plugin\0" - VALUE "ProductVersion", __VERSION_STRING "\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC diff --git a/plugins/Chat/res/window.ico b/plugins/Chat/res/window.ico deleted file mode 100644 index b2c9e0f7b1..0000000000 Binary files a/plugins/Chat/res/window.ico and /dev/null differ diff --git a/plugins/Chat/src/chat.h b/plugins/Chat/src/chat.h deleted file mode 100644 index f8130358aa..0000000000 --- a/plugins/Chat/src/chat.h +++ /dev/null @@ -1,552 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#ifndef _CHAT_H_ -#define _CHAT_H_ - -#define MIRANDA_VER 0x0A00 - -//#pragma warning( disable : 4786 ) // limitation in MSVC's debugger. -//#pragma warning( disable : 4996 ) // limitation in MSVC's debugger. - -#define WIN32_LEAN_AND_MEAN -#define _WIN32_WINNT 0x0501 -#define _WIN32_IE 0x0501 - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "resource.h" -#include "version.h" -#include "m_ieview.h" -#include "m_smileyadd.h" - -#ifndef NDEBUG -#define new new(_NORMAL_BLOCK, __FILE__, __LINE__) -#endif - -//defines -#define OPTIONS_FONTCOUNT 17 -#define GC_UPDATETITLE (WM_USER+100) -#define GC_SPLITTERMOVED (WM_USER+101) -#define GC_CLOSEWINDOW (WM_USER+103) -#define GC_GETITEMDATA (WM_USER+104) -#define GC_SETITEMDATA (WM_USER+105) -#define GC_UPDATESTATUSBAR (WM_USER+106) -#define GC_SETVISIBILITY (WM_USER+107) -#define GC_SETWNDPROPS (WM_USER+108) -#define GC_REDRAWLOG (WM_USER+109) -#define GC_FIREHOOK (WM_USER+110) -#define GC_FILTERFIX (WM_USER+111) -#define GC_CHANGEFILTERFLAG (WM_USER+112) -#define GC_SHOWFILTERMENU (WM_USER+113) -#define GC_SETWINDOWPOS (WM_USER+114) -#define GC_SAVEWNDPOS (WM_USER+115) -//#define GC_NICKLISTCLEAR (WM_USER+117) -#define GC_REDRAWWINDOW (WM_USER+118) -#define GC_SHOWCOLORCHOOSER (WM_USER+119) -#define GC_ADDLOG (WM_USER+120) -#define GC_ACKMESSAGE (WM_USER+121) -//#define GC_ADDUSER (WM_USER+122) -//#define GC_REMOVEUSER (WM_USER+123) -//#define GC_NICKCHANGE (WM_USER+124) -#define GC_UPDATENICKLIST (WM_USER+125) -//#define GC_MODECHANGE (WM_USER+126) -#define GC_TABCHANGE (WM_USER+127) -#define GC_ADDTAB (WM_USER+128) -#define GC_SCROLLTOBOTTOM (WM_USER+129) -#define GC_REMOVETAB (WM_USER+130) -#define GC_SESSIONNAMECHANGE (WM_USER+131) -#define GC_FIXTABICONS (WM_USER+132) -#define GC_DROPPEDTAB (WM_USER+133) -#define GC_TABCLICKED (WM_USER+134) -#define GC_SWITCHNEXTTAB (WM_USER+135) -#define GC_SWITCHPREVTAB (WM_USER+136) -#define GC_SWITCHTAB (WM_USER+137) -#define GC_SETTABHIGHLIGHT (WM_USER+138) -#define GC_SETMESSAGEHIGHLIGHT (WM_USER+139) -#define GC_REDRAWLOG2 (WM_USER+140) -#define GC_REDRAWLOG3 (WM_USER+141) - -#define EM_SUBCLASSED (WM_USER+200) -#define EM_UNSUBCLASSED (WM_USER+201) -#define EM_ACTIVATE (WM_USER+202) - -#define TIMERID_FLASHWND 205 - -#define GCW_TABROOM 10 -#define GCW_TABPRIVMSG 11 - -#define GC_EVENT_HIGHLIGHT 0x1000 -#define STATE_TALK 0x0001 - -#define ICON_ACTION 0 -#define ICON_ADDSTATUS 1 -#define ICON_HIGHLIGHT 2 -#define ICON_INFO 3 -#define ICON_JOIN 4 -#define ICON_KICK 5 -#define ICON_MESSAGE 6 -#define ICON_MESSAGEOUT 7 -#define ICON_NICK 8 -#define ICON_NOTICE 9 -#define ICON_PART 10 -#define ICON_QUIT 11 -#define ICON_REMSTATUS 12 -#define ICON_TOPIC 13 - -#define ICON_STATUS1 14 -#define ICON_STATUS2 15 -#define ICON_STATUS3 16 -#define ICON_STATUS4 17 -#define ICON_STATUS0 18 -#define ICON_STATUS5 19 - -// special service for tweaking performance -#define MS_GC_GETEVENTPTR "GChat/GetNewEventPtr" -typedef INT_PTR (*GETEVENTFUNC)(WPARAM wParam, LPARAM lParam); -typedef struct { - GETEVENTFUNC pfnAddEvent; -}GCPTRS; - -extern HINSTANCE g_hInst; - -//structs - -typedef struct MODULE_INFO_TYPE -{ - char* pszModule; - TCHAR* ptszModDispName; - char* pszHeader; - BOOL bBold; - BOOL bUnderline; - BOOL bItalics; - BOOL bColor; - BOOL bBkgColor; - BOOL bChanMgr; - BOOL bAckMsg; - int nColorCount; - COLORREF* crColors; - HICON hOnlineIcon; - HICON hOfflineIcon; - HICON hOnlineTalkIcon; - HICON hOfflineTalkIcon; - int OnlineIconIndex; - int OfflineIconIndex; - int iMaxText; - struct MODULE_INFO_TYPE *next; -} - MODULEINFO; - -typedef struct COMMAND_INFO_TYPE -{ - char* lpCommand; - struct COMMAND_INFO_TYPE *last, *next; -} - COMMAND_INFO; - -typedef struct -{ - LOGFONT lf; - COLORREF color; -} - FONTINFO; - -typedef struct LOG_INFO_TYPE -{ - TCHAR* ptszText; - TCHAR* ptszNick; - TCHAR* ptszUID; - TCHAR* ptszStatus; - TCHAR* ptszUserInfo; - BOOL bIsMe; - BOOL bIsHighlighted; - time_t time; - int iType; - struct LOG_INFO_TYPE *next; - struct LOG_INFO_TYPE *prev; -} - LOGINFO; - -typedef struct STATUSINFO_TYPE -{ - TCHAR* pszGroup; - HICON hIcon; - WORD Status; - struct STATUSINFO_TYPE *next; -} - STATUSINFO; - -typedef struct USERINFO_TYPE -{ - TCHAR* pszNick; - TCHAR* pszUID; - WORD Status; - int iStatusEx; - WORD ContactStatus; - struct USERINFO_TYPE *next; -} - USERINFO; - -typedef struct TABLIST_TYPE -{ - TCHAR* pszID; - char* pszModule; - struct TABLIST_TYPE *next; -} - TABLIST; - -typedef struct SESSION_INFO_TYPE -{ - HWND hWnd; - - BOOL bFGSet; - BOOL bBGSet; - BOOL bFilterEnabled; - BOOL bNicklistEnabled; - BOOL bInitDone; - - char* pszModule; - TCHAR* ptszID; - TCHAR* ptszName; - TCHAR* ptszStatusbarText; - TCHAR* ptszTopic; - - // I hate m3x, Unicode, IRC, chats etc... - char* pszID; // ugly fix for returning static ANSI strings in GC_INFO - char* pszName; // just to fix a bug quickly, should die after porting IRC to Unicode - - int iType; - int iFG; - int iBG; - int iSplitterY; - int iSplitterX; - int iLogFilterFlags; - int nUsersInNicklist; - int iEventCount; - int iX; - int iY; - int iWidth; - int iHeight; - int iStatusCount; - - WORD wStatus; - WORD wState; - WORD wCommandsNum; - DWORD dwItemData; - DWORD dwFlags; - HANDLE hContact; - HWND hwndStatus; - time_t LastTime; - - COMMAND_INFO* lpCommands; - COMMAND_INFO* lpCurrentCommand; - LOGINFO* pLog; - LOGINFO* pLogEnd; - USERINFO* pUsers; - USERINFO* pMe; - STATUSINFO* pStatuses; - - HWND hwndTooltip; - int iOldItemID; - - IAccPropServices* pAccPropServicesForNickList; - struct SESSION_INFO_TYPE *next; -} - SESSION_INFO; - -typedef struct -{ - char* buffer; - int bufferOffset, bufferLen; - HWND hwnd; - LOGINFO* lin; - BOOL bStripFormat; - BOOL bRedraw; - SESSION_INFO* si; -} - LOGSTREAMDATA; - -struct CREOleCallback : public IRichEditOleCallback -{ - CREOleCallback() : refCount(0) {} - unsigned refCount; - IStorage *pictStg; - int nextStgId; - - STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR * lplpObj); - STDMETHOD_(ULONG,AddRef) (THIS); - STDMETHOD_(ULONG,Release) (THIS); - - STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode); - STDMETHOD(GetNewStorage) (LPSTORAGE FAR * lplpstg); - STDMETHOD(GetInPlaceContext) (LPOLEINPLACEFRAME FAR * lplpFrame, LPOLEINPLACEUIWINDOW FAR * lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo); - STDMETHOD(ShowContainerUI) (BOOL fShow); - STDMETHOD(QueryInsertObject) (LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp); - STDMETHOD(DeleteObject) (LPOLEOBJECT lpoleobj); - STDMETHOD(QueryAcceptData) (LPDATAOBJECT lpdataobj, CLIPFORMAT FAR * lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict); - STDMETHOD(GetClipboardData) (CHARRANGE FAR * lpchrg, DWORD reco, LPDATAOBJECT FAR * lplpdataobj); - STDMETHOD(GetDragDropEffect) (BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect); - STDMETHOD(GetContextMenu) (WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE FAR * lpchrg, HMENU FAR * lphmenu) ; -}; - -struct GlobalLogSettings_t { - BOOL ShowTime; - BOOL ShowTimeIfChanged; - BOOL LoggingEnabled; - BOOL FlashWindow; - BOOL HighlightEnabled; - BOOL LogIndentEnabled; - BOOL StripFormat; - BOOL SoundsFocus; - BOOL PopUpInactiveOnly; - BOOL TrayIconInactiveOnly; - BOOL AddColonToAutoComplete; - BOOL TabsEnable; - BOOL TabCloseOnDblClick; - BOOL TabRestore; - BOOL LogLimitNames; - BOOL TabsAtBottom; - BOOL TimeStampEventColour; - DWORD dwIconFlags; - DWORD dwTrayIconFlags; - DWORD dwPopupFlags; - int LogTextIndent; - int LoggingLimit; - int iEventLimit; - int iPopupStyle; - int iPopupTimeout; - int iSplitterX; - int iSplitterY; - int iX; - int iY; - int iWidth; - int iHeight; - TCHAR* pszTimeStamp; - TCHAR* pszTimeStampLog; - TCHAR* pszIncomingNick; - TCHAR* pszOutgoingNick; - TCHAR* pszHighlightWords; - TCHAR* pszLogDir; - HFONT UserListFont; - HFONT UserListHeadingsFont; - HFONT MessageBoxFont; - HFONT NameFont; - COLORREF crLogBackground; - COLORREF crUserListColor; - COLORREF crUserListBGColor; - COLORREF crUserListSelectedBGColor; - COLORREF crUserListHeadingsColor; - COLORREF crPUTextColour; - COLORREF crPUBkgColour; - BOOL ShowContactStatus; - BOOL ContactStatusFirst; -}; -extern struct GlobalLogSettings_t g_Settings; - -typedef struct{ - MODULEINFO* pModule; - int xPosition; - int yPosition; - HWND hWndTarget; - BOOL bForeground; - SESSION_INFO* si; -} - COLORCHOOSER; - -//main.c -void LoadIcons(void); -void LoadLogIcons(void); -void FreeIcons(void); -void UpgradeCheck(void); - -//colorchooser.c -INT_PTR CALLBACK DlgProcColorToolWindow(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - -//log.c -void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO* si, BOOL bRedraw, BOOL bPhaseTwo); -void LoadMsgLogBitmaps(void); -void FreeMsgLogBitmaps(void); -void ValidateFilename (TCHAR * filename); -TCHAR* MakeTimeStamp(TCHAR* pszStamp, time_t time); -char* Log_CreateRtfHeader(MODULEINFO * mi); - -//window.c -INT_PTR CALLBACK RoomWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam); -int GetTextPixelSize( TCHAR* pszText, HFONT hFont, BOOL bWidth); - -//options.c -int OptionsInit(void); -int OptionsUnInit(void); -void LoadMsgDlgFont(int i, LOGFONT * lf, COLORREF * colour); -void LoadGlobalSettings(void); -void AddIcons(void); -HICON LoadIconEx(char* pszIcoLibName, BOOL big); -void LoadLogFonts(void); - -//services.c -void HookEvents(void); -void UnhookEvents(void); -void CreateServiceFunctions(void); -void DestroyServiceFunctions(void); -void CreateHookableEvents(void); -void DestroyHookableEvents(void); -void TabsInit(void); -void ShowRoom(SESSION_INFO* si, WPARAM wp, BOOL bSetForeground); - -//manager.c -void SetActiveSession(const TCHAR* pszID, const char* pszModule); -void SetActiveSessionEx(SESSION_INFO* si); -SESSION_INFO* GetActiveSession(void); -SESSION_INFO* SM_AddSession(const TCHAR* pszID, const char* pszModule); -int SM_RemoveSession(const TCHAR* pszID, const char* pszModule, BOOL removeContact); -SESSION_INFO* SM_FindSession(const TCHAR* pszID, const char* pszModule); -USERINFO* SM_AddUser(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus); -BOOL SM_ChangeUID(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNewUID); -BOOL SM_ChangeNick(const TCHAR* pszID, const char* pszModule, GCEVENT * gce); -BOOL SM_RemoveUser(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID); -BOOL SM_SetOffline(const TCHAR* pszID, const char* pszModule); -BOOL SM_SetTabbedWindowHwnd(SESSION_INFO* si, HWND hwnd); -HICON SM_GetStatusIcon(SESSION_INFO* si, USERINFO * ui); -BOOL SM_SetStatus(const TCHAR* pszID, const char* pszModule, int wStatus); -BOOL SM_SetStatusEx(const TCHAR* pszID, const char* pszModule, const TCHAR* pszText, int flags ); -BOOL SM_SendUserMessage(const TCHAR* pszID, const char* pszModule, const TCHAR* pszText); -STATUSINFO* SM_AddStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszStatus); -SESSION_INFO* SM_GetNextWindow(SESSION_INFO* si); -SESSION_INFO* SM_GetPrevWindow(SESSION_INFO* si); -BOOL SM_AddEventToAllMatchingUID(GCEVENT * gce); -BOOL SM_AddEvent(const TCHAR* pszID, const char* pszModule, GCEVENT * gce, BOOL bIsHighlighted); -LRESULT SM_SendMessage(const TCHAR* pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam); -BOOL SM_PostMessage(const TCHAR* pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam); -BOOL SM_BroadcastMessage(const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam, BOOL bAsync); -BOOL SM_RemoveAll (void); -BOOL SM_GiveStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus); -BOOL SM_SetContactStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, WORD pszStatus); -BOOL SM_TakeStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus); -BOOL SM_MoveUser(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID); -void SM_AddCommand(const TCHAR* pszID, const char* pszModule, const char* lpNewCommand); -char* SM_GetPrevCommand(const TCHAR* pszID, const char* pszModule); -char* SM_GetNextCommand(const TCHAR* pszID, const char* pszModule); -int SM_GetCount(const char* pszModule); -SESSION_INFO* SM_FindSessionByIndex(const char* pszModule, int iItem); -char* SM_GetUsers(SESSION_INFO* si); -USERINFO* SM_GetUserFromIndex(const TCHAR* pszID, const char* pszModule, int index); -MODULEINFO* MM_AddModule(const char* pszModule); -MODULEINFO* MM_FindModule(const char* pszModule); -void MM_FixColors(); -void MM_FontsChanged(void); -void MM_IconsChanged(void); -BOOL MM_RemoveAll (void); -BOOL TabM_AddTab(const TCHAR* pszID, const char* pszModule); -BOOL TabM_RemoveAll (void); -STATUSINFO* TM_AddStatus(STATUSINFO** ppStatusList, const TCHAR* pszStatus, int* iCount); -STATUSINFO* TM_FindStatus(STATUSINFO* pStatusList, const TCHAR* pszStatus); -WORD TM_StringToWord(STATUSINFO* pStatusList, const TCHAR* pszStatus); -TCHAR* TM_WordToString(STATUSINFO* pStatusList, WORD Status); -BOOL TM_RemoveAll (STATUSINFO** pStatusList); -BOOL UM_SetStatusEx(USERINFO* pUserList,const TCHAR* pszText, int onlyMe ); -USERINFO* UM_AddUser(STATUSINFO* pStatusList, USERINFO** pUserList, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus); -USERINFO* UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID); -USERINFO* UM_FindUser(USERINFO* pUserList, const TCHAR* pszUID); -USERINFO* UM_FindUserFromIndex(USERINFO* pUserList, int index); -USERINFO* UM_GiveStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status); -USERINFO* UM_SetContactStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status); -USERINFO* UM_TakeStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status); -TCHAR* UM_FindUserAutoComplete(USERINFO* pUserList, const TCHAR* pszOriginal, const TCHAR* pszCurrent); -BOOL UM_RemoveUser(USERINFO** pUserList, const TCHAR* pszUID); -BOOL UM_RemoveAll (USERINFO** ppUserList); -LOGINFO* LM_AddEvent(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd); -BOOL LM_TrimLog(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd, int iCount); -BOOL LM_RemoveAll (LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd); - -//clist.c -HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType); -BOOL CList_SetOffline(HANDLE hContact, BOOL bHide); -BOOL CList_SetAllOffline(BOOL bHide, const char *pszModule); -int CList_RoomDoubleclicked(WPARAM wParam,LPARAM lParam); -INT_PTR CList_EventDoubleclicked(WPARAM wParam,LPARAM lParam); -INT_PTR CList_JoinChat(WPARAM wParam, LPARAM lParam); -INT_PTR CList_LeaveChat(WPARAM wParam, LPARAM lParam); -int CList_PrebuildContactMenu(WPARAM wParam, LPARAM lParam); -INT_PTR CList_PrebuildContactMenuSvc(WPARAM wParam, LPARAM lParam); -void CList_CreateGroup(TCHAR* group); -BOOL CList_AddEvent(HANDLE hContact, HICON hIcon, HANDLE hEvent, int type, TCHAR* fmt, ... ) ; -HANDLE CList_FindRoom (const char* pszModule, const TCHAR* pszRoom) ; -int WCCmp(TCHAR* wild, TCHAR*string); - -//tools.c -TCHAR* RemoveFormatting(const TCHAR* pszText); -BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO* si, GCEVENT * gce, BOOL bHighlight, int bManyFix); -int GetColorIndex(const char* pszModule, COLORREF cr); -void CheckColorsInModule(const char* pszModule); -const TCHAR* my_strstri(const TCHAR* s1, const TCHAR* s2) ; -int GetRichTextLength(HWND hwnd); -BOOL IsHighlighted(SESSION_INFO* si, const TCHAR* pszText); -UINT CreateGCMenu(HWND hwndDlg, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO* si, TCHAR* pszUID, TCHAR* pszWordText); -void DestroyGCMenu(HMENU *hMenu, int iIndex); -BOOL DoEventHookAsync(HWND hwnd, const TCHAR* pszID, const char* pszModule, int iType, TCHAR* pszUID, TCHAR* pszText, DWORD dwItem); -BOOL DoEventHook(const TCHAR* pszID, const char* pszModule, int iType, const TCHAR* pszUID, const TCHAR* pszText, DWORD dwItem); -BOOL IsEventSupported(int eventType); -BOOL LogToFile(SESSION_INFO* si, GCEVENT * gce); - -// message.c -char* Message_GetFromStream(HWND hwndDlg, SESSION_INFO* si); -TCHAR* DoRtfToTags( char* pszRtfText, SESSION_INFO* si); - -#pragma comment(lib,"comctl32.lib") - -////////////////////////////////////////////////////////////////////////////////// - -TCHAR* a2tf( const TCHAR* str, int flags ); -TCHAR* replaceStr( TCHAR** dest, const TCHAR* src ); -char* replaceStrA( char** dest, const char* src ); - -#endif diff --git a/plugins/Chat/src/clist.cpp b/plugins/Chat/src/clist.cpp deleted file mode 100644 index df60f1de3a..0000000000 --- a/plugins/Chat/src/clist.cpp +++ /dev/null @@ -1,360 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "chat.h" - -extern HANDLE hJoinMenuItem, hLeaveMenuItem; - -HANDLE CList_AddRoom(const char* pszModule, const TCHAR* pszRoom, const TCHAR* pszDisplayName, int iType) -{ - HANDLE hContact = CList_FindRoom(pszModule, pszRoom); - DBVARIANT dbv; - TCHAR pszGroup[50]; - - *pszGroup = '\0'; - if ( !DBGetContactSettingTString( NULL, "Chat", "AddToGroup", &dbv )) { - if ( lstrlen( dbv.ptszVal ) > 0 ) - lstrcpyn( pszGroup, dbv.ptszVal, 50); - DBFreeVariant(&dbv); - } - else lstrcpyn( pszGroup, _T("Chat rooms"), 50); - - if ( pszGroup[0] ) - CList_CreateGroup( pszGroup ); - - if ( hContact ) { //contact exist, make sure it is in the right group - DBVARIANT dbv; - DBVARIANT dbv2; - char str[50]; - int i; - - if ( pszGroup[0] ) { - for (i = 0;; i++) { - _itoa( i, str, 10 ); - if ( DBGetContactSettingTString( NULL, "CListGroups", str, &dbv )) { - DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup); - goto END_GROUPLOOP; - } - - if ( !DBGetContactSettingTString( hContact, "CList", "Group", &dbv2 )) { - if ( dbv.ptszVal[0] != '\0' && dbv2.ptszVal[0] != '\0' && !lstrcmpi( dbv.ptszVal + 1, dbv2.ptszVal )) { - DBFreeVariant( &dbv ); - DBFreeVariant( &dbv2 ); - goto END_GROUPLOOP; - } - DBFreeVariant(&dbv2); - } - DBFreeVariant(&dbv); - } } - -END_GROUPLOOP: - DBWriteContactSettingWord( hContact, pszModule, "Status", ID_STATUS_OFFLINE ); - DBWriteContactSettingTString(hContact, pszModule, "Nick", pszDisplayName ); -/* if ( iType != GCW_SERVER ) - DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);*/ - return hContact; - } - - // here we create a new one since no one is to be found - if (( hContact = (HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0)) == NULL ) - return NULL; - - CallService( MS_PROTO_ADDTOCONTACT, (WPARAM) hContact, (LPARAM) pszModule ); - if ( pszGroup && lstrlen( pszGroup ) > 0 ) - DBWriteContactSettingTString(hContact, "CList", "Group", pszGroup ); - else - DBDeleteContactSetting( hContact, "CList", "Group" ); - DBWriteContactSettingTString( hContact, pszModule, "Nick", pszDisplayName ); - DBWriteContactSettingTString( hContact, pszModule, "ChatRoomID", pszRoom ); - DBWriteContactSettingByte( hContact, pszModule, "ChatRoom", (BYTE)iType ); - DBWriteContactSettingWord( hContact, pszModule, "Status", ID_STATUS_OFFLINE ); -// if (iType == GCW_SERVER) - // DBWriteContactSettingByte(hContact, "CList", "Hidden", 1); - return hContact; -} - -BOOL CList_SetOffline(HANDLE hContact, BOOL bHide) -{ - if ( hContact ) { - char* szProto = ( char* )CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - int i = DBGetContactSettingByte(hContact, szProto, "ChatRoom", 0); - DBWriteContactSettingWord(hContact, szProto,"ApparentMode",(LPARAM) 0); - DBWriteContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE); -/* if ( bHide && i != GCW_SERVER ) - DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);*/ - return TRUE; - } - - return FALSE; -} - -BOOL CList_SetAllOffline(BOOL bHide, const char *pszModule) -{ - HANDLE hContact; - char* szProto; - - hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); - while ( hContact ) { - szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - if ( MM_FindModule( szProto )) { - if ( !pszModule || ( pszModule && !strcmp( pszModule, szProto ))) { - int i = DBGetContactSettingByte(hContact, szProto, "ChatRoom", 0); - if ( i != 0 ) { - DBWriteContactSettingWord(hContact, szProto,"ApparentMode",(LPARAM)(WORD) 0); - DBWriteContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE); - /*0000if (bHide && i == GCW_CHATROOM)d0 - DBWriteContactSettingByte(hContact, "CList", "Hidden", 1);*/ - } } } - hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); - } - return TRUE; -} - -int CList_RoomDoubleclicked( WPARAM wParam, LPARAM lParam ) -{ - DBVARIANT dbv; - char *szProto; - BOOL bRedrawFlag = FALSE; - - HANDLE hContact = (HANDLE)wParam; - if ( !hContact ) - return 0; - - szProto = ( char* )CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - if ( MM_FindModule(szProto)) { - if ( DBGetContactSettingByte( hContact, szProto, "ChatRoom", 0 ) == 0 ) - return 0; - - if ( !DBGetContactSettingTString( hContact, szProto, "ChatRoomID", &dbv )) { - SESSION_INFO* si = SM_FindSession( dbv.ptszVal, szProto ); - if ( si ) { - // is the "toggle visibility option set, so we need to close the window? - if (si->hWnd != NULL - && DBGetContactSettingByte(NULL, "Chat", "ToggleVisibility", 0)==1 - && !CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0) - && IsWindowVisible(si->hWnd) - && !IsIconic(si->hWnd)) - { - if (g_Settings.TabsEnable) - SendMessage(si->hWnd, GC_REMOVETAB, 1, (LPARAM) si ); - else - PostMessage(si->hWnd, GC_CLOSEWINDOW, 0, 0); - DBFreeVariant(&dbv); - return 1; - } - ShowRoom(si, WINDOW_VISIBLE, TRUE); - } - DBFreeVariant(&dbv); - return 1; - } } - - return 0; -} - -INT_PTR CList_EventDoubleclicked(WPARAM wParam,LPARAM lParam) -{ - return CList_RoomDoubleclicked((WPARAM) ((CLISTEVENT*)lParam)->hContact,(LPARAM) 0); -} - -INT_PTR CList_JoinChat(WPARAM wParam, LPARAM lParam) -{ - HANDLE hContact = (HANDLE)wParam; - if ( hContact ) { - char* szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - if ( szProto ) { - if ( DBGetContactSettingWord( hContact, szProto, "Status", 0 ) == ID_STATUS_OFFLINE ) - CallProtoService( szProto, PS_JOINCHAT, wParam, lParam ); - else - CList_RoomDoubleclicked( wParam, 0 ); - } } - - return 0; -} - -INT_PTR CList_LeaveChat(WPARAM wParam, LPARAM lParam) -{ - HANDLE hContact = (HANDLE)wParam; - if ( hContact ) { - char* szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - if ( szProto ) - CallProtoService( szProto, PS_LEAVECHAT, wParam, lParam ); - } - return 0; -} - -int CList_PrebuildContactMenu(WPARAM wParam, LPARAM lParam) -{ - HANDLE hContact = (HANDLE)wParam; - if ( hContact ) { - char* szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0); - - CLISTMENUITEM clmi = {0}; - clmi.cbSize = sizeof(CLISTMENUITEM); - clmi.flags = CMIM_FLAGS | CMIF_DEFAULT | CMIF_HIDDEN; - - if ( szProto ) { - // display this menu item only for chats - if ( DBGetContactSettingByte( hContact, szProto, "ChatRoom", 0 )) { - // still hide it for offline protos - if ( CallProtoService( szProto, PS_GETSTATUS, 0, 0 ) != ID_STATUS_OFFLINE ) { - clmi.flags &= ~CMIF_HIDDEN; - clmi.flags |= CMIM_NAME; - - if ( DBGetContactSettingWord( hContact, szProto, "Status", 0 ) == ID_STATUS_OFFLINE ) - clmi.pszName = ( char* )LPGEN("Join chat"); - else - clmi.pszName = ( char* )LPGEN("Open chat window"); - } } } - CallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hJoinMenuItem, ( LPARAM )&clmi ); - - clmi.flags &= ~(CMIM_NAME | CMIF_DEFAULT); - clmi.flags |= CMIF_NOTOFFLINE; - CallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hLeaveMenuItem, ( LPARAM )&clmi ); - } - return 0; -} - -INT_PTR CList_PrebuildContactMenuSvc(WPARAM wParam, LPARAM lParam) -{ - return CList_PrebuildContactMenu(wParam, lParam); -} - - -void CList_CreateGroup(TCHAR* group) -{ - int i; - char str[50]; - TCHAR name[256]; - DBVARIANT dbv; - - if ( !group ) - return; - - for (i = 0;; i++) - { - _itoa(i, str, 10); - if ( DBGetContactSettingTString( NULL, "CListGroups", str, &dbv )) - break; - - if ( dbv.pszVal[0] != '\0' && !lstrcmpi(dbv.ptszVal + 1, group)) { - DBFreeVariant(&dbv); - return; - } - - DBFreeVariant(&dbv); - } - - // CallService(MS_CLIST_GROUPCREATE, (WPARAM)group, 0); - name[0] = 1 | GROUPF_EXPANDED; - _tcsncpy(name + 1, group, SIZEOF(name) - 1); - name[ lstrlen(group) + 1] = '\0'; - DBWriteContactSettingTString(NULL, "CListGroups", str, name); - CallService(MS_CLUI_GROUPADDED, i + 1, 0); -} - -BOOL CList_AddEvent(HANDLE hContact, HICON hIcon, HANDLE hEvent, int type, TCHAR* fmt, ... ) -{ - CLISTEVENT cle = {0}; - va_list marker; - TCHAR szBuf[4096]; - - if (!fmt || !fmt[0] || _tcslen(fmt) > 2000) - return FALSE; - - va_start(marker, fmt); - _vsntprintf(szBuf, SIZEOF(szBuf), fmt, marker); - va_end(marker); - - cle.cbSize = sizeof(cle); - cle.hContact = hContact; - cle.hDbEvent = hEvent; - cle.flags = type | CLEF_TCHAR; - cle.hIcon = hIcon; - cle.pszService = "GChat/DblClickEvent" ; - cle.ptszTooltip = TranslateTS(szBuf); - if (type) { - if (!CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0)) - CallService(MS_CLIST_ADDEVENT, (WPARAM) hContact, (LPARAM) &cle); - } - else { - if (CallService(MS_CLIST_GETEVENT, (WPARAM)hContact, 0)) - CallService(MS_CLIST_REMOVEEVENT, (WPARAM)hContact, (LPARAM)hEvent); - CallService(MS_CLIST_ADDEVENT, (WPARAM)hContact, (LPARAM)&cle); - } - return TRUE; -} - -HANDLE CList_FindRoom ( const char* pszModule, const TCHAR* pszRoom) -{ - HANDLE hContact = ( HANDLE )CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); - while (hContact) { - char* szProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0 ); - if ( szProto && !lstrcmpiA( szProto, pszModule )) { - if ( DBGetContactSettingByte( hContact, szProto, "ChatRoom", 0) != 0 ) { - DBVARIANT dbv; - if ( !DBGetContactSettingTString( hContact, szProto, "ChatRoomID", &dbv )) { - if ( !lstrcmpi(dbv.ptszVal, pszRoom)) { - DBFreeVariant( &dbv ); - return hContact; - } - DBFreeVariant(&dbv); - } } } - - hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); - } - return 0; -} - -int WCCmp(TCHAR* wild, TCHAR* string) -{ - TCHAR *cp, *mp; - if ( wild == NULL || !wild[0] || string == NULL || !string[0]) - return 0; - - while ((*string) && (*wild != '*')) { - if ((*wild != *string) && (*wild != '?')) - return 0; - - wild++; - string++; - } - - while (*string) { - if (*wild == '*') { - if (!*++wild) - return 1; - - mp = wild; - cp = string+1; - } - else if ((*wild == *string) || (*wild == '?')) { - wild++; - string++; - } - else { - wild = mp; - string = cp++; - } } - - while (*wild == '*') - wild++; - - return !*wild; -} diff --git a/plugins/Chat/src/colorchooser.cpp b/plugins/Chat/src/colorchooser.cpp deleted file mode 100644 index 0d2642165f..0000000000 --- a/plugins/Chat/src/colorchooser.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - - -// this color chooser window is inspired by PeaCow's smiley chooser window for the Smileyadd plugin - -#include "chat.h" -#include - -static int CalculateCoordinatesToButton(COLORCHOOSER * pCC, POINT pt) -{ - int iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount); - int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount?iSquareRoot+1:iSquareRoot; - - int col = pt.x / 25; - int row = (pt.y-20) / 20; - int pos = nCols * row + col; - - if (pt.y < 20 && pos >= pCC->pModule->nColorCount) - pos = -1; - - return pos; -} - -static RECT CalculateButtonToCoordinates(COLORCHOOSER * pCC, int buttonPosition) -{ - RECT pt; - int iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount); - int nCols = iSquareRoot * iSquareRoot < pCC->pModule->nColorCount?iSquareRoot+1:iSquareRoot; - - int row = buttonPosition / nCols; - int col = buttonPosition % nCols; - - pt.left = col * 25+1; - pt.top = row * 20 + 20; - pt.right = pt.left + 25-1; - pt.bottom = pt.top + 20; - - return pt; -} - -INT_PTR CALLBACK DlgProcColorToolWindow(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static COLORCHOOSER* pCC = NULL; - static int iCurrentHotTrack; - static BOOL bChoosing; - static int iRows; - static int iColumns; - static HWND hPreviousActiveWindow; - - switch(msg) { - case WM_INITDIALOG: - { - RECT rc; - int iSquareRoot; - int width ; - int height; - - TranslateDialogDefault(hwndDlg); - pCC = (COLORCHOOSER*) lParam; - - iCurrentHotTrack = -2; - bChoosing = FALSE; - - iSquareRoot = (int)sqrt((double)pCC->pModule->nColorCount); - - iColumns = iSquareRoot * iSquareRoot == pCC->pModule->nColorCount?iSquareRoot:iSquareRoot+1; - iRows = iSquareRoot; - - rc.top = rc.left = 100; - rc.right = 100 + iColumns * 25 + 1; - rc.bottom = iRows * 20 + 100 + 20; - - AdjustWindowRectEx(&rc, GetWindowLongPtr(hwndDlg, GWL_STYLE), FALSE, GetWindowLongPtr(hwndDlg, GWL_EXSTYLE)); - - width = rc.right - rc.left; - height = rc.bottom - rc.top; - - pCC->yPosition -= height; - - - SetDlgItemText(hwndDlg, IDC_COLORTEXT, pCC->bForeground?TranslateT("Text colour"):TranslateT("Background colour")); - SetWindowPos(GetDlgItem(hwndDlg, IDC_COLORTEXT), NULL, 0, 0, width, 20, 0); - SetWindowPos(hwndDlg, NULL, pCC->xPosition, pCC->yPosition, width, height, SWP_SHOWWINDOW); - } - break; - - case WM_CTLCOLOREDIT: - case WM_CTLCOLORSTATIC: - if (( HWND )lParam == GetDlgItem( hwndDlg, IDC_COLORTEXT )) { - SetTextColor((HDC)wParam,RGB(60,60,150)); - SetBkColor((HDC)wParam,GetSysColor(COLOR_WINDOW)); - return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); - } - break; - - case WM_COMMAND: - switch ( LOWORD( wParam )) { - case IDOK: - if (iCurrentHotTrack >= 0) - PostMessage(hwndDlg, WM_LBUTTONUP, 0, 0); - break; - case IDCANCEL: - DestroyWindow(hwndDlg); - break; - } - break; - - case WM_LBUTTONUP: - if (iCurrentHotTrack >= 0 && iCurrentHotTrack < pCC->pModule->nColorCount && pCC->hWndTarget != NULL) { - HWND hWindow; - CHARFORMAT2 cf; - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwMask = 0; - cf.dwEffects = 0; - hWindow = GetParent( pCC->hWndTarget ); - - if ( pCC->bForeground ) { - pCC->si->bFGSet = TRUE; - pCC->si->iFG = iCurrentHotTrack; - if ( IsDlgButtonChecked( hWindow, IDC_COLOR )) { - cf.dwMask = CFM_COLOR; - cf.crTextColor = pCC->pModule->crColors[iCurrentHotTrack]; - SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } - } - else { - pCC->si->bBGSet = TRUE; - pCC->si->iBG = iCurrentHotTrack; - if ( IsDlgButtonChecked( hWindow, IDC_BKGCOLOR )) { - cf.dwMask = CFM_BACKCOLOR; - cf.crBackColor = pCC->pModule->crColors[iCurrentHotTrack]; - SendMessage(pCC->hWndTarget, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } } - PostMessage(hwndDlg, WM_CLOSE, 0, 0); - break; - - case WM_ACTIVATE: - if (wParam == WA_INACTIVE) - PostMessage(hwndDlg, WM_CLOSE, 0, 0); - else if ((wParam == WA_ACTIVE) || (wParam == WA_CLICKACTIVE)) - hPreviousActiveWindow = (HWND)lParam; - break; - - case WM_MOUSEMOVE: - { - HDC hdc = GetDC(hwndDlg); - POINT pt; - RECT rect; - int but; - - pt.x = LOWORD(lParam); - pt.y = HIWORD(lParam); - - if (iCurrentHotTrack == -2) - return 0; // prevent focussing when not drawn yet! - - but = CalculateCoordinatesToButton(pCC, pt); - - // weird stuff - if (but != iCurrentHotTrack) { - if (iCurrentHotTrack >= 0) { - rect = CalculateButtonToCoordinates(pCC, iCurrentHotTrack); - DrawFocusRect(hdc, &rect); - iCurrentHotTrack = -1; - } - iCurrentHotTrack = but; - - if (iCurrentHotTrack >= 0) { - rect = CalculateButtonToCoordinates(pCC, iCurrentHotTrack); - DrawFocusRect(hdc, &rect); - } } - ReleaseDC(hwndDlg, hdc); - } - break; - - case WM_PAINT: - { - PAINTSTRUCT ps; - HDC hdc; - RECT rc; - int i = 0; - int iThisRow = 1; - int iThisColumn = 0; - - GetClientRect(hwndDlg, &rc); - - rc.top += 20; - - hdc = BeginPaint(hwndDlg, &ps); - - // fill background - FillRect(hdc, &rc, GetSysColorBrush(COLOR_WINDOW)); - - for (i; i < pCC->pModule->nColorCount; i++) { - HBRUSH hbr; - - // decide place to draw the color block in the window - iThisColumn ++; - if (iThisColumn > iColumns) { - iThisColumn = 1; - iThisRow++; - } - - if ( pCC->bForeground && pCC->si->bFGSet && pCC->si->iFG == i || - !pCC->bForeground && pCC->si->bBGSet && pCC->si->iBG == i ) { - rc.top = (iThisRow-1) * 20+ 1 +20 ; - rc.left = (iThisColumn-1) * 25 + 1 + 1 ; - rc.bottom = iThisRow * 20- 1 + 20 ; - rc.right = iThisColumn * 25-1 ; - - DrawEdge(hdc, &rc, EDGE_RAISED, BF_TOP|BF_LEFT|BF_RIGHT|BF_BOTTOM); - } - - rc.top = (iThisRow-1) * 20+ 3 +20 ; - rc.left = (iThisColumn-1) * 25 + 3 + 1 ; - rc.bottom = iThisRow * 20- 3 + 20 ; - rc.right = iThisColumn * 25-3 ; - - FillRect(hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH)); - - hbr = CreateSolidBrush(pCC->pModule->crColors[i]); - - rc.top = (iThisRow-1) * 20+4 +20; - rc.left = (iThisColumn-1) * 25+ 4 + 1; - rc.bottom = iThisRow * 20-4 + 20; - rc.right = iThisColumn * 25-4; - - FillRect(hdc, &rc, hbr); - DeleteObject(hbr); - } - - EndPaint(hwndDlg, &ps); - iCurrentHotTrack = -1; - } - break; - - case WM_CLOSE: - SetFocus(pCC->hWndTarget); - DestroyWindow(hwndDlg); - break; - - case WM_DESTROY: - mir_free( pCC ); - return TRUE; - } - - return FALSE; -} diff --git a/plugins/Chat/src/log.cpp b/plugins/Chat/src/log.cpp deleted file mode 100644 index 86b2f41b0a..0000000000 --- a/plugins/Chat/src/log.cpp +++ /dev/null @@ -1,712 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "chat.h" - - -// The code for streaming the text is to a large extent copied from -// the srmm module and then modified to fit the chat module. - -extern FONTINFO aFonts[OPTIONS_FONTCOUNT]; -extern HICON hIcons[30]; -extern BOOL SmileyAddInstalled; - -static PBYTE pLogIconBmpBits[14]; -static int logIconBmpSize[ SIZEOF(pLogIconBmpBits) ]; - -static int logPixelSY = 0; -static int logPixelSX = 0; - -static int EventToIndex(LOGINFO * lin) -{ - switch (lin->iType) { - case GC_EVENT_MESSAGE: - if (lin->bIsMe) - return 10; - else - return 9; - - case GC_EVENT_JOIN: return 3; - case GC_EVENT_PART: return 4; - case GC_EVENT_QUIT: return 5; - case GC_EVENT_NICK: return 7; - case GC_EVENT_KICK: return 6; - case GC_EVENT_NOTICE: return 8; - case GC_EVENT_TOPIC: return 11; - case GC_EVENT_INFORMATION:return 12; - case GC_EVENT_ADDSTATUS: return 13; - case GC_EVENT_REMOVESTATUS: return 14; - case GC_EVENT_ACTION: return 15; - } - return 0; -} - -static int EventToIcon(LOGINFO * lin) -{ - switch (lin->iType) { - case GC_EVENT_MESSAGE: - if (lin->bIsMe) - return ICON_MESSAGEOUT; - else - return ICON_MESSAGE; - - case GC_EVENT_JOIN: return ICON_JOIN; - case GC_EVENT_PART: return ICON_PART; - case GC_EVENT_QUIT: return ICON_QUIT; - case GC_EVENT_NICK: return ICON_NICK; - case GC_EVENT_KICK: return ICON_KICK; - case GC_EVENT_NOTICE: return ICON_NOTICE; - case GC_EVENT_TOPIC: return ICON_TOPIC; - case GC_EVENT_INFORMATION:return ICON_INFO; - case GC_EVENT_ADDSTATUS: return ICON_ADDSTATUS; - case GC_EVENT_REMOVESTATUS: return ICON_REMSTATUS; - case GC_EVENT_ACTION: return ICON_ACTION; - } - return 0; -} - -static char *Log_SetStyle(int style, int fontindex) -{ - static char szStyle[128]; - mir_snprintf(szStyle, SIZEOF(szStyle), "\\f%u\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", style, style+1, aFonts[fontindex].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[fontindex].lf.lfItalic, 2 * abs(aFonts[fontindex].lf.lfHeight) * 74 / logPixelSY); - return szStyle; -} - -static void Log_Append(char **buffer, int *cbBufferEnd, int *cbBufferAlloced, const char *fmt, ...) -{ - va_list va; - int charsDone = 0; - - va_start(va, fmt); - for (;;) { - charsDone = mir_vsnprintf(*buffer + *cbBufferEnd, *cbBufferAlloced - *cbBufferEnd, fmt, va); - if (charsDone >= 0) - break; - *cbBufferAlloced += 4096; - *buffer = (char *) mir_realloc(*buffer, *cbBufferAlloced); - } - va_end(va); - *cbBufferEnd += charsDone; -} - -static int Log_AppendRTF(LOGSTREAMDATA* streamData, BOOL simpleMode, char **buffer, int *cbBufferEnd, int *cbBufferAlloced, const TCHAR *fmt, ...) -{ - va_list va; - int lineLen, textCharsCount=0; - TCHAR* line = (TCHAR*)alloca(8001 * sizeof(TCHAR)); - char* d; - - va_start(va, fmt); - lineLen = _vsntprintf( line, 8000, fmt, va); - if (lineLen < 0) lineLen = 8000; - line[lineLen] = 0; - va_end(va); - - lineLen = lineLen*20 + 8; - if (*cbBufferEnd + lineLen > *cbBufferAlloced) { - cbBufferAlloced[0] += (lineLen + 1024 - lineLen % 1024); - *buffer = (char *) mir_realloc(*buffer, *cbBufferAlloced); - } - - d = *buffer + *cbBufferEnd; - - for (; *line; line++, textCharsCount++) { - if (*line == '\r' && line[1] == '\n') { - CopyMemory(d, "\\par ", 5); - line++; - d += 5; - } - else if (*line == '\n') { - CopyMemory(d, "\\line ", 6); - d += 6; - } - else if (*line == '%' && !simpleMode ) { - char szTemp[200]; - - szTemp[0] = '\0'; - switch ( *++line ) { - case '\0': - case '%': - *d++ = '%'; - break; - - case 'c': - case 'f': - if (g_Settings.StripFormat || streamData->bStripFormat) - line += 2; - - else if ( line[1] != '\0' && line[2] != '\0') { - TCHAR szTemp3[3], c = *line; - int col; - szTemp3[0] = line[1]; - szTemp3[1] = line[2]; - szTemp3[2] = '\0'; - line += 2; - - col = _ttoi(szTemp3); - col += (OPTIONS_FONTCOUNT + 1); - mir_snprintf(szTemp, SIZEOF(szTemp), ( c == 'c' ) ? "\\cf%u " : "\\highlight%u ", col); - } - break; - case 'C': - case 'F': - if ( !g_Settings.StripFormat && !streamData->bStripFormat) { - int j = streamData->lin->bIsHighlighted ? 16 : EventToIndex(streamData->lin); - if ( *line == 'C' ) - mir_snprintf(szTemp, SIZEOF(szTemp), "\\cf%u ", j+1); - else - mir_snprintf(szTemp, SIZEOF(szTemp), "\\highlight0 "); - } - break; - case 'b': - case 'u': - case 'i': - if ( !streamData->bStripFormat ) - mir_snprintf(szTemp, SIZEOF(szTemp), (*line == 'u') ? "\\%cl " : "\\%c ", *line ); - break; - - case 'B': - case 'U': - case 'I': - if ( !streamData->bStripFormat ) { - mir_snprintf( szTemp, SIZEOF(szTemp), (*line == 'U') ? "\\%cl0 " : "\\%c0 ", *line ); - CharLowerA( szTemp ); - } - break; - - case 'r': - if ( !streamData->bStripFormat ) { - int index = EventToIndex(streamData->lin); - mir_snprintf(szTemp, SIZEOF(szTemp), "%s ", Log_SetStyle(index, index)); - } - break; - } - - if ( szTemp[0] ) { - int iLen = lstrlenA(szTemp); - memcpy( d, szTemp, iLen ); - d += iLen; - } - } - else if (*line == '\t' && !streamData->bStripFormat) { - CopyMemory(d, "\\tab ", 5); - d += 5; - } - else if ((*line == '\\' || *line == '{' || *line == '}') && !streamData->bStripFormat) { - *d++ = '\\'; - *d++ = (char) *line; - } - else if (*line > 0 && *line < 128) { - *d++ = (char) *line; - } - else d += sprintf(d, "\\u%u ?", (WORD)*line); - } - - *cbBufferEnd = (int) (d - *buffer); - return textCharsCount; -} - -static void AddEventToBuffer(char **buffer, int *bufferEnd, int *bufferAlloced, LOGSTREAMDATA *streamData) -{ - TCHAR szTemp[512], szTemp2[512]; - TCHAR* pszNick = NULL; - if ( streamData->lin->ptszNick ) { - if ( g_Settings.LogLimitNames && lstrlen( streamData->lin->ptszNick ) > 20 ) { - lstrcpyn( szTemp2, streamData->lin->ptszNick, 20 ); - lstrcpyn( szTemp2+20, _T("..."), 4); - } - else lstrcpyn( szTemp2, streamData->lin->ptszNick, 511 ); - - if ( streamData->lin->ptszUserInfo ) - mir_sntprintf( szTemp, SIZEOF(szTemp), _T("%s (%s)"), szTemp2, streamData->lin->ptszUserInfo ); - else - mir_sntprintf( szTemp, SIZEOF(szTemp), _T("%s"), szTemp2 ); - pszNick = szTemp; - } - - if ( streamData && streamData->lin ) { - switch ( streamData->lin->iType ) { - case GC_EVENT_MESSAGE: - if ( streamData->lin->ptszText ) - Log_AppendRTF( streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), streamData->lin->ptszText ); - break; - case GC_EVENT_ACTION: - if ( streamData->lin->ptszNick && streamData->lin->ptszText) { - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, _T("%s "), streamData->lin->ptszNick); - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), streamData->lin->ptszText); - } - break; - case GC_EVENT_JOIN: - if (pszNick) { - if (!streamData->lin->bIsMe) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has joined"), pszNick); - else - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, TranslateT("You have joined %s"), streamData->si->ptszName); - } - break; - case GC_EVENT_PART: - if (pszNick) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has left"), pszNick); - if (streamData->lin->ptszText) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, _T(": %s"), streamData->lin->ptszText); - break; - case GC_EVENT_QUIT: - if (pszNick) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s has disconnected"), pszNick); - if (streamData->lin->ptszText) - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T(": %s"), streamData->lin->ptszText); - break; - case GC_EVENT_NICK: - if (pszNick && streamData->lin->ptszText) { - if (!streamData->lin->bIsMe) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s is now known as %s"), pszNick, streamData->lin->ptszText); - else - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("You are now known as %s"), streamData->lin->ptszText); - } - break; - case GC_EVENT_KICK: - if (streamData->lin->ptszNick && streamData->lin->ptszStatus) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s kicked %s"), streamData->lin->ptszStatus, streamData->lin->ptszNick); - if (streamData->lin->ptszText) - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T(": %s"), streamData->lin->ptszText); - break; - case GC_EVENT_NOTICE: - if (pszNick && streamData->lin->ptszText) { - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("Notice from %s: "), pszNick ); - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, _T("%s"), streamData->lin->ptszText); - } - break; - case GC_EVENT_TOPIC: - if (streamData->lin->ptszText) - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, TranslateT("The topic is \'%s%s\'"), streamData->lin->ptszText, _T("%r")); - if (streamData->lin->ptszNick) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, - streamData->lin->ptszUserInfo ? TranslateT(" (set by %s on %s)"): TranslateT(" (set by %s)"), - streamData->lin->ptszNick, streamData->lin->ptszUserInfo); - break; - case GC_EVENT_INFORMATION: - if (streamData->lin->ptszText) - Log_AppendRTF(streamData, FALSE, buffer, bufferEnd, bufferAlloced, (streamData->lin->bIsMe) ? _T("--> %s") : _T("%s"), streamData->lin->ptszText); - break; - case GC_EVENT_ADDSTATUS: - if (streamData->lin->ptszNick && streamData->lin->ptszText && streamData->lin->ptszStatus) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s enables \'%s\' status for %s"), streamData->lin->ptszText, streamData->lin->ptszStatus, streamData->lin->ptszNick); - break; - case GC_EVENT_REMOVESTATUS: - if (streamData->lin->ptszNick && streamData->lin->ptszText && streamData->lin->ptszStatus) - Log_AppendRTF(streamData, TRUE, buffer, bufferEnd, bufferAlloced, TranslateT("%s disables \'%s\' status for %s"), streamData->lin->ptszText , streamData->lin->ptszStatus, streamData->lin->ptszNick); - break; -} } } - -TCHAR* MakeTimeStamp( TCHAR* pszStamp, time_t time) -{ - static TCHAR szTime[30]; - _tcsftime(szTime, 29, pszStamp, localtime(&time)); - return szTime; -} - -static char* Log_CreateRTF(LOGSTREAMDATA *streamData) -{ - char *buffer, *header; - int bufferAlloced, bufferEnd, i, me = 0; - LOGINFO * lin = streamData->lin; - MODULEINFO *mi = MM_FindModule(streamData->si->pszModule); - - // guesstimate amount of memory for the RTF - bufferEnd = 0; - bufferAlloced = streamData->bRedraw ? 1024 * (streamData->si->iEventCount+2) : 2048; - buffer = (char *) mir_alloc(bufferAlloced); - buffer[0] = '\0'; - - // ### RTF HEADER - header = mi->pszHeader; - - if (header) - Log_Append(&buffer, &bufferEnd, &bufferAlloced, header); - - - // ### RTF BODY (one iteration per event that should be streamed in) - while ( lin ) - { - // filter - if (streamData->si->iType != GCW_CHATROOM || !streamData->si->bFilterEnabled || (streamData->si->iLogFilterFlags&lin->iType) != 0) - { - // create new line, and set font and color - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\par%s ", Log_SetStyle(0, 0)); - - // Insert icon - if (lin->iType&g_Settings.dwIconFlags || lin->bIsHighlighted&&g_Settings.dwIconFlags&GC_EVENT_HIGHLIGHT) - { - int iIndex = (lin->bIsHighlighted&&g_Settings.dwIconFlags&GC_EVENT_HIGHLIGHT) ? ICON_HIGHLIGHT : EventToIcon(lin); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\f0\\fs14"); - while (bufferAlloced - bufferEnd < logIconBmpSize[0]) - bufferAlloced += 4096; - buffer = (char *) mir_realloc(buffer, bufferAlloced); - CopyMemory(buffer + bufferEnd, pLogIconBmpBits[iIndex], logIconBmpSize[iIndex]); - bufferEnd += logIconBmpSize[iIndex]; - } - - if (g_Settings.TimeStampEventColour) - { - // colored timestamps - static char szStyle[256]; - int iii; - if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) - { - iii = lin->bIsHighlighted?16:(lin->bIsMe ? 2 : 1); - mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii+1, aFonts[0].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[0].lf.lfItalic, 2 * abs(aFonts[0].lf.lfHeight) * 74 / logPixelSY); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle); - } - else - { - iii = lin->bIsHighlighted?16:EventToIndex(lin); - mir_snprintf(szStyle, SIZEOF(szStyle), "\\f0\\cf%u\\ul0\\highlight0\\b%d\\i%d\\fs%u", iii+1, aFonts[0].lf.lfWeight >= FW_BOLD ? 1 : 0, aFonts[0].lf.lfItalic, 2 * abs(aFonts[0].lf.lfHeight) * 74 / logPixelSY); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", szStyle); - } - } - else - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(0, 0 )); - // insert a TAB if necessary to put the timestamp in the right position - if (g_Settings.dwIconFlags) - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tab "); - - //insert timestamp - if (g_Settings.ShowTime) - { - TCHAR szTimeStamp[30], szOldTimeStamp[30]; - - lstrcpyn( szTimeStamp, MakeTimeStamp(g_Settings.pszTimeStamp, lin->time), 30); - lstrcpyn( szOldTimeStamp, MakeTimeStamp(g_Settings.pszTimeStamp, streamData->si->LastTime), 30); - if ( !g_Settings.ShowTimeIfChanged || streamData->si->LastTime == 0 || lstrcmp(szTimeStamp, szOldTimeStamp )) { - streamData->si->LastTime = lin->time; - Log_AppendRTF( streamData, TRUE, &buffer, &bufferEnd, &bufferAlloced, _T("%s"), szTimeStamp ); - } - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tab "); - } - - // Insert the nick - if (lin->ptszNick && lin->iType == GC_EVENT_MESSAGE) - { - TCHAR pszTemp[300], *p1; - - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(lin->bIsMe ? 2 : 1, lin->bIsMe ? 2 : 1)); - lstrcpyn(pszTemp, lin->bIsMe ? g_Settings.pszOutgoingNick : g_Settings.pszIncomingNick, 299); - p1 = _tcsstr(pszTemp, _T("%n")); - if (p1) - p1[1] = 's'; - - Log_AppendRTF(streamData, TRUE, &buffer, &bufferEnd, &bufferAlloced, pszTemp, lin->ptszNick); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, " "); - } - - // Insert the message - { - i = lin->bIsHighlighted?16:EventToIndex(lin); - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "%s ", Log_SetStyle(i, i)); - streamData->lin = lin; - AddEventToBuffer(&buffer, &bufferEnd, &bufferAlloced, streamData); - } - - } - lin = lin->prev; - } - - // ### RTF END - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "}"); - return buffer; -} - -static DWORD CALLBACK Log_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb) -{ - LOGSTREAMDATA *lstrdat = (LOGSTREAMDATA *) dwCookie; - - if (lstrdat) - { - // create the RTF - if (lstrdat->buffer == NULL) - { - lstrdat->bufferOffset = 0; - lstrdat->buffer = Log_CreateRTF(lstrdat); - lstrdat->bufferLen = lstrlenA(lstrdat->buffer); - } - - // give the RTF to the RE control - *pcb = min(cb, lstrdat->bufferLen - lstrdat->bufferOffset); - CopyMemory(pbBuff, lstrdat->buffer + lstrdat->bufferOffset, *pcb); - lstrdat->bufferOffset += *pcb; - - // free stuff if the streaming operation is complete - if (lstrdat->bufferOffset == lstrdat->bufferLen) - { - mir_free(lstrdat->buffer); - lstrdat->buffer = NULL; - } - } - - return 0; -} - -void Log_StreamInEvent(HWND hwndDlg, LOGINFO* lin, SESSION_INFO* si, BOOL bRedraw, BOOL bPhaseTwo) -{ - EDITSTREAM stream; - LOGSTREAMDATA streamData; - CHARRANGE oldsel, sel, newsel; - POINT point ={0}; - SCROLLINFO scroll; - WPARAM wp; - HWND hwndRich; - - if (hwndDlg == 0 || lin == 0 || si == 0) - return; - - hwndRich = GetDlgItem(hwndDlg, IDC_LOG); - ZeroMemory(&streamData, sizeof(LOGSTREAMDATA)); - streamData.hwnd = hwndRich; - streamData.si = si; - streamData.lin = lin; - streamData.bStripFormat = FALSE; - - // bPhaseTwo = bRedraw && bPhaseTwo; - - if (bRedraw || si->iType != GCW_CHATROOM || !si->bFilterEnabled || (si->iLogFilterFlags&lin->iType) != 0) - { - BOOL bFlag = FALSE; - - ZeroMemory(&stream, sizeof(stream)); - stream.pfnCallback = Log_StreamCallback; - stream.dwCookie = (DWORD_PTR) & streamData; - scroll.cbSize= sizeof(SCROLLINFO); - scroll.fMask= SIF_RANGE | SIF_POS|SIF_PAGE; - GetScrollInfo(GetDlgItem(hwndDlg, IDC_LOG), SB_VERT, &scroll); - SendMessage(hwndRich, EM_GETSCROLLPOS, 0, (LPARAM) &point); - - // do not scroll to bottom if there is a selection - SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM) &oldsel); - if (oldsel.cpMax != oldsel.cpMin) - SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0); - - //set the insertion point at the bottom - sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich); - SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM) & sel); - - // fix for the indent... must be a M$ bug - if (sel.cpMax == 0) - bRedraw = TRUE; - - // should the event(s) be appended to the current log - wp = bRedraw?SF_RTF:SFF_SELECTION|SF_RTF; - - //get the number of pixels per logical inch - if (bRedraw) - { - HDC hdc; - hdc = GetDC(NULL); - logPixelSY = GetDeviceCaps(hdc, LOGPIXELSY); - logPixelSX = GetDeviceCaps(hdc, LOGPIXELSX); - ReleaseDC (NULL, hdc); - SendMessage(hwndRich, WM_SETREDRAW, FALSE, 0); - bFlag = TRUE; - // SetCursor(LoadCursor(NULL, IDC_ARROW)); - } - - // stream in the event(s) - streamData.lin = lin; - streamData.bRedraw = bRedraw; - SendMessage(hwndRich, EM_STREAMIN, wp, (LPARAM) & stream); - - // do smileys - if (SmileyAddInstalled && (bRedraw - || (lin->ptszText - && lin->iType != GC_EVENT_JOIN - && lin->iType != GC_EVENT_NICK - && lin->iType != GC_EVENT_ADDSTATUS - && lin->iType != GC_EVENT_REMOVESTATUS ))) - { - SMADD_RICHEDIT3 sm = {0}; - - newsel.cpMax = -1; - newsel.cpMin = sel.cpMin; - if (newsel.cpMin < 0) - newsel.cpMin = 0; - ZeroMemory(&sm, sizeof(sm)); - sm.cbSize = sizeof(sm); - sm.hwndRichEditControl = hwndRich; - sm.Protocolname = si->pszModule; - sm.rangeToReplace = bRedraw?NULL:&newsel; - sm.disableRedraw = TRUE; - sm.hContact = si->hContact; - CallService(MS_SMILEYADD_REPLACESMILEYS, 0, (LPARAM)&sm); - } - - // scroll log to bottom if the log was previously scrolled to bottom, else restore old position - if (bRedraw || (UINT)scroll.nPos >= (UINT)scroll.nMax-scroll.nPage-5 || scroll.nMax-scroll.nMin-scroll.nPage < 50) - { - SendMessage(GetParent(hwndRich), GC_SCROLLTOBOTTOM, 0, 0); - } - else - SendMessage(hwndRich, EM_SETSCROLLPOS, 0, (LPARAM) &point); - - // do we need to restore the selection - if (oldsel.cpMax != oldsel.cpMin) - { - SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM) & oldsel); - SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0); - InvalidateRect(hwndRich, NULL, TRUE); - } - - // need to invalidate the window - if (bFlag) - { - sel.cpMin = sel.cpMax = GetRichTextLength(hwndRich); - SendMessage(hwndRich, EM_EXSETSEL, 0, (LPARAM) & sel); - SendMessage(hwndRich, WM_SETREDRAW, TRUE, 0); - InvalidateRect(hwndRich, NULL, TRUE); -} } } - -char * Log_CreateRtfHeader(MODULEINFO * mi) -{ - char *buffer; - int bufferAlloced, bufferEnd, i = 0; - - // guesstimate amount of memory for the RTF header - bufferEnd = 0; - bufferAlloced = 4096; - buffer = (char *) mir_realloc(mi->pszHeader, bufferAlloced); - buffer[0] = '\0'; - - - //get the number of pixels per logical inch - { - HDC hdc; - hdc = GetDC(NULL); - logPixelSY = GetDeviceCaps(hdc, LOGPIXELSY); - logPixelSX = GetDeviceCaps(hdc, LOGPIXELSX); - ReleaseDC(NULL, hdc); - } - - // ### RTF HEADER - - // font table - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "{\\rtf1\\ansi\\deff0{\\fonttbl"); - for (i = 0; i < OPTIONS_FONTCOUNT; i++) - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "{\\f%u\\fnil\\fcharset%u" TCHAR_STR_PARAM ";}", i, aFonts[i].lf.lfCharSet, aFonts[i].lf.lfFaceName); - - // colour table - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "}{\\colortbl ;"); - - for (i = 0; i < OPTIONS_FONTCOUNT; i++) - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\red%u\\green%u\\blue%u;", GetRValue(aFonts[i].color), GetGValue(aFonts[i].color), GetBValue(aFonts[i].color)); - - for(i = 0; i < mi->nColorCount; i++) - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\red%u\\green%u\\blue%u;", GetRValue(mi->crColors[i]), GetGValue(mi->crColors[i]), GetBValue(mi->crColors[i])); - - // new paragraph - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "}\\pard"); - - // set tabs and indents - { - int iIndent = 0; - - if (g_Settings.dwIconFlags) - { - iIndent += (14*1440)/logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent); - } - if (g_Settings.ShowTime) - { - int iSize = (g_Settings.LogTextIndent*1440)/logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize ); - if (g_Settings.LogIndentEnabled) - iIndent += iSize; - } - /* - { // text indent - int iSize = (135*1440)/logPixelSX; - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\tx%u", iIndent + iSize ); - if (g_Settings.LogIndentEnabled) - iIndent += iSize; - - } - */ - Log_Append(&buffer, &bufferEnd, &bufferAlloced, "\\fi-%u\\li%u", iIndent, iIndent); - } - return buffer; -} - -#define RTFPICTHEADERMAXSIZE 78 -void LoadMsgLogBitmaps(void) -{ - HICON hIcon; - HBITMAP hBmp, hoBmp; - HDC hdc, hdcMem; - BITMAPINFOHEADER bih = { 0 }; - int widthBytes, i; - RECT rc; - HBRUSH hBkgBrush; - int rtfHeaderSize; - PBYTE pBmpBits; - - hBkgBrush = CreateSolidBrush(DBGetContactSettingDword(NULL, "Chat", "ColorLogBG", GetSysColor(COLOR_WINDOW))); - bih.biSize = sizeof(bih); - bih.biBitCount = 24; - bih.biCompression = BI_RGB; - bih.biHeight = 10; //GetSystemMetrics(SM_CYSMICON); - bih.biPlanes = 1; - bih.biWidth = 10; //GetSystemMetrics(SM_CXSMICON); - widthBytes = ((bih.biWidth * bih.biBitCount + 31) >> 5) * 4; - rc.top = rc.left = 0; - rc.right = bih.biWidth; - rc.bottom = bih.biHeight; - hdc = GetDC(NULL); - hBmp = CreateCompatibleBitmap(hdc, bih.biWidth, bih.biHeight); - hdcMem = CreateCompatibleDC(hdc); - pBmpBits = (PBYTE) mir_alloc(widthBytes * bih.biHeight); - for (i = 0; i < SIZEOF(pLogIconBmpBits); i++) { - hIcon = hIcons[i]; - pLogIconBmpBits[i] = (PBYTE) mir_alloc(RTFPICTHEADERMAXSIZE + (bih.biSize + widthBytes * bih.biHeight) * 2); - rtfHeaderSize = sprintf((char *)pLogIconBmpBits[i], "{\\pict\\dibitmap0\\wbmbitspixel%u\\wbmplanes1\\wbmwidthbytes%u\\picw%u\\pich%u ", bih.biBitCount, widthBytes, bih.biWidth, bih.biHeight); - hoBmp = (HBITMAP) SelectObject(hdcMem, hBmp); - FillRect(hdcMem, &rc, hBkgBrush); - DrawIconEx(hdcMem, 0, 0, hIcon, bih.biWidth, bih.biHeight, 0, NULL, DI_NORMAL); - SelectObject(hdcMem, hoBmp); - GetDIBits(hdc, hBmp, 0, bih.biHeight, pBmpBits, (BITMAPINFO *) & bih, DIB_RGB_COLORS); - { - int n; - for (n = 0; n < sizeof(BITMAPINFOHEADER); n++) - sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + n * 2, "%02X", ((PBYTE) & bih)[n]); - for (n = 0; n < widthBytes * bih.biHeight; n += 4) - sprintf((char *)pLogIconBmpBits[i] + rtfHeaderSize + (bih.biSize + n) * 2, "%02X%02X%02X%02X", pBmpBits[n], pBmpBits[n + 1], pBmpBits[n + 2], pBmpBits[n + 3]); - } - logIconBmpSize[i] = rtfHeaderSize + (bih.biSize + widthBytes * bih.biHeight) * 2 + 1; - pLogIconBmpBits[i][logIconBmpSize[i] - 1] = '}'; - } - mir_free(pBmpBits); - DeleteDC(hdcMem); - DeleteObject(hBmp); - ReleaseDC(NULL, hdc); - DeleteObject(hBkgBrush); -} - -void FreeMsgLogBitmaps(void) -{ - int i; - for (i = 0; i < SIZEOF(pLogIconBmpBits); i++) - mir_free(pLogIconBmpBits[i]); -} diff --git a/plugins/Chat/src/main.cpp b/plugins/Chat/src/main.cpp deleted file mode 100644 index 7d72e85c8b..0000000000 --- a/plugins/Chat/src/main.cpp +++ /dev/null @@ -1,288 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "chat.h" - -//globals -HINSTANCE g_hInst; -HANDLE g_hWindowList; -HMENU g_hMenu = NULL; -int hLangpack; - -FONTINFO aFonts[OPTIONS_FONTCOUNT]; -HICON hIcons[30]; -BOOL IEviewInstalled = FALSE; -HBRUSH hListBkgBrush = NULL; -BOOL SmileyAddInstalled = FALSE; -BOOL PopUpInstalled = FALSE; -HBRUSH hEditBkgBrush = NULL; -HBRUSH hListSelectedBkgBrush = NULL; - -HIMAGELIST hImageList = NULL; - -HIMAGELIST hIconsList = NULL; - -TCHAR* pszActiveWndID = 0; -char* pszActiveWndModule = 0; - -/* Missing MinGW GUIDs */ -#ifdef __MINGW32__ -const CLSID IID_IRichEditOle = { 0x00020D00, 0x00, 0x00, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } }; -const CLSID IID_IRichEditOleCallback = { 0x00020D03, 0x00, 0x00, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } }; -#endif - -struct GlobalLogSettings_t g_Settings; - -PLUGININFOEX pluginInfo = { - sizeof(PLUGININFOEX), - "Chat", - __VERSION_DWORD, - "Provides chat rooms for protocols supporting it", - "Miranda team", - "project-info@miranda-im.org", - "© 2003-2010 Miranda team", - "http://miranda-ng.org/", - UNICODE_AWARE, - {0x9d6c3213, 0x2b4, 0x4fe1, { 0x92, 0xe6, 0x52, 0x6d, 0xe2, 0x4f, 0x8d, 0x65 }} //{9D6C3213-02B4-4fe1-92E6-526DE24F8D65} -}; - -BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) -{ - g_hInst = hinstDLL; - return TRUE; -} - -extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) -{ - return &pluginInfo; -} - -extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {MIID_CHAT, MIID_LAST}; - -extern "C" __declspec(dllexport) int Load(void) -{ - // set the memory & utf8 managers - mir_getLP( &pluginInfo ); - - UpgradeCheck(); - - g_hMenu = LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_MENU)); - HookEvents(); - CreateServiceFunctions(); - CreateHookableEvents(); - OptionsInit(); - TabsInit(); - return 0; -} - -extern "C" __declspec(dllexport) int Unload(void) -{ - DBWriteContactSettingWord(NULL, "Chat", "SplitterX", (WORD)g_Settings.iSplitterX); - DBWriteContactSettingWord(NULL, "Chat", "SplitterY", (WORD)g_Settings.iSplitterY); - DBWriteContactSettingDword(NULL, "Chat", "roomx", g_Settings.iX); - DBWriteContactSettingDword(NULL, "Chat", "roomy", g_Settings.iY); - DBWriteContactSettingDword(NULL, "Chat", "roomwidth" , g_Settings.iWidth); - DBWriteContactSettingDword(NULL, "Chat", "roomheight", g_Settings.iHeight); - - CList_SetAllOffline(TRUE, NULL); - - mir_free( pszActiveWndID ); - mir_free( pszActiveWndModule ); - - DestroyMenu(g_hMenu); - DestroyServiceFunctions(); - DestroyHookableEvents(); - FreeIcons(); - OptionsUnInit(); - FreeLibrary(GetModuleHandle(_T("riched20.dll"))); - UnhookEvents(); - return 0; -} - -void UpgradeCheck(void) -{ - DWORD dwVersion = DBGetContactSettingDword(NULL, "Chat", "OldVersion", PLUGIN_MAKE_VERSION(0,2,9,9)); - if ( pluginInfo.version > dwVersion) - { - if (dwVersion < PLUGIN_MAKE_VERSION(0,3,0,0)) - { - DBDeleteContactSetting(NULL, "ChatFonts", "Font18"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font18Col"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font18Set"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font18Size"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font18Sty"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font19"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font19Col"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font19Set"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font19Size"); - DBDeleteContactSetting(NULL, "ChatFonts", "Font19Sty"); - DBDeleteContactSetting(NULL, "Chat", "ColorNicklistLines"); - DBDeleteContactSetting(NULL, "Chat", "NicklistIndent"); - DBDeleteContactSetting(NULL, "Chat", "NicklistRowDist"); - DBDeleteContactSetting(NULL, "Chat", "ShowFormatButtons"); - DBDeleteContactSetting(NULL, "Chat", "ShowLines"); - DBDeleteContactSetting(NULL, "Chat", "ShowName"); - DBDeleteContactSetting(NULL, "Chat", "ShowTopButtons"); - DBDeleteContactSetting(NULL, "Chat", "SplitterX"); - DBDeleteContactSetting(NULL, "Chat", "SplitterY"); - DBDeleteContactSetting(NULL, "Chat", "IconFlags"); - DBDeleteContactSetting(NULL, "Chat", "LogIndentEnabled"); - } } - - DBWriteContactSettingDword(NULL, "Chat", "OldVersion", pluginInfo.version); -} - -void LoadLogIcons(void) -{ - hIcons[ICON_ACTION] = LoadIconEx( "log_action", FALSE ); - hIcons[ICON_ADDSTATUS] = LoadIconEx( "log_addstatus", FALSE ); - hIcons[ICON_HIGHLIGHT] = LoadIconEx( "log_highlight", FALSE ); - hIcons[ICON_INFO] = LoadIconEx( "log_info", FALSE ); - hIcons[ICON_JOIN] = LoadIconEx( "log_join", FALSE ); - hIcons[ICON_KICK] = LoadIconEx( "log_kick", FALSE ); - hIcons[ICON_MESSAGE] = LoadIconEx( "log_message_in", FALSE ); - hIcons[ICON_MESSAGEOUT] = LoadIconEx( "log_message_out", FALSE ); - hIcons[ICON_NICK] = LoadIconEx( "log_nick", FALSE ); - hIcons[ICON_NOTICE] = LoadIconEx( "log_notice", FALSE ); - hIcons[ICON_PART] = LoadIconEx( "log_part", FALSE ); - hIcons[ICON_QUIT] = LoadIconEx( "log_quit", FALSE ); - hIcons[ICON_REMSTATUS] = LoadIconEx( "log_removestatus", FALSE ); - hIcons[ICON_TOPIC] = LoadIconEx( "log_topic", FALSE ); - hIcons[ICON_STATUS1] = LoadIconEx( "status1", FALSE ); - hIcons[ICON_STATUS2] = LoadIconEx( "status2", FALSE ); - hIcons[ICON_STATUS3] = LoadIconEx( "status3", FALSE ); - hIcons[ICON_STATUS4] = LoadIconEx( "status4", FALSE ); - hIcons[ICON_STATUS0] = LoadIconEx( "status0", FALSE ); - hIcons[ICON_STATUS5] = LoadIconEx( "status5", FALSE ); -} - -void LoadIcons(void) -{ - int i; - - for(i = 0; i < 20; i++) - hIcons[i] = NULL; - - LoadLogIcons(); - LoadMsgLogBitmaps(); - - hImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),IsWinVerXPPlus()? ILC_COLOR32 | ILC_MASK : ILC_COLOR16 | ILC_MASK,0,3); - hIconsList = ImageList_Create(GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),IsWinVerXPPlus()? ILC_COLOR32 | ILC_MASK : ILC_COLOR16 | ILC_MASK,0,100); - ImageList_AddIcon(hIconsList,LoadSkinnedIcon( SKINICON_EVENT_MESSAGE)); - ImageList_AddIcon(hIconsList,LoadIconEx( "overlay", FALSE )); - ImageList_SetOverlayImage(hIconsList, 1, 1); - ImageList_AddIcon(hImageList, (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BLANK), IMAGE_ICON, 0, 0, 0)); - ImageList_AddIcon(hImageList, (HICON)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_BLANK), IMAGE_ICON, 0, 0, 0)); -} - -void FreeIcons(void) -{ - FreeMsgLogBitmaps(); - ImageList_Destroy(hImageList); - ImageList_Destroy(hIconsList); -} - -CREOleCallback reOleCallback; - -STDMETHODIMP CREOleCallback::QueryInterface(REFIID riid, LPVOID * ppvObj) -{ - if (IsEqualIID(riid, IID_IRichEditOleCallback)) { - *ppvObj = this; - AddRef(); - return S_OK; - } - *ppvObj = NULL; - return E_NOINTERFACE; -} - -STDMETHODIMP_(ULONG) CREOleCallback::AddRef() -{ - if (refCount == 0) { - if (S_OK != StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_DELETEONRELEASE, 0, &pictStg)) - pictStg = NULL; - nextStgId = 0; - } - return ++refCount; -} - -STDMETHODIMP_(ULONG) CREOleCallback::Release() -{ - if (--refCount == 0) { - if (pictStg) - pictStg->Release(); - } - return refCount; -} - -STDMETHODIMP CREOleCallback::ContextSensitiveHelp(BOOL fEnterMode) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::DeleteObject(LPOLEOBJECT lpoleobj) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::GetClipboardData(CHARRANGE * lpchrg, DWORD reco, LPDATAOBJECT * lplpdataobj) -{ - return E_NOTIMPL; -} - -STDMETHODIMP CREOleCallback::GetContextMenu(WORD seltype, LPOLEOBJECT lpoleobj, CHARRANGE * lpchrg, HMENU * lphmenu) -{ - return E_INVALIDARG; -} - -STDMETHODIMP CREOleCallback::GetDragDropEffect(BOOL fDrag, DWORD grfKeyState, LPDWORD pdwEffect) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::GetInPlaceContext(LPOLEINPLACEFRAME * lplpFrame, LPOLEINPLACEUIWINDOW * lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo) -{ - return E_INVALIDARG; -} - -STDMETHODIMP CREOleCallback::GetNewStorage(LPSTORAGE * lplpstg) -{ - WCHAR szwName[64]; - char szName[64]; - wsprintfA(szName, "s%u", nextStgId++); - MultiByteToWideChar(CP_ACP, 0, szName, -1, szwName, SIZEOF(szwName)); - if (pictStg == NULL) - return STG_E_MEDIUMFULL; - return pictStg->CreateStorage(szwName, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_CREATE, 0, 0, lplpstg); -} - -STDMETHODIMP CREOleCallback::QueryAcceptData(LPDATAOBJECT lpdataobj, CLIPFORMAT * lpcfFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::QueryInsertObject(LPCLSID lpclsid, LPSTORAGE lpstg, LONG cp) -{ - return S_OK; -} - -STDMETHODIMP CREOleCallback::ShowContainerUI(BOOL fShow) -{ - return S_OK; -} \ No newline at end of file diff --git a/plugins/Chat/src/manager.cpp b/plugins/Chat/src/manager.cpp deleted file mode 100644 index 02a0f76a59..0000000000 --- a/plugins/Chat/src/manager.cpp +++ /dev/null @@ -1,1611 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright 2000-2010 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "chat.h" - -extern TCHAR* pszActiveWndID ; -extern char* pszActiveWndModule ; -extern SESSION_INFO g_TabSession; -extern HICON hIcons[30]; -extern HIMAGELIST hIconsList; - -#define WINDOWS_COMMANDS_MAX 30 -#define STATUSICONCOUNT 6 - -SESSION_INFO* m_WndList = 0; -TABLIST * g_TabList = 0; -MODULEINFO *m_ModList = 0; - -void SetActiveSession(const TCHAR* pszID, const char* pszModule) -{ - SESSION_INFO* si = SM_FindSession(pszID, pszModule); - if ( si ) - SetActiveSessionEx(si); -} - -void SetActiveSessionEx(SESSION_INFO* si) -{ - if ( si ) { - replaceStr( &pszActiveWndID, si->ptszID ); - replaceStrA( &pszActiveWndModule, si->pszModule ); -} } - -SESSION_INFO* GetActiveSession( void ) -{ - SESSION_INFO* si = SM_FindSession( pszActiveWndID, pszActiveWndModule ); - if ( si ) - return si; - - return m_WndList; -} - -//--------------------------------------------------- -// Session Manager functions -// -// Keeps track of all sessions and its windows -//--------------------------------------------------- - -SESSION_INFO* SM_AddSession( const TCHAR* pszID, const char* pszModule) -{ - if ( !pszID || !pszModule ) - return NULL; - - if ( !SM_FindSession(pszID, pszModule)) { - SESSION_INFO*node = (SESSION_INFO*) mir_alloc(sizeof(SESSION_INFO)); - ZeroMemory(node, sizeof(SESSION_INFO)); - node->ptszID = mir_tstrdup( pszID ); - node->pszModule = mir_strdup( pszModule ); - - if (m_WndList == NULL) { // list is empty - m_WndList = node; - node->next = NULL; - } - else { - node->next = m_WndList; - m_WndList = node; - } - return node; - } - return NULL; -} - -int SM_RemoveSession(const TCHAR* pszID, const char* pszModule, BOOL removeContact) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while (pTemp != NULL) - { - if ((!pszID && pTemp->iType != GCW_SERVER || !lstrcmpi(pTemp->ptszID,pszID)) && !lstrcmpiA(pTemp->pszModule,pszModule)) // match - { - COMMAND_INFO *pCurComm; - DWORD dw = pTemp->dwItemData; - - if (!g_Settings.TabsEnable) - { - if (pTemp->hWnd ) - SendMessage(pTemp->hWnd, GC_EVENT_CONTROL+WM_USER+500, SESSION_TERMINATE, 0); - } - else - { - if (g_TabSession.hWnd) - SendMessage(g_TabSession.hWnd, GC_REMOVETAB, 1, (LPARAM)pTemp); - } - - if (pTemp->hWnd) - g_TabSession.nUsersInNicklist = 0; - - DoEventHook(pTemp->ptszID, pTemp->pszModule, GC_SESSION_TERMINATE, NULL, NULL, (DWORD)pTemp->dwItemData); - - if (pLast == NULL) - m_WndList = pTemp->next; - else - pLast->next = pTemp->next; - - UM_RemoveAll(&pTemp->pUsers); - TM_RemoveAll(&pTemp->pStatuses); - LM_RemoveAll(&pTemp->pLog, &pTemp->pLogEnd); - pTemp->iStatusCount = 0; - pTemp->nUsersInNicklist = 0; - - // contact may have been deleted here already, since function may be called after deleting - // contact so the handle may be invalid, therefore DBGetContactSettingByte shall return 0 - if (pTemp->hContact && DBGetContactSettingByte( pTemp->hContact, pTemp->pszModule, "ChatRoom", 0 ) != 0) - { - CList_SetOffline(pTemp->hContact, pTemp->iType == GCW_CHATROOM?TRUE:FALSE); -/* if (pTemp->iType != GCW_SERVER) - DBWriteContactSettingByte(pTemp->hContact, "CList", "Hidden", 1);*/ - DBWriteContactSettingString(pTemp->hContact, pTemp->pszModule, "Topic", ""); - DBWriteContactSettingString(pTemp->hContact, pTemp->pszModule, "StatusBar", ""); - DBDeleteContactSetting(pTemp->hContact, "CList", "StatusMsg"); - - if (removeContact) - CallService(MS_DB_CONTACT_DELETE, (WPARAM)pTemp->hContact, 0); - } - - mir_free( pTemp->pszModule ); - mir_free( pTemp->ptszID ); - mir_free( pTemp->ptszName ); - mir_free( pTemp->ptszStatusbarText ); - mir_free( pTemp->ptszTopic ); - mir_free( pTemp->pszID ); - mir_free( pTemp->pszName ); - - // delete commands - pCurComm = pTemp->lpCommands; - while (pCurComm != NULL) - { - COMMAND_INFO *pNext = pCurComm->next; - mir_free(pCurComm->lpCommand); - mir_free(pCurComm); - pCurComm = pNext; - } - - mir_free(pTemp); - if (pszID) - return (int)dw; - if (pLast) - pTemp = pLast->next; - else - pTemp = m_WndList; - } - else - { - pLast = pTemp; - pTemp = pTemp->next; - } - } - return FALSE; -} - -SESSION_INFO* SM_FindSession(const TCHAR* pszID, const char* pszModule) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if ( !pszID || !pszModule ) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA(pTemp->pszModule,pszModule)) - return pTemp; - - pLast = pTemp; - pTemp = pTemp->next; - } - return NULL; -} - -BOOL SM_SetOffline(const TCHAR* pszID, const char* pszModule) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while (pTemp != NULL) - { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA(pTemp->pszModule,pszModule)) - { - UM_RemoveAll(&pTemp->pUsers); - pTemp->nUsersInNicklist = 0; - if (pTemp->hWnd) - g_TabSession.nUsersInNicklist = 0; - if (pTemp->iType != GCW_SERVER) - pTemp->bInitDone = FALSE; - if (g_Settings.TabsEnable && pTemp->hWnd) - g_TabSession.pUsers = 0; - - if (pszID) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -BOOL SM_SetStatusEx( const TCHAR* pszID, const char* pszModule, const TCHAR* pszText, int flags ) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA(pTemp->pszModule,pszModule)) { - UM_SetStatusEx(pTemp->pUsers, pszText, flags); - if (pTemp->hWnd) - RedrawWindow(GetDlgItem(pTemp->hWnd, IDC_LIST), NULL, NULL, RDW_INVALIDATE); - if (pszID) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -HICON SM_GetStatusIcon(SESSION_INFO* si, USERINFO * ui) -{ - STATUSINFO * ti; - if (!ui || !si) - return NULL; - - ti = TM_FindStatus(si->pStatuses, TM_WordToString(si->pStatuses, ui->Status)); - if (ti) - { - if ((int)ti->hIcon < STATUSICONCOUNT) - { - int id = si->iStatusCount - (int)ti->hIcon - 1; - if (id == 0) - return hIcons[ICON_STATUS0]; - if (id == 1) - return hIcons[ICON_STATUS1]; - if (id == 2) - return hIcons[ICON_STATUS2]; - if (id == 3) - return hIcons[ICON_STATUS3]; - if (id == 4) - return hIcons[ICON_STATUS4]; - if (id == 5) - return hIcons[ICON_STATUS5]; - } - else - return ti->hIcon; - } - return hIcons[ICON_STATUS0]; -} - -BOOL SM_AddEventToAllMatchingUID(GCEVENT * gce) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - int bManyFix = 0; - - while (pTemp != NULL) { - if ( !lstrcmpiA( pTemp->pszModule, gce->pDest->pszModule )) { - if ( UM_FindUser( pTemp->pUsers, gce->ptszUID )) { - if ( pTemp->bInitDone ) { - if ( SM_AddEvent(pTemp->ptszID, pTemp->pszModule, gce, FALSE ) && pTemp->hWnd && pTemp->bInitDone) { - g_TabSession.pLog = pTemp->pLog; - g_TabSession.pLogEnd = pTemp->pLogEnd; - SendMessage(pTemp->hWnd, GC_ADDLOG, 0, 0); - } - else if (pTemp->hWnd && pTemp->bInitDone) { - g_TabSession.pLog = pTemp->pLog; - g_TabSession.pLogEnd = pTemp->pLogEnd; - SendMessage(pTemp->hWnd, GC_REDRAWLOG2, 0, 0); - } - DoSoundsFlashPopupTrayStuff(pTemp, gce, FALSE, bManyFix); - bManyFix ++; - if ((gce->dwFlags & GCEF_ADDTOLOG) && g_Settings.LoggingEnabled) - LogToFile(pTemp, gce); - } } } - - pLast = pTemp; - pTemp = pTemp->next; - } - - return 0; -} - -BOOL SM_AddEvent(const TCHAR* pszID, const char* pszModule, GCEVENT * gce, BOOL bIsHighlighted) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszID || !pszModule) - return TRUE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA(pTemp->pszModule,pszModule)) { - LOGINFO * li = LM_AddEvent(&pTemp->pLog, &pTemp->pLogEnd); - pTemp->iEventCount += 1; - - li->iType = gce->pDest->iType; - li->ptszNick = mir_tstrdup( gce->ptszNick ); - li->ptszText = mir_tstrdup( gce->ptszText ); - li->ptszStatus = mir_tstrdup( gce->ptszStatus ); - li->ptszUserInfo = mir_tstrdup( gce->ptszUserInfo ); - - li->bIsMe = gce->bIsMe; - li->time = gce->time; - li->bIsHighlighted = bIsHighlighted; - - if (g_Settings.iEventLimit > 0 && pTemp->iEventCount > g_Settings.iEventLimit + 20) { - LM_TrimLog(&pTemp->pLog, &pTemp->pLogEnd, pTemp->iEventCount - g_Settings.iEventLimit); - pTemp->iEventCount = g_Settings.iEventLimit; - return FALSE; - } - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -USERINFO * SM_AddUser( const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszID || !pszModule) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO * p = UM_AddUser( pTemp->pStatuses, &pTemp->pUsers, pszUID, pszNick, wStatus); - pTemp->nUsersInNicklist++; - if (pTemp->hWnd) - g_TabSession.nUsersInNicklist ++; - return p; - } - pLast = pTemp; - pTemp = pTemp->next; - } - - return 0; -} - -BOOL SM_MoveUser(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID) -{ - SESSION_INFO *pTemp = m_WndList; - - if (!pszID || !pszModule || !pszUID) - return FALSE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - UM_SortUser( &pTemp->pUsers, pszUID ); - return TRUE; - } - pTemp = pTemp->next; - } - - return FALSE; -} - -BOOL SM_RemoveUser(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule || !pszUID) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - DWORD dw; - USERINFO * ui = UM_FindUser(pTemp->pUsers, pszUID); - if ( ui ) { - pTemp->nUsersInNicklist--; - if (pTemp->hWnd) { - g_TabSession.pUsers = pTemp->pUsers; - g_TabSession.nUsersInNicklist --; - } - - dw = UM_RemoveUser(&pTemp->pUsers, pszUID); - - if (pTemp->hWnd) - SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); - - if (pszID) - return TRUE; - } } - - pLast = pTemp; - pTemp = pTemp->next; - } - - return 0; -} - -USERINFO * SM_GetUserFromIndex(const TCHAR* pszID, const char* pszModule, int index) -{ - SESSION_INFO *pTemp = m_WndList; - - if (!pszModule) - return FALSE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) - return UM_FindUserFromIndex( pTemp->pUsers, index ); - pTemp = pTemp->next; - } - - return NULL; -} - - -STATUSINFO * SM_AddStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszStatus) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszID || !pszModule ) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - STATUSINFO* ti = TM_AddStatus( &pTemp->pStatuses, pszStatus, &pTemp->iStatusCount ); - if ( ti ) - pTemp->iStatusCount++; - if ( g_Settings.TabsEnable && pTemp->hWnd ) - g_TabSession.pStatuses = pTemp->pStatuses; - return ti; - } - pLast = pTemp; - pTemp = pTemp->next; - } - - return 0; -} - -BOOL SM_GiveStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if ( !pszID || !pszModule ) - return FALSE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO * ui = UM_GiveStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus)); - if (ui) { - SM_MoveUser( pTemp->ptszID, pTemp->pszModule, ui->pszUID ); - if ( pTemp->hWnd ) - SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); - } - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - - return FALSE; -} - -BOOL SM_SetContactStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, WORD wStatus) -{ - SESSION_INFO* pTemp = m_WndList, *pLast = NULL; - - if ( !pszID || !pszModule ) - return FALSE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO * ui = UM_SetContactStatus(pTemp->pUsers, pszUID, wStatus); - if (ui) { - SM_MoveUser( pTemp->ptszID, pTemp->pszModule, ui->pszUID ); - if ( pTemp->hWnd ) - SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); - } - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - - return FALSE; -} - -BOOL SM_TakeStatus(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszStatus) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszID || !pszModule ) - return FALSE; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO* ui = UM_TakeStatus(pTemp->pUsers, pszUID, TM_StringToWord(pTemp->pStatuses, pszStatus)); - if ( ui ) { - SM_MoveUser(pTemp->ptszID, pTemp->pszModule, ui->pszUID); - if ( pTemp->hWnd ) - SendMessage(pTemp->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); - } - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - - return FALSE; -} -LRESULT SM_SendMessage(const TCHAR* pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - while ( pTemp && pszModule ) { - if (( !pszID ||!lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - if ( pTemp->hWnd ) { - LRESULT i = SendMessage(pTemp->hWnd, msg, wParam, lParam); - if ( pszID ) - return i; - } - if ( pszID ) - return 0; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -BOOL SM_PostMessage(const TCHAR* pszID, const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszID || !pszModule) - return 0; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->ptszID, pszID ) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - if ( pTemp->hWnd ) - return PostMessage(pTemp->hWnd, msg, wParam, lParam); - - return FALSE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return FALSE; -} - -BOOL SM_BroadcastMessage(const char* pszModule, UINT msg, WPARAM wParam, LPARAM lParam, BOOL bAsync) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - while (pTemp != NULL) - { - if (!pszModule || !lstrcmpiA(pTemp->pszModule, pszModule)) - { - if (pTemp->hWnd) - { - if (bAsync) - PostMessage(pTemp->hWnd, msg, wParam, lParam); - else - SendMessage(pTemp->hWnd, msg, wParam, lParam); - } - - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -BOOL SM_SetStatus(const TCHAR* pszID, const char* pszModule, int wStatus) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - pTemp->wStatus = wStatus; - if (pTemp->hWnd && g_Settings.TabsEnable) - g_TabSession.wStatus = wStatus; - - if ( pTemp->hContact ) { - if ( pTemp->iType != GCW_SERVER && wStatus != ID_STATUS_OFFLINE ) - DBDeleteContactSetting(pTemp->hContact, "CList", "Hidden"); - - DBWriteContactSettingWord(pTemp->hContact, pTemp->pszModule, "Status", (WORD)wStatus); - } - - if ( g_Settings.TabsEnable && g_TabSession.hWnd ) - PostMessage( g_TabSession.hWnd, GC_FIXTABICONS, 0, (LPARAM) pTemp ); - - if (pszID) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -BOOL SM_SendUserMessage(const TCHAR* pszID, const char* pszModule, const TCHAR* pszText) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if ( !pszModule || !pszText ) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - if ( pTemp->iType == GCW_CHATROOM ) - DoEventHook( pTemp->ptszID, pTemp->pszModule, GC_USER_MESSAGE, NULL, pszText, (LPARAM)NULL); - if (pszID) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -SESSION_INFO* SM_GetPrevWindow(SESSION_INFO* si) -{ - BOOL bFound = FALSE; - SESSION_INFO* pTemp = m_WndList; - - if ( !si ) - return NULL; - - while (pTemp != NULL) - { - if (si == pTemp) - { - if (bFound) - return NULL; - else - bFound = TRUE; - } - else if (bFound == TRUE && pTemp->hWnd) - return pTemp; - pTemp = pTemp->next; - if (pTemp == NULL && bFound) - pTemp = m_WndList; - } - return NULL; -} - -SESSION_INFO* SM_GetNextWindow(SESSION_INFO* si) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!si) - return NULL; - - while (pTemp != NULL) - { - if (si == pTemp) - { - if (pLast) - { - if (pLast != pTemp) - return pLast; - else - return NULL; - } - } - if (pTemp->hWnd) - pLast = pTemp; - pTemp = pTemp->next; - if (pTemp == NULL) - pTemp = m_WndList; - } - return NULL; -} - -BOOL SM_ChangeUID(const TCHAR* pszID, const char* pszModule, const TCHAR* pszUID, const TCHAR* pszNewUID) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO* ui = UM_FindUser( pTemp->pUsers, pszUID ); - if ( ui ) - replaceStr( &ui->pszUID, pszNewUID ); - - if ( pszID ) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - - -BOOL SM_SetTabbedWindowHwnd(SESSION_INFO* si, HWND hwnd) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - while (pTemp != NULL) - { - if (si && si == pTemp) - { - pTemp->hWnd = hwnd; - } - else - pTemp->hWnd = NULL; - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} -BOOL SM_ChangeNick(const TCHAR* pszID, const char* pszModule, GCEVENT * gce) -{ - SESSION_INFO *pTemp = m_WndList, *pLast = NULL; - - if (!pszModule) - return FALSE; - - while ( pTemp != NULL ) { - if (( !pszID || !lstrcmpi( pTemp->ptszID, pszID )) && !lstrcmpiA( pTemp->pszModule, pszModule )) { - USERINFO* ui = UM_FindUser(pTemp->pUsers, gce->ptszUID ); - if ( ui ) { - replaceStr( &ui->pszNick, gce->ptszText); - SM_MoveUser( pTemp->ptszID, pTemp->pszModule, ui->pszUID ); - if ( pTemp->hWnd ) - SendMessage( pTemp->hWnd, GC_UPDATENICKLIST, 0, 0 ); - } - - if (pszID) - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} -BOOL SM_RemoveAll (void) -{ - while (m_WndList) - { - SESSION_INFO*pLast = m_WndList->next; - - if (m_WndList->hWnd) - SendMessage(m_WndList->hWnd, GC_EVENT_CONTROL+WM_USER+500, SESSION_TERMINATE, 0); - DoEventHook(m_WndList->ptszID, m_WndList->pszModule, GC_SESSION_TERMINATE, NULL, NULL, (DWORD)m_WndList->dwItemData); - if (m_WndList->hContact) - CList_SetOffline(m_WndList->hContact, m_WndList->iType == GCW_CHATROOM?TRUE:FALSE); - DBWriteContactSettingString(m_WndList->hContact, m_WndList->pszModule , "Topic", ""); - DBDeleteContactSetting(m_WndList->hContact, "CList", "StatusMsg"); - DBWriteContactSettingString(m_WndList->hContact, m_WndList->pszModule, "StatusBar", ""); - - UM_RemoveAll(&m_WndList->pUsers); - TM_RemoveAll(&m_WndList->pStatuses); - LM_RemoveAll(&m_WndList->pLog, &m_WndList->pLogEnd); - m_WndList->iStatusCount = 0; - m_WndList->nUsersInNicklist = 0; - - mir_free( m_WndList->pszModule ); - mir_free( m_WndList->ptszID ); - mir_free( m_WndList->ptszName ); - mir_free( m_WndList->ptszStatusbarText ); - mir_free( m_WndList->ptszTopic ); - mir_free( m_WndList->pszID ); - mir_free( m_WndList->pszName ); - - while (m_WndList->lpCommands != NULL) { - COMMAND_INFO *pNext = m_WndList->lpCommands->next; - mir_free(m_WndList->lpCommands->lpCommand); - mir_free(m_WndList->lpCommands); - m_WndList->lpCommands = pNext; - } - - mir_free(m_WndList); - m_WndList = pLast; - } - m_WndList = NULL; - return TRUE; -} - -void SM_AddCommand(const TCHAR* pszID, const char* pszModule, const char* lpNewCommand) -{ - SESSION_INFO* pTemp = m_WndList; - while ( pTemp != NULL ) { - if ( lstrcmpi( pTemp->ptszID, pszID ) == 0 && lstrcmpiA( pTemp->pszModule, pszModule ) == 0) { // match - COMMAND_INFO *node = (COMMAND_INFO *)mir_alloc(sizeof(COMMAND_INFO)); - node->lpCommand = mir_strdup( lpNewCommand ); - node->last = NULL; // always added at beginning! - - // new commands are added at start - if (pTemp->lpCommands == NULL) { - node->next = NULL; - pTemp->lpCommands = node; - } - else { - node->next = pTemp->lpCommands; - pTemp->lpCommands->last = node; // hmm, weird - pTemp->lpCommands = node; - } - pTemp->lpCurrentCommand = NULL; // current command - pTemp->wCommandsNum++; - - if (pTemp->wCommandsNum > WINDOWS_COMMANDS_MAX) { - COMMAND_INFO *pCurComm = pTemp->lpCommands; - COMMAND_INFO *pLast; - while (pCurComm->next != NULL) { pCurComm = pCurComm->next; } - pLast = pCurComm->last; - mir_free(pCurComm->lpCommand); - mir_free(pCurComm); - pLast->next = NULL; - // done - pTemp->wCommandsNum--; - } } - pTemp = pTemp->next; -} } - -char* SM_GetPrevCommand(const TCHAR* pszID, const char* pszModule) // get previous command. returns NULL if previous command does not exist. current command remains as it was. -{ - SESSION_INFO* pTemp = m_WndList; - while ( pTemp != NULL ) { - if ( lstrcmpi( pTemp->ptszID, pszID ) == 0 && lstrcmpiA( pTemp->pszModule, pszModule ) == 0) { // match - COMMAND_INFO *pPrevCmd = NULL; - if (pTemp->lpCurrentCommand != NULL) { - if (pTemp->lpCurrentCommand->next != NULL) // not NULL - pPrevCmd = pTemp->lpCurrentCommand->next; // next command (newest at beginning) - else - pPrevCmd = pTemp->lpCurrentCommand; - } - else pPrevCmd = pTemp->lpCommands; - - pTemp->lpCurrentCommand = pPrevCmd; // make it the new command - return(((pPrevCmd) ? (pPrevCmd->lpCommand) : (NULL))); - } - pTemp = pTemp->next; - } - return(NULL); -} - -char* SM_GetNextCommand(const TCHAR* pszID, const char* pszModule) // get next command. returns NULL if next command does not exist. current command becomes NULL (a prev command after this one will get you the last command) -{ - SESSION_INFO* pTemp = m_WndList; - while ( pTemp != NULL ) { - if ( lstrcmpi( pTemp->ptszID, pszID ) == 0 && lstrcmpiA( pTemp->pszModule, pszModule ) == 0) { // match - COMMAND_INFO *pNextCmd = NULL; - if (pTemp->lpCurrentCommand != NULL) - pNextCmd = pTemp->lpCurrentCommand->last; // last command (newest at beginning) - - pTemp->lpCurrentCommand = pNextCmd; // make it the new command - return(((pNextCmd) ? (pNextCmd->lpCommand) : (NULL))); - } - pTemp = pTemp->next; - } - return(NULL); -} - -int SM_GetCount(const char* pszModule) -{ - SESSION_INFO* pTemp = m_WndList; - int count = 0; - - while (pTemp != NULL) - { - if (!lstrcmpiA(pszModule, pTemp->pszModule)) - count++; - - pTemp = pTemp->next; - } - return count; -} - -SESSION_INFO* SM_FindSessionByIndex(const char* pszModule, int iItem) -{ - SESSION_INFO* pTemp = m_WndList; - int count = 0; - while (pTemp != NULL) - { - if (!lstrcmpiA(pszModule, pTemp->pszModule)) - { - if (iItem ==count) - return pTemp; - else - count++; - } - - pTemp = pTemp->next; - } - return NULL; - -} - -char* SM_GetUsers(SESSION_INFO* si) -{ - SESSION_INFO* pTemp = m_WndList; - USERINFO* utemp = NULL; - char* p = NULL; - int alloced = 0; - - if ( si == NULL ) - return NULL; - - while (pTemp != NULL) { - if ( si == pTemp ) { - if (( utemp = pTemp->pUsers ) == NULL ) - return NULL; - - break; - } - pTemp = pTemp->next; - } - - do { - int pLen = lstrlenA(p), nameLen = lstrlen(utemp->pszUID); - if ( pLen + nameLen + 2 > alloced ) - p = (char *)mir_realloc( p, alloced += 4096 ); - - WideCharToMultiByte( CP_ACP, 0, utemp->pszUID, -1, p + pLen, nameLen+1, 0, 0 ); - lstrcpyA( p + pLen + nameLen, " " ); - utemp = utemp->next; - } - while ( utemp != NULL ); - return p; -} - - - - - - -//--------------------------------------------------- -// Module Manager functions -// -// Necessary to keep track of all modules -// that has registered with the plugin -//--------------------------------------------------- - -MODULEINFO* MM_AddModule(const char* pszModule) -{ - if (!pszModule) - return NULL; - if (!MM_FindModule(pszModule)) - { - MODULEINFO *node = (MODULEINFO*) mir_alloc(sizeof(MODULEINFO)); - ZeroMemory(node, sizeof(MODULEINFO)); - - node->pszModule = (char*)mir_alloc(lstrlenA(pszModule) + 1); - lstrcpyA(node->pszModule, pszModule); - - if (m_ModList == NULL) // list is empty - { - m_ModList = node; - node->next = NULL; - } - else - { - node->next = m_ModList; - m_ModList = node; - } - return node; - } - return FALSE; -} - -void MM_IconsChanged(void) -{ - MODULEINFO *pTemp = m_ModList, *pLast = NULL; - ImageList_ReplaceIcon(hIconsList, 0, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE)); - ImageList_ReplaceIcon(hIconsList, 1, LoadIconEx( "overlay", FALSE )); - while (pTemp != NULL) - { - pTemp->OnlineIconIndex = ImageList_ReplaceIcon(hIconsList, pTemp->OnlineIconIndex, LoadSkinnedProtoIcon(pTemp->pszModule, ID_STATUS_ONLINE)); - pTemp->OfflineIconIndex = ImageList_ReplaceIcon(hIconsList, pTemp->OfflineIconIndex, LoadSkinnedProtoIcon(pTemp->pszModule, ID_STATUS_OFFLINE)); - - if (pTemp->hOfflineIcon) - DestroyIcon(pTemp->hOfflineIcon); - if (pTemp->hOnlineIcon) - DestroyIcon(pTemp->hOnlineIcon); - if (pTemp->hOnlineTalkIcon) - DestroyIcon(pTemp->hOnlineTalkIcon); - if (pTemp->hOfflineTalkIcon) - DestroyIcon(pTemp->hOfflineTalkIcon); - pTemp->hOfflineIcon = ImageList_GetIcon(hIconsList, pTemp->OfflineIconIndex, ILD_TRANSPARENT); - pTemp->hOnlineIcon = ImageList_GetIcon(hIconsList, pTemp->OnlineIconIndex, ILD_TRANSPARENT); - - pTemp->hOnlineTalkIcon = ImageList_GetIcon(hIconsList, pTemp->OnlineIconIndex, ILD_TRANSPARENT|INDEXTOOVERLAYMASK(1)); - ImageList_ReplaceIcon(hIconsList, pTemp->OnlineIconIndex+1, pTemp->hOnlineTalkIcon); - - pTemp->hOfflineTalkIcon = ImageList_GetIcon(hIconsList, pTemp->OfflineIconIndex, ILD_TRANSPARENT|INDEXTOOVERLAYMASK(1)); - ImageList_ReplaceIcon(hIconsList, pTemp->OfflineIconIndex+1, pTemp->hOfflineTalkIcon); - - pLast = pTemp; - pTemp = pTemp->next; - } - return; -} -void MM_FontsChanged(void) -{ - MODULEINFO *pTemp = m_ModList; - while (pTemp != NULL) - { - pTemp->pszHeader = Log_CreateRtfHeader(pTemp); - pTemp = pTemp->next; - } - return; -} -MODULEINFO* MM_FindModule(const char* pszModule) -{ - MODULEINFO *pTemp = m_ModList, *pLast = NULL; - - if (!pszModule) - return NULL; - - while (pTemp != NULL) { - if (lstrcmpiA(pTemp->pszModule,pszModule) == 0) - return pTemp; - - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -// stupid thing.. -void MM_FixColors() -{ - MODULEINFO *pTemp = m_ModList; - - while (pTemp != NULL) - { - CheckColorsInModule(pTemp->pszModule); - pTemp = pTemp->next; - } - return; -} - -BOOL MM_RemoveAll (void) -{ - while (m_ModList != NULL) - { - MODULEINFO *pLast = m_ModList->next; - mir_free(m_ModList->pszModule); - mir_free(m_ModList->ptszModDispName); - mir_free(m_ModList->pszHeader); - mir_free(m_ModList->crColors); - - if (m_ModList->hOfflineIcon) - DestroyIcon(m_ModList->hOfflineIcon); - if (m_ModList->hOnlineIcon) - DestroyIcon(m_ModList->hOnlineIcon); - if (m_ModList->hOnlineTalkIcon) - DestroyIcon(m_ModList->hOnlineTalkIcon); - if (m_ModList->hOfflineTalkIcon) - DestroyIcon(m_ModList->hOfflineTalkIcon); - - mir_free(m_ModList); - m_ModList = pLast; - } - m_ModList = NULL; - return TRUE; -} - - - -//--------------------------------------------------- -// Tab list manager functions -// -// Necessary to keep track of what tabs should -// be restored -//--------------------------------------------------- - -BOOL TabM_AddTab(const TCHAR* pszID, const char* pszModule) -{ - TABLIST *node = NULL; - if (!pszID || !pszModule) - return FALSE; - - node = (TABLIST*) mir_alloc(sizeof(TABLIST)); - ZeroMemory( node, sizeof( TABLIST )); - node->pszID = mir_tstrdup( pszID ); - node->pszModule = mir_strdup( pszModule ); - - if ( g_TabList == NULL ) { // list is empty - g_TabList = node; - node->next = NULL; - } - else { - node->next = g_TabList; - g_TabList = node; - } - return TRUE; -} - -BOOL TabM_RemoveAll (void) -{ - while (g_TabList != NULL) - { - TABLIST * pLast = g_TabList->next; - mir_free(g_TabList->pszModule); - mir_free(g_TabList->pszID); - mir_free(g_TabList); - g_TabList = pLast; - } - g_TabList = NULL; - return TRUE; -} - -//--------------------------------------------------- -// Status manager functions -// -// Necessary to keep track of what user statuses -// per window nicklist that is available -//--------------------------------------------------- - -STATUSINFO * TM_AddStatus(STATUSINFO** ppStatusList, const TCHAR* pszStatus, int* iCount) -{ - if (!ppStatusList || !pszStatus) - return NULL; - - if ( !TM_FindStatus(*ppStatusList, pszStatus)) { - STATUSINFO *node = (STATUSINFO*) mir_alloc(sizeof(STATUSINFO)); - ZeroMemory(node, sizeof(STATUSINFO)); - replaceStr( &node->pszGroup, pszStatus ); - node->hIcon = (HICON)(*iCount); - while ((int)node->hIcon > STATUSICONCOUNT - 1) - node->hIcon--; - - if (*ppStatusList == NULL) // list is empty - { - node->Status = 1; - *ppStatusList = node; - node->next = NULL; - } - else - { - node->Status = ppStatusList[0]->Status*2; - node->next = *ppStatusList; - *ppStatusList = node; - } - return node; - - } - return FALSE; -} - -STATUSINFO * TM_FindStatus(STATUSINFO* pStatusList, const TCHAR* pszStatus) -{ - STATUSINFO *pTemp = pStatusList, *pLast = NULL; - - if (!pStatusList || !pszStatus) - return NULL; - - while ( pTemp != NULL ) { - if ( lstrcmpi(pTemp->pszGroup, pszStatus) == 0 ) - return pTemp; - - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -WORD TM_StringToWord(STATUSINFO* pStatusList, const TCHAR* pszStatus) -{ - STATUSINFO *pTemp = pStatusList, *pLast = NULL; - - if (!pStatusList || !pszStatus) - return 0; - - while (pTemp != NULL) { - if ( lstrcmpi( pTemp->pszGroup, pszStatus ) == 0 ) - return pTemp->Status; - - if ( pTemp->next == NULL ) - return pStatusList->Status; - - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -TCHAR* TM_WordToString(STATUSINFO* pStatusList, WORD Status) -{ - STATUSINFO *pTemp = pStatusList, *pLast = NULL; - - if (!pStatusList) - return NULL; - - while (pTemp != NULL) { - if (pTemp->Status&Status) { - Status -= pTemp->Status; - if (Status == 0) - return pTemp->pszGroup; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -BOOL TM_RemoveAll (STATUSINFO** ppStatusList) -{ - - if (!ppStatusList) - return FALSE; - - while (*ppStatusList != NULL) - { - STATUSINFO *pLast = ppStatusList[0]->next; - mir_free(ppStatusList[0]->pszGroup); - if ((int)ppStatusList[0]->hIcon > 10) - DestroyIcon(ppStatusList[0]->hIcon); - mir_free(*ppStatusList); - *ppStatusList = pLast; - } - *ppStatusList = NULL; - return TRUE; -} - -//--------------------------------------------------- -// User manager functions -// -// Necessary to keep track of the users -// in a window nicklist -//--------------------------------------------------- - - -static int UM_CompareItem(USERINFO * u1, const TCHAR* pszNick, WORD wStatus) -{ - int i; - - WORD dw1 = u1->Status; - WORD dw2 = wStatus; - - for (i=0; i<8; i++ ) - { - if (( dw1 & 1 ) && !( dw2 & 1 )) - return -1; - if (( dw2 & 1 ) && !( dw1 & 1 )) - return 1; - if (( dw1 & 1 ) && ( dw2 & 1 )) - return lstrcmp( u1->pszNick, pszNick ); - - dw1 = dw1 >> 1; - dw2 = dw2 >> 1; - } - return lstrcmp( u1->pszNick, pszNick ); - -} - -USERINFO * UM_SortUser(USERINFO** ppUserList, const TCHAR* pszUID) -{ - USERINFO * pTemp = *ppUserList, *pLast = NULL; - USERINFO * node = NULL; - - if (!pTemp || !pszUID) - return NULL; - - while(pTemp && lstrcmpi( pTemp->pszUID, pszUID)) { - pLast = pTemp; - pTemp = pTemp->next; - } - - if ( pTemp ) { - node = pTemp; - if (pLast) - pLast->next = pTemp->next; - else - *ppUserList = pTemp->next; - pTemp = *ppUserList; - - pLast = NULL; - - while ( pTemp && UM_CompareItem(pTemp, node->pszNick, node->Status ) <= 0) { - pLast = pTemp; - pTemp = pTemp->next; - } - - if (*ppUserList == NULL) { // list is empty - *ppUserList = node; - node->next = NULL; - } - else { - if ( pLast ) { - node->next = pTemp; - pLast->next = node; - } - else { - node->next = *ppUserList; - *ppUserList = node; - } } - - return node; - } - return NULL; -} - -USERINFO* UM_AddUser(STATUSINFO* pStatusList, USERINFO** ppUserList, const TCHAR* pszUID, const TCHAR* pszNick, WORD wStatus) -{ - USERINFO * pTemp = *ppUserList, *pLast = NULL; - - if (!pStatusList || !ppUserList || !ppUserList) - return NULL; - - while(pTemp && UM_CompareItem(pTemp, pszNick, wStatus) <= 0) - { - pLast = pTemp; - pTemp = pTemp->next; - } - - // if (!UM_FindUser(*ppUserList, pszUI, wStatus) - { - USERINFO *node = (USERINFO*) mir_alloc(sizeof(USERINFO)); - ZeroMemory(node, sizeof(USERINFO)); - replaceStr( &node->pszUID, pszUID ); - - if (*ppUserList == NULL) { // list is empty - *ppUserList = node; - node->next = NULL; - } - else { - if ( pLast ) { - node->next = pTemp; - pLast->next = node; - } - else { - node->next = *ppUserList; - *ppUserList = node; - } } - - return node; - } - return NULL; -} - -USERINFO* UM_FindUser(USERINFO* pUserList, const TCHAR* pszUID) -{ - USERINFO *pTemp = pUserList, *pLast = NULL; - - if (!pUserList || !pszUID) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->pszUID, pszUID )) - return pTemp; - - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -USERINFO* UM_FindUserFromIndex(USERINFO* pUserList, int index) -{ - int i = 0; - USERINFO *pTemp = pUserList; - - if (!pUserList) - return NULL; - - while (pTemp != NULL) - { - if (i == index) - { - return pTemp; - } - pTemp = pTemp->next; - i++; - } - return NULL; -} - -USERINFO* UM_GiveStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) -{ - USERINFO *pTemp = pUserList, *pLast = NULL; - - if (!pUserList || !pszUID) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->pszUID, pszUID )) { - pTemp->Status |= status; - return pTemp; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -USERINFO* UM_SetContactStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) -{ - USERINFO *pTemp = pUserList, *pLast = NULL; - - if (!pUserList || !pszUID) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->pszUID, pszUID )) { - pTemp->ContactStatus = status; - return pTemp; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -BOOL UM_SetStatusEx(USERINFO* pUserList, const TCHAR* pszText, int flags ) -{ - USERINFO *pTemp = pUserList, *pLast = NULL; - int bOnlyMe = ( flags & GC_SSE_ONLYLISTED ) != 0, bSetStatus = ( flags & GC_SSE_ONLINE ) != 0; - char cDelimiter = ( flags & GC_SSE_TABDELIMITED ) ? '\t' : ' '; - - while (pTemp != NULL) - { - if ( !bOnlyMe ) - pTemp->iStatusEx = 0; - - if ( pszText != NULL ) { - TCHAR* s = (TCHAR *)_tcsstr(pszText, pTemp->pszUID); - if ( s ) { - pTemp->iStatusEx = 0; - if ( s == pszText || s[-1] == cDelimiter ) { - int len = lstrlen( pTemp->pszUID ); - if ( s[len] == cDelimiter || s[len] == '\0' ) - pTemp->iStatusEx = ( !bOnlyMe || bSetStatus ) ? 1 : 0; - } } } - - pLast = pTemp; - pTemp = pTemp->next; - } - return TRUE; -} - -USERINFO* UM_TakeStatus(USERINFO* pUserList, const TCHAR* pszUID, WORD status) -{ - USERINFO *pTemp = pUserList, *pLast = NULL; - - if (!pUserList || !pszUID) - return NULL; - - while ( pTemp != NULL ) { - if ( !lstrcmpi( pTemp->pszUID, pszUID )) { - pTemp->Status &= ~status; - return pTemp; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return 0; -} - -TCHAR* UM_FindUserAutoComplete(USERINFO* pUserList, const TCHAR* pszOriginal, const TCHAR* pszCurrent) -{ - TCHAR* pszName = NULL; - USERINFO *pTemp = pUserList; - - if (!pUserList || !pszOriginal || !pszCurrent) - return NULL; - - while ( pTemp != NULL ) { - if ( pTemp->pszNick && my_strstri( pTemp->pszNick, pszOriginal) == pTemp->pszNick ) - if ( lstrcmpi( pTemp->pszNick, pszCurrent ) > 0 && ( !pszName || lstrcmpi( pTemp->pszNick, pszName ) < 0)) - pszName = pTemp->pszNick; - - pTemp = pTemp->next; - } - return pszName; -} - -BOOL UM_RemoveUser(USERINFO** ppUserList, const TCHAR* pszUID) -{ - USERINFO *pTemp = *ppUserList, *pLast = NULL; - - if (!ppUserList || !pszUID) - return FALSE; - - while (pTemp != NULL) { - if (!lstrcmpi( pTemp->pszUID, pszUID )) { - if (pLast == NULL) - *ppUserList = pTemp->next; - else - pLast->next = pTemp->next; - mir_free(pTemp->pszNick); - mir_free(pTemp->pszUID); - mir_free(pTemp); - return TRUE; - } - pLast = pTemp; - pTemp = pTemp->next; - } - return FALSE; -} - -BOOL UM_RemoveAll (USERINFO** ppUserList) -{ - if (!ppUserList) - return FALSE; - - while (*ppUserList != NULL) - { - USERINFO *pLast = ppUserList[0]->next; - mir_free( ppUserList[0]->pszUID ); - mir_free( ppUserList[0]->pszNick ); - mir_free( *ppUserList ); - *ppUserList = pLast; - } - *ppUserList = NULL; - return TRUE; -} - -//--------------------------------------------------- -// Log manager functions -// -// Necessary to keep track of events -// in a window log -//--------------------------------------------------- - -LOGINFO * LM_AddEvent(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd) -{ - - LOGINFO *node = NULL; - - if (!ppLogListStart || !ppLogListEnd) - return NULL; - - node = (LOGINFO*) mir_alloc(sizeof(LOGINFO)); - ZeroMemory(node, sizeof(LOGINFO)); - - - if (*ppLogListStart == NULL) // list is empty - { - *ppLogListStart = node; - *ppLogListEnd = node; - node->next = NULL; - node->prev = NULL; - } - else - { - ppLogListStart[0]->prev = node; - node->next = *ppLogListStart; - *ppLogListStart = node; - ppLogListStart[0]->prev=NULL; - } - - return node; -} - -BOOL LM_TrimLog(LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd, int iCount) -{ - LOGINFO *pTemp = *ppLogListEnd; - while (pTemp != NULL && iCount > 0) { - *ppLogListEnd = pTemp->prev; - if (*ppLogListEnd == NULL) - *ppLogListStart = NULL; - - mir_free(pTemp->ptszNick); - mir_free(pTemp->ptszUserInfo); - mir_free(pTemp->ptszText); - mir_free(pTemp->ptszStatus); - mir_free(pTemp); - pTemp = *ppLogListEnd; - iCount--; - } - ppLogListEnd[0]->next = NULL; - - return TRUE; -} - -BOOL LM_RemoveAll (LOGINFO** ppLogListStart, LOGINFO** ppLogListEnd) -{ - while ( *ppLogListStart != NULL ) { - LOGINFO *pLast = ppLogListStart[0]->next; - mir_free( ppLogListStart[0]->ptszText ); - mir_free( ppLogListStart[0]->ptszNick ); - mir_free( ppLogListStart[0]->ptszStatus ); - mir_free( ppLogListStart[0]->ptszUserInfo ); - mir_free( *ppLogListStart ); - *ppLogListStart = pLast; - } - *ppLogListStart = NULL; - *ppLogListEnd = NULL; - return TRUE; -} diff --git a/plugins/Chat/src/message.cpp b/plugins/Chat/src/message.cpp deleted file mode 100644 index ce76bfc6f5..0000000000 --- a/plugins/Chat/src/message.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson -Copyright 2003-2009 Miranda ICQ/IM project, - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "chat.h" -#include - -static int RTFColorToIndex(int *pIndex, int iCol, SESSION_INFO* si) -{ - int i; - MODULEINFO * pMod = MM_FindModule(si->pszModule); - - for (i = 0; i < pMod->nColorCount ; i++) - if ( pIndex[i] == iCol ) - return i; - - return -1; -} - -static void CreateColorMap( char* Text, int *pIndex, SESSION_INFO* si) -{ - char *p1, *p2, *pEnd; - int iIndex = 1; - - static const char* lpszFmt = "\\red%[^ \x5b\\]\\green%[^ \x5b\\]\\blue%[^ \x5b;];"; - char szRed[10], szGreen[10], szBlue[10]; - - p1 = strstr(Text, "\\colortbl" ); - if ( !p1 ) - return; - - pEnd = strchr(p1, '}'); - p2 = strstr(p1, "\\red" ); - - while (p2 && p2 < pEnd) { - if ( sscanf( p2, lpszFmt, &szRed, &szGreen, &szBlue) > 0 ) { - int i; - MODULEINFO * pMod = MM_FindModule(si->pszModule); - for (i = 0; i < pMod->nColorCount ; i ++) - if (pMod->crColors[i] == RGB( atoi(szRed), atoi(szGreen), atoi(szBlue))) - pIndex[i] = iIndex; - } - iIndex++; - p1 = p2; - p1 ++; - p2 = strstr(p1, "\\red" ); -} } - -static int ReadInteger( const char* p, int* result ) -{ - char temp[10]; - int i=0; - while ( isdigit( *p )) - temp[i++] = *p++; - temp[i] = 0; - - if ( result != NULL ) - *result = atoi( temp ); - - return i; -} - -TCHAR* DoRtfToTags( char* pszText, SESSION_INFO* si) -{ - char *p1; - int* pIndex; - int i, iRemoveChars, cp = CP_ACP; - char InsertThis[50]; - BOOL bJustRemovedRTF = TRUE; - BOOL bTextHasStarted = FALSE; - int iUcMode = 0; - - if ( !pszText ) - return FALSE; - - // create an index of colors in the module and map them to - // corresponding colors in the RTF color table - pIndex = (int *)mir_alloc(sizeof(int) * MM_FindModule(si->pszModule)->nColorCount); - for(i = 0; i < MM_FindModule(si->pszModule)->nColorCount ; i++) - pIndex[i] = -1; - - CreateColorMap( pszText, pIndex, si ); - - // scan the file for rtf commands and remove or parse them - p1 = strstr( pszText, "\\pard" ); - if ( p1 == NULL ) { - mir_free(pIndex); - return FALSE; - } - - p1 += 5; - - memmove(pszText, p1, strlen(p1) + 1); - p1 = pszText; - - // iterate through all characters, if rtf control character found then take action - while ( *p1 != '\0' ) { - InsertThis[0] = 0; - iRemoveChars = 0; - - switch (*p1) { - case '\\': - if ( !memcmp(p1, "\\cf", 3 )) { // foreground color - int iCol, iInd; - iRemoveChars = 3 + ReadInteger(p1+3, &iCol); - iInd = RTFColorToIndex(pIndex, iCol, si); - bJustRemovedRTF = TRUE; - - if (bTextHasStarted || iInd >= 0) - mir_snprintf( InsertThis, SIZEOF(InsertThis), ( iInd >= 0 ) ? "%%c%02u" : "%%C", iInd); - } - else if ( !memcmp(p1, "\\highlight", 10 )) { //background color - int iCol, iInd; - iRemoveChars = 10 + ReadInteger(p1+10, &iCol); - iInd = RTFColorToIndex(pIndex, iCol, si); - bJustRemovedRTF = TRUE; - - if (bTextHasStarted || iInd >= 0) - mir_snprintf( InsertThis, SIZEOF(InsertThis), ( iInd >= 0 ) ? "%%f%02u" : "%%F", iInd); - } - else if ( !memcmp(p1, "\\lang", 5 )) { // language id - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = 5 + ReadInteger( p1+5, NULL ); - } - else if ( !memcmp(p1, "\\par", 4 )) { // newline - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = 4; - strcpy(InsertThis, "\n" ); - } - else if ( !memcmp(p1, "\\line", 5 )) { // newline - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = 5; - strcpy(InsertThis, "\n" ); - } - else if (!memcmp(p1, "\\bullet", 7)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 7; - strcpy(InsertThis, "\xE2\x80\xA2"); - } - else if ( !memcmp(p1, "\\b", 2 )) { //bold - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = (p1[2] != '0')?2:3; - mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%b": "%%B" ); - } - else if ( !memcmp(p1, "\\i", 2 )) { // italics - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = (p1[2] != '0')?2:3; - mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[2] != '0') ? "%%i" : "%%I" ); - } - else if ( !memcmp(p1, "\\uc", 3 )) { // number of Unicode chars - bTextHasStarted = bJustRemovedRTF = TRUE; - iUcMode = p1[3] - '0'; - iRemoveChars = 4; - } - else if ( !memcmp(p1, "\\ul", 3 )) { // underlined - bTextHasStarted = bJustRemovedRTF = TRUE; - if (p1[3] == 'n') - iRemoveChars = 7; - else if (p1[3] == '0') - iRemoveChars = 4; - else - iRemoveChars = 3; - mir_snprintf(InsertThis, SIZEOF(InsertThis), (p1[3] != '0' && p1[3] != 'n') ? "%%u" : "%%U" ); - } - else if ( p1[1] == 'f' && isdigit( p1[2] )) { // unicode char - bTextHasStarted = bJustRemovedRTF = TRUE; - iRemoveChars = 2 + ReadInteger( p1+2, NULL ); - } - else if ( !memcmp(p1, "\\tab", 4 )) { // tab - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 4; - strcpy(InsertThis, " " ); - } - else if (!memcmp(p1, "\\endash", 7)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 7; - strcpy(InsertThis, "\xE2\x80\x93"); - } - else if (!memcmp(p1, "\\emdash", 7)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 7; - strcpy(InsertThis, "\xE2\x80\x94"); - } - else if (!memcmp(p1, "\\lquote",7)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 7; - strcpy(InsertThis, "\xE2\x80\x98"); - } - else if (!memcmp(p1, "\\rquote",7)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 7; - strcpy(InsertThis, "\xE2\x80\x99"); - } - else if (!memcmp(p1, "\\ldblquote",10)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 10; - strcpy(InsertThis, "\xe2\x80\x9c"); - } - else if (!memcmp(p1, "\\rdblquote",10)) { - bTextHasStarted = TRUE; - bJustRemovedRTF = TRUE; - iRemoveChars = 10; - strcpy(InsertThis, "\xe2\x80\x9d"); - } - else if ( p1[1] == '\\' || p1[1] == '{' || p1[1] == '}' ) { // escaped characters - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - iRemoveChars = 2; - mir_snprintf(InsertThis, SIZEOF(InsertThis), "%c", p1[1]); - } - else if ( p1[1] == '~' ) { // non-breaking space - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - iRemoveChars = 2; - strcpy(InsertThis, "\xC2\xA0"); - } - else if ( p1[1] == '\'' ) { // special character - char tmp[4], *p3 = tmp; - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - if (p1[2] != ' ' && p1[2] != '\\') { - *p3++ = p1[2]; - iRemoveChars = 3; - if ( p1[3] != ' ' && p1[3] != '\\') { - *p3++ = p1[3]; - iRemoveChars++; - } - *p3 = 0; - sscanf( tmp, "%x", InsertThis ); - - InsertThis[1] = 0; - } - else iRemoveChars = 2; - } - else if ( bJustRemovedRTF ) { // remove unknown RTF command - int j = 1; - bJustRemovedRTF = TRUE; - while(p1[j] != ' ' && p1[j] != '\\' && p1[j] != '\0') - j++; - iRemoveChars = j; - } - break; - - case '{': // other RTF control characters - case '}': - iRemoveChars = 1; - break; - - case '\r': case '\n': - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - iRemoveChars = 1; - break; - - case '%': // escape chat -> protocol control character - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - iRemoveChars = 1; - strcpy(InsertThis, "%%"); - break; - case ' ': // remove spaces following a RTF command - if (bJustRemovedRTF) - iRemoveChars = 1; - bJustRemovedRTF = FALSE; - bTextHasStarted = TRUE; - break; - - default: // other text that should not be touched - bTextHasStarted = TRUE; - bJustRemovedRTF = FALSE; - break; - } - - // move the memory and paste in new commands instead of the old RTF - if (InsertThis[0] || iRemoveChars) - { - size_t len = strlen(InsertThis); - memmove(p1 + len , p1 + iRemoveChars, strlen(p1) - iRemoveChars + 1); - memcpy(p1, InsertThis, len); - p1 += len; - } - else p1++; - } - - mir_free(pIndex); - - return mir_utf8decodeW(pszText); -} - -static DWORD CALLBACK Message_StreamCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb) -{ - static DWORD dwRead; - char ** ppText = (char **) dwCookie; - - if (*ppText == NULL) { - *ppText = (char *)mir_alloc(cb + 1); - memcpy(*ppText, pbBuff, cb); - (*ppText)[cb] = 0; - *pcb = cb; - dwRead = cb; - } - else { - char *p = (char *)mir_alloc(dwRead + cb + 1); - memcpy(p, *ppText, dwRead); - memcpy(p+dwRead, pbBuff, cb); - p[dwRead + cb] = 0; - mir_free(*ppText); - *ppText = p; - *pcb = cb; - dwRead += cb; - } - - return 0; -} - -char* Message_GetFromStream(HWND hwndDlg, SESSION_INFO* si) -{ - EDITSTREAM stream; - char* pszText = NULL; - DWORD dwFlags; - - if (hwndDlg == 0 || si == 0) - return NULL; - - ZeroMemory(&stream, sizeof(stream)); - stream.pfnCallback = Message_StreamCallback; - stream.dwCookie = (DWORD_PTR) &pszText; // pass pointer to pointer - - dwFlags = SF_RTFNOOBJS | SFF_PLAINRTF | SF_USECODEPAGE | (CP_UTF8 << 16); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_STREAMOUT, dwFlags, (LPARAM) & stream); - return pszText; // pszText contains the text -} diff --git a/plugins/Chat/src/options.cpp b/plugins/Chat/src/options.cpp deleted file mode 100644 index 89d39d7f47..0000000000 --- a/plugins/Chat/src/options.cpp +++ /dev/null @@ -1,1123 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright (C) 2003 Jörgen Persson - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "resource.h" -#include "chat.h" - -#include - -extern HBRUSH hEditBkgBrush; -extern HBRUSH hListBkgBrush; -extern HBRUSH hListSelectedBkgBrush; -extern HICON hIcons[30]; -extern FONTINFO aFonts[OPTIONS_FONTCOUNT]; -extern BOOL PopUpInstalled; -extern SESSION_INFO g_TabSession; - -HANDLE g_hOptions = NULL; - -#define FONTF_BOLD 1 -#define FONTF_ITALIC 2 -struct FontOptionsList -{ - const TCHAR* szDescr; - COLORREF defColour; - const TCHAR* szDefFace; - BYTE defCharset, defStyle; - char defSize; - COLORREF colour; - const TCHAR* szFace; - BYTE charset, style; - char size; -} - -//remeber to put these in the Translate( ) template file too -static const fontOptionsList[] = { - { LPGENT("Timestamp"), RGB(50, 50, 240), _T("Terminal"), DEFAULT_CHARSET, 0, -8}, - { LPGENT("Others nicknames"), RGB(0, 0, 0), _T("Verdana"), DEFAULT_CHARSET, FONTF_BOLD, -12}, - { LPGENT("Your nickname"), RGB(0, 0, 0), _T("Verdana"), DEFAULT_CHARSET, FONTF_BOLD, -12}, - { LPGENT("User has joined"), RGB(90, 160, 90), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User has left"), RGB(160, 160, 90), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User has disconnected"), RGB(160, 90, 90), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User kicked ..."), RGB(100, 100, 100), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User is now known as ..."), RGB(90, 90, 160), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Notice from user"), RGB(160, 130, 60), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Incoming message"), RGB(90, 90, 90), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Outgoing message"), RGB(90, 90, 90), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("The topic is ..."), RGB(70, 70, 160), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Information messages"), RGB(130, 130, 195), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User enables status for ..."), RGB(70, 150, 70), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User disables status for ..."), RGB(150, 70, 70), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Action message"), RGB(160, 90, 160), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Highlighted message"), RGB(180, 150, 80), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("Message typing area"), RGB(0, 0, 40), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User list members (Online)"), RGB(0,0, 0), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, - { LPGENT("User list members (away)"), RGB(170, 170, 170), _T("Verdana"), DEFAULT_CHARSET, 0, -12}, -}; - -const int msgDlgFontCount = SIZEOF(fontOptionsList); - -struct branch_t -{ - const TCHAR* szDescr; - const char* szDBName; - int iMode; - BYTE bDefault; -}; - -static const struct branch_t branch0[] = { - { LPGENT("Use a tabbed interface"), "Tabs", 0, 1}, - { LPGENT("Close tab on doubleclick"), "TabCloseOnDblClick", 0, 0}, - { LPGENT("Restore previously open tabs when showing the window"), "TabRestore", 0, 0}, - { LPGENT("Show tabs at the bottom"), "TabBottom", 0, 0}, -}; - -static const struct branch_t branch1[] = { - { LPGENT("Send message by pressing the Enter key"), "SendOnEnter", 0, 1}, - { LPGENT("Send message by pressing the Enter key twice"), "SendOnDblEnter", 0,0}, - { LPGENT("Flash window when someone speaks"), "FlashWindow", 0,0}, - { LPGENT("Flash window when a word is highlighted"), "FlashWindowHighlight", 0,1}, - { LPGENT("Show list of users in the chat room"), "ShowNicklist", 0,1}, - { LPGENT("Show button for sending messages"), "ShowSend", 0, 0}, - { LPGENT("Show buttons for controlling the chat room"), "ShowTopButtons", 0,1}, - { LPGENT("Show buttons for formatting the text you are typing"), "ShowFormatButtons", 0,1}, - { LPGENT("Show button menus when right clicking the buttons"), "RightClickFilter", 0,0}, - { LPGENT("Show new windows cascaded"), "CascadeWindows", 0,1}, - { LPGENT("Save the size and position of chat rooms"), "SavePosition", 0,0}, - { LPGENT("Show the topic of the room on your contact list (if supported)"), "TopicOnClist", 0, 0}, - { LPGENT("Do not play sounds when the chat room is focused"), "SoundsFocus", 0, 0}, - { LPGENT("Do not pop up the window when joining a chat room"), "PopupOnJoin", 0,0}, - { LPGENT("Toggle the visible state when double clicking in the contact list"), "ToggleVisibility", 0,0}, - {LPGENT("Show contact statuses if protocol supports them"), "ShowContactStatus", 0,0}, - {LPGENT("Display contact status icon before user role icon"), "ContactStatusFirst", 0,0}, -}; - -static const struct branch_t branch2[] = { - { LPGENT("Prefix all events with a timestamp"), "ShowTimeStamp", 0,1}, - { LPGENT("Only prefix with timestamp if it has changed"), "ShowTimeStampIfChanged", 0,0}, - { LPGENT("Timestamp has same colour as the event"), "TimeStampEventColour", 0,0}, - { LPGENT("Indent the second line of a message"), "LogIndentEnabled", 0,1}, - { LPGENT("Limit user names in the message log to 20 characters"), "LogLimitNames", 0,1}, - { LPGENT("Add \':\' to auto-completed user names"), "AddColonToAutoComplete", 0, 1}, - { LPGENT("Strip colors from messages in the log"), "StripFormatting", 0, 0}, - { LPGENT("Enable the \'event filter\' for new rooms"), "FilterEnabled", 0,0} -}; - -static const struct branch_t branch3[] = { - { LPGENT("Show topic changes"), "FilterFlags", GC_EVENT_TOPIC, 0}, - { LPGENT("Show users joining"), "FilterFlags", GC_EVENT_JOIN, 0}, - { LPGENT("Show users disconnecting"), "FilterFlags", GC_EVENT_QUIT, 0}, - { LPGENT("Show messages"), "FilterFlags", GC_EVENT_MESSAGE, 1}, - { LPGENT("Show actions"), "FilterFlags", GC_EVENT_ACTION, 1}, - { LPGENT("Show users leaving"), "FilterFlags", GC_EVENT_PART, 0}, - { LPGENT("Show users being kicked"), "FilterFlags", GC_EVENT_KICK, 1}, - { LPGENT("Show notices"), "FilterFlags", GC_EVENT_NOTICE, 1}, - { LPGENT("Show users changing name"), "FilterFlags", GC_EVENT_NICK, 0}, - { LPGENT("Show information messages"), "FilterFlags", GC_EVENT_INFORMATION, 1}, - { LPGENT("Show status changes of users"), "FilterFlags", GC_EVENT_ADDSTATUS, 0}, -}; - -static const struct branch_t branch4[] = { - { LPGENT("Show icon for topic changes"), "IconFlags", GC_EVENT_TOPIC, 0}, - { LPGENT("Show icon for users joining"), "IconFlags", GC_EVENT_JOIN, 1}, - { LPGENT("Show icon for users disconnecting"), "IconFlags", GC_EVENT_QUIT, 0}, - { LPGENT("Show icon for messages"), "IconFlags", GC_EVENT_MESSAGE, 0}, - { LPGENT("Show icon for actions"), "IconFlags", GC_EVENT_ACTION, 0}, - { LPGENT("Show icon for highlights"), "IconFlags", GC_EVENT_HIGHLIGHT, 0}, - { LPGENT("Show icon for users leaving"), "IconFlags", GC_EVENT_PART, 0}, - { LPGENT("Show icon for users kicking other user"), "IconFlags", GC_EVENT_KICK, 0}, - { LPGENT("Show icon for notices "), "IconFlags", GC_EVENT_NOTICE, 0}, - { LPGENT("Show icon for name changes"), "IconFlags", GC_EVENT_NICK, 0}, - { LPGENT("Show icon for information messages"), "IconFlags", GC_EVENT_INFORMATION, 0}, - { LPGENT("Show icon for status changes"), "IconFlags", GC_EVENT_ADDSTATUS, 0}, -}; - -static const struct branch_t branch5[] = { - { LPGENT("Show icons in tray only when the chat room is not active"), "TrayIconInactiveOnly", 0, 1}, - { LPGENT("Show icon in tray for topic changes"), "TrayIconFlags", GC_EVENT_TOPIC, 0}, - { LPGENT("Show icon in tray for users joining"), "TrayIconFlags", GC_EVENT_JOIN, 0}, - { LPGENT("Show icon in tray for users disconnecting"), "TrayIconFlags", GC_EVENT_QUIT, 0}, - { LPGENT("Show icon in tray for messages"), "TrayIconFlags", GC_EVENT_MESSAGE, 0}, - { LPGENT("Show icon in tray for actions"), "TrayIconFlags", GC_EVENT_ACTION, 0}, - { LPGENT("Show icon in tray for highlights"), "TrayIconFlags", GC_EVENT_HIGHLIGHT, 1}, - { LPGENT("Show icon in tray for users leaving"), "TrayIconFlags", GC_EVENT_PART, 0}, - { LPGENT("Show icon in tray for users kicking other user"), "TrayIconFlags", GC_EVENT_KICK, 0}, - { LPGENT("Show icon in tray for notices "), "TrayIconFlags", GC_EVENT_NOTICE, 0}, - { LPGENT("Show icon in tray for name changes"), "TrayIconFlags", GC_EVENT_NICK, 0}, - { LPGENT("Show icon in tray for information messages"), "TrayIconFlags", GC_EVENT_INFORMATION, 0}, - { LPGENT("Show icon in tray for status changes"), "TrayIconFlags", GC_EVENT_ADDSTATUS, 0}, -}; - -static const struct branch_t branch6[] = { - { LPGENT("Show pop-ups only when the chat room is not active"), "PopUpInactiveOnly", 0, 1}, - { LPGENT("Show pop-up for topic changes"), "PopupFlags", GC_EVENT_TOPIC, 0}, - { LPGENT("Show pop-up for users joining"), "PopupFlags", GC_EVENT_JOIN, 0}, - { LPGENT("Show pop-up for users disconnecting"), "PopupFlags", GC_EVENT_QUIT, 0}, - { LPGENT("Show pop-up for messages"), "PopupFlags", GC_EVENT_MESSAGE, 0}, - { LPGENT("Show pop-up for actions"), "PopupFlags", GC_EVENT_ACTION, 0}, - { LPGENT("Show pop-up for highlights"), "PopupFlags", GC_EVENT_HIGHLIGHT, 0}, - { LPGENT("Show pop-up for users leaving"), "PopupFlags", GC_EVENT_PART, 0}, - { LPGENT("Show pop-up for users kicking other user"), "PopupFlags", GC_EVENT_KICK, 0}, - { LPGENT("Show pop-up for notices "), "PopupFlags", GC_EVENT_NOTICE, 0}, - { LPGENT("Show pop-up for name changes"), "PopupFlags", GC_EVENT_NICK, 0}, - { LPGENT("Show pop-up for information messages"), "PopupFlags", GC_EVENT_INFORMATION, 0}, - { LPGENT("Show pop-up for status changes"), "PopupFlags", GC_EVENT_ADDSTATUS, 0}, -}; - -HTREEITEM hItemB0[SIZEOF(branch0)]; -HTREEITEM hItemB1[SIZEOF(branch1)]; -HTREEITEM hItemB2[SIZEOF(branch2)]; -HTREEITEM hItemB3[SIZEOF(branch3)]; -HTREEITEM hItemB4[SIZEOF(branch4)]; -HTREEITEM hItemB5[SIZEOF(branch5)]; -HTREEITEM hItemB6[SIZEOF(branch6)]; - -static HTREEITEM InsertBranch(HWND hwndTree, char* pszDescr, BOOL bExpanded) -{ - HTREEITEM res; - TVINSERTSTRUCT tvis = {0}; - - tvis.hInsertAfter = TVI_LAST; - tvis.item.mask = TVIF_TEXT|TVIF_STATE; - tvis.item.pszText = (TCHAR*)CallService(MS_LANGPACK_PCHARTOTCHAR, 0, (LPARAM)pszDescr); - tvis.item.stateMask = bExpanded ? TVIS_STATEIMAGEMASK | TVIS_EXPANDED : TVIS_STATEIMAGEMASK; - tvis.item.state = bExpanded ? INDEXTOSTATEIMAGEMASK(1) | TVIS_EXPANDED : INDEXTOSTATEIMAGEMASK(1); - res = TreeView_InsertItem(hwndTree, &tvis); - mir_free(tvis.item.pszText); - return res; -} - -static void FillBranch(HWND hwndTree, HTREEITEM hParent, const struct branch_t *branch, HTREEITEM *hItemB, int nValues, DWORD defaultval) -{ - TVINSERTSTRUCT tvis; - int i; - int iState; - - if (hParent == 0) - return; - - tvis.hParent=hParent; - tvis.hInsertAfter=TVI_LAST; - tvis.item.mask=TVIF_TEXT|TVIF_STATE; - for (i=0;i>12==1)?0:1; - if(branch[i].iMode) { - if (bChecked) - iState |= branch[i].iMode; - if (iState&GC_EVENT_ADDSTATUS) - iState |= GC_EVENT_REMOVESTATUS; - DBWriteContactSettingDword(NULL, "Chat", branch[i].szDBName, (DWORD)iState); - } - else DBWriteContactSettingByte(NULL, "Chat", branch[i].szDBName, bChecked); -} } - -static void CheckHeading(HWND hwndTree, HTREEITEM hHeading) -{ - BOOL bChecked = TRUE; - TVITEM tvi; - - if (hHeading == 0) - return; - - tvi.mask=TVIF_HANDLE|TVIF_STATE; - tvi.hItem=TreeView_GetNextItem(hwndTree, hHeading, TVGN_CHILD); - while(tvi.hItem && bChecked) { - if (tvi.hItem != hItemB1[0] && tvi.hItem != hItemB1[1] ) { - TreeView_GetItem(hwndTree,&tvi); - if (((tvi.state & TVIS_STATEIMAGEMASK)>>12 == 1)) - bChecked = FALSE; - } - tvi.hItem=TreeView_GetNextSibling(hwndTree,tvi.hItem); - } - tvi.stateMask = TVIS_STATEIMAGEMASK; - tvi.state = INDEXTOSTATEIMAGEMASK(bChecked?2:1); - tvi.hItem = hHeading; - TreeView_SetItem(hwndTree,&tvi); -} - -static void CheckBranches(HWND hwndTree, HTREEITEM hHeading) -{ - BOOL bChecked = TRUE; - TVITEM tvi; - - if (hHeading == 0) - return; - - tvi.mask=TVIF_HANDLE|TVIF_STATE; - tvi.hItem = hHeading; - TreeView_GetItem(hwndTree,&tvi); - if (((tvi.state&TVIS_STATEIMAGEMASK)>>12==2)) - bChecked = FALSE; - tvi.hItem=TreeView_GetNextItem(hwndTree, hHeading, TVGN_CHILD); - tvi.stateMask = TVIS_STATEIMAGEMASK; - while(tvi.hItem) { - tvi.state=INDEXTOSTATEIMAGEMASK(bChecked?2:1); - if (tvi.hItem !=hItemB1[0] && tvi.hItem != hItemB1[1] ) - TreeView_SetItem(hwndTree,&tvi); - tvi.hItem=TreeView_GetNextSibling(hwndTree,tvi.hItem); -} } - -static INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) -{ - TCHAR szDir[MAX_PATH]; - switch(uMsg) { - case BFFM_INITIALIZED: - SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData); - break; - - case BFFM_SELCHANGED: - if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir)) - SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); - break; - } - return 0; -} - -void LoadLogFonts(void) -{ - int i; - - for ( i = 0; ilfHeight = (char) DBGetContactSettingByte(NULL, "ChatFonts", str, fontOptionsList[i].defSize); - lf->lfWidth = 0; - lf->lfEscapement = 0; - lf->lfOrientation = 0; - wsprintfA(str, "Font%dSty", i); - style = DBGetContactSettingByte(NULL, "ChatFonts", str, fontOptionsList[i].defStyle); - lf->lfWeight = style & FONTF_BOLD ? FW_BOLD : FW_NORMAL; - lf->lfItalic = style & FONTF_ITALIC ? 1 : 0; - lf->lfUnderline = 0; - lf->lfStrikeOut = 0; - wsprintfA(str, "Font%dSet", i); - lf->lfCharSet = DBGetContactSettingByte(NULL, "ChatFonts", str, fontOptionsList[i].defCharset); - lf->lfOutPrecision = OUT_DEFAULT_PRECIS; - lf->lfClipPrecision = CLIP_DEFAULT_PRECIS; - lf->lfQuality = DEFAULT_QUALITY; - lf->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; - wsprintfA(str, "Font%d", i); - if (DBGetContactSettingTString(NULL, "ChatFonts", str, &dbv)) - lstrcpy(lf->lfFaceName, fontOptionsList[i].szDefFace); - else { - lstrcpyn(lf->lfFaceName, dbv.ptszVal, SIZEOF(lf->lfFaceName)); - DBFreeVariant(&dbv); -} } } - -void RegisterFonts( void ) -{ - FontIDT fontid = {0}; - ColourIDT colourid; - char idstr[10]; - int index = 0, i; - - fontid.cbSize = sizeof(FontIDT); - fontid.flags = FIDF_ALLOWREREGISTER | FIDF_DEFAULTVALID | FIDF_NEEDRESTART; - for (i = 0; i < msgDlgFontCount; i++, index++) { - strncpy(fontid.dbSettingsGroup, "ChatFonts", sizeof(fontid.dbSettingsGroup)); - _tcsncpy(fontid.group, _T("Chat Module"), SIZEOF(fontid.group)); - _tcsncpy(fontid.name, fontOptionsList[i].szDescr, SIZEOF(fontid.name)); - sprintf(idstr, "Font%d", index); - strncpy(fontid.prefix, idstr, sizeof(fontid.prefix)); - fontid.order = index; - - fontid.deffontsettings.charset = fontOptionsList[i].defCharset; - fontid.deffontsettings.colour = fontOptionsList[i].defColour; - fontid.deffontsettings.size = fontOptionsList[i].defSize; - fontid.deffontsettings.style = fontOptionsList[i].defStyle; - _tcsncpy(fontid.deffontsettings.szFace, fontOptionsList[i].szDefFace, SIZEOF(fontid.deffontsettings.szFace)); - _tcsncpy(fontid.backgroundGroup, _T("Chat Module"), SIZEOF(fontid.backgroundGroup)); - switch (i) { - case 17: - _tcsncpy(fontid.backgroundName, _T("Message Background"), SIZEOF(fontid.backgroundName)); - break; - case 18: - case 19: - _tcsncpy(fontid.backgroundName, _T("Userlist Background"), SIZEOF(fontid.backgroundName)); - break; - default: - _tcsncpy(fontid.backgroundName, _T("Background"), SIZEOF(fontid.backgroundName)); - break; - } - FontRegisterT(&fontid); - } - - colourid.cbSize = sizeof(ColourIDT); - colourid.order = 0; - strncpy(colourid.dbSettingsGroup, "Chat", sizeof(colourid.dbSettingsGroup)); - - strncpy(colourid.setting, "ColorLogBG", SIZEOF(colourid.setting)); - _tcsncpy(colourid.name, LPGENT("Background"), SIZEOF(colourid.name)); - _tcsncpy(colourid.group, LPGENT("Chat Module"), SIZEOF(colourid.group)); - colourid.defcolour = GetSysColor(COLOR_WINDOW); - ColourRegisterT(&colourid); - - strncpy(colourid.setting, "ColorMessageBG", SIZEOF(colourid.setting)); - _tcsncpy(colourid.name, LPGENT("Message Background"), SIZEOF(colourid.name)); - colourid.defcolour = GetSysColor(COLOR_WINDOW); - ColourRegisterT(&colourid); - - strncpy(colourid.setting, "ColorNicklistBG", SIZEOF(colourid.setting)); - _tcsncpy(colourid.name, LPGENT("Userlist Background"), SIZEOF(colourid.name)); - colourid.defcolour = GetSysColor(COLOR_WINDOW); - ColourRegisterT(&colourid); - - strncpy(colourid.setting, "ColorNicklistLines", SIZEOF(colourid.setting)); - _tcsncpy(colourid.name, LPGENT("Userlist Lines"), SIZEOF(colourid.name)); - colourid.defcolour = GetSysColor(COLOR_INACTIVEBORDER); - ColourRegisterT(&colourid); - - strncpy(colourid.setting, "ColorNicklistSelectedBG", SIZEOF(colourid.setting)); - _tcsncpy(colourid.name, LPGENT("Userlist Background (selected)"), SIZEOF(colourid.name)); - colourid.defcolour = GetSysColor(COLOR_HIGHLIGHT); - ColourRegisterT(&colourid); -} - -// add icons to the skinning module - -struct -{ - int size; - char* szSection; - char* szDescr; - char* szName; - int defIconID; -} -static const iconList[] = -{ - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Window Icon"), "chat_window", IDI_CHANMGR }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Text colour"), "chat_fgcol", IDI_COLOR }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Background colour"), "chat_bkgcol", IDI_BKGCOLOR }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Bold"), "chat_bold", IDI_BBOLD }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Italics"), "chat_italics", IDI_BITALICS }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Underlined"), "chat_underline", IDI_BUNDERLINE }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Smiley button"), "chat_smiley", IDI_BSMILEY }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Room history"), "chat_history", IDI_HISTORY }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Room settings"), "chat_settings", IDI_TOPICBUT }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Event filter disabled"), "chat_filter", IDI_FILTER }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Event filter enabled"), "chat_filter2", IDI_FILTER2 }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Hide userlist"), "chat_nicklist", IDI_NICKLIST }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Show userlist"), "chat_nicklist2", IDI_NICKLIST2 }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Icon overlay"), "chat_overlay", IDI_OVERLAY }, - { 0, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Close"), "chat_close", IDI_CLOSE }, - - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 1 (10x10)"), "chat_status0", IDI_STATUS0 }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 2 (10x10)"), "chat_status1", IDI_STATUS1 }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 3 (10x10)"), "chat_status2", IDI_STATUS2 }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 4 (10x10)"), "chat_status3", IDI_STATUS3 }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 5 (10x10)"), "chat_status4", IDI_STATUS4 }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats"), LPGEN("Status 6 (10x10)"), "chat_status5", IDI_STATUS5 }, - - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Message in (10x10)"), "chat_log_message_in", IDI_MESSAGE }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Message out (10x10)"), "chat_log_message_out", IDI_MESSAGEOUT }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Action (10x10)"), "chat_log_action", IDI_ACTION }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Add Status (10x10)"), "chat_log_addstatus", IDI_ADDSTATUS }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Remove status (10x10)"), "chat_log_removestatus", IDI_REMSTATUS }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Join (10x10)"), "chat_log_join", IDI_JOIN }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Leave (10x10)"), "chat_log_part", IDI_PART }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Quit (10x10)"), "chat_log_quit", IDI_QUIT }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Kick (10x10)"), "chat_log_kick", IDI_KICK }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Nickchange (10x10)"), "chat_log_nick", IDI_NICK }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Notice (10x10)"), "chat_log_notice", IDI_NOTICE }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Topic (10x10)"), "chat_log_topic", IDI_TOPIC }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Highlight (10x10)"), "chat_log_highlight", IDI_HIGHLIGHT }, - { 10, LPGEN("Messaging") "/" LPGEN("Group Chats Log"), LPGEN("Information (10x10)"), "chat_log_info", IDI_INFO } -}; - -void AddIcons(void) -{ - TCHAR szFile[MAX_PATH]; - GetModuleFileName(g_hInst, szFile, MAX_PATH); - - SKINICONDESC sid = {0}; - sid.cbSize = sizeof(SKINICONDESC); - sid.ptszDefaultFile = szFile; - sid.flags = SIDF_PATH_TCHAR; - - for (int i = 0; i < SIZEOF(iconList); i++ ) { - sid.cx = sid.cy = iconList[i].size; - sid.pszSection = iconList[i].szSection; - sid.pszDescription = iconList[i].szDescr; - sid.pszName = iconList[i].szName; - sid.iDefaultIndex = -iconList[i].defIconID; - Skin_AddIcon(&sid); -} } - -// load icons from the skinning module if available -HICON LoadIconEx( char* pszIcoLibName, BOOL big ) -{ - char szTemp[256]; - mir_snprintf(szTemp, SIZEOF(szTemp), "chat_%s", pszIcoLibName); - return (HICON) CallService(MS_SKIN2_GETICON, big, (LPARAM)szTemp); -} - -static void InitSetting(TCHAR** ppPointer, char* pszSetting, TCHAR* pszDefault) -{ - DBVARIANT dbv; - if ( !DBGetContactSettingTString(NULL, "Chat", pszSetting, &dbv )) { - replaceStr( ppPointer, dbv.ptszVal ); - DBFreeVariant(&dbv); - } - else replaceStr( ppPointer, pszDefault ); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// General options - -#define OPT_FIXHEADINGS (WM_USER+1) - -static INT_PTR CALLBACK DlgProcOptions1(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - static HTREEITEM hListHeading1 = 0; - static HTREEITEM hListHeading2= 0; - static HTREEITEM hListHeading3= 0; - static HTREEITEM hListHeading4= 0; - static HTREEITEM hListHeading5= 0; - static HTREEITEM hListHeading6= 0; - static HTREEITEM hListHeading0= 0; - switch (uMsg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_CHECKBOXES),GWL_STYLE,GetWindowLongPtr(GetDlgItem(hwndDlg,IDC_CHECKBOXES),GWL_STYLE)|TVS_NOHSCROLL|TVS_CHECKBOXES); - hListHeading0 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Options for using a tabbed interface"), DBGetContactSettingByte(NULL, "Chat", "Branch0Exp", 0)?TRUE:FALSE); - hListHeading1 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Appearance and functionality of chat room windows"), DBGetContactSettingByte(NULL, "Chat", "Branch1Exp", 0)?TRUE:FALSE); - hListHeading2 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Appearance of the message log"), DBGetContactSettingByte(NULL, "Chat", "Branch2Exp", 0)?TRUE:FALSE); - hListHeading3 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Default events to show in new chat rooms if the \'event filter\' is enabled"), DBGetContactSettingByte(NULL, "Chat", "Branch3Exp", 0)?TRUE:FALSE); - hListHeading4 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Icons to display in the message log"), DBGetContactSettingByte(NULL, "Chat", "Branch4Exp", 0)?TRUE:FALSE); - hListHeading5 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Icons to display in the tray"), DBGetContactSettingByte(NULL, "Chat", "Branch5Exp", 0)?TRUE:FALSE); - if (PopUpInstalled) - hListHeading6 = InsertBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), LPGEN("Pop-ups to display"), DBGetContactSettingByte(NULL, "Chat", "Branch6Exp", 0)?TRUE:FALSE); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading0, branch0, hItemB0, SIZEOF(branch0), 0); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading1, branch1, hItemB1, SIZEOF(branch1), 0); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading2, branch2, hItemB2, SIZEOF(branch2), 0); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading3, branch3, hItemB3, SIZEOF(branch3), 0x03E0); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading4, branch4, hItemB4, SIZEOF(branch4), 0x0000); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading5, branch5, hItemB5, SIZEOF(branch5), 0x1000); - FillBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading6, branch6, hItemB6, SIZEOF(branch6), 0x0000); - SendMessage(hwndDlg, OPT_FIXHEADINGS, 0, 0); - break; - - case OPT_FIXHEADINGS: - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading1); - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading2); - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading3); - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading4); - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading5); - CheckHeading(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading6); - break; - - case WM_COMMAND: - if (lParam != 0) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - - case WM_NOTIFY: - { - switch(((LPNMHDR)lParam)->idFrom) { - case IDC_CHECKBOXES: - if (((LPNMHDR)lParam)->code==NM_CLICK) { - TVHITTESTINFO hti; - hti.pt.x=(short)LOWORD(GetMessagePos()); - hti.pt.y=(short)HIWORD(GetMessagePos()); - ScreenToClient(((LPNMHDR)lParam)->hwndFrom,&hti.pt); - if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom,&hti)) { - if (hti.flags&TVHT_ONITEMSTATEICON) { - TVITEM tvi = {0}; - tvi.mask=TVIF_HANDLE|TVIF_STATE; - tvi.hItem=hti.hItem; - TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom,&tvi); - if (tvi.hItem == hItemB1[0] && INDEXTOSTATEIMAGEMASK(1)==tvi.state) - TreeView_SetItemState(((LPNMHDR)lParam)->hwndFrom, hItemB1[1], INDEXTOSTATEIMAGEMASK(1), TVIS_STATEIMAGEMASK); - if (tvi.hItem == hItemB1[1] && INDEXTOSTATEIMAGEMASK(1)==tvi.state) - TreeView_SetItemState(((LPNMHDR)lParam)->hwndFrom, hItemB1[0], INDEXTOSTATEIMAGEMASK(1), TVIS_STATEIMAGEMASK); - - if (tvi.hItem == hListHeading0) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading0); - else if (tvi.hItem == hListHeading1) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading1); - else if (tvi.hItem == hListHeading2) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading2); - else if (tvi.hItem == hListHeading3) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading3); - else if (tvi.hItem == hListHeading4) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading4); - else if (tvi.hItem == hListHeading5) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading5); - else if (tvi.hItem == hListHeading6) - CheckBranches(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading6); - else - PostMessage(hwndDlg, OPT_FIXHEADINGS, 0, 0); - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - } } } - break; - - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_APPLY: - { - BYTE b = DBGetContactSettingByte(NULL, "Chat", "Tabs", 1); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch0, hItemB0, SIZEOF(branch0)); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch1, hItemB1, SIZEOF(branch1)); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch2, hItemB2, SIZEOF(branch2)); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch3, hItemB3, SIZEOF(branch3)); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch4, hItemB4, SIZEOF(branch4)); - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch5, hItemB5, SIZEOF(branch5)); - if (PopUpInstalled) - SaveBranch(GetDlgItem(hwndDlg, IDC_CHECKBOXES), branch6, hItemB6, SIZEOF(branch6)); - g_Settings.dwIconFlags = DBGetContactSettingDword(NULL, "Chat", "IconFlags", 0x0000); - g_Settings.dwTrayIconFlags = DBGetContactSettingDword(NULL, "Chat", "TrayIconFlags", 0x1000); - g_Settings.dwPopupFlags = DBGetContactSettingDword(NULL, "Chat", "PopupFlags", 0x0000); - g_Settings.StripFormat = (BOOL)DBGetContactSettingByte(NULL, "Chat", "TrimFormatting", 0); - g_Settings.TrayIconInactiveOnly = (BOOL)DBGetContactSettingByte(NULL, "Chat", "TrayIconInactiveOnly", 1); - g_Settings.PopUpInactiveOnly = (BOOL)DBGetContactSettingByte(NULL, "Chat", "PopUpInactiveOnly", 1); - g_Settings.LogIndentEnabled = (DBGetContactSettingByte(NULL, "Chat", "LogIndentEnabled", 1) != 0)?TRUE:FALSE; - - if (b != DBGetContactSettingByte(NULL, "Chat", "Tabs", 1)) { - SM_BroadcastMessage(NULL, GC_CLOSEWINDOW, 0, 1, FALSE); - g_Settings.TabsEnable = DBGetContactSettingByte(NULL, "Chat", "Tabs", 1); - } - else SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE); - } - return TRUE; - } } } - break; - - case WM_DESTROY: - { - BYTE b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading1, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch1Exp", b); - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading2, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch2Exp", b); - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading3, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch3Exp", b); - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading4, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch4Exp", b); - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading5, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch5Exp", b); - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading0, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch0Exp", b); - if (PopUpInstalled) { - b = TreeView_GetItemState(GetDlgItem(hwndDlg, IDC_CHECKBOXES), hListHeading6, TVIS_EXPANDED)&TVIS_EXPANDED?1:0; - DBWriteContactSettingByte(NULL, "Chat", "Branch6Exp", b); - } } - break; - } - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Log & other options - -static INT_PTR CALLBACK DlgProcOptions2(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - switch (uMsg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_SETRANGE,0,MAKELONG(5000,0)); - SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_SETPOS,0,MAKELONG(DBGetContactSettingWord(NULL,"Chat","LogLimit",100),0)); - SendDlgItemMessage(hwndDlg,IDC_SPIN3,UDM_SETRANGE,0,MAKELONG(10000,0)); - SendDlgItemMessage(hwndDlg,IDC_SPIN3,UDM_SETPOS,0,MAKELONG(DBGetContactSettingWord(NULL,"Chat","LoggingLimit",100),0)); - SendDlgItemMessage(hwndDlg,IDC_SPIN4,UDM_SETRANGE,0,MAKELONG(255,10)); - SendDlgItemMessage(hwndDlg,IDC_SPIN4,UDM_SETPOS,0,MAKELONG(DBGetContactSettingByte(NULL,"Chat","NicklistRowDist",12),0)); - { - TCHAR* pszGroup = NULL; - InitSetting(&pszGroup, "AddToGroup", _T("Chat rooms")); - SetWindowText(GetDlgItem(hwndDlg, IDC_GROUP), pszGroup); - mir_free(pszGroup); - } - { - TCHAR szTemp[MAX_PATH]; - CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)g_Settings.pszLogDir, (LPARAM)szTemp ); - SetDlgItemText(hwndDlg, IDC_LOGDIRECTORY, szTemp); - } - SetDlgItemText(hwndDlg, IDC_HIGHLIGHTWORDS, g_Settings.pszHighlightWords); - SetDlgItemText(hwndDlg, IDC_LOGTIMESTAMP, g_Settings.pszTimeStampLog); - SetDlgItemText(hwndDlg, IDC_TIMESTAMP, g_Settings.pszTimeStamp); - SetDlgItemText(hwndDlg, IDC_OUTSTAMP, g_Settings.pszOutgoingNick); - SetDlgItemText(hwndDlg, IDC_INSTAMP, g_Settings.pszIncomingNick); - CheckDlgButton(hwndDlg, IDC_HIGHLIGHT, g_Settings.HighlightEnabled); - EnableWindow(GetDlgItem(hwndDlg, IDC_HIGHLIGHTWORDS), g_Settings.HighlightEnabled?TRUE:FALSE); - CheckDlgButton(hwndDlg, IDC_LOGGING, g_Settings.LoggingEnabled); - EnableWindow(GetDlgItem(hwndDlg, IDC_LOGDIRECTORY), g_Settings.LoggingEnabled?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_FONTCHOOSE), g_Settings.LoggingEnabled?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), g_Settings.LoggingEnabled?TRUE:FALSE); - break; - - case WM_COMMAND: - if (( LOWORD(wParam) == IDC_INSTAMP - || LOWORD(wParam) == IDC_OUTSTAMP - || LOWORD(wParam) == IDC_TIMESTAMP - || LOWORD(wParam) == IDC_LOGLIMIT - || LOWORD(wParam) == IDC_HIGHLIGHTWORDS - || LOWORD(wParam) == IDC_LOGDIRECTORY - || LOWORD(wParam) == IDC_LOGTIMESTAMP - || LOWORD(wParam) == IDC_NICKROW2 - || LOWORD(wParam) == IDC_GROUP - || LOWORD(wParam) == IDC_LIMIT) - && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam!=GetFocus())) return 0; - - switch (LOWORD(wParam)) { - case IDC_LOGGING: - EnableWindow(GetDlgItem(hwndDlg, IDC_LOGDIRECTORY), IsDlgButtonChecked(hwndDlg, IDC_LOGGING) == BST_CHECKED?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_FONTCHOOSE), IsDlgButtonChecked(hwndDlg, IDC_LOGGING) == BST_CHECKED?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_LIMIT), IsDlgButtonChecked(hwndDlg, IDC_LOGGING) == BST_CHECKED?TRUE:FALSE); - break; - - case IDC_FONTCHOOSE: - { - LPITEMIDLIST idList; - BROWSEINFO bi = {0}; - TCHAR szDirectory[MAX_PATH]; - TCHAR szTemp[MAX_PATH]; - - bi.hwndOwner=hwndDlg; - bi.pszDisplayName=szDirectory; - bi.lpszTitle=TranslateT("Select Folder"); - bi.ulFlags=BIF_NEWDIALOGSTYLE|BIF_EDITBOX|BIF_RETURNONLYFSDIRS; - bi.lpfn=BrowseCallbackProc; - bi.lParam=(LPARAM)szDirectory; - idList = SHBrowseForFolder(&bi); - if ( idList ) { - SHGetPathFromIDList(idList,szDirectory); - lstrcat(szDirectory, _T("\\")); - CallService(MS_UTILS_PATHTORELATIVET, (WPARAM)szDirectory, (LPARAM)szTemp); - SetDlgItemText(hwndDlg, IDC_LOGDIRECTORY, lstrlen(szTemp) > 1 ? szTemp : _T("Logs\\")); - CoTaskMemFree(idList); - } - break; - } - case IDC_HIGHLIGHT: - EnableWindow(GetDlgItem(hwndDlg, IDC_HIGHLIGHTWORDS), IsDlgButtonChecked(hwndDlg, IDC_HIGHLIGHT) == BST_CHECKED?TRUE:FALSE); - break; - } - - if (lParam != (LPARAM)NULL) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - - case WM_NOTIFY: - if (((LPNMHDR)lParam)->idFrom == 0 && ((LPNMHDR)lParam)->code == PSN_APPLY ) { - int iLen; - TCHAR * pszText = NULL; - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_HIGHLIGHTWORDS)); - if ( iLen > 0 ) { - TCHAR *ptszText = (TCHAR *)mir_alloc((iLen+2) * sizeof(TCHAR)); - TCHAR *p2 = NULL; - - if(ptszText) { - GetDlgItemText(hwndDlg, IDC_HIGHLIGHTWORDS, ptszText, iLen + 1); - p2 = _tcschr(ptszText, ','); - while ( p2 ) { - *p2 = ' '; - p2 = _tcschr(ptszText, ','); - } - DBWriteContactSettingTString(NULL, "Chat", "HighlightWords", ptszText); - mir_free(ptszText); - } - } - else DBDeleteContactSetting(NULL, "Chat", "HighlightWords"); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_LOGDIRECTORY)); - if ( iLen > 0 ) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_LOGDIRECTORY, pszText,iLen + 1); - DBWriteContactSettingTString(NULL, "Chat", "LogDirectory", pszText); - } - else DBDeleteContactSetting(NULL, "Chat", "LogDirectory"); - - CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)pszText, (LPARAM)g_Settings.pszLogDir); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_LOGTIMESTAMP)); - if ( iLen > 0 ) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_LOGTIMESTAMP, pszText, iLen+1); - DBWriteContactSettingTString(NULL, "Chat", "LogTimestamp", pszText); - } - else DBDeleteContactSetting(NULL, "Chat", "LogTimestamp"); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_TIMESTAMP)); - if ( iLen > 0 ) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_TIMESTAMP, pszText, iLen+1); - DBWriteContactSettingTString(NULL, "Chat", "HeaderTime", pszText); - } - else DBDeleteContactSetting(NULL, "Chat", "HeaderTime"); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_INSTAMP)); - if ( iLen > 0 ) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_INSTAMP, pszText,iLen+1); - DBWriteContactSettingTString(NULL, "Chat", "HeaderIncoming", pszText); - } - else DBDeleteContactSetting(NULL, "Chat", "HeaderIncoming"); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_OUTSTAMP)); - if ( iLen > 0 ) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_OUTSTAMP, pszText,iLen+1); - DBWriteContactSettingTString(NULL, "Chat", "HeaderOutgoing", pszText); - } - else DBDeleteContactSetting(NULL, "Chat", "HeaderOutgoing"); - - g_Settings.HighlightEnabled = IsDlgButtonChecked(hwndDlg, IDC_HIGHLIGHT) == BST_CHECKED?TRUE:FALSE; - DBWriteContactSettingByte(NULL, "Chat", "HighlightEnabled", (BYTE)g_Settings.HighlightEnabled); - - g_Settings.LoggingEnabled = IsDlgButtonChecked(hwndDlg, IDC_LOGGING) == BST_CHECKED?TRUE:FALSE; - DBWriteContactSettingByte(NULL, "Chat", "LoggingEnabled", (BYTE)g_Settings.LoggingEnabled); - if ( g_Settings.LoggingEnabled ) - CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)g_Settings.pszLogDir); - - iLen = SendDlgItemMessage(hwndDlg,IDC_SPIN2,UDM_GETPOS,0,0); - DBWriteContactSettingWord(NULL, "Chat", "LogLimit", (WORD)iLen); - iLen = SendDlgItemMessage(hwndDlg,IDC_SPIN3,UDM_GETPOS,0,0); - DBWriteContactSettingWord(NULL, "Chat", "LoggingLimit", (WORD)iLen); - - iLen = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_GROUP)); - if (iLen > 0) { - pszText = (TCHAR *)mir_realloc(pszText, (iLen + 1) * sizeof(TCHAR)); - GetDlgItemText(hwndDlg, IDC_GROUP, pszText, iLen+1); - DBWriteContactSettingTString(NULL, "Chat", "AddToGroup", pszText); - } - else DBWriteContactSettingString(NULL, "Chat", "AddToGroup", ""); - mir_free(pszText); - - iLen = SendDlgItemMessage(hwndDlg,IDC_SPIN4,UDM_GETPOS,0,0); - if (iLen > 0) - DBWriteContactSettingByte(NULL, "Chat", "NicklistRowDist", (BYTE)iLen); - else - DBDeleteContactSetting(NULL, "Chat", "NicklistRowDist"); - - FreeMsgLogBitmaps(); - LoadMsgLogBitmaps(); - SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE); - return TRUE; - } - break; - } - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Popup options - -static INT_PTR CALLBACK DlgProcOptionsPopup(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - switch (uMsg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - - SendDlgItemMessage(hwndDlg, IDC_BKG, CPM_SETCOLOUR,0,g_Settings.crPUBkgColour); - SendDlgItemMessage(hwndDlg, IDC_TEXT, CPM_SETCOLOUR,0,g_Settings.crPUTextColour); - - if (g_Settings.iPopupStyle ==2) - CheckDlgButton(hwndDlg, IDC_RADIO2, BST_CHECKED); - else if (g_Settings.iPopupStyle ==3) - CheckDlgButton(hwndDlg, IDC_RADIO3, BST_CHECKED); - else - CheckDlgButton(hwndDlg, IDC_RADIO1, BST_CHECKED); - - EnableWindow(GetDlgItem(hwndDlg, IDC_BKG), IsDlgButtonChecked(hwndDlg, IDC_RADIO3) ==BST_CHECKED?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT), IsDlgButtonChecked(hwndDlg, IDC_RADIO3) ==BST_CHECKED?TRUE:FALSE); - - SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_SETRANGE,0,MAKELONG(100,-1)); - SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_SETPOS,0,MAKELONG(g_Settings.iPopupTimeout,0)); - break; - - case WM_COMMAND: - if ((LOWORD(wParam) == IDC_TIMEOUT) && (HIWORD(wParam)!=EN_CHANGE || (HWND)lParam != GetFocus())) - return 0; - - if (lParam != (LPARAM)NULL) - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - - switch (LOWORD(wParam)) { - - case IDC_RADIO1: - case IDC_RADIO2: - case IDC_RADIO3: - EnableWindow(GetDlgItem(hwndDlg, IDC_BKG), IsDlgButtonChecked(hwndDlg, IDC_RADIO3) ==BST_CHECKED?TRUE:FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT), IsDlgButtonChecked(hwndDlg, IDC_RADIO3) ==BST_CHECKED?TRUE:FALSE); - break; - } - break; - - case WM_NOTIFY: - if (((LPNMHDR)lParam)->idFrom == 0 && ((LPNMHDR)lParam)->code == PSN_APPLY ) { - int iLen; - - if (IsDlgButtonChecked(hwndDlg, IDC_RADIO2) == BST_CHECKED) - iLen = 2; - else if (IsDlgButtonChecked(hwndDlg, IDC_RADIO3) == BST_CHECKED) - iLen = 3; - else - iLen = 1; - - g_Settings.iPopupStyle = iLen; - DBWriteContactSettingByte(NULL, "Chat", "PopupStyle", (BYTE)iLen); - - iLen = SendDlgItemMessage(hwndDlg,IDC_SPIN1,UDM_GETPOS,0,0); - g_Settings.iPopupTimeout = iLen; - DBWriteContactSettingWord(NULL, "Chat", "PopupTimeout", (WORD)iLen); - - g_Settings.crPUBkgColour = SendDlgItemMessage(hwndDlg,IDC_BKG,CPM_GETCOLOUR,0,0); - DBWriteContactSettingDword(NULL, "Chat", "PopupColorBG", (DWORD)SendDlgItemMessage(hwndDlg,IDC_BKG,CPM_GETCOLOUR,0,0)); - g_Settings.crPUTextColour = SendDlgItemMessage(hwndDlg,IDC_TEXT,CPM_GETCOLOUR,0,0); - DBWriteContactSettingDword(NULL, "Chat", "PopupColorText", (DWORD)SendDlgItemMessage(hwndDlg,IDC_TEXT,CPM_GETCOLOUR,0,0)); - return TRUE; - } - break; - } - return FALSE; -} - -static int OptionsInitialize(WPARAM wParam, LPARAM lParam) -{ - OPTIONSDIALOGPAGE odp = {0}; - - odp.cbSize = sizeof(odp); - odp.position = 910000000; - odp.hInstance = g_hInst; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS1); - odp.pszGroup = LPGEN("Message Sessions"); - odp.pszTitle = LPGEN("Group chats"); - odp.pszTab = LPGEN("General"); - odp.pfnDlgProc = DlgProcOptions1; - odp.flags = ODPF_BOLDGROUPS; - Options_AddPage(wParam, &odp); - - odp.position = 910000001; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS2); - odp.pszTab = LPGEN("Chat Log"); - odp.pfnDlgProc = DlgProcOptions2; - Options_AddPage(wParam, &odp); - - if (PopUpInstalled) { - odp.position = 910000002; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONSPOPUP); - odp.pszTitle = LPGEN("Chat"); - odp.pszGroup = LPGEN("Popups"); - odp.pszTab = NULL; - odp.pfnDlgProc = DlgProcOptionsPopup; - Options_AddPage(wParam, &odp); - } - return 0; -} - -void LoadGlobalSettings(void) -{ - LOGFONT lf; - - g_Settings.LogLimitNames = DBGetContactSettingByte(NULL, "Chat", "LogLimitNames", 1); - g_Settings.ShowTime = DBGetContactSettingByte(NULL, "Chat", "ShowTimeStamp", 1); - g_Settings.TabsEnable = DBGetContactSettingByte(NULL, "Chat", "Tabs", 1); - g_Settings.TabsAtBottom = DBGetContactSettingByte(NULL, "Chat", "TabBottom", 0); - g_Settings.TabCloseOnDblClick = DBGetContactSettingByte(NULL, "Chat", "TabCloseOnDblClick", 0); - g_Settings.TabRestore = DBGetContactSettingByte(NULL, "Chat", "TabRestore", 0); - g_Settings.SoundsFocus = DBGetContactSettingByte(NULL, "Chat", "SoundsFocus", 0); - g_Settings.ShowTimeIfChanged = (BOOL)DBGetContactSettingByte(NULL, "Chat", "ShowTimeStampIfChanged", 0); - g_Settings.TimeStampEventColour = (BOOL)DBGetContactSettingByte(NULL, "Chat", "TimeStampEventColour", 0); - g_Settings.iEventLimit = DBGetContactSettingWord(NULL, "Chat", "LogLimit", 100); - g_Settings.dwIconFlags = DBGetContactSettingDword(NULL, "Chat", "IconFlags", 0x0000); - g_Settings.dwTrayIconFlags = DBGetContactSettingDword(NULL, "Chat", "TrayIconFlags", 0x1000); - g_Settings.dwPopupFlags = DBGetContactSettingDword(NULL, "Chat", "PopupFlags", 0x0000); - g_Settings.LoggingLimit = DBGetContactSettingWord(NULL, "Chat", "LoggingLimit", 100); - g_Settings.LoggingEnabled = (BOOL)DBGetContactSettingByte(NULL, "Chat", "LoggingEnabled", 0); - g_Settings.FlashWindow = (BOOL)DBGetContactSettingByte(NULL, "Chat", "FlashWindow", 0); - g_Settings.HighlightEnabled = (BOOL)DBGetContactSettingByte(NULL, "Chat", "HighlightEnabled", 1); - g_Settings.crUserListColor = DBGetContactSettingDword(NULL, "ChatFonts", "Font18Col", RGB(0,0,0)); - g_Settings.crUserListBGColor = DBGetContactSettingDword(NULL, "Chat", "ColorNicklistBG", GetSysColor(COLOR_WINDOW)); - g_Settings.crUserListSelectedBGColor = DBGetContactSettingDword(NULL, "Chat", "ColorNicklistSelectedBG", GetSysColor(COLOR_HIGHLIGHT)); - g_Settings.crUserListHeadingsColor = DBGetContactSettingDword(NULL, "ChatFonts", "Font19Col", RGB(170,170,170)); - g_Settings.crLogBackground = DBGetContactSettingDword(NULL, "Chat", "ColorLogBG", GetSysColor(COLOR_WINDOW)); - g_Settings.StripFormat = (BOOL)DBGetContactSettingByte(NULL, "Chat", "StripFormatting", 0); - g_Settings.TrayIconInactiveOnly = (BOOL)DBGetContactSettingByte(NULL, "Chat", "TrayIconInactiveOnly", 1); - g_Settings.PopUpInactiveOnly = (BOOL)DBGetContactSettingByte(NULL, "Chat", "PopUpInactiveOnly", 1); - g_Settings.AddColonToAutoComplete = (BOOL)DBGetContactSettingByte(NULL, "Chat", "AddColonToAutoComplete", 1); - g_Settings.iPopupStyle = DBGetContactSettingByte(NULL, "Chat", "PopupStyle", 1); - g_Settings.iPopupTimeout = DBGetContactSettingWord(NULL, "Chat", "PopupTimeout", 3); - g_Settings.crPUBkgColour = DBGetContactSettingDword(NULL, "Chat", "PopupColorBG", GetSysColor(COLOR_WINDOW)); - g_Settings.crPUTextColour = DBGetContactSettingDword(NULL, "Chat", "PopupColorText", 0); - g_Settings.ShowContactStatus = DBGetContactSettingByte(NULL, "Chat", "ShowContactStatus", 0); - g_Settings.ContactStatusFirst = DBGetContactSettingByte(NULL, "Chat", "ContactStatusFirst", 0); - - InitSetting( &g_Settings.pszTimeStamp, "HeaderTime", _T("[%H:%M]")); - InitSetting( &g_Settings.pszTimeStampLog, "LogTimestamp", _T("[%d %b %y %H:%M]")); - InitSetting( &g_Settings.pszIncomingNick, "HeaderIncoming", _T("%n:")); - InitSetting( &g_Settings.pszOutgoingNick, "HeaderOutgoing", _T("%n:")); - InitSetting( &g_Settings.pszHighlightWords, "HighlightWords", _T("%m")); - - { - TCHAR pszTemp[MAX_PATH]; - DBVARIANT dbv; - g_Settings.pszLogDir = (TCHAR *)mir_realloc(g_Settings.pszLogDir, MAX_PATH*sizeof(TCHAR)); - if (!DBGetContactSettingTString(NULL, "Chat", "LogDirectory", &dbv)) { - lstrcpyn(pszTemp, dbv.ptszVal, MAX_PATH); - DBFreeVariant(&dbv); - } - else { - TCHAR *tmpPath = Utils_ReplaceVarsT(_T("%miranda_logpath%\\Chat")); - lstrcpyn(pszTemp, tmpPath, SIZEOF(pszTemp)-1); - mir_free(tmpPath); - } - - CallService(MS_UTILS_PATHTOABSOLUTET, (WPARAM)pszTemp, (LPARAM)g_Settings.pszLogDir); - } - - g_Settings.LogIndentEnabled = (DBGetContactSettingByte(NULL, "Chat", "LogIndentEnabled", 1) != 0)?TRUE:FALSE; - - if ( g_Settings.MessageBoxFont ) - DeleteObject( g_Settings.MessageBoxFont ); - LoadMsgDlgFont( 17, &lf, NULL ); - g_Settings.MessageBoxFont = CreateFontIndirect(&lf); - - if ( g_Settings.UserListFont ) - DeleteObject(g_Settings.UserListFont); - LoadMsgDlgFont(18, &lf, NULL); - g_Settings.UserListFont = CreateFontIndirect(&lf); - - if (g_Settings.UserListHeadingsFont) - DeleteObject(g_Settings.UserListHeadingsFont); - LoadMsgDlgFont(19, &lf, NULL); - g_Settings.UserListHeadingsFont = CreateFontIndirect(&lf); - if (hListBkgBrush != NULL) { - DeleteObject(hListBkgBrush); - } - hListBkgBrush = CreateSolidBrush(DBGetContactSettingDword(NULL, "Chat", "ColorNicklistBG", GetSysColor(COLOR_WINDOW))); - if (hListSelectedBkgBrush != NULL) { - DeleteObject(hListSelectedBkgBrush); - } - hListSelectedBkgBrush = CreateSolidBrush(DBGetContactSettingDword(NULL, "Chat", "ColorNicklistSelectedBG", GetSysColor(COLOR_HIGHLIGHT))); -} - -static void FreeGlobalSettings(void) -{ - mir_free(g_Settings.pszTimeStamp); - mir_free(g_Settings.pszTimeStampLog); - mir_free(g_Settings.pszIncomingNick); - mir_free(g_Settings.pszOutgoingNick); - mir_free(g_Settings.pszHighlightWords); - mir_free(g_Settings.pszLogDir); - if ( g_Settings.MessageBoxFont ) - DeleteObject( g_Settings.MessageBoxFont ); - if ( g_Settings.UserListFont ) - DeleteObject( g_Settings.UserListFont ); - if ( g_Settings.UserListHeadingsFont ) - DeleteObject( g_Settings.UserListHeadingsFont ); -} - -int OptionsInit(void) -{ - LOGFONT lf; - - g_hOptions = HookEvent(ME_OPT_INITIALISE, OptionsInitialize); - - LoadLogFonts(); - LoadMsgDlgFont(18, &lf, NULL); - lstrcpy(lf.lfFaceName, _T("MS Shell Dlg")); - lf.lfUnderline = lf.lfItalic = lf.lfStrikeOut = 0; - lf.lfHeight = -17; - lf.lfWeight = FW_BOLD; - g_Settings.NameFont = CreateFontIndirect(&lf); - g_Settings.UserListFont = NULL; - g_Settings.UserListHeadingsFont = NULL; - g_Settings.MessageBoxFont = NULL; - g_Settings.iSplitterX = DBGetContactSettingWord(NULL, "Chat", "SplitterX", 105); - g_Settings.iSplitterY = DBGetContactSettingWord(NULL, "Chat", "SplitterY", 90); - g_Settings.iX = DBGetContactSettingDword(NULL, "Chat", "roomx", -1); - g_Settings.iY = DBGetContactSettingDword(NULL, "Chat", "roomy", -1); - g_Settings.iWidth = DBGetContactSettingDword(NULL, "Chat", "roomwidth", -1); - g_Settings.iHeight = DBGetContactSettingDword(NULL, "Chat", "roomheight", -1); - LoadGlobalSettings(); - - SkinAddNewSoundEx("ChatMessage", LPGEN("Group chats"), LPGEN("Incoming message")); - SkinAddNewSoundEx("ChatHighlight", LPGEN("Group chats"), LPGEN("Message is highlighted")); - SkinAddNewSoundEx("ChatAction", LPGEN("Group chats"), LPGEN("User has performed an action")); - SkinAddNewSoundEx("ChatJoin", LPGEN("Group chats"), LPGEN("User has joined")); - SkinAddNewSoundEx("ChatPart", LPGEN("Group chats"), LPGEN("User has left")); - SkinAddNewSoundEx("ChatKick", LPGEN("Group chats"), LPGEN("User has kicked some other user")); - SkinAddNewSoundEx("ChatMode", LPGEN("Group chats"), LPGEN("User's status was changed")); - SkinAddNewSoundEx("ChatNick", LPGEN("Group chats"), LPGEN("User has changed name")); - SkinAddNewSoundEx("ChatNotice", LPGEN("Group chats"), LPGEN("User has sent a notice")); - SkinAddNewSoundEx("ChatQuit", LPGEN("Group chats"), LPGEN("User has disconnected")); - SkinAddNewSoundEx("ChatTopic", LPGEN("Group chats"), LPGEN("The topic has been changed")); - - if ( g_Settings.LoggingEnabled ) - CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)g_Settings.pszLogDir); - { - LOGFONT lf; - HFONT hFont; - int iText; - - LoadMsgDlgFont(0, &lf, NULL); - hFont = CreateFontIndirect(&lf); - iText = GetTextPixelSize(MakeTimeStamp(g_Settings.pszTimeStamp, time(NULL)),hFont, TRUE); - DeleteObject(hFont); - g_Settings.LogTextIndent = iText; - g_Settings.LogTextIndent = g_Settings.LogTextIndent*12/10; - } - - return 0; -} - -int OptionsUnInit(void) -{ - FreeGlobalSettings(); - UnhookEvent(g_hOptions); - DeleteObject(hEditBkgBrush); - DeleteObject(hListBkgBrush); - DeleteObject(hListSelectedBkgBrush); - DeleteObject(g_Settings.NameFont); - return 0; -} diff --git a/plugins/Chat/src/resource.h b/plugins/Chat/src/resource.h deleted file mode 100644 index f95fa7dd01..0000000000 --- a/plugins/Chat/src/resource.h +++ /dev/null @@ -1,141 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by chat.rc -// -#define IDD_CHANNEL 101 -#define IDD_OPTIONS1 102 -#define IDD_OPTIONS2 103 -#define IDD_FILTER 105 -#define IDD_OPTIONSPOPUP 106 -#define IDI_BUNDERLINE 120 -#define IDI_BBOLD 121 -#define IDI_BITALICS 122 -#define IDI_BSMILEY 123 -#define IDI_TOPICBUT 124 -#define IDI_BKGCOLOR 125 -#define IDI_CHANMGR 126 -#define IDI_COLOR 127 -#define IDI_FILTER 128 -#define IDI_HISTORY 129 -#define IDI_NICKLIST 130 -#define IDI_JOIN 131 -#define IDI_PART 132 -#define IDI_QUIT 133 -#define IDI_KICK 134 -#define IDI_NICK 135 -#define IDI_NOTICE 136 -#define IDI_MESSAGE 137 -#define IDI_MESSAGEOUT 138 -#define IDI_TOPIC 139 -#define IDI_INFO 140 -#define IDI_ADDSTATUS 141 -#define IDI_REMSTATUS 142 -#define IDI_ACTION 143 -#define IDI_HIGHLIGHT 144 -#define IDI_BLANK 146 -#define IDI_TAG1 149 -#define IDI_TAG2 150 -#define IDR_MENU 151 -#define IDD_COLORCHOOSER 152 -#define IDI_STATUS3 153 -#define IDI_STATUS2 154 -#define IDI_STATUS4 155 -#define IDI_STATUS1 156 -#define IDI_STATUS0 157 -#define IDI_STATUS5 158 -#define IDI_CLOSE 159 -#define IDI_OVERLAY 160 -#define IDI_NICKLIST2 161 -#define IDI_FILTER2 162 -#define IDC_LOG 1005 -#define IDC_SPLITTERX 1006 -#define IDC_SMILEY 1007 -#define IDC_SPLITTERY 1008 -#define IDC_MESSAGE 1009 -#define IDC_BOLD 1010 -#define IDC_ITALICS 1011 -#define IDC_UNDERLINE 1012 -#define IDC_FILTER 1013 -#define IDC_CHANMGR 1014 -#define IDC_SHOWNICKLIST 1016 -#define IDC_COLOR 1017 -#define IDC_BKGCOLOR 1019 -#define IDC_CHECKBOXES 1021 -#define IDC_NICKLISTBKG 1021 -#define IDC_HISTORY 1022 -#define IDC_CLOSE 1023 -#define IDC_NICKROW 1024 -#define IDC_LOGLIMIT 1024 -#define IDC_NICKROW2 1025 -#define IDC_SPIN1 1028 -#define IDC_SPIN2 1029 -#define IDC_SPIN3 1030 -#define IDC_SPIN4 1031 -#define IDC_FONTLIST 1032 -#define IDC_CHOOSEFONT 1034 -#define IDC_FONTCOLOR 1035 -#define IDC_MESSAGEBKG 1036 -#define IDC_LOGBKG 1037 -#define IDC_HIGHLIGHTWORDS 1040 -#define IDC_INSTAMP 1041 -#define IDC_OUTSTAMP 1043 -#define IDC_TIMESTAMP 1046 -#define IDC_FONTCHOOSE 1047 -#define IDC_LOGDIRECTORY 1048 -#define IDC_LIMIT 1050 -#define IDC_LOGTIMESTAMP 1051 -#define IDC_GROUP 1057 -#define IDC_RADIO1 1061 -#define IDC_RADIO2 1062 -#define IDC_RADIO3 1063 -#define IDC_TEXT 1064 -#define IDC_BKG 1065 -#define IDC_TIMEOUT 1067 -#define IDC_HIGHLIGHT 1068 -#define IDC_TEXTO 1069 -#define IDC_LOGGING 1069 -#define IDC_COLORTEXT 1070 -#define IDC_LIST 1072 -#define IDC_TAB 1074 -#define IDC_1 1075 -#define IDC_2 1076 -#define IDC_3 1077 -#define IDC_4 1078 -#define IDC_5 1079 -#define IDC_6 1080 -#define IDC_7 1081 -#define IDC_8 1082 -#define IDC_9 1083 -#define IDC_10 1084 -#define IDC_11 1085 -#define ID_MESS 40001 -#define ID_NEW 40002 -#define ID_CURR 40003 -#define ID_COPY 40004 -#define ID_COPYALL 40006 -#define ID_CLEARLOG 40009 -#define ID_MESSAGE_UNDO 40013 -#define ID_MESSAGE_COPY 40014 -#define ID_MESSAGE_CUT 40015 -#define ID_MESSAGE_CLEAR 40017 -#define ID_MESSAGE_SELECTALL 40018 -#define ID_MESSAGE_REDO 40019 -#define ID_MESSAGE_PASTE 40020 -#define ID_CLOSE 40022 -#define ID_CLOSEOTHER 40023 -#define ID_LOCKPOSITION 40024 -#define ID_Menu 40026 -#define ID_SEARCH_GOOGLE 40027 -#define ID_SEARCH_WIKIPEDIA 40028 -#define ID_WIKIPEDIA_ 40029 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 163 -#define _APS_NEXT_COMMAND_VALUE 40030 -#define _APS_NEXT_CONTROL_VALUE 1076 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/plugins/Chat/src/richutil.cpp b/plugins/Chat/src/richutil.cpp deleted file mode 100644 index 1c5143b17c..0000000000 --- a/plugins/Chat/src/richutil.cpp +++ /dev/null @@ -1,293 +0,0 @@ -/* -SRMM - -Copyright 2000-2005 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include -#include -#include -#include "richutil.h" - -/* - To initialize this library, call: - RichUtil_Load(); - Before the application exits, call: - RichUtil_Unload(); - - Then to use the library (it draws the xp border around it), you need - to make sure you control has the WS_EX_CLIENTEDGE flag. Then you just - subclass it with: - RichUtil_SubClass(hwndEdit); - - If no xptheme is present, the window isn't subclassed the SubClass function - just returns. And if WS_EX_CLIENTEDGE isn't present, the subclass does nothing. - Otherwise it removes the border and draws it by itself. -*/ -// list crap -typedef struct _RList { - struct _RList *next; - struct _RList *prev; - TRichUtil *data; -} RList; - -TRichUtil *rlist_find(RList *list, HWND hwnd); -RList *rlist_append(RList *list, TRichUtil *data); -RList *rlist_remove_link(RList *list, const RList *link); -RList *rlist_remove(RList * list, TRichUtil *data); -void rlist_free(RList * list); - -TRichUtil *rlist_find(RList *list, HWND hwnd) { - RList *n; - - if (hwnd==NULL) return NULL; - for (n=list; n!=NULL; n=n->next) { - if (n->data&&n->data->hwnd==hwnd) return n->data; - } - return NULL; -} - -RList *rlist_append(RList *list, TRichUtil *data) { - RList *n; - RList *new_list = (RList *)malloc(sizeof(RList)); - RList *attach_to = NULL; - - new_list->next = NULL; - new_list->data = data; - for (n=list; n!=NULL; n=n->next) { - attach_to = n; - } - if (attach_to==NULL) { - new_list->prev = NULL; - return new_list; - } - else { - new_list->prev = attach_to; - attach_to->next = new_list; - return list; - } -} - -RList *rlist_remove_link(RList *list, const RList *link) { - if (!link) - return list; - - if (link->next) - link->next->prev = link->prev; - if (link->prev) - link->prev->next = link->next; - if (link==list) - list = link->next; - return list; -} - -RList *rlist_remove(RList *list, TRichUtil *data) { - RList *n; - - for (n=list; n!=NULL; n=n->next) { - if (n->data==data) { - RList *newlist = rlist_remove_link(list, n); - free(n); - return newlist; - } - } - return list; -} - -void rlist_free(RList *list) { - RList *n = list; - - while (n!=NULL) { - RList *next = n->next; - free(n); - n = next; - } -} - -// UxTheme Stuff -static HMODULE mTheme = 0; -static HANDLE (WINAPI *MyOpenThemeData)(HWND,LPCWSTR) = 0; -static HRESULT (WINAPI *MyCloseThemeData)(HANDLE) = 0; -static BOOL (WINAPI *MyIsThemeActive)() = 0; -static HRESULT (WINAPI *MyDrawThemeBackground)(HANDLE,HDC,int,int,const RECT*,const RECT *) = 0; -static HRESULT (WINAPI *MyGetThemeBackgroundContentRect)(HANDLE,HDC,int,int,const RECT *,RECT *) = 0; -static HRESULT (WINAPI *MyDrawThemeParentBackground)(HWND,HDC,RECT*) = 0; -static BOOL (WINAPI *MyIsThemeBackgroundPartiallyTransparent)(HANDLE,int,int) = 0; - -static RList *slist = NULL; -static CRITICAL_SECTION csRich; - -static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); -static VOID RichUtil_ClearUglyBorder(TRichUtil *ru); - -void RichUtil_Load() { - mTheme = RIsWinVerXPPlus()?LoadLibraryA("uxtheme.dll"):0; - InitializeCriticalSection(&csRich); - if (!mTheme) return; - MyOpenThemeData = (HANDLE (WINAPI *)(HWND, LPCWSTR))GetProcAddress(mTheme, "OpenThemeData"); - MyCloseThemeData = (HRESULT (WINAPI *)(HANDLE))GetProcAddress(mTheme, "CloseThemeData"); - MyIsThemeActive = (BOOL (WINAPI *)())GetProcAddress(mTheme, "IsThemeActive"); - MyDrawThemeBackground = (HRESULT (WINAPI *)(HANDLE, HDC, int, int, const RECT*, const RECT *))GetProcAddress(mTheme, "DrawThemeBackground"); - MyGetThemeBackgroundContentRect = (HRESULT (WINAPI *)(HANDLE, HDC, int, int, const RECT *, RECT *))GetProcAddress(mTheme, "GetThemeBackgroundContentRect"); - MyDrawThemeParentBackground = (HRESULT (WINAPI *)(HWND, HDC, RECT*))GetProcAddress(mTheme, "DrawThemeParentBackground"); - MyIsThemeBackgroundPartiallyTransparent = (BOOL (WINAPI *)(HANDLE, int, int))GetProcAddress(mTheme, "IsThemeBackgroundPartiallyTransparent"); - if (!MyOpenThemeData|| - !MyCloseThemeData|| - !MyIsThemeActive|| - !MyDrawThemeBackground|| - !MyGetThemeBackgroundContentRect|| - !MyDrawThemeParentBackground|| - !MyIsThemeBackgroundPartiallyTransparent) { - FreeLibrary(mTheme); - mTheme=NULL; - } -} - -void RichUtil_Unload() { - DeleteCriticalSection(&csRich); - if (mTheme) { - FreeLibrary(mTheme); - } -} - -int RichUtil_SubClass(HWND hwndEdit) { - if (IsWindow(hwndEdit)) { - TRichUtil *ru = (TRichUtil*)malloc(sizeof(TRichUtil)); - - ZeroMemory(ru, sizeof(TRichUtil)); - ru->hwnd = hwndEdit; - ru->hasUglyBorder = 0; - EnterCriticalSection(&csRich); - slist = rlist_append(slist, ru); - LeaveCriticalSection(&csRich); - SetWindowLongPtr(ru->hwnd, GWLP_USERDATA, (LONG_PTR)ru); // Ugly hack - ru->origProc = (WNDPROC)SetWindowLongPtr(ru->hwnd, GWLP_WNDPROC, (LONG_PTR)&RichUtil_Proc); - RichUtil_ClearUglyBorder(ru); - return 1; - } - return 0; -} - -static LRESULT CALLBACK RichUtil_Proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { - TRichUtil *ru; - - EnterCriticalSection(&csRich); - ru = rlist_find(slist, hwnd); - LeaveCriticalSection(&csRich); - switch(msg) { - case WM_THEMECHANGED: - case WM_STYLECHANGED: - { - RichUtil_ClearUglyBorder(ru); - break; - } - case WM_NCPAINT: - { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); - if (ru->hasUglyBorder&&MyIsThemeActive()) { - HANDLE hTheme = MyOpenThemeData(ru->hwnd, L"EDIT"); - - if (hTheme) { - RECT rcBorder; - RECT rcClient; - int nState; - HDC hdc = GetWindowDC(ru->hwnd); - - GetWindowRect(hwnd, &rcBorder); - rcBorder.right -= rcBorder.left; rcBorder.bottom -= rcBorder.top; - rcBorder.left = rcBorder.top = 0; - CopyRect(&rcClient, &rcBorder); - rcClient.left += ru->rect.left; - rcClient.top += ru->rect.top; - rcClient.right -= ru->rect.right; - rcClient.bottom -= ru->rect.bottom; - ExcludeClipRect(hdc, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom); - if(MyIsThemeBackgroundPartiallyTransparent(hTheme, EP_EDITTEXT, ETS_NORMAL)) - MyDrawThemeParentBackground(hwnd, hdc, &rcBorder); - if (!IsWindowEnabled(hwnd)) - nState = ETS_DISABLED; - else if(SendMessage(hwnd, EM_GETOPTIONS, 0, 0) & ECO_READONLY) - nState = ETS_READONLY; - else nState = ETS_NORMAL; - MyDrawThemeBackground(hTheme, hdc, EP_EDITTEXT, nState, &rcBorder, NULL); - MyCloseThemeData(hTheme); - ReleaseDC(hwnd, hdc); - return 0; - } - } - return ret; - } - case WM_NCCALCSIZE: - { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); - NCCALCSIZE_PARAMS *ncsParam = (NCCALCSIZE_PARAMS*)lParam; - - if (ru->hasUglyBorder&&MyIsThemeActive()) { - HANDLE hTheme = MyOpenThemeData(hwnd, L"EDIT"); - - if (hTheme) { - RECT rcClient; - HDC hdc = GetDC(GetParent(hwnd)); - - ZeroMemory(&rcClient, sizeof(RECT)); - if(MyGetThemeBackgroundContentRect(hTheme, hdc, EP_EDITTEXT, ETS_NORMAL, &ncsParam->rgrc[0], &rcClient) == S_OK) { - ru->rect.left = rcClient.left-ncsParam->rgrc[0].left; - ru->rect.top = rcClient.top-ncsParam->rgrc[0].top; - ru->rect.right = ncsParam->rgrc[0].right-rcClient.right; - ru->rect.bottom = ncsParam->rgrc[0].bottom-rcClient.bottom; - CopyRect(&ncsParam->rgrc[0], &rcClient); - MyCloseThemeData(hTheme); - ReleaseDC(GetParent(hwnd), hdc); - return WVR_REDRAW; - } - ReleaseDC(GetParent(hwnd), hdc); - MyCloseThemeData(hTheme); - } - } - return ret; - } - case WM_ENABLE: - RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE|RDW_NOCHILDREN|RDW_UPDATENOW|RDW_FRAME); - break; - case WM_DESTROY: - { - LRESULT ret = CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); - - if(IsWindow(hwnd)) { - if ((WNDPROC)GetWindowLongPtr(hwnd, GWLP_WNDPROC) == &RichUtil_Proc) - SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ru->origProc); - } - EnterCriticalSection(&csRich); - slist = rlist_remove(slist, ru); - LeaveCriticalSection(&csRich); - if (ru) free(ru); - return ret; - } - } - return CallWindowProc(ru->origProc, hwnd, msg, wParam, lParam); -} - -static VOID RichUtil_ClearUglyBorder(TRichUtil *ru) { - if (mTheme&&MyIsThemeActive()&&GetWindowLongPtr(ru->hwnd, GWL_EXSTYLE)&WS_EX_CLIENTEDGE) { - ru->hasUglyBorder = 1; - SetWindowLongPtr(ru->hwnd, GWL_EXSTYLE, GetWindowLongPtr(ru->hwnd, GWL_EXSTYLE)^WS_EX_CLIENTEDGE); - } - // Redraw window since the style may have changed - SetWindowPos(ru->hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|SWP_FRAMECHANGED); - RedrawWindow(ru->hwnd, NULL, NULL, RDW_INVALIDATE|RDW_NOCHILDREN|RDW_UPDATENOW|RDW_FRAME); -} diff --git a/plugins/Chat/src/richutil.h b/plugins/Chat/src/richutil.h deleted file mode 100644 index dff6a53915..0000000000 --- a/plugins/Chat/src/richutil.h +++ /dev/null @@ -1,55 +0,0 @@ -/* -SRMM - -Copyright 2000-2005 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#ifndef SRMM_RICHUTIL_H -#define SRMM_RICHUTIL_H - -#define RWinVerMajor() LOBYTE(LOWORD(GetVersion())) -#define RIsWinVerXPPlus() (RWinVerMajor()>=5 && LOWORD(GetVersion())!=5) - -#ifndef WM_THEMECHANGED -#define WM_THEMECHANGED 0x031A -#endif -#ifndef EP_EDITTEXT -#define EP_EDITTEXT 1 -#endif -#ifndef ETS_NORMAL -#define ETS_NORMAL 1 -#endif -#ifndef ETS_DISABLED -#define ETS_DISABLED 4 -#endif -#ifndef ETS_READONLY -#define ETS_READONLY 6 -#endif - -typedef struct { - HWND hwnd; - RECT rect; - int hasUglyBorder; - WNDPROC origProc; -} TRichUtil; - -void RichUtil_Load(); -void RichUtil_Unload(); -int RichUtil_SubClass(HWND hwndEdit); - -#endif diff --git a/plugins/Chat/src/services.cpp b/plugins/Chat/src/services.cpp deleted file mode 100644 index 06e4f20cc8..0000000000 --- a/plugins/Chat/src/services.cpp +++ /dev/null @@ -1,874 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright 2000-2010 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "chat.h" - -#include "m_fontservice.h" - -extern HICON hIcons[30]; -extern HIMAGELIST hImageList; -extern HIMAGELIST hIconsList; -extern BOOL SmileyAddInstalled; -extern BOOL PopUpInstalled; -extern BOOL IEviewInstalled; - -HANDLE hSendEvent; -HANDLE hBuildMenuEvent ; -HANDLE g_hModulesLoaded; -HANDLE g_hSystemPreShutdown; -HANDLE hJoinMenuItem, hLeaveMenuItem; -HANDLE g_hHookPrebuildMenu; -HANDLE g_hIconsChanged, g_hFontsChanged; -HANDLE g_hSmileyOptionsChanged = NULL; -HANDLE g_hIconsChanged2; -SESSION_INFO g_TabSession; -CRITICAL_SECTION cs; - -void RegisterFonts( void ); - -static HANDLE - hServiceRegister = NULL, - hServiceNewChat = NULL, - hServiceAddEvent = NULL, - hServiceGetAddEventPtr = NULL, - hServiceGetInfo = NULL, - hServiceGetCount = NULL, - hEventPrebuildMenu = NULL, - hEventDoubleclicked = NULL, - hEventJoinChat = NULL, - hEventLeaveChat = NULL; - -#ifdef _WIN64 - -#define SIZEOF_STRUCT_GCREGISTER_V1 40 -#define SIZEOF_STRUCT_GCWINDOW_V1 48 -#define SIZEOF_STRUCT_GCEVENT_V1 76 -#define SIZEOF_STRUCT_GCEVENT_V2 80 - -#else - -#define SIZEOF_STRUCT_GCREGISTER_V1 28 -#define SIZEOF_STRUCT_GCWINDOW_V1 32 -#define SIZEOF_STRUCT_GCEVENT_V1 44 -#define SIZEOF_STRUCT_GCEVENT_V2 48 - -#endif - -void ShowRoom(SESSION_INFO* si, WPARAM wp, BOOL bSetForeground) -{ - if (!si) - return; - - if ( g_Settings.TabsEnable) { - // the session is not the current tab, so we copy the necessary - // details into the SESSION_INFO for the tabbed window - if (!si->hWnd) { - g_TabSession.iEventCount = si->iEventCount; - g_TabSession.iStatusCount = si->iStatusCount; - g_TabSession.iType = si->iType; - g_TabSession.nUsersInNicklist = si->nUsersInNicklist; - g_TabSession.pLog = si->pLog; - g_TabSession.pLogEnd = si->pLogEnd; - g_TabSession.pMe = si->pMe; - g_TabSession.dwFlags = si->dwFlags; - g_TabSession.pStatuses = si->pStatuses; - g_TabSession.ptszID = si->ptszID; - g_TabSession.pszModule = si->pszModule; - g_TabSession.ptszName = si->ptszName; - g_TabSession.ptszStatusbarText = si->ptszStatusbarText; - g_TabSession.ptszTopic = si->ptszTopic; - g_TabSession.pUsers = si->pUsers; - g_TabSession.hContact = si->hContact; - g_TabSession.wStatus = si->wStatus; - g_TabSession.lpCommands = si->lpCommands; - g_TabSession.lpCurrentCommand = NULL; - } - - //Do we need to create a tabbed window? - if (g_TabSession.hWnd == NULL) - g_TabSession.hWnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CHANNEL), NULL, RoomWndProc, (LPARAM)&g_TabSession); - - SetWindowLongPtr(g_TabSession.hWnd, GWL_EXSTYLE, GetWindowLongPtr(g_TabSession.hWnd, GWL_EXSTYLE) | WS_EX_APPWINDOW); - - // if the session was not the current tab we need to tell the window to - // redraw to show the contents of the current SESSION_INFO - if (!si->hWnd) { - SM_SetTabbedWindowHwnd(si, g_TabSession.hWnd); - SendMessage(g_TabSession.hWnd, GC_ADDTAB, -1, (LPARAM)si); - SendMessage(g_TabSession.hWnd, GC_TABCHANGE, 0, (LPARAM)&g_TabSession); - } - - SetActiveSession(si->ptszID, si->pszModule); - - if (!IsWindowVisible(g_TabSession.hWnd) || wp == WINDOW_HIDDEN) - SendMessage(g_TabSession.hWnd, GC_EVENT_CONTROL + WM_USER + 500, wp, 0); - else { - if (IsIconic(g_TabSession.hWnd)) - ShowWindow(g_TabSession.hWnd, SW_NORMAL); - - PostMessage(g_TabSession.hWnd, WM_SIZE, 0, 0); - if (si->iType != GCW_SERVER) - SendMessage(g_TabSession.hWnd, GC_UPDATENICKLIST, 0, 0); - else - SendMessage(g_TabSession.hWnd, GC_UPDATETITLE, 0, 0); - SendMessage(g_TabSession.hWnd, GC_REDRAWLOG, 0, 0); - SendMessage(g_TabSession.hWnd, GC_UPDATESTATUSBAR, 0, 0); - ShowWindow(g_TabSession.hWnd, SW_SHOW); - if (bSetForeground) - SetForegroundWindow(g_TabSession.hWnd); - } - SendMessage(g_TabSession.hWnd, WM_MOUSEACTIVATE, 0, 0); - SetFocus(GetDlgItem(g_TabSession.hWnd, IDC_MESSAGE)); - return; - } - - //Do we need to create a window? - if (si->hWnd == NULL) - si->hWnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_CHANNEL), NULL, RoomWndProc, (LPARAM)si); - - SetWindowLongPtr(si->hWnd, GWL_EXSTYLE, GetWindowLongPtr(si->hWnd, GWL_EXSTYLE) | WS_EX_APPWINDOW); - if (!IsWindowVisible(si->hWnd) || wp == WINDOW_HIDDEN) - SendMessage(si->hWnd, GC_EVENT_CONTROL + WM_USER + 500, wp, 0); - else { - if (IsIconic(si->hWnd)) - ShowWindow(si->hWnd, SW_NORMAL); - ShowWindow(si->hWnd, SW_SHOW); - SetForegroundWindow(si->hWnd); - } - - SendMessage(si->hWnd, WM_MOUSEACTIVATE, 0, 0); - SetFocus(GetDlgItem(si->hWnd, IDC_MESSAGE)); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Post-load event hooks - -static int FontsChanged(WPARAM wParam,LPARAM lParam) -{ - LoadLogFonts(); - { - LOGFONT lf; - HFONT hFont; - int iText; - - LoadMsgDlgFont(0, &lf, NULL); - hFont = CreateFontIndirect(&lf); - iText = GetTextPixelSize(MakeTimeStamp(g_Settings.pszTimeStamp, time(NULL)),hFont, TRUE); - DeleteObject(hFont); - g_Settings.LogTextIndent = iText; - g_Settings.LogTextIndent = g_Settings.LogTextIndent*12/10; - g_Settings.LogIndentEnabled = (DBGetContactSettingByte(NULL, "Chat", "LogIndentEnabled", 1) != 0)?TRUE:FALSE; - } - MM_FontsChanged(); - MM_FixColors(); - SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, TRUE); - return 0; -} - -static int IconsChanged(WPARAM wParam,LPARAM lParam) -{ - FreeMsgLogBitmaps(); - - LoadLogIcons(); - LoadMsgLogBitmaps(); - MM_IconsChanged(); - SM_BroadcastMessage(NULL, GC_SETWNDPROPS, 0, 0, FALSE); - return 0; -} - -static int PreShutdown(WPARAM wParam,LPARAM lParam) -{ - SM_BroadcastMessage(NULL, GC_CLOSEWINDOW, 0, 1, FALSE); - - SM_RemoveAll(); - MM_RemoveAll(); - TabM_RemoveAll(); - return 0; -} - -static int SmileyOptionsChanged(WPARAM wParam,LPARAM lParam) -{ - SM_BroadcastMessage(NULL, GC_REDRAWLOG, 0, 1, FALSE); - return 0; -} - -static int ModulesLoaded(WPARAM wParam,LPARAM lParam) -{ - char* mods[3] = { "Chat", "ChatFonts" }; - CallService( "DBEditorpp/RegisterModule", (WPARAM)mods, 2 ); - - RegisterFonts(); - AddIcons(); - LoadIcons(); - { - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.position = -2000090001; - mi.flags = CMIF_DEFAULT | CMIF_ICONFROMICOLIB; - mi.icolibItem = LoadSkinnedIconHandle( SKINICON_CHAT_JOIN ); - mi.pszName = LPGEN("&Join"); - mi.pszService = "GChat/JoinChat"; - hJoinMenuItem = Menu_AddContactMenuItem(&mi); - - mi.position = -2000090000; - mi.icolibItem = LoadSkinnedIconHandle( SKINICON_CHAT_LEAVE ); - mi.flags = CMIF_NOTOFFLINE | CMIF_ICONFROMICOLIB; - mi.pszName = LPGEN("&Leave"); - mi.pszService = "GChat/LeaveChat"; - hLeaveMenuItem = Menu_AddContactMenuItem(&mi); - } - - g_hFontsChanged = HookEvent(ME_FONT_RELOAD, FontsChanged); - g_hIconsChanged2 = HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged); - - if ( ServiceExists( MS_SMILEYADD_SHOWSELECTION )) { - SmileyAddInstalled = TRUE; - g_hSmileyOptionsChanged = HookEvent(ME_SMILEYADD_OPTIONSCHANGED, SmileyOptionsChanged); - } - if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) - PopUpInstalled = TRUE; - - if ( ServiceExists( MS_IEVIEW_WINDOW )) - IEviewInstalled = TRUE; - - CList_SetAllOffline(TRUE, NULL); - return 0; -} - -static INT_PTR Service_GetCount(WPARAM wParam,LPARAM lParam) -{ - int i; - - if (!lParam) - return -1; - - EnterCriticalSection(&cs); - - i = SM_GetCount((char *)lParam); - - LeaveCriticalSection(&cs); - return i; -} - -static INT_PTR Service_GetInfo(WPARAM wParam,LPARAM lParam) -{ - GC_INFO * gci = (GC_INFO *) lParam; - SESSION_INFO* si = NULL; - - if (!gci || !gci->pszModule) - return 1; - - EnterCriticalSection(&cs); - - if ( gci->Flags&BYINDEX) - si = SM_FindSessionByIndex( gci->pszModule, gci->iItem ); - else - si = SM_FindSession( gci->pszID, gci->pszModule ); - - if ( si ) { - if ( gci->Flags & DATA ) gci->dwItemData = si->dwItemData; - if ( gci->Flags & HCONTACT ) gci->hContact = si->hContact; - if ( gci->Flags & TYPE ) gci->iType = si->iType; - if ( gci->Flags & COUNT ) gci->iCount = si->nUsersInNicklist; - if ( gci->Flags & USERS ) gci->pszUsers = SM_GetUsers(si); - - if ( si->dwFlags & GC_UNICODE ) { - if ( gci->Flags & ID ) gci->pszID = si->ptszID; - if ( gci->Flags & NAME ) gci->pszName = si->ptszName; - } - else { - if ( gci->Flags & ID ) gci->pszID = ( TCHAR* )si->pszID; - if ( gci->Flags & NAME ) gci->pszName = ( TCHAR* )si->pszName; - } - - LeaveCriticalSection(&cs); - return 0; - } - - LeaveCriticalSection(&cs); - return 1; -} - -static INT_PTR Service_Register(WPARAM wParam, LPARAM lParam) -{ - - GCREGISTER *gcr = (GCREGISTER *)lParam; - MODULEINFO * mi = NULL; - if ( gcr == NULL) - return GC_REGISTER_ERROR; - - if (gcr->cbSize != SIZEOF_STRUCT_GCREGISTER_V1) - return GC_REGISTER_WRONGVER; - - EnterCriticalSection(&cs); - - mi = MM_AddModule( gcr->pszModule ); - if ( mi ) { - mi->ptszModDispName = a2tf( gcr->ptszModuleDispName, gcr->dwFlags ); - mi->bBold = gcr->dwFlags&GC_BOLD; - mi->bUnderline = gcr->dwFlags&GC_UNDERLINE ; - mi->bItalics = gcr->dwFlags&GC_ITALICS ; - mi->bColor = gcr->dwFlags&GC_COLOR ; - mi->bBkgColor = gcr->dwFlags&GC_BKGCOLOR ; - mi->bAckMsg = gcr->dwFlags&GC_ACKMSG ; - mi->bChanMgr = gcr->dwFlags&GC_CHANMGR ; - mi->iMaxText= gcr->iMaxText; - mi->nColorCount = gcr->nColors; - if ( gcr->nColors > 0) { - mi->crColors = (COLORREF *)mir_alloc(sizeof(COLORREF) * gcr->nColors); - memcpy(mi->crColors, gcr->pColors, sizeof(COLORREF) * gcr->nColors); - } - - mi->OnlineIconIndex = ImageList_AddIcon(hIconsList, LoadSkinnedProtoIcon(gcr->pszModule, ID_STATUS_ONLINE)); - mi->hOnlineIcon = ImageList_GetIcon(hIconsList, mi->OnlineIconIndex, ILD_TRANSPARENT); - - mi->hOnlineTalkIcon = ImageList_GetIcon(hIconsList, mi->OnlineIconIndex, ILD_TRANSPARENT|INDEXTOOVERLAYMASK(1)); - ImageList_AddIcon(hIconsList, mi->hOnlineTalkIcon); - - mi->OfflineIconIndex = ImageList_AddIcon(hIconsList, LoadSkinnedProtoIcon(gcr->pszModule, ID_STATUS_OFFLINE)); - mi->hOfflineIcon = ImageList_GetIcon(hIconsList, mi->OfflineIconIndex, ILD_TRANSPARENT); - - mi->hOfflineTalkIcon = ImageList_GetIcon(hIconsList, mi->OfflineIconIndex, ILD_TRANSPARENT|INDEXTOOVERLAYMASK(1)); - ImageList_AddIcon(hIconsList, mi->hOfflineTalkIcon); - - mi->pszHeader = Log_CreateRtfHeader(mi); - - CheckColorsInModule((char*)gcr->pszModule); - CList_SetAllOffline(TRUE, gcr->pszModule); - - LeaveCriticalSection(&cs); - return 0; - } - - LeaveCriticalSection(&cs); - return GC_REGISTER_ERROR; -} - -static INT_PTR Service_NewChat(WPARAM wParam, LPARAM lParam) -{ - MODULEINFO* mi; - GCSESSION *gcw =(GCSESSION *)lParam; - if (gcw== NULL) - return GC_NEWSESSION_ERROR; - - if (gcw->cbSize != SIZEOF_STRUCT_GCWINDOW_V1) - return GC_NEWSESSION_WRONGVER; - - EnterCriticalSection(&cs); - - if (( mi = MM_FindModule( gcw->pszModule )) != NULL ) { - TCHAR* ptszID = a2tf( gcw->ptszID, gcw->dwFlags ); - SESSION_INFO* si = SM_AddSession( ptszID, gcw->pszModule); - - // create a new session and set the defaults - if ( si != NULL ) { - TCHAR szTemp[256]; - - si->dwItemData = gcw->dwItemData; - if ( gcw->iType != GCW_SERVER ) - si->wStatus = ID_STATUS_ONLINE; - si->iType = gcw->iType; - si->dwFlags = gcw->dwFlags; - si->ptszName = a2tf( gcw->ptszName, gcw->dwFlags ); - si->ptszStatusbarText = a2tf( gcw->ptszStatusbarText, gcw->dwFlags ); - si->iSplitterX = g_Settings.iSplitterX; - si->iSplitterY = g_Settings.iSplitterY; - si->iLogFilterFlags = (int)DBGetContactSettingDword(NULL, "Chat", "FilterFlags", 0x03E0); - si->bFilterEnabled = DBGetContactSettingByte(NULL, "Chat", "FilterEnabled", 0); - si->bNicklistEnabled = DBGetContactSettingByte(NULL, "Chat", "ShowNicklist", 1); - if ( !( gcw->dwFlags & GC_UNICODE )) { - si->pszID = mir_strdup( gcw->pszID ); - si->pszName = mir_strdup( gcw->pszName ); - } - - if ( mi->bColor ) { - si->iFG = 4; - si->bFGSet = TRUE; - } - if ( mi->bBkgColor ) { - si->iBG = 2; - si->bBGSet = TRUE; - } - if (si->iType == GCW_SERVER) - mir_sntprintf(szTemp, SIZEOF(szTemp), _T("Server: %s"), si->ptszName); - else - mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s"), si->ptszName); - si->hContact = CList_AddRoom( gcw->pszModule, ptszID, szTemp, si->iType); - DBWriteContactSettingString(si->hContact, si->pszModule , "Topic", ""); - DBDeleteContactSetting(si->hContact, "CList", "StatusMsg"); - if (si->ptszStatusbarText) - DBWriteContactSettingTString(si->hContact, si->pszModule, "StatusBar", si->ptszStatusbarText); - else - DBWriteContactSettingString(si->hContact, si->pszModule, "StatusBar", ""); - } - else { - SESSION_INFO* si2 = SM_FindSession( ptszID, gcw->pszModule ); - if ( si2 ) { - if (si2->hWnd) - g_TabSession.nUsersInNicklist = 0; - - UM_RemoveAll(&si2->pUsers); - TM_RemoveAll(&si2->pStatuses); - - si2->iStatusCount = 0; - si2->nUsersInNicklist = 0; - - if ( !g_Settings.TabsEnable ) { - if (si2->hWnd ) - RedrawWindow(GetDlgItem(si2->hWnd, IDC_LIST), NULL, NULL, RDW_INVALIDATE); - } - else if (g_TabSession.hWnd) - RedrawWindow(GetDlgItem(g_TabSession.hWnd, IDC_LIST), NULL, NULL, RDW_INVALIDATE); - } } - - LeaveCriticalSection(&cs); - mir_free( ptszID ); - return 0; - } - - LeaveCriticalSection(&cs); - return GC_NEWSESSION_ERROR; -} - -static int DoControl(GCEVENT * gce, WPARAM wp) -{ - if ( gce->pDest->iType == GC_EVENT_CONTROL ) { - switch (wp) { - case WINDOW_HIDDEN: - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if (si) { - si->bInitDone = TRUE; - SetActiveSession(si->ptszID, si->pszModule); - if (si->hWnd) - ShowRoom(si, wp, FALSE); - } - } - return 0; - - case WINDOW_MINIMIZE: - case WINDOW_MAXIMIZE: - case WINDOW_VISIBLE: - case SESSION_INITDONE: - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if (si) { - si->bInitDone = TRUE; - if (wp != SESSION_INITDONE || DBGetContactSettingByte(NULL, "Chat", "PopupOnJoin", 0) == 0) - ShowRoom(si, wp, TRUE); - return 0; - } } - break; - - case SESSION_OFFLINE: - SM_SetOffline(gce->pDest->ptszID, gce->pDest->pszModule); - // fall through - - case SESSION_ONLINE: - SM_SetStatus( gce->pDest->ptszID, gce->pDest->pszModule, wp==SESSION_ONLINE?ID_STATUS_ONLINE:ID_STATUS_OFFLINE); - break; - - case WINDOW_CLEARLOG: - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if ( si ) { - LM_RemoveAll(&si->pLog, &si->pLogEnd); - if ( si->hWnd ) { - g_TabSession.pLog = si->pLog; - g_TabSession.pLogEnd = si->pLogEnd; - } - si->iEventCount = 0; - si->LastTime = 0; - } - break; - } - case SESSION_TERMINATE: - return SM_RemoveSession(gce->pDest->ptszID, gce->pDest->pszModule, (gce->dwFlags & GCEF_REMOVECONTACT) != 0); - } - SM_SendMessage(gce->pDest->ptszID, gce->pDest->pszModule, GC_EVENT_CONTROL + WM_USER + 500, wp, 0); - } - - else if (gce->pDest->iType == GC_EVENT_CHUID && gce->pszText) - { - SM_ChangeUID( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszNick, gce->ptszText); - } - - else if (gce->pDest->iType == GC_EVENT_CHANGESESSIONAME && gce->pszText) - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if ( si ) { - replaceStr( &si->ptszName, gce->ptszText ); - if ( si->hWnd ) - SendMessage(si->hWnd, GC_UPDATETITLE, 0, 0); - - if ( g_TabSession.hWnd && g_Settings.TabsEnable ) { - g_TabSession.ptszName = si->ptszName; - SendMessage(g_TabSession.hWnd, GC_SESSIONNAMECHANGE, 0, (LPARAM)si); - } } } - - else if (gce->pDest->iType == GC_EVENT_SETITEMDATA) { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if (si) - si->dwItemData = gce->dwItemData; - } - - else if (gce->pDest->iType ==GC_EVENT_GETITEMDATA) { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if (si) { - gce->dwItemData = si->dwItemData; - return si->dwItemData; - } - return 0; - } - else if (gce->pDest->iType == GC_EVENT_SETSBTEXT) - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if (si) { - replaceStr( &si->ptszStatusbarText, gce->ptszText ); - if ( si->ptszStatusbarText ) - DBWriteContactSettingTString(si->hContact, si->pszModule, "StatusBar", si->ptszStatusbarText); - else - DBWriteContactSettingString(si->hContact, si->pszModule, "StatusBar", ""); - if ( si->hWnd ) { - g_TabSession.ptszStatusbarText = si->ptszStatusbarText; - SendMessage(si->hWnd, GC_UPDATESTATUSBAR, 0, 0); - } } - } - else if (gce->pDest->iType == GC_EVENT_ACK) - { - SM_SendMessage(gce->pDest->ptszID, gce->pDest->pszModule, GC_ACKMESSAGE, 0, 0); - } - else if (gce->pDest->iType == GC_EVENT_SENDMESSAGE && gce->pszText) - { - SM_SendUserMessage( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszText); - } - else if (gce->pDest->iType == GC_EVENT_SETSTATUSEX) - { - SM_SetStatusEx( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszText, gce->dwItemData); - } - else return 1; - - return 0; -} - -static void AddUser(GCEVENT * gce) -{ - SESSION_INFO* si = SM_FindSession( gce->pDest->ptszID, gce->pDest->pszModule); - if ( si ) { - WORD status = TM_StringToWord( si->pStatuses, gce->ptszStatus ); - USERINFO * ui = SM_AddUser( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, gce->ptszNick, status); - if (ui) { - ui->pszNick = mir_tstrdup( gce->ptszNick ); - - if (gce->bIsMe) - si->pMe = ui; - - ui->Status = status; - ui->Status |= si->pStatuses->Status; - - if (si->hWnd) { - g_TabSession.pUsers = si->pUsers; - SendMessage(si->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); -} } } } - -static INT_PTR Service_AddEvent(WPARAM wParam, LPARAM lParam) -{ - GCEVENT *gce = (GCEVENT*)lParam, save_gce; - GCDEST *gcd = NULL, save_gcd; - TCHAR* pWnd = NULL; - char* pMod = NULL; - BOOL bIsHighlighted = FALSE; - BOOL bRemoveFlag = FALSE; - int iRetVal = GC_EVENT_ERROR; - - if ( gce == NULL ) - return GC_EVENT_ERROR; - - gcd = gce->pDest; - if ( gcd == NULL ) - return GC_EVENT_ERROR; - - if ( gce->cbSize != SIZEOF_STRUCT_GCEVENT_V1 && gce->cbSize != SIZEOF_STRUCT_GCEVENT_V2 ) - return GC_EVENT_WRONGVER; - - if ( !IsEventSupported( gcd->iType )) - return GC_EVENT_ERROR; - - EnterCriticalSection(&cs); - - if ( !( gce->dwFlags & GC_UNICODE )) { - save_gce = *gce; - save_gcd = *gce->pDest; - gce->pDest->ptszID = a2tf( gce->pDest->ptszID, gce->dwFlags ); - gce->ptszUID = a2tf( gce->ptszUID, gce->dwFlags ); - gce->ptszNick = a2tf( gce->ptszNick, gce->dwFlags ); - gce->ptszStatus = a2tf( gce->ptszStatus, gce->dwFlags ); - gce->ptszText = a2tf( gce->ptszText, gce->dwFlags ); - gce->ptszUserInfo = a2tf( gce->ptszUserInfo, gce->dwFlags ); - } - - // Do different things according to type of event - switch(gcd->iType) { - case GC_EVENT_ADDGROUP: - { - STATUSINFO* si = SM_AddStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszStatus); - if ( si && gce->dwItemData) - si->hIcon = CopyIcon((HICON)gce->dwItemData); - } - iRetVal = 0; - goto LBL_Exit; - - case GC_EVENT_CHUID: - case GC_EVENT_CHANGESESSIONAME: - case GC_EVENT_SETITEMDATA: - case GC_EVENT_GETITEMDATA: - case GC_EVENT_CONTROL: - case GC_EVENT_SETSBTEXT: - case GC_EVENT_ACK: - case GC_EVENT_SENDMESSAGE : - case GC_EVENT_SETSTATUSEX : - iRetVal = DoControl(gce, wParam); - goto LBL_Exit; - - case GC_EVENT_SETCONTACTSTATUS: - iRetVal = SM_SetContactStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, (WORD)gce->dwItemData ); - goto LBL_Exit; - - case GC_EVENT_TOPIC: - { - SESSION_INFO* si = SM_FindSession(gce->pDest->ptszID, gce->pDest->pszModule); - if ( si ) { - if ( gce->pszText ) { - replaceStr( &si->ptszTopic, gce->ptszText); - if ( si->hWnd ) - g_TabSession.ptszTopic = si->ptszTopic; - DBWriteContactSettingTString( si->hContact, si->pszModule , "Topic", RemoveFormatting( si->ptszTopic )); - if ( DBGetContactSettingByte( NULL, "Chat", "TopicOnClist", 0 )) - DBWriteContactSettingTString( si->hContact, "CList" , "StatusMsg", RemoveFormatting( si->ptszTopic )); - } } - break; - } - case GC_EVENT_ADDSTATUS: - SM_GiveStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, gce->ptszStatus ); - break; - - case GC_EVENT_REMOVESTATUS: - SM_TakeStatus( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID, gce->ptszStatus); - break; - - case GC_EVENT_MESSAGE: - case GC_EVENT_ACTION: - if ( !gce->bIsMe && gce->pDest->pszID && gce->pszText ) { - SESSION_INFO* si = SM_FindSession( gce->pDest->ptszID, gce->pDest->pszModule ); - if ( si ) - if ( IsHighlighted( si, gce->ptszText )) - bIsHighlighted = TRUE; - } - break; - - case GC_EVENT_NICK: - SM_ChangeNick( gce->pDest->ptszID, gce->pDest->pszModule, gce); - break; - - case GC_EVENT_JOIN: - AddUser(gce); - break; - - case GC_EVENT_PART: - case GC_EVENT_QUIT: - case GC_EVENT_KICK: - bRemoveFlag = TRUE; - break; - } - - // Decide which window (log) should have the event - if ( gcd->pszID ) { - pWnd = gcd->ptszID; - pMod = gcd->pszModule; - } - else if ( gcd->iType == GC_EVENT_NOTICE || gcd->iType == GC_EVENT_INFORMATION ) { - SESSION_INFO* si = GetActiveSession(); - if ( si && !lstrcmpA( si->pszModule, gcd->pszModule )) { - pWnd = si->ptszID; - pMod = si->pszModule; - } - else { - iRetVal = 0; - goto LBL_Exit; - } - } - else { - // Send the event to all windows with a user pszUID. Used for broadcasting QUIT etc - SM_AddEventToAllMatchingUID( gce ); - if ( !bRemoveFlag ) { - iRetVal = 0; - goto LBL_Exit; - } } - - // add to log - if ( pWnd ) { - SESSION_INFO* si = SM_FindSession(pWnd, pMod); - - // fix for IRC's old stuyle mode notifications. Should not affect any other protocol - if ((gce->pDest->iType == GC_EVENT_ADDSTATUS || gce->pDest->iType == GC_EVENT_REMOVESTATUS) && !( gce->dwFlags & GCEF_ADDTOLOG )) { - iRetVal = 0; - goto LBL_Exit; - } - - if (gce && gce->pDest->iType == GC_EVENT_JOIN && gce->time == 0) { - iRetVal = 0; - goto LBL_Exit; - } - - if (si && (si->bInitDone || gce->pDest->iType == GC_EVENT_TOPIC || (gce->pDest->iType == GC_EVENT_JOIN && gce->bIsMe))) { - if (SM_AddEvent(pWnd, pMod, gce, bIsHighlighted) && si->hWnd) { - g_TabSession.pLog = si->pLog; - g_TabSession.pLogEnd = si->pLogEnd; - SendMessage(si->hWnd, GC_ADDLOG, 0, 0); - } - else if (si->hWnd) { - g_TabSession.pLog = si->pLog; - g_TabSession.pLogEnd = si->pLogEnd; - SendMessage(si->hWnd, GC_REDRAWLOG2, 0, 0); - } - DoSoundsFlashPopupTrayStuff(si, gce, bIsHighlighted, 0); - if ((gce->dwFlags & GCEF_ADDTOLOG) && g_Settings.LoggingEnabled) - LogToFile(si, gce); - } - - if ( !bRemoveFlag ) { - iRetVal = 0; - goto LBL_Exit; - } } - - if ( bRemoveFlag ) - iRetVal = ( SM_RemoveUser( gce->pDest->ptszID, gce->pDest->pszModule, gce->ptszUID ) == 0 ) ? 1 : 0; - -LBL_Exit: - LeaveCriticalSection(&cs); - - if ( !( gce->dwFlags & GC_UNICODE )) { - mir_free((void*)gce->ptszText ); - mir_free((void*)gce->ptszNick ); - mir_free((void*)gce->ptszUID ); - mir_free((void*)gce->ptszStatus ); - mir_free((void*)gce->ptszUserInfo ); - mir_free((void*)gce->pDest->ptszID ); - *gce = save_gce; - *gce->pDest = save_gcd; - } - - return iRetVal; -} - -static INT_PTR Service_GetAddEventPtr(WPARAM wParam, LPARAM lParam) -{ - GCPTRS * gp = (GCPTRS *) lParam; - - EnterCriticalSection(&cs); - - gp->pfnAddEvent = Service_AddEvent; - LeaveCriticalSection(&cs); - return 0; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Service creation - -void HookEvents(void) -{ - InitializeCriticalSection(&cs); - g_hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded); - g_hHookPrebuildMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, CList_PrebuildContactMenu); - g_hSystemPreShutdown = HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown); - g_hIconsChanged = HookEvent(ME_SKIN_ICONSCHANGED, IconsChanged); -} - -void UnhookEvents(void) -{ - UnhookEvent(g_hModulesLoaded); - UnhookEvent(g_hSystemPreShutdown); - UnhookEvent(g_hHookPrebuildMenu); - UnhookEvent(g_hIconsChanged); - UnhookEvent(g_hIconsChanged2); - UnhookEvent(g_hFontsChanged); - if (g_hSmileyOptionsChanged) - UnhookEvent(g_hSmileyOptionsChanged); - DeleteCriticalSection(&cs); -} - -void CreateServiceFunctions(void) -{ - hServiceRegister = CreateServiceFunction(MS_GC_REGISTER, Service_Register); - hServiceNewChat = CreateServiceFunction(MS_GC_NEWSESSION, Service_NewChat); - hServiceAddEvent = CreateServiceFunction(MS_GC_EVENT, Service_AddEvent); - hServiceGetAddEventPtr = CreateServiceFunction(MS_GC_GETEVENTPTR, Service_GetAddEventPtr); - hServiceGetInfo = CreateServiceFunction(MS_GC_GETINFO, Service_GetInfo); - hServiceGetCount = CreateServiceFunction(MS_GC_GETSESSIONCOUNT, Service_GetCount); - - hEventDoubleclicked = CreateServiceFunction("GChat/DblClickEvent", CList_EventDoubleclicked); - hEventPrebuildMenu = CreateServiceFunction("GChat/PrebuildMenuEvent", CList_PrebuildContactMenuSvc); - hEventJoinChat = CreateServiceFunction("GChat/JoinChat", CList_JoinChat); - hEventLeaveChat = CreateServiceFunction("GChat/LeaveChat", CList_LeaveChat); -} - -void DestroyServiceFunctions(void) -{ - DestroyServiceFunction( hServiceRegister ); - DestroyServiceFunction( hServiceNewChat ); - DestroyServiceFunction( hServiceAddEvent ); - DestroyServiceFunction( hServiceGetAddEventPtr ); - DestroyServiceFunction( hServiceGetInfo ); - DestroyServiceFunction( hServiceGetCount ); - - DestroyServiceFunction( hEventDoubleclicked ); - DestroyServiceFunction( hEventPrebuildMenu ); - DestroyServiceFunction( hEventJoinChat ); - DestroyServiceFunction( hEventLeaveChat ); -} - -void CreateHookableEvents(void) -{ - hSendEvent = CreateHookableEvent(ME_GC_EVENT); - hBuildMenuEvent = CreateHookableEvent(ME_GC_BUILDMENU); -} - -void DestroyHookableEvents(void) -{ - DestroyHookableEvent(hSendEvent); - DestroyHookableEvent(hBuildMenuEvent); -} - -void TabsInit(void) -{ - ZeroMemory(&g_TabSession, sizeof(SESSION_INFO)); - - g_TabSession.iType = GCW_TABROOM; - g_TabSession.iSplitterX = g_Settings.iSplitterX; - g_TabSession.iSplitterY = g_Settings.iSplitterY; - g_TabSession.iLogFilterFlags = (int)DBGetContactSettingDword(NULL, "Chat", "FilterFlags", 0x03E0); - g_TabSession.bFilterEnabled = DBGetContactSettingByte(NULL, "Chat", "FilterEnabled", 0); - g_TabSession.bNicklistEnabled = DBGetContactSettingByte(NULL, "Chat", "ShowNicklist", 1); - g_TabSession.iFG = 4; - g_TabSession.bFGSet = TRUE; - g_TabSession.iBG = 2; - g_TabSession.bBGSet = TRUE; -} diff --git a/plugins/Chat/src/tools.cpp b/plugins/Chat/src/tools.cpp deleted file mode 100644 index fa8f28ead3..0000000000 --- a/plugins/Chat/src/tools.cpp +++ /dev/null @@ -1,917 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright 2000-2010 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "chat.h" - -extern HICON hIcons[30]; -extern BOOL PopUpInstalled; -extern FONTINFO aFonts[OPTIONS_FONTCOUNT]; -extern HMENU g_hMenu; -extern HANDLE hBuildMenuEvent ; -extern HANDLE hSendEvent; -extern SESSION_INFO g_TabSession; - -int GetRichTextLength(HWND hwnd) -{ - GETTEXTLENGTHEX gtl; - - gtl.flags = GTL_PRECISE; - gtl.codepage = CP_ACP ; - return (int) SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0); -} - -TCHAR* RemoveFormatting(const TCHAR* pszWord) -{ - static TCHAR szTemp[10000]; - int i = 0; - int j = 0; - - if ( pszWord == 0 || lstrlen(pszWord) == 0 ) - return NULL; - - while(j < 9999 && i <= lstrlen( pszWord )) { - if (pszWord[i] == '%') { - switch ( pszWord[i+1] ) { - case '%': - szTemp[j] = '%'; - j++; - i++; i++; - break; - case 'b': - case 'u': - case 'i': - case 'B': - case 'U': - case 'I': - case 'r': - case 'C': - case 'F': - i++; i++; - break; - - case 'c': - case 'f': - i += 4; - break; - - default: - szTemp[j] = pszWord[i]; - j++; - i++; - break; - } } - else { - szTemp[j] = pszWord[i]; - j++; - i++; - } } - - return (TCHAR*) &szTemp; -} - -static void __stdcall ShowRoomFromPopup(void * pi) -{ - SESSION_INFO* si = (SESSION_INFO*) pi; - ShowRoom(si, WINDOW_VISIBLE, TRUE); -} - -static INT_PTR CALLBACK PopupDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - switch(message) { - case WM_COMMAND: - if (HIWORD(wParam) == STN_CLICKED) { - SESSION_INFO* si = (SESSION_INFO*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,(LPARAM)0);; - - CallFunctionAsync(ShowRoomFromPopup, si); - - PUDeletePopUp(hWnd); - return TRUE; - } - break; - case WM_CONTEXTMENU: - { - SESSION_INFO* si = (SESSION_INFO*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,(LPARAM)0); - if (si->hContact) - if (CallService(MS_CLIST_GETEVENT, (WPARAM)si->hContact, (LPARAM)0)) - CallService(MS_CLIST_REMOVEEVENT, (WPARAM)si->hContact, (LPARAM)"chaticon"); - - if (si->hWnd && KillTimer(si->hWnd, TIMERID_FLASHWND)) - FlashWindow(si->hWnd, FALSE); - - PUDeletePopUp( hWnd ); - } - break; - } - return DefWindowProc(hWnd, message, wParam, lParam); -} - -static int ShowPopup (HANDLE hContact, SESSION_INFO* si, HICON hIcon, char* pszProtoName, TCHAR* pszRoomName, COLORREF crBkg, const TCHAR* fmt, ...) -{ - POPUPDATAT pd = {0}; - va_list marker; - static TCHAR szBuf[4*1024]; - - if (!fmt || lstrlen(fmt) == 0 || lstrlen(fmt) > 2000) - return 0; - - va_start(marker, fmt); - _vsntprintf(szBuf, 4096, fmt, marker); - va_end(marker); - - pd.lchContact = hContact; - - if ( hIcon ) - pd.lchIcon = hIcon ; - else - pd.lchIcon = LoadIconEx( "window", FALSE ); - - mir_sntprintf(pd.lptzContactName, MAX_CONTACTNAME-1, _T(TCHAR_STR_PARAM) _T(" - %s"), - pszProtoName, CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR )); - lstrcpyn( pd.lptzText, TranslateTS(szBuf), MAX_SECONDLINE-1); - pd.iSeconds = g_Settings.iPopupTimeout; - - if (g_Settings.iPopupStyle == 2) { - pd.colorBack = 0; - pd.colorText = 0; - } - else if (g_Settings.iPopupStyle == 3) { - pd.colorBack = g_Settings.crPUBkgColour; - pd.colorText = g_Settings.crPUTextColour; - } - else { - pd.colorBack = g_Settings.crLogBackground; - pd.colorText = crBkg; - } - - pd.PluginWindowProc = (WNDPROC)PopupDlgProc; - pd.PluginData = si; - return PUAddPopUpT(&pd); -} - -static BOOL DoTrayIcon(SESSION_INFO* si, GCEVENT * gce) -{ - int iEvent = gce->pDest->iType; - - if ( iEvent&g_Settings.dwTrayIconFlags ) { - switch ( iEvent ) { - case GC_EVENT_MESSAGE|GC_EVENT_HIGHLIGHT : - case GC_EVENT_ACTION|GC_EVENT_HIGHLIGHT : - CList_AddEvent(si->hContact, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), "chaticon", 0, TranslateT("%s wants your attention in %s"), gce->ptszNick, si->ptszName); - break; - case GC_EVENT_MESSAGE : - CList_AddEvent(si->hContact, hIcons[ICON_MESSAGE], "chaticon", CLEF_ONLYAFEW, TranslateT("%s speaks in %s"), gce->ptszNick, si->ptszName); - break; - case GC_EVENT_ACTION: - CList_AddEvent(si->hContact, hIcons[ICON_ACTION], "chaticon", CLEF_ONLYAFEW, TranslateT("%s speaks in %s"), gce->ptszNick, si->ptszName); - break; - case GC_EVENT_JOIN: - CList_AddEvent(si->hContact, hIcons[ICON_JOIN], "chaticon", CLEF_ONLYAFEW, TranslateT("%s has joined %s"), gce->ptszNick, si->ptszName); - break; - case GC_EVENT_PART: - CList_AddEvent(si->hContact, hIcons[ICON_PART], "chaticon", CLEF_ONLYAFEW, TranslateT("%s has left %s"), gce->ptszNick, si->ptszName); - break; - case GC_EVENT_QUIT: - CList_AddEvent(si->hContact, hIcons[ICON_QUIT], "chaticon", CLEF_ONLYAFEW, TranslateT("%s has disconnected"), gce->ptszNick); - break; - case GC_EVENT_NICK: - CList_AddEvent(si->hContact, hIcons[ICON_NICK], "chaticon", CLEF_ONLYAFEW, TranslateT("%s is now known as %s"), gce->ptszNick, gce->pszText); - break; - case GC_EVENT_KICK: - CList_AddEvent(si->hContact, hIcons[ICON_KICK], "chaticon", CLEF_ONLYAFEW, TranslateT("%s kicked %s from %s"), gce->pszStatus, gce->ptszNick, si->ptszName); - break; - case GC_EVENT_NOTICE: - CList_AddEvent(si->hContact, hIcons[ICON_NOTICE], "chaticon", CLEF_ONLYAFEW, TranslateT("Notice from %s"), gce->ptszNick); - break; - case GC_EVENT_TOPIC: - CList_AddEvent(si->hContact, hIcons[ICON_TOPIC], "chaticon", CLEF_ONLYAFEW, TranslateT("Topic change in %s"), si->ptszName); - break; - case GC_EVENT_INFORMATION: - CList_AddEvent(si->hContact, hIcons[ICON_INFO], "chaticon", CLEF_ONLYAFEW, TranslateT("Information in %s"), si->ptszName); - break; - case GC_EVENT_ADDSTATUS: - CList_AddEvent(si->hContact, hIcons[ICON_ADDSTATUS], "chaticon", CLEF_ONLYAFEW, TranslateT("%s enables \'%s\' status for %s in %s"), gce->pszText, gce->pszStatus, gce->ptszNick, si->ptszName); - break; - case GC_EVENT_REMOVESTATUS: - CList_AddEvent(si->hContact, hIcons[ICON_REMSTATUS], "chaticon", CLEF_ONLYAFEW, TranslateT("%s disables \'%s\' status for %s in %s"), gce->pszText, gce->pszStatus, gce->ptszNick, si->ptszName); - break; - } } - - return TRUE; -} - -static BOOL DoPopup(SESSION_INFO* si, GCEVENT * gce) -{ - int iEvent = gce->pDest->iType; - - if ( iEvent & g_Settings.dwPopupFlags ) { - switch (iEvent) { - case GC_EVENT_MESSAGE|GC_EVENT_HIGHLIGHT : - ShowPopup(si->hContact, si, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), si->pszModule, si->ptszName, aFonts[16].color, TranslateT("%s says: %s"), gce->ptszNick, RemoveFormatting( gce->ptszText )); - break; - case GC_EVENT_ACTION|GC_EVENT_HIGHLIGHT : - ShowPopup(si->hContact, si, LoadSkinnedIcon(SKINICON_EVENT_MESSAGE), si->pszModule, si->ptszName, aFonts[16].color, _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_MESSAGE : - ShowPopup(si->hContact, si, hIcons[ICON_MESSAGE], si->pszModule, si->ptszName, aFonts[9].color, TranslateT("%s says: %s"), gce->ptszNick, RemoveFormatting( gce->ptszText)); - break; - case GC_EVENT_ACTION: - ShowPopup(si->hContact, si, hIcons[ICON_ACTION], si->pszModule, si->ptszName, aFonts[15].color, _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_JOIN: - ShowPopup(si->hContact, si, hIcons[ICON_JOIN], si->pszModule, si->ptszName, aFonts[3].color, TranslateT("%s has joined"), gce->ptszNick); - break; - case GC_EVENT_PART: - if (!gce->pszText) - ShowPopup(si->hContact, si, hIcons[ICON_PART], si->pszModule, si->ptszName, aFonts[4].color, TranslateT("%s has left"), gce->ptszNick); - else - ShowPopup(si->hContact, si, hIcons[ICON_PART], si->pszModule, si->ptszName, aFonts[4].color, TranslateT("%s has left (%s)"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_QUIT: - if (!gce->pszText) - ShowPopup(si->hContact, si, hIcons[ICON_QUIT], si->pszModule, si->ptszName, aFonts[5].color, TranslateT("%s has disconnected"), gce->ptszNick); - else - ShowPopup(si->hContact, si, hIcons[ICON_QUIT], si->pszModule, si->ptszName, aFonts[5].color, TranslateT("%s has disconnected (%s)"), gce->ptszNick,RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_NICK: - ShowPopup(si->hContact, si, hIcons[ICON_NICK], si->pszModule, si->ptszName, aFonts[7].color, TranslateT("%s is now known as %s"), gce->ptszNick, gce->ptszText); - break; - case GC_EVENT_KICK: - if (!gce->pszText) - ShowPopup(si->hContact, si, hIcons[ICON_KICK], si->pszModule, si->ptszName, aFonts[6].color, TranslateT("%s kicked %s"), (char *)gce->pszStatus, gce->ptszNick); - else - ShowPopup(si->hContact, si, hIcons[ICON_KICK], si->pszModule, si->ptszName, aFonts[6].color, TranslateT("%s kicked %s (%s)"), (char *)gce->pszStatus, gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_NOTICE: - ShowPopup(si->hContact, si, hIcons[ICON_NOTICE], si->pszModule, si->ptszName, aFonts[8].color, TranslateT("Notice from %s: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_TOPIC: - if (!gce->ptszNick) - ShowPopup(si->hContact, si, hIcons[ICON_TOPIC], si->pszModule, si->ptszName, aFonts[11].color, TranslateT("The topic is \'%s\'"), RemoveFormatting(gce->ptszText)); - else - ShowPopup(si->hContact, si, hIcons[ICON_TOPIC], si->pszModule, si->ptszName, aFonts[11].color, TranslateT("The topic is \'%s\' (set by %s)"), RemoveFormatting(gce->ptszText), gce->ptszNick); - break; - case GC_EVENT_INFORMATION: - ShowPopup(si->hContact, si, hIcons[ICON_INFO], si->pszModule, si->ptszName, aFonts[12].color, _T("%s"), RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_ADDSTATUS: - ShowPopup(si->hContact, si, hIcons[ICON_ADDSTATUS], si->pszModule, si->ptszName, aFonts[13].color, TranslateT("%s enables \'%s\' status for %s"), gce->ptszText, (char *)gce->pszStatus, gce->ptszNick); - break; - case GC_EVENT_REMOVESTATUS: - ShowPopup(si->hContact, si, hIcons[ICON_REMSTATUS], si->pszModule, si->ptszName, aFonts[14].color, TranslateT("%s disables \'%s\' status for %s"), gce->ptszText, (char *)gce->pszStatus, gce->ptszNick); - break; - } } - - return TRUE; -} - -BOOL DoSoundsFlashPopupTrayStuff(SESSION_INFO* si, GCEVENT * gce, BOOL bHighlight, int bManyFix) -{ - BOOL bInactive; - int iEvent; - - if (!gce || !si || gce->bIsMe || si->iType == GCW_SERVER) - return FALSE; - - bInactive = si->hWnd == NULL || GetForegroundWindow() != si->hWnd; - // bInactive |= GetActiveWindow() != si->hWnd; // Removed this, because it seemed to be FALSE, even when window was focused, causing incorrect notifications - - iEvent = gce->pDest->iType; - - if ( bHighlight ) { - gce->pDest->iType |= GC_EVENT_HIGHLIGHT; - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatHighlight"); - if (!g_Settings.TabsEnable && bInactive && si->hWnd && DBGetContactSettingByte(NULL, "Chat", "FlashWindowHighlight", 0) != 0) - SetTimer(si->hWnd, TIMERID_FLASHWND, 900, NULL); - if (DBGetContactSettingByte(si->hContact, "CList", "Hidden", 0) != 0) - DBDeleteContactSetting(si->hContact, "CList", "Hidden"); - if (bInactive) - DoTrayIcon(si, gce); - if (bInactive || !g_Settings.PopUpInactiveOnly) - DoPopup(si, gce); - if (g_Settings.TabsEnable && bInactive && g_TabSession.hWnd) - SendMessage(g_TabSession.hWnd, GC_SETMESSAGEHIGHLIGHT, 0, (LPARAM) si); - return TRUE; - } - - // do blinking icons in tray - if (bInactive || !g_Settings.TrayIconInactiveOnly) - DoTrayIcon(si, gce); - - // stupid thing to not create multiple popups for a QUIT event for instance - if (bManyFix == 0) { - // do popups - if (bInactive || !g_Settings.PopUpInactiveOnly) - DoPopup(si, gce); - - // do sounds and flashing - switch (iEvent) { - case GC_EVENT_JOIN: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatJoin"); - break; - case GC_EVENT_PART: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatPart"); - break; - case GC_EVENT_QUIT: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatQuit"); - break; - case GC_EVENT_ADDSTATUS: - case GC_EVENT_REMOVESTATUS: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatMode"); - break; - case GC_EVENT_KICK: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatKick"); - break; - case GC_EVENT_MESSAGE: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatMessage"); - if (!g_Settings.TabsEnable && bInactive && g_Settings.FlashWindow && si->hWnd) - SetTimer(si->hWnd, TIMERID_FLASHWND, 900, NULL); - - if (bInactive && !( si->wState & STATE_TALK )) { - si->wState |= STATE_TALK; - DBWriteContactSettingWord(si->hContact, si->pszModule,"ApparentMode",(LPARAM)(WORD) 40071); - } - if (g_Settings.TabsEnable && bInactive && g_TabSession.hWnd) - SendMessage(g_TabSession.hWnd, GC_SETTABHIGHLIGHT, 0, (LPARAM) si); - break; - case GC_EVENT_ACTION: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatAction"); - break; - case GC_EVENT_NICK: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatNick"); - break; - case GC_EVENT_NOTICE: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatNotice"); - break; - case GC_EVENT_TOPIC: - if (bInactive || !g_Settings.SoundsFocus) - SkinPlaySound("ChatTopic"); - break; - } } - - return TRUE; -} - -int GetColorIndex(const char* pszModule, COLORREF cr) -{ - MODULEINFO * pMod = MM_FindModule(pszModule); - int i = 0; - - if (!pMod || pMod->nColorCount == 0) - return -1; - - for (i = 0; i < pMod->nColorCount; i++) - if (pMod->crColors[i] == cr) - return i; - - return -1; -} - -// obscure function that is used to make sure that any of the colors -// passed by the protocol is used as fore- or background color -// in the messagebox. THis is to vvercome limitations in the richedit -// that I do not know currently how to fix - -void CheckColorsInModule(const char* pszModule) -{ - MODULEINFO * pMod = MM_FindModule( pszModule ); - int i = 0; - COLORREF crFG; - COLORREF crBG = (COLORREF)DBGetContactSettingDword(NULL, "Chat", "ColorMessageBG", GetSysColor(COLOR_WINDOW)); - - LoadMsgDlgFont(17, NULL, &crFG); - - if ( !pMod ) - return; - - for (i = 0; i < pMod->nColorCount; i++) { - if (pMod->crColors[i] == crFG || pMod->crColors[i] == crBG) { - if (pMod->crColors[i] == RGB(255,255,255)) - pMod->crColors[i]--; - else - pMod->crColors[i]++; -} } } - -const TCHAR* my_strstri(const TCHAR* s1, const TCHAR* s2) -{ - int i,j,k; - for(i=0; s1[i]; i++) - for(j=i, k=0; _totlower(s1[j]) == _totlower(s2[k]); j++, k++) - if (!s2[k+1]) - return s1 + i; - - return NULL; -} - -BOOL IsHighlighted(SESSION_INFO* si, const TCHAR* pszText) -{ - if ( g_Settings.HighlightEnabled && g_Settings.pszHighlightWords && pszText && si->pMe ) { - TCHAR* p1 = g_Settings.pszHighlightWords; - TCHAR* p2 = NULL; - const TCHAR* p3 = pszText; - static TCHAR szWord1[1000]; - static TCHAR szWord2[1000]; - static TCHAR szTrimString[] = _T(":,.!?;\'>)"); - - // compare word for word - while (*p1 != '\0') { - // find the next/first word in the highlight word string - // skip 'spaces' be4 the word - while(*p1 == ' ' && *p1 != '\0') - p1 += 1; - - //find the end of the word - p2 = _tcschr(p1, ' '); - if (!p2) - p2 = _tcschr(p1, '\0'); - if (p1 == p2) - return FALSE; - - // copy the word into szWord1 - lstrcpyn(szWord1, p1, p2 - p1 > 998 ? 999 : p2 - p1 + 1); - p1 = p2; - - // replace %m with the users nickname - p2 = _tcschr(szWord1, '%'); - if (p2 && p2[1] == 'm') { - TCHAR szTemp[50]; - - p2[1] = 's'; - lstrcpyn(szTemp, szWord1, 999); - mir_sntprintf(szWord1, SIZEOF(szWord1), szTemp, si->pMe->pszNick); - } - - // time to get the next/first word in the incoming text string - while(*p3 != '\0') - { - // skip 'spaces' be4 the word - while(*p3 == ' ' && *p3 != '\0') - p3 += 1; - - //find the end of the word - p2 = (TCHAR *)_tcschr(p3, ' '); - if (!p2) - p2 = (TCHAR *)_tcschr(p3, '\0'); - - - if (p3 != p2) { - // eliminate ending character if needed - if (p2-p3 > 1 && _tcschr(szTrimString, p2[-1])) - p2 -= 1; - - // copy the word into szWord2 and remove formatting - lstrcpyn(szWord2, p3, p2-p3>998?999:p2-p3+1); - - // reset the pointer if it was touched because of an ending character - if (*p2 != '\0' && *p2 != ' ') - p2 += 1; - p3 = p2; - - CharLower(szWord1); - CharLower(szWord2); - - // compare the words, using wildcards - if (WCCmp(szWord1, RemoveFormatting(szWord2))) - return TRUE; - } } - - p3 = pszText; - } } - - return FALSE; -} - -BOOL LogToFile(SESSION_INFO* si, GCEVENT * gce) -{ - MODULEINFO * mi = NULL; - TCHAR szBuffer[4096]; - TCHAR szLine[4096]; - TCHAR szTime[100]; - FILE *hFile = NULL; - TCHAR szFile[MAX_PATH]; - TCHAR szName[MAX_PATH]; - TCHAR szFolder[MAX_PATH]; - char p = '\0'; - TCHAR *szModName = NULL; - szBuffer[0] = '\0'; - - if (!si || !gce) - return FALSE; - - mi = MM_FindModule(si->pszModule); - if ( !mi ) - return FALSE; - - szModName = mir_a2t(si->pszModule); - mir_sntprintf(szName, MAX_PATH, _T("%s"), mi->ptszModDispName ? mi->ptszModDispName : (szModName = mir_a2t(si->pszModule))); - mir_free(szModName); - ValidateFilename(szName); - mir_sntprintf(szFolder, MAX_PATH, _T("%s\\%s"), g_Settings.pszLogDir, szName ); - - CallService(MS_UTILS_CREATEDIRTREET, 0, (LPARAM)szFolder); - - mir_sntprintf( szName, MAX_PATH, _T("%s.log"), si->ptszID ); - ValidateFilename(szName); - - mir_sntprintf(szFile, MAX_PATH, _T("%s\\%s"), szFolder, szName ); - lstrcpyn(szTime, MakeTimeStamp(g_Settings.pszTimeStampLog, gce->time), 99); - - hFile = _tfopen(szFile, _T("at+")); - if (hFile) - { - TCHAR szTemp[512], szTemp2[512]; - TCHAR* pszNick = NULL; - if ( gce->ptszNick ) { - if ( g_Settings.LogLimitNames && lstrlen(gce->ptszNick) > 20 ) { - lstrcpyn(szTemp2, gce->ptszNick, 20); - lstrcpyn(szTemp2+20, _T("..."), 4); - } - else lstrcpyn(szTemp2, gce->ptszNick, 511); - - if (gce->pszUserInfo) - mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s (%s)"), szTemp2, gce->pszUserInfo); - else - mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s"), szTemp2); - pszNick = szTemp; - } - switch (gce->pDest->iType) { - case GC_EVENT_MESSAGE: - case GC_EVENT_MESSAGE|GC_EVENT_HIGHLIGHT: - p = '*'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s * %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_ACTION: - case GC_EVENT_ACTION|GC_EVENT_HIGHLIGHT: - p = '*'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_JOIN: - p = '>'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has joined"), (char *)pszNick); - break; - case GC_EVENT_PART: - p = '<'; - if (!gce->pszText) - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has left"), (char *)pszNick); - else - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has left (%s)"), (char *)pszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_QUIT: - p = '<'; - if (!gce->pszText) - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has disconnected"), (char *)pszNick); - else - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s has disconnected (%s)"), (char *)pszNick,RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_NICK: - p = '^'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s is now known as %s"), gce->ptszNick, gce->ptszText); - break; - case GC_EVENT_KICK: - p = '~'; - if (!gce->pszText) - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s kicked %s"), (char *)gce->pszStatus, gce->ptszNick); - else - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s kicked %s (%s)"), (char *)gce->pszStatus, gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_NOTICE: - p = '¤'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("Notice from %s: %s"), gce->ptszNick, RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_TOPIC: - p = '#'; - if (!gce->pszNick) - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("The topic is \'%s\'"), RemoveFormatting(gce->ptszText)); - else - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("The topic is \'%s\' (set by %s)"), RemoveFormatting(gce->ptszText), gce->ptszNick); - break; - case GC_EVENT_INFORMATION: - p = '!'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s"), RemoveFormatting(gce->ptszText)); - break; - case GC_EVENT_ADDSTATUS: - p = '+'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s enables \'%s\' status for %s"), gce->ptszText, (char *)gce->pszStatus, gce->ptszNick); - break; - case GC_EVENT_REMOVESTATUS: - p = '-'; - mir_sntprintf(szBuffer, SIZEOF(szBuffer), TranslateT("%s disables \'%s\' status for %s"), gce->ptszText, (char *)gce->pszStatus, gce->ptszNick); - break; - } - if (p) - mir_sntprintf(szLine, SIZEOF(szLine), TranslateT("%s %c %s\n"), szTime, p, szBuffer); - else - mir_sntprintf(szLine, SIZEOF(szLine), TranslateT("%s %s\n"), szTime, szBuffer); - - if ( szLine[0] ) { - char* p = mir_t2a( szLine ); - fputs(p, hFile); - mir_free( p ); - - if ( g_Settings.LoggingLimit > 0 ) { - DWORD dwSize; - DWORD trimlimit; - - fseek(hFile,0,SEEK_END); - dwSize = ftell(hFile); - rewind (hFile); - trimlimit = g_Settings.LoggingLimit*1024+ 1024*10; - if (dwSize > trimlimit) { - BYTE * pBuffer = 0; - BYTE * pBufferTemp = 0; - int read = 0; - - pBuffer = (BYTE *)mir_alloc(g_Settings.LoggingLimit*1024+1); - pBuffer[g_Settings.LoggingLimit*1024] = '\0'; - fseek(hFile,-g_Settings.LoggingLimit*1024,SEEK_END); - read = (int)fread(pBuffer, 1, g_Settings.LoggingLimit*1024, hFile); - fclose(hFile); - hFile = NULL; - - // trim to whole lines, should help with broken log files I hope. - pBufferTemp = (BYTE *)strchr((char *)pBuffer, '\n'); - if ( pBufferTemp ) { - pBufferTemp++; - read -= pBufferTemp - pBuffer; - } - else pBufferTemp = pBuffer; - - if (read > 0) { - hFile = _tfopen(szFile, _T("wt")); - if (hFile ) { - fwrite(pBufferTemp, 1, read, hFile); - fclose(hFile); hFile = NULL; - } } - - mir_free(pBuffer); - } } } - - if (hFile) - fclose(hFile); hFile = NULL; - return TRUE; - } - - return FALSE; -} - -UINT CreateGCMenu(HWND hwndDlg, HMENU *hMenu, int iIndex, POINT pt, SESSION_INFO* si, TCHAR* pszUID, TCHAR* pszWordText) -{ - GCMENUITEMS gcmi = {0}; - int i; - HMENU hSubMenu = 0; - - *hMenu = GetSubMenu(g_hMenu, iIndex); - TranslateMenu(*hMenu); - gcmi.pszID = si->ptszID; - gcmi.pszModule = si->pszModule; - gcmi.pszUID = pszUID; - - if (iIndex == 1) { - int i = GetRichTextLength(GetDlgItem(hwndDlg, IDC_LOG)); - - EnableMenuItem(*hMenu, ID_CLEARLOG, MF_ENABLED); - EnableMenuItem(*hMenu, ID_COPYALL, MF_ENABLED); - ModifyMenu(*hMenu, 4, MF_GRAYED|MF_BYPOSITION, 4, NULL); - if (!i) { - EnableMenuItem(*hMenu, ID_COPYALL, MF_BYCOMMAND | MF_GRAYED); - EnableMenuItem(*hMenu, ID_CLEARLOG, MF_BYCOMMAND | MF_GRAYED); - if (pszWordText && pszWordText[0]) - ModifyMenu(*hMenu, 4, MF_ENABLED|MF_BYPOSITION, 4, NULL); - } - - if ( pszWordText && pszWordText[0] ) { - TCHAR szMenuText[4096]; - mir_sntprintf( szMenuText, 4096, TranslateT("Look up \'%s\':"), pszWordText ); - ModifyMenu( *hMenu, 4, MF_STRING|MF_BYPOSITION, 4, szMenuText ); - } - else ModifyMenu( *hMenu, 4, MF_STRING|MF_GRAYED|MF_BYPOSITION, 4, TranslateT( "No word to look up" )); - gcmi.Type = MENU_ON_LOG; - } - else if (iIndex == 0) - { - TCHAR szTemp[30], szTemp2[30]; - lstrcpyn(szTemp, TranslateT("&Message"), 24); - if ( pszUID ) - mir_sntprintf( szTemp2, SIZEOF(szTemp2), _T("%s %s"), szTemp, pszUID); - else - lstrcpyn(szTemp2, szTemp, 24); - - if ( lstrlen(szTemp2) > 22 ) - lstrcpyn( szTemp2+22, _T("..."), 4 ); - ModifyMenu( *hMenu, ID_MESS, MF_STRING|MF_BYCOMMAND, ID_MESS, szTemp2 ); - gcmi.Type = MENU_ON_NICKLIST; - } - - NotifyEventHooks(hBuildMenuEvent, 0, (WPARAM)&gcmi); - - if (gcmi.nItems > 0) - AppendMenu(*hMenu, MF_SEPARATOR, 0, 0); - - for (i = 0; i < gcmi.nItems; i++) { - TCHAR* ptszDescr = a2tf(gcmi.Item[i].pszDesc, si->dwFlags); - TCHAR* ptszText = TranslateTS(ptszDescr); - DWORD dwState = gcmi.Item[i].bDisabled ? MF_GRAYED : 0; - - if (gcmi.Item[i].uType == MENU_NEWPOPUP) { - hSubMenu = CreateMenu(); - AppendMenu(*hMenu, dwState | MF_POPUP, (UINT_PTR)hSubMenu, ptszText); - } - else if (gcmi.Item[i].uType == MENU_POPUPHMENU) - AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_POPUP, gcmi.Item[i].dwID, ptszText); - else if (gcmi.Item[i].uType == MENU_POPUPITEM) - AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_STRING, gcmi.Item[i].dwID, ptszText); - else if (gcmi.Item[i].uType == MENU_POPUPCHECK) - AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, dwState | MF_CHECKED | MF_STRING, gcmi.Item[i].dwID, ptszText); - else if (gcmi.Item[i].uType == MENU_POPUPSEPARATOR) - AppendMenu(hSubMenu == 0 ? *hMenu : hSubMenu, MF_SEPARATOR, 0, ptszText); - else if (gcmi.Item[i].uType == MENU_SEPARATOR) - AppendMenu(*hMenu, MF_SEPARATOR, 0, ptszText); - else if (gcmi.Item[i].uType == MENU_HMENU) - AppendMenu(*hMenu, dwState | MF_POPUP, gcmi.Item[i].dwID, ptszText); - else if (gcmi.Item[i].uType == MENU_ITEM) - AppendMenu(*hMenu, dwState | MF_STRING, gcmi.Item[i].dwID, ptszText); - else if (gcmi.Item[i].uType == MENU_CHECK) - AppendMenu(*hMenu, dwState | MF_CHECKED | MF_STRING, gcmi.Item[i].dwID, ptszText); - - mir_free( ptszDescr ); - } - return TrackPopupMenu(*hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL); -} - -void DestroyGCMenu(HMENU *hMenu, int iIndex) -{ - MENUITEMINFO mi; - mi.cbSize = sizeof(mi); - mi.fMask = MIIM_SUBMENU; - while(GetMenuItemInfo(*hMenu, iIndex, TRUE, &mi)) - { - if (mi.hSubMenu != NULL) - DestroyMenu(mi.hSubMenu); - RemoveMenu(*hMenu, iIndex, MF_BYPOSITION); - } -} - -BOOL DoEventHookAsync(HWND hwnd, const TCHAR* pszID, const char* pszModule, int iType, TCHAR* pszUID, TCHAR* pszText, DWORD dwItem) -{ - GCHOOK* gch = (GCHOOK*)mir_calloc( sizeof( GCHOOK )); - GCDEST* gcd = (GCDEST*)mir_calloc( sizeof( GCDEST )); - - gcd->pszModule = mir_strdup( pszModule ); - - { - SESSION_INFO* si; - if (( si = SM_FindSession(pszID, pszModule)) == NULL ) - return FALSE; - - if ( !( si->dwFlags & GC_UNICODE )) { - gcd->pszID = mir_t2a( pszID ); - gch->pszUID = mir_t2a( pszUID ); - gch->pszText = mir_t2a( pszText ); - } - else { - gcd->ptszID = mir_tstrdup( pszID ); - gch->ptszUID = mir_tstrdup( pszUID ); - gch->ptszText = mir_tstrdup( pszText ); - } - } - - gcd->iType = iType; - gch->dwData = dwItem; - gch->pDest = gcd; - PostMessage(hwnd, GC_FIREHOOK, 0, (LPARAM) gch); - return TRUE; -} - -BOOL DoEventHook(const TCHAR* pszID, const char* pszModule, int iType, const TCHAR* pszUID, const TCHAR* pszText, DWORD dwItem) -{ - GCHOOK gch = {0}; - GCDEST gcd = {0}; - - gcd.pszModule = (char*)pszModule; - - { - SESSION_INFO* si; - if (( si = SM_FindSession(pszID, pszModule)) == NULL ) - return FALSE; - - if ( !( si->dwFlags & GC_UNICODE )) { - gcd.pszID = mir_t2a( pszID ); - gch.pszUID = mir_t2a( pszUID ); - gch.pszText = mir_t2a( pszText ); - } - else { - gcd.ptszID = mir_tstrdup( pszID ); - gch.ptszUID = mir_tstrdup( pszUID ); - gch.ptszText = mir_tstrdup( pszText ); - } - } - - gcd.iType = iType; - gch.dwData = dwItem; - gch.pDest = &gcd; - NotifyEventHooks(hSendEvent,0,(WPARAM)&gch); - - mir_free( gcd.pszID ); - mir_free( gch.ptszUID ); - mir_free( gch.ptszText ); - - return TRUE; -} - -BOOL IsEventSupported(int eventType) -{ - switch (eventType) - { - // Supported events - case GC_EVENT_JOIN: - case GC_EVENT_PART: - case GC_EVENT_QUIT: - case GC_EVENT_KICK: - case GC_EVENT_NICK: - case GC_EVENT_NOTICE: - case GC_EVENT_MESSAGE: - case GC_EVENT_TOPIC: - case GC_EVENT_INFORMATION: - case GC_EVENT_ACTION: - case GC_EVENT_ADDSTATUS: - case GC_EVENT_REMOVESTATUS: - case GC_EVENT_CHUID: - case GC_EVENT_CHANGESESSIONAME: - case GC_EVENT_ADDGROUP: - case GC_EVENT_SETITEMDATA: - case GC_EVENT_GETITEMDATA: - case GC_EVENT_SETSBTEXT: - case GC_EVENT_ACK: - case GC_EVENT_SENDMESSAGE: - case GC_EVENT_SETSTATUSEX: - case GC_EVENT_CONTROL: - case GC_EVENT_SETCONTACTSTATUS: - return TRUE; - } - - // Other events - return FALSE; -} - -void ValidateFilename (TCHAR * filename) -{ - TCHAR *p1 = filename; - TCHAR szForbidden[] = _T("\\/:*?\"<>|"); - while(*p1 != '\0') - { - if (_tcschr(szForbidden, *p1)) - *p1 = '_'; - p1 +=1; -} } - -TCHAR* a2tf( const TCHAR* str, int flags ) -{ - if ( str == NULL ) - return NULL; - - if ( flags & GC_UNICODE ) - return mir_tstrdup( str ); - else - return mir_a2u((char*)str); -} - -TCHAR* replaceStr( TCHAR** dest, const TCHAR* src ) -{ - mir_free( *dest ); - *dest = mir_tstrdup( src ); - return *dest; -} - -char* replaceStrA( char** dest, const char* src ) -{ - mir_free( *dest ); - *dest = mir_strdup( src ); - return *dest; -} diff --git a/plugins/Chat/src/version.h b/plugins/Chat/src/version.h deleted file mode 100644 index 0231d7a7ea..0000000000 --- a/plugins/Chat/src/version.h +++ /dev/null @@ -1,3 +0,0 @@ -#define __FILEVERSION_STRING 0,11,0,1 -#define __VERSION_STRING "0.11.0.1" -#define __VERSION_DWORD PLUGIN_MAKE_VERSION(0, 11, 0, 1) diff --git a/plugins/Chat/src/window.cpp b/plugins/Chat/src/window.cpp deleted file mode 100644 index ccddae051b..0000000000 --- a/plugins/Chat/src/window.cpp +++ /dev/null @@ -1,2725 +0,0 @@ -/* -Chat module plugin for Miranda IM - -Copyright 2000-2010 Miranda ICQ/IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "chat.h" - -extern HBRUSH hEditBkgBrush; -extern HBRUSH hListBkgBrush; -extern HBRUSH hListSelectedBkgBrush; -extern HANDLE hSendEvent; -extern HICON hIcons[30]; -extern struct CREOleCallback reOleCallback; -extern HIMAGELIST hImageList; -extern HMENU g_hMenu; -extern BOOL SmileyAddInstalled; -extern TABLIST * g_TabList; -extern HIMAGELIST hIconsList; - -static WNDPROC OldSplitterProc; -static WNDPROC OldMessageProc; -static WNDPROC OldNicklistProc; -static WNDPROC OldTabProc; -static WNDPROC OldFilterButtonProc; -static WNDPROC OldLogProc; -static HKL hkl = NULL; - -typedef struct -{ - time_t lastEnterTime; - TCHAR szTabSave[20]; -} MESSAGESUBDATA; - - -static LRESULT CALLBACK SplitterSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) -{ - switch(msg) { - case WM_NCHITTEST: - return HTCLIENT; - - case WM_SETCURSOR: - { RECT rc; - GetClientRect(hwnd,&rc); - SetCursor(rc.right>rc.bottom?LoadCursor(NULL, IDC_SIZENS):LoadCursor(NULL, IDC_SIZEWE)); - return TRUE; - } - case WM_LBUTTONDOWN: - SetCapture(hwnd); - return 0; - - case WM_MOUSEMOVE: - if (GetCapture()==hwnd) { - RECT rc; - GetClientRect(hwnd,&rc); - SendMessage(GetParent(hwnd),GC_SPLITTERMOVED,rc.right>rc.bottom?(short)HIWORD(GetMessagePos())+rc.bottom/2:(short)LOWORD(GetMessagePos())+rc.right/2,(LPARAM)hwnd); - } - return 0; - - case WM_LBUTTONUP: - ReleaseCapture(); - PostMessage(GetParent(hwnd),WM_SIZE, 0, 0); - return 0; - } - return CallWindowProc(OldSplitterProc,hwnd,msg,wParam,lParam); -} - -static void InitButtons(HWND hwndDlg, SESSION_INFO* si) -{ - MODULEINFO * pInfo = MM_FindModule(si->pszModule); - - SendDlgItemMessage( hwndDlg, IDC_SMILEY, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "smiley", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_BOLD, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "bold", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_ITALICS, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "italics", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_UNDERLINE, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "underline", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_COLOR, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "fgcol", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_BKGCOLOR, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "bkgcol", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_HISTORY, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "history", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_CHANMGR, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "settings", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_CLOSE, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( "close", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_SHOWNICKLIST, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( si->bNicklistEnabled ? "nicklist" : "nicklist2", FALSE )); - SendDlgItemMessage( hwndDlg, IDC_FILTER, BM_SETIMAGE, IMAGE_ICON, (LPARAM)LoadIconEx( si->bFilterEnabled ? "filter" : "filter2", FALSE )); - - SendDlgItemMessage( hwndDlg, IDC_SMILEY, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_BOLD, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_ITALICS, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_UNDERLINE, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_BKGCOLOR, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_COLOR, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_HISTORY, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_SHOWNICKLIST, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_CHANMGR, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_FILTER, BUTTONSETASFLATBTN, TRUE, 0 ); - SendDlgItemMessage( hwndDlg, IDC_CLOSE, BUTTONSETASFLATBTN, TRUE, 0 ); - - SendMessage(GetDlgItem(hwndDlg,IDC_SMILEY), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Insert a smiley"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_BOLD), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Make the text bold (CTRL+B)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_ITALICS), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Make the text italicized (CTRL+I)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_UNDERLINE), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Make the text underlined (CTRL+U)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_BKGCOLOR), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Select a background color for the text (CTRL+L)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_COLOR), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Select a foreground color for the text (CTRL+K)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_HISTORY), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Show the history (CTRL+H)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_SHOWNICKLIST), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Show/hide the nicklist (CTRL+N)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_CHANMGR), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Control this room (CTRL+O)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_FILTER), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Enable/disable the event filter (CTRL+F)"), 0); - SendMessage(GetDlgItem(hwndDlg,IDC_CLOSE), BUTTONADDTOOLTIP, (WPARAM)LPGEN("Close current tab (CTRL+F4)"), 0); - SendDlgItemMessage(hwndDlg, IDC_BOLD, BUTTONSETASPUSHBTN, TRUE, 0); - SendDlgItemMessage(hwndDlg, IDC_ITALICS, BUTTONSETASPUSHBTN, TRUE, 0); - SendDlgItemMessage(hwndDlg, IDC_UNDERLINE, BUTTONSETASPUSHBTN, TRUE, 0); - SendDlgItemMessage(hwndDlg, IDC_COLOR, BUTTONSETASPUSHBTN, TRUE, 0); - SendDlgItemMessage(hwndDlg, IDC_BKGCOLOR, BUTTONSETASPUSHBTN, TRUE, 0); - - if (pInfo) { - EnableWindow(GetDlgItem(hwndDlg, IDC_BOLD), pInfo->bBold); - EnableWindow(GetDlgItem(hwndDlg, IDC_ITALICS), pInfo->bItalics); - EnableWindow(GetDlgItem(hwndDlg, IDC_UNDERLINE), pInfo->bUnderline); - EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR), pInfo->bColor); - EnableWindow(GetDlgItem(hwndDlg, IDC_BKGCOLOR), pInfo->bBkgColor); - if (si->iType == GCW_CHATROOM) - EnableWindow(GetDlgItem(hwndDlg, IDC_CHANMGR), pInfo->bChanMgr); -} } - -static int RoomWndResize(HWND hwndDlg,LPARAM lParam,UTILRESIZECONTROL *urc) -{ - RECT rc, rcTabs; - SESSION_INFO* si = (SESSION_INFO*)lParam; - int TabHeight; - BOOL bControl = (BOOL)DBGetContactSettingByte(NULL, "Chat", "ShowTopButtons", 1); - BOOL bFormat = (BOOL)DBGetContactSettingByte(NULL, "Chat", "ShowFormatButtons", 1); - BOOL bToolbar = bFormat || bControl; - BOOL bSend = (BOOL)DBGetContactSettingByte(NULL, "Chat", "ShowSend", 0); - BOOL bNick = si->iType!=GCW_SERVER && si->bNicklistEnabled; - BOOL bTabs = g_Settings.TabsEnable; - BOOL bTabBottom = g_Settings.TabsAtBottom; - - GetClientRect(GetDlgItem(hwndDlg, IDC_TAB), &rcTabs); - TabHeight = rcTabs.bottom - rcTabs.top; - TabCtrl_AdjustRect(GetDlgItem(hwndDlg, IDC_TAB), FALSE, &rcTabs); - TabHeight -= (rcTabs.bottom - rcTabs.top); - ShowWindow(GetDlgItem(hwndDlg, IDC_SMILEY), SmileyAddInstalled&&bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_BOLD), bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_UNDERLINE), bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_ITALICS), bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_COLOR), bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_BKGCOLOR), bFormat?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_HISTORY), bControl?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_SHOWNICKLIST), bControl?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_FILTER), bControl?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_CHANMGR), bControl?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDOK), bSend?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_SPLITTERX), bNick?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_CLOSE), g_Settings.TabsEnable?SW_SHOW:SW_HIDE); - ShowWindow(GetDlgItem(hwndDlg, IDC_TAB), g_Settings.TabsEnable?SW_SHOW:SW_HIDE); - if (si->iType != GCW_SERVER) - ShowWindow(GetDlgItem(hwndDlg, IDC_LIST), si->bNicklistEnabled?SW_SHOW:SW_HIDE); - else - ShowWindow(GetDlgItem(hwndDlg, IDC_LIST), SW_HIDE); - - if (si->iType == GCW_SERVER) { - EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWNICKLIST), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_CHANMGR), FALSE); - } - else { - EnableWindow(GetDlgItem(hwndDlg, IDC_SHOWNICKLIST), TRUE); - EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER), TRUE); - if (si->iType == GCW_CHATROOM) - EnableWindow(GetDlgItem(hwndDlg, IDC_CHANMGR), MM_FindModule(si->pszModule)->bChanMgr); - } - - switch(urc->wId) { - case IDOK: - GetWindowRect(si->hwndStatus, &rc); - urc->rcItem.left = bSend?315:urc->dlgNewSize.cx ; - urc->rcItem.top = urc->dlgNewSize.cy - si->iSplitterY+23; - urc->rcItem.bottom = urc->dlgNewSize.cy - (rc.bottom-rc.top)-1; - return RD_ANCHORX_RIGHT|RD_ANCHORY_CUSTOM; - - case IDC_TAB: - urc->rcItem.top = 1; - urc->rcItem.left = 0; - urc->rcItem.right = urc->dlgNewSize.cx- 24; - urc->rcItem.bottom = bToolbar?(urc->dlgNewSize.cy - si->iSplitterY):(urc->dlgNewSize.cy - si->iSplitterY+20); - return RD_ANCHORX_CUSTOM|RD_ANCHORY_CUSTOM; - - case IDC_LOG: - urc->rcItem.top = bTabs?(bTabBottom?0:rcTabs.top-1):0; - urc->rcItem.left = 0; - urc->rcItem.right = bNick?urc->dlgNewSize.cx - si->iSplitterX:urc->dlgNewSize.cx; - urc->rcItem.bottom = bToolbar?(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight + 6:urc->dlgNewSize.cy - si->iSplitterY):(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight+26:urc->dlgNewSize.cy - si->iSplitterY+20); - return RD_ANCHORX_CUSTOM|RD_ANCHORY_CUSTOM; - - case IDC_LIST: - urc->rcItem.top = bTabs?(bTabBottom?0:rcTabs.top-1):0; - urc->rcItem.right = urc->dlgNewSize.cx ; - urc->rcItem.left = urc->dlgNewSize.cx - si->iSplitterX + 2; - urc->rcItem.bottom = bToolbar?(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight + 6:urc->dlgNewSize.cy - si->iSplitterY):(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight+26:urc->dlgNewSize.cy - si->iSplitterY+20); - return RD_ANCHORX_CUSTOM|RD_ANCHORY_CUSTOM; - - case IDC_SPLITTERX: - urc->rcItem.right = urc->dlgNewSize.cx - si->iSplitterX+2; - urc->rcItem.left = urc->dlgNewSize.cx - si->iSplitterX; - urc->rcItem.bottom = bToolbar?(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight + 6:urc->dlgNewSize.cy - si->iSplitterY):(bTabs&&bTabBottom?urc->dlgNewSize.cy - si->iSplitterY-TabHeight+26:urc->dlgNewSize.cy - si->iSplitterY+20); - urc->rcItem.top = bTabs ?rcTabs.top:1; - return RD_ANCHORX_CUSTOM|RD_ANCHORY_CUSTOM; - - case IDC_SPLITTERY: - urc->rcItem.top = bToolbar?urc->dlgNewSize.cy - si->iSplitterY:urc->dlgNewSize.cy - si->iSplitterY+20; - urc->rcItem.bottom = bToolbar?(urc->dlgNewSize.cy - si->iSplitterY+2):(urc->dlgNewSize.cy - si->iSplitterY+22); - return RD_ANCHORX_WIDTH|RD_ANCHORY_CUSTOM; - - case IDC_MESSAGE: - GetWindowRect(si->hwndStatus, &rc); - urc->rcItem.right = bSend?urc->dlgNewSize.cx - 64:urc->dlgNewSize.cx ; - urc->rcItem.top = urc->dlgNewSize.cy - si->iSplitterY+22; - urc->rcItem.bottom = urc->dlgNewSize.cy - (rc.bottom-rc.top)-1 ; - return RD_ANCHORX_LEFT|RD_ANCHORY_CUSTOM; - - case IDC_SMILEY: - case IDC_ITALICS: - case IDC_BOLD: - case IDC_UNDERLINE: - case IDC_COLOR: - case IDC_BKGCOLOR: - urc->rcItem.top = urc->dlgNewSize.cy - si->iSplitterY+3; - urc->rcItem.bottom = urc->dlgNewSize.cy - si->iSplitterY+19; - return RD_ANCHORX_LEFT|RD_ANCHORY_CUSTOM; - - case IDC_HISTORY: - case IDC_CHANMGR: - case IDC_SHOWNICKLIST: - case IDC_FILTER: - urc->rcItem.top = urc->dlgNewSize.cy - si->iSplitterY+3; - urc->rcItem.bottom = urc->dlgNewSize.cy - si->iSplitterY+19; - return RD_ANCHORX_RIGHT|RD_ANCHORY_CUSTOM; - - case IDC_CLOSE: - urc->rcItem.right = urc->dlgNewSize.cx-3; - urc->rcItem.left = urc->dlgNewSize.cx - 19; - urc->rcItem.bottom = bTabBottom?(bToolbar?urc->dlgNewSize.cy - si->iSplitterY-2:urc->dlgNewSize.cy - si->iSplitterY-2+20):19; - urc->rcItem.top = bTabBottom?(bToolbar?urc->dlgNewSize.cy - si->iSplitterY-18:urc->dlgNewSize.cy - si->iSplitterY-18+20):3; - return RD_ANCHORX_CUSTOM|RD_ANCHORY_CUSTOM; - } - return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; -} - -static LRESULT CALLBACK MessageSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - MESSAGESUBDATA *dat; - SESSION_INFO* Parentsi; - - Parentsi=(SESSION_INFO*)GetWindowLongPtr(GetParent(hwnd),GWLP_USERDATA); - dat = (MESSAGESUBDATA *) GetWindowLongPtr(hwnd, GWLP_USERDATA); - switch (msg) { - case EM_SUBCLASSED: - dat = (MESSAGESUBDATA *) mir_alloc(sizeof(MESSAGESUBDATA)); - - SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) dat); - dat->szTabSave[0] = '\0'; - dat->lastEnterTime = 0; - return 0; - - case WM_MOUSEWHEEL: - SendMessage(GetDlgItem(GetParent(hwnd), IDC_LOG), WM_MOUSEWHEEL, wParam, lParam); - dat->lastEnterTime = 0; - return TRUE; - - case EM_REPLACESEL: - PostMessage(hwnd, EM_ACTIVATE, 0, 0); - break; - - case EM_ACTIVATE: - SetActiveWindow(GetParent(hwnd)); - break; - - case WM_CHAR: - { - BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; - BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000; - BOOL isAlt = GetKeyState(VK_MENU) & 0x8000; - - if (GetWindowLongPtr(hwnd, GWL_STYLE) & ES_READONLY) - break; - - if (wParam == 9 && isCtrl && !isAlt) // ctrl-i (italics) - return TRUE; - - if (wParam == VK_SPACE && isCtrl && !isAlt) // ctrl-space (paste clean text) - return TRUE; - - if (wParam == '\n' || wParam == '\r') { - if ((isCtrl != 0) ^ (0 != DBGetContactSettingByte(NULL, "Chat", "SendOnEnter", 1))) { - PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); - return 0; - } - if (DBGetContactSettingByte(NULL, "Chat", "SendOnDblEnter", 0)) { - if (dat->lastEnterTime + 2 < time(NULL)) - dat->lastEnterTime = time(NULL); - else { - SendMessage(hwnd, WM_KEYDOWN, VK_BACK, 0); - SendMessage(hwnd, WM_KEYUP, VK_BACK, 0); - PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); - return 0; - } - } - } - else - dat->lastEnterTime = 0; - - if (wParam == 1 && isCtrl && !isAlt) { //ctrl-a - SendMessage(hwnd, EM_SETSEL, 0, -1); - return 0; - } } - break; - - case WM_KEYDOWN: - { - static int start, end; - BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000; - BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000; - BOOL isAlt = GetKeyState(VK_MENU) & 0x8000; - if (wParam == VK_RETURN) { - dat->szTabSave[0] = '\0'; - if ((isCtrl != 0) ^ (0 != DBGetContactSettingByte(NULL, "Chat", "SendOnEnter", 1))) - return 0; - - if (DBGetContactSettingByte(NULL, "Chat", "SendOnDblEnter", 0)) - if (dat->lastEnterTime + 2 >= time(NULL)) - return 0; - - break; - } - - if (wParam == VK_TAB && isShift && !isCtrl) { // SHIFT-TAB (go to nick list) - SetFocus(GetDlgItem(GetParent(hwnd), IDC_LIST)); - return TRUE; - } - - if (wParam == VK_TAB && isCtrl && !isShift) { // CTRL-TAB (switch tab/window) - if (g_Settings.TabsEnable) - SendMessage(GetParent(hwnd), GC_SWITCHNEXTTAB, 0, 0); - else - ShowRoom(SM_GetNextWindow(Parentsi), WINDOW_VISIBLE, TRUE); - return TRUE; - } - - if (wParam == VK_TAB && isCtrl && isShift) { // CTRL_SHIFT-TAB (switch tab/window) - if (g_Settings.TabsEnable) - SendMessage(GetParent(hwnd), GC_SWITCHPREVTAB, 0, 0); - else - ShowRoom(SM_GetPrevWindow(Parentsi), WINDOW_VISIBLE, TRUE); - return TRUE; - } - - if (wParam <= '9' && wParam >= '1' && isCtrl && !isAlt) { // CTRL + 1 -> 9 (switch tab) - if (g_Settings.TabsEnable) - SendMessage(GetParent(hwnd), GC_SWITCHTAB, 0, (LPARAM)((int)wParam - (int)'1')); - } - - if (wParam <= VK_NUMPAD9 && wParam >= VK_NUMPAD1 && isCtrl && !isAlt) // CTRL + 1 -> 9 (switch tab) - if (g_Settings.TabsEnable) - SendMessage(GetParent(hwnd), GC_SWITCHTAB, 0, (LPARAM)((int)wParam - (int)VK_NUMPAD1)); - - if (wParam == VK_TAB && !isCtrl && !isShift) { //tab-autocomplete - TCHAR* pszText = NULL; - int iLen; - GETTEXTLENGTHEX gtl = {0}; - GETTEXTEX gt = {0}; - LRESULT lResult = (LRESULT)SendMessage(hwnd, EM_GETSEL, (WPARAM)NULL, (LPARAM)NULL); - - SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); - start = LOWORD(lResult); - end = HIWORD(lResult); - SendMessage(hwnd, EM_SETSEL, end, end); - gtl.flags = GTL_PRECISE; - gtl.codepage = CP_ACP; - iLen = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, (LPARAM)NULL); - if (iLen >0) { - TCHAR *pszName = NULL; - TCHAR *pszSelName = NULL; - pszText = (TCHAR *)mir_alloc(sizeof(TCHAR)*(iLen+100)); - - gt.cb = iLen+99; - gt.flags = GT_DEFAULT; - gt.codepage = 1200; - - SendMessage(hwnd, EM_GETTEXTEX, (WPARAM)>, (LPARAM)pszText); - while ( start >0 && pszText[start-1] != ' ' && pszText[start-1] != 13 && pszText[start-1] != VK_TAB) - start--; - while (end < iLen && pszText[end] != ' ' && pszText[end] != 13 && pszText[end-1] != VK_TAB) - end ++; - - if ( dat->szTabSave[0] =='\0') - lstrcpyn( dat->szTabSave, pszText+start, end-start+1 ); - - pszSelName = (TCHAR *)mir_alloc( sizeof(TCHAR)*( end-start+1 )); - lstrcpyn( pszSelName, pszText+start, end-start+1); - pszName = UM_FindUserAutoComplete(Parentsi->pUsers, dat->szTabSave, pszSelName); - if (pszName == NULL) { - pszName = dat->szTabSave; - SendMessage(hwnd, EM_SETSEL, start, end); - if (end !=start) - SendMessage(hwnd, EM_REPLACESEL, FALSE, (LPARAM) pszName); - dat->szTabSave[0] = '\0'; - } - else { - SendMessage(hwnd, EM_SETSEL, start, end); - if (end !=start) - SendMessage(hwnd, EM_REPLACESEL, FALSE, (LPARAM) pszName); - } - mir_free(pszText); - mir_free(pszSelName); - } - - SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); - RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE); - return 0; - } - - if (dat->szTabSave[0] != '\0' && wParam != VK_RIGHT && wParam != VK_LEFT - && wParam != VK_SPACE && wParam != VK_RETURN && wParam != VK_BACK - && wParam != VK_DELETE ) { - if (g_Settings.AddColonToAutoComplete && start == 0) - SendMessageA(hwnd, EM_REPLACESEL, FALSE, (LPARAM) ": "); - - dat->szTabSave[0] = '\0'; - } - - if (wParam == VK_F4 && isCtrl && !isAlt) { // ctrl-F4 (close tab) - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_CLOSE, BN_CLICKED), 0); - return TRUE; - } - - if (wParam == 0x49 && isCtrl && !isAlt) { // ctrl-i (italics) - CheckDlgButton(GetParent(hwnd), IDC_ITALICS, IsDlgButtonChecked(GetParent(hwnd), IDC_ITALICS) == BST_UNCHECKED?BST_CHECKED:BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_ITALICS, 0), 0); - return TRUE; - } - - if (wParam == 0x42 && isCtrl && !isAlt) { // ctrl-b (bold) - CheckDlgButton(GetParent(hwnd), IDC_BOLD, IsDlgButtonChecked(GetParent(hwnd), IDC_BOLD) == BST_UNCHECKED?BST_CHECKED:BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_BOLD, 0), 0); - return TRUE; - } - - if (wParam == 0x55 && isCtrl && !isAlt) { // ctrl-u (paste clean text) - CheckDlgButton(GetParent(hwnd), IDC_UNDERLINE, IsDlgButtonChecked(GetParent(hwnd), IDC_UNDERLINE) == BST_UNCHECKED?BST_CHECKED:BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_UNDERLINE, 0), 0); - return TRUE; - } - - if (wParam == 0x4b && isCtrl && !isAlt) { // ctrl-k (paste clean text) - CheckDlgButton(GetParent(hwnd), IDC_COLOR, IsDlgButtonChecked(GetParent(hwnd), IDC_COLOR) == BST_UNCHECKED?BST_CHECKED:BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_COLOR, 0), 0); - return TRUE; - } - - if (wParam == VK_SPACE && isCtrl && !isAlt) { // ctrl-space (paste clean text) - CheckDlgButton(GetParent(hwnd), IDC_BKGCOLOR, BST_UNCHECKED); - CheckDlgButton(GetParent(hwnd), IDC_COLOR, BST_UNCHECKED); - CheckDlgButton(GetParent(hwnd), IDC_BOLD, BST_UNCHECKED); - CheckDlgButton(GetParent(hwnd), IDC_UNDERLINE, BST_UNCHECKED); - CheckDlgButton(GetParent(hwnd), IDC_ITALICS, BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_BKGCOLOR, 0), 0); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_COLOR, 0), 0); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_BOLD, 0), 0); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_UNDERLINE, 0), 0); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_ITALICS, 0), 0); - return TRUE; - } - - if (wParam == 0x4c && isCtrl && !isAlt) { // ctrl-l (paste clean text) - CheckDlgButton(GetParent(hwnd), IDC_BKGCOLOR, IsDlgButtonChecked(GetParent(hwnd), IDC_BKGCOLOR) == BST_UNCHECKED?BST_CHECKED:BST_UNCHECKED); - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_BKGCOLOR, 0), 0); - return TRUE; - } - - if (wParam == 0x46 && isCtrl && !isAlt) { // ctrl-f (paste clean text) - if (IsWindowEnabled(GetDlgItem(GetParent(hwnd), IDC_FILTER))) - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_FILTER, 0), 0); - return TRUE; - } - - if (wParam == 0x4e && isCtrl && !isAlt) { // ctrl-n (nicklist) - if (IsWindowEnabled(GetDlgItem(GetParent(hwnd), IDC_SHOWNICKLIST))) - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_SHOWNICKLIST, 0), 0); - return TRUE; - } - - if (wParam == 0x48 && isCtrl && !isAlt) { // ctrl-h (history) - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_HISTORY, 0), 0); - return TRUE; - } - - if (wParam == 0x4f && isCtrl && !isAlt) { // ctrl-o (options) - if (IsWindowEnabled(GetDlgItem(GetParent(hwnd), IDC_CHANMGR))) - SendMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_CHANMGR, 0), 0); - return TRUE; - } - - if ((wParam == 45 && isShift || wParam == 0x56 && isCtrl )&& !isAlt) { // ctrl-v (paste clean text) - SendMessage(hwnd, EM_PASTESPECIAL, CF_TEXT, 0); - return TRUE; - } - - if (wParam == 0x57 && isCtrl && !isAlt) { // ctrl-w (close window) - PostMessage(GetParent(hwnd), WM_CLOSE, 0, 0); - return TRUE; - } - - if (wParam == VK_NEXT || wParam == VK_PRIOR) { - HWND htemp = GetParent(hwnd); - SendDlgItemMessage(htemp, IDC_LOG, msg, wParam, lParam); - dat->lastEnterTime = 0; - return TRUE; - } - - if (wParam == VK_UP && isCtrl && !isAlt) { - int iLen; - GETTEXTLENGTHEX gtl = {0}; - SETTEXTEX ste; - LOGFONT lf; - char* lpPrevCmd = SM_GetPrevCommand(Parentsi->ptszID, Parentsi->pszModule); - - SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); - - LoadMsgDlgFont(17, &lf, NULL); - ste.flags = ST_DEFAULT; - ste.codepage = CP_ACP; - if (lpPrevCmd) - SendMessage(hwnd, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM)lpPrevCmd); - else - SetWindowText(hwnd, _T("")); - - gtl.flags = GTL_PRECISE; - gtl.codepage = CP_ACP; - iLen = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, (LPARAM)NULL); - SendMessage(hwnd, EM_SCROLLCARET, 0,0); - SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); - RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE); - SendMessage(hwnd, EM_SETSEL,iLen,iLen); - dat->lastEnterTime = 0; - return TRUE; - } - - if (wParam == VK_DOWN && isCtrl && !isAlt) { - int iLen; - GETTEXTLENGTHEX gtl = {0}; - SETTEXTEX ste; - - char* lpPrevCmd = SM_GetNextCommand(Parentsi->ptszID, Parentsi->pszModule); - SendMessage(hwnd, WM_SETREDRAW, FALSE, 0); - - ste.flags = ST_DEFAULT; - ste.codepage = CP_ACP; - if (lpPrevCmd) - SendMessage(hwnd, EM_SETTEXTEX, (WPARAM)&ste, (LPARAM) lpPrevCmd); - else - SetWindowText(hwnd, _T("")); - - gtl.flags = GTL_PRECISE; - gtl.codepage = CP_ACP; - iLen = SendMessage(hwnd, EM_GETTEXTLENGTHEX, (WPARAM)>l, (LPARAM)NULL); - SendMessage(hwnd, EM_SCROLLCARET, 0,0); - SendMessage(hwnd, WM_SETREDRAW, TRUE, 0); - RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE); - SendMessage(hwnd, EM_SETSEL,iLen,iLen); - dat->lastEnterTime = 0; - return TRUE; - } - - if (wParam == VK_RETURN) - break; - } - //fall through - - case WM_LBUTTONDOWN: - case WM_MBUTTONDOWN: - case WM_KILLFOCUS: - dat->lastEnterTime = 0; - break; - - case WM_RBUTTONDOWN: - { - CHARRANGE sel, all = { 0, -1 }; - POINT pt; - UINT uID = 0; - HMENU hSubMenu; - - hSubMenu = GetSubMenu(g_hMenu, 4); - TranslateMenu(hSubMenu); - SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM) & sel); - - EnableMenuItem(hSubMenu, ID_MESSAGE_UNDO, SendMessage(hwnd, EM_CANUNDO, 0,0)?MF_ENABLED:MF_GRAYED); - EnableMenuItem(hSubMenu, ID_MESSAGE_REDO, SendMessage(hwnd, EM_CANREDO, 0,0)?MF_ENABLED:MF_GRAYED); - EnableMenuItem(hSubMenu, ID_MESSAGE_COPY, sel.cpMax!=sel.cpMin?MF_ENABLED:MF_GRAYED); - EnableMenuItem(hSubMenu, ID_MESSAGE_CUT, sel.cpMax!=sel.cpMin?MF_ENABLED:MF_GRAYED); - - dat->lastEnterTime = 0; - - pt.x = (short) LOWORD(lParam); - pt.y = (short) HIWORD(lParam); - ClientToScreen(hwnd, &pt); - - uID = TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwnd, NULL); - switch (uID) { - case 0: - break; - - case ID_MESSAGE_UNDO: - SendMessage(hwnd, EM_UNDO, 0, 0); - break; - - case ID_MESSAGE_REDO: - SendMessage(hwnd, EM_REDO, 0, 0); - break; - - case ID_MESSAGE_COPY: - SendMessage(hwnd, WM_COPY, 0, 0); - break; - - case ID_MESSAGE_CUT: - SendMessage(hwnd, WM_CUT, 0, 0); - break; - - case ID_MESSAGE_PASTE: - SendMessage(hwnd, EM_PASTESPECIAL, CF_TEXT, 0); - break; - - case ID_MESSAGE_SELECTALL: - SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) & all); - break; - - case ID_MESSAGE_CLEAR: - SetWindowText(hwnd, _T( "" )); - break; - } - PostMessage(hwnd, WM_KEYUP, 0, 0 ); - } - break; - - case WM_KEYUP: - case WM_LBUTTONUP: - case WM_RBUTTONUP: - case WM_MBUTTONUP: - { - CHARFORMAT2 cf; - UINT u = 0; - UINT u2 = 0; - COLORREF cr; - - LoadMsgDlgFont(17, NULL, &cr); - - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwMask = CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE|CFM_BACKCOLOR|CFM_COLOR; - SendMessage(hwnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - - if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bColor) { - int index = GetColorIndex(Parentsi->pszModule, cf.crTextColor); - u = IsDlgButtonChecked(GetParent(hwnd), IDC_COLOR); - - if (index >= 0) { - Parentsi->bFGSet = TRUE; - Parentsi->iFG = index; - } - - if (u == BST_UNCHECKED && cf.crTextColor != cr) - CheckDlgButton(GetParent(hwnd), IDC_COLOR, BST_CHECKED); - else if (u == BST_CHECKED && cf.crTextColor == cr) - CheckDlgButton(GetParent(hwnd), IDC_COLOR, BST_UNCHECKED); - } - - if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bBkgColor) { - int index = GetColorIndex(Parentsi->pszModule, cf.crBackColor); - COLORREF crB = (COLORREF)DBGetContactSettingDword(NULL, "Chat", "ColorMessageBG", GetSysColor(COLOR_WINDOW)); - u = IsDlgButtonChecked(GetParent(hwnd), IDC_BKGCOLOR); - - if (index >= 0) { - Parentsi->bBGSet = TRUE; - Parentsi->iBG = index; - } - if (u == BST_UNCHECKED && cf.crBackColor != crB) - CheckDlgButton(GetParent(hwnd), IDC_BKGCOLOR, BST_CHECKED); - else if (u == BST_CHECKED && cf.crBackColor == crB) - CheckDlgButton(GetParent(hwnd), IDC_BKGCOLOR, BST_UNCHECKED); - } - - if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bBold) { - u = IsDlgButtonChecked(GetParent(hwnd), IDC_BOLD); - u2 = cf.dwEffects; - u2 &= CFE_BOLD; - if (u == BST_UNCHECKED && u2) - CheckDlgButton(GetParent(hwnd), IDC_BOLD, BST_CHECKED); - else if (u == BST_CHECKED && u2 == 0) - CheckDlgButton(GetParent(hwnd), IDC_BOLD, BST_UNCHECKED); - } - - if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bItalics) { - u = IsDlgButtonChecked(GetParent(hwnd), IDC_ITALICS); - u2 = cf.dwEffects; - u2 &= CFE_ITALIC; - if (u == BST_UNCHECKED && u2) - CheckDlgButton(GetParent(hwnd), IDC_ITALICS, BST_CHECKED); - else if (u == BST_CHECKED && u2 == 0) - CheckDlgButton(GetParent(hwnd), IDC_ITALICS, BST_UNCHECKED); - } - - if (MM_FindModule(Parentsi->pszModule) && MM_FindModule(Parentsi->pszModule)->bUnderline) { - u = IsDlgButtonChecked(GetParent(hwnd), IDC_UNDERLINE); - u2 = cf.dwEffects; - u2 &= CFE_UNDERLINE; - if (u == BST_UNCHECKED && u2) - CheckDlgButton(GetParent(hwnd), IDC_UNDERLINE, BST_CHECKED); - else if (u == BST_CHECKED && u2 == 0) - CheckDlgButton(GetParent(hwnd), IDC_UNDERLINE, BST_UNCHECKED); - } } - break; - - case EM_UNSUBCLASSED: - mir_free(dat); - return 0; - } - - return CallWindowProc(OldMessageProc, hwnd, msg, wParam, lParam); -} - -static INT_PTR CALLBACK FilterWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - static SESSION_INFO* si = NULL; - switch (uMsg) { - case WM_INITDIALOG: - si = (SESSION_INFO*)lParam; - CheckDlgButton(hwndDlg, IDC_1, si->iLogFilterFlags&GC_EVENT_ACTION); - CheckDlgButton(hwndDlg, IDC_2, si->iLogFilterFlags&GC_EVENT_MESSAGE); - CheckDlgButton(hwndDlg, IDC_3, si->iLogFilterFlags&GC_EVENT_NICK); - CheckDlgButton(hwndDlg, IDC_4, si->iLogFilterFlags&GC_EVENT_JOIN); - CheckDlgButton(hwndDlg, IDC_5, si->iLogFilterFlags&GC_EVENT_PART); - CheckDlgButton(hwndDlg, IDC_6, si->iLogFilterFlags&GC_EVENT_TOPIC); - CheckDlgButton(hwndDlg, IDC_7, si->iLogFilterFlags&GC_EVENT_ADDSTATUS); - CheckDlgButton(hwndDlg, IDC_8, si->iLogFilterFlags&GC_EVENT_INFORMATION); - CheckDlgButton(hwndDlg, IDC_9, si->iLogFilterFlags&GC_EVENT_QUIT); - CheckDlgButton(hwndDlg, IDC_10, si->iLogFilterFlags&GC_EVENT_KICK); - CheckDlgButton(hwndDlg, IDC_11, si->iLogFilterFlags&GC_EVENT_NOTICE); - break; - - case WM_CTLCOLOREDIT: - case WM_CTLCOLORSTATIC: - SetTextColor((HDC)wParam,RGB(60,60,150)); - SetBkColor((HDC)wParam,GetSysColor(COLOR_WINDOW)); - return (INT_PTR)GetSysColorBrush(COLOR_WINDOW); - - case WM_ACTIVATE: - if (LOWORD(wParam) == WA_INACTIVE) { - int iFlags = 0; - - if (IsDlgButtonChecked(hwndDlg, IDC_1) == BST_CHECKED) - iFlags |= GC_EVENT_ACTION; - if (IsDlgButtonChecked(hwndDlg, IDC_2) == BST_CHECKED) - iFlags |= GC_EVENT_MESSAGE; - if (IsDlgButtonChecked(hwndDlg, IDC_3) == BST_CHECKED) - iFlags |= GC_EVENT_NICK; - if (IsDlgButtonChecked(hwndDlg, IDC_4) == BST_CHECKED) - iFlags |= GC_EVENT_JOIN; - if (IsDlgButtonChecked(hwndDlg, IDC_5) == BST_CHECKED) - iFlags |= GC_EVENT_PART; - if (IsDlgButtonChecked(hwndDlg, IDC_6) == BST_CHECKED) - iFlags |= GC_EVENT_TOPIC; - if (IsDlgButtonChecked(hwndDlg, IDC_7) == BST_CHECKED) - iFlags |= GC_EVENT_ADDSTATUS; - if (IsDlgButtonChecked(hwndDlg, IDC_8) == BST_CHECKED) - iFlags |= GC_EVENT_INFORMATION; - if (IsDlgButtonChecked(hwndDlg, IDC_9) == BST_CHECKED) - iFlags |= GC_EVENT_QUIT; - if (IsDlgButtonChecked(hwndDlg, IDC_10) == BST_CHECKED) - iFlags |= GC_EVENT_KICK; - if (IsDlgButtonChecked(hwndDlg, IDC_11) == BST_CHECKED) - iFlags |= GC_EVENT_NOTICE; - - if (iFlags&GC_EVENT_ADDSTATUS) - iFlags |= GC_EVENT_REMOVESTATUS; - - SendMessage(GetParent(hwndDlg), GC_CHANGEFILTERFLAG, 0, (LPARAM)iFlags); - if (si->bFilterEnabled) - SendMessage(GetParent(hwndDlg), GC_REDRAWLOG, 0, 0); - PostMessage(hwndDlg, WM_CLOSE, 0, 0); - } - break; - - case WM_CLOSE: - DestroyWindow(hwndDlg); - break; - } - - return(FALSE); -} - -static LRESULT CALLBACK ButtonSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_RBUTTONUP: - { - HWND hFilter = GetDlgItem(GetParent(hwnd), IDC_FILTER); - HWND hColor = GetDlgItem(GetParent(hwnd), IDC_COLOR); - HWND hBGColor = GetDlgItem(GetParent(hwnd), IDC_BKGCOLOR); - - if (DBGetContactSettingByte(NULL, "Chat", "RightClickFilter", 0) != 0) { - if (hFilter == hwnd) - SendMessage(GetParent(hwnd), GC_SHOWFILTERMENU, 0, 0); - if (hColor == hwnd) - SendMessage(GetParent(hwnd), GC_SHOWCOLORCHOOSER, 0, (LPARAM)IDC_COLOR); - if (hBGColor == hwnd) - SendMessage(GetParent(hwnd), GC_SHOWCOLORCHOOSER, 0, (LPARAM)IDC_BKGCOLOR); - } } - break; - } - - return CallWindowProc(OldFilterButtonProc, hwnd, msg, wParam, lParam); -} - -static LRESULT CALLBACK LogSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_LBUTTONUP: - { - CHARRANGE sel; - - SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM) &sel); - if (sel.cpMin != sel.cpMax) - { - SendMessage(hwnd, WM_COPY, 0, 0); - sel.cpMin = sel.cpMax ; - SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) & sel); - } - SetFocus(GetDlgItem(GetParent(hwnd), IDC_MESSAGE)); - break; - } - case WM_KEYDOWN: - if (wParam == 0x57 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-w (close window) - PostMessage(GetParent(hwnd), WM_CLOSE, 0, 0); - return TRUE; - } - break; - - case WM_ACTIVATE: - if (LOWORD(wParam) == WA_INACTIVE) { - CHARRANGE sel; - SendMessage(hwnd, EM_EXGETSEL, 0, (LPARAM) &sel); - if (sel.cpMin != sel.cpMax) { - sel.cpMin = sel.cpMax ; - SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) & sel); - } } - break; - - case WM_CHAR: - SetFocus(GetDlgItem(GetParent(hwnd), IDC_MESSAGE)); - SendMessage(GetDlgItem(GetParent(hwnd), IDC_MESSAGE), WM_CHAR, wParam, lParam); - break; - } - - return CallWindowProc(OldLogProc, hwnd, msg, wParam, lParam); -} - -static LRESULT CALLBACK TabSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static BOOL bDragging = FALSE; - static int iBeginIndex = 0; - switch (msg) { - case WM_LBUTTONDOWN: - { - TCHITTESTINFO tci = {0}; - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - if (DragDetect(hwnd, tci.pt) && TabCtrl_GetItemCount(hwnd) > 1 ) { - int i; - tci.flags = TCHT_ONITEM; - - ScreenToClient(hwnd, &tci.pt); - i= TabCtrl_HitTest(hwnd, &tci); - if (i != -1) { - TCITEM tc; - SESSION_INFO* s = NULL; - - tc.mask = TCIF_PARAM; - TabCtrl_GetItem(hwnd, i, &tc); - s = (SESSION_INFO* ) tc.lParam; - if (s) - { - BOOL bOnline = DBGetContactSettingWord(s->hContact, s->pszModule, "Status", ID_STATUS_OFFLINE) == ID_STATUS_ONLINE?TRUE:FALSE; - bDragging = TRUE; - iBeginIndex = i; - ImageList_BeginDrag(hIconsList, bOnline?(MM_FindModule(s->pszModule))->OnlineIconIndex:(MM_FindModule(s->pszModule))->OfflineIconIndex, 8, 8); - ImageList_DragEnter(hwnd,tci.pt.x, tci.pt.y); - SetCapture(hwnd); - } - return TRUE; - } } - else PostMessage(GetParent(hwnd), GC_TABCLICKED, 0, 0 ); - } - break; - case WM_CAPTURECHANGED: - bDragging = FALSE; - ImageList_DragLeave(hwnd); - ImageList_EndDrag(); - break; - - case WM_MOUSEMOVE: - if (bDragging) { - TCHITTESTINFO tci = {0}; - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - ScreenToClient(hwnd, &tci.pt); - ImageList_DragMove(tci.pt.x, tci.pt.y); - } - break; - - case WM_LBUTTONUP: - if (bDragging && ReleaseCapture()) { - TCHITTESTINFO tci = {0}; - int i; - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - tci.flags = TCHT_ONITEM; - bDragging = FALSE; - ImageList_DragLeave(hwnd); - ImageList_EndDrag(); - - ScreenToClient(hwnd, &tci.pt); - i= TabCtrl_HitTest(hwnd, &tci); - if (i != -1 && i != iBeginIndex) - SendMessage(GetParent(hwnd), GC_DROPPEDTAB, (WPARAM)i, (LPARAM)iBeginIndex); - } - break; - - case WM_LBUTTONDBLCLK: - { - TCHITTESTINFO tci = {0}; - int i = 0; - - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - tci.flags = TCHT_ONITEM; - - ScreenToClient(hwnd, &tci.pt); - i = TabCtrl_HitTest(hwnd, &tci); - if (i != -1 && g_Settings.TabCloseOnDblClick) - PostMessage(GetParent(hwnd), WM_COMMAND, MAKEWPARAM(IDC_CLOSE, BN_CLICKED), 0); - } - break; - - case WM_MBUTTONUP: - { - TCHITTESTINFO tci = {0}; - int i = 0; - - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - tci.flags = TCHT_ONITEM; - - ScreenToClient(hwnd, &tci.pt); - i = TabCtrl_HitTest(hwnd, &tci); - if (i != -1 ) { - TCITEM tc; - SESSION_INFO* si ; - - tc.mask = TCIF_PARAM; - TabCtrl_GetItem(hwnd, i, &tc); - si = (SESSION_INFO* ) tc.lParam; - if (si) - SendMessage(GetParent(hwnd), GC_REMOVETAB, 1, (LPARAM) si ); - } } - break; - } - - return CallWindowProc(OldTabProc, hwnd, msg, wParam, lParam); -} - -static LRESULT CALLBACK NicklistSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_ERASEBKGND: - { - HDC dc = (HDC)wParam; - SESSION_INFO* parentdat =(SESSION_INFO*)GetWindowLongPtr(GetParent(hwnd),GWLP_USERDATA); - if (dc) { - int height, index, items = 0; - - index = SendMessage(hwnd, LB_GETTOPINDEX, 0, 0); - if (index == LB_ERR || parentdat->nUsersInNicklist <= 0) - return 0; - - items = parentdat->nUsersInNicklist - index; - height = SendMessage(hwnd, LB_GETITEMHEIGHT, 0, 0); - - if (height != LB_ERR) { - RECT rc = {0}; - GetClientRect(hwnd, &rc); - - if (rc.bottom-rc.top > items * height) { - rc.top = items*height; - FillRect(dc, &rc, hListBkgBrush); - } } } } - return 1; - - case WM_KEYDOWN: - if (wParam == 0x57 && GetKeyState(VK_CONTROL) & 0x8000) { // ctrl-w (close window) - PostMessage(GetParent(hwnd), WM_CLOSE, 0, 0); - return TRUE; - } - break; - - case WM_RBUTTONDOWN: - SendMessage(hwnd, WM_LBUTTONDOWN, wParam, lParam); - break; - - case WM_RBUTTONUP: - SendMessage(hwnd, WM_LBUTTONUP, wParam, lParam); - break; - - case WM_MEASUREITEM: - { - MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *) lParam; - if (mis->CtlType == ODT_MENU) - return CallService(MS_CLIST_MENUMEASUREITEM, wParam, lParam); - return FALSE; - } - case WM_DRAWITEM: - { - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *) lParam; - if (dis->CtlType == ODT_MENU) - return CallService(MS_CLIST_MENUDRAWITEM, wParam, lParam); - return FALSE; - } - case WM_CONTEXTMENU: - { - TVHITTESTINFO hti; - int item; - int height; - USERINFO * ui; - SESSION_INFO* parentdat =(SESSION_INFO*)GetWindowLongPtr(GetParent(hwnd),GWLP_USERDATA); - - hti.pt.x = (short) LOWORD(lParam); - hti.pt.y = (short) HIWORD(lParam); - if (hti.pt.x == -1 && hti.pt.y == -1) { - int index = SendMessage(hwnd, LB_GETCURSEL, 0, 0); - int top = SendMessage(hwnd, LB_GETTOPINDEX, 0, 0); - height = SendMessage(hwnd, LB_GETITEMHEIGHT, 0, 0); - hti.pt.x = 4; - hti.pt.y = (index - top)*height + 1; - } - else ScreenToClient(hwnd,&hti.pt); - - item = LOWORD(SendMessage(GetDlgItem(GetParent(hwnd), IDC_LIST), LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y))); - ui = SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, item); - // ui = (USERINFO *)SendMessage(GetDlgItem(GetParent(hwnd), IDC_LIST), LB_GETITEMDATA, item, 0); - if (ui) { - HMENU hMenu = 0; - UINT uID; - USERINFO uinew; - - memcpy(&uinew, ui, sizeof(USERINFO)); - if (hti.pt.x == -1 && hti.pt.y == -1) - hti.pt.y += height - 4; - ClientToScreen(hwnd, &hti.pt); - uID = CreateGCMenu(hwnd, &hMenu, 0, hti.pt, parentdat, uinew.pszUID, NULL); - - switch (uID) { - case 0: - break; - - case ID_MESS: - DoEventHookAsync(GetParent(hwnd), parentdat->ptszID, parentdat->pszModule, GC_USER_PRIVMESS, ui->pszUID, NULL, (LPARAM)NULL); - break; - - default: - DoEventHookAsync(GetParent(hwnd), parentdat->ptszID, parentdat->pszModule, GC_USER_NICKLISTMENU, ui->pszUID, NULL, (LPARAM)uID); - break; - } - DestroyGCMenu(&hMenu, 1); - return TRUE; - } } - break; - - case WM_MOUSEMOVE: - { - SESSION_INFO* parentdat =(SESSION_INFO*)GetWindowLongPtr(GetParent(hwnd),GWLP_USERDATA); - if ( parentdat ) { - POINT p; - GetCursorPos(&p); - SendMessage( parentdat->hwndTooltip,TTM_TRACKPOSITION,0,(LPARAM)MAKELPARAM(p.x + 15,p.y + 15)); -// SendMessage( parentdat->hwndTooltip, TTM_ACTIVATE, TRUE, 0 ); - } } - break; - - } - - return CallWindowProc(OldNicklistProc, hwnd, msg, wParam, lParam); -} - -static int RestoreWindowPosition(HWND hwnd, HANDLE hContact, char * szModule, char * szNamePrefix, UINT showCmd) -{ - WINDOWPLACEMENT wp; - char szSettingName[64]; - int x,y, width, height;; - - wp.length=sizeof(wp); - GetWindowPlacement(hwnd,&wp); - wsprintfA(szSettingName,"%sx",szNamePrefix); - x=DBGetContactSettingDword(hContact,szModule,szSettingName,-1); - wsprintfA(szSettingName,"%sy",szNamePrefix); - y=(int)DBGetContactSettingDword(hContact,szModule,szSettingName,-1); - wsprintfA(szSettingName,"%swidth",szNamePrefix); - width=DBGetContactSettingDword(hContact,szModule,szSettingName,-1); - wsprintfA(szSettingName,"%sheight",szNamePrefix); - height=DBGetContactSettingDword(hContact,szModule,szSettingName,-1); - - if (x==-1) - return 0; - wp.rcNormalPosition.left=x; - wp.rcNormalPosition.top=y; - wp.rcNormalPosition.right=wp.rcNormalPosition.left+width; - wp.rcNormalPosition.bottom=wp.rcNormalPosition.top+height; - wp.showCmd = showCmd; - SetWindowPlacement(hwnd,&wp); - return 1; -} - -int GetTextPixelSize( TCHAR* pszText, HFONT hFont, BOOL bWidth) -{ - HDC hdc; - HFONT hOldFont; - RECT rc = {0}; - int i; - - if (!pszText || !hFont) - return 0; - - hdc = GetDC(NULL); - hOldFont = (HFONT)SelectObject(hdc, hFont); - i = DrawText(hdc, pszText , -1, &rc, DT_CALCRECT); - SelectObject(hdc, hOldFont); - ReleaseDC(NULL,hdc); - return bWidth ? rc.right - rc.left : rc.bottom - rc.top; -} - -static void __cdecl phase2(void * lParam) -{ - SESSION_INFO* si = (SESSION_INFO*) lParam; - Sleep(30); - if (si && si->hWnd) - PostMessage(si->hWnd, GC_REDRAWLOG3, 0, 0); -} - -INT_PTR CALLBACK RoomWndProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) -{ - SESSION_INFO* si; - - si = (SESSION_INFO*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - switch (uMsg) { - case WM_INITDIALOG: - { - int mask; - HWND hNickList = GetDlgItem(hwndDlg,IDC_LIST); - si = (SESSION_INFO*)lParam; - si->pAccPropServicesForNickList = NULL; - CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, IID_IAccPropServices, (LPVOID *)si->pAccPropServicesForNickList); - TranslateDialogDefault(hwndDlg); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)si); - OldSplitterProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERX),GWLP_WNDPROC,(LONG_PTR)SplitterSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERY),GWLP_WNDPROC,(LONG_PTR)SplitterSubclassProc); - OldNicklistProc=(WNDPROC)SetWindowLongPtr(hNickList,GWLP_WNDPROC,(LONG_PTR)NicklistSubclassProc); - OldTabProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_TAB),GWLP_WNDPROC,(LONG_PTR)TabSubclassProc); - OldLogProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LOG),GWLP_WNDPROC,(LONG_PTR)LogSubclassProc); - OldFilterButtonProc=(WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_FILTER),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_COLOR),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_BKGCOLOR),GWLP_WNDPROC,(LONG_PTR)ButtonSubclassProc); - OldMessageProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MESSAGE), GWLP_WNDPROC,(LONG_PTR)MessageSubclassProc); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SUBCLASSED, 0, 0); - SendDlgItemMessage(hwndDlg, IDC_LOG, EM_AUTOURLDETECT, 1, 0); - mask = (int)SendDlgItemMessage(hwndDlg, IDC_LOG, EM_GETEVENTMASK, 0, 0); - SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETEVENTMASK, 0, mask | ENM_LINK | ENM_MOUSEEVENTS); - SendDlgItemMessage(hwndDlg, IDC_LOG, EM_LIMITTEXT, (WPARAM)sizeof(TCHAR)*0x7FFFFFFF, 0); - SendDlgItemMessage(hwndDlg, IDC_LOG, EM_SETOLECALLBACK, 0, (LPARAM) & reOleCallback); - - // RichUtil_SubClass(GetDlgItem(hwndDlg, IDC_MESSAGE)); - // RichUtil_SubClass(GetDlgItem(hwndDlg, IDC_LOG)); - - si->hwndStatus = CreateWindowEx(0, STATUSCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP| SBT_TOOLTIPS , 0, 0, 0, 0, hwndDlg, NULL, g_hInst, NULL); - SendMessage(si->hwndStatus,SB_SETMINHEIGHT,GetSystemMetrics(SM_CYSMICON),0); - TabCtrl_SetMinTabWidth(GetDlgItem(hwndDlg, IDC_TAB), 80); - TabCtrl_SetImageList(GetDlgItem(hwndDlg, IDC_TAB), hIconsList); - - // enable tooltips - si->iOldItemID = -1; - si->hwndTooltip = CreateWindow(TOOLTIPS_CLASS,NULL,TTS_ALWAYSTIP,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hNickList,(HMENU)NULL,g_hInst,NULL); - SetWindowPos(si->hwndTooltip, HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - { - TOOLINFO ti = {0}; - ti.cbSize = sizeof(TOOLINFO); - ti.uFlags = TTF_IDISHWND | TTF_SUBCLASS | TTF_TRANSPARENT; - ti.hwnd = hwndDlg; - ti.hinst = g_hInst; - ti.uId = (UINT_PTR)hNickList; - ti.lpszText = LPSTR_TEXTCALLBACK; - //GetClientRect( hNickList, &ti.rect ); - SendMessage( si->hwndTooltip, TTM_ADDTOOL, 0, ( LPARAM )&ti ); - SendMessage( si->hwndTooltip, TTM_SETDELAYTIME, TTDT_AUTOPOP, 20000 ); - SendMessage( si->hwndTooltip, TTM_SETMAXTIPWIDTH, 0, 300); - - //SendMessage( psi->hwndTooltip, TTM_TRACKACTIVATE, TRUE, ( LPARAM )&ti ); - } - - // restore previous tabs - if (g_Settings.TabsEnable && DBGetContactSettingByte(NULL, "Chat", "TabRestore", 0)) { - TABLIST * node = g_TabList; - while (node) { - SESSION_INFO* s = SM_FindSession(node->pszID, node->pszModule); - if (s) - SendMessage(hwndDlg, GC_ADDTAB, -1, (LPARAM)s); - - node = node->next; - } } - - TabM_RemoveAll(); - - EnableWindow(GetDlgItem(hwndDlg, IDC_SMILEY), TRUE); - - SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_HIDESELECTION, TRUE, 0); - - SendMessage(hwndDlg, GC_SETWNDPROPS, 0, 0); - SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0); - SendMessage(hwndDlg, GC_UPDATETITLE, 0, 0); - SendMessage(hwndDlg, GC_SETWINDOWPOS, 0, 0); - } - break; - - case GC_SETWNDPROPS: - { - HICON hIcon; - LoadGlobalSettings(); - InitButtons(hwndDlg, si); - - hIcon = si->wStatus==ID_STATUS_ONLINE?MM_FindModule(si->pszModule)->hOnlineIcon:MM_FindModule(si->pszModule)->hOfflineIcon; - // stupid hack to make icons show. I dunno why this is needed currently - if (!hIcon) { - MM_IconsChanged(); - hIcon = si->wStatus==ID_STATUS_ONLINE?MM_FindModule(si->pszModule)->hOnlineIcon:MM_FindModule(si->pszModule)->hOfflineIcon; - } - - SendMessage(hwndDlg, GC_FIXTABICONS, 0, 0); - SendMessage(si->hwndStatus, SB_SETICON, 0,(LPARAM)hIcon); - SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIconEx( "window", TRUE )); - SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)LoadIconEx( "window", FALSE )); - - SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_SETBKGNDCOLOR , 0, g_Settings.crLogBackground); - - if (g_Settings.TabsEnable) { - int mask = (int)GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TAB), GWL_STYLE); - if (g_Settings.TabsAtBottom) - mask |= TCS_BOTTOM; - else - mask &= ~TCS_BOTTOM; - SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_TAB), GWL_STYLE, (LONG_PTR)mask); - } - - { //messagebox - COLORREF crFore; - - CHARFORMAT2 cf; - LoadMsgDlgFont(17, NULL, &crFore); - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwMask = CFM_COLOR|CFM_BOLD|CFM_UNDERLINE|CFM_BACKCOLOR; - cf.dwEffects = 0; - cf.crTextColor = crFore; - cf.crBackColor = (COLORREF)DBGetContactSettingDword(NULL, "Chat", "ColorMessageBG", GetSysColor(COLOR_WINDOW)); - SendMessage(GetDlgItem(hwndDlg, IDC_MESSAGE), EM_SETBKGNDCOLOR , 0, DBGetContactSettingDword(NULL, "Chat", "ColorMessageBG", GetSysColor(COLOR_WINDOW))); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, WM_SETFONT, (WPARAM) g_Settings.MessageBoxFont, MAKELPARAM(TRUE, 0)); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, (WPARAM)SCF_ALL , (LPARAM)&cf); - } - { // nicklist - int ih; - int ih2; - int font; - int height; - - ih = GetTextPixelSize( _T("AQGglo"), g_Settings.UserListFont,FALSE); - ih2 = GetTextPixelSize( _T("AQGglo"), g_Settings.UserListHeadingsFont,FALSE); - height = DBGetContactSettingByte(NULL, "Chat", "NicklistRowDist", 12); - font = ih > ih2?ih:ih2; - - // make sure we have space for icon! - if (g_Settings.ShowContactStatus) - font = font > 16 ? font : 16; - - SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_SETITEMHEIGHT, 0, (LPARAM)height > font ? height : font); - InvalidateRect(GetDlgItem(hwndDlg, IDC_LIST), NULL, TRUE); - } - SendMessage(hwndDlg, WM_SIZE, 0, 0); - SendMessage(hwndDlg, GC_REDRAWLOG2, 0, 0); - } - break; - - case GC_UPDATETITLE: - { - TCHAR szTemp [100]; - switch(si->iType) { - case GCW_CHATROOM: - mir_sntprintf(szTemp, SIZEOF(szTemp), - (si->nUsersInNicklist ==1) ? TranslateT("%s: Chat Room (%u user)") : TranslateT("%s: Chat Room (%u users)"), - si->ptszName, si->nUsersInNicklist); - break; - case GCW_PRIVMESS: - mir_sntprintf(szTemp, SIZEOF(szTemp), - (si->nUsersInNicklist ==1) ? TranslateT("%s: Message Session") : TranslateT("%s: Message Session (%u users)"), - si->ptszName, si->nUsersInNicklist); - break; - case GCW_SERVER: - mir_sntprintf(szTemp, SIZEOF(szTemp), _T("%s: Server"), si->ptszName); - break; - } - SetWindowText(hwndDlg, szTemp); - } - break; - - case GC_UPDATESTATUSBAR: - { - HICON hIcon; - int iStatusbarParts[2]; - TCHAR* ptszDispName = MM_FindModule(si->pszModule)->ptszModDispName; - int x = 12; - - x += GetTextPixelSize(ptszDispName, (HFONT)SendMessage(si->hwndStatus,WM_GETFONT,0,0), TRUE); - x += GetSystemMetrics(SM_CXSMICON); - iStatusbarParts[0] = x; iStatusbarParts[1] = -1; - SendMessage(si->hwndStatus,SB_SETPARTS,2 ,(LPARAM)&iStatusbarParts); - - hIcon = si->wStatus==ID_STATUS_ONLINE?MM_FindModule(si->pszModule)->hOnlineIcon:MM_FindModule(si->pszModule)->hOfflineIcon; - - // stupid hack to make icons show. I dunno why this is needed currently - if (!hIcon) { - MM_IconsChanged(); - hIcon = si->wStatus==ID_STATUS_ONLINE?MM_FindModule(si->pszModule)->hOnlineIcon:MM_FindModule(si->pszModule)->hOfflineIcon; - } - - SendMessage(si->hwndStatus, SB_SETICON, 0,(LPARAM)hIcon); - SendMessage(hwndDlg, GC_FIXTABICONS, 0, 0); - - SendMessage(si->hwndStatus, SB_SETTEXT,0,(LPARAM)ptszDispName); - - SendMessage(si->hwndStatus, SB_SETTEXT,1,(LPARAM)(si->ptszStatusbarText ? si->ptszStatusbarText : _T(""))); - SendMessage(si->hwndStatus, SB_SETTIPTEXT,1,(LPARAM)(si->ptszStatusbarText ? si->ptszStatusbarText : _T(""))); - return TRUE; - } - break; - - case GC_SETWINDOWPOS: - { - SESSION_INFO* pActive = GetActiveSession(); - WINDOWPLACEMENT wp; - RECT screen; - int savePerContact = DBGetContactSettingByte(NULL, "Chat", "SavePosition", 0); - - wp.length=sizeof(wp); - GetWindowPlacement(hwndDlg,&wp); - SystemParametersInfo(SPI_GETWORKAREA, 0, &screen, 0); - - if (si->iX) { - wp.rcNormalPosition.left = si->iX; - wp.rcNormalPosition.top = si->iY; - wp.rcNormalPosition.right = wp.rcNormalPosition.left + si->iWidth; - wp.rcNormalPosition.bottom = wp.rcNormalPosition.top + si->iHeight; - wp.showCmd = SW_HIDE; - SetWindowPlacement(hwndDlg,&wp); - // SetWindowPos(hwndDlg, 0, si->iX,si->iY, si->iWidth, si->iHeight, SWP_NOZORDER |SWP_HIDEWINDOW|SWP_NOACTIVATE); - break; - } - if (savePerContact) { - if (RestoreWindowPosition(hwndDlg, g_Settings.TabsEnable?NULL:si->hContact, "Chat", "room", SW_HIDE)) - break; - SetWindowPos(hwndDlg, 0, (screen.right-screen.left)/2- (550)/2,(screen.bottom-screen.top)/2- (400)/2, (550), (400), SWP_NOZORDER |SWP_HIDEWINDOW|SWP_NOACTIVATE); - } - else SetWindowPos(hwndDlg, 0, (screen.right-screen.left)/2- (550)/2,(screen.bottom-screen.top)/2- (400)/2, (550), (400), SWP_NOZORDER |SWP_HIDEWINDOW|SWP_NOACTIVATE); - - if (!g_Settings.TabsEnable && pActive && pActive->hWnd && DBGetContactSettingByte(NULL, "Chat", "CascadeWindows", 1)) { - RECT rcThis, rcNew; - int dwFlag = SWP_NOZORDER|SWP_NOACTIVATE; - if (!IsWindowVisible ((HWND)wParam)) - dwFlag |= SWP_HIDEWINDOW; - - GetWindowRect(hwndDlg, &rcThis); - GetWindowRect(pActive->hWnd, &rcNew); - - { - int offset = GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME); - SetWindowPos((HWND) hwndDlg, 0, rcNew.left + offset, rcNew.top + offset, rcNew.right-rcNew.left, rcNew.bottom-rcNew.top, dwFlag); - } } } - break; - - case GC_SAVEWNDPOS: - { - WINDOWPLACEMENT wp = { 0 }; - - wp.length = sizeof(wp); - GetWindowPlacement(hwndDlg, &wp); - g_Settings.iX = wp.rcNormalPosition.left; - g_Settings.iY = wp.rcNormalPosition.top; - g_Settings.iWidth = wp.rcNormalPosition.right - wp.rcNormalPosition.left; - g_Settings.iHeight = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top; - - if (!lParam) { - si->iX = g_Settings.iX; - si->iY = g_Settings.iY; - si->iWidth = g_Settings.iWidth; - si->iHeight = g_Settings.iHeight; - } } - break; - - case WM_SIZE: - { - UTILRESIZEDIALOG urd; - - if (wParam == SIZE_MAXIMIZED) - PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0); - - if (IsIconic(hwndDlg)) break; - SendMessage(si->hwndStatus, WM_SIZE, 0, 0); - ZeroMemory(&urd,sizeof(urd)); - urd.cbSize=sizeof(urd); - urd.hInstance=g_hInst; - urd.hwndDlg=hwndDlg; - urd.lParam=(LPARAM)si; - urd.lpTemplate=MAKEINTRESOURCEA(IDD_CHANNEL); - urd.pfnResizer=RoomWndResize; - CallService(MS_UTILS_RESIZEDIALOG,0,(LPARAM)&urd); - - InvalidateRect(si->hwndStatus, NULL, TRUE); - RedrawWindow(GetDlgItem(hwndDlg,IDC_MESSAGE), NULL, NULL, RDW_INVALIDATE); - RedrawWindow(GetDlgItem(hwndDlg,IDOK), NULL, NULL, RDW_INVALIDATE); - SendMessage(hwndDlg,GC_SAVEWNDPOS,0,1); - } - break; - - case GC_REDRAWWINDOW: - InvalidateRect(hwndDlg, NULL, TRUE); - break; - - case GC_REDRAWLOG: - si->LastTime = 0; - if (si->pLog) { - LOGINFO * pLog = si->pLog; - if (si->iEventCount > 60) { - int index = 0; - while ( index < 59) { - if (pLog->next == NULL) - break; - - pLog = pLog->next; - if (si->iType != GCW_CHATROOM || !si->bFilterEnabled || (si->iLogFilterFlags&pLog->iType) != 0) - index++; - } - Log_StreamInEvent(hwndDlg, pLog, si, TRUE, FALSE); - mir_forkthread(phase2, si); - } - else Log_StreamInEvent(hwndDlg, si->pLogEnd, si, TRUE, FALSE); - } - else SendMessage(hwndDlg, GC_EVENT_CONTROL + WM_USER+500, WINDOW_CLEARLOG, 0); - break; - - case GC_REDRAWLOG2: - si->LastTime = 0; - if (si->pLog) - Log_StreamInEvent(hwndDlg, si->pLogEnd, si, TRUE, FALSE); - break; - - case GC_REDRAWLOG3: - si->LastTime = 0; - if (si->pLog) - Log_StreamInEvent(hwndDlg, si->pLogEnd, si, TRUE, TRUE); - break; - - case GC_ADDLOG: - if (si->pLogEnd) - Log_StreamInEvent(hwndDlg, si->pLog, si, FALSE, FALSE); - else - SendMessage(hwndDlg, GC_EVENT_CONTROL + WM_USER+500, WINDOW_CLEARLOG, 0); - break; - - case GC_SWITCHNEXTTAB: - { - int total = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - int i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - if (i != -1 && total != -1 && total != 1) { - if (i < total -1) - i++; - else - i=0; - TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), i); - PostMessage(hwndDlg, GC_TABCLICKED, 0, 0 ); - } } - break; - - case GC_SWITCHPREVTAB: - { - int total = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - int i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - if (i != -1 && total != -1 && total != 1) { - if (i > 0) - i--; - else - i=total-1; - TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), i); - PostMessage(hwndDlg, GC_TABCLICKED, 0, 0 ); - } } - break; - - case GC_SWITCHTAB: - { - int total = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - int i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - if (i != -1 && total != -1 && total != 1 && i != lParam && total > lParam) { - TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), lParam); - PostMessage(hwndDlg, GC_TABCLICKED, 0, 0 ); - } } - break; - - case GC_REMOVETAB: - { - SESSION_INFO* s2; - int i = -1; - int tabId = 0; - SESSION_INFO* s1 = (SESSION_INFO*) lParam; - - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - - if (s1) { - if (tabId) { - for (i = 0; i < tabId; i++) { - int ii; - TCITEM tci = {0}; - tci.mask = TCIF_PARAM ; - ii = TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - if (ii != -1) { - s2 = (SESSION_INFO*)tci.lParam; - if (s1 == s2) - goto END_REMOVETAB; - } } } - } - else i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - -END_REMOVETAB: - if (i != -1 && i < tabId) { - TCITEM id = {0}; - SESSION_INFO* s; - TabCtrl_DeleteItem(GetDlgItem(hwndDlg, IDC_TAB), i); - id.mask = TCIF_PARAM; - if (!TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &id)) { - if (!TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i-1, &id)) { - SendMessage(hwndDlg, WM_CLOSE, 0, 0); - break; - } } - - s = (SESSION_INFO*)id.lParam; - if (s) - ShowRoom(s, (WPARAM)WINDOW_VISIBLE, wParam == 1?FALSE:TRUE); - } } - break; - - case GC_ADDTAB: - { - TCITEM tci; - int tabId; - WORD w = 0; - int i = 0; - int indexfound = -1; - int lastlocked = -1; - BOOL bFound = FALSE; - SESSION_INFO* s2; - SESSION_INFO* s1 = (SESSION_INFO*) lParam; - - tci.mask = TCIF_PARAM ; - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - - // does the tab already exist? - for (i = 0; i < tabId; i++) { - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - s2 = (SESSION_INFO*)tci.lParam; - if (s2) { - if (s1 == s2 && !bFound) { - if (!bFound) { - bFound = TRUE; - indexfound = i; - } } - - w = DBGetContactSettingWord(s2->hContact, s2->pszModule, "TabPosition", 0); - if (w) - lastlocked = (int)w; - } } - - w = 0; - - if (!bFound) { // create a new tab - int insertat; - TCHAR szTemp [30]; - - lstrcpyn(szTemp, s1->ptszName, 21); - if (lstrlen(s1->ptszName) >20) - lstrcpyn(szTemp+20, _T("..."), 4); - - tci.mask = TCIF_TEXT|TCIF_PARAM ; - tci.pszText = szTemp; - tci.lParam = lParam; - - // determine insert position - w = DBGetContactSettingWord(s1->hContact, s1->pszModule, "TabPosition", 0); - if (wParam == -1) - insertat = w == 0?tabId:(int)w-1; - else - insertat = (int)wParam; - - w = TabCtrl_InsertItem( GetDlgItem(hwndDlg, IDC_TAB), insertat, &tci ); - SendMessage(hwndDlg, GC_FIXTABICONS, 0, (LPARAM)s1); - } - - if (wParam == -1) { - if (bFound) - TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), indexfound); - else - TabCtrl_SetCurSel(GetDlgItem(hwndDlg, IDC_TAB), w); - } } - break; - - case GC_FIXTABICONS: - { - SESSION_INFO* s = (SESSION_INFO*) lParam; - SESSION_INFO* s2; - int i; - if (s) { - TCITEM tci; - int tabId; - - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - for (i = 0; i < tabId; i++) { - tci.mask = TCIF_PARAM|TCIF_IMAGE ; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - s2 = (SESSION_INFO*)tci.lParam; - if (s2 && s == s2) { - int image = 0; - if (!(s2->wState&GC_EVENT_HIGHLIGHT)) { - image = s2->wStatus==ID_STATUS_ONLINE?MM_FindModule(s2->pszModule)->OnlineIconIndex:MM_FindModule(s2->pszModule)->OfflineIconIndex; - if (s2->wState&STATE_TALK) - image++; - } - - if (tci.iImage != image) { - tci.mask = TCIF_IMAGE ; - tci.iImage = image; - TabCtrl_SetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - } } } - } - else RedrawWindow(GetDlgItem(hwndDlg, IDC_TAB), NULL, NULL, RDW_INVALIDATE); - } - break; - - case GC_SETMESSAGEHIGHLIGHT: - { - SESSION_INFO* s = (SESSION_INFO*) lParam; - SESSION_INFO* s2; - int i; - if (s) { - TCITEM tci; - int tabId; - - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - for (i = 0; i < tabId; i++) { - tci.mask = TCIF_PARAM ; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - s2 = (SESSION_INFO*)tci.lParam; - if (s2 && s == s2) { // highlight - s2->wState |= GC_EVENT_HIGHLIGHT; - if (SM_FindSession(si->ptszID, si->pszModule) == s2) - si->wState = s2->wState; - SendMessage(hwndDlg, GC_FIXTABICONS, 0, (LPARAM)s2); - if (DBGetContactSettingByte(NULL, "Chat", "FlashWindowHighlight", 0) != 0 && GetActiveWindow() != hwndDlg && GetForegroundWindow() != hwndDlg) - SetTimer(hwndDlg, TIMERID_FLASHWND, 900, NULL); - break; - } } - } - else RedrawWindow(GetDlgItem(hwndDlg, IDC_TAB), NULL, NULL, RDW_INVALIDATE); - } - break; - - case GC_SETTABHIGHLIGHT: - { - SESSION_INFO* s = (SESSION_INFO*) lParam; - SESSION_INFO* s2; - int i; - if (s) { - TCITEM tci; - int tabId; - - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - for (i = 0; i < tabId; i++) { - tci.mask = TCIF_PARAM ; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - s2 = (SESSION_INFO*)tci.lParam; - if (s2 && s == s2) { // highlight - SendMessage(hwndDlg, GC_FIXTABICONS, 0, (LPARAM)s2); - if (g_Settings.FlashWindow && GetActiveWindow() != hwndDlg && GetForegroundWindow() != hwndDlg) - SetTimer(hwndDlg, TIMERID_FLASHWND, 900, NULL); - break; - } } - } - else RedrawWindow(GetDlgItem(hwndDlg, IDC_TAB), NULL, NULL, RDW_INVALIDATE); - } - break; - - case GC_TABCHANGE: - SetWindowLongPtr(hwndDlg,GWLP_USERDATA,(LONG_PTR)lParam); - PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0); - break; - - case GC_TABCLICKED: - { - int i; - i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - if (i != -1) { - SESSION_INFO* s; - TCITEM id = {0}; - - id.mask = TCIF_PARAM; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &id); - s = (SESSION_INFO*)id.lParam; - if (s) { - if (s->wState&STATE_TALK) { - s->wState &= ~STATE_TALK; - DBWriteContactSettingWord(s->hContact, s->pszModule ,"ApparentMode",(LPARAM) 0); - } - - if (s->wState&GC_EVENT_HIGHLIGHT) { - s->wState &= ~GC_EVENT_HIGHLIGHT; - - if (CallService(MS_CLIST_GETEVENT, (WPARAM)s->hContact, (LPARAM)0)) - CallService(MS_CLIST_REMOVEEVENT, (WPARAM)s->hContact, (LPARAM)"chaticon"); - } - - SendMessage(hwndDlg, GC_FIXTABICONS, 0, (LPARAM)s); - if (!s->hWnd) { - ShowRoom(s, (WPARAM)WINDOW_VISIBLE, TRUE); - SendMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - } } } } - break; - - case GC_DROPPEDTAB: - { - TCITEM tci; - SESSION_INFO* s; - int begin = (int)lParam; - int end = (int) wParam; - int i, tabId; - if (begin == end) - break; - - tci.mask = TCIF_PARAM ; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB),begin, &tci); - s = (SESSION_INFO*)tci.lParam; - if (s) { - TabCtrl_DeleteItem(GetDlgItem(hwndDlg, IDC_TAB), begin); - - SendMessage(hwndDlg, GC_ADDTAB, end, (LPARAM)s); - - // fix the "fixed" positions - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - for (i = 0; i< tabId ; i++) { - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB),i, &tci); - s = (SESSION_INFO*)tci.lParam; - if (s && s->hContact && DBGetContactSettingWord(s->hContact, s->pszModule, "TabPosition", 0) != 0) - DBWriteContactSettingWord(s->hContact, s->pszModule, "TabPosition", (WORD)(i + 1)); - } } } - break; - - case GC_SESSIONNAMECHANGE: - { - TCITEM tci; - int i; - int tabId; - SESSION_INFO* s2; - SESSION_INFO* s1 = (SESSION_INFO* ) lParam; - - tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)); - for (i = 0; i < tabId; i++) { - int j; - tci.mask = TCIF_PARAM ; - j = TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - if (j != -1) { - s2 = (SESSION_INFO*)tci.lParam; - if (s1 == s2) { - tci.mask = TCIF_TEXT ; - tci.pszText = s1->ptszName; - TabCtrl_SetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - } } } } - break; - - case GC_ACKMESSAGE: - SendDlgItemMessage(hwndDlg,IDC_MESSAGE,EM_SETREADONLY,FALSE,0); - SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_SETTEXT,0, (LPARAM)""); - return TRUE; - - case WM_CTLCOLORLISTBOX: - SetBkColor((HDC) wParam, g_Settings.crUserListBGColor); - return (INT_PTR) hListBkgBrush; - - case WM_MEASUREITEM: - { - MEASUREITEMSTRUCT *mis = (MEASUREITEMSTRUCT *) lParam; - if (mis->CtlType == ODT_MENU) - { - return CallService(MS_CLIST_MENUMEASUREITEM, wParam, lParam); - } else - { - int ih = GetTextPixelSize( _T("AQGgl'"), g_Settings.UserListFont,FALSE); - int ih2 = GetTextPixelSize( _T("AQGg'"), g_Settings.UserListHeadingsFont,FALSE); - int font = ih > ih2?ih:ih2; - int height = DBGetContactSettingByte(NULL, "Chat", "NicklistRowDist", 12); - - // make sure we have space for icon! - if (g_Settings.ShowContactStatus) - font = font > 16 ? font : 16; - - mis->itemHeight = height > font?height:font; - } - return TRUE; - } - - case WM_DRAWITEM: - { - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *) lParam; - if (dis->CtlType == ODT_MENU) - { - return CallService(MS_CLIST_MENUDRAWITEM, wParam, lParam); - } else - if (dis->CtlID == IDC_LIST) { - HFONT hFont, hOldFont; - HICON hIcon; - int offset; - int height; - int index = dis->itemID; - USERINFO * ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, index); - if (ui) { - int x_offset = 2; - - height = dis->rcItem.bottom - dis->rcItem.top; - - if (height&1) - height++; - if (height == 10) - offset = 0; - else - offset = height/2 - 4; - hIcon = SM_GetStatusIcon(si, ui); - hFont = (ui->iStatusEx == 0) ? g_Settings.UserListFont : g_Settings.UserListHeadingsFont; - hOldFont = (HFONT) SelectObject(dis->hDC, hFont); - SetBkMode(dis->hDC, TRANSPARENT); - - if (dis->itemAction == ODA_FOCUS && dis->itemState & ODS_SELECTED) - FillRect(dis->hDC, &dis->rcItem, hListSelectedBkgBrush); - else //if (dis->itemState & ODS_INACTIVE) - FillRect(dis->hDC, &dis->rcItem, hListBkgBrush); - - if (g_Settings.ShowContactStatus && g_Settings.ContactStatusFirst && ui->ContactStatus) { - HICON hIcon = LoadSkinnedProtoIcon(si->pszModule, ui->ContactStatus); - DrawIconEx(dis->hDC, x_offset, dis->rcItem.top+offset-3,hIcon,16,16,0,NULL, DI_NORMAL); - x_offset += 18; - } - DrawIconEx(dis->hDC,x_offset, dis->rcItem.top + offset,hIcon,10,10,0,NULL, DI_NORMAL); - x_offset += 12; - if (g_Settings.ShowContactStatus && !g_Settings.ContactStatusFirst && ui->ContactStatus) { - HICON hIcon = LoadSkinnedProtoIcon(si->pszModule, ui->ContactStatus); - DrawIconEx(dis->hDC, x_offset, dis->rcItem.top+offset-3,hIcon,16,16,0,NULL, DI_NORMAL); - x_offset += 18; - } - - SetTextColor(dis->hDC, ui->iStatusEx == 0?g_Settings.crUserListColor:g_Settings.crUserListHeadingsColor); - TextOut(dis->hDC, dis->rcItem.left+x_offset, dis->rcItem.top, ui->pszNick, lstrlen(ui->pszNick)); - SelectObject(dis->hDC, hOldFont); - - if (si->pAccPropServicesForNickList) - { - wchar_t *nick = mir_t2u(ui->pszNick); - si->pAccPropServicesForNickList->SetHwndPropStr(GetDlgItem(hwndDlg,IDC_LIST), OBJID_CLIENT, dis->itemID+1, PROPID_ACC_NAME, nick); - mir_free(nick); - } - } - return TRUE; - } } - - case GC_UPDATENICKLIST: - { - int i = SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_GETTOPINDEX, 0, 0); - SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_SETCOUNT, si->nUsersInNicklist, 0); - SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_SETTOPINDEX, i, 0); - SendMessage(hwndDlg, GC_UPDATETITLE, 0, 0); - } - break; - - case GC_EVENT_CONTROL + WM_USER+500: - { - switch(wParam) { - case SESSION_OFFLINE: - SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0); - SendMessage(si->hWnd, GC_UPDATENICKLIST, (WPARAM)0, (LPARAM)0); - return TRUE; - - case SESSION_ONLINE: - SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0); - return TRUE; - - case WINDOW_HIDDEN: - SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, 0); - return TRUE; - - case WINDOW_CLEARLOG: - SetDlgItemText(hwndDlg, IDC_LOG, _T("")); - return TRUE; - - case SESSION_TERMINATE: - SendMessage(hwndDlg,GC_SAVEWNDPOS,0,0); - if (DBGetContactSettingByte(NULL, "Chat", "SavePosition", 0)) { - DBWriteContactSettingDword(si->hContact, "Chat", "roomx", si->iX); - DBWriteContactSettingDword(si->hContact, "Chat", "roomy", si->iY); - DBWriteContactSettingDword(si->hContact, "Chat", "roomwidth" , si->iWidth); - DBWriteContactSettingDword(si->hContact, "Chat", "roomheight", si->iHeight); - } - if (CallService(MS_CLIST_GETEVENT, (WPARAM)si->hContact, (LPARAM)0)) - CallService(MS_CLIST_REMOVEEVENT, (WPARAM)si->hContact, (LPARAM)"chaticon"); - si->wState &= ~STATE_TALK; - DBWriteContactSettingWord(si->hContact, si->pszModule ,"ApparentMode",(LPARAM) 0); - SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, 0); - return TRUE; - - case WINDOW_MINIMIZE: - ShowWindow(hwndDlg, SW_MINIMIZE); - goto LABEL_SHOWWINDOW; - - case WINDOW_MAXIMIZE: - ShowWindow(hwndDlg, SW_MAXIMIZE); - goto LABEL_SHOWWINDOW; - - case SESSION_INITDONE: - if (DBGetContactSettingByte(NULL, "Chat", "PopupOnJoin", 0)!=0) - return TRUE; - // fall through - case WINDOW_VISIBLE: - if (IsIconic(hwndDlg)) - ShowWindow(hwndDlg, SW_NORMAL); -LABEL_SHOWWINDOW: - SendMessage(hwndDlg, WM_SIZE, 0, 0); - SendMessage(hwndDlg, GC_REDRAWLOG, 0, 0); - SendMessage(hwndDlg, GC_UPDATENICKLIST, 0, 0); - SendMessage(hwndDlg, GC_UPDATESTATUSBAR, 0, 0); - ShowWindow(hwndDlg, SW_SHOW); - SendMessage(hwndDlg, WM_SIZE, 0, 0); - SetForegroundWindow(hwndDlg); - return TRUE; - } } - break; - - case GC_SPLITTERMOVED: - { POINT pt; - RECT rc; - RECT rcLog; - BOOL bFormat = IsWindowVisible(GetDlgItem(hwndDlg,IDC_SMILEY)); - - static int x = 0; - - GetWindowRect(GetDlgItem(hwndDlg,IDC_LOG),&rcLog); - if ((HWND)lParam==GetDlgItem(hwndDlg,IDC_SPLITTERX)) { - int oldSplitterX; - GetClientRect(hwndDlg,&rc); - pt.x=wParam; pt.y=0; - ScreenToClient(hwndDlg,&pt); - - oldSplitterX=si->iSplitterX; - si->iSplitterX=rc.right-pt.x+1; - if (si->iSplitterX < 35) - si->iSplitterX=35; - if (si->iSplitterX > rc.right-rc.left-35) - si->iSplitterX = rc.right-rc.left-35; - g_Settings.iSplitterX = si->iSplitterX; - } - else if ((HWND)lParam==GetDlgItem(hwndDlg,IDC_SPLITTERY)) { - int oldSplitterY; - GetClientRect(hwndDlg,&rc); - pt.x=0; pt.y=wParam; - ScreenToClient(hwndDlg,&pt); - - oldSplitterY=si->iSplitterY; - si->iSplitterY=bFormat?rc.bottom-pt.y+1:rc.bottom-pt.y+20; - if (si->iSplitterY<63) - si->iSplitterY=63; - if (si->iSplitterY>rc.bottom-rc.top-40) - si->iSplitterY = rc.bottom-rc.top-40; - g_Settings.iSplitterY = si->iSplitterY; - } - if (x==2) { - PostMessage(hwndDlg,WM_SIZE,0,0); - x = 0; - } - else x++; - } - break; - - case GC_FIREHOOK: - if (lParam) { - GCHOOK* gch = (GCHOOK *) lParam; - NotifyEventHooks(hSendEvent,0,(WPARAM)gch); - if ( gch->pDest ) { - mir_free( gch->pDest->pszID ); - mir_free( gch->pDest->pszModule ); - mir_free( gch->pDest ); - } - mir_free( gch->ptszText ); - mir_free( gch->ptszUID ); - mir_free( gch ); - } - break; - - case GC_CHANGEFILTERFLAG: - si->iLogFilterFlags = lParam; - break; - - case GC_SHOWFILTERMENU: - { - RECT rc; - HWND hwnd = CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_FILTER), hwndDlg, FilterWndProc, (LPARAM)si); - TranslateDialogDefault(hwnd); - GetWindowRect(GetDlgItem(hwndDlg, IDC_FILTER), &rc); - SetWindowPos(hwnd, HWND_TOP, rc.left-85, (IsWindowVisible(GetDlgItem(hwndDlg, IDC_FILTER))||IsWindowVisible(GetDlgItem(hwndDlg, IDC_BOLD)))?rc.top-206:rc.top-186, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW); - } - break; - - case GC_SHOWCOLORCHOOSER: - { - HWND ColorWindow; - RECT rc; - BOOL bFG = lParam == IDC_COLOR?TRUE:FALSE; - COLORCHOOSER * pCC = (COLORCHOOSER *)mir_alloc(sizeof(COLORCHOOSER)); - - GetWindowRect(GetDlgItem(hwndDlg, bFG?IDC_COLOR:IDC_BKGCOLOR), &rc); - pCC->hWndTarget = GetDlgItem(hwndDlg, IDC_MESSAGE); - pCC->pModule = MM_FindModule(si->pszModule); - pCC->xPosition = rc.left+3; - pCC->yPosition = IsWindowVisible(GetDlgItem(hwndDlg, IDC_COLOR))?rc.top-1:rc.top+20; - pCC->bForeground = bFG; - pCC->si = si; - - ColorWindow= CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_COLORCHOOSER), hwndDlg, DlgProcColorToolWindow, (LPARAM) pCC); - } - break; - - case GC_SCROLLTOBOTTOM: - { - SCROLLINFO si = { 0 }; - if ((GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_LOG), GWL_STYLE) & WS_VSCROLL) != 0) { - CHARRANGE sel; - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_RANGE; - GetScrollInfo(GetDlgItem(hwndDlg, IDC_LOG), SB_VERT, &si); - si.fMask = SIF_POS; - si.nPos = si.nMax - si.nPage + 1; - SetScrollInfo(GetDlgItem(hwndDlg, IDC_LOG), SB_VERT, &si, TRUE); - sel.cpMin = sel.cpMax = GetRichTextLength(GetDlgItem(hwndDlg, IDC_LOG)); - SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_EXSETSEL, 0, (LPARAM) & sel); - PostMessage(GetDlgItem(hwndDlg, IDC_LOG), WM_VSCROLL, MAKEWPARAM(SB_BOTTOM, 0), 0); - } } - break; - - case WM_TIMER: - if (wParam == TIMERID_FLASHWND) - FlashWindow(hwndDlg, TRUE); - break; - - case WM_ACTIVATE: - if (LOWORD(wParam) != WA_ACTIVE) - break; - - //fall through - case WM_MOUSEACTIVATE: - { - WINDOWPLACEMENT wp = { 0 }; - - wp.length = sizeof(wp); - GetWindowPlacement(hwndDlg, &wp); - g_Settings.iX = wp.rcNormalPosition.left; - g_Settings.iY = wp.rcNormalPosition.top; - g_Settings.iWidth = wp.rcNormalPosition.right - wp.rcNormalPosition.left; - g_Settings.iHeight = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top; - - if (g_Settings.TabsEnable) { - int i = TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)); - if (i != -1) { - SESSION_INFO* s; - TCITEM tci; - - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &tci); - s = (SESSION_INFO*) tci.lParam; - if (s) { - s->wState &= ~GC_EVENT_HIGHLIGHT; - s->wState &= ~STATE_TALK; - SendMessage(hwndDlg, GC_FIXTABICONS, 0, (LPARAM)s); - } } } - - if (uMsg != WM_ACTIVATE) - SetFocus(GetDlgItem(hwndDlg,IDC_MESSAGE)); - - SetActiveSession(si->ptszID, si->pszModule); - - if (KillTimer(hwndDlg, TIMERID_FLASHWND)) - FlashWindow(hwndDlg, FALSE); - if (DBGetContactSettingWord(si->hContact, si->pszModule ,"ApparentMode", 0) != 0) - DBWriteContactSettingWord(si->hContact, si->pszModule ,"ApparentMode",(LPARAM) 0); - if (CallService(MS_CLIST_GETEVENT, (WPARAM)si->hContact, (LPARAM)0)) - CallService(MS_CLIST_REMOVEEVENT, (WPARAM)si->hContact, (LPARAM)"chaticon"); - } - break; - - case WM_NOTIFY: - { - LPNMHDR pNmhdr; - - pNmhdr = (LPNMHDR)lParam; - switch (pNmhdr->code) { - case NM_RCLICK: - if (pNmhdr->idFrom == IDC_TAB ) { - int i = TabCtrl_GetCurSel(pNmhdr->hwndFrom); - - if (i != -1) { - SESSION_INFO* s; - HMENU hSubMenu; - TCHITTESTINFO tci = {0}; - TCITEM id = {0}; - int i = 0; - id.mask = TCIF_PARAM; - - tci.pt.x=(short)LOWORD(GetMessagePos()); - tci.pt.y=(short)HIWORD(GetMessagePos()); - tci.flags = TCHT_ONITEM; - - ScreenToClient(GetDlgItem(hwndDlg, IDC_TAB), &tci.pt); - i = TabCtrl_HitTest(pNmhdr->hwndFrom, &tci); - if (i != -1) { - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &id); - s = (SESSION_INFO*)id.lParam; - - ClientToScreen(GetDlgItem(hwndDlg, IDC_TAB), &tci.pt); - hSubMenu = GetSubMenu(g_hMenu, 5); - TranslateMenu(hSubMenu); - if (s) { - WORD w = DBGetContactSettingWord(s->hContact, s->pszModule, "TabPosition", 0); - if ( w == 0) - CheckMenuItem(hSubMenu, ID_LOCKPOSITION, MF_BYCOMMAND|MF_UNCHECKED); - else - CheckMenuItem(hSubMenu, ID_LOCKPOSITION, MF_BYCOMMAND|MF_CHECKED); - } - else CheckMenuItem(hSubMenu, ID_LOCKPOSITION, MF_BYCOMMAND|MF_UNCHECKED); - - switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, tci.pt.x, tci.pt.y, 0, hwndDlg, NULL)) { - case ID_CLOSE: - if (TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)) == i) - PostMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_CLOSE, BN_CLICKED), 0); - else - TabCtrl_DeleteItem(GetDlgItem(hwndDlg, IDC_TAB), i); - break; - - case ID_CLOSEOTHER: - { - int tabId = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)) - 1; - if (tabId > 0) { - if (TabCtrl_GetCurSel(GetDlgItem(hwndDlg, IDC_TAB)) != i) - if (s) - ShowRoom(s, WINDOW_VISIBLE, TRUE); - - for(tabId; tabId >= 0; tabId --) { - if (tabId == i) - continue; - - TabCtrl_DeleteItem(GetDlgItem(hwndDlg, IDC_TAB), tabId); - } } } - break; - - case ID_LOCKPOSITION: - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), i, &id); - if (!(GetMenuState(hSubMenu, ID_LOCKPOSITION, MF_BYCOMMAND)&MF_CHECKED)) { - if (s->hContact) - DBWriteContactSettingWord(s->hContact, s->pszModule, "TabPosition", (WORD)(i + 1)); - } - else DBDeleteContactSetting(s->hContact, s->pszModule, "TabPosition"); - break; - } } } } - break; - - case EN_MSGFILTER: - if (pNmhdr->idFrom == IDC_LOG && ((MSGFILTER *) lParam)->msg == WM_RBUTTONUP) { - CHARRANGE sel, all = { 0, -1 }; - POINT pt; - UINT uID = 0; - HMENU hMenu = 0; - TCHAR pszWord[4096]; - - pt.x = (short) LOWORD(((ENLINK *) lParam)->lParam); - pt.y = (short) HIWORD(((ENLINK *) lParam)->lParam); - ClientToScreen(pNmhdr->hwndFrom, &pt); - - { // fixing stuff for searches - long iCharIndex, iLineIndex, iChars, start, end, iRes; - POINTL ptl; - - pszWord[0] = '\0'; - ptl.x = (LONG)pt.x; - ptl.y = (LONG)pt.y; - ScreenToClient(GetDlgItem(hwndDlg, IDC_LOG), (LPPOINT)&ptl); - iCharIndex = SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_CHARFROMPOS, 0, (LPARAM)&ptl); - if (iCharIndex < 0) - break; - iLineIndex = SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_EXLINEFROMCHAR, 0, (LPARAM)iCharIndex); - iChars = SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_LINEINDEX, (WPARAM)iLineIndex, 0 ); - start = SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_FINDWORDBREAK, WB_LEFT, iCharIndex);//-iChars; - end = SendMessage(GetDlgItem(hwndDlg, IDC_LOG), EM_FINDWORDBREAK, WB_RIGHT, iCharIndex);//-iChars; - - if (end - start > 0) { - TEXTRANGE tr; - CHARRANGE cr; - static TCHAR szTrimString[] = _T(":;,.!?\'\"><()[]- \r\n"); - ZeroMemory(&tr, sizeof(TEXTRANGE)); - - cr.cpMin = start; - cr.cpMax = end; - tr.chrg = cr; - tr.lpstrText = pszWord; - iRes = SendMessage( GetDlgItem(hwndDlg, IDC_LOG), EM_GETTEXTRANGE, 0, (LPARAM)&tr); - - if (iRes > 0) { - int iLen = lstrlen(pszWord)-1; - while(iLen >= 0 && _tcschr(szTrimString, pszWord[iLen])) { - pszWord[iLen] = _T('\0'); - iLen--; - } } } } - - uID = CreateGCMenu(hwndDlg, &hMenu, 1, pt, si, NULL, pszWord); - switch (uID) { - case 0: - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - break; - - case ID_COPYALL: - SendMessage(pNmhdr->hwndFrom, EM_EXGETSEL, 0, (LPARAM) & sel); - SendMessage(pNmhdr->hwndFrom, EM_EXSETSEL, 0, (LPARAM) & all); - SendMessage(pNmhdr->hwndFrom, WM_COPY, 0, 0); - SendMessage(pNmhdr->hwndFrom, EM_EXSETSEL, 0, (LPARAM) & sel); - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - break; - - case ID_CLEARLOG: - { - SESSION_INFO* s = SM_FindSession(si->ptszID, si->pszModule); - if (s) - { - SetDlgItemText(hwndDlg, IDC_LOG, _T("")); - LM_RemoveAll(&s->pLog, &s->pLogEnd); - s->iEventCount = 0; - s->LastTime = 0; - si->iEventCount = 0; - si->LastTime = 0; - si->pLog = s->pLog; - si->pLogEnd = s->pLogEnd; - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - } } - break; - - case ID_SEARCH_GOOGLE: - { - TCHAR szURL[4096]; - if (pszWord[0]) { - mir_sntprintf( szURL, SIZEOF( szURL ), _T("http://www.google.com/search?q=%s"), pszWord ); - CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW|OUF_TCHAR, (LPARAM) szURL); - } - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - } - break; - - case ID_SEARCH_WIKIPEDIA: - { - TCHAR szURL[4096]; - if (pszWord[0]) { - mir_sntprintf( szURL, SIZEOF( szURL ), _T("http://en.wikipedia.org/wiki/%s"), pszWord ); - CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW|OUF_TCHAR, (LPARAM) szURL); - } - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - } - break; - - default: - PostMessage(hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_LOGMENU, NULL, NULL, (LPARAM)uID); - break; - } - DestroyGCMenu(&hMenu, 5); - } - break; - - case EN_LINK: - if (pNmhdr->idFrom == IDC_LOG) { - switch (((ENLINK *) lParam)->msg) { - case WM_RBUTTONDOWN: - case WM_LBUTTONUP: - case WM_LBUTTONDBLCLK: - { - TEXTRANGE tr; - CHARRANGE sel; - - SendMessage(pNmhdr->hwndFrom, EM_EXGETSEL, 0, (LPARAM) & sel); - if (sel.cpMin != sel.cpMax) - break; - tr.chrg = ((ENLINK *) lParam)->chrg; - tr.lpstrText = (LPTSTR)mir_alloc(sizeof(TCHAR)*(tr.chrg.cpMax - tr.chrg.cpMin + 1)); - SendMessage(pNmhdr->hwndFrom, EM_GETTEXTRANGE, 0, (LPARAM) & tr); - - if (((ENLINK *) lParam)->msg == WM_RBUTTONDOWN) { - HMENU hSubMenu; - POINT pt; - - hSubMenu = GetSubMenu(g_hMenu, 2); - TranslateMenu(hSubMenu); - pt.x = (short) LOWORD(((ENLINK *) lParam)->lParam); - pt.y = (short) HIWORD(((ENLINK *) lParam)->lParam); - ClientToScreen(((NMHDR *) lParam)->hwndFrom, &pt); - switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL)) { - case ID_NEW: - CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW|OUF_TCHAR, (LPARAM) tr.lpstrText); - break; - - case ID_CURR: - CallService(MS_UTILS_OPENURL, OUF_TCHAR, (LPARAM) tr.lpstrText); - break; - - case ID_COPY: - { - HGLOBAL hData; - if (!OpenClipboard(hwndDlg)) - break; - EmptyClipboard(); - hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(TCHAR)*(lstrlen(tr.lpstrText) + 1)); - lstrcpy(( TCHAR* )GlobalLock(hData), tr.lpstrText); - GlobalUnlock(hData); - SetClipboardData(CF_UNICODETEXT, hData); - CloseClipboard(); - SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE)); - break; - } } - mir_free(tr.lpstrText); - return TRUE; - } - - CallService(MS_UTILS_OPENURL, OUF_TCHAR|OUF_NEWWINDOW, (LPARAM) tr.lpstrText); - SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE)); - mir_free(tr.lpstrText); - break; - } } } - break; - - case TTN_NEEDTEXT: - if (pNmhdr->idFrom == (UINT_PTR)GetDlgItem(hwndDlg,IDC_LIST)) - { - LPNMTTDISPINFO lpttd = (LPNMTTDISPINFO)lParam; - POINT p; - int item; - USERINFO * ui; - SESSION_INFO* parentdat =(SESSION_INFO*)GetWindowLongPtr(hwndDlg,GWLP_USERDATA); - - GetCursorPos( &p ); - ScreenToClient(GetDlgItem(hwndDlg, IDC_LIST), &p); - item = LOWORD(SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_ITEMFROMPOINT, 0, MAKELPARAM(p.x, p.y))); - ui = SM_GetUserFromIndex(parentdat->ptszID, parentdat->pszModule, item); - if ( ui != NULL ) { - static TCHAR ptszBuf[ 1024 ]; - mir_sntprintf( ptszBuf, SIZEOF(ptszBuf), _T("%s: %s\r\n%s: %s\r\n%s: %s"), - TranslateT( "Nick name" ), ui->pszNick, - TranslateT( "Unique id" ), ui->pszUID, - TranslateT( "Status" ), TM_WordToString( parentdat->pStatuses, ui->Status )); - lpttd->lpszText = ptszBuf; - } } - break; - } } - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDC_LIST: - if (HIWORD(wParam) == LBN_DBLCLK) { - TVHITTESTINFO hti; - int item; - USERINFO * ui; - - hti.pt.x=(short)LOWORD(GetMessagePos()); - hti.pt.y=(short)HIWORD(GetMessagePos()); - ScreenToClient(GetDlgItem(hwndDlg, IDC_LIST),&hti.pt); - - item = LOWORD(SendMessage(GetDlgItem(hwndDlg, IDC_LIST), LB_ITEMFROMPOINT, 0, MAKELPARAM(hti.pt.x, hti.pt.y))); - ui = SM_GetUserFromIndex(si->ptszID, si->pszModule, item); - if (ui) { - if (GetKeyState(VK_SHIFT) & 0x8000) { - LRESULT lResult = (LRESULT)SendMessage(GetDlgItem(hwndDlg, IDC_MESSAGE), EM_GETSEL, (WPARAM)NULL, (LPARAM)NULL); - int start = LOWORD(lResult); - TCHAR* pszName = (TCHAR*)alloca(sizeof(TCHAR)*(lstrlen(ui->pszUID) + 3)); - if (start == 0) - mir_sntprintf(pszName, lstrlen(ui->pszUID)+3, _T("%s: "), ui->pszUID); - else - mir_sntprintf(pszName, lstrlen(ui->pszUID)+2, _T("%s "), ui->pszUID); - - SendMessage( GetDlgItem(hwndDlg, IDC_MESSAGE), EM_REPLACESEL, FALSE, (LPARAM) pszName ); - PostMessage( hwndDlg, WM_MOUSEACTIVATE, 0, 0 ); - } - else DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_PRIVMESS, ui->pszUID, NULL, (LPARAM)NULL); - } - - return TRUE; - } - - if ( HIWORD(wParam) == LBN_KILLFOCUS ) - RedrawWindow(GetDlgItem(hwndDlg, IDC_LIST), NULL, NULL, RDW_INVALIDATE); - break; - - case IDOK: - { - char* pszRtf; - TCHAR* ptszText, *p1; - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDOK))) - break; - - pszRtf = Message_GetFromStream(hwndDlg, si); - SM_AddCommand(si->ptszID, si->pszModule, pszRtf); - ptszText = DoRtfToTags(pszRtf, si); - p1 = _tcschr(ptszText, '\0'); - - //remove trailing linebreaks - while ( p1 > ptszText && (*p1 == '\0' || *p1 == '\r' || *p1 == '\n')) { - *p1 = '\0'; - p1--; - } - - if ( MM_FindModule(si->pszModule)->bAckMsg ) { - EnableWindow(GetDlgItem(hwndDlg,IDC_MESSAGE),FALSE); - SendDlgItemMessage(hwndDlg,IDC_MESSAGE,EM_SETREADONLY,TRUE,0); - } - else SendDlgItemMessage(hwndDlg,IDC_MESSAGE,WM_SETTEXT,0,(LPARAM)_T("")); - - EnableWindow(GetDlgItem(hwndDlg,IDOK),FALSE); - - DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_MESSAGE, NULL, ptszText, (LPARAM)NULL); - mir_free(pszRtf); - mir_free(ptszText); - SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE)); - } - break; - - case IDC_SHOWNICKLIST: - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_SHOWNICKLIST))) - break; - if (si->iType == GCW_SERVER) - break; - - si->bNicklistEnabled = !si->bNicklistEnabled; - - SendDlgItemMessage(hwndDlg,IDC_SHOWNICKLIST,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx( si->bNicklistEnabled ? "nicklist" : "nicklist2", FALSE )); - SendMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0); - SendMessage(hwndDlg, WM_SIZE, 0, 0); - break; - - case IDC_MESSAGE: - EnableWindow(GetDlgItem(hwndDlg, IDOK), GetRichTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE)) != 0); - break; - - case IDC_SMILEY: - { - SMADD_SHOWSEL3 smaddInfo; - RECT rc; - - GetWindowRect(GetDlgItem(hwndDlg, IDC_SMILEY), &rc); - - smaddInfo.cbSize = sizeof(SMADD_SHOWSEL3); - smaddInfo.hwndTarget = GetDlgItem(hwndDlg, IDC_MESSAGE); - smaddInfo.targetMessage = EM_REPLACESEL; - smaddInfo.targetWParam = TRUE; - smaddInfo.Protocolname = si->pszModule; - smaddInfo.Direction = 3; - smaddInfo.xPosition = rc.left+3; - smaddInfo.yPosition = rc.top-1; - smaddInfo.hContact = si->hContact; - smaddInfo.hwndParent = hwndDlg; - - if (SmileyAddInstalled) - CallService(MS_SMILEYADD_SHOWSELECTION, 0, (LPARAM) &smaddInfo); - } - break; - - case IDC_HISTORY: - { - TCHAR szFile[MAX_PATH]; - TCHAR szName[MAX_PATH]; - TCHAR szFolder[MAX_PATH]; - MODULEINFO * pInfo = MM_FindModule(si->pszModule); - - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_HISTORY))) - break; - - if ( pInfo ) { - TCHAR *szModName = NULL; - mir_sntprintf(szName, MAX_PATH, _T("%s"), pInfo->ptszModDispName ? pInfo->ptszModDispName : (szModName = mir_a2t(si->pszModule))); - mir_free(szModName); - ValidateFilename(szName); - mir_sntprintf(szFolder, MAX_PATH, _T("%s\\%s"), g_Settings.pszLogDir, szName); - mir_sntprintf(szName, MAX_PATH, _T("%s.log"), si->ptszID); - ValidateFilename(szName); - mir_sntprintf(szFile, MAX_PATH, _T("%s\\%s"), szFolder, szName); - ShellExecute(hwndDlg, _T("open"), szFile, NULL, NULL, SW_SHOW); - } } - break; - - case IDC_CLOSE: - SendMessage(hwndDlg, GC_REMOVETAB, 0, 0); - break; - - case IDC_CHANMGR: - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_CHANMGR))) - break; - DoEventHookAsync(hwndDlg, si->ptszID, si->pszModule, GC_USER_CHANMGR, NULL, NULL, (LPARAM)NULL); - break; - - case IDC_FILTER: - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_FILTER))) - break; - - si->bFilterEnabled = !si->bFilterEnabled; - SendDlgItemMessage(hwndDlg,IDC_FILTER,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadIconEx( si->bFilterEnabled ? "filter" : "filter2", FALSE )); - if (si->bFilterEnabled && DBGetContactSettingByte(NULL, "Chat", "RightClickFilter", 0) == 0) { - SendMessage(hwndDlg, GC_SHOWFILTERMENU, 0, 0); - break; - } - SendMessage(hwndDlg, GC_REDRAWLOG, 0, 0); - break; - - case IDC_BKGCOLOR: - { - CHARFORMAT2 cf; - - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwEffects = 0; - - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_BKGCOLOR))) - break; - - if (IsDlgButtonChecked(hwndDlg, IDC_BKGCOLOR )) { - if (DBGetContactSettingByte(NULL, "Chat", "RightClickFilter", 0) == 0) - SendMessage(hwndDlg, GC_SHOWCOLORCHOOSER, 0, (LPARAM)IDC_BKGCOLOR); - else if (si->bBGSet) { - cf.dwMask = CFM_BACKCOLOR; - cf.crBackColor = MM_FindModule(si->pszModule)->crColors[si->iBG]; - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } - else { - cf.dwMask = CFM_BACKCOLOR; - cf.crBackColor = (COLORREF)DBGetContactSettingDword(NULL, "Chat", "ColorMessageBG", GetSysColor(COLOR_WINDOW)); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } - break; - - case IDC_COLOR: - { - CHARFORMAT2 cf; - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwEffects = 0; - - if (!IsWindowEnabled(GetDlgItem(hwndDlg,IDC_COLOR))) - break; - - if (IsDlgButtonChecked(hwndDlg, IDC_COLOR )) { - if (DBGetContactSettingByte(NULL, "Chat", "RightClickFilter", 0) == 0) - SendMessage(hwndDlg, GC_SHOWCOLORCHOOSER, 0, (LPARAM)IDC_COLOR); - else if (si->bFGSet) { - cf.dwMask = CFM_COLOR; - cf.crTextColor = MM_FindModule(si->pszModule)->crColors[si->iFG]; - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } - else { - COLORREF cr; - - LoadMsgDlgFont(17, NULL, &cr); - cf.dwMask = CFM_COLOR; - cf.crTextColor = cr; - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } - break; - - case IDC_BOLD: - case IDC_ITALICS: - case IDC_UNDERLINE: - { - CHARFORMAT2 cf; - cf.cbSize = sizeof(CHARFORMAT2); - cf.dwMask = CFM_BOLD|CFM_ITALIC|CFM_UNDERLINE; - cf.dwEffects = 0; - - if (LOWORD(wParam) == IDC_BOLD && !IsWindowEnabled(GetDlgItem(hwndDlg,IDC_BOLD))) - break; - if (LOWORD(wParam) == IDC_ITALICS && !IsWindowEnabled(GetDlgItem(hwndDlg,IDC_ITALICS))) - break; - if (LOWORD(wParam) == IDC_UNDERLINE && !IsWindowEnabled(GetDlgItem(hwndDlg,IDC_UNDERLINE))) - break; - if (IsDlgButtonChecked(hwndDlg, IDC_BOLD)) - cf.dwEffects |= CFE_BOLD; - if (IsDlgButtonChecked(hwndDlg, IDC_ITALICS)) - cf.dwEffects |= CFE_ITALIC; - if (IsDlgButtonChecked(hwndDlg, IDC_UNDERLINE)) - cf.dwEffects |= CFE_UNDERLINE; - - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); - } } - break; - - case WM_KEYDOWN: - SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE)); - break; - - case WM_MOVE: - SendMessage(hwndDlg,GC_SAVEWNDPOS,0,1); - break; - - case WM_GETMINMAXINFO: - { - MINMAXINFO* mmi = (MINMAXINFO*)lParam; - mmi->ptMinTrackSize.x = si->iSplitterX + 43; - if (mmi->ptMinTrackSize.x < 350) - mmi->ptMinTrackSize.x = 350; - - mmi->ptMinTrackSize.y = si->iSplitterY + 80; - } - break; - - case WM_LBUTTONDBLCLK: - if (LOWORD(lParam) < 30) - PostMessage(hwndDlg, GC_SCROLLTOBOTTOM, 0, 0); - break; - - case WM_CLOSE: - if (g_Settings.TabsEnable && g_Settings.TabRestore && lParam != 1) { - SESSION_INFO* s; - TCITEM id = {0}; - int j = TabCtrl_GetItemCount(GetDlgItem(hwndDlg, IDC_TAB)) - 1; - id.mask = TCIF_PARAM; - for(j; j >= 0; j--) { - TabCtrl_GetItem(GetDlgItem(hwndDlg, IDC_TAB), j, &id); - s = (SESSION_INFO*)id.lParam; - if (s) - TabM_AddTab(s->ptszID, s->pszModule); - } } - - SendMessage(hwndDlg, GC_CLOSEWINDOW, 0, 0); - break; - - case GC_CLOSEWINDOW: - if (g_Settings.TabsEnable) - SM_SetTabbedWindowHwnd(0, 0); - DestroyWindow(hwndDlg); - break; - - case WM_DESTROY: - SendMessage(hwndDlg,GC_SAVEWNDPOS,0,0); - - si->hWnd = NULL; - si->wState &= ~STATE_TALK; - DestroyWindow(si->hwndStatus); - si->hwndStatus = NULL; - - if (si->hwndTooltip != NULL) { - HWND hNickList = GetDlgItem(hwndDlg,IDC_LIST); - TOOLINFO ti = { 0 }; - ti.cbSize = sizeof(TOOLINFO); - ti.uId = (UINT_PTR)hNickList; - ti.hwnd = hNickList; - SendMessage( si->hwndTooltip, TTM_DELTOOL, 0, (LPARAM)(LPTOOLINFO)&ti ); - } - DestroyWindow( si->hwndTooltip ); - si->hwndTooltip = NULL; - if (si->pAccPropServicesForNickList) si->pAccPropServicesForNickList->Release(); - SetWindowLongPtr(hwndDlg,GWLP_USERDATA,0); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERX),GWLP_WNDPROC,(LONG_PTR)OldSplitterProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_SPLITTERY),GWLP_WNDPROC,(LONG_PTR)OldSplitterProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LIST),GWLP_WNDPROC,(LONG_PTR)OldNicklistProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_TAB),GWLP_WNDPROC,(LONG_PTR)OldTabProc); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_UNSUBCLASSED, 0, 0); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_MESSAGE),GWLP_WNDPROC,(LONG_PTR)OldMessageProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_LOG),GWLP_WNDPROC,(LONG_PTR)OldLogProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_FILTER),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_COLOR),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); - SetWindowLongPtr(GetDlgItem(hwndDlg,IDC_BKGCOLOR),GWLP_WNDPROC,(LONG_PTR)OldFilterButtonProc); - break; - } - return(FALSE); -} -- cgit v1.2.3