From 4cae6446ffc3e024d7b7f0e1fd888459f7ab514e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 29 May 2019 21:51:22 +0300 Subject: SmileyAdd: - options dialog rewritten using UI classes; - unused code removed; - massive code cleaning --- plugins/SmileyAdd/src/download.cpp | 24 +- plugins/SmileyAdd/src/general.cpp | 24 - plugins/SmileyAdd/src/options.cpp | 875 +++++++++++++++---------------------- plugins/SmileyAdd/src/smileys.cpp | 32 +- plugins/SmileyAdd/src/smileys.h | 21 +- plugins/SmileyAdd/src/stdafx.h | 29 +- plugins/SmileyAdd/src/version.h | 2 +- 7 files changed, 411 insertions(+), 596 deletions(-) (limited to 'plugins/SmileyAdd/src') diff --git a/plugins/SmileyAdd/src/download.cpp b/plugins/SmileyAdd/src/download.cpp index 7df7478090..4042119869 100644 --- a/plugins/SmileyAdd/src/download.cpp +++ b/plugins/SmileyAdd/src/download.cpp @@ -36,7 +36,7 @@ struct QueueElem static HANDLE g_hDlMutex; static OBJLIST dlQueue(10); -static wchar_t cachepath[MAX_PATH]; +static wchar_t g_wszCachePath[MAX_PATH]; static bool threadRunning; bool InternetDownloadFile(const char *szUrl, char *szDest, HNETLIBCONN &hHttpDwnl) @@ -167,7 +167,7 @@ bool GetSmileyFile(CMStringW &url, const CMStringW &packstr) bin2hexW(hash, sizeof(hash), wszHash); CMStringW filename; - filename.AppendFormat(L"%s\\%s\\", cachepath, packstr.c_str()); + filename.AppendFormat(L"%s\\%s\\", g_wszCachePath, packstr.c_str()); int pathpos = filename.GetLength(); MRegexp16 urlsplit(L".*/(.*)"); @@ -219,20 +219,10 @@ bool GetSmileyFile(CMStringW &url, const CMStringW &packstr) int FolderChanged(WPARAM, LPARAM) { - FoldersGetCustomPathT(hFolder, cachepath, MAX_PATH, L""); + FoldersGetCustomPathT(hFolder, g_wszCachePath, MAX_PATH, L""); return 0; } -void GetSmileyCacheFolder(void) -{ - hFolder = FoldersRegisterCustomPathT(LPGEN("SmileyAdd"), LPGEN("Smiley cache"), MIRANDA_USERDATAT L"\\SmileyCache"); - if (hFolder) { - FoldersGetCustomPathT(hFolder, cachepath, MAX_PATH, L""); - HookEvent(ME_FOLDERS_PATH_CHANGED, FolderChanged); - } - else mir_wstrncpy(cachepath, VARSW(L"%miranda_userdata%\\SmileyCache"), MAX_PATH); -} - void DownloadInit(void) { NETLIBUSER nlu = {}; @@ -241,7 +231,13 @@ void DownloadInit(void) nlu.szDescriptiveName.w = TranslateT("SmileyAdd HTTP connections"); hNetlibUser = Netlib_RegisterUser(&nlu); - GetSmileyCacheFolder(); + hFolder = FoldersRegisterCustomPathT(LPGEN("SmileyAdd"), LPGEN("Smiley cache"), MIRANDA_USERDATAT L"\\SmileyCache"); + if (hFolder) { + FolderChanged(0, 0); + HookEvent(ME_FOLDERS_PATH_CHANGED, FolderChanged); + } + else mir_wstrncpy(g_wszCachePath, VARSW(L"%miranda_userdata%\\SmileyCache"), MAX_PATH); + g_hDlMutex = CreateMutex(nullptr, FALSE, nullptr); } diff --git a/plugins/SmileyAdd/src/general.cpp b/plugins/SmileyAdd/src/general.cpp index 9291389d6f..9456033e4c 100644 --- a/plugins/SmileyAdd/src/general.cpp +++ b/plugins/SmileyAdd/src/general.cpp @@ -124,30 +124,6 @@ HICON ImageList_GetIconFixed(HIMAGELIST himl, INT i, UINT fStyle) return hIcon; } -void pathToRelative(const CMStringW &pSrc, CMStringW &pOut) -{ - wchar_t szOutPath[MAX_PATH]; - PathToRelativeW(pSrc.c_str(), szOutPath); - pOut = szOutPath; -} - -void pathToAbsolute(const CMStringW &pSrc, CMStringW &pOut) -{ - wchar_t szOutPath[MAX_PATH]; - - wchar_t *szVarPath = Utils_ReplaceVarsW(pSrc.c_str()); - if (szVarPath == (wchar_t*)CALLSERVICE_NOTFOUND || szVarPath == nullptr) { - wchar_t szExpPath[MAX_PATH]; - ExpandEnvironmentStrings(pSrc.c_str(), szExpPath, _countof(szExpPath)); - PathToAbsoluteW(szExpPath, szOutPath); - } - else { - PathToAbsoluteW(szVarPath, szOutPath); - mir_free(szVarPath); - } - pOut = szOutPath; -} - bool InitGdiPlus(void) { Gdiplus::GdiplusStartupInput gdiplusStartupInput; diff --git a/plugins/SmileyAdd/src/options.cpp b/plugins/SmileyAdd/src/options.cpp index a50d4f247a..57bd307f8d 100644 --- a/plugins/SmileyAdd/src/options.cpp +++ b/plugins/SmileyAdd/src/options.cpp @@ -22,504 +22,7 @@ along with this program. If not, see . OptionsType opt; -#define UM_CHECKSTATECHANGE (WM_USER + 100) - -class OptionsDialogType -{ -private: - HWND m_hwndDialog; - SmileyCategoryListType tmpsmcat; - SmileyPackType smPack; - - void InitDialog(void); - void DestroyDialog(void); - void AddCategory(void); - void ApplyChanges(void); - void UpdateControls(bool force = false); - void SetChanged(void); - bool BrowseForSmileyPacks(int item); - void FilenameChanged(void); - void ShowSmileyPreview(void); - void PopulateSmPackList(void); - void UpdateVisibleSmPackList(void); - void UserAction(HTREEITEM hItem); - long GetSelProto(HTREEITEM hItem = nullptr); - -public: - OptionsDialogType(HWND hWnd) { m_hwndDialog = hWnd; } - BOOL DialogProcedure(UINT msg, WPARAM wParam, LPARAM lParam); -}; - -//OptionsDialog class functions -BOOL OptionsDialogType::DialogProcedure(UINT msg, WPARAM wParam, LPARAM lParam) -{ - BOOL Result = FALSE; - - switch (msg) { - case WM_INITDIALOG: - InitDialog(); - Result = TRUE; - break; - - case WM_DESTROY: - DestroyDialog(); - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDC_FILENAME: - switch (HIWORD(wParam)) { - case EN_KILLFOCUS: - FilenameChanged(); - break; - - case EN_CHANGE: - if (GetFocus() == (HWND)lParam) SetChanged(); - break; - } - break; - - case IDC_BROWSE: - if (HIWORD(wParam) == BN_CLICKED) - if (BrowseForSmileyPacks(GetSelProto())) { - UpdateControls(true); - SetChanged(); - } - break; - - case IDC_SMLOPTBUTTON: - if (HIWORD(wParam) == BN_CLICKED) - ShowSmileyPreview(); - break; - - case IDC_USESTDPACK: - if (HIWORD(wParam) == BN_CLICKED) { - BOOL en = IsDlgButtonChecked(m_hwndDialog, IDC_USESTDPACK) == BST_CHECKED; - EnableWindow(GetDlgItem(m_hwndDialog, IDC_USEPHYSPROTO), en); - } // no break! - case IDC_USEPHYSPROTO: - if (HIWORD(wParam) == BN_CLICKED) { - PopulateSmPackList(); - SetChanged(); - } - break; - - case IDC_ADDCATEGORY: - if (HIWORD(wParam) == BN_CLICKED) - AddCategory(); - break; - - case IDC_DELETECATEGORY: - if (HIWORD(wParam) == BN_CLICKED) - if (tmpsmcat.DeleteCustomCategory(GetSelProto())) { - PopulateSmPackList(); - SetChanged(); - } - break; - - case IDC_SPACES: - case IDC_SCALETOTEXTHEIGHT: - case IDC_APPENDSPACES: - case IDC_SCALEALLSMILEYS: - case IDC_IEVIEWSTYLE: - case IDC_ANIMATESEL: - case IDC_ANIMATEDLG: - case IDC_INPUTSMILEYS: - case IDC_DCURSORSMILEY: - case IDC_DISABLECUSTOM: - case IDC_HQSCALING: - case IDC_SORTING_HORIZONTAL: - if (HIWORD(wParam) == BN_CLICKED) - SetChanged(); - break; - - case IDC_MAXCUSTSMSZ: - case IDC_MINSMSZ: - if (HIWORD(wParam) == EN_CHANGE && GetFocus() == (HWND)lParam) - SetChanged(); - break; - } - break; - - case UM_CHECKSTATECHANGE: - UserAction((HTREEITEM)lParam); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_APPLY: - ApplyChanges(); - break; - } - break; - - case IDC_CATEGORYLIST: - switch (((LPNMHDR)lParam)->code) { - case NM_CLICK: - { - TVHITTESTINFO ht = { 0 }; - - DWORD dwpos = GetMessagePos(); - POINTSTOPOINT(ht.pt, MAKEPOINTS(dwpos)); - MapWindowPoints(HWND_DESKTOP, ((LPNMHDR)lParam)->hwndFrom, &ht.pt, 1); - - TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &ht); - if (TVHT_ONITEM & ht.flags) - FilenameChanged(); - if (TVHT_ONITEMSTATEICON & ht.flags) - PostMessage(m_hwndDialog, UM_CHECKSTATECHANGE, 0, (LPARAM)ht.hItem); - } - - case TVN_KEYDOWN: - if (((LPNMTVKEYDOWN)lParam)->wVKey == VK_SPACE) - PostMessage(m_hwndDialog, UM_CHECKSTATECHANGE, 0, - (LPARAM)TreeView_GetSelection(((LPNMHDR)lParam)->hwndFrom)); - break; - - case TVN_SELCHANGED: - LPNMTREEVIEW pnmtv = (LPNMTREEVIEW)lParam; - if (pnmtv->itemNew.state & TVIS_SELECTED) - UpdateControls(); - } - } - break; - } - - return Result; -} - -void OptionsDialogType::AddCategory(void) -{ - wchar_t cat[30]; - GetDlgItemText(m_hwndDialog, IDC_NEWCATEGORY, cat, _countof(cat)); - CMStringW catd = cat; - - if (!catd.IsEmpty()) { - tmpsmcat.AddCategory(cat, catd, smcCustom); - - PopulateSmPackList(); - SetChanged(); - } -} - -void OptionsDialogType::UserAction(HTREEITEM hItem) -{ - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - - if (TreeView_GetCheckState(hLstView, hItem)) { - if (!BrowseForSmileyPacks(GetSelProto(hItem))) - TreeView_SetCheckState(hLstView, hItem, TRUE) - } - else - tmpsmcat.GetSmileyCategory(GetSelProto(hItem))->ClearFilename(); - - if (hItem == TreeView_GetSelection(hLstView)) - UpdateControls(); - else - TreeView_SelectItem(hLstView, hItem); - - SetChanged(); - PopulateSmPackList(); -} - - -void OptionsDialogType::SetChanged(void) -{ - SendMessage(GetParent(m_hwndDialog), PSM_CHANGED, 0, 0); -} - -void OptionsDialogType::UpdateControls(bool force) -{ - const SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(GetSelProto()); - if (smc == nullptr) - return; - - const CMStringW &smf = smc->GetFilename(); - SetDlgItemText(m_hwndDialog, IDC_FILENAME, smf); - - if (smPack.GetFilename() != smf || force) - smPack.LoadSmileyFile(smf, smPack.GetName(), false, true); - - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - TreeView_SetCheckState(hLstView, TreeView_GetSelection(hLstView), smPack.SmileyCount() != 0); - - SetDlgItemText(m_hwndDialog, IDC_LIBAUTHOR, smPack.GetAuthor().c_str()); - SetDlgItemText(m_hwndDialog, IDC_LIBVERSION, smPack.GetVersion().c_str()); - SetDlgItemText(m_hwndDialog, IDC_LIBNAME, TranslateW(smPack.GetName().c_str())); -} - -long OptionsDialogType::GetSelProto(HTREEITEM hItem) -{ - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - TVITEM tvi = { 0 }; - - tvi.mask = TVIF_PARAM; - tvi.hItem = hItem == nullptr ? TreeView_GetSelection(hLstView) : hItem; - - TreeView_GetItem(hLstView, &tvi); - - return (long)tvi.lParam; -} - -void OptionsDialogType::UpdateVisibleSmPackList(void) -{ - bool useOne = IsDlgButtonChecked(m_hwndDialog, IDC_USESTDPACK) == BST_UNCHECKED; - bool usePhysProto = IsDlgButtonChecked(m_hwndDialog, IDC_USEPHYSPROTO) == BST_CHECKED; - - SmileyCategoryListType::SmileyCategoryVectorType &smc = *tmpsmcat.GetSmileyCategoryList(); - for (auto &it : smc) { - bool visiblecat = usePhysProto ? !it->IsAcc() : !it->IsPhysProto(); - bool visible = useOne ? !it->IsProto() : visiblecat; - - if (!visible && it->IsAcc() && !useOne) { - CMStringW PhysProtoName = L"AllProto"; - CMStringW ProtoName = it->GetName(); - DBVARIANT dbv; - if (db_get_ws(0, _T2A(ProtoName.GetBuffer()), "AM_BaseProto", &dbv) == 0) { - ProtoName = dbv.pwszVal; - db_free(&dbv); - } - else - ProtoName.Empty(); - - CMStringW FileName; - if (!ProtoName.IsEmpty()) { - PhysProtoName += ProtoName; - SmileyCategoryType *scm = tmpsmcat.GetSmileyCategory(PhysProtoName); - if (scm == nullptr) - visible = false; - else if (scm->GetFilename().IsEmpty()) - visible = true; - } - } - - it->SetVisible(visible); - } -} - -void OptionsDialogType::PopulateSmPackList(void) -{ - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - - TreeView_SelectItem(hLstView, NULL); - TreeView_DeleteAllItems(hLstView); - - TVINSERTSTRUCT tvi = {}; - tvi.hParent = TVI_ROOT; - tvi.hInsertAfter = TVI_LAST; - tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_STATE | TVIF_SELECTEDIMAGE | TVIF_PARAM; - tvi.item.stateMask = TVIS_STATEIMAGEMASK | TVIS_SELECTED; - UpdateVisibleSmPackList(); - SmileyCategoryListType::SmileyCategoryVectorType &smc = *tmpsmcat.GetSmileyCategoryList(); - for (int i = 0; i < smc.getCount(); i++) { - if (smc[i].IsVisible()) { - tvi.item.pszText = (wchar_t*)smc[i].GetDisplayName().c_str(); - if (!smc[i].IsProto()) { - tvi.item.iImage = 0; - tvi.item.iSelectedImage = 0; - } - else { - tvi.item.iImage = i; - tvi.item.iSelectedImage = i; - } - tvi.item.lParam = i; - tvi.item.state = INDEXTOSTATEIMAGEMASK(smPack.LoadSmileyFile(smc[i].GetFilename(), smc[i].GetDisplayName(), true, true) ? 2 : 1); - TreeView_InsertItem(hLstView, &tvi); - - smPack.Clear(); - } - } - TreeView_SelectItem(hLstView, TreeView_GetRoot(hLstView)); -} - -void OptionsDialogType::InitDialog(void) -{ - TranslateDialogDefault(m_hwndDialog); - - CheckDlgButton(m_hwndDialog, IDC_SPACES, opt.EnforceSpaces ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_SCALETOTEXTHEIGHT, opt.ScaleToTextheight ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_USESTDPACK, opt.UseOneForAll ? BST_UNCHECKED : BST_CHECKED); - CheckDlgButton(m_hwndDialog, IDC_USEPHYSPROTO, opt.UsePhysProto ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_APPENDSPACES, opt.SurroundSmileyWithSpaces ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_SCALEALLSMILEYS, opt.ScaleAllSmileys ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_IEVIEWSTYLE, opt.IEViewStyle ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_ANIMATESEL, opt.AnimateSel ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_ANIMATEDLG, opt.AnimateDlg ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_INPUTSMILEYS, opt.InputSmileys ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_DCURSORSMILEY, opt.DCursorSmiley ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_DISABLECUSTOM, opt.DisableCustom ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_HQSCALING, opt.HQScaling ? BST_CHECKED : BST_UNCHECKED); - CheckDlgButton(m_hwndDialog, IDC_SORTING_HORIZONTAL, opt.HorizontalSorting ? BST_CHECKED : BST_UNCHECKED); - - EnableWindow(GetDlgItem(m_hwndDialog, IDC_USEPHYSPROTO), !opt.UseOneForAll); - - SendDlgItemMessage(m_hwndDialog, IDC_MAXCUSTSPIN, UDM_SETRANGE32, 0, 99); - SendDlgItemMessage(m_hwndDialog, IDC_MAXCUSTSPIN, UDM_SETPOS, 0, opt.MaxCustomSmileySize); - SendDlgItemMessage(m_hwndDialog, IDC_MAXCUSTSMSZ, EM_LIMITTEXT, 2, 0); - - SendDlgItemMessage(m_hwndDialog, IDC_MINSPIN, UDM_SETRANGE32, 0, 99); - SendDlgItemMessage(m_hwndDialog, IDC_MINSPIN, UDM_SETPOS, 0, opt.MinSmileySize); - SendDlgItemMessage(m_hwndDialog, IDC_MINSMSZ, EM_LIMITTEXT, 2, 0); - - // Create and populate image list - HIMAGELIST hImList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), - ILC_MASK | ILC_COLOR32, g_SmileyCategories.NumberOfSmileyCategories(), 0); - - tmpsmcat = g_SmileyCategories; - - SmileyCategoryListType::SmileyCategoryVectorType &smc = *g_SmileyCategories.GetSmileyCategoryList(); - for (auto &it : smc) { - HICON hIcon = nullptr; - if (it->IsProto()) { - hIcon = (HICON)CallProtoService(_T2A(it->GetName().c_str()), PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0); - if (hIcon == nullptr || (INT_PTR)hIcon == CALLSERVICE_NOTFOUND) - hIcon = (HICON)CallProtoService(_T2A(it->GetName().c_str()), PS_LOADICON, PLI_PROTOCOL, 0); - } - if (hIcon == nullptr || hIcon == (HICON)CALLSERVICE_NOTFOUND) - hIcon = GetDefaultIcon(); - - ImageList_AddIcon(hImList, hIcon); - DestroyIcon(hIcon); - } - - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - TreeView_SetImageList(hLstView, hImList, TVSIL_NORMAL); - - PopulateSmPackList(); -} - -void OptionsDialogType::DestroyDialog(void) -{ - HWND hLstView = GetDlgItem(m_hwndDialog, IDC_CATEGORYLIST); - HIMAGELIST hImList = TreeView_SetImageList(hLstView, NULL, TVSIL_NORMAL); - ImageList_Destroy(hImList); -} - -void OptionsDialogType::ApplyChanges(void) -{ - ProcessAllInputAreas(true); - CloseSmileys(); - - opt.EnforceSpaces = IsDlgButtonChecked(m_hwndDialog, IDC_SPACES) == BST_CHECKED; - opt.ScaleToTextheight = IsDlgButtonChecked(m_hwndDialog, IDC_SCALETOTEXTHEIGHT) == BST_CHECKED; - opt.UseOneForAll = IsDlgButtonChecked(m_hwndDialog, IDC_USESTDPACK) == BST_UNCHECKED; - opt.UsePhysProto = IsDlgButtonChecked(m_hwndDialog, IDC_USEPHYSPROTO) == BST_CHECKED; - opt.SurroundSmileyWithSpaces = IsDlgButtonChecked(m_hwndDialog, IDC_APPENDSPACES) == BST_CHECKED; - opt.ScaleAllSmileys = IsDlgButtonChecked(m_hwndDialog, IDC_SCALEALLSMILEYS) == BST_CHECKED; - opt.IEViewStyle = IsDlgButtonChecked(m_hwndDialog, IDC_IEVIEWSTYLE) == BST_CHECKED; - opt.AnimateSel = IsDlgButtonChecked(m_hwndDialog, IDC_ANIMATESEL) == BST_CHECKED; - opt.AnimateDlg = IsDlgButtonChecked(m_hwndDialog, IDC_ANIMATEDLG) == BST_CHECKED; - opt.InputSmileys = IsDlgButtonChecked(m_hwndDialog, IDC_INPUTSMILEYS) == BST_CHECKED; - opt.DCursorSmiley = IsDlgButtonChecked(m_hwndDialog, IDC_DCURSORSMILEY) == BST_CHECKED; - opt.DisableCustom = IsDlgButtonChecked(m_hwndDialog, IDC_DISABLECUSTOM) == BST_CHECKED; - opt.HQScaling = IsDlgButtonChecked(m_hwndDialog, IDC_HQSCALING) == BST_CHECKED; - opt.HorizontalSorting = IsDlgButtonChecked(m_hwndDialog, IDC_SORTING_HORIZONTAL) == BST_CHECKED; - - opt.MaxCustomSmileySize = GetDlgItemInt(m_hwndDialog, IDC_MAXCUSTSMSZ, nullptr, FALSE); - opt.MinSmileySize = GetDlgItemInt(m_hwndDialog, IDC_MINSMSZ, nullptr, FALSE); - - opt.Save(); - - // Cleanup database - CMStringW empty; - SmileyCategoryListType::SmileyCategoryVectorType &smc = *g_SmileyCategories.GetSmileyCategoryList(); - for (auto &it : smc) - if (tmpsmcat.GetSmileyCategory(it->GetName()) == nullptr) - opt.WritePackFileName(empty, it->GetName()); - - g_SmileyCategories = tmpsmcat; - g_SmileyCategories.SaveSettings(); - g_SmileyCategories.ClearAndLoadAll(); - - smPack.LoadSmileyFile(tmpsmcat.GetSmileyCategory(GetSelProto())->GetFilename(), tmpsmcat.GetSmileyCategory(GetSelProto())->GetDisplayName(), false, true); - - NotifyEventHooks(hEvent1, 0, 0); - ProcessAllInputAreas(false); -} - -bool OptionsDialogType::BrowseForSmileyPacks(int item) -{ - OPENFILENAME ofn = { 0 }; - - wchar_t filename[MAX_PATH] = L""; - ofn.lpstrFile = filename; - ofn.nMaxFile = _countof(filename); - - CMStringW inidir; - SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(item); - if (smc->GetFilename().IsEmpty()) - pathToAbsolute(L"Smileys", inidir); - else { - pathToAbsolute(smc->GetFilename(), inidir); - inidir.Truncate(inidir.ReverseFind('\\')); - } - - ofn.lpstrInitialDir = inidir.c_str(); - ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; - ofn.hwndOwner = m_hwndDialog; - - wchar_t filter[512], *pfilter; - mir_wstrcpy(filter, TranslateT("Smiley packs")); - mir_wstrcat(filter, L" (*.msl;*.asl;*.xep)"); - pfilter = filter + mir_wstrlen(filter) + 1; - mir_wstrcpy(pfilter, L"*.msl;*.asl;*.xep"); - pfilter = pfilter + mir_wstrlen(pfilter) + 1; - mir_wstrcpy(pfilter, TranslateT("All files")); - mir_wstrcat(pfilter, L" (*.*)"); - pfilter = pfilter + mir_wstrlen(pfilter) + 1; - mir_wstrcpy(pfilter, L"*.*"); - pfilter = pfilter + mir_wstrlen(pfilter) + 1; - *pfilter = '\0'; - ofn.lpstrFilter = filter; - - ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_READONLY | - OFN_EXPLORER | OFN_LONGNAMES | OFN_NOCHANGEDIR; - ofn.lpstrDefExt = L"msl"; - - if (GetOpenFileName(&ofn)) { - CMStringW relpath; - pathToRelative(filename, relpath); - smc->SetFilename(relpath); - - return true; - } - - return false; -} - -void OptionsDialogType::FilenameChanged(void) -{ - wchar_t str[MAX_PATH]; - GetDlgItemText(m_hwndDialog, IDC_FILENAME, str, _countof(str)); - - SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(GetSelProto()); - if (smc->GetFilename() != str) { - CMStringW temp(str); - smc->SetFilename(temp); - UpdateControls(); - } -} - -void OptionsDialogType::ShowSmileyPreview(void) -{ - RECT rect; - GetWindowRect(GetDlgItem(m_hwndDialog, IDC_SMLOPTBUTTON), &rect); - - SmileyToolWindowParam *stwp = new SmileyToolWindowParam; - stwp->pSmileyPack = &smPack; - stwp->hWndParent = m_hwndDialog; - stwp->hWndTarget = nullptr; - stwp->targetMessage = 0; - stwp->targetWParam = 0; - stwp->xPosition = rect.left; - stwp->yPosition = rect.bottom + 4; - stwp->direction = 1; - stwp->hContact = NULL; - - mir_forkThread(SmileyToolThread, stwp); -} +///////////////////////////////////////////////////////////////////////////////////////// void OptionsType::Save(void) { @@ -610,31 +113,381 @@ void OptionsType::WriteContactCategory(MCONTACT hContact, const CMStringW &cats) ///////////////////////////////////////////////////////////////////////////////////////// // Init and de-init functions, called from main -static INT_PTR CALLBACK DlgProcSmileysOptions(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +class COptionsDialog : public CDlgBase { - OptionsDialogType *pOD = (OptionsDialogType*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - if (pOD == nullptr) { - pOD = new OptionsDialogType(hwndDlg); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)pOD); + SmileyCategoryListType tmpsmcat; + SmileyPackType smPack; + + bool BrowseForSmileyPacks(int item) + { + wchar_t filter[512], filename[MAX_PATH] = L""; + mir_snwprintf(filter, L"%s (*.msl;*.asl;*.xep)%c*.msl;*.asl;*.xep%c%s (*.*)%c*.*%c", TranslateT("Smiley packs"), 0, 0, TranslateT("All files"), 0, 0); + + CMStringW inidir; + SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(item); + if (smc->GetFilename().IsEmpty()) + inidir = VARSW(L"Smileys"); + else { + inidir = VARSW(smc->GetFilename()); + inidir.Truncate(inidir.ReverseFind('\\')); + } + + OPENFILENAME ofn = {}; + ofn.lpstrFile = filename; + ofn.nMaxFile = _countof(filename); + ofn.lpstrInitialDir = inidir.c_str(); + ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; + ofn.hwndOwner = m_hwnd; + ofn.lpstrFilter = filter; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_READONLY | OFN_EXPLORER | OFN_LONGNAMES | OFN_NOCHANGEDIR; + ofn.lpstrDefExt = L"msl"; + if (!GetOpenFileNameW(&ofn)) + return false; + + wchar_t szOutPath[MAX_PATH]; + PathToRelativeW(filename, szOutPath); + smc->SetFilename(szOutPath); + return true; } - INT_PTR Result = pOD->DialogProcedure(msg, wParam, lParam); - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, Result); + long GetSelProto(HTREEITEM hItem = nullptr) + { + TVITEMEX tvi = {}; + tvi.mask = TVIF_PARAM; + tvi.hItem = hItem == nullptr ? categories.GetSelection() : hItem; + categories.GetItem(&tvi); + return (long)tvi.lParam; + } - if (msg == WM_NCDESTROY) - delete pOD; + void PopulateSmPackList(void) + { + categories.SelectItem(NULL); + categories.DeleteAllItems(); + + UpdateVisibleSmPackList(); + + TVINSERTSTRUCT tvi = {}; + tvi.hParent = TVI_ROOT; + tvi.hInsertAfter = TVI_LAST; + tvi.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_STATE | TVIF_SELECTEDIMAGE | TVIF_PARAM; + tvi.item.stateMask = TVIS_STATEIMAGEMASK | TVIS_SELECTED; + + SmileyCategoryListType::SmileyCategoryVectorType &smc = *tmpsmcat.GetSmileyCategoryList(); + for (int i = 0; i < smc.getCount(); i++) { + if (smc[i].IsVisible()) { + tvi.item.pszText = (wchar_t *)smc[i].GetDisplayName().c_str(); + if (!smc[i].IsProto()) { + tvi.item.iImage = 0; + tvi.item.iSelectedImage = 0; + } + else { + tvi.item.iImage = i; + tvi.item.iSelectedImage = i; + } + tvi.item.lParam = i; + tvi.item.state = INDEXTOSTATEIMAGEMASK(smPack.LoadSmileyFile(smc[i].GetFilename(), smc[i].GetDisplayName(), true, true) ? 2 : 1); + categories.InsertItem(&tvi); - return Result; -} + smPack.Clear(); + } + } + categories.SelectItem(categories.GetRoot()); + } + + void UpdateControls(bool force = false) + { + const SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(GetSelProto()); + if (smc == nullptr) + return; + + const CMStringW &smf = smc->GetFilename(); + SetDlgItemText(m_hwnd, IDC_FILENAME, smf); + + if (smPack.GetFilename() != smf || force) + smPack.LoadSmileyFile(smf, smPack.GetName(), false, true); + + categories.SetCheckState(categories.GetSelection(), smPack.SmileyCount() != 0); + + SetDlgItemText(m_hwnd, IDC_LIBAUTHOR, smPack.GetAuthor().c_str()); + SetDlgItemText(m_hwnd, IDC_LIBVERSION, smPack.GetVersion().c_str()); + SetDlgItemText(m_hwnd, IDC_LIBNAME, TranslateW(smPack.GetName().c_str())); + } + + void UpdateVisibleSmPackList() + { + bool useOne = !chkStdPack.GetState(); + bool usePhysProto = chkUsePhys.GetState(); + + SmileyCategoryListType::SmileyCategoryVectorType &smc = *tmpsmcat.GetSmileyCategoryList(); + for (auto &it : smc) { + bool visiblecat = usePhysProto ? !it->IsAcc() : !it->IsPhysProto(); + bool visible = useOne ? !it->IsProto() : visiblecat; + + if (!visible && it->IsAcc() && !useOne) { + CMStringW PhysProtoName = L"AllProto"; + CMStringW ProtoName = it->GetName(); + DBVARIANT dbv; + if (db_get_ws(0, _T2A(ProtoName.GetBuffer()), "AM_BaseProto", &dbv) == 0) { + ProtoName = dbv.pwszVal; + db_free(&dbv); + } + else + ProtoName.Empty(); + + CMStringW FileName; + if (!ProtoName.IsEmpty()) { + PhysProtoName += ProtoName; + SmileyCategoryType *scm = tmpsmcat.GetSmileyCategory(PhysProtoName); + if (scm == nullptr) + visible = false; + else if (scm->GetFilename().IsEmpty()) + visible = true; + } + } + + it->SetVisible(visible); + } + } + + void UserAction(HTREEITEM hItem) + { + if (categories.GetCheckState(hItem)) { + if (!BrowseForSmileyPacks(GetSelProto(hItem))) + categories.SetCheckState(hItem, TRUE); + } + else tmpsmcat.GetSmileyCategory(GetSelProto(hItem))->ClearFilename(); + + if (hItem == categories.GetSelection()) + UpdateControls(); + else + categories.SelectItem(hItem); + + NotifyChange(); + PopulateSmPackList(); + } + + CCtrlEdit edtFilename; + CCtrlCheck chkStdPack, chkUsePhys; + CCtrlButton btnAdd, btnBrowse, btnDelete, btnPreview; + CCtrlTreeView categories; + +public: + COptionsDialog() : + CDlgBase(g_plugin, IDD_OPT_SMILEYS), + btnAdd(this, IDC_ADDCATEGORY), + btnBrowse(this, IDC_BROWSE), + btnDelete(this, IDC_DELETECATEGORY), + btnPreview(this, IDC_SMLOPTBUTTON), + chkStdPack(this, IDC_USESTDPACK), + chkUsePhys(this, IDC_USEPHYSPROTO), + categories(this, IDC_CATEGORYLIST), + edtFilename(this, IDC_FILENAME) + { + btnAdd.OnClick = Callback(this, &COptionsDialog::onClick_Add); + btnBrowse.OnClick = Callback(this, &COptionsDialog::onClick_Browse); + btnDelete.OnClick = Callback(this, &COptionsDialog::onClick_Delete); + btnPreview.OnClick = Callback(this, &COptionsDialog::onClick_Preview); + + chkStdPack.OnChange = Callback(this, &COptionsDialog::onChange_StdPack); + chkUsePhys.OnChange = Callback(this, &COptionsDialog::onChange_UsePhys); + edtFilename.OnChange = Callback(this, &COptionsDialog::onChange_Filename); + + categories.OnSelChanged = Callback(this, &COptionsDialog::onSelectChange_Tree); + categories.OnItemChanged = Callback(this, &COptionsDialog::onChange_Filename); + } + + bool OnInitDialog() override + { + chkStdPack.SetState(opt.UseOneForAll); + chkUsePhys.SetState(opt.UsePhysProto); + chkUsePhys.Enable(!opt.UseOneForAll); + + CheckDlgButton(m_hwnd, IDC_SPACES, opt.EnforceSpaces ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SCALETOTEXTHEIGHT, opt.ScaleToTextheight ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_APPENDSPACES, opt.SurroundSmileyWithSpaces ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SCALEALLSMILEYS, opt.ScaleAllSmileys ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_IEVIEWSTYLE, opt.IEViewStyle ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_ANIMATESEL, opt.AnimateSel ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_ANIMATEDLG, opt.AnimateDlg ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_INPUTSMILEYS, opt.InputSmileys ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_DCURSORSMILEY, opt.DCursorSmiley ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_DISABLECUSTOM, opt.DisableCustom ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_HQSCALING, opt.HQScaling ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(m_hwnd, IDC_SORTING_HORIZONTAL, opt.HorizontalSorting ? BST_CHECKED : BST_UNCHECKED); + + SendDlgItemMessage(m_hwnd, IDC_MAXCUSTSPIN, UDM_SETRANGE32, 0, 99); + SendDlgItemMessage(m_hwnd, IDC_MAXCUSTSPIN, UDM_SETPOS, 0, opt.MaxCustomSmileySize); + SendDlgItemMessage(m_hwnd, IDC_MAXCUSTSMSZ, EM_LIMITTEXT, 2, 0); + + SendDlgItemMessage(m_hwnd, IDC_MINSPIN, UDM_SETRANGE32, 0, 99); + SendDlgItemMessage(m_hwnd, IDC_MINSPIN, UDM_SETPOS, 0, opt.MinSmileySize); + SendDlgItemMessage(m_hwnd, IDC_MINSMSZ, EM_LIMITTEXT, 2, 0); + + // Create and populate image list + HIMAGELIST hImList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), + ILC_MASK | ILC_COLOR32, g_SmileyCategories.NumberOfSmileyCategories(), 0); + + tmpsmcat = g_SmileyCategories; + + SmileyCategoryListType::SmileyCategoryVectorType &smc = *g_SmileyCategories.GetSmileyCategoryList(); + for (auto &it : smc) { + HICON hIcon = nullptr; + if (it->IsProto()) { + hIcon = (HICON)CallProtoService(_T2A(it->GetName().c_str()), PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0); + if (hIcon == nullptr || (INT_PTR)hIcon == CALLSERVICE_NOTFOUND) + hIcon = (HICON)CallProtoService(_T2A(it->GetName().c_str()), PS_LOADICON, PLI_PROTOCOL, 0); + } + if (hIcon == nullptr || hIcon == (HICON)CALLSERVICE_NOTFOUND) + hIcon = GetDefaultIcon(); + + ImageList_AddIcon(hImList, hIcon); + DestroyIcon(hIcon); + } + + categories.SetImageList(hImList, TVSIL_NORMAL); + + PopulateSmPackList(); + return true; + } + + bool OnApply() override + { + ProcessAllInputAreas(true); + CloseSmileys(); + + opt.UseOneForAll = chkStdPack.GetState(); + opt.UsePhysProto = chkUsePhys.GetState(); + + opt.EnforceSpaces = IsDlgButtonChecked(m_hwnd, IDC_SPACES) == BST_CHECKED; + opt.ScaleToTextheight = IsDlgButtonChecked(m_hwnd, IDC_SCALETOTEXTHEIGHT) == BST_CHECKED; + opt.SurroundSmileyWithSpaces = IsDlgButtonChecked(m_hwnd, IDC_APPENDSPACES) == BST_CHECKED; + opt.ScaleAllSmileys = IsDlgButtonChecked(m_hwnd, IDC_SCALEALLSMILEYS) == BST_CHECKED; + opt.IEViewStyle = IsDlgButtonChecked(m_hwnd, IDC_IEVIEWSTYLE) == BST_CHECKED; + opt.AnimateSel = IsDlgButtonChecked(m_hwnd, IDC_ANIMATESEL) == BST_CHECKED; + opt.AnimateDlg = IsDlgButtonChecked(m_hwnd, IDC_ANIMATEDLG) == BST_CHECKED; + opt.InputSmileys = IsDlgButtonChecked(m_hwnd, IDC_INPUTSMILEYS) == BST_CHECKED; + opt.DCursorSmiley = IsDlgButtonChecked(m_hwnd, IDC_DCURSORSMILEY) == BST_CHECKED; + opt.DisableCustom = IsDlgButtonChecked(m_hwnd, IDC_DISABLECUSTOM) == BST_CHECKED; + opt.HQScaling = IsDlgButtonChecked(m_hwnd, IDC_HQSCALING) == BST_CHECKED; + opt.HorizontalSorting = IsDlgButtonChecked(m_hwnd, IDC_SORTING_HORIZONTAL) == BST_CHECKED; + + opt.MaxCustomSmileySize = GetDlgItemInt(m_hwnd, IDC_MAXCUSTSMSZ, nullptr, FALSE); + opt.MinSmileySize = GetDlgItemInt(m_hwnd, IDC_MINSMSZ, nullptr, FALSE); + + opt.Save(); + + // Cleanup database + CMStringW empty; + SmileyCategoryListType::SmileyCategoryVectorType &smc = *g_SmileyCategories.GetSmileyCategoryList(); + for (auto &it : smc) + if (tmpsmcat.GetSmileyCategory(it->GetName()) == nullptr) + opt.WritePackFileName(empty, it->GetName()); + + g_SmileyCategories = tmpsmcat; + g_SmileyCategories.SaveSettings(); + g_SmileyCategories.ClearAndLoadAll(); + + smPack.LoadSmileyFile(tmpsmcat.GetSmileyCategory(GetSelProto())->GetFilename(), tmpsmcat.GetSmileyCategory(GetSelProto())->GetDisplayName(), false, true); + + NotifyEventHooks(hEvent1, 0, 0); + ProcessAllInputAreas(false); + return true; + } + + void OnDestroy() override + { + HIMAGELIST hImList = categories.GetImageList(TVSIL_NORMAL); + ImageList_Destroy(hImList); + } + + void onClick_Add(CCtrlButton*) + { + wchar_t cat[30]; + GetDlgItemText(m_hwnd, IDC_NEWCATEGORY, cat, _countof(cat)); + CMStringW catd = cat; + + if (!catd.IsEmpty()) { + tmpsmcat.AddCategory(cat, catd, smcCustom, DEFAULT_FILE_NAME); + + PopulateSmPackList(); + NotifyChange(); + } + } + + void onClick_Browse(CCtrlButton*) + { + if (BrowseForSmileyPacks(GetSelProto())) { + UpdateControls(true); + NotifyChange(); + } + } + + void onClick_Delete(CCtrlButton*) + { + if (tmpsmcat.DeleteCustomCategory(GetSelProto())) { + PopulateSmPackList(); + NotifyChange(); + } + } + + void onClick_Preview(CCtrlButton*) + { + RECT rect; + GetWindowRect(GetDlgItem(m_hwnd, IDC_SMLOPTBUTTON), &rect); + + SmileyToolWindowParam *stwp = new SmileyToolWindowParam; + stwp->pSmileyPack = &smPack; + stwp->hWndParent = m_hwnd; + stwp->hWndTarget = nullptr; + stwp->targetMessage = 0; + stwp->targetWParam = 0; + stwp->xPosition = rect.left; + stwp->yPosition = rect.bottom + 4; + stwp->direction = 1; + stwp->hContact = NULL; + + mir_forkThread(SmileyToolThread, stwp); + } + + void onChange_Filename(CCtrlEdit*) + { + wchar_t str[MAX_PATH]; + GetDlgItemTextW(m_hwnd, IDC_FILENAME, str, _countof(str)); + + SmileyCategoryType *smc = tmpsmcat.GetSmileyCategory(GetSelProto()); + if (smc->GetFilename() != str) { + smc->SetFilename(str); + UpdateControls(); + } + } + + void onChange_StdPack(CCtrlCheck*) + { + chkUsePhys.Enable(chkStdPack.GetState()); + PopulateSmPackList(); + NotifyChange(); + } + + void onChange_UsePhys(CCtrlCheck*) + { + PopulateSmPackList(); + NotifyChange(); + } + + void onSelectChange_Tree(CCtrlTreeView::TEventInfo *ev) + { + if (ev->nmtv->itemNew.state & TVIS_SELECTED) + UpdateControls(); + } +}; int SmileysOptionsInitialize(WPARAM addInfo, LPARAM) { OPTIONSDIALOGPAGE odp = {}; odp.position = 910000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_SMILEYS); odp.szTitle.a = LPGEN("Smileys"); odp.szGroup.a = LPGEN("Customize"); - odp.pfnDlgProc = DlgProcSmileysOptions; + odp.pDialog = new COptionsDialog(); odp.flags = ODPF_BOLDGROUPS; g_plugin.addOptions(addInfo, &odp); return 0; diff --git a/plugins/SmileyAdd/src/smileys.cpp b/plugins/SmileyAdd/src/smileys.cpp index b661ce2f0c..9e70af2581 100644 --- a/plugins/SmileyAdd/src/smileys.cpp +++ b/plugins/SmileyAdd/src/smileys.cpp @@ -350,9 +350,8 @@ bool SmileyPackType::LoadSmileyFile(const CMStringW &filename, const CMStringW & return false; } - CMStringW modpath; - pathToAbsolute(filename, modpath); - if (_waccess(filename, 4) != 0) { + CMStringW modpath = VARSW(filename); + if (_waccess(modpath, 4) != 0) { if (!noerr) { static const wchar_t errmsg[] = LPGENW("Smiley pack %s for category \"%s\" not found.\nSelect correct smiley pack in the Options -> Customize -> Smileys."); wchar_t msgtxt[1024]; @@ -668,12 +667,10 @@ bool SmileyPackListType::AddSmileyPack(CMStringW &filename, CMStringW &packname) SmileyPackType* SmileyPackListType::GetSmileyPack(CMStringW &filename) { - CMStringW modpath; - pathToAbsolute(filename, modpath); + CMStringW modpath = VARSW(filename); for (auto &it : m_SmileyPacks) { - CMStringW modpath1; - pathToAbsolute(it->GetFilename(), modpath1); + CMStringW modpath1(VARSW(it->GetFilename())); if (mir_wstrcmpi(modpath.c_str(), modpath1.c_str()) == 0) return it; } @@ -749,7 +746,7 @@ SmileyCategoryType* SmileyCategoryListType::GetSmileyCategory(unsigned index) return index < (unsigned)m_SmileyCategories.getCount() ? &m_SmileyCategories[index] : nullptr; } -SmileyPackType* SmileyCategoryListType::GetSmileyPack(CMStringW &categoryname) +SmileyPackType* SmileyCategoryListType::GetSmileyPack(const CMStringW &categoryname) { SmileyCategoryType *smc = GetSmileyCategory(categoryname); return smc != nullptr ? smc->GetSmileyPack() : nullptr; @@ -774,7 +771,8 @@ void SmileyCategoryListType::AddAndLoad(const CMStringW &name, const CMStringW & if (GetSmileyCategory(name) != nullptr) return; - AddCategory(name, displayName, smcExt); + AddCategory(name, displayName, smcExt, DEFAULT_FILE_NAME); + // Load only if other smileys have been loaded already if (m_SmileyCategories.getCount() > 1) m_SmileyCategories[m_SmileyCategories.getCount() - 1].Load(); @@ -823,10 +821,7 @@ void SmileyCategoryListType::AddAccountAsCategory(PROTOACCOUNT *acc, const CMStr char path[MAX_PATH]; mir_snprintf(path, "Smileys\\nova\\%s.msl", packnam); - paths = _A2T(path); - CMStringW patha; - pathToAbsolute(paths, patha); - + CMStringW patha = VARSW(_A2T(path)); if (_waccess(patha.c_str(), 0) != 0) paths = defaultFile; } @@ -850,11 +845,10 @@ void SmileyCategoryListType::AddProtoAsCategory(char *acc, const CMStringW &defa char path[MAX_PATH]; mir_snprintf(path, "Smileys\\nova\\%s.msl", packnam); - CMStringW paths = _A2T(path), patha; - pathToAbsolute(paths, patha); - + CMStringW paths = _A2T(path), patha = VARSW(paths); if (_waccess(patha.c_str(), 0) != 0) paths = defaultFile; + CMStringW dName(acc), displayName; displayName.AppendFormat(TranslateT("%s global smiley pack"), dName.GetBuffer()); CMStringW tname("AllProto"); @@ -922,9 +916,7 @@ void SmileyCategoryListType::AddContactTransportAsCategory(MCONTACT hContact, co char path[MAX_PATH]; mir_snprintf(path, "Smileys\\nova\\%s.msl", packname); - CMStringW paths = _A2T(path), patha; - pathToAbsolute(paths, patha); - + CMStringW paths = _A2T(path), patha = VARSW(paths); if (_waccess(patha.c_str(), 0) != 0) paths = defaultFile; @@ -940,7 +932,7 @@ void SmileyCategoryListType::AddAllProtocolsAsCategory(void) { CMStringW displayName = TranslateT("Standard"); CMStringW tname = L"Standard"; - AddCategory(tname, displayName, smcStd); + AddCategory(tname, displayName, smcStd, DEFAULT_FILE_NAME); const CMStringW &defaultFile = GetSmileyCategory(tname)->GetFilename(); diff --git a/plugins/SmileyAdd/src/smileys.h b/plugins/SmileyAdd/src/smileys.h index dfcde52468..00252e758f 100644 --- a/plugins/SmileyAdd/src/smileys.h +++ b/plugins/SmileyAdd/src/smileys.h @@ -23,6 +23,8 @@ along with this program. If not, see . #define MS_SMILEYADD_CUSTOMCATMENU "SmileyAdd/CustomCatMenu" +#define DEFAULT_FILE_NAME L"Smileys\\nova\\default.msl" + const unsigned HiddenSmiley = 1; const unsigned RegExSmiley = 2; const unsigned ServiceSmiley = 4; @@ -274,8 +276,8 @@ public: SmileyPackType* GetSmileyPack(void); - void SetFilename(CMStringW& name) { m_Filename = name; } - void SetDisplayName(CMStringW& name) { m_DisplayName = name; } + void SetFilename(const CMStringW& name) { m_Filename = name; } + void SetDisplayName(const CMStringW& name) { m_DisplayName = name; } void SetVisible(bool vis) { visible = vis; } void ClearFilename(void) { m_Filename.Empty(); } @@ -297,20 +299,19 @@ private: public: void SetSmileyPackStore(SmileyPackListType *pSPS) { m_pSmileyPackStore = pSPS; } - SmileyCategoryType* GetSmileyCategory(const CMStringW& name); + SmileyCategoryType* GetSmileyCategory(const CMStringW &name); SmileyCategoryType* GetSmileyCategory(unsigned index); - SmileyPackType* GetSmileyPack(CMStringW& name); + SmileyPackType* GetSmileyPack(const CMStringW &name); SmileyCategoryVectorType* GetSmileyCategoryList(void) { return &m_SmileyCategories; }; int NumberOfSmileyCategories(void) { return m_SmileyCategories.getCount(); } - void AddCategory(const CMStringW& name, const CMStringW& displayName, SmcType typ, - const CMStringW& defaultFilename = CMStringW(L"Smileys\\nova\\default.msl")); - void AddAndLoad(const CMStringW& name, const CMStringW& displayName); + void AddCategory(const CMStringW &name, const CMStringW &displayName, SmcType typ, const CMStringW &defaultFilename); + void AddAndLoad(const CMStringW &name, const CMStringW &displayName); void AddAllProtocolsAsCategory(void); - void AddAccountAsCategory(PROTOACCOUNT *acc, const CMStringW& defaultFile); - void AddProtoAsCategory(char *acc, const CMStringW& defaultFile); - void AddContactTransportAsCategory(MCONTACT hContact, const CMStringW& defaultFile); + void AddAccountAsCategory(PROTOACCOUNT *acc, const CMStringW &defaultFile); + void AddProtoAsCategory(char *acc, const CMStringW &defaultFile); + void AddContactTransportAsCategory(MCONTACT hContact, const CMStringW &defaultFile); void ClearAndLoadAll(void); void ClearAll(void) diff --git a/plugins/SmileyAdd/src/stdafx.h b/plugins/SmileyAdd/src/stdafx.h index 35949d1e36..d0d2bc2fa1 100644 --- a/plugins/SmileyAdd/src/stdafx.h +++ b/plugins/SmileyAdd/src/stdafx.h @@ -52,26 +52,26 @@ along with this program. If not, see . #include #include +#include #include -#include -#include -#include #include -#include -#include -#include +#include +#include #include -#include -#include #include +#include +#include #include -#include -#include -#include - +#include +#include #include +#include +#include +#include +#include +#include #include -#include +#include #include "resource.h" #include "version.h" @@ -129,9 +129,6 @@ bool IsSmileyProto(char *proto); HICON ImageList_GetIconFixed (HIMAGELIST himl, INT i, UINT fStyle); -void pathToRelative(const CMStringW &pSrc, CMStringW &pOut); -void pathToAbsolute(const CMStringW &pSrc, CMStringW &pOut); - bool InitGdiPlus(void); void DestroyGdiPlus(void); diff --git a/plugins/SmileyAdd/src/version.h b/plugins/SmileyAdd/src/version.h index 9f256db3d2..96815a5b35 100644 --- a/plugins/SmileyAdd/src/version.h +++ b/plugins/SmileyAdd/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 3 #define __RELEASE_NUM 1 -#define __BUILD_NUM 1 +#define __BUILD_NUM 2 #include -- cgit v1.2.3