/* Custom profile folders plugin for Miranda IM Copyright © 2005 Cristian Libotean This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "foldersList.h" CFoldersList::CFoldersList(int initialSize) { capacity = 0; count = 0; list = NULL; Enlarge(initialSize); } CFoldersList::~CFoldersList() { Clear(); free(list); } void CFoldersList::Clear() { int i; for (i = 0; i < count; i++) { delete (list[i]); } count = 0; } int CFoldersList::Count() { return count; } int CFoldersList::Capacity() { return capacity; } void CFoldersList::Save() { int i; for (i = 0; i < count; i++) { list[i]->Save(); } } PFolderItem CFoldersList::Get(int index) { index--; if ((index < 0) || (index >= count)) { return NULL; } return list[index]; } PFolderItem CFoldersList::Get(const char *section, const char *name) { int i; for (i = 0; i < count; i++) { if (list[i]->IsEqual(section, name)) { return list[i]; } } return NULL; } PFolderItem CFoldersList::Get(const WCHAR *section, const WCHAR *name) { const int MAX_SIZE = 2048; char aSection[MAX_SIZE]; char aName[MAX_SIZE]; UINT cp = static_cast(CallService(MS_LANGPACK_GETCODEPAGE, 0, 0)); WideCharToMultiByte(cp, 0, section, -1, aSection, MAX_SIZE, NULL, NULL); WideCharToMultiByte(cp, 0, name, -1, aName, MAX_SIZE, NULL, NULL); return Get(aSection, aName); } PFolderItem CFoldersList::GetTranslated(const char *trSection, const char *trName) { int i; for (i = 0; i < count; i++) { if (list[i]->IsEqualTranslated(trSection, trName)) { return list[i]; } } return NULL; } PFolderItem CFoldersList::GetTranslated(WCHAR *trSection, const WCHAR *trName) { const int MAX_SIZE = 2048; char aSection[MAX_SIZE]; char aName[MAX_SIZE]; UINT cp = static_cast(CallService(MS_LANGPACK_GETCODEPAGE, 0, 0)); WideCharToMultiByte(cp, 0, trSection, -1, aSection, MAX_SIZE, NULL, NULL); WideCharToMultiByte(cp, 0, trName, -1, aName, MAX_SIZE, NULL, NULL); return GetTranslated(aSection, aName); } int CFoldersList::Expand(int index, char *szResult, int size) { PFolderItem tmp = Get(index); int res = 1; if (tmp) { tmp->Expand(szResult, size); res = 0; } else{ memset(szResult, 0, size); } return res; } int CFoldersList::Add(CFolderItem *item) { EnsureCapacity(); int pos = Contains(item); if (!pos) { list[count++] = item; return count; } else{ delete item; return pos; } return 0; } int CFoldersList::Add(FOLDERSDATA data) { CFolderItem *item; if (data.flags & FF_UNICODE) { item = new CFolderItem(data.szSection, data.szName, (char *) data.szFormatW, data.flags); } else{ item = new CFolderItem(data.szSection, data.szName, data.szFormat, data.flags); } return Add(item); } void CFoldersList::Remove(CFolderItem *item) { // Remove(item->GetUniqueID()); } void CFoldersList::Remove(int uniqueID) { /* int i, j; CFolderItem *tmp; for (i = 0; i < count; i++) { if (list[i]->GetUniqueID() == uniqueID) { tmp = list[i]; for (j = i; j < count - 1; j++) { list[j] = list[j + 1]; } count--; delete tmp; return; } } */ } int CFoldersList::Contains(CFolderItem *item) { return Contains(item->GetSection(), item->GetName()); } int CFoldersList::Contains(const char *section, const char *name) { int i; for (i = 0; i < count; i++) { if (list[i]->IsEqual(section, name)) { return i + 1; } } return 0; } void CFoldersList::EnsureCapacity() { if (count >= capacity) { Enlarge(capacity / 2); } } void CFoldersList::Enlarge(int increaseAmount) { int newSize = capacity + increaseAmount; list = (PFolderItem *) realloc(list, newSize * sizeof(PFolderItem)); capacity = newSize; }