diff options
Diffstat (limited to 'plugins/Gender')
| -rw-r--r-- | plugins/Gender/commonheaders.h | 63 | ||||
| -rw-r--r-- | plugins/Gender/docs/gender-readme.txt | 62 | ||||
| -rw-r--r-- | plugins/Gender/docs/gender-translate.txt | 24 | ||||
| -rw-r--r-- | plugins/Gender/gender.rc | 129 | ||||
| -rw-r--r-- | plugins/Gender/gender_10.sln | 31 | ||||
| -rw-r--r-- | plugins/Gender/gender_10.vcxproj | 263 | ||||
| -rw-r--r-- | plugins/Gender/icons/female.ico | bin | 0 -> 2550 bytes | |||
| -rw-r--r-- | plugins/Gender/icons/gender.ico | bin | 0 -> 2550 bytes | |||
| -rw-r--r-- | plugins/Gender/icons/male.ico | bin | 0 -> 2550 bytes | |||
| -rw-r--r-- | plugins/Gender/main.cpp | 474 | ||||
| -rw-r--r-- | plugins/Gender/options.cpp | 167 | ||||
| -rw-r--r-- | plugins/Gender/resource.h | 25 | 
12 files changed, 1238 insertions, 0 deletions
| diff --git a/plugins/Gender/commonheaders.h b/plugins/Gender/commonheaders.h new file mode 100644 index 0000000000..ef43423b66 --- /dev/null +++ b/plugins/Gender/commonheaders.h @@ -0,0 +1,63 @@ +/*
 +   Show Contact Gender plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2006-2011 by Thief
 +
 +   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
 +
 +   File name      : $URL: http://svn.miranda.im/mainrepo/gender/trunk/commonheaders.h $
 +   Revision       : $Rev: 1687 $
 +   Last change on : $Date: 2011-01-22 18:44:21 +0200 (Сб, 22 янв 2011) $
 +   Last change by : $Author: Thief $
 +
 +*/
 +
 +#ifndef COMMHEADERS_H
 +#define COMMHEADERS_H
 +
 +#include <stdio.h> //needed by m_utils.h
 +#include <stddef.h> // needed by m_icolib.h > r9256
 +
 +#include <windows.h>
 +#include <commctrl.h>
 +
 +//Miranda API headers
 +#include <newpluginapi.h>
 +#include <m_database.h>
 +#include <m_system.h>
 +#include <m_protocols.h>
 +#include <m_protosvc.h>
 +#include <m_utils.h>
 +#include <m_clist.h>
 +#include <m_options.h>
 +#include <m_langpack.h>
 +#include <m_genmenu.h>
 +#include <m_icolib.h>
 +#include <m_cluiframes.h>
 +
 +//Gender SDK
 +#include "m_gender.h"
 +
 +//Resources
 +#include "resource.h"
 +
 +//external SDK headers
 +#include "m_updater.h"
 +#include "m_metacontacts.h"
 +#include "m_extraicons.h"
 +
 +static const int DefaultSlot = EXTRA_ICON_ADV2;
 +#define MODULENAME "Gender"
 +
 +#endif //COMMHEADERS_H
 diff --git a/plugins/Gender/docs/gender-readme.txt b/plugins/Gender/docs/gender-readme.txt new file mode 100644 index 0000000000..9b61305da1 --- /dev/null +++ b/plugins/Gender/docs/gender-readme.txt @@ -0,0 +1,62 @@ +Gender plugin for Miranda IM (http://miranda-im.org)
 +Homepage: http://thief.miranda.im
 +Version: 0.0.2.1 (c) 2006-2011 Thief
 +Idea by nile, icons by a0x
 +
 +This plugin shows gender icon in contact list. Nothing more ;)
 +
 +Changes:
 +
 +v0.0.2.1
 ++ 64bit build
 ++ internal unicode support
 +- removed old PLUGININFO support
 +
 +v0.0.2.0
 ++ added support for extraicons service plugin
 +
 +v0.0.1.9
 +* gender key is now written to "UserInfo" module instead of protocol (the key doesn't get deleted on info update) (ticket #32)
 ++ option to draw an icon when no gender info found (ticket #33)
 +* look up for gender key in "UserInfo" module and then in protocol
 +* other small fixes
 +
 +v0.0.1.8
 +- some changes to icons handling, now Miranda 0.7 is required
 ++ added possibility to disable contact list icon
 +* fixed service function
 +
 +v0.0.1.7
 +- version bump (to allow update from 0.0.1.6 previously released as beta)
 +
 +v0.0.1.6
 ++ metacontacts support (thanks sje for clearing things out)
 ++ added a service for retrieving gender icon for a contact
 +
 +v0.0.1.5
 +* changed icons - now using cute icons by a0x (thanks!)
 +
 +v0.0.1.4
 ++ added uuid (FB1C17E0-77FC-45A7-9C8B-E2BEF4F56B28) and MIID_GENDER interface for Miranda 0.8.x compatibility
 +* make menu subitem checked when gender key is found
 +
 +v0.0.1.3
 +! addons release
 +* hide menu items for chatrooms and non-IM protocols (like weather, etc)
 +* icons changes in icolib reflect menuitems icons
 ++ option to disable menu items
 +
 +v0.0.1.2
 ++ plugin now checks "UserInfo" module if gender key was not found in protocol module (FR by BraVo123)
 +- MinGW build
 +
 +v0.0.1.1
 ++ menuitems to set gender (FR by Shaggoth)
 ++ langpack and readme
 +Happy New Year! :)
 +
 +v0.0.1.0
 +- initial release
 +
 +Plugin is released under GPL licence.
 +http://www.gnu.org/copyleft/gpl.html
\ No newline at end of file diff --git a/plugins/Gender/docs/gender-translate.txt b/plugins/Gender/docs/gender-translate.txt new file mode 100644 index 0000000000..b2f31b9876 --- /dev/null +++ b/plugins/Gender/docs/gender-translate.txt @@ -0,0 +1,24 @@ +[Gender]
 +[Male]
 +[Female]
 +[Undefined]
 +[Set Gender]
 +[Set Male]
 +[Set Female]
 +[Set Undefined]
 +[Plugin settings]
 +[Use]
 +[slot to draw the icon]
 +[Email]
 +[Protocol]
 +[SMS]
 +[Advanced 1]
 +[Advanced 2]
 +[Web]
 +[Client]
 +[Advanced 3]
 +[Advanced 4]
 +[Advanced 5]
 +[Enable menu items]
 +[No info]
 +[Draw an icon when gender info not found]
\ No newline at end of file diff --git a/plugins/Gender/gender.rc b/plugins/Gender/gender.rc new file mode 100644 index 0000000000..651f86bd36 --- /dev/null +++ b/plugins/Gender/gender.rc @@ -0,0 +1,129 @@ +// Microsoft Visual C++ generated resource script.
 +//
 +#include "resource.h"
 +
 +#define APSTUDIO_READONLY_SYMBOLS
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// Generated from the TEXTINCLUDE 2 resource.
 +//
 +#include "afxres.h"
 +
 +/////////////////////////////////////////////////////////////////////////////
 +#undef APSTUDIO_READONLY_SYMBOLS
 +
 +/////////////////////////////////////////////////////////////////////////////
 +// Ukrainian resources
 +
 +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_UKR)
 +#ifdef _WIN32
 +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
 +#pragma code_page(1251)
 +#endif //_WIN32
 +
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// Icon
 +//
 +
 +// Icon with lowest ID value placed first to ensure application icon
 +// remains consistent on all systems.
 +IDI_MALE                ICON                    "icons\\male.ico"
 +IDI_FEMALE              ICON                    "icons\\female.ico"
 +IDI_UNDEF               ICON                    "icons\\gender.ico"
 +#endif    // Ukrainian resources
 +/////////////////////////////////////////////////////////////////////////////
 +
 +
 +/////////////////////////////////////////////////////////////////////////////
 +// English (U.S.) resources
 +
 +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
 +#ifdef _WIN32
 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 +#pragma code_page(1252)
 +#endif //_WIN32
 +
 +#ifdef APSTUDIO_INVOKED
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// TEXTINCLUDE
 +//
 +
 +1 TEXTINCLUDE 
 +BEGIN
 +    "resource.h\0"
 +END
 +
 +2 TEXTINCLUDE 
 +BEGIN
 +    "#include ""afxres.h""\r\n"
 +    "\0"
 +END
 +
 +3 TEXTINCLUDE 
 +BEGIN
 +    "\r\n"
 +    "\0"
 +END
 +
 +#endif    // APSTUDIO_INVOKED
 +
 +
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// Dialog
 +//
 +
 +IDD_GENDER_OPT DIALOGEX 0, 0, 314, 240
 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
 +FONT 8, "MS Shell Dlg", 0, 0, 0x0
 +BEGIN
 +    COMBOBOX        IDC_ADVICON,95,102,78,81,CBS_DROPDOWNLIST | WS_VSCROLL | 
 +                    WS_TABSTOP,WS_EX_CLIENTEDGE
 +    GROUPBOX        "Plugin settings",IDC_STATIC,46,78,222,100
 +    RTEXT           "Use",IDC_USE_L,56,104,33,12
 +    LTEXT           "slot to draw the icon",IDC_SLOT_L,179,104,76,17
 +    CONTROL         "Enable menu items",IDC_MENUITEMS,"Button",
 +                    BS_AUTOCHECKBOX | WS_TABSTOP,76,122,167,12
 +    LTEXT           "Note: if you still don't see the icons try changing icon slot. Perhaps its used by some other plugin.",
 +                    IDC_NOTE_L,53,152,200,18
 +    CONTROL         "Draw an icon when gender info not found",
 +                    IDC_DRAWUNDEFICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
 +                    76,138,167,12
 +END
 +
 +
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// DESIGNINFO
 +//
 +
 +#ifdef APSTUDIO_INVOKED
 +GUIDELINES DESIGNINFO 
 +BEGIN
 +    IDD_GENDER_OPT, DIALOG
 +    BEGIN
 +        LEFTMARGIN, 7
 +        RIGHTMARGIN, 307
 +        TOPMARGIN, 7
 +        BOTTOMMARGIN, 233
 +    END
 +END
 +#endif    // APSTUDIO_INVOKED
 +
 +#endif    // English (U.S.) resources
 +/////////////////////////////////////////////////////////////////////////////
 +
 +
 +
 +#ifndef APSTUDIO_INVOKED
 +/////////////////////////////////////////////////////////////////////////////
 +//
 +// Generated from the TEXTINCLUDE 3 resource.
 +//
 +
 +
 +/////////////////////////////////////////////////////////////////////////////
 +#endif    // not APSTUDIO_INVOKED
 +
 diff --git a/plugins/Gender/gender_10.sln b/plugins/Gender/gender_10.sln new file mode 100644 index 0000000000..238e9b5269 --- /dev/null +++ b/plugins/Gender/gender_10.sln @@ -0,0 +1,31 @@ +Microsoft Visual Studio Solution File, Format Version 11.00
 +# Visual C++ Express 2010
 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gender_10", "gender_10.vcxproj", "{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}"
 +EndProject
 +Global
 +	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 +		Debug|Win32 = Debug|Win32
 +		Debug|x64 = Debug|x64
 +		Release Unicode|Win32 = Release Unicode|Win32
 +		Release Unicode|x64 = Release Unicode|x64
 +		Release|Win32 = Release|Win32
 +		Release|x64 = Release|x64
 +	EndGlobalSection
 +	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Debug|Win32.ActiveCfg = Debug|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Debug|Win32.Build.0 = Debug|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Debug|x64.ActiveCfg = Debug|x64
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Debug|x64.Build.0 = Debug|x64
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release Unicode|x64.Build.0 = Release Unicode|x64
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release|Win32.ActiveCfg = Release|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release|Win32.Build.0 = Release|Win32
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release|x64.ActiveCfg = Release|x64
 +		{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}.Release|x64.Build.0 = Release|x64
 +	EndGlobalSection
 +	GlobalSection(SolutionProperties) = preSolution
 +		HideSolutionNode = FALSE
 +	EndGlobalSection
 +EndGlobal
 diff --git a/plugins/Gender/gender_10.vcxproj b/plugins/Gender/gender_10.vcxproj new file mode 100644 index 0000000000..cc02d4a65a --- /dev/null +++ b/plugins/Gender/gender_10.vcxproj @@ -0,0 +1,263 @@ +<?xml version="1.0" encoding="utf-8"?>
 +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 +  <ItemGroup Label="ProjectConfigurations">
 +    <ProjectConfiguration Include="Debug|Win32">
 +      <Configuration>Debug</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Debug|x64">
 +      <Configuration>Debug</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release Unicode|Win32">
 +      <Configuration>Release Unicode</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release Unicode|x64">
 +      <Configuration>Release Unicode</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release|Win32">
 +      <Configuration>Release</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release|x64">
 +      <Configuration>Release</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +  </ItemGroup>
 +  <PropertyGroup Label="Globals">
 +    <ProjectGuid>{9DF8913A-99A3-40D2-86FE-585EBDDCABB2}</ProjectGuid>
 +    <Keyword>Win32Proj</Keyword>
 +    <ProjectName>gender</ProjectName>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>MultiByte</CharacterSet>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>Unicode</CharacterSet>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>MultiByte</CharacterSet>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>Unicode</CharacterSet>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>MultiByte</CharacterSet>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <CharacterSet>MultiByte</CharacterSet>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 +  <ImportGroup Label="ExtensionSettings">
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
 +    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
 +  </ImportGroup>
 +  <PropertyGroup Label="UserMacros" />
 +  <PropertyGroup>
 +    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</LinkIncremental>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
 +    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">false</LinkIncremental>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
 +    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
 +    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
 +  </PropertyGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +    <ClCompile>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <MinimalRebuild>true</MinimalRebuild>
 +      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 +      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +    </ClCompile>
 +    <Link>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <ProgramDatabaseFile>$(OutDir)gender2.pdb</ProgramDatabaseFile>
 +      <SubSystem>Windows</SubSystem>
 +      <TargetMachine>MachineX86</TargetMachine>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 +    <ClCompile>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
 +      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +    </ClCompile>
 +    <Link>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <ProgramDatabaseFile>$(OutDir)gender2.pdb</ProgramDatabaseFile>
 +      <SubSystem>Windows</SubSystem>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +    <ClCompile>
 +      <Optimization>Full</Optimization>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 +      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
 +      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 +      <WholeProgramOptimization>true</WholeProgramOptimization>
 +    </ClCompile>
 +    <Link>
 +      <GenerateDebugInformation>false</GenerateDebugInformation>
 +      <SubSystem>Windows</SubSystem>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <TargetMachine>MachineX86</TargetMachine>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
 +    <ClCompile>
 +      <Optimization>Full</Optimization>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 +      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
 +      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 +      <WholeProgramOptimization>true</WholeProgramOptimization>
 +    </ClCompile>
 +    <Link>
 +      <GenerateDebugInformation>false</GenerateDebugInformation>
 +      <SubSystem>Windows</SubSystem>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <TargetMachine>MachineX86</TargetMachine>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 +    <ClCompile>
 +      <Optimization>Full</Optimization>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS; _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 +      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 +      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
 +      <WholeProgramOptimization>true</WholeProgramOptimization>
 +    </ClCompile>
 +    <Link>
 +      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
 +      <GenerateDebugInformation>false</GenerateDebugInformation>
 +      <SubSystem>Windows</SubSystem>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
 +    <ClCompile>
 +      <Optimization>Full</Optimization>
 +      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 +      <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;GENDER2_EXPORTS; _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
 +      <PrecompiledHeader>
 +      </PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
 +      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
 +      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
 +      <WholeProgramOptimization>true</WholeProgramOptimization>
 +    </ClCompile>
 +    <Link>
 +      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
 +      <GenerateDebugInformation>false</GenerateDebugInformation>
 +      <SubSystem>Windows</SubSystem>
 +      <OptimizeReferences>true</OptimizeReferences>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
 +      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemGroup>
 +    <ClCompile Include="main.cpp" />
 +    <ClCompile Include="options.cpp" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClInclude Include="commonheaders.h" />
 +    <ClInclude Include="m_gender.h" />
 +    <ClInclude Include="sdk\m_metacontacts.h" />
 +    <ClInclude Include="sdk\m_updater.h" />
 +    <ClInclude Include="resource.h" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <None Include="icons\choose.ico" />
 +    <None Include="icons\female.ico" />
 +    <None Include="icons\male.ico" />
 +    <None Include="docs\gender-readme.txt" />
 +    <None Include="docs\gender-translate.txt" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ResourceCompile Include="gender.rc" />
 +  </ItemGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 +  <ImportGroup Label="ExtensionTargets">
 +  </ImportGroup>
 +</Project>
\ No newline at end of file diff --git a/plugins/Gender/icons/female.ico b/plugins/Gender/icons/female.icoBinary files differ new file mode 100644 index 0000000000..fe1cbd2bce --- /dev/null +++ b/plugins/Gender/icons/female.ico diff --git a/plugins/Gender/icons/gender.ico b/plugins/Gender/icons/gender.icoBinary files differ new file mode 100644 index 0000000000..930c34279c --- /dev/null +++ b/plugins/Gender/icons/gender.ico diff --git a/plugins/Gender/icons/male.ico b/plugins/Gender/icons/male.icoBinary files differ new file mode 100644 index 0000000000..ebd0420554 --- /dev/null +++ b/plugins/Gender/icons/male.ico diff --git a/plugins/Gender/main.cpp b/plugins/Gender/main.cpp new file mode 100644 index 0000000000..e66d3ef41b --- /dev/null +++ b/plugins/Gender/main.cpp @@ -0,0 +1,474 @@ +/*
 +   Show Contact Gender plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2006-2011 by Thief
 +
 +   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
 +
 +   File name      : $URL: http://svn.miranda.im/mainrepo/gender/trunk/main.cpp $
 +   Revision       : $Rev: 1688 $
 +   Last change on : $Date: 2011-01-22 19:44:43 +0200 (Сб, 22 янв 2011) $
 +   Last change by : $Author: Thief $
 +
 +*/
 +
 +#include "commonheaders.h"
 +
 +HINSTANCE g_hInst;
 +PLUGINLINK *pluginLink;
 +static HANDLE hHookModulesLoaded = NULL, hSystemOKToExit = NULL, hOptInitialise = NULL, hIcoLibIconsChanged = NULL;
 +static HANDLE hHookExtraIconsRebuild = NULL, hHookExtraIconsApply = NULL, hContactMenu = NULL;
 +static HANDLE hContactMenuMale = NULL, hContactMenuFemale = NULL, hContactMenuNotDef = NULL, hHookPrebuildContactMenu = NULL;
 +static HANDLE hSetMale = NULL, hSetFemale = NULL, hSetUndef = NULL, hGenderGetIcon = NULL;
 +
 +HANDLE g_hExtraIcon = NULL;
 +HANDLE g_hIconMale, g_hIconFemale, g_hIconMenu;
 +IconExtraColumn g_IECMale = {0};
 +IconExtraColumn g_IECFemale = {0};
 +IconExtraColumn g_IECUndef = {0};
 +IconExtraColumn g_IECClear = {0};
 +
 +int clistIcon = 0; // Icon slot to use
 +byte bEnableClistIcon = 1; // do we need clist icon?
 +byte bDrawNoGenderIcon = 0; // enable icon when no info?
 +byte bContactMenuItems = 1; // do we need a contact menu items?
 +byte bMetaAvail = 0; // metacontacts installed?
 +
 +extern int onOptInitialise(WPARAM wParam, LPARAM lParam);
 +
 +PLUGININFOEX pluginInfo={
 +sizeof(PLUGININFOEX),
 +#ifdef WIN64
 +	"Show Contact Gender (x64)",
 +#else
 +	"Show Contact Gender",
 +#endif
 +	PLUGIN_MAKE_VERSION(0,0,2,1),
 +	"Shows contacts gender as an icon in contact list",
 +	"Thief, idea by nile, icons by a0x",
 +	"thief@miranda.im",
 +	"2006-2011 Alexander Turyak",
 +	"http://thief.miranda.im/",
 +	UNICODE_AWARE,
 +	0,      //doesn't replace anything built-in
 +#ifdef WIN64
 +	{ 0x3a99592e, 0x20d5, 0x4b72, { 0xa5, 0x96, 0xe6, 0x7d, 0xd7, 0x13, 0xde, 0xfb } } 	// {3A99592E-20D5-4B72-A596-E67DD713DEFB}
 +#else
 +	{0xfb1c17e0, 0x77fc, 0x45a7, {0x9c, 0x8b, 0xe2, 0xbe, 0xf4, 0xf5, 0x6b, 0x28}} /* FB1C17E0-77FC-45A7-9C8B-E2BEF4F56B28 */
 +#endif
 +};
 +
 +extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
 +{
 +	g_hInst = hinstDLL;
 +	return TRUE;
 +}
 +
 +/* 0FF3991A-5505-479D-A2E0-53DD31C6DFA7 */
 +#define MIID_GENDER {0x0ff3991a, 0x5505, 0x479d, {0xa2, 0xe0, 0x53, 0xdd, 0x31, 0xc6, 0xdf, 0xa7}}
 +
 +extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
 +{
 +	static const MUUID interfaces[] = {MIID_GENDER, MIID_LAST};
 +	return interfaces;
 +}
 +
 +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
 +{
 +	return &pluginInfo;
 +}
 +
 +void setIcon(HANDLE hContact, unsigned int gender)
 +{
 +	if (g_hExtraIcon != NULL)
 +	{
 +		char *ico;
 +		switch (gender)
 +		{
 +			case 77: ico = "male_icon"; break;
 +			case 70: ico = "female_icon"; break;
 +			default: ico = (bDrawNoGenderIcon ? "menu_icon" : NULL); break;
 +		}
 +		ExtraIcon_SetIcon(g_hExtraIcon, hContact, ico);
 +	}
 +	else
 +	{
 +		IconExtraColumn *col;
 +		switch (gender)
 +		{
 +			case 77: col = &g_IECMale; break;
 +			case 70: col = &g_IECFemale; break;
 +			default: col = (bDrawNoGenderIcon ? &g_IECUndef : &g_IECClear); break;
 +		}
 +		CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)col);
 +	}
 +}
 +
 +int onExtraImageApplying(WPARAM wParam, LPARAM lParam)
 +{
 +	if (g_hExtraIcon == NULL && !bEnableClistIcon) return 0;
 +
 +	HANDLE hContact = (HANDLE)wParam;
 +	if (bMetaAvail)
 +	{
 +		HANDLE hMetacontact = (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT, wParam, 0);
 +		if (hMetacontact != NULL) hContact = hMetacontact;
 +	}
 +		
 +	char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
 +	if (!proto) return 0;
 +
 +	if (DBGetContactSettingByte((HANDLE)wParam, proto, "ChatRoom", 0)) return 0;
 +	
 +	unsigned int gender = DBGetContactSettingByte(hContact, "UserInfo", "Gender", DBGetContactSettingByte(hContact, proto, "Gender", 0));
 +
 +	setIcon(hContact, gender);
 +	if ((HANDLE)wParam != hContact)
 +		setIcon((HANDLE)wParam, gender);
 +	
 +	return 0;
 +}
 +
 +int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam) 
 +{	
 +	g_IECMale.cbSize = sizeof(IconExtraColumn);
 +	g_IECMale.ColumnType = clistIcon;
 +	g_IECFemale.cbSize = sizeof(IconExtraColumn);
 +	g_IECFemale.ColumnType = clistIcon;
 +	g_IECUndef.cbSize = sizeof(IconExtraColumn);
 +	g_IECUndef.ColumnType = clistIcon;
 +	
 +	if (ServiceExists(MS_CLIST_EXTRA_ADD_ICON))
 +	{
 +		if(hIcoLibIconsChanged)
 +		{
 +			g_IECMale.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)g_hIconMale), (LPARAM)0);
 +			g_IECFemale.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)g_hIconFemale), (LPARAM)0);
 +			g_IECUndef.hImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)g_hIconMenu), (LPARAM)0);
 +		}
 +	}
 +	
 +	return 0;
 +}
 +
 +// Returns gender icon for specific contact
 +INT_PTR GetIcon(WPARAM wParam, LPARAM lParam)
 +{
 +	char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
 +	unsigned short gender = DBGetContactSettingByte((HANDLE)wParam, "UserInfo", "Gender", DBGetContactSettingByte((HANDLE)wParam, proto, "Gender", 0));
 +	
 +	if (gender > 0)
 +	{
 +		if (gender == 77) return CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)g_hIconMale); 
 +		else if (gender == 70) return CallService(MS_SKIN2_GETICONBYHANDLE, 0, (LPARAM)g_hIconFemale);
 +	}
 +	
 +	return 0;
 +}
 +
 +int onPrebuildContactMenu(WPARAM wParam, LPARAM lParam)
 +{
 +	char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
 +
 +	if (!proto) return 0;
 +
 +	CLISTMENUITEM mi = {0};
 +	mi.cbSize = sizeof(CLISTMENUITEM);
 +	
 +	
 +	if (DBGetContactSettingByte((HANDLE)wParam, proto, "ChatRoom", 0) || !(CallProtoService(proto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_IMSEND))
 +		mi.flags = CMIM_FLAGS | CMIF_HIDDEN;
 +	else
 +		mi.flags = CMIM_FLAGS;
 +	
 +	CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenu, (LPARAM)&mi);
 +	
 +	unsigned short gender = DBGetContactSettingByte((HANDLE)wParam, proto, "Gender", DBGetContactSettingByte((HANDLE)wParam, "UserInfo", "Gender", 0));
 +	
 +	CLISTMENUITEM mitem = {0};
 +	mitem.cbSize = sizeof(CLISTMENUITEM);
 +	mitem.flags = CMIM_FLAGS;
 +	
 +	CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuMale, (LPARAM)&mitem);
 +	CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuFemale, (LPARAM)&mitem);
 +	CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuNotDef, (LPARAM)&mitem);
 +	
 +	mitem.flags = CMIM_FLAGS | CMIF_CHECKED;
 +	
 +	switch (gender)
 +	{
 +		case 77:
 +			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuMale, (LPARAM)&mitem);
 +		break;
 +		case 70:
 +			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuFemale, (LPARAM)&mitem);
 +		break;
 +		case 0:
 +			CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hContactMenuNotDef, (LPARAM)&mitem);
 +		break;
 +	}	
 +	
 +	return 0;
 +}
 +
 +void setGender(HANDLE hContact, unsigned int gender)
 +{
 +	DBWriteContactSettingByte(hContact, "UserInfo", "Gender", gender);
 +	setIcon(hContact, gender);
 +
 +	int metasnum = (bMetaAvail ? CallService(MS_MC_GETNUMCONTACTS,(WPARAM)hContact,0) : 0);
 +	for(int i=0; i<metasnum; i++)
 +	{
 +		HANDLE hSubContact = (HANDLE)CallService(MS_MC_GETSUBCONTACT, (WPARAM)hContact, i);
 +		DBWriteContactSettingByte(hSubContact, "UserInfo", "Gender", gender);
 +		setIcon(hSubContact, gender);
 +	}
 +}
 +
 +INT_PTR onSetMale(WPARAM wParam,LPARAM lParam)
 +{
 +	setGender((HANDLE)wParam, 77);
 +	return 0;
 +}
 +
 +INT_PTR onSetFemale(WPARAM wParam,LPARAM lParam)
 +{
 +	setGender((HANDLE)wParam, 70);
 +	return 0;
 +}
 +
 +INT_PTR onSetUndef(WPARAM wParam,LPARAM lParam)
 +{
 +	DBDeleteContactSetting((HANDLE)wParam, "UserInfo", "Gender");
 +	onExtraImageApplying(wParam, 0);
 +
 +	int metasnum = (bMetaAvail ? CallService(MS_MC_GETNUMCONTACTS,wParam,0) : 0);
 +	for(int i=0; i<metasnum; i++)
 +	{
 +		HANDLE hContact = (HANDLE)CallService(MS_MC_GETSUBCONTACT, wParam, i);
 +		DBDeleteContactSetting(hContact, "UserInfo", "Gender");
 +		onExtraImageApplying((WPARAM)hContact, 0);
 +	}
 +	
 +	return 0;
 +}
 +
 +int onModulesLoaded(WPARAM wParam,LPARAM lParam)
 +{
 +	hOptInitialise = HookEvent(ME_OPT_INITIALISE, onOptInitialise);
 +	if (bContactMenuItems) hHookPrebuildContactMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, onPrebuildContactMenu);
 +	bMetaAvail = (ServiceExists(MS_MC_GETMETACONTACT) != 0); 
 +	
 +	//IcoLib support
 +	if(ServiceExists(MS_SKIN2_ADDICON))
 +	{
 +		SKINICONDESC sid = {0};
 +		sid.cbSize = SKINICONDESC_SIZE;
 +		sid.flags = SIDF_ALL_TCHAR;	
 +		sid.ptszSection = LPGENT("Gender");
 +		TCHAR szFile[MAX_PATH];
 +		GetModuleFileName(g_hInst, szFile, MAX_PATH);
 +		sid.ptszDefaultFile = szFile;
 +		
 +		sid.ptszDescription = LPGENT("Male");
 +		sid.pszName = "male_icon";
 +		sid.iDefaultIndex = -IDI_MALE;
 +		g_hIconMale = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
 +		
 +		sid.ptszDescription = LPGENT("Female");
 +		sid.pszName = "female_icon";
 +		sid.iDefaultIndex = -IDI_FEMALE;
 +		g_hIconFemale = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
 +		
 +		sid.ptszDescription = LPGENT("No info");
 +		sid.pszName = "menu_icon";
 +		sid.iDefaultIndex = -IDI_UNDEF;
 +		g_hIconMenu = (HANDLE)CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
 +		
 +		hIcoLibIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, onExtraImageListRebuild);
 +	}   
 +	
 +	g_hExtraIcon = ExtraIcon_Register("gender", "Gender", "menu_icon");
 +	if (g_hExtraIcon != NULL)
 +	{
 +		HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +		while (hContact != NULL)
 +		{
 +			onExtraImageApplying((WPARAM) hContact, 0);
 +
 +			hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
 +		}
 +	}
 +	else
 +	{
 +		hHookExtraIconsRebuild = HookEvent(ME_CLIST_EXTRA_LIST_REBUILD, onExtraImageListRebuild);
 +		hHookExtraIconsApply = HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY, onExtraImageApplying);
 +
 +		onExtraImageListRebuild(0,0);
 +	}
 +	
 +	// Adding menu items, submenu even if clist supports that
 +	if (bContactMenuItems)
 +	{
 +		if(ServiceExists(MS_CLIST_ADDSUBGROUPMENUITEM))
 +		{
 +			CLISTMENUITEM mi = {0};
 +			mi.cbSize = sizeof(CLISTMENUITEM);
 +			mi.flags = CMIF_ROOTPOPUP | CMIF_ICONFROMICOLIB | CMIF_TCHAR;
 +			mi.icolibItem = g_hIconMenu;
 +			mi.pszPopupName = (char*)-1;
 +			mi.position = 203;
 +			mi.ptszName = LPGENT("Set Gender");
 +			mi.pszService = NULL;
 +			hContactMenu = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);
 +			
 +			mi.flags = CMIF_CHILDPOPUP | CMIF_ICONFROMICOLIB | CMIF_TCHAR;
 +			mi.position = 1001;
 +			mi.pszPopupName = (char*)hContactMenu;
 +			
 +			mi.ptszName = LPGENT("Male");
 +			mi.icolibItem = g_hIconMale;
 +			mi.pszService = "Gender/MenuItemSetMale";
 +			hContactMenuMale = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);
 +			
 +			mi.ptszName = LPGENT("Female");
 +			mi.icolibItem = g_hIconFemale;
 +			mi.pszService = "Gender/MenuItemSetFemale";
 +			hContactMenuFemale = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);
 +			
 +			mi.ptszName = LPGENT("Undefined");
 +			mi.hIcon = NULL;
 +			mi.pszService = "Gender/MenuItemSetUndef";
 +			hContactMenuNotDef = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);
 +		}
 +		else
 +		{
 +			CLISTMENUITEM mimale = {0};
 +			mimale.cbSize = sizeof(CLISTMENUITEM);
 +			mimale.flags = CMIF_ICONFROMICOLIB | CMIF_TCHAR;
 +			mimale.position = 1001;
 +			mimale.ptszName = LPGENT("Set Male");
 +			mimale.icolibItem = g_hIconMale;
 +			mimale.pszService = "Gender/MenuItemSetMale";
 +			hContactMenuMale = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mimale);
 +			
 +			CLISTMENUITEM mifemale = {0};
 +			mifemale.cbSize = sizeof(CLISTMENUITEM);
 +			mifemale.flags = CMIF_ICONFROMICOLIB | CMIF_TCHAR;
 +			mifemale.position = 1002;
 +			mifemale.ptszName = LPGENT("Set Female");
 +			mifemale.icolibItem = g_hIconFemale;
 +			mifemale.pszService = "Gender/MenuItemSetFemale";
 +			hContactMenuFemale = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mifemale);
 +			
 +			CLISTMENUITEM miundef = {0};
 +			miundef.cbSize = sizeof(CLISTMENUITEM);
 +			miundef.flags =  CMIF_TCHAR;
 +			miundef.position = 1003;
 +			miundef.ptszName = LPGENT("Set Undefined");
 +			miundef.pszService = "Gender/MenuItemSetUndef";
 +			miundef.hIcon = NULL;
 +			hContactMenuNotDef = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &miundef);
 +		}
 +	}
 +	
 +	// Updater support
 +	if (ServiceExists(MS_UPDATE_REGISTER))
 +	{
 +		Update update = {0};
 +		char szVersion[16];
 +		
 +		update.cbSize = sizeof(Update);
 +		
 +		update.szComponentName = pluginInfo.shortName;
 +		update.pbVersion = (BYTE *)CreateVersionStringPluginEx(&pluginInfo, szVersion);
 +		update.cpbVersion = (int)strlen((char *)update.pbVersion);
 +		
 +		update.szUpdateURL = UPDATER_AUTOREGISTER;
 +
 +#ifndef WIN64		
 +		// these are the three lines that matter - the archive, the page containing the version string, and the text (or data) 
 +		// before the version that we use to locate it on the page
 +		// (note that if the update URL and the version URL point to standard file listing entries, the backend xml
 +		// data will be used to check for updates rather than the actual web page - this is not true for beta urls)
 +		update.szBetaUpdateURL  = "http://thief.miranda.im/gender.zip";
 +		update.szBetaVersionURL = "http://thief.miranda.im/updater/gender_version.txt";
 +		update.szBetaChangelogURL = "http://thief.miranda.im";
 +		update.pbBetaVersionPrefix = (BYTE *)"Gender ";
 +
 +		update.cpbBetaVersionPrefix = strlen((char *)update.pbBetaVersionPrefix);
 +#endif		
 +		
 +		CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
 +	}
 +	
 +	return 0;
 +}
 +
 +int onSystemOKToExit(WPARAM wParam,LPARAM lParam)
 +{
 +	UnhookEvent(hHookModulesLoaded);
 +	UnhookEvent(hHookExtraIconsRebuild);
 +	UnhookEvent(hHookExtraIconsApply);
 +	UnhookEvent(hHookPrebuildContactMenu);
 +	UnhookEvent(hOptInitialise);
 +	UnhookEvent(hSystemOKToExit);
 +	if (hIcoLibIconsChanged) UnhookEvent(hIcoLibIconsChanged);
 +	
 +
 +	DestroyServiceFunction(hSetMale);
 +	DestroyServiceFunction(hSetFemale);
 +	DestroyServiceFunction(hSetUndef);
 +	DestroyServiceFunction(hGenderGetIcon);
 +	
 +	if (hIcoLibIconsChanged)
 +	{
 +		CallService(MS_SKIN2_RELEASEICON, 0, (LPARAM)"menu_icon");
 +		CallService(MS_SKIN2_RELEASEICON, 0, (LPARAM)"male_icon");
 +		CallService(MS_SKIN2_RELEASEICON, 0, (LPARAM)"female_icon");
 +	}
 +	
 +	return 0;
 +}
 +
 +extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
 +{
 +	pluginLink = link;
 +	
 +	hHookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, onModulesLoaded);
 +	hSystemOKToExit = HookEvent(ME_SYSTEM_OKTOEXIT,onSystemOKToExit);
 +	
 +	bEnableClistIcon  = DBGetContactSettingByte(NULL, MODULENAME, "ClistIcon", 1);
 +	bContactMenuItems = DBGetContactSettingByte(NULL, MODULENAME, "MenuItems", 1);
 +	bDrawNoGenderIcon = DBGetContactSettingByte(NULL, MODULENAME, "NoGenderIcon", 0);
 +	
 +
 +	hSetMale    = CreateServiceFunction("Gender/MenuItemSetMale", onSetMale);
 +	hSetFemale  = CreateServiceFunction("Gender/MenuItemSetFemale", onSetFemale);
 +	hSetUndef   = CreateServiceFunction("Gender/MenuItemSetUndef", onSetUndef);
 +	
 +	clistIcon = DBGetContactSettingByte(NULL, MODULENAME, "AdvancedIcon", DefaultSlot);
 +	g_IECClear.cbSize = sizeof(IconExtraColumn);
 +	g_IECClear.ColumnType = clistIcon;
 +	g_IECClear.hImage = (HANDLE) -1;
 +	
 +	hGenderGetIcon = CreateServiceFunction(MS_GENDER_GETICON, GetIcon);
 +	
 +	return 0;
 +}
 +
 +extern "C" int __declspec(dllexport) Unload(void)
 +{   
 +	return 0;
 +}
 diff --git a/plugins/Gender/options.cpp b/plugins/Gender/options.cpp new file mode 100644 index 0000000000..32d919c020 --- /dev/null +++ b/plugins/Gender/options.cpp @@ -0,0 +1,167 @@ +/*
 +   Show Contact Gender plugin for Miranda-IM (www.miranda-im.org)
 +   (c) 2006-2011 by Thief
 +
 +   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
 +
 +   File name      : $URL: http://svn.miranda.im/mainrepo/gender/trunk/options.cpp $
 +   Revision       : $Rev: 1687 $
 +   Last change on : $Date: 2011-01-22 18:44:21 +0200 (Сб, 22 янв 2011) $
 +   Last change by : $Author: Thief $
 +
 +*/
 +
 +#include "commonheaders.h"
 +
 +extern HINSTANCE g_hInst;
 +extern int onExtraImageApplying(WPARAM wParam, LPARAM lParam);
 +extern int onExtraImageListRebuild(WPARAM wParam, LPARAM lParam);
 +extern IconExtraColumn g_IECClear;
 +extern int clistIcon;
 +extern HANDLE g_hExtraIcon;
 +extern byte bContactMenuItems, bEnableClistIcon, bDrawNoGenderIcon;
 +const TCHAR *szAdvancedIcons[] = {LPGENT("Email"), LPGENT("Protocol"), LPGENT("SMS"), LPGENT("Advanced 1"), LPGENT("Advanced 2"), LPGENT("Web"), LPGENT("Client"), LPGENT("Advanced 3"), LPGENT("Advanced 4"), LPGENT("Advanced 5")};
 +const int cAdvancedIcons = sizeof(szAdvancedIcons) / sizeof(szAdvancedIcons[0]);
 +
 +INT_PTR CALLBACK DlgProcOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 +{
 +	static int bInitializing = 0;
 +	switch (msg)
 +	{
 +		case WM_INITDIALOG:
 +		{ 
 +			TranslateDialogDefault(hwndDlg);
 +			bInitializing = 1;
 +			if (g_hExtraIcon == NULL)
 +			{
 +				SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_ADDSTRING, 0, (LPARAM) TranslateT("Disabled"));
 +				for (int i = 0; i < cAdvancedIcons; i++)
 +				{
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_ADDSTRING, 0, (LPARAM) TranslateTS(szAdvancedIcons[i]));
 +				}
 +				
 +				if (bEnableClistIcon)
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_SETCURSEL, clistIcon, 0);
 +				else
 +					SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_SETCURSEL, 0, 0);
 +			}
 +			else
 +			{
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_USE_L), SW_HIDE);
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_ADVICON), SW_HIDE);
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_SLOT_L), SW_HIDE);
 +				ShowWindow(GetDlgItem(hwndDlg, IDC_NOTE_L), SW_HIDE);
 +			}
 +			CheckDlgButton(hwndDlg, IDC_MENUITEMS, DBGetContactSettingByte(NULL, MODULENAME, "MenuItems", 1) ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hwndDlg, IDC_DRAWUNDEFICON, bDrawNoGenderIcon ? BST_CHECKED : BST_UNCHECKED);
 +			
 +			bInitializing = 0;
 +			return TRUE;
 +		}
 +		
 +		case WM_COMMAND:
 +		{
 +			switch (LOWORD(wParam)) {
 +				case IDC_ADVICON:
 +				{
 +					if ((HIWORD(wParam) == EN_CHANGE) && (!bInitializing) || (HIWORD(wParam) == CBN_SELENDOK))
 +					{
 +						SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 +					}
 +				}
 +				break;
 +				case IDC_MENUITEMS:
 +				case IDC_DRAWUNDEFICON:
 +					SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
 +				break;
 +			}
 +		}
 +		break;
 +		
 +		case WM_NOTIFY:
 +		{
 +			if (((LPNMHDR)lParam)->idFrom == 0)
 +			switch (((LPNMHDR)lParam)->code)
 +			{
 +				case PSN_APPLY:
 +				{			   
 +					HANDLE hContact;
 +
 +					bDrawNoGenderIcon = IsDlgButtonChecked(hwndDlg, IDC_DRAWUNDEFICON);
 +					
 +					if (g_hExtraIcon == NULL)
 +					{
 +						clistIcon = SendMessage(GetDlgItem(hwndDlg, IDC_ADVICON), CB_GETCURSEL, 0, 0);
 +						DBWriteContactSettingByte(NULL, MODULENAME, "AdvancedIcon", clistIcon);
 +
 +						if (bEnableClistIcon)
 +						{
 +							hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +							while (hContact)
 +							{         
 +								CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&g_IECClear);
 +								hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0);
 +							}
 +						}
 +
 +						bEnableClistIcon = (clistIcon != 0);
 +						
 +						if (bEnableClistIcon)
 +						{					
 +							g_IECClear.ColumnType = clistIcon;
 +							onExtraImageListRebuild(0,0);
 +						}
 +					}
 +
 +					if (g_hExtraIcon != NULL || bEnableClistIcon)
 +					{					
 +						hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
 +						while (hContact)
 +						{         
 +							onExtraImageApplying((WPARAM)hContact,0);
 +							hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0);
 +						}
 +					}
 +					
 +					DBWriteContactSettingByte(NULL, MODULENAME, "ClistIcon", bEnableClistIcon);
 +					DBWriteContactSettingByte(NULL, MODULENAME, "NoGenderIcon", bDrawNoGenderIcon);
 +					DBWriteContactSettingByte(NULL, MODULENAME, "MenuItems", IsDlgButtonChecked(hwndDlg, IDC_MENUITEMS)); 
 +				}
 +				return TRUE;
 +			}
 +		}
 +		
 +		case WM_DESTROY:
 +		break;
 +	}
 +	return FALSE;
 +}
 +
 +int onOptInitialise(WPARAM wParam, LPARAM lParam)
 +{
 +	OPTIONSDIALOGPAGE odp;
 +	ZeroMemory(&odp, sizeof(odp));
 +	odp.cbSize = sizeof(odp);
 +	odp.position = 0;
 +	odp.hInstance = g_hInst;
 +	odp.ptszGroup = LPGENT("Plugins");
 +	odp.pszTemplate = MAKEINTRESOURCEA(IDD_GENDER_OPT);
 +	odp.ptszTitle = LPGENT("Gender");
 +	odp.pfnDlgProc = DlgProcOptions;
 +	odp.flags = ODPF_BOLDGROUPS|ODPF_TCHAR;
 +	CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
 +	
 +	return 0;
 +}
 diff --git a/plugins/Gender/resource.h b/plugins/Gender/resource.h new file mode 100644 index 0000000000..8ea2786991 --- /dev/null +++ b/plugins/Gender/resource.h @@ -0,0 +1,25 @@ +//{{NO_DEPENDENCIES}}
 +// Microsoft Visual C++ generated include file.
 +// Used by gender.rc
 +//
 +#define IDD_GENDER_OPT                  9
 +#define IDI_MALE                        101
 +#define IDI_FEMALE                      102
 +#define IDI_UNDEF                       103
 +#define IDC_ADVICON                     1001
 +#define IDC_MENUITEMS                   1002
 +#define IDC_DRAWUNDEFICON               1003
 +#define IDC_USE_L                       1004
 +#define IDC_SLOT_L                      1005
 +#define IDC_NOTE_L                      1006
 +
 +// Next default values for new objects
 +// 
 +#ifdef APSTUDIO_INVOKED
 +#ifndef APSTUDIO_READONLY_SYMBOLS
 +#define _APS_NEXT_RESOURCE_VALUE        104
 +#define _APS_NEXT_COMMAND_VALUE         40001
 +#define _APS_NEXT_CONTROL_VALUE         1007
 +#define _APS_NEXT_SYMED_VALUE           101
 +#endif
 +#endif
 | 
