summaryrefslogtreecommitdiff
path: root/plugins/Folders/folders/foldersList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Folders/folders/foldersList.cpp')
-rw-r--r--plugins/Folders/folders/foldersList.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/plugins/Folders/folders/foldersList.cpp b/plugins/Folders/folders/foldersList.cpp
new file mode 100644
index 0000000000..b13620fe71
--- /dev/null
+++ b/plugins/Folders/folders/foldersList.cpp
@@ -0,0 +1,232 @@
+/*
+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<UINT>(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<UINT>(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;
+} \ No newline at end of file