From 305bcb9a42ed52e864ae69de3b2e4937047edc92 Mon Sep 17 00:00:00 2001 From: pescuma Date: Wed, 6 Oct 2010 00:22:35 +0000 Subject: utils: sync with berliOS git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@225 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/utils/mir_options.cpp | 183 +++++++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 82 deletions(-) (limited to 'Plugins/utils/mir_options.cpp') diff --git a/Plugins/utils/mir_options.cpp b/Plugins/utils/mir_options.cpp index 7f1f267..11af0c6 100644 --- a/Plugins/utils/mir_options.cpp +++ b/Plugins/utils/mir_options.cpp @@ -143,92 +143,95 @@ static void PathToAbsolute(TCHAR *pOut, size_t outSize, const TCHAR *pSrc) } -void LoadOpts(OptPageControl *controls, int controlsSize, char *module) +static void LoadOpt(OptPageControl *ctrl, char *module) { - for (int i = 0 ; i < controlsSize ; i++) + if (ctrl->var == NULL) + return; + + switch(ctrl->type) { - OptPageControl *ctrl = &controls[i]; - - if (ctrl->var != NULL) + case CONTROL_CHECKBOX: { - switch(ctrl->type) - { - case CONTROL_CHECKBOX: - { - *((BYTE *) ctrl->var) = DBGetContactSettingByte(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_SPIN: - { - *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_COLOR: - { - *((COLORREF *) ctrl->var) = (COLORREF) DBGetContactSettingDword(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_RADIO: - { - *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_COMBO: - { - *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_PROTOCOL_LIST: - { - break; - } - case CONTROL_TEXT: - { - MyDBGetContactSettingTString(NULL, module, ctrl->setting, ((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), ctrl->tszDefValue == NULL ? NULL : TranslateTS(ctrl->tszDefValue)); - break; - } - case CONTROL_PASSWORD: - { - char tmp[1024]; - tmp[0]=0; + *((BYTE *) ctrl->var) = DBGetContactSettingByte(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; + } + case CONTROL_SPIN: + { + *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; + } + case CONTROL_COLOR: + { + *((COLORREF *) ctrl->var) = (COLORREF) DBGetContactSettingDword(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; + } + case CONTROL_RADIO: + { + *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; + } + case CONTROL_COMBO: + { + *((WORD *) ctrl->var) = DBGetContactSettingWord(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; + } + case CONTROL_PROTOCOL_LIST: + { + break; + } + case CONTROL_TEXT: + { + MyDBGetContactSettingTString(NULL, module, ctrl->setting, ((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), ctrl->tszDefValue == NULL ? NULL : TranslateTS(ctrl->tszDefValue)); + break; + } + case CONTROL_PASSWORD: + { + char tmp[1024]; + tmp[0]=0; - DBVARIANT dbv = {0}; - if (!DBGetContactSettingString(NULL, module, ctrl->setting, &dbv)) - { - lstrcpynA(tmp, dbv.pszVal, MAX_REGS(tmp)); - DBFreeVariant(&dbv); - } + DBVARIANT dbv = {0}; + if (!DBGetContactSettingString(NULL, module, ctrl->setting, &dbv)) + { + lstrcpynA(tmp, dbv.pszVal, MAX_REGS(tmp)); + DBFreeVariant(&dbv); + } - if (tmp[0] != 0) - CallService(MS_DB_CRYPT_DECODESTRING, MAX_REGS(tmp), (LPARAM) tmp); - else if (ctrl->szDefValue != NULL) - lstrcpynA(tmp, ctrl->szDefValue, MAX_REGS(tmp)); + if (tmp[0] != 0) + CallService(MS_DB_CRYPT_DECODESTRING, MAX_REGS(tmp), (LPARAM) tmp); + else if (ctrl->szDefValue != NULL) + lstrcpynA(tmp, ctrl->szDefValue, MAX_REGS(tmp)); - char *var = (char *) ctrl->var; - int size = min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024); - lstrcpynA(var, tmp, size); - break; - } - case CONTROL_INT: - { - *((int *) ctrl->var) = (int) DBGetContactSettingDword(NULL, module, ctrl->setting, ctrl->dwDefValue); - break; - } - case CONTROL_FILE: - { - TCHAR tmp[1024]; - MyDBGetContactSettingTString(NULL, module, ctrl->setting, tmp, 1024, ctrl->tszDefValue == NULL ? NULL : ctrl->tszDefValue); - PathToAbsolute(((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), tmp); - break; - } - case CONTROL_COMBO_TEXT: - case CONTROL_COMBO_ITEMDATA: - { - MyDBGetContactSettingTString(NULL, module, ctrl->setting, ((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), ctrl->tszDefValue == NULL ? NULL : TranslateTS(ctrl->tszDefValue)); - break; - } - } + char *var = (char *) ctrl->var; + int size = min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024); + lstrcpynA(var, tmp, size); + break; + } + case CONTROL_INT: + { + *((int *) ctrl->var) = (int) DBGetContactSettingDword(NULL, module, ctrl->setting, ctrl->dwDefValue); + break; } + case CONTROL_FILE: + { + TCHAR tmp[1024]; + MyDBGetContactSettingTString(NULL, module, ctrl->setting, tmp, 1024, ctrl->tszDefValue == NULL ? NULL : ctrl->tszDefValue); + PathToAbsolute(((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), tmp); + break; + } + case CONTROL_COMBO_TEXT: + case CONTROL_COMBO_ITEMDATA: + { + MyDBGetContactSettingTString(NULL, module, ctrl->setting, ((TCHAR *) ctrl->var), min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024), ctrl->tszDefValue == NULL ? NULL : TranslateTS(ctrl->tszDefValue)); + break; + } + } +} + +void LoadOpts(OptPageControl *controls, int controlsSize, char *module) +{ + for (int i = 0 ; i < controlsSize ; i++) + { + LoadOpt(&controls[i], module); } } @@ -528,9 +531,25 @@ BOOL CALLBACK SaveOptsDlgProc(OptPageControl *controls, int controlsSize, char * { char tmp[1024]; GetDlgItemTextA(hwndDlg, ctrl->nID, tmp, MAX_REGS(tmp)); + + if (ctrl->var != NULL) + { + char *var = (char *) ctrl->var; + int size = min(ctrl->max <= 0 ? 1024 : ctrl->max, 1024); + lstrcpynA(var, tmp, size); + } + + if (ctrl->checkboxID != 0 && !IsDlgButtonChecked(hwndDlg, ctrl->checkboxID)) + { + DBDeleteContactSetting(NULL, module, ctrl->setting); + continue; + } + CallService(MS_DB_CRYPT_ENCODESTRING, MAX_REGS(tmp), (LPARAM) tmp); DBWriteContactSettingString(NULL, module, ctrl->setting, tmp); - break; + + // Don't load from DB + continue; } case CONTROL_INT: { @@ -568,10 +587,10 @@ BOOL CALLBACK SaveOptsDlgProc(OptPageControl *controls, int controlsSize, char * break; } } + + LoadOpt(ctrl, module); } - LoadOpts(controls, controlsSize, module); - return TRUE; } else if (lpnmhdr->idFrom != 0 && lpnmhdr->code == LVN_ITEMCHANGED) -- cgit v1.2.3