@@ -89,6 +89,9 @@ static int FormatFavoriteColumn( WCHAR*, int, int , bool );
8989static int ListView_GetLParamInt ( HWND, int );
9090static int CALLBACK CompareListViewFunc ( LPARAM, LPARAM, LPARAM );
9191
92+ const int nFavoriteLimitOffset = 5 ;
93+ const int ignoreTab = 3 ;
94+
9295struct CompareListViewLParam
9396{
9497 int nSortColumn;
@@ -156,7 +159,7 @@ CDlgFavorite::CDlgFavorite()
156159 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_SEARCH );
157160 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
158161 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_SEARCH;
159- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
162+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
160163 m_aFavoriteInfo[i].m_bFilePath = false ;
161164 m_aFavoriteInfo[i].m_bHaveView = false ;
162165 m_aFavoriteInfo[i].m_bEditable = true ;
@@ -167,7 +170,7 @@ CDlgFavorite::CDlgFavorite()
167170 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_REPLACE );
168171 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
169172 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_REPLACE;
170- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
173+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
171174 m_aFavoriteInfo[i].m_bFilePath = false ;
172175 m_aFavoriteInfo[i].m_bHaveView = false ;
173176 m_aFavoriteInfo[i].m_bEditable = true ;
@@ -178,7 +181,7 @@ CDlgFavorite::CDlgFavorite()
178181 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_GREP_FILE );
179182 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
180183 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_GREP_FILE;
181- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
184+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
182185 m_aFavoriteInfo[i].m_bFilePath = false ;
183186 m_aFavoriteInfo[i].m_bHaveView = false ;
184187 m_aFavoriteInfo[i].m_bEditable = true ;
@@ -189,7 +192,7 @@ CDlgFavorite::CDlgFavorite()
189192 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_GREP_FOLDER );
190193 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
191194 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_GREP_FOLDER;
192- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
195+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
193196 m_aFavoriteInfo[i].m_bFilePath = true ;
194197 m_aFavoriteInfo[i].m_bHaveView = false ;
195198 m_aFavoriteInfo[i].m_bEditable = false ;
@@ -200,7 +203,7 @@ CDlgFavorite::CDlgFavorite()
200203 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_EXT_COMMAND );
201204 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
202205 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_CMD;
203- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
206+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
204207 m_aFavoriteInfo[i].m_bFilePath = false ;
205208 m_aFavoriteInfo[i].m_bHaveView = false ;
206209 m_aFavoriteInfo[i].m_bEditable = true ;
@@ -211,7 +214,7 @@ CDlgFavorite::CDlgFavorite()
211214 m_aFavoriteInfo[i].m_strCaption = LS ( STR_DLGFAV_CURRENT_DIR );
212215 m_aFavoriteInfo[i].m_pszCaption = m_aFavoriteInfo[i].m_strCaption .c_str ();
213216 m_aFavoriteInfo[i].m_nId = IDC_LIST_FAVORITE_CUR_DIR;
214- m_aFavoriteInfo[i].m_bHaveFavorite = false ;
217+ m_aFavoriteInfo[i].m_bHaveFavorite = true ;
215218 m_aFavoriteInfo[i].m_bFilePath = true ;
216219 m_aFavoriteInfo[i].m_bHaveView = false ;
217220 m_aFavoriteInfo[i].m_bEditable = false ;
@@ -625,8 +628,32 @@ BOOL CDlgFavorite::OnNotify(NMHDR* pNMHDR)
625628 switch (pNMHDR->code )
626629 {
627630 case NM_DBLCLK:
628- EditItem ();
629- return TRUE ;
631+ {
632+ LVHITTESTINFO lvht = { 0 };
633+ ::GetCursorPos ( &lvht.pt);
634+ ::ScreenToClient ( hwndList, &lvht.pt );
635+ ListView_HitTest ( hwndList, &lvht );
636+ // IsGreaterThanMax
637+ if ( lvht.flags & LVHT_ONITEMSTATEICON && !( lvht.flags & LVHT_ONITEMLABEL ) && IsGreaterThanOrEqualMax ( m_nCurrentTab )){
638+ ListView_SetCheckState ( hwndList, (int )lvht.iItem , true );
639+ }
640+ if ( lvht.flags & LVHT_ONITEMLABEL ){
641+ EditItem ();
642+ }
643+ }
644+ return true ;
645+ case NM_CLICK:
646+ {
647+ LVHITTESTINFO lvht = { 0 };
648+ ::GetCursorPos ( &lvht.pt );
649+ ::ScreenToClient ( hwndList, &lvht.pt );
650+ ListView_HitTest ( hwndList, &lvht );
651+ // IsGreaterThanMax
652+ if ( lvht.flags & LVHT_ONITEMSTATEICON && !( lvht.flags & LVHT_ONITEMLABEL ) && IsGreaterThanOrEqualMax ( m_nCurrentTab )){
653+ ListView_SetCheckState ( hwndList, (int )lvht.iItem , true );
654+ }
655+ }
656+ return true ;
630657 case NM_RCLICK:
631658 {
632659 POINT po;
@@ -651,6 +678,20 @@ BOOL CDlgFavorite::OnNotify(NMHDR* pNMHDR)
651678 case VK_DELETE:
652679 DeleteSelected ();
653680 return TRUE ;
681+ case VK_SPACE:
682+ {
683+ // IsGreaterThanMax
684+ if ( IsGreaterThanOrEqualMax ( m_nCurrentTab )){
685+ auto nCount = ListView_GetItemCount ( hwndList );
686+ for ( int i = 0 ; i < nCount; i++ ){
687+ if ( ListView_GetItemState ( hwndList, i, LVIS_FOCUSED )){
688+ ListView_SetCheckState ( hwndList, i, true );
689+ break ;
690+ }
691+ }
692+ }
693+ }
694+ return TRUE ;
654695 case VK_APPS:
655696 {
656697 POINT po;
@@ -843,6 +884,30 @@ void CDlgFavorite::GetFavorite( int nIndex )
843884 }
844885}
845886
887+ bool CDlgFavorite::IsGreaterThanOrEqualMax ( int nTab )
888+ {
889+ if ( nTab < ignoreTab ){
890+ return false ;
891+ }
892+ const HWND hwndList = m_aListViewInfo[nTab].hListView ;
893+ const int nCount = ListView_GetItemCount (hwndList);
894+ CRecent* const pRecent = m_aFavoriteInfo[nTab].m_pRecent ;
895+ const int nMax = pRecent->GetArrayCount () - nFavoriteLimitOffset;
896+ if ( nCount < nMax ){
897+ return false ;
898+ }
899+ int nFavoriteCount = 0 ;
900+ for ( int i = 0 ; i < nCount; i++ ){
901+ if ( ListView_GetCheckState ( hwndList, i )){
902+ nFavoriteCount++;
903+ if ( nFavoriteCount >= nMax ){
904+ return true ;
905+ }
906+ }
907+ }
908+ return false ;
909+ }
910+
846911/*
847912 選択中の項目を削除
848913 リストの更新もする
0 commit comments