summaryrefslogtreecommitdiff
path: root/plugins/UserInfoEx/svc_constants.cpp
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
commit48540940b6c28bb4378abfeb500ec45a625b37b6 (patch)
tree2ef294c0763e802f91d868bdef4229b6868527de /plugins/UserInfoEx/svc_constants.cpp
parent5c350913f011e119127baeb32a6aedeb4f0d33bc (diff)
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/UserInfoEx/svc_constants.cpp')
-rw-r--r--plugins/UserInfoEx/svc_constants.cpp471
1 files changed, 471 insertions, 0 deletions
diff --git a/plugins/UserInfoEx/svc_constants.cpp b/plugins/UserInfoEx/svc_constants.cpp
new file mode 100644
index 0000000000..2fb2316fb4
--- /dev/null
+++ b/plugins/UserInfoEx/svc_constants.cpp
@@ -0,0 +1,471 @@
+/*
+UserinfoEx plugin for Miranda IM
+
+Copyright:
+ฉ 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol
+
+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 : $HeadURL: https://userinfoex.googlecode.com/svn/trunk/svc_constants.cpp $
+Revision : $Revision: 187 $
+Last change on : $Date: 2010-09-08 16:05:54 +0400 (ะกั€, 08 ัะตะฝ 2010) $
+Last change by : $Author: ing.u.horn $
+
+===============================================================================
+*/
+#include "commonheaders.h"
+
+static IDSTRLIST TmplLanguages[] = {
+ { 0, LPGEN("Unspecified"), 0},
+ {55, LPGEN("Afrikaans"), 0},
+ {58, LPGEN("Albanian"), 0},
+ { 1, LPGEN("Arabic"), 0},
+ {59, LPGEN("Armenian"), 0},
+ {68, LPGEN("Azerbaijani"), 0},
+ {72, LPGEN("Belorussian"), 0},
+ { 2, LPGEN("Bhojpuri"), 0},
+ {56, LPGEN("Bosnian"), 0},
+ { 3, LPGEN("Bulgarian"), 0},
+ { 4, LPGEN("Burmese"), 0},
+ { 5, LPGEN("Cantonese"), 0},
+ { 6, LPGEN("Catalan"), 0},
+ {61, LPGEN("Chamorro"), 0},
+ { 7, LPGEN("Chinese"), 0},
+ { 8, LPGEN("Croatian"), 0},
+ { 9, LPGEN("Czech"), 0},
+ {10, LPGEN("Danish"), 0},
+ {11, LPGEN("Dutch"), 0},
+ {12, LPGEN("English"), 0},
+ {13, LPGEN("Esperanto"), 0},
+ {14, LPGEN("Estonian"), 0},
+ {15, LPGEN("Farsi"), 0},
+ {16, LPGEN("Finnish"), 0},
+ {17, LPGEN("French"), 0},
+ {18, LPGEN("Gaelic"), 0},
+ {19, LPGEN("German"), 0},
+ {20, LPGEN("Greek"), 0},
+ {70, LPGEN("Gujarati"), 0},
+ {21, LPGEN("Hebrew"), 0},
+ {22, LPGEN("Hindi"), 0},
+ {23, LPGEN("Hungarian"), 0},
+ {24, LPGEN("Icelandic"), 0},
+ {25, LPGEN("Indonesian"), 0},
+ {26, LPGEN("Italian"), 0},
+ {27, LPGEN("Japanese"), 0},
+ {28, LPGEN("Khmer"), 0},
+ {29, LPGEN("Korean"), 0},
+ {69, LPGEN("Kurdish"), 0},
+ {30, LPGEN("Lao"), 0},
+ {31, LPGEN("Latvian"), 0},
+ {32, LPGEN("Lithuanian"), 0},
+ {65, LPGEN("Macedonian"), 0},
+ {33, LPGEN("Malay"), 0},
+ {63, LPGEN("Mandarin"), 0},
+ {62, LPGEN("Mongolian"), 0},
+ {34, LPGEN("Norwegian"), 0},
+ {57, LPGEN("Persian"), 0},
+ {35, LPGEN("Polish"), 0},
+ {36, LPGEN("Portuguese"), 0},
+ {60, LPGEN("Punjabi"), 0},
+ {37, LPGEN("Romanian"), 0},
+ {38, LPGEN("Russian"), 0},
+ {39, LPGEN("Serbo-Croatian"), 0},
+ {66, LPGEN("Sindhi"), 0},
+ {40, LPGEN("Slovak"), 0},
+ {41, LPGEN("Slovenian"), 0},
+ {42, LPGEN("Somali"), 0},
+ {43, LPGEN("Spanish"), 0},
+ {44, LPGEN("Swahili"), 0},
+ {45, LPGEN("Swedish"), 0},
+ {46, LPGEN("Tagalog"), 0},
+ {64, LPGEN("Taiwanese"), 0},
+ {71, LPGEN("Tamil"), 0},
+ {47, LPGEN("Tatar"), 0},
+ {48, LPGEN("Thai"), 0},
+ {49, LPGEN("Turkish"), 0},
+ {50, LPGEN("Ukrainian"), 0},
+ {51, LPGEN("Urdu"), 0},
+ {52, LPGEN("Vietnamese"), 0},
+ {67, LPGEN("Welsh"), 0},
+ {53, LPGEN("Yiddish"), 0},
+ {54, LPGEN("Yoruba"), 0},
+};
+
+static IDSTRLIST TmplOccupations[] = {
+ { 0, LPGEN("Unspecified"), 0},
+ { 1, LPGEN("Academic"), 0},
+ { 2, LPGEN("Administrative"), 0},
+ { 3, LPGEN("Art/Entertainment"), 0},
+ { 4, LPGEN("College Student"), 0},
+ { 5, LPGEN("Computers"), 0},
+ { 6, LPGEN("Community & Social"), 0},
+ { 7, LPGEN("Education"), 0},
+ { 8, LPGEN("Engineering"), 0},
+ { 9, LPGEN("Financial Services"), 0},
+ {10, LPGEN("Government"), 0},
+ {11, LPGEN("High School Student"), 0},
+ {12, LPGEN("Home"), 0},
+ {13, LPGEN("ICQ - Providing Help"), 0},
+ {14, LPGEN("Law"), 0},
+ {15, LPGEN("Managerial"), 0},
+ {16, LPGEN("Manufacturing"), 0},
+ {17, LPGEN("Medical/Health"), 0},
+ {18, LPGEN("Military"), 0},
+ {19, LPGEN("Non-Government Organization"), 0},
+ {20, LPGEN("Professional"), 0},
+ {21, LPGEN("Retail"), 0},
+ {22, LPGEN("Retired"), 0},
+ {23, LPGEN("Science & Research"), 0},
+ {24, LPGEN("Sports"), 0},
+ {25, LPGEN("Technical"), 0},
+ {26, LPGEN("University Student"), 0},
+ {27, LPGEN("Web Building"), 0},
+ {99, LPGEN("Other Services"), 0}
+};
+
+static IDSTRLIST TmplInterests[] = {
+ { 0, LPGEN("Unspecified"), 0},
+ {100, LPGEN("Art"), 0},
+ {101, LPGEN("Cars"), 0},
+ {102, LPGEN("Celebrity Fans"), 0},
+ {103, LPGEN("Collections"), 0},
+ {104, LPGEN("Computers"), 0},
+ {105, LPGEN("Culture & Literature"), 0},
+ {106, LPGEN("Fitness"), 0},
+ {107, LPGEN("Games"), 0},
+ {108, LPGEN("Hobbies"), 0},
+ {109, LPGEN("ICQ - Providing Help"), 0},
+ {110, LPGEN("Internet"), 0},
+ {111, LPGEN("Lifestyle"), 0},
+ {112, LPGEN("Movies/TV"), 0},
+ {113, LPGEN("Music"), 0},
+ {114, LPGEN("Outdoor Activities"), 0},
+ {115, LPGEN("Parenting"), 0},
+ {116, LPGEN("Pets/Animals"), 0},
+ {117, LPGEN("Religion"), 0},
+ {118, LPGEN("Science/Technology"), 0},
+ {119, LPGEN("Skills"), 0},
+ {120, LPGEN("Sports"), 0},
+ {121, LPGEN("Web Design"), 0},
+ {122, LPGEN("Nature and Environment"), 0},
+ {123, LPGEN("News & Media"), 0},
+ {124, LPGEN("Government"), 0},
+ {125, LPGEN("Business & Economy"), 0},
+ {126, LPGEN("Mystics"), 0},
+ {127, LPGEN("Travel"), 0},
+ {128, LPGEN("Astronomy"), 0},
+ {129, LPGEN("Space"), 0},
+ {130, LPGEN("Clothing"), 0},
+ {131, LPGEN("Parties"), 0},
+ {132, LPGEN("Women"), 0},
+ {133, LPGEN("Social science"), 0},
+ {134, LPGEN("60's"), 0},
+ {135, LPGEN("70's"), 0},
+ {136, LPGEN("80's"), 0},
+ {137, LPGEN("50's"), 0},
+ {138, LPGEN("Finance and corporate"), 0},
+ {139, LPGEN("Entertainment"), 0},
+ {140, LPGEN("Consumer electronics"), 0},
+ {141, LPGEN("Retail stores"), 0},
+ {142, LPGEN("Health and beauty"), 0},
+ {143, LPGEN("Media"), 0},
+ {144, LPGEN("Household products"), 0},
+ {145, LPGEN("Mail order catalog"), 0},
+ {146, LPGEN("Business services"), 0},
+ {147, LPGEN("Audio and visual"), 0},
+ {148, LPGEN("Sporting and athletic"), 0},
+ {149, LPGEN("Publishing"), 0},
+ {150, LPGEN("Home automation"), 0}
+};
+
+static IDSTRLIST TmplAffiliations[] = {
+ { 0, LPGEN("Unspecified"), 0},
+ {200, LPGEN("Alumni Org."), 0},
+ {201, LPGEN("Charity Org."), 0},
+ {202, LPGEN("Club/Social Org."), 0},
+ {203, LPGEN("Community Org."), 0},
+ {204, LPGEN("Cultural Org."), 0},
+ {205, LPGEN("Fan Clubs"), 0},
+ {206, LPGEN("Fraternity/Sorority"), 0},
+ {207, LPGEN("Hobbyists Org."), 0},
+ {208, LPGEN("International Org."), 0},
+ {209, LPGEN("Nature and Environment Org."), 0},
+ {210, LPGEN("Professional Org."), 0},
+ {211, LPGEN("Scientific/Technical Org."), 0},
+ {212, LPGEN("Self Improvement Group"), 0},
+ {213, LPGEN("Spiritual/Religious Org."), 0},
+ {214, LPGEN("Sports Org."), 0},
+ {215, LPGEN("Support Org."), 0},
+ {216, LPGEN("Trade and Business Org."), 0},
+ {217, LPGEN("Union"), 0},
+ {218, LPGEN("Volunteer Org."), 0},
+ {299, LPGEN("Other"), 0},
+};
+
+static IDSTRLIST TmplPast[] = {
+ { 0, LPGEN("Unspecified"), 0},
+ {300, LPGEN("Elementary School"), 0},
+ {301, LPGEN("High School"), 0},
+ {302, LPGEN("College"), 0},
+ {303, LPGEN("University"), 0},
+ {304, LPGEN("Military"), 0},
+ {305, LPGEN("TmplPast Work Place"), 0},
+ {306, LPGEN("TmplPast Organization"), 0},
+ {399, LPGEN("Other"), 0}
+};
+
+static IDSTRLIST TmplMarital[]={
+ { 0, LPGEN("Unspecified"), 0},
+ {10, LPGEN("Single"), 0},
+ {11, LPGEN("Close relationships"), 0},
+ {12, LPGEN("Engaged"), 0},
+ {20, LPGEN("Married"), 0},
+ {30, LPGEN("Divorced"), 0},
+ {31, LPGEN("Separated"), 0},
+ {40, LPGEN("Widowed"), 0}
+};
+
+static IDSTRLIST TmplPrefixes[]={
+ { 0, LPGEN("Unspecified"), 0},
+ {'j', LPGEN("jun."), 0},
+ {'s', LPGEN("sen."), 0}
+};
+
+static IDSTRLIST *MyCountries = NULL;
+static UINT MyCountriesCount = 0;
+
+/**
+ * Class CService
+ * This class supersed miranda CreateServiceFunction
+ * it automtic call DestroyService in destructor
+ * it is used for OBJLIST<CService> services wich unregister
+ * all services during unload
+ *
+ * @param name - (const char *) service name to register
+ * @param serviceProc - (MIRANDASERVICE)
+ **/
+CService::CService( const char * name, MIRANDASERVICE serviceProc)
+{
+ m_hService = CreateServiceFunction(name, serviceProc);
+ m_name = m_hService ? name : NULL;
+}
+
+CService::~CService()
+{
+ if(this->m_hService)
+ DestroyServiceFunction(this->m_hService);
+}
+
+/**
+ * sort function for OBJLIST<CService>
+ *
+ * @param p1 - (const CService*)
+ * @param p2 - (const CService*)
+ **/
+static int compareServices( const CService* p1, const CService* p2 )
+{
+ return strcmp( p1->m_name, p2->m_name );
+}
+OBJLIST<CService> services( 30, compareServices );
+
+
+/**
+ * This is a sort procedure, which compares two items of an IDSTRLIST array.
+ * It is used by qsort in SvcConstantsTranslateList and cares about the
+ * locale, which was set up in OS. This prevents e.g. ฤ,ึ to be put onto
+ * the end of the list., but being sorted to the right position.
+ *
+ * @param p1 - (LPIDSTRLIST) first item to compare
+ * @param p2 - (LPIDSTRLIST) second item to compare
+ *
+ * returns -1, 0, 1 according to the comparison result of _tcscmp.
+ **/
+static int __cdecl ListSortProc(const LPIDSTRLIST p1, const LPIDSTRLIST p2)
+{
+ return lstrcmpi(p1->ptszTranslated, p2->ptszTranslated);
+}
+
+/**
+ * Translates the text of each item of an IDStrinList to users locale
+ * language and saves result in szTranslated member for later use and
+ * faster access to translated strings later.
+ *
+ * @param pList - pointer to list to translate
+ * @param nListCount - number of list items
+ *
+ * @return nothing
+ **/
+static VOID SvcConstantsTranslateList(LPIDSTRLIST pList, UINT nListCount/*, SortedList *pSorted*/)
+{
+ if (!pList[0].ptszTranslated)
+ {
+ for (UINT i = 0; i < nListCount; i++)
+ {
+ pList[i].ptszTranslated = (LPTSTR)CallService(MS_LANGPACK_PCHARTOTCHAR, 0, (LPARAM)pList[i].pszText);
+ }
+ // Ignore last item, if it is a "Other" item.
+ if (!strcmp(pList[nListCount-1].pszText, LPGEN("Other"))) nListCount--;
+
+ // Sort list according translated text and ignore first item.
+ qsort(pList+1, nListCount-1, sizeof(pList[0]),
+ (INT (*)(const VOID*, const VOID*))ListSortProc);
+ }
+}
+
+/**
+ * This function uses the country list provided by the core to create ower own one.
+ * The core's list is extended by a translated value. The cached translation is meant
+ * to improve speed uppon adding items to a combobox.
+ *
+ * @param pList - LPIDSTRLIST pointer, which retrieves the list pointer.
+ * @param pnListSize - pointer to an unsigned integer, which retrieves the number of items.
+ *
+ * @retval MIR_OK - indicates success
+ * @retval MIR_FAIL - indicates error
+ **/
+INT_PTR GetCountryList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ INT_PTR rc = MIR_OK;
+ if (!MyCountries)
+ {
+ struct CountryListEntry *country;
+
+ if (!CallService(MS_UTILS_GETCOUNTRYLIST, (WPARAM)&MyCountriesCount, (LPARAM)&country))
+ {
+ MyCountries = (IDSTRLIST*)mir_alloc(MyCountriesCount * sizeof(IDSTRLIST));
+ if (MyCountries)
+ {
+ for (UINT i = 0; i < MyCountriesCount; i++)
+ {
+ MyCountries[i].nID = country[i].id;
+ MyCountries[i].pszText = country[i].szName;
+ MyCountries[i].ptszTranslated = (LPTSTR)CallService(MS_LANGPACK_PCHARTOTCHAR, 0, (LPARAM)country[i].szName);
+ }
+ // Sort list according translated text and ignore first item.
+ qsort(MyCountries+1, MyCountriesCount-1, sizeof(MyCountries[0]),
+ (INT (*)(const VOID*, const VOID*))ListSortProc);
+ }
+ else
+ {
+ rc = MIR_FAIL;
+ }
+ }
+ else
+ {
+ rc = MIR_FAIL;
+ }
+ }
+ *pnListSize = MyCountriesCount;
+ *pList = MyCountries;
+ return rc;
+}
+
+INT_PTR GetMaritalList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplMarital);
+ *pList = TmplMarital;
+ SvcConstantsTranslateList(TmplMarital, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetLanguageList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplLanguages);
+ *pList = TmplLanguages;
+ SvcConstantsTranslateList(TmplLanguages, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetOccupationList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplOccupations);
+ *pList = TmplOccupations;
+ SvcConstantsTranslateList(TmplOccupations, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetInterestsList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplInterests);
+ *pList = TmplInterests;
+ SvcConstantsTranslateList(TmplInterests, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetPastList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplPast);
+ *pList = TmplPast;
+ SvcConstantsTranslateList(TmplPast, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetAffiliationsList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplAffiliations);
+ *pList = TmplAffiliations;
+ SvcConstantsTranslateList(TmplAffiliations, *pnListSize);
+ return MIR_OK;
+}
+
+INT_PTR GetNamePrefixList(LPUINT pnListSize, LPIDSTRLIST *pList)
+{
+ *pnListSize = SIZEOF(TmplPrefixes);
+ *pList = TmplPrefixes;
+ SvcConstantsTranslateList(TmplPrefixes, *pnListSize);
+ return MIR_OK;
+}
+
+VOID SvcConstantsLoadModule(VOID)
+{
+ UINT nListSize;
+ LPIDSTRLIST pList;
+
+ // precache translation
+ GetMaritalList(&nListSize, &pList);
+ GetLanguageList(&nListSize, &pList);
+ GetCountryList(&nListSize, &pList);
+ GetOccupationList(&nListSize, &pList);
+ GetInterestsList(&nListSize, &pList);
+ GetPastList(&nListSize, &pList);
+ GetAffiliationsList(&nListSize, &pList);
+ GetNamePrefixList(&nListSize, &pList);
+}
+
+static VOID FORCEINLINE SvcConstantsClearList(UINT pnListSize, LPIDSTRLIST pList)
+{
+ if (pList)
+ {
+ for (UINT i = 0; i < pnListSize; i++)
+ {
+ MIR_FREE(pList[i].ptszTranslated);
+ }
+ }
+}
+
+VOID SvcConstantsUnloadModule(VOID)
+{
+ SvcConstantsClearList(SIZEOF(TmplMarital), TmplMarital);
+ SvcConstantsClearList(SIZEOF(TmplLanguages), TmplLanguages);
+ SvcConstantsClearList(SIZEOF(TmplOccupations), TmplOccupations);
+ SvcConstantsClearList(SIZEOF(TmplInterests), TmplInterests);
+ SvcConstantsClearList(SIZEOF(TmplPast), TmplPast);
+ SvcConstantsClearList(SIZEOF(TmplAffiliations), TmplAffiliations);
+ SvcConstantsClearList(SIZEOF(TmplPrefixes), TmplPrefixes);
+ SvcConstantsClearList(MyCountriesCount, MyCountries);
+ MIR_FREE(MyCountries);
+} \ No newline at end of file