From: <sag...@us...> - 2015-06-07 14:02:14
|
Revision: 5261 http://sourceforge.net/p/modplug/code/5261 Author: saga-games Date: 2015-06-07 14:02:08 +0000 (Sun, 07 Jun 2015) Log Message: ----------- [Imp] Make the advanced settings a bit nicer to look at by using a grouped list and adding more columns Modified Paths: -------------- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp trunk/OpenMPT/mptrack/AdvancedConfigDlg.h trunk/OpenMPT/mptrack/Settings.cpp trunk/OpenMPT/mptrack/Settings.h trunk/OpenMPT/mptrack/mptrack.rc Modified: trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp 2015-06-07 07:00:20 UTC (rev 5260) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.cpp 2015-06-07 14:02:08 UTC (rev 5261) @@ -19,8 +19,8 @@ OPENMPT_NAMESPACE_BEGIN BEGIN_MESSAGE_MAP(COptionsAdvanced, CPropertyPage) - ON_LBN_DBLCLK(IDC_LIST4, OnOptionDblClick) - ON_EN_CHANGE(IDC_EDIT1, OnFindStringChanged) + ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnOptionDblClick) + ON_EN_CHANGE(IDC_EDIT1, OnFindStringChanged) END_MESSAGE_MAP() void COptionsAdvanced::DoDataExchange(CDataExchange* pDX) @@ -28,24 +28,17 @@ { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CModTypeDlg) - DDX_Control(pDX, IDC_LIST4, m_List); + DDX_Control(pDX, IDC_LIST1, m_List); //}}AFX_DATA_MAP } -static CString FormatSetting(const SettingPath &path, const SettingValue &val) -//---------------------------------------------------------------------------- -{ - return mpt::ToCString(path.FormatAsString() + MPT_USTRING(" = ") + val.FormatAsString()); -} - - BOOL COptionsAdvanced::PreTranslateMessage(MSG *msg) //-------------------------------------------------- { if(msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) { - OnOptionDblClick(); + OnOptionDblClick(nullptr, nullptr); return TRUE; } return FALSE; @@ -56,6 +49,17 @@ //----------------------------------- { CPropertyPage::OnInitDialog(); + + const CListCtrlEx::Header headers[] = + { + { _T("Setting"), 100, LVCFMT_LEFT }, + { _T("Type"), 40, LVCFMT_LEFT }, + { _T("Value"), 190, LVCFMT_LEFT }, + { _T("Default"), 62, LVCFMT_LEFT }, + }; + m_List.SetHeaders(headers); + m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); + ReInit(); return TRUE; } @@ -65,26 +69,81 @@ //----------------------------- { m_List.SetRedraw(FALSE); - m_List.ResetContent(); + m_List.DeleteAllItems(); + bool useGroups = ((int)ListView_EnableGroupView(m_List.m_hWnd, TRUE)) != -1; + m_List.SetItemCount(theApp.GetSettings().size()); + m_IndexToPath.clear(); + m_IndexToPath.reserve(theApp.GetSettings().size()); + m_Groups.clear(); + int numGroups = 0; CString findStr; GetDlgItemText(IDC_EDIT1, findStr); findStr.MakeLower(); + int i = 0; for(SettingsContainer::SettingsMap::const_iterator it = theApp.GetSettings().begin(); it != theApp.GetSettings().end(); ++it) { - CString str = FormatSetting(it->first, it->second); + const SettingPath &path = it->first; + const SettingValue &value = it->second; + + int groupID = 0; + const mpt::ustring §ion = path.GetSection(); + UNORDERED_MAP<mpt::ustring, int>::const_iterator gi = m_Groups.find(section); + if(gi == m_Groups.end() && useGroups) + { + LVGROUP group; +#if _WIN32_WINNT >= 0x0600 + group.cbSize = LVGROUP_V5_SIZE; +#else + group.cbSize = sizeof(group); +#endif + group.mask = LVGF_HEADER | LVGF_GROUPID; + group.pszHeader = const_cast<wchar_t *>(section.c_str()); + group.cchHeader = 0; + group.pszFooter = nullptr; + group.cchFooter = 0; + group.iGroupId = groupID = numGroups++; + group.stateMask = LVGS_COLLAPSIBLE; + group.state = LVGS_COLLAPSIBLE; + group.uAlign = LVGA_HEADER_LEFT; + ListView_InsertGroup(m_List.m_hWnd, -1, &group); + m_Groups.insert(std::make_pair(section, groupID)); + } else + { + groupID = gi->second; + } + bool addString = true; if(!findStr.IsEmpty()) { - CString strLower = str; - addString = strLower.MakeLower().Find(findStr) >= 0; + CString str = mpt::ToCString(path.FormatAsString() + MPT_USTRING(" = ") + value.FormatValueAsString()); + addString = str.MakeLower().Find(findStr) >= 0; } if(addString) { - int index = m_List.AddString(str); - m_IndexToPath[index] = it->first; + const mpt::ustring str = useGroups ? it->first.GetKey() : it->first.FormatAsString(); + LVITEMW lvi; + lvi.mask = LVIF_TEXT | LVIF_GROUPID; + lvi.iItem = i++; + lvi.iSubItem = 0; + lvi.state = 0; + lvi.stateMask = 0; + lvi.pszText = const_cast<wchar_t *>(str.c_str()); + lvi.cchTextMax = 0; + lvi.iImage = 0; + lvi.lParam = m_IndexToPath.size(); + lvi.iIndent = 0; + lvi.iGroupId = groupID; + + int index = m_List.SendMessage(LVM_INSERTITEMW, 0, (LPARAM)(&lvi)); + m_List.SetItemText(index, 1, value.FormatTypeAsString().c_str()); + m_List.SetItemText(index, 2, value.FormatValueAsString().c_str()); + m_List.SetItemText(index, 3, it->second.GetDefault().FormatValueAsString().c_str()); + m_IndexToPath.push_back(it->first); } } + + m_List.SetItemCount(i); m_List.SetRedraw(TRUE); m_List.Invalidate(FALSE); } @@ -106,22 +165,18 @@ } -void COptionsAdvanced::OnOptionDblClick() -//--------------------------------------- +void COptionsAdvanced::OnOptionDblClick(NMHDR *, LRESULT *) +//--------------------------------------------------------- { - const int index = m_List.GetCurSel(); - if(m_IndexToPath.find(index) == m_IndexToPath.end()) - { - return; - } - const SettingPath path = m_IndexToPath[index]; + const int index = m_List.GetSelectionMark(); + const SettingPath path = m_IndexToPath[m_List.GetItemData(index)]; SettingValue val = theApp.GetSettings().GetMap().find(path)->second; if(val.GetType() == SettingTypeBool) { val = !val.as<bool>(); } else { - CInputDlg inputDlg(this, mpt::ToCString(path.FormatAsString()), mpt::ToCString(val.FormatValueAsString())); + CInputDlg inputDlg(this, _T("Enter new value for ") + mpt::ToCString(path.FormatAsString()), mpt::ToCString(val.FormatValueAsString())); if(inputDlg.DoModal() != IDOK) { return; @@ -129,9 +184,8 @@ val.SetFromString(inputDlg.resultString); } theApp.GetSettings().Write(path, val); - m_List.DeleteString(index); - m_List.InsertString(index, FormatSetting(path, val)); - m_List.SetCurSel(index); + m_List.SetItemText(index, 2, val.FormatValueAsString().c_str()); + m_List.SetSelectionMark(index); OnSettingsChanged(); } Modified: trunk/OpenMPT/mptrack/AdvancedConfigDlg.h =================================================================== --- trunk/OpenMPT/mptrack/AdvancedConfigDlg.h 2015-06-07 07:00:20 UTC (rev 5260) +++ trunk/OpenMPT/mptrack/AdvancedConfigDlg.h 2015-06-07 14:02:08 UTC (rev 5261) @@ -12,6 +12,14 @@ #if defined(MPT_SETTINGS_CACHE) +#include "CListCtrl.h" +#include <unordered_map> +#if MPT_COMPILER_MSVC && MPT_MSVC_BEFORE(2010,0) +#define UNORDERED_MAP std::tr1::unordered_map +#else +#define UNORDERED_MAP std::unordered_map +#endif + OPENMPT_NAMESPACE_BEGIN //========================================== @@ -19,8 +27,9 @@ //========================================== { protected: - CListBox m_List; - std::map<int, SettingPath> m_IndexToPath; + CListCtrlEx m_List; + std::vector<SettingPath> m_IndexToPath; + UNORDERED_MAP<mpt::ustring, int> m_Groups; public: COptionsAdvanced():CPropertyPage(IDD_OPTIONS_ADVANCED) {} @@ -31,7 +40,7 @@ virtual BOOL OnSetActive(); virtual void DoDataExchange(CDataExchange* pDX); virtual BOOL PreTranslateMessage(MSG *msg); - afx_msg void OnOptionDblClick(); + afx_msg void OnOptionDblClick(NMHDR *, LRESULT *); afx_msg void OnSettingsChanged() { SetModified(TRUE); } afx_msg void OnFindStringChanged() { ReInit(); } Modified: trunk/OpenMPT/mptrack/Settings.cpp =================================================================== --- trunk/OpenMPT/mptrack/Settings.cpp 2015-06-07 07:00:20 UTC (rev 5260) +++ trunk/OpenMPT/mptrack/Settings.cpp 2015-06-07 14:02:08 UTC (rev 5261) @@ -89,12 +89,6 @@ } -mpt::ustring SettingValue::FormatAsString() const -{ - return MPT_USTRING("(") + FormatTypeAsString() + MPT_USTRING(")") + FormatValueAsString(); -} - - void SettingValue::SetFromString(const AnyStringLocale &newVal) { switch(GetType()) Modified: trunk/OpenMPT/mptrack/Settings.h =================================================================== --- trunk/OpenMPT/mptrack/Settings.h 2015-06-07 07:00:20 UTC (rev 5260) +++ trunk/OpenMPT/mptrack/Settings.h 2015-06-07 14:02:08 UTC (rev 5261) @@ -276,7 +276,6 @@ } mpt::ustring FormatTypeAsString() const; mpt::ustring FormatValueAsString() const; - mpt::ustring FormatAsString() const; void SetFromString(const AnyStringLocale &newVal); }; @@ -395,10 +394,12 @@ assign(val); return *this; } - SettingValue GetDefault() const +#if defined(MPT_SETTINGS_CACHE_STORE_DEFAULTS) + const SettingValue &GetDefault() const { return defaultValue; } +#endif // MPT_SETTINGS_CACHE_STORE_DEFAULTS bool IsDirty() const { return dirty; @@ -434,11 +435,11 @@ { return; } - mpt::ustring GetSection() const + const mpt::ustring &GetSection() const { return section; } - mpt::ustring GetKey() const + const mpt::ustring &GetKey() const { return key; } @@ -568,6 +569,7 @@ SettingsMap::const_iterator begin() const { return map.begin(); } SettingsMap::const_iterator end() const { return map.end(); } + SettingsMap::size_type size() const { return map.size(); } const SettingsMap &GetMap() const { return map; } #endif // MPT_SETTINGS_CACHE Modified: trunk/OpenMPT/mptrack/mptrack.rc =================================================================== --- trunk/OpenMPT/mptrack/mptrack.rc 2015-06-07 07:00:20 UTC (rev 5260) +++ trunk/OpenMPT/mptrack/mptrack.rc 2015-06-07 14:02:08 UTC (rev 5261) @@ -314,7 +314,7 @@ LTEXT "Warning:\nChanging advanced settings might cause stability problems.\nYou should only continue if you know what you are doing.",IDC_STATIC,6,6,258,24 LTEXT "&Find:",IDC_STATIC,6,38,17,8 EDITTEXT IDC_EDIT1,30,36,252,12,ES_AUTOHSCROLL - LISTBOX IDC_LIST4,6,54,276,222,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SORTASCENDING | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,6,54,276,222 END IDD_SCANPLUGINS DIALOGEX 0, 0, 316, 34 @@ -1106,12 +1106,11 @@ CONTROL "Plugin volume command &bug emulation",IDC_CHK_MIDICCBUG, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,167,222,12 LTEXT "&Tempo Mode:",IDC_TEXT_TEMPOMODE,12,204,44,8 - COMBOBOX IDC_COMBO_TEMPOMODE,60,204,78,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,174,206,72,8 - EDITTEXT IDC_ROWSPERBEAT,144,204,24,12,ES_AUTOHSCROLL | ES_NUMBER - LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,174,223,72,8 - EDITTEXT IDC_ROWSPERMEASURE,144,222,24,12,ES_AUTOHSCROLL | ES_NUMBER - PUSHBUTTON "Configure S&huffle",IDC_BUTTON1,60,222,78,12 + COMBOBOX IDC_COMBO_TEMPOMODE,12,215,108,77,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Rows per beat",IDC_TEXT_ROWSPERBEAT,162,206,84,8 + EDITTEXT IDC_ROWSPERBEAT,132,204,24,12,ES_AUTOHSCROLL | ES_NUMBER + LTEXT "Rows per measure",IDC_TEXT_ROWSPERMEASURE,162,223,84,8 + EDITTEXT IDC_ROWSPERMEASURE,132,222,24,12,ES_AUTOHSCROLL | ES_NUMBER RTEXT "Created with:",IDC_TEXT_CREATEDWITH,12,260,60,8 EDITTEXT IDC_EDIT_CREATEDWITH,78,258,166,13,ES_AUTOHSCROLL | ES_READONLY,WS_EX_STATICEDGE RTEXT "Last saved with:",IDC_TEXT_SAVEDWITH,12,276,60,8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |