diff options
Diffstat (limited to 'icqj_s7_sss_mod/changeinfo')
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/changeinfo.h | 119 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/constants.c | 661 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/db.c | 230 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/dlgproc.c | 561 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/editlist.c | 176 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/editstring.c | 365 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/expandst.ico | bin | 0 -> 318 bytes | |||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/main.c | 61 | ||||
-rw-r--r-- | icqj_s7_sss_mod/changeinfo/upload.c | 205 |
9 files changed, 2378 insertions, 0 deletions
diff --git a/icqj_s7_sss_mod/changeinfo/changeinfo.h b/icqj_s7_sss_mod/changeinfo/changeinfo.h new file mode 100644 index 0000000..30a32a3 --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/changeinfo.h @@ -0,0 +1,119 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 36 $
+// Last change on : $Date: 2007-08-05 03:45:10 +0300 (Вс, 05 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+
+#ifndef __CHANGEINFO_H
+#define __CHANGEINFO_H
+
+
+#ifndef AW_SLIDE
+#define SPI_GETCOMBOBOXANIMATION 0x1004
+#define AW_SLIDE 0x40000
+#define AW_ACTIVATE 0x20000
+#define AW_VER_POSITIVE 0x4
+#define UDM_SETPOS32 (WM_USER+113)
+#define UDM_GETPOS32 (WM_USER+114)
+#endif
+
+
+#define LI_DIVIDER 0
+#define LI_STRING 1
+#define LI_LIST 2
+#define LI_LONGSTRING 3
+#define LI_NUMBER 4
+#define LIM_TYPE 0x0000FFFF
+#define LIF_ZEROISVALID 0x80000000
+#define LIF_SIGNED 0x40000000
+#define LIF_PASSWORD 0x20000000
+#define LIF_CHANGEONLY 0x10000000
+
+char Password[10];
+HANDLE hUpload[2];
+HWND hwndList;
+HFONT hListFont;
+int iEditItem;
+
+typedef struct {
+ char *szDescription;
+ unsigned displayType; //LI_ constant
+ int dbType; //DBVT_ constant
+ char *szDbSetting;
+ void *pList;
+ int listCount;
+ LPARAM value;
+ int changed;
+} SettingItem;
+
+typedef struct {
+ int id;
+ char *szValue;
+} ListTypeDataItem;
+
+// contants.c
+extern SettingItem setting[];
+extern const int settingCount;
+
+//main.c
+int InitChangeDetails(WPARAM wParam,LPARAM lParam);
+
+//dlgproc.c
+BOOL CALLBACK ChangeInfoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//db.c
+void LoadSettingsFromDb(int keepChanged);
+void FreeStoredDbSettings(void);
+void ClearChangeFlags(void);
+int ChangesMade(void);
+int SaveSettingsToDb(HWND hwndDlg);
+
+//editstring.c
+void BeginStringEdit(int iItem,RECT *rc,int i,WORD wVKey);
+void EndStringEdit(int save);
+int IsStringEditWindow(HWND hwnd);
+char *BinaryToEscapes(char *str);
+
+//editlist.c
+void BeginListEdit(int iItem,RECT *rc,int i,WORD wVKey);
+void EndListEdit(int save);
+int IsListEditWindow(HWND hwnd);
+
+//upload.c
+int StringToListItemId(const char *szSetting,int def);
+int UploadSettings(HWND hwndParent);
+
+
+#endif /* __CHANGEINFO_H */
diff --git a/icqj_s7_sss_mod/changeinfo/constants.c b/icqj_s7_sss_mod/changeinfo/constants.c new file mode 100644 index 0000000..2857e1c --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/constants.c @@ -0,0 +1,661 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 36 $
+// Last change on : $Date: 2007-08-05 03:45:10 +0300 (Вс, 05 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+static ListTypeDataItem countries[]={
+ {0 ,LPGEN("Unspecified")},
+ {9999,LPGEN("Other")},
+ {93 ,LPGEN("Afghanistan")},
+ {355 ,LPGEN("Albania")},
+ {213 ,LPGEN("Algeria")},
+ {684 ,LPGEN("American Samoa")},
+ {376 ,LPGEN("Andorra")},
+ {244 ,LPGEN("Angola")},
+ {101 ,LPGEN("Anguilla")},
+ {102 ,LPGEN("Antigua and Barbuda")},
+ {5902,LPGEN("Antilles")},
+ {54 ,LPGEN("Argentina")},
+ {374 ,LPGEN("Armenia")},
+ {297 ,LPGEN("Aruba")},
+ {247 ,LPGEN("Ascension Island")},
+ {61 ,LPGEN("Australia")},
+ {43 ,LPGEN("Austria")},
+ {994 ,LPGEN("Azerbaijan")},
+ {103 ,LPGEN("Bahamas")},
+ {973 ,LPGEN("Bahrain")},
+ {880 ,LPGEN("Bangladesh")},
+ {104 ,LPGEN("Barbados")},
+ {120 ,LPGEN("Barbuda")},
+ {375 ,LPGEN("Belarus")},
+ {32 ,LPGEN("Belgium")},
+ {501 ,LPGEN("Belize")},
+ {229 ,LPGEN("Benin")},
+ {105 ,LPGEN("Bermuda")},
+ {975 ,LPGEN("Bhutan")},
+ {591 ,LPGEN("Bolivia")},
+ {387 ,LPGEN("Bosnia and Herzegovina")},
+ {267 ,LPGEN("Botswana")},
+ {55 ,LPGEN("Brazil")},
+ {106 ,LPGEN("British Virgin Islands")},
+ {673 ,LPGEN("Brunei")},
+ {359 ,LPGEN("Bulgaria")},
+ {226 ,LPGEN("Burkina Faso")},
+ {257 ,LPGEN("Burundi")},
+ {855 ,LPGEN("Cambodia")},
+ {237 ,LPGEN("Cameroon")},
+ {107 ,LPGEN("Canada")},
+ {178 ,LPGEN("Canary Islands")},
+ {238 ,LPGEN("Cape Verde Islands")},
+ {108 ,LPGEN("Cayman Islands")},
+ {236 ,LPGEN("Central African Republic")},
+ {235 ,LPGEN("Chad")},
+ {56 ,LPGEN("Chile, Republic of")},
+ {86 ,LPGEN("China")},
+ {672 ,LPGEN("Christmas Island")},
+ {6101,LPGEN("Cocos-Keeling Islands")},
+ {6102,LPGEN("Cocos (Keeling) Islands")},
+ {57 ,LPGEN("Colombia")},
+ {2691,LPGEN("Comoros")},
+ {243 ,LPGEN("Congo, Democratic Republic of (Zaire)")},
+ {242 ,LPGEN("Congo, Republic of the")},
+ {682 ,LPGEN("Cook Islands")},
+ {506 ,LPGEN("Costa Rica")},
+ {225 ,LPGEN("Cote d'Ivoire (Ivory Coast)")},
+ {385 ,LPGEN("Croatia")},
+ {53 ,LPGEN("Cuba")},
+ {357 ,LPGEN("Cyprus")},
+ {420 ,LPGEN("Czech Republic")},
+ {45 ,LPGEN("Denmark")},
+ {246 ,LPGEN("Diego Garcia")},
+ {253 ,LPGEN("Djibouti")},
+ {109 ,LPGEN("Dominica")},
+ {110 ,LPGEN("Dominican Republic")},
+ {593 ,LPGEN("Ecuador")},
+ {20 ,LPGEN("Egypt")},
+ {503 ,LPGEN("El Salvador")},
+ {240 ,LPGEN("Equatorial Guinea")},
+ {291 ,LPGEN("Eritrea")},
+ {372 ,LPGEN("Estonia")},
+ {251 ,LPGEN("Ethiopia")},
+ {298 ,LPGEN("Faeroe Islands")},
+ {500 ,LPGEN("Falkland Islands")},
+ {679 ,LPGEN("Fiji")},
+ {358 ,LPGEN("Finland")},
+ {33 ,LPGEN("France")},
+ {5901,LPGEN("French Antilles")},
+ {594 ,LPGEN("French Guiana")},
+ {689 ,LPGEN("French Polynesia")},
+ {241 ,LPGEN("Gabon")},
+ {220 ,LPGEN("Gambia")},
+ {995 ,LPGEN("Georgia")},
+ {49 ,LPGEN("Germany")},
+ {233 ,LPGEN("Ghana")},
+ {350 ,LPGEN("Gibraltar")},
+ {30 ,LPGEN("Greece")},
+ {299 ,LPGEN("Greenland")},
+ {111 ,LPGEN("Grenada")},
+ {590 ,LPGEN("Guadeloupe")},
+ {671 ,LPGEN("Guam, US Territory of")},
+ {502 ,LPGEN("Guatemala")},
+ {224 ,LPGEN("Guinea")},
+ {245 ,LPGEN("Guinea-Bissau")},
+ {592 ,LPGEN("Guyana")},
+ {509 ,LPGEN("Haiti")},
+ {504 ,LPGEN("Honduras")},
+ {852 ,LPGEN("Hong Kong")},
+ {36 ,LPGEN("Hungary")},
+ {354 ,LPGEN("Iceland")},
+ {91 ,LPGEN("India")},
+ {62 ,LPGEN("Indonesia")},
+ {98 ,LPGEN("Iran (Islamic Republic of)")},
+ {964 ,LPGEN("Iraq")},
+ {353 ,LPGEN("Ireland")},
+ {972 ,LPGEN("Israel")},
+ {39 ,LPGEN("Italy")},
+ {112 ,LPGEN("Jamaica")},
+ {81 ,LPGEN("Japan")},
+ {962 ,LPGEN("Jordan")},
+ {705 ,LPGEN("Kazakhstan")},
+ {254 ,LPGEN("Kenya")},
+ {686 ,LPGEN("Kiribati")},
+ {850 ,LPGEN("Korea, North")},
+ {82 ,LPGEN("Korea, South")},
+ {965 ,LPGEN("Kuwait")},
+ {706 ,LPGEN("Kyrgyzstan")},
+ {856 ,LPGEN("Laos")},
+ {371 ,LPGEN("Latvia")},
+ {961 ,LPGEN("Lebanon")},
+ {266 ,LPGEN("Lesotho")},
+ {231 ,LPGEN("Liberia")},
+ {218 ,LPGEN("Libyan Arab Jamahiriya")},
+ {4101,LPGEN("Liechtenstein")},
+ {370 ,LPGEN("Lithuania")},
+ {352 ,LPGEN("Luxembourg")},
+ {853 ,LPGEN("Macau")},
+ {389 ,LPGEN("Macedonia (F.Y.R.O.M.)")},
+ {261 ,LPGEN("Madagascar")},
+ {265 ,LPGEN("Malawi")},
+ {60 ,LPGEN("Malaysia")},
+ {960 ,LPGEN("Maldives")},
+ {223 ,LPGEN("Mali")},
+ {356 ,LPGEN("Malta")},
+ {692 ,LPGEN("Marshall Islands")},
+ {596 ,LPGEN("Martinique")},
+ {222 ,LPGEN("Mauritania")},
+ {230 ,LPGEN("Mauritius")},
+ {269 ,LPGEN("Mayotte Island")},
+ {52 ,LPGEN("Mexico")},
+ {691 ,LPGEN("Micronesia, Federated States of")},
+ {373 ,LPGEN("Moldova, Republic of")},
+ {377 ,LPGEN("Monaco")},
+ {976 ,LPGEN("Mongolia")},
+ {113 ,LPGEN("Montserrat")},
+ {212 ,LPGEN("Morocco")},
+ {258 ,LPGEN("Mozambique")},
+ {95 ,LPGEN("Myanmar")},
+ {264 ,LPGEN("Namibia")},
+ {674 ,LPGEN("Nauru")},
+ {977 ,LPGEN("Nepal")},
+ {31 ,LPGEN("Netherlands")},
+ {599 ,LPGEN("Netherlands Antilles")},
+ {114 ,LPGEN("Nevis")},
+ {687 ,LPGEN("New Caledonia")},
+ {64 ,LPGEN("New Zealand")},
+ {505 ,LPGEN("Nicaragua")},
+ {227 ,LPGEN("Niger")},
+ {234 ,LPGEN("Nigeria")},
+ {683 ,LPGEN("Niue")},
+ {6722,LPGEN("Norfolk Island")},
+ {47 ,LPGEN("Norway")},
+ {968 ,LPGEN("Oman")},
+ {92 ,LPGEN("Pakistan")},
+ {680 ,LPGEN("Palau")},
+ {507 ,LPGEN("Panama")},
+ {675 ,LPGEN("Papua New Guinea")},
+ {595 ,LPGEN("Paraguay")},
+ {51 ,LPGEN("Peru")},
+ {63 ,LPGEN("Philippines")},
+ {48 ,LPGEN("Poland")},
+ {351 ,LPGEN("Portugal")},
+ {121 ,LPGEN("Puerto Rico")},
+ {974 ,LPGEN("Qatar")},
+ {262 ,LPGEN("Reunion Island")},
+ {40 ,LPGEN("Romania")},
+ {6701,LPGEN("Rota Island")},
+ {7 ,LPGEN("Russia")},
+ {250 ,LPGEN("Rwanda")},
+ {290 ,LPGEN("Saint Helena")},
+ {115 ,LPGEN("Saint Kitts")},
+ {1141,LPGEN("Saint Kitts and Nevis")},
+ {122 ,LPGEN("Saint Lucia")},
+ {508 ,LPGEN("Saint Pierre and Miquelon")},
+ {116 ,LPGEN("Saint Vincent and the Grenadines")},
+ {670 ,LPGEN("Saipan Island")},
+ {378 ,LPGEN("San Marino")},
+ {239 ,LPGEN("Sao Tome and Principe")},
+ {966 ,LPGEN("Saudi Arabia")},
+ {442 ,LPGEN("Scotland")},
+ {221 ,LPGEN("Senegal")},
+ {248 ,LPGEN("Seychelles")},
+ {232 ,LPGEN("Sierra Leone")},
+ {65 ,LPGEN("Singapore")},
+ {421 ,LPGEN("Slovakia")},
+ {386 ,LPGEN("Slovenia")},
+ {677 ,LPGEN("Solomon Islands")},
+ {252 ,LPGEN("Somalia")},
+ {27 ,LPGEN("South Africa")},
+ {34 ,LPGEN("Spain")},
+ {94 ,LPGEN("Sri Lanka")},
+ {249 ,LPGEN("Sudan")},
+ {597 ,LPGEN("Suriname")},
+ {268 ,LPGEN("Swaziland")},
+ {46 ,LPGEN("Sweden")},
+ {41 ,LPGEN("Switzerland")},
+ {963 ,LPGEN("Syrian Arab Republic")},
+ {886 ,LPGEN("Taiwan")},
+ {708 ,LPGEN("Tajikistan")},
+ {255 ,LPGEN("Tanzania")},
+ {66 ,LPGEN("Thailand")},
+ {6702,LPGEN("Tinian Island")},
+ {228 ,LPGEN("Togo")},
+ {690 ,LPGEN("Tokelau")},
+ {676 ,LPGEN("Tonga")},
+ {117 ,LPGEN("Trinidad and Tobago")},
+ {216 ,LPGEN("Tunisia")},
+ {90 ,LPGEN("Turkey")},
+ {709 ,LPGEN("Turkmenistan")},
+ {118 ,LPGEN("Turks and Caicos Islands")},
+ {688 ,LPGEN("Tuvalu")},
+ {256 ,LPGEN("Uganda")},
+ {380 ,LPGEN("Ukraine")},
+ {971 ,LPGEN("United Arab Emirates")},
+ {44 ,LPGEN("United Kingdom")},
+ {598 ,LPGEN("Uruguay")},
+ {1 ,LPGEN("USA")},
+ {711 ,LPGEN("Uzbekistan")},
+ {678 ,LPGEN("Vanuatu")},
+ {379 ,LPGEN("Vatican City")},
+ {58 ,LPGEN("Venezuela")},
+ {84 ,LPGEN("Vietnam")},
+ {123 ,LPGEN("Virgin Islands (USA)")},
+ {441 ,LPGEN("Wales")},
+ {681 ,LPGEN("Wallis and Futuna Islands")},
+ {685 ,LPGEN("Western Samoa")},
+ {967 ,LPGEN("Yemen")},
+ {381 ,LPGEN("Yugoslavia")},
+ {3811,LPGEN("Yugoslavia - Serbia")},
+ {382 ,LPGEN("Yugoslavia - Montenegro")},
+ {260 ,LPGEN("Zambia")},
+ {263 ,LPGEN("Zimbabwe")},
+};
+
+static ListTypeDataItem timezones[]={
+ {-100,LPGEN("Unspecified")},
+ {24 ,LPGEN("GMT-12:00 Eniwetok; Kwajalein")},
+ {23 ,LPGEN("GMT-11:30")},
+ {22 ,LPGEN("GMT-11:00 Midway Island; Samoa")},
+ {21 ,LPGEN("GMT-10:30")},
+ {20 ,LPGEN("GMT-10:00 Hawaii")},
+ {19 ,LPGEN("GMT-9:30")},
+ {18 ,LPGEN("GMT-9:00 Alaska")},
+ {17 ,LPGEN("GMT-8:30")},
+ {16 ,LPGEN("GMT-8:00 Pacific Time; Tijuana")},
+ {15 ,LPGEN("GMT-7:30")},
+ {14 ,LPGEN("GMT-7:00 Arizona; Mountain Time")},
+ {13 ,LPGEN("GMT-6:30")},
+ {12 ,LPGEN("GMT-6:00 Central Time; Central America; Saskatchewan")},
+ {11 ,LPGEN("GMT-5:30")},
+ {10 ,LPGEN("GMT-5:00 Eastern Time; Bogota; Lima; Quito")},
+ {9 ,LPGEN("GMT-4:30")},
+ {8 ,LPGEN("GMT-4:00 Atlantic Time; Santiago; Caracas; La Paz")},
+ {7 ,LPGEN("GMT-3:30 Newfoundland")},
+ {6 ,LPGEN("GMT-3:00 Greenland; Buenos Aires; Georgetown")},
+ {5 ,LPGEN("GMT-2:30")},
+ {4 ,LPGEN("GMT-2:00 Mid-Atlantic")},
+ {3 ,LPGEN("GMT-1:30")},
+ {2 ,LPGEN("GMT-1:00 Cape Verde Islands; Azores")},
+ {1 ,LPGEN("GMT-0:30")},
+ {0 ,LPGEN("GMT+0:00 London; Dublin; Edinburgh; Lisbon; Casablanca")},
+ {-1 ,LPGEN("GMT+0:30")},
+ {-2 ,LPGEN("GMT+1:00 Central European Time; West Central Africa; Warsaw")},
+ {-3 ,LPGEN("GMT+1:30")},
+ {-4 ,LPGEN("GMT+2:00 Jerusalem; Helsinki; Harare; Cairo; Bucharest; Athens")},
+ {-5 ,LPGEN("GMT+2:30")},
+ {-6 ,LPGEN("GMT+3:00 Moscow; St. Petersburg; Nairobi; Kuwait; Baghdad")},
+ {-7 ,LPGEN("GMT+3:30 Tehran")},
+ {-8 ,LPGEN("GMT+4:00 Baku; Tbilisi; Yerevan; Abu Dhabi; Muscat")},
+ {-9 ,LPGEN("GMT+4:30 Kabul")},
+ {-10 ,LPGEN("GMT+5:00 Calcutta; Chennai; Mumbai; New Delhi; Ekaterinburg")},
+ {-11 ,LPGEN("GMT+5:30")},
+ {-12 ,LPGEN("GMT+6:00 Astana; Dhaka; Almaty; Novosibirsk; Sri Jayawardenepura")},
+ {-13 ,LPGEN("GMT+6:30 Rangoon")},
+ {-14 ,LPGEN("GMT+7:00 Bankok; Hanoi; Jakarta; Krasnoyarsk")},
+ {-15 ,LPGEN("GMT+7:30")},
+ {-16 ,LPGEN("GMT+8:00 Perth; Taipei; Singapore; Hong Kong; Beijing")},
+ {-17 ,LPGEN("GMT+8:30")},
+ {-18 ,LPGEN("GMT+9:00 Tokyo; Osaka; Seoul; Sapporo; Yakutsk")},
+ {-19 ,LPGEN("GMT+9:30 Darwin; Adelaide")},
+ {-20 ,LPGEN("GMT+10:00 East Australia; Guam; Vladivostok")},
+ {-21 ,LPGEN("GMT+10:30")},
+ {-22 ,LPGEN("GMT+11:00 Magadan; Solomon Is.; New Caledonia")},
+ {-23 ,LPGEN("GMT+11:30")},
+ {-24 ,LPGEN("GMT+12:00 Auckland; Wellington; Fiji; Kamchatka; Marshall Is.")},
+};
+
+static ListTypeDataItem occupations[] = {
+ {0, LPGEN("Unspecified")},
+ {1, LPGEN("Academic")},
+ {2, LPGEN("Administrative")},
+ {3, LPGEN("Art/Entertainment")},
+ {4, LPGEN("College Student")},
+ {5, LPGEN("Computers")},
+ {6, LPGEN("Community & Social")},
+ {7, LPGEN("Education")},
+ {8, LPGEN("Engineering")},
+ {9, LPGEN("Financial Services")},
+ {10, LPGEN("Government")},
+ {11, LPGEN("High School Student")},
+ {12, LPGEN("Home")},
+ {13, LPGEN("ICQ - Providing Help")},
+ {14, LPGEN("Law")},
+ {15, LPGEN("Managerial")},
+ {16, LPGEN("Manufacturing")},
+ {17, LPGEN("Medical/Health")},
+ {18, LPGEN("Military")},
+ {19, LPGEN("Non-Government Organization")},
+ {20, LPGEN("Professional")},
+ {21, LPGEN("Retail")},
+ {22, LPGEN("Retired")},
+ {23, LPGEN("Science & Research")},
+ {24, LPGEN("Sports")},
+ {25, LPGEN("Technical")},
+ {26, LPGEN("University Student")},
+ {27, LPGEN("Web Building")},
+ {99, LPGEN("Other Services")}
+};
+
+static ListTypeDataItem genders[]={
+ {0,LPGEN("Unspecified")},
+ {'M',LPGEN("Male")},
+ {'F',LPGEN("Female")},
+};
+
+static ListTypeDataItem months[]={
+ {0, LPGEN("Unspecified")},
+ {1, LPGEN("January")},
+ {2, LPGEN("February")},
+ {3, LPGEN("March")},
+ {4, LPGEN("April")},
+ {5, LPGEN("May")},
+ {6, LPGEN("June")},
+ {7, LPGEN("July")},
+ {8, LPGEN("August")},
+ {9, LPGEN("September")},
+ {10,LPGEN("October")},
+ {11,LPGEN("November")},
+ {12,LPGEN("December")},
+};
+
+static ListTypeDataItem languages[]={
+ {0, LPGEN("None")},
+ {55,LPGEN("Afrikaans")},
+ {58,LPGEN("Albanian")},
+ {1, LPGEN("Arabic")},
+ {59,LPGEN("Armenian")},
+ {68,LPGEN("Azerbaijani")},
+ {72,LPGEN("Belorussian")},
+ {2, LPGEN("Bhojpuri")},
+ {56,LPGEN("Bosnian")},
+ {3, LPGEN("Bulgarian")},
+ {4, LPGEN("Burmese")},
+ {5, LPGEN("Cantonese")},
+ {6, LPGEN("Catalan")},
+ {61,LPGEN("Chamorro")},
+ {7, LPGEN("Chinese")},
+ {8, LPGEN("Croatian")},
+ {9, LPGEN("Czech")},
+ {10,LPGEN("Danish")},
+ {11,LPGEN("Dutch")},
+ {12,LPGEN("English")},
+ {13,LPGEN("Esperanto")},
+ {14,LPGEN("Estonian")},
+ {15,LPGEN("Farci")},
+ {16,LPGEN("Finnish")},
+ {17,LPGEN("French")},
+ {18,LPGEN("Gaelic")},
+ {19,LPGEN("German")},
+ {20,LPGEN("Greek")},
+ {70,LPGEN("Gujarati")},
+ {21,LPGEN("Hebrew")},
+ {22,LPGEN("Hindi")},
+ {23,LPGEN("Hungarian")},
+ {24,LPGEN("Icelandic")},
+ {25,LPGEN("Indonesian")},
+ {26,LPGEN("Italian")},
+ {27,LPGEN("Japanese")},
+ {28,LPGEN("Khmer")},
+ {29,LPGEN("Korean")},
+ {69,LPGEN("Kurdish")},
+ {30,LPGEN("Lao")},
+ {31,LPGEN("Latvian")},
+ {32,LPGEN("Lithuanian")},
+ {65,LPGEN("Macedonian")},
+ {33,LPGEN("Malay")},
+ {63,LPGEN("Mandarin")},
+ {62,LPGEN("Mongolian")},
+ {34,LPGEN("Norwegian")},
+ {57,LPGEN("Persian")},
+ {35,LPGEN("Polish")},
+ {36,LPGEN("Portuguese")},
+ {60,LPGEN("Punjabi")},
+ {37,LPGEN("Romanian")},
+ {38,LPGEN("Russian")},
+ {39,LPGEN("Serbo-Croatian")},
+ {66,LPGEN("Sindhi")},
+ {40,LPGEN("Slovak")},
+ {41,LPGEN("Slovenian")},
+ {42,LPGEN("Somali")},
+ {43,LPGEN("Spanish")},
+ {44,LPGEN("Swahili")},
+ {45,LPGEN("Swedish")},
+ {46,LPGEN("Tagalog")},
+ {64,LPGEN("Taiwaness")},
+ {71,LPGEN("Tamil")},
+ {47,LPGEN("Tatar")},
+ {48,LPGEN("Thai")},
+ {49,LPGEN("Turkish")},
+ {50,LPGEN("Ukrainian")},
+ {51,LPGEN("Urdu")},
+ {52,LPGEN("Vietnamese")},
+ {67,LPGEN("Welsh")},
+ {53,LPGEN("Yiddish")},
+ {54,LPGEN("Yoruba")},
+};
+
+static ListTypeDataItem interests[]={
+ {0, LPGEN("Unspecified")},
+ {100, LPGEN("Art")},
+ {101, LPGEN("Cars")},
+ {102, LPGEN("Celebrity Fans")},
+ {103, LPGEN("Collections")},
+ {104, LPGEN("Computers")},
+ {105, LPGEN("Culture & Literature")},
+ {106, LPGEN("Fitness")},
+ {107, LPGEN("Games")},
+ {108, LPGEN("Hobbies")},
+ {109, LPGEN("ICQ - Providing Help")},
+ {110, LPGEN("Internet")},
+ {111, LPGEN("Lifestyle")},
+ {112, LPGEN("Movies/TV")},
+ {113, LPGEN("Music")},
+ {114, LPGEN("Outdoor Activities")},
+ {115, LPGEN("Parenting")},
+ {116, LPGEN("Pets/Animals")},
+ {117, LPGEN("Religion")},
+ {118, LPGEN("Science/Technology")},
+ {119, LPGEN("Skills")},
+ {120, LPGEN("Sports")},
+ {121, LPGEN("Web Design")},
+ {122, LPGEN("Nature and Environment")},
+ {123, LPGEN("News & Media")},
+ {124, LPGEN("Government")},
+ {125, LPGEN("Business & Economy")},
+ {126, LPGEN("Mystics")},
+ {127, LPGEN("Travel")},
+ {128, LPGEN("Astronomy")},
+ {129, LPGEN("Space")},
+ {130, LPGEN("Clothing")},
+ {131, LPGEN("Parties")},
+ {132, LPGEN("Women")},
+ {133, LPGEN("Social science")},
+ {134, LPGEN("60's")},
+ {135, LPGEN("70's")},
+ {136, LPGEN("80's")},
+ {137, LPGEN("50's")},
+ {138, LPGEN("Finance and corporate")},
+ {139, LPGEN("Entertainment")},
+ {140, LPGEN("Consumer electronics")},
+ {141, LPGEN("Retail stores")},
+ {142, LPGEN("Health and beauty")},
+ {143, LPGEN("Media")},
+ {144, LPGEN("Household products")},
+ {145, LPGEN("Mail order catalog")},
+ {146, LPGEN("Business services")},
+ {147, LPGEN("Audio and visual")},
+ {148, LPGEN("Sporting and athletic")},
+ {149, LPGEN("Publishing")},
+ {150, LPGEN("Home automation")}
+};
+
+static ListTypeDataItem pastbackground[]={
+ {0, LPGEN("Unspecified")},
+ {300, LPGEN("Elementary School")},
+ {301, LPGEN("High School")},
+ {302, LPGEN("College")},
+ {303, LPGEN("University")},
+ {304, LPGEN("Military")},
+ {305, LPGEN("Past Work Place")},
+ {306, LPGEN("Past Organization")},
+ {399, LPGEN("Other")}
+};
+
+static ListTypeDataItem affiliation[]={
+ {0, LPGEN("Unspecified")},
+ {200, LPGEN("Alumni Org.")},
+ {201, LPGEN("Charity Org.")},
+ {202, LPGEN("Club/Social Org.")},
+ {203, LPGEN("Community Org.")},
+ {204, LPGEN("Cultural Org.")},
+ {205, LPGEN("Fan Clubs")},
+ {206, LPGEN("Fraternity/Sorority")},
+ {207, LPGEN("Hobbyists Org.")},
+ {208, LPGEN("International Org.")},
+ {209, LPGEN("Nature and Environment Org.")},
+ {210, LPGEN("Professional Org.")},
+ {211, LPGEN("Scientific/Technical Org.")},
+ {212, LPGEN("Self Improvement Group")},
+ {213, LPGEN("Spiritual/Religious Org.")},
+ {214, LPGEN("Sports Org.")},
+ {215, LPGEN("Support Org.")},
+ {216, LPGEN("Trade and Business Org.")},
+ {217, LPGEN("Union")},
+ {218, LPGEN("Volunteer Org.")},
+ {299, LPGEN("Other")},
+};
+
+static ListTypeDataItem maritalstatuses[]={
+ {0, LPGEN("Unspecified")},
+ {10, LPGEN("Single")},
+ {11, LPGEN("Close relationships")},
+ {12, LPGEN("Engaged")},
+ {20, LPGEN("Married")},
+ {30, LPGEN("Divorced")},
+ {31, LPGEN("Separated")},
+ {40, LPGEN("Widowed")}
+};
+
+
+const int ageRange[]={13,0x7FFF}; // 14, 130
+const int yearRange[]={1753,0x7FFF}; // 1880, 2000
+const int dayRange[]={1,31};
+
+
+SettingItem setting[]={
+ //personal
+ {LPGEN("Personal"), LI_DIVIDER},
+ {LPGEN("Nickname"), LI_STRING, DBVT_ASCIIZ, "Nick"},
+ {LPGEN("First name"), LI_STRING, DBVT_ASCIIZ, "FirstName"},
+ {LPGEN("Last name"), LI_STRING, DBVT_ASCIIZ, "LastName"},
+ {LPGEN("Age"), LI_NUMBER, DBVT_WORD, "Age", (void*)ageRange},
+ {LPGEN("Gender"), LI_LIST, DBVT_BYTE, "Gender", genders, sizeof(genders)/sizeof(genders[0])},
+ {LPGEN("About"), LI_LONGSTRING, DBVT_ASCIIZ, "About"},
+ //password
+ {LPGEN("Password"), LI_DIVIDER},
+ {LPGEN("Password"), LI_STRING|LIF_PASSWORD,DBVT_ASCIIZ, "Password"},
+ //contact
+ {LPGEN("Contact"), LI_DIVIDER},
+ {LPGEN("Primary e-mail"), LI_STRING, DBVT_ASCIIZ, "e-mail"},
+ {LPGEN("Secondary e-mail"), LI_STRING, DBVT_ASCIIZ, "e-mail0"},
+ {LPGEN("Tertiary e-mail"), LI_STRING, DBVT_ASCIIZ, "e-mail1"},
+ {LPGEN("Homepage"), LI_STRING, DBVT_ASCIIZ, "Homepage"},
+ {LPGEN("Street"), LI_STRING, DBVT_ASCIIZ, "Street"},
+ {LPGEN("City"), LI_STRING, DBVT_ASCIIZ, "City"},
+ {LPGEN("State"), LI_STRING, DBVT_ASCIIZ, "State"},
+ {LPGEN("ZIP/postcode"), LI_STRING, DBVT_ASCIIZ, "ZIP"},
+ {LPGEN("Country"), LI_LIST, DBVT_WORD, "Country", countries, sizeof(countries)/sizeof(countries[0])},
+ {LPGEN("Phone number"), LI_STRING, DBVT_ASCIIZ, "Phone"},
+ {LPGEN("Fax number"), LI_STRING, DBVT_ASCIIZ, "Fax"},
+ {LPGEN("Cellular number"),LI_STRING, DBVT_ASCIIZ, "Cellular"},
+ //more
+ {LPGEN("Personal Detail"),LI_DIVIDER},
+ {LPGEN("Timezone"), LI_LIST|LIF_ZEROISVALID|LIF_SIGNED,DBVT_BYTE, "Timezone", timezones, sizeof(timezones)/sizeof(timezones[0])},
+ {LPGEN("Year of birth"), LI_NUMBER, DBVT_WORD, "BirthYear", (void*)yearRange},
+ {LPGEN("Month of birth"), LI_LIST, DBVT_BYTE, "BirthMonth", months, sizeof(months)/sizeof(months[0])},
+ {LPGEN("Day of birth"), LI_NUMBER, DBVT_BYTE, "BirthDay", (void*)dayRange},
+ {LPGEN("Marital Status"), LI_LIST, DBVT_BYTE, "MaritalStatus", maritalstatuses, sizeof(maritalstatuses)/sizeof(maritalstatuses[0])},
+ {LPGEN("Spoken language 1"), LI_LIST, DBVT_ASCIIZ, "Language1", languages, sizeof(languages)/sizeof(languages[0])},
+ {LPGEN("Spoken language 2"), LI_LIST, DBVT_ASCIIZ, "Language2", languages, sizeof(languages)/sizeof(languages[0])},
+ {LPGEN("Spoken language 3"), LI_LIST, DBVT_ASCIIZ, "Language3", languages, sizeof(languages)/sizeof(languages[0])},
+ //more
+ {LPGEN("Originally from"),LI_DIVIDER},
+ {LPGEN("City"), LI_STRING, DBVT_ASCIIZ, "OriginCity"},
+ {LPGEN("State"), LI_STRING, DBVT_ASCIIZ, "OriginState"},
+ {LPGEN("Country"), LI_LIST, DBVT_WORD, "OriginCountry", countries, sizeof(countries)/sizeof(countries[0])},
+ //work
+ {LPGEN("Work"), LI_DIVIDER},
+ {LPGEN("Company name"), LI_STRING, DBVT_ASCIIZ, "Company"},
+ {LPGEN("Company homepage"),LI_STRING, DBVT_ASCIIZ, "CompanyHomepage"},
+ {LPGEN("Company street"), LI_STRING, DBVT_ASCIIZ, "CompanyStreet"},
+ {LPGEN("Company city"), LI_STRING, DBVT_ASCIIZ, "CompanyCity"},
+ {LPGEN("Company state"), LI_STRING, DBVT_ASCIIZ, "CompanyState"},
+ {LPGEN("Company phone"), LI_STRING, DBVT_ASCIIZ, "CompanyPhone"},
+ {LPGEN("Company fax"), LI_STRING, DBVT_ASCIIZ, "CompanyFax"},
+ {LPGEN("Company ZIP/postcode"),LI_STRING,DBVT_ASCIIZ, "CompanyZIP"},
+ {LPGEN("Company country"),LI_LIST, DBVT_WORD, "CompanyCountry",countries, sizeof(countries)/sizeof(countries[0])},
+ {LPGEN("Company department"),LI_STRING, DBVT_ASCIIZ, "CompanyDepartment"},
+ {LPGEN("Company position"),LI_STRING, DBVT_ASCIIZ, "CompanyPosition"},
+ {LPGEN("Company occupation"),LI_LIST, DBVT_WORD, "CompanyOccupation", occupations, sizeof(occupations)/sizeof(occupations[0])},
+ //interests
+ {LPGEN("Personal Interests"), LI_DIVIDER},
+ {LPGEN("Interest category 1"),LI_LIST, DBVT_ASCIIZ, "Interest0Cat", interests, sizeof(interests)/sizeof(interests[0])},
+ {LPGEN("Interest areas 1"),LI_STRING, DBVT_ASCIIZ, "Interest0Text"},
+ {LPGEN("Interest category 2"),LI_LIST, DBVT_ASCIIZ, "Interest1Cat", interests, sizeof(interests)/sizeof(interests[0])},
+ {LPGEN("Interest areas 2"),LI_STRING, DBVT_ASCIIZ, "Interest1Text"},
+ {LPGEN("Interest category 3"),LI_LIST, DBVT_ASCIIZ, "Interest2Cat", interests, sizeof(interests)/sizeof(interests[0])},
+ {LPGEN("Interest areas 3"),LI_STRING, DBVT_ASCIIZ, "Interest2Text"},
+ {LPGEN("Interest category 4"),LI_LIST, DBVT_ASCIIZ, "Interest3Cat", interests, sizeof(interests)/sizeof(interests[0])},
+ {LPGEN("Interest areas 4"),LI_STRING, DBVT_ASCIIZ, "Interest3Text"},
+ //pastbackground
+ {LPGEN("Past Background"), LI_DIVIDER},
+ {LPGEN("Category 1"),LI_LIST, DBVT_ASCIIZ, "Past0", pastbackground, sizeof(pastbackground)/sizeof(pastbackground[0])},
+ {LPGEN("Past Background 1"),LI_STRING, DBVT_ASCIIZ, "Past0Text"},
+ {LPGEN("Category 2"),LI_LIST, DBVT_ASCIIZ, "Past1", pastbackground, sizeof(pastbackground)/sizeof(pastbackground[0])},
+ {LPGEN("Past Background 2"),LI_STRING, DBVT_ASCIIZ, "Past1Text"},
+ {LPGEN("Category 3"),LI_LIST, DBVT_ASCIIZ, "Past2", pastbackground, sizeof(pastbackground)/sizeof(pastbackground[0])},
+ {LPGEN("Past Background 3"),LI_STRING, DBVT_ASCIIZ, "Past2Text"},
+ //affiliation
+ {LPGEN("Affiliations"), LI_DIVIDER},
+ {LPGEN("Affiliation category 1"),LI_LIST,DBVT_ASCIIZ, "Affiliation0", affiliation, sizeof(affiliation)/sizeof(affiliation[0])},
+ {LPGEN("Affiliation 1"),LI_STRING, DBVT_ASCIIZ, "Affiliation0Text"},
+ {LPGEN("Affiliation category 2"),LI_LIST,DBVT_ASCIIZ, "Affiliation1", affiliation, sizeof(affiliation)/sizeof(affiliation[0])},
+ {LPGEN("Affiliation 2"),LI_STRING, DBVT_ASCIIZ, "Affiliation1Text"},
+ {LPGEN("Affiliation category 3"),LI_LIST,DBVT_ASCIIZ, "Affiliation2", affiliation, sizeof(affiliation)/sizeof(affiliation[0])},
+ {LPGEN("Affiliation 3"),LI_STRING, DBVT_ASCIIZ, "Affiliation2Text"}
+};
+
+const int settingCount=sizeof(setting)/sizeof(setting[0]);
diff --git a/icqj_s7_sss_mod/changeinfo/db.c b/icqj_s7_sss_mod/changeinfo/db.c new file mode 100644 index 0000000..a00352b --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/db.c @@ -0,0 +1,230 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 43 $
+// Last change on : $Date: 2007-08-20 01:51:06 +0300 (Пн, 20 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+void LoadSettingsFromDb(int keepChanged)
+{
+ int i;
+ DBVARIANT dbv;
+
+ for(i=0;i<settingCount;i++)
+ {
+ if (setting[i].displayType==LI_DIVIDER) continue;
+ if (keepChanged && setting[i].changed) continue;
+ if (setting[i].dbType==DBVT_ASCIIZ)
+ {
+ SAFE_FREE((char**)&setting[i].value);
+ }
+ else if (!keepChanged)
+ setting[i].value = 0;
+
+ setting[i].changed=0;
+
+ if (setting[i].displayType&LIF_PASSWORD) continue;
+
+ if (!ICQGetContactSetting(NULL,setting[i].szDbSetting,&dbv))
+ {
+#ifdef _DEBUG
+ if(dbv.type!=setting[i].dbType)
+ MessageBoxA(NULL,"That's not supposed to happen","Huh?",MB_OK);
+#endif
+ switch(dbv.type)
+ {
+ case DBVT_ASCIIZ:
+ setting[i].value=(LPARAM)ICQGetContactSettingUtf(NULL,setting[i].szDbSetting, NULL);
+ break;
+ case DBVT_UTF8:
+ setting[i].value=(LPARAM)null_strdup(dbv.pszVal);
+ break;
+ case DBVT_WORD:
+ if(setting[i].displayType&LIF_SIGNED)
+ setting[i].value=dbv.sVal;
+ else
+ setting[i].value=dbv.wVal;
+ break;
+ case DBVT_BYTE:
+ if(setting[i].displayType&LIF_SIGNED)
+ setting[i].value=dbv.cVal;
+ else
+ setting[i].value=dbv.bVal;
+ break;
+#ifdef _DEBUG
+ default:
+ MessageBoxA(NULL,"That's not supposed to happen either","Huh?",MB_OK);
+ break;
+#endif
+ }
+ ICQFreeVariant(&dbv);
+ }
+ }
+}
+
+
+
+void FreeStoredDbSettings(void)
+{
+ int i;
+
+ for(i=0;i<settingCount;i++)
+ if(setting[i].dbType==DBVT_ASCIIZ)
+ SAFE_FREE((char**)&setting[i].value);
+}
+
+
+
+int ChangesMade(void)
+{
+ int i;
+
+ for(i=0;i<settingCount;i++)
+ if(setting[i].changed) return 1;
+ return 0;
+}
+
+
+
+void ClearChangeFlags(void)
+{
+ int i;
+
+ for(i=0;i<settingCount;i++)
+ setting[i].changed=0;
+}
+
+
+
+static BOOL CALLBACK PwConfirmDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static char *Pass;
+
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ ICQTranslateDialog(hwndDlg);
+ Pass = (char*)lParam;
+ SendDlgItemMessage(hwndDlg,IDC_PASSWORD,EM_LIMITTEXT,15,0);
+ return TRUE;
+
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDOK:
+ {
+ char szTest[16];
+
+ GetDlgItemTextA(hwndDlg,IDC_OLDPASS,szTest,sizeof(szTest));
+
+ if (strcmpnull(szTest, GetUserPassword(TRUE)))
+ {
+ MessageBoxUtf(hwndDlg, LPGEN("The password does not match your current password. Check Caps Lock and try again."), LPGEN("Change ICQ Details"), MB_OK);
+ SendDlgItemMessage(hwndDlg,IDC_OLDPASS,EM_SETSEL,0,(LPARAM)-1);
+ SetFocus(GetDlgItem(hwndDlg,IDC_OLDPASS));
+ break;
+ }
+
+ GetDlgItemTextA(hwndDlg,IDC_PASSWORD,szTest,sizeof(szTest));
+ if(strcmpnull(szTest, Pass))
+ {
+ MessageBoxUtf(hwndDlg, LPGEN("The password does not match the password you originally entered. Check Caps Lock and try again."), LPGEN("Change ICQ Details"), MB_OK);
+ SendDlgItemMessage(hwndDlg,IDC_PASSWORD,EM_SETSEL,0,(LPARAM)-1);
+ SetFocus(GetDlgItem(hwndDlg,IDC_PASSWORD));
+ break;
+ }
+ }
+ case IDCANCEL:
+ EndDialog(hwndDlg,wParam);
+ break;
+ }
+ break;
+ }
+ return FALSE;
+}
+
+
+
+int SaveSettingsToDb(HWND hwndDlg)
+{
+ int i,ret=1;
+
+ for(i=0;i<settingCount;i++)
+ {
+ if(!setting[i].changed) continue;
+ if(!(setting[i].displayType&LIF_ZEROISVALID) && setting[i].value==0)
+ {
+ ICQDeleteContactSetting(NULL,setting[i].szDbSetting);
+ continue;
+ }
+ switch(setting[i].dbType)
+ {
+ case DBVT_ASCIIZ:
+ if(setting[i].displayType&LIF_PASSWORD)
+ {
+ int nSettingLen = strlennull((char*)setting[i].value);
+
+ if (nSettingLen>8 || nSettingLen<1)
+ {
+ MessageBoxUtf(hwndDlg, LPGEN("The ICQ server does not support passwords longer than 8 characters. Please use a shorter password."), LPGEN("Change ICQ Details"), MB_OK);
+ ret=0;
+ break;
+ }
+ if (IDOK!=DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_PWCONFIRM),hwndDlg,PwConfirmDlgProc,(LPARAM)setting[i].value))
+ {
+ ret=0;
+ break;
+ }
+ strcpy(gpszPassword, (char*)setting[i].value);
+ }
+ else
+ {
+ if(*(char*)setting[i].value)
+ ICQWriteContactSettingUtf(NULL,setting[i].szDbSetting,(char*)setting[i].value);
+ else
+ ICQDeleteContactSetting(NULL,setting[i].szDbSetting);
+ }
+ break;
+ case DBVT_WORD:
+ ICQWriteContactSettingWord(NULL,setting[i].szDbSetting,(WORD)setting[i].value);
+ break;
+ case DBVT_BYTE:
+ ICQWriteContactSettingByte(NULL,setting[i].szDbSetting,(BYTE)setting[i].value);
+ break;
+ }
+ }
+ return ret;
+}
diff --git a/icqj_s7_sss_mod/changeinfo/dlgproc.c b/icqj_s7_sss_mod/changeinfo/dlgproc.c new file mode 100644 index 0000000..b916568 --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/dlgproc.c @@ -0,0 +1,561 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 43 $
+// Last change on : $Date: 2007-08-20 01:51:06 +0300 (Пн, 20 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+static int editTopIndex;
+static HANDLE hAckHook = NULL;
+static HFONT hMyFont = NULL;
+
+#define DM_PROTOACK (WM_USER+10)
+
+static int DrawTextUtf(HDC hDC, char* text, LPRECT lpRect, UINT uFormat, LPSIZE lpSize)
+{
+ int res;
+
+ if (gbUnicodeAPI)
+ {
+ wchar_t *tmp = make_unicode_string(text);
+
+ res = DrawTextW(hDC, tmp, -1, lpRect, uFormat);
+ if (lpSize)
+ GetTextExtentPoint32W(hDC, tmp, wcslen(tmp), lpSize);
+ SAFE_FREE(&tmp);
+ }
+ else
+ {
+ // caution, here we change text's contents
+ utf8_decode_static(text, text, strlennull(text)+1);
+ res = DrawTextA(hDC, text, -1, lpRect, uFormat);
+ if (lpSize)
+ GetTextExtentPoint32A(hDC, text, strlennull(text), lpSize);
+ }
+ return res;
+}
+
+
+
+static void PaintItemSetting(HDC hdc,RECT *rc,int i,UINT itemState)
+{
+ char *text;
+ int alloced=0;
+ char str[MAX_PATH];
+
+ if (setting[i].value==0 && !(setting[i].displayType&LIF_ZEROISVALID))
+ {
+ SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
+
+ if (setting[i].displayType & LIF_CHANGEONLY)
+ text = ICQTranslateUtfStatic("<unremovable once applied>", str, MAX_PATH);
+ else
+ text = ICQTranslateUtfStatic("<empty>", str, MAX_PATH);
+ }
+ else
+ {
+ switch (setting[i].displayType & LIM_TYPE)
+ {
+ case LI_STRING:
+ case LI_LONGSTRING:
+ {
+ text = BinaryToEscapes((char*)setting[i].value);
+ alloced = 1;
+ break;
+ }
+
+ case LI_NUMBER:
+ text = str;
+ itoa(setting[i].value, text, 10);
+ break;
+
+ case LI_LIST:
+ if (setting[i].dbType == DBVT_ASCIIZ)
+ {
+ text = ICQTranslateUtfStatic((char*)setting[i].value, str, MAX_PATH);
+ }
+ else
+ {
+ int j;
+
+ text = ICQTranslateUtfStatic("Unknown value", str, MAX_PATH);
+
+ for(j=0; j < setting[i].listCount; j++)
+ if (((ListTypeDataItem*)setting[i].pList)[j].id == setting[i].value)
+ {
+ text = ICQTranslateUtfStatic(((ListTypeDataItem*)setting[i].pList)[j].szValue, str, MAX_PATH);
+ break;
+ }
+ }
+ break;
+ }
+ }
+ if (setting[i].displayType & LIF_PASSWORD)
+ {
+ if (setting[i].changed)
+ {
+ int i;
+ for (i=0; text[i]; i++) text[i] = '*';
+ }
+ else
+ {
+ if (alloced)
+ {
+ SAFE_FREE(&text);
+ alloced=0;
+ }
+ text = "********";
+ }
+ }
+ if ((setting[i].displayType & LIM_TYPE) == LI_LIST && (itemState & CDIS_SELECTED || iEditItem == i))
+ {
+ RECT rcBtn;
+
+ rcBtn = *rc;
+ rcBtn.left = rcBtn.right - rc->bottom + rc->top;
+ InflateRect(&rcBtn,-2,-2);
+ rc->right = rcBtn.left;
+ DrawFrameControl(hdc, &rcBtn, DFC_SCROLL, iEditItem == i ? DFCS_SCROLLDOWN|DFCS_PUSHED : DFCS_SCROLLDOWN);
+ }
+ DrawTextUtf(hdc, text, rc, DT_END_ELLIPSIS|DT_LEFT|DT_NOCLIP|DT_NOPREFIX|DT_SINGLELINE|DT_VCENTER, NULL);
+
+ if (alloced) SAFE_FREE(&text);
+}
+
+
+static int InfoDlg_Resize(HWND hwndDlg,LPARAM lParam,UTILRESIZECONTROL *urc)
+{
+ switch (urc->wId)
+ {
+ case IDC_LIST:
+ return RD_ANCHORX_WIDTH | RD_ANCHORY_HEIGHT;
+ break;
+ case IDC_SAVE:
+ return RD_ANCHORX_RIGHT | RD_ANCHORY_BOTTOM;
+ break;
+ case IDC_UPLOADING:
+ return RD_ANCHORX_WIDTH | RD_ANCHORY_BOTTOM;
+ break;
+ }
+ return RD_ANCHORX_LEFT | RD_ANCHORY_TOP; // default
+}
+
+
+
+BOOL CALLBACK ChangeInfoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ ICQTranslateDialog(hwndDlg);
+ hwndList=GetDlgItem(hwndDlg,IDC_LIST);
+ LoadSettingsFromDb(0);
+ ListView_SetExtendedListViewStyle(hwndList,LVS_EX_FULLROWSELECT);
+ iEditItem=-1;
+ {
+ LOGFONT lf;
+
+ hListFont=(HFONT)SendMessage(hwndList,WM_GETFONT,0,0);
+ GetObject(hListFont,sizeof(lf),&lf);
+ lf.lfHeight-=5;
+ hMyFont=CreateFontIndirect(&lf);
+ SendMessage(hwndList,WM_SETFONT,(WPARAM)hMyFont,0);
+ }
+ {
+ LV_COLUMN lvc={0};
+ RECT rc;
+
+ GetClientRect(hwndList,&rc);
+ rc.right-=GetSystemMetrics(SM_CXVSCROLL);
+ lvc.mask = LVCF_WIDTH;
+ lvc.cx = rc.right/3;
+ ListView_InsertColumn(hwndList, 0, &lvc);
+ lvc.cx = rc.right-lvc.cx;
+ ListView_InsertColumn(hwndList, 1, &lvc);
+ }
+ {
+ LV_ITEM lvi={0};
+ lvi.mask = LVIF_PARAM;
+
+ for (lvi.iItem=0;lvi.iItem<settingCount;lvi.iItem++)
+ {
+ lvi.lParam=lvi.iItem;
+ ListView_InsertItem(hwndList, &lvi);
+ }
+ }
+ {
+ char *pwd = GetUserPassword(TRUE);
+
+ if (pwd)
+ strcpy(Password, pwd);
+ else
+ strcpy(Password, "");
+ }
+
+ SendMessage(GetParent(hwndDlg),PSM_CHANGED,0,0);
+ return TRUE;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->idFrom)
+ {
+ case 0:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case PSN_INFOCHANGED:
+ LoadSettingsFromDb(1);
+ break;
+
+ case PSN_KILLACTIVE:
+ EndStringEdit(1);
+ EndListEdit(1);
+ break;
+
+ case PSN_APPLY:
+ if(ChangesMade())
+ {
+ if (IDYES!=MessageBoxUtf(hwndDlg, LPGEN("You've made some changes to your ICQ details but it has not been saved to the server. Are you sure you want to close this dialog?"), LPGEN("Change ICQ Details"), MB_YESNOCANCEL))
+ {
+ SetWindowLongUtf(hwndDlg,DWL_MSGRESULT,PSNRET_INVALID_NOCHANGEPAGE);
+ return TRUE;
+ }
+ }
+ PostMessage(hwndList,WM_SETFONT,(WPARAM)hListFont,0);
+ break;
+ }
+ break;
+
+ case IDC_LIST:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case LVN_GETDISPINFOW:
+ case LVN_GETDISPINFO:
+ if (iEditItem != -1)
+ {
+ if (editTopIndex != ListView_GetTopIndex(hwndList))
+ {
+ EndStringEdit(1);
+ EndListEdit(1);
+ }
+ }
+ break;
+
+ case NM_CUSTOMDRAW:
+ {
+ LPNMLVCUSTOMDRAW cd=(LPNMLVCUSTOMDRAW)lParam;
+
+ switch(cd->nmcd.dwDrawStage)
+ {
+ case CDDS_PREPAINT:
+ SetWindowLongUtf(hwndDlg,DWL_MSGRESULT,CDRF_NOTIFYSUBITEMDRAW);
+ return TRUE;
+
+ case CDDS_ITEMPREPAINT:
+ {
+ RECT rc;
+
+ ListView_GetItemRect(hwndList, cd->nmcd.dwItemSpec, &rc, LVIR_BOUNDS);
+
+ if (GetWindowLong(hwndList, GWL_STYLE) & WS_DISABLED)
+ { // Disabled List
+ SetTextColor(cd->nmcd.hdc, cd->clrText);
+ FillRect(cd->nmcd.hdc, &rc, GetSysColorBrush(COLOR_3DFACE));
+ }
+ else if ((cd->nmcd.uItemState & CDIS_SELECTED || iEditItem == (int)cd->nmcd.dwItemSpec)
+ && setting[cd->nmcd.lItemlParam].displayType != LI_DIVIDER)
+ { // Selected item
+ SetTextColor(cd->nmcd.hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
+ FillRect(cd->nmcd.hdc, &rc, GetSysColorBrush(COLOR_HIGHLIGHT));
+ }
+ else
+ { // Unselected item
+ SetTextColor(cd->nmcd.hdc, GetSysColor(COLOR_WINDOWTEXT));
+ FillRect(cd->nmcd.hdc, &rc, GetSysColorBrush(COLOR_WINDOW));
+ }
+
+ if (setting[cd->nmcd.lItemlParam].displayType == LI_DIVIDER)
+ {
+ RECT rcLine;
+ SIZE textSize;
+ char str[MAX_PATH];
+ char *szText = ICQTranslateUtfStatic(setting[cd->nmcd.lItemlParam].szDescription, str, MAX_PATH);
+ HFONT hoFont;
+
+ hoFont = (HFONT)SelectObject(cd->nmcd.hdc, hListFont);
+ SetTextColor(cd->nmcd.hdc, GetSysColor(COLOR_3DSHADOW));
+ ListView_GetItemRect(hwndList, cd->nmcd.dwItemSpec, &rc, LVIR_BOUNDS);
+ DrawTextUtf(cd->nmcd.hdc, szText, &rc, DT_CENTER|DT_NOCLIP|DT_NOPREFIX|DT_SINGLELINE|DT_VCENTER, &textSize);
+ rcLine.top = (rc.top + rc.bottom)/2-1;
+ rcLine.bottom = rcLine.top+2;
+ rcLine.left = rc.left + 3;
+ rcLine.right = (rc.left+rc.right-textSize.cx)/2-3;
+ DrawEdge(cd->nmcd.hdc, &rcLine, BDR_SUNKENOUTER, BF_RECT);
+ rcLine.left = (rc.left + rc.right + textSize.cx)/2 + 3;
+ rcLine.right = rc.right-3;
+ DrawEdge(cd->nmcd.hdc, &rcLine, BDR_SUNKENOUTER, BF_RECT);
+ SetWindowLongUtf(hwndDlg, DWL_MSGRESULT, CDRF_SKIPDEFAULT);
+ }
+ else
+ {
+ SetWindowLongUtf(hwndDlg, DWL_MSGRESULT, CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTPAINT);
+ }
+
+ return TRUE;
+ }
+
+ case CDDS_SUBITEM|CDDS_ITEMPREPAINT:
+ {
+ RECT rc;
+ HFONT hoFont;
+
+ hoFont=(HFONT)SelectObject(cd->nmcd.hdc,hListFont);
+ ListView_GetSubItemRect(hwndList,cd->nmcd.dwItemSpec,cd->iSubItem,LVIR_BOUNDS,&rc);
+
+ if (cd->iSubItem==0)
+ {
+ RECT rc2;
+ char str[MAX_PATH];
+
+ ListView_GetSubItemRect(hwndList,cd->nmcd.dwItemSpec,1,LVIR_BOUNDS,&rc2);
+ rc.right=rc2.left;
+ rc.left+=2;
+ DrawTextUtf(cd->nmcd.hdc, ICQTranslateUtfStatic(setting[cd->nmcd.lItemlParam].szDescription, str, MAX_PATH), &rc, DT_END_ELLIPSIS|DT_LEFT|DT_NOCLIP|DT_NOPREFIX|DT_SINGLELINE|DT_VCENTER, NULL);
+ }
+ else
+ PaintItemSetting(cd->nmcd.hdc, &rc, cd->nmcd.lItemlParam, cd->nmcd.uItemState);
+ SetWindowLongUtf(hwndDlg,DWL_MSGRESULT,CDRF_SKIPDEFAULT);
+
+ return TRUE;
+ }
+/*
+ case CDDS_ITEMPOSTPAINT:
+ { RECT rc;
+ ListView_GetItemRect(hwndList,cd->nmcd.dwItemSpec,&rc,LVIR_BOUNDS);
+ if(cd->nmcd.uItemState&CDIS_FOCUS) {
+ HDC hdc2
+ hdc2=GetDC(hwndList); //I don't know what the listview's done to its DC, but I can't figure out how to undo it
+ DrawFocusRect(hdc2,&rc);
+ ReleaseDC(hwndList,hdc2);
+ }
+ break;
+ }
+*/
+
+ }
+ break;
+ }
+ case NM_CLICK:
+ {
+ LPNMLISTVIEW nm=(LPNMLISTVIEW)lParam;
+ LV_ITEM lvi;
+ RECT rc;
+
+ EndStringEdit(1);
+ EndListEdit(1);
+ if (nm->iSubItem != 1) break;
+ lvi.mask = LVIF_PARAM|LVIF_STATE;
+ lvi.stateMask = 0xFFFFFFFF;
+ lvi.iItem = nm->iItem; lvi.iSubItem = nm->iSubItem;
+ ListView_GetItem(hwndList, &lvi);
+ if (!(lvi.state & LVIS_SELECTED)) break;
+ ListView_EnsureVisible(hwndList, lvi.iItem, FALSE);
+ ListView_GetSubItemRect(hwndList, lvi.iItem, lvi.iSubItem, LVIR_BOUNDS, &rc);
+ editTopIndex = ListView_GetTopIndex(hwndList);
+ switch (setting[lvi.lParam].displayType & LIM_TYPE)
+ {
+ case LI_STRING:
+ case LI_LONGSTRING:
+ case LI_NUMBER:
+ BeginStringEdit(nm->iItem, &rc, lvi. lParam, 0);
+ break;
+ case LI_LIST:
+ BeginListEdit(nm->iItem, &rc, lvi. lParam, 0);
+ break;
+ }
+ break;
+ }
+ case LVN_KEYDOWN:
+ {
+ LPNMLVKEYDOWN nm=(LPNMLVKEYDOWN)lParam;
+ LV_ITEM lvi;
+ RECT rc;
+
+ EndStringEdit(1);
+ EndListEdit(1);
+ if(nm->wVKey==VK_SPACE || nm->wVKey==VK_RETURN || nm->wVKey==VK_F2) nm->wVKey=0;
+ if(nm->wVKey && (nm->wVKey<'0' || (nm->wVKey>'9' && nm->wVKey<'A') || (nm->wVKey>'Z' && nm->wVKey<VK_NUMPAD0) || nm->wVKey>=VK_F1))
+ break;
+ lvi.mask=LVIF_PARAM|LVIF_STATE;
+ lvi.stateMask=0xFFFFFFFF;
+ lvi.iItem=ListView_GetNextItem(hwndList,-1,LVNI_ALL|LVNI_SELECTED);
+ if(lvi.iItem==-1) break;
+ lvi.iSubItem=1;
+ ListView_GetItem(hwndList,&lvi);
+ ListView_EnsureVisible(hwndList,lvi.iItem,FALSE);
+ ListView_GetSubItemRect(hwndList,lvi.iItem,lvi.iSubItem,LVIR_BOUNDS,&rc);
+ editTopIndex=ListView_GetTopIndex(hwndList);
+ switch(setting[lvi.lParam].displayType&LIM_TYPE)
+ {
+ case LI_STRING:
+ case LI_LONGSTRING:
+ case LI_NUMBER:
+ BeginStringEdit(lvi.iItem,&rc,lvi.lParam,nm->wVKey);
+ break;
+ case LI_LIST:
+ BeginListEdit(lvi.iItem,&rc,lvi.lParam,nm->wVKey);
+ break;
+ }
+ SetWindowLongUtf(hwndDlg,DWL_MSGRESULT,TRUE);
+ return TRUE;
+ }
+ case NM_KILLFOCUS:
+ if(!IsStringEditWindow(GetFocus())) EndStringEdit(1);
+ if(!IsListEditWindow(GetFocus())) EndListEdit(1);
+ break;
+ }
+ break;
+ }
+ break;
+ case WM_KILLFOCUS:
+ EndStringEdit(1);
+ EndListEdit(1);
+ break;
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDCANCEL:
+ SendMessage(GetParent(hwndDlg), msg, wParam, lParam);
+ break;
+
+ case IDC_SAVE:
+ if (!SaveSettingsToDb(hwndDlg)) break;
+ EnableDlgItem(hwndDlg, IDC_SAVE, FALSE);
+ EnableDlgItem(hwndDlg, IDC_LIST, FALSE);
+ {
+ char str[MAX_PATH];
+
+ SetDlgItemTextUtf(hwndDlg, IDC_UPLOADING, ICQTranslateUtfStatic("Upload in progress...", str, MAX_PATH));
+ }
+ EnableDlgItem(hwndDlg, IDC_UPLOADING, TRUE);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_UPLOADING), SW_SHOW);
+ hAckHook = HookEventMessage(ME_PROTO_ACK, hwndDlg, DM_PROTOACK);
+
+ if (!UploadSettings(hwndDlg))
+ {
+ EnableDlgItem(hwndDlg, IDC_SAVE, TRUE);
+ EnableDlgItem(hwndDlg, IDC_LIST, TRUE);
+ ShowWindow(GetDlgItem(hwndDlg, IDC_UPLOADING), SW_HIDE);
+ UnhookEvent(hAckHook);
+ hAckHook = NULL;
+ }
+ break;
+ }
+ break;
+
+ case WM_SIZE:
+ { // make the dlg resizeable
+ UTILRESIZEDIALOG urd = {0};
+
+ if (IsIconic(hwndDlg)) break;
+ urd.cbSize = sizeof(urd);
+ urd.hInstance = hInst;
+ urd.hwndDlg = hwndDlg;
+ urd.lParam = 0; // user-defined
+ urd.lpTemplate = MAKEINTRESOURCEA(IDD_INFO_CHANGEINFO);
+ urd.pfnResizer = InfoDlg_Resize;
+ CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM) &urd);
+
+ { // update listview column widths
+ RECT rc;
+
+ GetClientRect(hwndList,&rc);
+ rc.right-=GetSystemMetrics(SM_CXVSCROLL);
+ ListView_SetColumnWidth(hwndList, 0, rc.right/3);
+ ListView_SetColumnWidth(hwndList, 1, rc.right - rc.right/3);
+ }
+ break;
+ }
+
+ case DM_PROTOACK:
+ {
+ ACKDATA *ack=(ACKDATA*)lParam;
+ int i,done;
+ char str[MAX_PATH];
+
+ if (ack->type != ACKTYPE_SETINFO) break;
+ if (ack->result == ACKRESULT_SUCCESS)
+ {
+ for (i=0; i < SIZEOF(hUpload); i++)
+ if (hUpload[i] && ack->hProcess == hUpload[i]) break;
+
+ if (i == SIZEOF(hUpload)) break;
+ hUpload[i] = NULL;
+ for (done = 0, i = 0; i < SIZEOF(hUpload); i++)
+ done += hUpload[i] == NULL;
+ wsprintf(str,"%s%d%%", ICQTranslateUtfStatic("Upload in progress...", str, MAX_PATH), 100*done/(SIZEOF(hUpload)));
+ SetDlgItemTextUtf(hwndDlg, IDC_UPLOADING, str);
+ if (done < SIZEOF(hUpload)) break;
+
+ ClearChangeFlags();
+ UnhookEvent(hAckHook); hAckHook = NULL;
+ EnableDlgItem(hwndDlg, IDC_LIST, TRUE);
+ EnableDlgItem(hwndDlg, IDC_UPLOADING, FALSE);
+ SetDlgItemTextUtf(hwndDlg, IDC_UPLOADING, ICQTranslateUtfStatic("Upload complete", str, MAX_PATH));
+ SendMessage(GetParent(hwndDlg), PSM_FORCECHANGED, 0, 0);
+ }
+ else if (ack->result==ACKRESULT_FAILED)
+ {
+ UnhookEvent(hAckHook);
+ hAckHook = NULL;
+ EnableDlgItem(hwndDlg, IDC_LIST, TRUE);
+ EnableDlgItem(hwndDlg, IDC_UPLOADING, FALSE);
+ SetDlgItemTextUtf(hwndDlg, IDC_UPLOADING, ICQTranslateUtfStatic("Upload FAILED", str, MAX_PATH));
+ SendMessage(GetParent(hwndDlg), PSM_FORCECHANGED, 0, 0);
+ }
+ break;
+ }
+ case WM_DESTROY:
+ if(hAckHook)
+ {
+ UnhookEvent(hAckHook);
+ hAckHook=NULL;
+ }
+ //SendMessage(hwndList,WM_GETFONT,0,0);
+ DeleteObject(hMyFont);
+ FreeStoredDbSettings();
+ break;
+ }
+ return FALSE;
+}
diff --git a/icqj_s7_sss_mod/changeinfo/editlist.c b/icqj_s7_sss_mod/changeinfo/editlist.c new file mode 100644 index 0000000..52ba4e6 --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/editlist.c @@ -0,0 +1,176 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 43 $
+// Last change on : $Date: 2007-08-20 01:51:06 +0300 (Пн, 20 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+static HWND hwndListEdit=NULL;
+static BOOL (WINAPI *MyAnimateWindow)(HWND,DWORD,DWORD);
+static WNDPROC OldListEditProc;
+
+static LRESULT CALLBACK ListEditSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_LBUTTONUP:
+ CallWindowProcUtf(OldListEditProc,hwnd,msg,wParam,lParam);
+ {
+ POINT pt;
+
+ pt.x=(short)LOWORD(lParam);
+ pt.y=(short)HIWORD(lParam);
+ ClientToScreen(hwnd,&pt);
+ if(SendMessage(hwnd,WM_NCHITTEST,0,MAKELPARAM(pt.x,pt.y))==HTVSCROLL) break;
+ }
+ {
+ int i;
+
+ i=SendMessage(hwnd,LB_GETCURSEL,0,0);
+ EndListEdit(i!=LB_ERR);
+ }
+ return 0;
+ case WM_CHAR:
+ if(wParam!='\r') break;
+ {
+ int i;
+
+ i=SendMessage(hwnd,LB_GETCURSEL,0,0);
+ EndListEdit(i!=LB_ERR);
+ }
+ return 0;
+ case WM_KILLFOCUS:
+ EndListEdit(1);
+ return 0;
+ }
+ return CallWindowProcUtf(OldListEditProc,hwnd,msg,wParam,lParam);
+}
+
+
+
+void BeginListEdit(int iItem,RECT *rc,int i,WORD wVKey)
+{
+ int j,n;
+ POINT pt;
+ int itemHeight;
+ char str[MAX_PATH];
+
+ EndListEdit(0);
+ pt.x=pt.y=0;
+ ClientToScreen(hwndList,&pt);
+ OffsetRect(rc,pt.x,pt.y);
+ InflateRect(rc,-2,-2);
+ rc->left-=2;
+ iEditItem=iItem;
+ ListView_RedrawItems(hwndList,iEditItem,iEditItem);
+ UpdateWindow(hwndList);
+
+ hwndListEdit=CreateWindowEx(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,"LISTBOX","",WS_POPUP|WS_BORDER|WS_VSCROLL,rc->left,rc->bottom,rc->right-rc->left,150,NULL,NULL,hInst,NULL);
+ SendMessage(hwndListEdit,WM_SETFONT,(WPARAM)hListFont,0);
+ itemHeight=SendMessage(hwndListEdit,LB_GETITEMHEIGHT,0,0);
+ for(j=0;j<setting[i].listCount;j++)
+ {
+ n = ListBoxAddStringUtf(hwndListEdit, ((ListTypeDataItem*)setting[i].pList)[j].szValue);
+ SendMessage(hwndListEdit,LB_SETITEMDATA,n,((ListTypeDataItem*)setting[i].pList)[j].id);
+ if ((setting[i].dbType==DBVT_ASCIIZ && (!strcmpnull((char*)setting[i].value,((ListTypeDataItem*)setting[i].pList)[j].szValue))
+ || (setting[i].dbType==DBVT_ASCIIZ && (!strcmpnull((char*)setting[i].value,ICQTranslateUtfStatic(((ListTypeDataItem*)setting[i].pList)[j].szValue, str, MAX_PATH))))
+ || ((char*)setting[i].value==NULL && ((ListTypeDataItem*)setting[i].pList)[j].id==0))
+ || (setting[i].dbType!=DBVT_ASCIIZ && setting[i].value==((ListTypeDataItem*)setting[i].pList)[j].id))
+ SendMessage(hwndListEdit,LB_SETCURSEL,n,0);
+ }
+ SendMessage(hwndListEdit,LB_SETTOPINDEX,SendMessage(hwndListEdit,LB_GETCURSEL,0,0)-3,0);
+ if(itemHeight*setting[i].listCount<150)
+ SetWindowPos(hwndListEdit,0,0,0,rc->right-rc->left,itemHeight*setting[i].listCount+GetSystemMetrics(SM_CYBORDER)*2,SWP_NOZORDER|SWP_NOMOVE);
+ OldListEditProc=(WNDPROC)SetWindowLongUtf(hwndListEdit,GWL_WNDPROC,(LONG)ListEditSubclassProc);
+ if (MyAnimateWindow=(BOOL (WINAPI*)(HWND,DWORD,DWORD))GetProcAddress(GetModuleHandle("user32"),"AnimateWindow"))
+ {
+ BOOL enabled;
+
+ SystemParametersInfo(SPI_GETCOMBOBOXANIMATION,0,&enabled,FALSE);
+ if(enabled) MyAnimateWindow(hwndListEdit,200,AW_SLIDE|AW_ACTIVATE|AW_VER_POSITIVE);
+ }
+ ShowWindow(hwndListEdit,SW_SHOW);
+ SetFocus(hwndListEdit);
+ if(wVKey)
+ PostMessage(hwndListEdit,WM_KEYDOWN,wVKey,0);
+}
+
+
+
+void EndListEdit(int save)
+{
+ if(hwndListEdit==NULL || iEditItem==-1) return;
+ if(save)
+ {
+ int i;
+ LPARAM newValue;
+ i=SendMessage(hwndListEdit,LB_GETCURSEL,0,0);
+ newValue=SendMessage(hwndListEdit,LB_GETITEMDATA,i,0);
+ if (setting[iEditItem].dbType==DBVT_ASCIIZ)
+ {
+ char *szNewValue = (((ListTypeDataItem*)setting[iEditItem].pList)[i].szValue);
+ if(newValue || setting[iEditItem].displayType&LIF_ZEROISVALID)
+ {
+ setting[iEditItem].changed=strcmpnull(szNewValue,(char*)setting[iEditItem].value);
+ SAFE_FREE((char**)&setting[iEditItem].value);
+ setting[iEditItem].value=(LPARAM)null_strdup(szNewValue);
+ }
+ else
+ {
+ setting[iEditItem].changed=(char*)setting[iEditItem].value!=NULL;
+ SAFE_FREE((char**)&setting[iEditItem].value);
+ }
+ }
+ else
+ {
+ setting[iEditItem].changed=newValue!=setting[iEditItem].value;
+ setting[iEditItem].value=newValue;
+ }
+ if (setting[iEditItem].changed) EnableDlgItem(GetParent(hwndList), IDC_SAVE, TRUE);
+ }
+ ListView_RedrawItems(hwndList, iEditItem, iEditItem);
+ iEditItem = -1;
+ DestroyWindow(hwndListEdit);
+ hwndListEdit = NULL;
+}
+
+
+
+int IsListEditWindow(HWND hwnd)
+{
+ if (hwnd == hwndListEdit) return 1;
+ return 0;
+}
diff --git a/icqj_s7_sss_mod/changeinfo/editstring.c b/icqj_s7_sss_mod/changeinfo/editstring.c new file mode 100644 index 0000000..a29487e --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/editstring.c @@ -0,0 +1,365 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 36 $
+// Last change on : $Date: 2007-08-05 03:45:10 +0300 (Вс, 05 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+static WNDPROC OldStringEditProc,OldExpandButtonProc;
+static HWND hwndEdit=NULL,hwndExpandButton=NULL,hwndUpDown=NULL;
+
+static const char escapes[]={'a','\a',
+ 'b','\b',
+ 'e',27,
+ 'f','\f',
+ 'r','\r',
+ 't','\t',
+ 'v','\v',
+ '\\','\\'};
+
+static void EscapesToMultiline(wchar_t *str,PDWORD selStart,PDWORD selEnd)
+{ //converts "\\n" and "\\t" to "\r\n" and "\t" because a multi-line edit box can show them properly
+ DWORD i;
+
+ for(i=0; *str; str++, i++)
+ {
+ if (*str != '\\') continue;
+ if (str[1] == 'n')
+ {
+ *str++ = '\r';
+ i++;
+ *str = '\n';
+ }
+ else if (str[1] == 't')
+ {
+ *str = '\t';
+ memmove(str+1, str+2, sizeof(wchar_t)*(wcslen(str)-1));
+
+ if (*selStart>i) --*selStart;
+ if (*selEnd>i) --*selEnd;
+ }
+ }
+}
+
+
+
+static void EscapesToBinary(char *str)
+{
+ int i;
+
+ for(;*str;str++)
+ {
+ if(*str!='\\') continue;
+ if(str[1]=='n') {*str++='\r'; i++; *str='\n'; continue;}
+ if(str[1]=='0')
+ {
+ char *codeend;
+ *str=(char)strtol(str+1,&codeend,8);
+ if(*str==0) {*str='\\'; continue;}
+ memmove(str+1,codeend,strlennull(codeend)+1);
+ continue;
+ }
+ for(i=0;i<sizeof(escapes)/sizeof(escapes[0]);i+=2)
+ if(str[1]==escapes[i])
+ {
+ *str=escapes[i+1];
+ memmove(str+1,str+2,strlennull(str)-1);
+ break;
+ }
+ }
+}
+
+
+
+char *BinaryToEscapes(char *str)
+{
+ int extra=10,len=strlennull(str)+11,i;
+ char *out,*pout;
+
+ out=pout=(char*)SAFE_MALLOC(len);
+ for(;*str;str++)
+ {
+ if((unsigned char)*str>=' ')
+ {
+ *pout++=*str;
+ continue;
+ }
+ if(str[0]=='\r' && str[1]=='\n')
+ {
+ *pout++='\\';
+ *pout++='n';
+ str++;
+ continue;
+ }
+ if(extra<3)
+ {
+ extra+=8; len+=8;
+ pout=out=(char*)SAFE_REALLOC(out,len);
+ }
+ *pout++='\\';
+ for(i=0;i<sizeof(escapes)/sizeof(escapes[0]);i+=2)
+ if(*str==escapes[i+1])
+ {
+ *pout++=escapes[i];
+ extra--;
+ break;
+ }
+ if(i<sizeof(escapes)/sizeof(escapes[0])) continue;
+ *pout++='0'; extra--;
+ if(*str>=8)
+ {
+ *pout++=(*str>>3)+'0';
+ extra--;
+ }
+ *pout++=(*str&7)+'0'; extra--;
+ }
+ *pout='\0';
+ return out;
+}
+
+
+
+static LRESULT CALLBACK StringEditSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_KEYDOWN:
+ if(wParam==VK_ESCAPE)
+ {
+ EndStringEdit(0);
+ return 0;
+ }
+ if(wParam==VK_RETURN)
+ {
+ if(GetWindowLong(hwnd,GWL_STYLE)&ES_MULTILINE && !(GetKeyState(VK_CONTROL)&0x8000)) break;
+ EndStringEdit(1);
+ return 0;
+ }
+ break;
+ case WM_GETDLGCODE:
+ return DLGC_WANTALLKEYS|CallWindowProcUtf(OldStringEditProc,hwnd,msg,wParam,lParam);
+ case WM_KILLFOCUS:
+ if((HWND)wParam==hwndExpandButton) break;
+ EndStringEdit(1);
+ return 0;
+ }
+ return CallWindowProcUtf(OldStringEditProc,hwnd,msg,wParam,lParam);
+}
+
+
+
+static LRESULT CALLBACK ExpandButtonSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_LBUTTONUP:
+ if(GetCapture()==hwnd)
+ {
+ //do expand
+ RECT rcStart,rcEnd;
+ DWORD selStart,selEnd;
+ wchar_t *text;
+ BOOL animEnabled=TRUE;
+
+ GetWindowRect(hwndEdit,&rcStart);
+ InflateRect(&rcStart,2,2);
+
+ text = GetWindowTextUcs(hwndEdit);
+ SendMessage(hwndEdit,EM_GETSEL,(WPARAM)&selStart,(LPARAM)&selEnd);
+ DestroyWindow(hwndEdit);
+ EscapesToMultiline(text,&selStart,&selEnd);
+ hwndEdit=CreateWindowEx(WS_EX_TOOLWINDOW,"EDIT","",WS_POPUP|WS_BORDER|WS_VISIBLE|ES_WANTRETURN|ES_AUTOVSCROLL|WS_VSCROLL|ES_MULTILINE,rcStart.left,rcStart.top,rcStart.right-rcStart.left,rcStart.bottom-rcStart.top,NULL,NULL,hInst,NULL);
+ SetWindowTextUcs(hwndEdit, text);
+ OldStringEditProc=(WNDPROC)SetWindowLongUtf(hwndEdit,GWL_WNDPROC,(LONG)StringEditSubclassProc);
+ SendMessage(hwndEdit,WM_SETFONT,(WPARAM)hListFont,0);
+ SendMessage(hwndEdit,EM_SETSEL,selStart,selEnd);
+ SetFocus(hwndEdit);
+
+ rcEnd.left=rcStart.left; rcEnd.top=rcStart.top;
+ rcEnd.right=rcEnd.left+350;
+ rcEnd.bottom=rcEnd.top+150;
+ if (LOBYTE(LOWORD(GetVersion()))>4 || HIBYTE(LOWORD(GetVersion()))>0)
+ SystemParametersInfo(SPI_GETCOMBOBOXANIMATION,0,&animEnabled,FALSE);
+ if(animEnabled)
+ {
+ DWORD startTime,timeNow;
+ startTime=GetTickCount();
+ for(;;)
+ {
+ UpdateWindow(hwndEdit);
+ timeNow=GetTickCount();
+ if(timeNow>startTime+200) break;
+ SetWindowPos(hwndEdit,0,rcEnd.left,rcEnd.top,(rcEnd.right-rcStart.right)*(timeNow-startTime)/200+rcStart.right-rcEnd.left,(rcEnd.bottom-rcStart.bottom)*(timeNow-startTime)/200+rcStart.bottom-rcEnd.top,SWP_NOZORDER);
+ }
+ }
+ SetWindowPos(hwndEdit,0,rcEnd.left,rcEnd.top,rcEnd.right-rcEnd.left,rcEnd.bottom-rcEnd.top,SWP_NOZORDER);
+
+ DestroyWindow(hwnd);
+ hwndExpandButton=NULL;
+
+ SAFE_FREE(&text);
+ }
+ break;
+ }
+ return CallWindowProcUtf(OldExpandButtonProc,hwnd,msg,wParam,lParam);
+}
+
+
+
+void BeginStringEdit(int iItem,RECT *rc,int i,WORD wVKey)
+{
+ char *szValue;
+ char str[80];
+ int alloced=0;
+
+ EndStringEdit(0);
+ InflateRect(rc,-2,-2);
+ rc->left-=2;
+ if(setting[i].displayType&LIF_PASSWORD && !setting[i].changed)
+ szValue=" ";
+ else if ((setting[i].displayType&LIM_TYPE)==LI_NUMBER)
+ {
+ szValue=str;
+ wsprintf(str,"%d",setting[i].value);
+ }
+ else if(setting[i].value)
+ {
+ szValue=BinaryToEscapes((char*)setting[i].value);
+ alloced=1;
+ }
+ else szValue="";
+ iEditItem=iItem;
+
+ if ((setting[i].displayType&LIM_TYPE)==LI_LONGSTRING)
+ {
+ rc->right-=rc->bottom-rc->top;
+ hwndExpandButton=CreateWindow("BUTTON","",WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_ICON,rc->right,rc->top,rc->bottom-rc->top,rc->bottom-rc->top,hwndList,NULL,hInst,NULL);
+ SendMessage(hwndExpandButton,BM_SETIMAGE,IMAGE_ICON,(LPARAM)LoadImage(hInst,MAKEINTRESOURCE(IDI_EXPANDSTRINGEDIT),IMAGE_ICON,0,0,LR_SHARED));
+ OldExpandButtonProc=(WNDPROC)SetWindowLongUtf(hwndExpandButton,GWL_WNDPROC,(LONG)ExpandButtonSubclassProc);
+ }
+
+ hwndEdit=CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|((setting[i].displayType&LIM_TYPE)==LI_NUMBER?ES_NUMBER:0)|(setting[i].displayType&LIF_PASSWORD?ES_PASSWORD:0),rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top,hwndList,NULL,hInst,NULL);
+ SetWindowTextUtf(hwndEdit, szValue);
+ if (alloced) SAFE_FREE(&szValue);
+ OldStringEditProc=(WNDPROC)SetWindowLongUtf(hwndEdit,GWL_WNDPROC,(LONG)StringEditSubclassProc);
+ SendMessage(hwndEdit,WM_SETFONT,(WPARAM)hListFont,0);
+ if ((setting[i].displayType&LIM_TYPE)==LI_NUMBER)
+ {
+ int *range=(int*)setting[i].pList;
+ RECT rcUpDown;
+ hwndUpDown=CreateWindow(UPDOWN_CLASS,"",WS_VISIBLE|WS_CHILD|UDS_AUTOBUDDY|UDS_ALIGNRIGHT|UDS_HOTTRACK|UDS_NOTHOUSANDS|UDS_SETBUDDYINT,0,0,0,0,hwndList,NULL,hInst,NULL);
+ SendMessage(hwndUpDown,UDM_SETRANGE32,range[0],range[1]);
+ SendMessage(hwndUpDown,UDM_SETPOS32,0,setting[i].value);
+ if(!(setting[i].displayType&LIF_ZEROISVALID) && setting[i].value==0)
+ SetWindowTextA(hwndEdit,"");
+ GetClientRect(hwndUpDown,&rcUpDown);
+ rc->right-=rcUpDown.right;
+ SetWindowPos(hwndEdit,0,0,0,rc->right-rc->left,rc->bottom-rc->top,SWP_NOZORDER|SWP_NOMOVE);
+ }
+ SendMessage(hwndEdit,EM_SETSEL,0,(LPARAM)-1);
+ SetFocus(hwndEdit);
+ PostMessage(hwndEdit,WM_KEYDOWN,wVKey,0);
+}
+
+
+
+void EndStringEdit(int save)
+{
+ if (hwndEdit == NULL || iEditItem == -1) return;
+ if (save)
+ {
+ char *text = NULL;
+
+ text=(char*)SAFE_MALLOC(GetWindowTextLength(hwndEdit)+1);
+ GetWindowText(hwndEdit,text,GetWindowTextLength(hwndEdit)+1);
+ EscapesToBinary(text);
+ if((setting[iEditItem].displayType&LIM_TYPE)==LI_NUMBER)
+ {
+ LPARAM newValue;
+ int *range=(int*)setting[iEditItem].pList;
+ newValue=atoi(text);
+ if(newValue)
+ {
+ if(newValue<range[0]) newValue=range[0];
+ if(newValue>range[1]) newValue=range[1];
+ }
+ setting[iEditItem].changed=setting[iEditItem].value!=newValue;
+ setting[iEditItem].value=newValue;
+ SAFE_FREE(&text);
+ }
+ else
+ {
+ if (!(setting[iEditItem].displayType&LIF_PASSWORD))
+ {
+ SAFE_FREE(&text);
+ text = GetWindowTextUtf(hwndEdit);
+ EscapesToBinary(text);
+ }
+ if ((setting[iEditItem].displayType&LIF_PASSWORD && strcmpnull(text," ")) ||
+ (!(setting[iEditItem].displayType&LIF_PASSWORD) && strcmpnull(text,(char*)setting[iEditItem].value) && (strlennull(text) + strlennull((char*)setting[iEditItem].value))))
+ {
+ SAFE_FREE((char**)&setting[iEditItem].value);
+ if (text[0])
+ setting[iEditItem].value=(LPARAM)text;
+ else
+ {
+ setting[iEditItem].value=0;
+ SAFE_FREE(&text);
+ }
+ setting[iEditItem].changed=1;
+ }
+ }
+ if (setting[iEditItem].changed) EnableDlgItem(GetParent(hwndList), IDC_SAVE, TRUE);
+ }
+ ListView_RedrawItems(hwndList, iEditItem, iEditItem);
+ iEditItem = -1;
+ DestroyWindow(hwndEdit);
+ hwndEdit = NULL;
+ if (hwndExpandButton) DestroyWindow(hwndExpandButton);
+ hwndExpandButton = NULL;
+ if (hwndUpDown) DestroyWindow(hwndUpDown);
+ hwndUpDown = NULL;
+}
+
+
+
+int IsStringEditWindow(HWND hwnd)
+{
+ if (hwnd == hwndEdit) return 1;
+ if (hwnd == hwndExpandButton) return 1;
+ if (hwnd == hwndUpDown) return 1;
+ return 0;
+}
diff --git a/icqj_s7_sss_mod/changeinfo/expandst.ico b/icqj_s7_sss_mod/changeinfo/expandst.ico Binary files differnew file mode 100644 index 0000000..17367fe --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/expandst.ico diff --git a/icqj_s7_sss_mod/changeinfo/main.c b/icqj_s7_sss_mod/changeinfo/main.c new file mode 100644 index 0000000..a55422f --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/main.c @@ -0,0 +1,61 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 36 $
+// Last change on : $Date: 2007-08-05 03:45:10 +0300 (Вс, 05 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+int InitChangeDetails(WPARAM wParam, LPARAM lParam)
+{
+ static char szTmp[256];
+ OPTIONSDIALOGPAGE odp = {0};
+
+ if (lParam) return 0;
+
+ ZeroMemory(&odp,sizeof(odp));
+ odp.cbSize = sizeof(odp);
+ mir_snprintf( szTmp, sizeof( szTmp ), Translate("%s Details"), gpszICQProtoName);
+ odp.hIcon = NULL;
+ odp.hInstance = hInst;
+ odp.position = -1899999999;
+ odp.pszTitle=szTmp;
+ odp.pszTemplate = MAKEINTRESOURCE(IDD_INFO_CHANGEINFO);
+ odp.pfnDlgProc = ChangeInfoDlgProc;
+
+ CallService(MS_USERINFO_ADDPAGE,wParam,(LPARAM)&odp);
+
+ return 0;
+}
diff --git a/icqj_s7_sss_mod/changeinfo/upload.c b/icqj_s7_sss_mod/changeinfo/upload.c new file mode 100644 index 0000000..1f38779 --- /dev/null +++ b/icqj_s7_sss_mod/changeinfo/upload.c @@ -0,0 +1,205 @@ +// ---------------------------------------------------------------------------80
+// ICQ plugin for Miranda Instant Messenger
+// ________________________________________
+//
+// Copyright 2000,2001 Richard Hughes, Roland Rabien, Tristan Van de Vreede
+// Copyright 2001,2002 Jon Keating, Richard Hughes
+// Copyright 2002,2003,2004 Martin berg, Sam Kothari, Robert Rainwater
+// Copyright 2004,2005,2006,2007 Joe Kucera
+// Copyright 2006,2007 [sss], chaos.persei, [sin], Faith Healer, Theif, nullbie
+//
+// 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 : $Source$
+// Revision : $Revision: 43 $
+// Last change on : $Date: 2007-08-20 01:51:06 +0300 (Пн, 20 авг 2007) $
+// Last change by : $Author: sss123next $
+//
+// DESCRIPTION:
+//
+// ChangeInfo Plugin stuff
+//
+// -----------------------------------------------------------------------------
+
+#include "icqoscar.h"
+
+
+
+int StringToListItemId(const char *szSetting,int def)
+{
+ int i,listCount;
+ char szTmp[256];
+ ListTypeDataItem *list;
+
+ for(i=0;i<settingCount;i++)
+ if(!strcmpnull(szSetting,setting[i].szDbSetting))
+ break;
+
+ if(i==settingCount) return def;
+
+ list=(ListTypeDataItem*)setting[i].pList;
+ listCount=setting[i].listCount;
+
+ if(ICQGetContactStaticString(NULL, szSetting, szTmp, sizeof(szTmp)))
+ return def;
+
+ for(i=0;i<listCount;i++)
+ if(!strcmpnull(list[i].szValue, szTmp)) break;
+
+ if(i==listCount) return def;
+
+ return list[i].id;
+}
+
+
+
+int UploadSettings(HWND hwndParent)
+{
+ PBYTE buf = NULL;
+ int buflen = 0;
+/* BYTE b;
+ WORD w;*/
+
+ if (!icqOnline)
+ {
+ MessageBoxUtf(hwndParent, LPGEN("You are not currently connected to the ICQ network. You must be online in order to update your information on the server."), LPGEN("Change ICQ Details"), MB_OK);
+ return 0;
+ }
+
+/* // userinfo
+ ppackTLVWord(&buf, &buflen, (WORD)GetACP(), TLV_CODEPAGE, 0);
+
+ b = !ICQGetContactSettingByte(NULL, "PublishPrimaryEmail", 0);
+ ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail", b, TLV_EMAIL);
+ ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail0", 0, TLV_EMAIL);
+ ppackTLVLNTSBytefromDB(&buf, &buflen, "e-mail1", 0, TLV_EMAIL);
+
+ ppackTLVByte(&buf, &buflen, ICQGetContactSettingByte(NULL, "AllowSpam", 0), TLV_ALLOWSPAM, 1);
+
+ ppackTLVLNTSfromDB(&buf, &buflen, "Phone", TLV_PHONE);
+ ppackTLVLNTSfromDB(&buf, &buflen, "Fax", TLV_FAX);
+ ppackTLVLNTSfromDB(&buf, &buflen, "Cellular", TLV_MOBILE);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyPhone", TLV_WORKPHONE);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyFax", TLV_WORKFAX);
+
+ ppackTLVLNTSfromDB(&buf, &buflen, "Nick", TLV_NICKNAME);
+ ppackTLVLNTSfromDB(&buf, &buflen, "FirstName", TLV_FIRSTNAME);
+ ppackTLVLNTSfromDB(&buf, &buflen, "LastName", TLV_LASTNAME);
+ ppackTLVLNTSfromDB(&buf, &buflen, "About", TLV_ABOUT);
+
+ ppackTLVWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "Age", 0), TLV_AGE, 1);
+ b = ICQGetContactSettingByte(NULL, "Gender", 0);
+ ppackTLVByte(&buf, &buflen, (BYTE)(b ? (b == 'M' ? 2 : 1) : 0), TLV_GENDER, 1);
+ ppackLEWord(&buf, &buflen, TLV_BIRTH);
+ ppackLEWord(&buf, &buflen, 0x06);
+ ppackLEWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "BirthYear", 0));
+ ppackLEWord(&buf, &buflen, (WORD)ICQGetContactSettingByte(NULL, "BirthMonth", 0));
+ ppackLEWord(&buf, &buflen, (WORD)ICQGetContactSettingByte(NULL, "BirthDay", 0));
+
+ ppackTLVWord(&buf, &buflen, (WORD)StringToListItemId("Language1", 0), TLV_LANGUAGE, 1);
+ ppackTLVWord(&buf, &buflen, (WORD)StringToListItemId("Language2", 0), TLV_LANGUAGE, 1);
+ ppackTLVWord(&buf, &buflen, (WORD)StringToListItemId("Language3", 0), TLV_LANGUAGE, 1);
+
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyDepartment", TLV_DEPARTMENT);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyPosition", TLV_POSITION);
+ ppackTLVLNTSfromDB(&buf, &buflen, "Company", TLV_COMPANY);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyStreet", TLV_WORKSTREET);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyState", TLV_WORKSTATE);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyCity", TLV_WORKCITY);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyHomepage", TLV_WORKURL);
+ ppackTLVLNTSfromDB(&buf, &buflen, "CompanyZIP", TLV_WORKZIPCODE);
+ ppackTLVWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "CompanyCountry", 0), TLV_WORKCOUNTRY, 1);
+ ppackTLVWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "CompanyOccupation", 0), TLV_OCUPATION, 1);
+
+ ppackTLVLNTSfromDB(&buf, &buflen, "City", TLV_CITY);
+ ppackTLVLNTSfromDB(&buf, &buflen, "State", TLV_STATE);
+ ppackTLVWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "Country", 0), TLV_COUNTRY, 1);
+ ppackTLVLNTSfromDB(&buf, &buflen, "OriginCity", TLV_ORGCITY);
+ ppackTLVLNTSfromDB(&buf, &buflen, "OriginState", TLV_ORGSTATE);
+ ppackTLVWord(&buf, &buflen, ICQGetContactSettingWord(NULL, "OriginCountry", 0), TLV_ORGCOUNTRY, 1);
+ ppackTLVLNTSfromDB(&buf, &buflen, "Street", TLV_STREET);
+ ppackTLVLNTSfromDB(&buf, &buflen, "ZIP", TLV_ZIPCODE);
+
+ ppackTLVLNTSfromDB(&buf, &buflen, "Homepage", TLV_URL);
+
+ ppackTLVByte(&buf, &buflen, ICQGetContactSettingByte(NULL, "Timezone", 0), TLV_TIMEZONE, 1);
+
+ ppackTLVByte(&buf, &buflen, ICQGetContactSettingByte(NULL, "MaritalStatus", 0), TLV_MARITAL, 1);
+
+ w = StringToListItemId("Interest0Cat", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Interest0Text", TLV_INTERESTS);
+ w = StringToListItemId("Interest1Cat", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Interest1Text", TLV_INTERESTS);
+ w = StringToListItemId("Interest2Cat", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Interest2Text", TLV_INTERESTS);
+ w = StringToListItemId("Interest3Cat", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Interest3Text", TLV_INTERESTS);
+
+ w = StringToListItemId("Past0", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Past0Text", TLV_PASTINFO);
+ w = StringToListItemId("Past1", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Past1Text", TLV_PASTINFO);
+ w = StringToListItemId("Past2", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Past2Text", TLV_PASTINFO);
+
+ w = StringToListItemId("Affiliation0", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Affiliation0Text", TLV_AFFILATIONS);
+ w = StringToListItemId("Affiliation1", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Affiliation1Text", TLV_AFFILATIONS);
+ w = StringToListItemId("Affiliation2", 0);
+ ppackTLVWordLNTSfromDB(&buf, &buflen, w, "Affiliation2Text", TLV_AFFILATIONS);
+
+ hUpload[0] = (HANDLE)icq_changeUserDetailsServ(META_SET_FULLINFO_REQ, buf, (WORD)buflen);*/
+ hUpload[0] = (HANDLE)IcqChangeInfoEx(CIXT_FULL, 0);
+
+ //password
+ {
+ char* tmp;
+
+ tmp = GetUserPassword(TRUE);
+ if(tmp)
+ {
+ if (strlennull(Password) > 0 && strcmpnull(Password, tmp))
+ {
+ buflen = 0; // re-init buffer
+
+ ppackLELNTS(&buf, &buflen, tmp);
+
+ hUpload[1] = (HANDLE)icq_changeUserDetailsServ(META_SET_PASSWORD_REQ, buf, (WORD)buflen);
+
+ {
+ char szPwd[16] = {0};
+
+ if (!ICQGetContactStaticString(NULL, "Password", szPwd, 16) && strlennull(szPwd))
+ { // password is stored in DB, update
+ char ptmp[16];
+
+ strcpy(ptmp, tmp);
+
+ CallService(MS_DB_CRYPT_ENCODESTRING, sizeof(ptmp), (LPARAM)ptmp);
+
+ ICQWriteContactSettingString(NULL, "Password", ptmp);
+ }
+ }
+ }
+ }
+ }
+
+ SAFE_FREE(&buf);
+
+ return 1;
+}
|