From c928b864add5dffd7f6f92c6d1418cbb8c4a76da Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Fri, 5 Sep 2014 23:37:06 +0800 Subject: [PATCH] Update Check: Installed language packs should come first Signed-off-by: Sup Yut Sum --- src/Resources/TortoiseProcENG.rc | 2 +- src/TortoiseProc/CheckForUpdatesDlg.cpp | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 1ed7e6f8e..b302ddf67 100644 --- a/src/Resources/TortoiseProcENG.rc +++ b/src/Resources/TortoiseProcENG.rc @@ -543,7 +543,7 @@ BEGIN GROUPBOX "Change log",IDC_GROUP_CHANGELOG,7,82,486,92 CONTROL "Scintilla",IDC_LOGMESSAGE,"Scintilla",WS_TABSTOP,14,95,470,72,WS_EX_STATICEDGE GROUPBOX "Download",IDC_GROUP_DOWNLOADS,7,177,486,116 - CONTROL "",IDC_LIST_DOWNLOADS,"SysListView32",LVS_REPORT | LVS_SORTASCENDING | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,14,189,470,76 + CONTROL "",IDC_LIST_DOWNLOADS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,14,189,470,76 CONTROL "",IDC_PROGRESSBAR,"msctls_progress32",NOT WS_VISIBLE | WS_BORDER,14,272,385,14 PUSHBUTTON "&Download",IDC_BUTTON_UPDATE,409,272,75,14,WS_DISABLED DEFPUSHBUTTON "&Close",IDOK,220,299,50,14 diff --git a/src/TortoiseProc/CheckForUpdatesDlg.cpp b/src/TortoiseProc/CheckForUpdatesDlg.cpp index d3f1e2ac8..99344b42d 100644 --- a/src/TortoiseProc/CheckForUpdatesDlg.cpp +++ b/src/TortoiseProc/CheckForUpdatesDlg.cpp @@ -407,6 +407,15 @@ void CCheckForUpdatesDlg::FillDownloads(CStdioFile &file, CString version) } } + struct LangPack + { + CString m_PackName; + CString m_LangName; + DWORD m_LocaleID; + CString m_LangCode; + bool m_Installed; + }; + std::vector availableLangs; CString langs; while (file.ReadString(langs) && !langs.IsEmpty()) { @@ -424,14 +433,24 @@ void CCheckForUpdatesDlg::FillDownloads(CStdioFile &file, CString version) sLang2 += _T(")"); } - int pos = m_ctrlFiles.InsertItem(m_ctrlFiles.GetItemCount(), sLang); - m_ctrlFiles.SetItemText(pos, 1, sLang2); + bool installed = std::find(m_installedLangs.begin(), m_installedLangs.end(), loc) != m_installedLangs.end(); + LangPack pack = { sLang, sLang2, loc, langs.Mid(5), installed }; + availableLangs.push_back(pack); + } + std::sort(availableLangs.begin(), availableLangs.end(), [&](const LangPack& a, const LangPack& b) -> int + { + return (a.m_Installed && !b.m_Installed) ? 1 : (!a.m_Installed && b.m_Installed) ? 0 : (a.m_PackName.Compare(b.m_PackName) < 0); + }); + for (auto langs : availableLangs) + { + int pos = m_ctrlFiles.InsertItem(m_ctrlFiles.GetItemCount(), langs.m_PackName); + m_ctrlFiles.SetItemText(pos, 1, langs.m_LangName); CString filename; - filename.Format(_T("TortoiseGit-LanguagePack-%s-%sbit-%s.msi"), version, x86x64, langs.Mid(5)); + filename.Format(_T("TortoiseGit-LanguagePack-%s-%sbit-%s.msi"), version, x86x64, langs.m_LangCode); m_ctrlFiles.SetItemData(pos, (DWORD_PTR)(new CUpdateListCtrl::Entry(filename, CUpdateListCtrl::STATUS_NONE))); - if (std::find(m_installedLangs.begin(), m_installedLangs.end(), loc) != m_installedLangs.end()) + if (langs.m_Installed) m_ctrlFiles.SetCheck(pos , TRUE); } DialogEnableWindow(IDC_BUTTON_UPDATE, TRUE); -- 2.11.4.GIT