Michael 2 лет назад
Родитель
Сommit
8693dab9ec
2 измененных файлов с 18 добавлено и 7 удалено
  1. 17 7
      client/lobby/SelectionTab.cpp
  2. 1 0
      client/lobby/SelectionTab.h

+ 17 - 7
client/lobby/SelectionTab.cpp

@@ -138,7 +138,7 @@ static ESortBy getSortBySelectionScreen(ESelectionScreen Type)
 }
 
 SelectionTab::SelectionTab(ESelectionScreen Type)
-	: CIntObject(LCLICK | SHOW_POPUP | KEYBOARD | DOUBLECLICK), callOnSelect(nullptr), tabType(Type), selectionPos(0), sortModeAscending(true), inputNameRect{32, 539, 350, 20}, curFolder("")
+	: CIntObject(LCLICK | SHOW_POPUP | KEYBOARD | DOUBLECLICK), callOnSelect(nullptr), tabType(Type), selectionPos(0), sortModeAscending(true), inputNameRect{32, 539, 350, 20}, curFolder(""), curFilterSize(0)
 {
 	OBJ_CONSTRUCTION;
 
@@ -391,6 +391,10 @@ std::tuple<std::string, std::string, bool, bool> SelectionTab::checkSubfolder(st
 // selMaps with the relevant data.
 void SelectionTab::filter(int size, bool selectFirst)
 {
+	if(size == -1)
+		size = curFilterSize;
+	curFilterSize = size;
+
 	curItems.clear();
 
 	for(auto elem : allItems)
@@ -428,13 +432,19 @@ void SelectionTab::filter(int size, bool selectFirst)
 		sort();
 		if(selectFirst)
 		{
-			slider->scrollTo(0);
-			callOnSelect(curItems[0]);
-			selectAbs(-1);
+			int firstPos = boost::range::find_if(curItems, [](std::shared_ptr<ElementInfo> e) { return !e->isFolder; }) - curItems.begin();
+			if(firstPos < curItems.size())
+			{
+				slider->scrollTo(firstPos);
+				callOnSelect(curItems[firstPos]);
+				selectAbs(firstPos);
+			}
 		}
 	}
 	else
 	{
+		updateListItems();
+		redraw();
 		slider->block(true);
 		if(callOnSelect)
 			callOnSelect(nullptr);
@@ -499,9 +509,9 @@ void SelectionTab::select(int position)
 		}
 		else
 			curFolder += curItems[py]->folderName + "/";
-		filter(0);
+		filter(-1);
 		slider->scrollTo(0);
-		
+
 		return;
 	}
 
@@ -602,7 +612,7 @@ void SelectionTab::selectFileName(std::string fname)
 		}
 	}
 
-	filter(0);
+	filter(-1);
 	selectAbs(-1);
 }
 

+ 1 - 0
client/lobby/SelectionTab.h

@@ -70,6 +70,7 @@ public:
 	ESortBy sortingBy;
 	ESortBy generalSortingBy;
 	bool sortModeAscending;
+	int curFilterSize = 0;
 
 	std::shared_ptr<CTextInput> inputName;