From cf511579a8af666bf06a01b888369f9894c014a7 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Sat, 28 Sep 2013 22:19:43 +0200 Subject: [PATCH] Make bugtraq settings dialog hierarchy aware Signed-off-by: Sven Strickroth --- src/Resources/TortoiseProcENG.rc | 48 ++++--- src/TortoiseProc/Settings/GitSettings.h | 19 +++ .../Settings/SettingsBugtraqConfig.cpp | 148 +++++++++++++-------- src/TortoiseProc/Settings/SettingsBugtraqConfig.h | 14 +- src/TortoiseProc/resource.h | 9 +- 5 files changed, 153 insertions(+), 85 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 896f7a77d..89600d586 100644 --- a/src/Resources/TortoiseProcENG.rc +++ b/src/Resources/TortoiseProcENG.rc @@ -928,23 +928,33 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Hook Scripts::Issue Tracker Config" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - EDITTEXT IDC_BUGTRAQ_URL,113,7,171,13,ES_AUTOHSCROLL - CONTROL "true",IDC_BUGTRAQ_WARNINGIFNOISSUE_TRUE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,113,24,50,10 - CONTROL "false",IDC_BUGTRAQ_WARNINGIFNOISSUE_FALSE,"Button",BS_AUTORADIOBUTTON,170,24,50,10 - EDITTEXT IDC_BUGTRAQ_MESSAGE,113,40,170,14,ES_AUTOHSCROLL - CONTROL "true",IDC_BUGTRAQ_APPEND_TRUE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,113,64,50,10 - CONTROL "false",IDC_BUGTRAQ_APPEND_FALSE,"Button",BS_AUTORADIOBUTTON,170,64,50,10 - EDITTEXT IDC_BUGTRAQ_LABEL,113,80,170,14,ES_AUTOHSCROLL - CONTROL "true",IDC_BUGTRAQ_NUMBER_TRUE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,113,103,50,10 - CONTROL "false",IDC_BUGTRAQ_NUMBER_FALSE,"Button",BS_AUTORADIOBUTTON,170,103,50,10 - EDITTEXT IDC_BUGTRAQ_LOGREGEX,113,117,170,37,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN - LTEXT "bugtraq.url",IDC_STATIC,14,7,89,8 - LTEXT "bugtraq.warningifnoissue",IDC_STATIC,14,24,91,10 - LTEXT "bugtraq.message",IDC_STATIC,14,43,86,10 - LTEXT "bugtraq.append",IDC_STATIC,14,62,84,10 - LTEXT "bugtraq.label",IDC_STATIC,14,81,77,10 - LTEXT "bugtraq.number",IDC_STATIC,14,100,72,10 - LTEXT "bugtraq.logregex",IDC_STATIC,14,119,79,10 + CTEXT "|",IDC_STATIC,64,18,8,11 + CTEXT "<<",IDC_STATIC,173,18,13,11 + CTEXT "<<",IDC_STATIC,233,18,13,11 + CTEXT "<<",IDC_STATIC,112,18,13,11 + CONTROL "Effective",IDC_RADIO_SETTINGS_EFFECTIVE,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,14,18,50,10 + CONTROL "Local",IDC_RADIO_SETTINGS_LOCAL,"Button",BS_AUTORADIOBUTTON,72,18,40,10 + CONTROL "Project",IDC_RADIO_SETTINGS_PROJECT,"Button",BS_AUTORADIOBUTTON,126,18,47,10 + CONTROL "Global",IDC_RADIO_SETTINGS_GLOBAL,"Button",BS_AUTORADIOBUTTON,187,18,46,10 + CONTROL "System",IDC_RADIO_SETTINGS_SYSTEM,"Button",BS_AUTORADIOBUTTON,247,18,46,10 + GROUPBOX "Config source",IDC_STATIC,7,7,286,26 + GROUPBOX "BugTraq",IDC_STATIC,7,34,286,153 + EDITTEXT IDC_BUGTRAQ_URL,113,44,170,13,ES_AUTOHSCROLL + COMBOBOX IDC_BUGTRAQ_WARNINGIFNOISSUE,113,60,63,15,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_BUGTRAQ_MESSAGE,113,77,170,14,ES_AUTOHSCROLL + COMBOBOX IDC_BUGTRAQ_APPEND,113,94,63,15,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_BUGTRAQ_LABEL,113,111,170,14,ES_AUTOHSCROLL + COMBOBOX IDC_BUGTRAQ_NUMBER,113,128,63,15,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_BUGTRAQ_LOGREGEX,113,144,170,37,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN + LTEXT "bugtraq.url",IDC_STATIC,14,44,89,8 + LTEXT "bugtraq.warningifnoissue",IDC_STATIC,14,60,91,10 + LTEXT "bugtraq.message",IDC_STATIC,14,77,86,10 + LTEXT "bugtraq.append",IDC_STATIC,14,94,84,10 + LTEXT "bugtraq.label",IDC_STATIC,14,111,77,10 + LTEXT "bugtraq.number",IDC_STATIC,14,128,72,10 + LTEXT "bugtraq.logregex",IDC_STATIC,14,144,79,10 + LTEXT "Save to:",IDC_STATIC,14,193,41,11 + COMBOBOX IDC_COMBO_SETTINGS_SAFETO,65,192,103,15,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP END IDD_SETTINGSBUGTRAQADV DIALOGEX 0, 0, 395, 122 @@ -2302,8 +2312,8 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 293 VERTGUIDE, 14 - VERTGUIDE, 252 - VERTGUIDE, 284 + VERTGUIDE, 113 + VERTGUIDE, 283 TOPMARGIN, 7 BOTTOMMARGIN, 210 END diff --git a/src/TortoiseProc/Settings/GitSettings.h b/src/TortoiseProc/Settings/GitSettings.h index 923139795..04dcea3f9 100644 --- a/src/TortoiseProc/Settings/GitSettings.h +++ b/src/TortoiseProc/Settings/GitSettings.h @@ -191,6 +191,25 @@ protected: virtual void LoadDataImpl(git_config * config) = 0; virtual BOOL SafeDataImpl(git_config * config) = 0; + static void AddTrueFalseToComboBox(CComboBox &combobox) + { + combobox.AddString(_T("")); + combobox.AddString(_T("true")); + combobox.AddString(_T("false")); + } + + static void GetBoolConfigValueComboBox(git_config * config, const CString &key, CComboBox &combobox) + { + CStringA keyA = CUnicodeUtils::GetUTF8(key); + BOOL out = 0; + if (git_config_get_bool(&out, config, keyA) == GIT_ENOTFOUND) + combobox.SetCurSel(0); + else if (out) + combobox.SetCurSel(1); + else + combobox.SetCurSel(2); + } + static int GetConfigValue(git_config * config, const CString &key, CString &value) { CStringA keyA = CUnicodeUtils::GetUTF8(key); diff --git a/src/TortoiseProc/Settings/SettingsBugtraqConfig.cpp b/src/TortoiseProc/Settings/SettingsBugtraqConfig.cpp index fc67602af..e58a604fa 100644 --- a/src/TortoiseProc/Settings/SettingsBugtraqConfig.cpp +++ b/src/TortoiseProc/Settings/SettingsBugtraqConfig.cpp @@ -31,12 +31,10 @@ IMPLEMENT_DYNAMIC(CSettingsBugtraqConfig, ISettingsPropPage) CSettingsBugtraqConfig::CSettingsBugtraqConfig(CString cmdPath) : ISettingsPropPage(CSettingsBugtraqConfig::IDD) , m_URL(_T("")) - , m_bNWarningifnoissue(FALSE) , m_Message(_T("")) - , m_bNAppend(FALSE) , m_Label(_T("")) - , m_bNNumber(TRUE) , m_Logregex(_T("")) + , m_bNeedSave(false) { } @@ -48,50 +46,36 @@ void CSettingsBugtraqConfig::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); DDX_Text(pDX, IDC_BUGTRAQ_URL, m_URL); - DDX_Radio(pDX, IDC_BUGTRAQ_WARNINGIFNOISSUE_TRUE, m_bNWarningifnoissue); + DDX_Control(pDX, IDC_BUGTRAQ_WARNINGIFNOISSUE, m_cWarningifnoissue); DDX_Text(pDX, IDC_BUGTRAQ_MESSAGE, m_Message); - DDX_Radio(pDX, IDC_BUGTRAQ_APPEND_TRUE, m_bNAppend); + DDX_Control(pDX, IDC_BUGTRAQ_APPEND, m_cAppend); DDX_Text(pDX, IDC_BUGTRAQ_LABEL, m_Label); - DDX_Radio(pDX, IDC_BUGTRAQ_NUMBER_TRUE, m_bNNumber); + DDX_Control(pDX, IDC_BUGTRAQ_NUMBER, m_cNumber); DDX_Text(pDX, IDC_BUGTRAQ_LOGREGEX, m_Logregex); DDX_Control(pDX, IDC_BUGTRAQ_LOGREGEX, m_BugtraqRegex1); + GITSETTINGS_DDX } - BEGIN_MESSAGE_MAP(CSettingsBugtraqConfig, ISettingsPropPage) - + GITSETTINGS_RADIO_EVENT ON_EN_CHANGE(IDC_BUGTRAQ_URL, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_WARNINGIFNOISSUE_TRUE, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_WARNINGIFNOISSUE_FALSE, &CSettingsBugtraqConfig::OnChange) + ON_CBN_SELCHANGE(IDC_BUGTRAQ_WARNINGIFNOISSUE, &CSettingsBugtraqConfig::OnChange) ON_EN_CHANGE(IDC_BUGTRAQ_MESSAGE, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_APPEND_TRUE, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_APPEND_FALSE, &CSettingsBugtraqConfig::OnChange) + ON_CBN_SELCHANGE(IDC_BUGTRAQ_APPEND, &CSettingsBugtraqConfig::OnChange) ON_EN_CHANGE(IDC_BUGTRAQ_LABEL, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_NUMBER_TRUE, &CSettingsBugtraqConfig::OnChange) - ON_BN_CLICKED(IDC_BUGTRAQ_NUMBER_FALSE, &CSettingsBugtraqConfig::OnChange) + ON_CBN_SELCHANGE(IDC_BUGTRAQ_NUMBER, &CSettingsBugtraqConfig::OnChange) ON_EN_CHANGE(IDC_BUGTRAQ_LOGREGEX, &CSettingsBugtraqConfig::OnChange) END_MESSAGE_MAP() BOOL CSettingsBugtraqConfig::OnInitDialog() { ISettingsPropPage::OnInitDialog(); - ProjectProperties props; - props.ReadProps(g_Git.m_CurrentDir); - m_URL = props.sUrl; - m_Logregex = props.sCheckRe + _T("\n") + props.sBugIDRe; - m_Label = props.sLabel; - m_Message = props.sMessage; - - m_bNAppend = props.bAppend; - m_bNNumber = props.bNumber; - m_bNWarningifnoissue = props.bWarnIfNoIssue; - m_Logregex.Trim(); - m_Logregex.Replace(_T("\n"),_T("\r\n")); + AddTrueFalseToComboBox(m_cWarningifnoissue); + AddTrueFalseToComboBox(m_cAppend); + AddTrueFalseToComboBox(m_cNumber); - m_bNAppend = !m_bNAppend; - m_bNNumber = !m_bNNumber; - m_bNWarningifnoissue = !m_bNWarningifnoissue; + InitGitSettings(this, true); this->UpdateData(FALSE); return TRUE; @@ -99,51 +83,103 @@ BOOL CSettingsBugtraqConfig::OnInitDialog() void CSettingsBugtraqConfig::OnChange() { + m_bNeedSave = true; SetModified(); } -BOOL CSettingsBugtraqConfig::OnApply() +void CSettingsBugtraqConfig::LoadDataImpl(git_config * config) { - this->UpdateData(); - - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_URL, m_URL, CONFIG_LOCAL)) + if (m_iConfigSource == 0) { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); + // use project properties here, so that we correctly get the default values + ProjectProperties props; + props.ReadProps(g_Git.m_CurrentDir); + m_URL = props.sUrl; + m_Logregex = props.sCheckRe + _T("\n") + props.sBugIDRe; + m_Label = props.sLabel; + m_Message = props.sMessage; + + if (props.bAppend) + m_cAppend.SetCurSel(1); + else + m_cAppend.SetCurSel(2); + + if (props.bNumber) + m_cNumber.SetCurSel(1); + else + m_cNumber.SetCurSel(2); + + if (props.bWarnIfNoIssue) + m_cWarningifnoissue.SetCurSel(1); + else + m_cWarningifnoissue.SetCurSel(2); } - - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_WARNIFNOISSUE, (!this->m_bNWarningifnoissue) ? _T("true") : _T("false"))) + else { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); + GetConfigValue(config, BUGTRAQPROPNAME_URL, m_URL); + GetConfigValue(config, BUGTRAQPROPNAME_MESSAGE, m_Message); + GetConfigValue(config, BUGTRAQPROPNAME_LABEL, m_Label); + GetBoolConfigValueComboBox(config, BUGTRAQPROPNAME_NUMBER, m_cNumber); + GetBoolConfigValueComboBox(config, BUGTRAQPROPNAME_APPEND, m_cAppend); + GetBoolConfigValueComboBox(config, BUGTRAQPROPNAME_WARNIFNOISSUE, m_cWarningifnoissue); + GetConfigValue(config, BUGTRAQPROPNAME_LOGREGEX, m_Logregex); } - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_MESSAGE, m_Message, CONFIG_LOCAL, g_Git.GetGitEncode(L"i18n.commitencoding"))) - { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); - } + m_Logregex.Trim(); + m_Logregex.Replace(_T("\n"), _T("\r\n")); + + m_bNeedSave = false; + SetModified(FALSE); + UpdateData(FALSE); +} + +BOOL CSettingsBugtraqConfig::SafeDataImpl(git_config * config) +{ + if (!Save(config, BUGTRAQPROPNAME_URL, m_URL)) + return FALSE; + + if (!Save(config, BUGTRAQPROPNAME_MESSAGE, m_Message)) + return FALSE; + + if (!Save(config, BUGTRAQPROPNAME_LABEL, m_Label)) + return FALSE; - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_APPEND, (!this->m_bNAppend) ? _T("true") : _T("false"))) { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); + CString value; + m_cAppend.GetWindowText(value); + if (!Save(config, BUGTRAQPROPNAME_APPEND, value)) + return FALSE; } - - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_LABEL, m_Label)) { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); + CString value; + m_cNumber.GetWindowText(value); + if (!Save(config, BUGTRAQPROPNAME_NUMBER, value)) + return FALSE; } - - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_NUMBER, (!this->m_bNNumber) ? _T("true") : _T("false"))) { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); + CString value; + m_cWarningifnoissue.GetWindowText(value); + if (!Save(config, BUGTRAQPROPNAME_WARNIFNOISSUE, value)) + return FALSE; } - { - m_Logregex.Replace(_T("\r\n"),_T("\n")); - if (g_Git.SetConfigValue(BUGTRAQPROPNAME_LOGREGEX, m_Logregex)) - { - CMessageBox::Show(NULL,_T("Fail to set config"),_T("TortoiseGit"),MB_OK); - } - m_Logregex.Replace(_T("\n"),_T("\r\n")); + CString value(m_Logregex); + value.Replace(_T("\r\n"),_T("\n")); + if (!Save(config, BUGTRAQPROPNAME_LOGREGEX, value)) + return FALSE; } return TRUE; } + +BOOL CSettingsBugtraqConfig::OnApply() +{ + if (!m_bNeedSave) + return TRUE; + UpdateData(); + if (!SafeData()) + return FALSE; + m_bNeedSave = false; + SetModified(FALSE); + return TRUE; +} diff --git a/src/TortoiseProc/Settings/SettingsBugtraqConfig.h b/src/TortoiseProc/Settings/SettingsBugtraqConfig.h index 649e42507..d1cb2adae 100644 --- a/src/TortoiseProc/Settings/SettingsBugtraqConfig.h +++ b/src/TortoiseProc/Settings/SettingsBugtraqConfig.h @@ -20,9 +20,10 @@ #include "SettingsPropPage.h" #include "RegexEdit.h" +#include "GitSettings.h" // CSettingsBugtraqConfig dialog -class CSettingsBugtraqConfig : public ISettingsPropPage +class CSettingsBugtraqConfig : public ISettingsPropPage, public CGitSettings { DECLARE_DYNAMIC(CSettingsBugtraqConfig) @@ -40,17 +41,22 @@ protected: virtual BOOL OnInitDialog(); virtual BOOL OnApply(); + virtual void LoadDataImpl(git_config * config); + virtual BOOL SafeDataImpl(git_config * config); + DECLARE_MESSAGE_MAP() afx_msg void OnChange(); + GITSETTINGS_RADIO_EVENT_HANDLE CRegexEdit m_BugtraqRegex1; + bool m_bNeedSave; CString m_URL; - BOOL m_bNWarningifnoissue; + CComboBox m_cWarningifnoissue; CString m_Message; - BOOL m_bNAppend; + CComboBox m_cAppend; CString m_Label; - BOOL m_bNNumber; + CComboBox m_cNumber; CString m_Logregex; }; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 7f9c98087..671c14597 100644 --- a/src/TortoiseProc/resource.h +++ b/src/TortoiseProc/resource.h @@ -1144,16 +1144,13 @@ #define IDC_EDIT_NAME 1589 #define IDC_CHECK_FORSE 1590 #define IDC_STATIC_BRANCH 1592 -#define IDC_BUGTRAQ_WARNINGIFNOISSUE_TRUE 1593 -#define IDC_BUGTRAQ_WARNINGIFNOISSUE_FALSE 1594 -#define IDC_BUGTRAQ_APPEND_FALSE 1596 -#define IDC_BUGTRAQ_NUMBER_TRUE 1597 -#define IDC_BUGTRAQ_NUMBER_FALSE 1598 +#define IDC_BUGTRAQ_WARNINGIFNOISSUE 1593 +#define IDC_BUGTRAQ_APPEND 1594 +#define IDC_BUGTRAQ_NUMBER 1595 #define IDC_BUGTRAQ_URL 1599 #define IDS_REPOBROWSE_SAVEAS 1600 #define IDC_BUGTRAQ_MESSAGE 1600 #define IDS_REPOBROWSE_SHOWLOG 1601 -#define IDC_BUGTRAQ_APPEND_TRUE 1601 #define IDS_REPOBROWSE_OPEN 1602 #define IDC_CHECK_REBASE 1602 #define IDC_CLONE_GROUP_SVN 1603 -- 2.11.4.GIT