summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--options.cpp142
1 files changed, 113 insertions, 29 deletions
diff --git a/options.cpp b/options.cpp
index db8c05b..2c8f774 100644
--- a/options.cpp
+++ b/options.cpp
@@ -53,7 +53,7 @@ int ReplacerOptInit(WPARAM wParam,LPARAM lParam)
}
HWND hwnd_list_p = NULL;
-int item_num = 0;
+int item_num_1 = 0, item_num_2 = 0;
bool bTargetWord = false;
bool bEdit = false;
@@ -132,24 +132,24 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
{
bEdit = false;
ShowWordEditDialog();
- if(hwnd_list_p == hwndList1)
+/* if(hwnd_list_p == hwndList1)
{
}
else if(hwnd_list_p == hwndList2)
{
- }
+ } */
}
break;
case IDC_CHANGE:
{
bEdit = true;
ShowWordEditDialog();
- if(hwnd_list_p == hwndList1)
+/* if(hwnd_list_p == hwndList1)
{
}
else if(hwnd_list_p == hwndList2)
{
- }
+ } */
}
break;
case IDC_DELETE:
@@ -171,13 +171,13 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
mir_free(buf);
i--;
mir_snprintf(setting, 31, "szSourceWord%d", i);
- if(!item_num && !i)
+ if(!item_num_1 && !i)
{
DBDeleteContactSetting(NULL, szReplacerModuleName, setting);
- ListView_SetItemText(hwnd_list_p, item_num, 0, _T("<Click here for add word>"));
+ ListView_SetItemText(hwnd_list_p, item_num_1, 0, _T("<Click here for add word>"));
ListView_SetColumnWidth(hwndList1, 0, LVSCW_AUTOSIZE);
}
- else if(i == item_num)
+ else if(i == item_num_1)
{
DBDeleteContactSetting(NULL, szReplacerModuleName, setting);
ListView_DeleteItem(hwnd_list_p, i);
@@ -186,9 +186,9 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
{
buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T(""));
DBDeleteContactSetting(NULL, szReplacerModuleName, setting);
- mir_snprintf(setting, 31, "szSourceWord%d", item_num);
+ mir_snprintf(setting, 31, "szSourceWord%d", item_num_1);
DBWriteContactSettingTString(NULL, szReplacerModuleName, setting, buf);
- ListView_SetItemText(hwnd_list_p, item_num, 0, buf);
+ ListView_SetItemText(hwnd_list_p, item_num_1, 0, buf);
ListView_SetColumnWidth(hwndList1, 0, LVSCW_AUTOSIZE);
ListView_DeleteItem(hwnd_list_p, i);
mir_free(buf);
@@ -196,6 +196,18 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
}
else if(hwnd_list_p == hwndList2)
{
+ char setting[32];
+ setting[0] = '\0';
+ mir_snprintf(setting, 31, "szTargetWords%d", item_num_1);
+ TCHAR *buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T(""));
+ wstring data = buf;
+ mir_free(buf);
+ TCHAR tmp[128];
+ ListView_GetItemText(hwnd_list_p, item_num_2, 0,tmp, 127);
+ wstring::size_type p1 = data.find(tmp);
+ data.erase(p1, (wstring::size_type)_tcslen(tmp)+1);
+ DBWriteContactSettingTString(NULL, szReplacerModuleName, setting, data.c_str());
+ ListView_DeleteItem(hwnd_list_p, item_num_2);
}
}
break;
@@ -216,23 +228,24 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), 1);
EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), 1);
hwnd_list_p = hdr->hdr.hwndFrom;
- item_num = hdr->iItem;
bTargetWord = (hwnd_list_p==hwndList2)?true:false;
int iRow = 0;
if(hdr->hdr.hwndFrom == hwndList1)
{
+ item_num_1 = hdr->iItem;
ListView_DeleteAllItems(hwndList2);
char *setting = new char [32];
TCHAR *buf = NULL;
- mir_snprintf(setting, 31, "szTargetWords%d", hdr->iItem);
+ mir_snprintf(setting, 31, "szTargetWords%d", item_num_1);
buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T(""));
wstring str = buf;
mir_free(buf);
wstring::size_type p1 = 0, p2 = 0, end = 0;
- p1 = str.find(_T("\n")); //nice delimiter
+ p1 = str.find(_T("†")); //nice delimiter
+ int i = 0;
for(;;)
{
- if(p1 = wstring::npos)
+ if(p1 == wstring::npos)
{
if(end == 0)
{
@@ -246,23 +259,49 @@ static BOOL CALLBACK DlgProcReplacerOpts(HWND hwndDlg, UINT msg, WPARAM wParam,
}
break;
}
- p2 = str.find(_T("\n"), p1);
- if(p2 < end || p2 == p1)
- break;
- end = p2;
- item.mask = LVIF_TEXT;
- item.iSubItem = 0;
- item.pszText = (TCHAR*)str.substr(p1, p2-p1).c_str();
- iRow = ListView_InsertItem(hwndList2, &item);
- ListView_SetItemText(hwndList2, iRow, 0, (TCHAR*)str.substr(p1, p2-p1).c_str());
- ZeroMemory(&item,sizeof(item));
- ListView_SetColumnWidth(hwndList2, 0, LVSCW_AUTOSIZE);
+ if(!i)
+ {
+ item.mask = LVIF_TEXT;
+ item.iSubItem = 0;
+ item.iItem = i;
+ TCHAR *tmp = mir_wstrdup(str.substr(0, p1).c_str());
+ item.pszText = tmp;
+ iRow = ListView_InsertItem(hwndList2, &item);
+ ListView_SetItemText(hwndList2, iRow, 0, tmp);
+ mir_free(tmp);
+ p2 = end = p1;
+ }
+ else
+ {
+ p2 = str.find(_T("†"), p1+1);
+ if(p2 < end || p2 == p1)
+ break;
+ else if(p2 == wstring::npos)
+ break;
+ p1++;
+ end = p2;
+ item.mask = LVIF_TEXT;
+ item.iSubItem = 0;
+ item.iItem = i;
+ TCHAR *tmp = mir_wstrdup(str.substr(p1, p2-p1).c_str());
+ item.pszText = tmp;
+ iRow = ListView_InsertItem(hwndList2, &item);
+ ListView_SetItemText(hwndList2, iRow, 0, tmp);
+ ZeroMemory(&item,sizeof(item));
+ ListView_SetColumnWidth(hwndList2, 0, LVSCW_AUTOSIZE);
+ mir_free(tmp);
+ }
p1 = p2;
+ i++;
}
mir_free(buf);
}
if(hdr->hdr.hwndFrom == hwndList2)
{
+ EnableWindow(GetDlgItem(hwndDlg, IDC_ADD), 1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_CHANGE), 1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELETE), 1);
+ item_num_2 = hdr->iItem;
}
}
}
@@ -293,7 +332,7 @@ static BOOL CALLBACK DlgProcWordEditDialog(HWND hwndDlg, UINT msg, WPARAM wParam
{
SetWindowText(hwndDlg, bTargetWord?_T("Edit target word or phrase"):_T("Edit source word or phrase"));
TCHAR word[512];
- ListView_GetItemText(hwnd_list_p, item_num, 0, word, 511);
+ ListView_GetItemText(hwnd_list_p, bTargetWord?item_num_2:item_num_1, 0, word, 511);
SetWindowText(GetDlgItem(hwndDlg, IDC_EDIT_WORD), word);
}
else
@@ -318,9 +357,9 @@ static BOOL CALLBACK DlgProcWordEditDialog(HWND hwndDlg, UINT msg, WPARAM wParam
else
{
char setting[32];
- mir_snprintf(setting, 31, "szSourceWord%d", item_num);
+ mir_snprintf(setting, 31, "szSourceWord%d", item_num_1);
DBWriteContactSettingTString(NULL, szReplacerModuleName, setting, str);
- ListView_SetItemText(hwnd_list_p, item_num, 0, str);
+ ListView_SetItemText(hwnd_list_p, item_num_1, 0, str);
ListView_SetColumnWidth(hwnd_list_p, 0, LVSCW_AUTOSIZE);
}
}
@@ -330,7 +369,52 @@ static BOOL CALLBACK DlgProcWordEditDialog(HWND hwndDlg, UINT msg, WPARAM wParam
TCHAR *buf;
GetDlgItemText(hwndDlg, IDC_EDIT_WORD, str, 511);
if(bTargetWord)
- ;
+ {
+ char setting[32];
+ setting[0] = '\0';
+ mir_snprintf(setting, 31, "szTargetWords%d", item_num_1);
+ buf = UniGetContactSettingUtf(NULL, szReplacerModuleName, setting, _T(""));
+ wstring data = buf;
+ mir_free(buf);
+ wstring::size_type p1 = 0, p2 = 0, end = 0;
+ p1 = data.find(_T("†")); //nice delimiter
+ int i = 0;
+ for(;;)
+ {
+ if(p1 == wstring::npos)
+ break;
+ if(!i)
+ p2 = end = p1;
+ else
+ {
+ p2 = data.find(_T("†"), p1+1);
+ if(p2 < end || p2 == p1)
+ break;
+ else if(p2 == wstring::npos)
+ break;
+ p1++;
+ end = p2;
+ }
+ p1 = p2;
+ i++;
+ }
+ mir_free(buf);
+ data.append(str).append(_T("†"));
+ DBWriteContactSettingTString(NULL, szReplacerModuleName, setting, data.c_str());
+ if(!i)
+ {
+ ListView_SetItemText(hwnd_list_p, i, 0, str);
+ }
+ else
+ {
+ LVITEM item = {0};
+ item.mask = LVIF_TEXT;
+ item.iSubItem = 0;
+ item.iItem = i;
+ item.pszText = str;
+ ListView_InsertItem(hwnd_list_p, &item);
+ }
+ }
else
{
char setting[32];