🎮Unreal4/C++_Plugin

[UE4] Editor에 검색창 추가하기 (SSearchBox, OnTextChanged, OnTextCommitted,CompareToCaseIgnored)

공대 컴린이 2023. 4. 30. 19:56
728x90

월드 아웃라이너에 존재하는 검색창과 같이, ListView의 내용을 검색하여 분류할 수 있는 SSearchBox를 커스텀 Editor 창에 추가해보았다.

📦 SSearchBox

SWeaponListView.cpp

SSearchBox 클래스를 통해 검색창 객체를 불러오고, 검색창에 쓰이는 문자열을 SearchText에 저장하였다.

 

ListView의 구조를 구축하는 SWeaponListView 클래스 Construct 함수에서 SSearchBox가 들어갈 공간 SBox을 SNew로 생성하고, SAssignNew 키워드를 통해 매개변수로 SearchBox를 전달받아 추가하였다.

 

OnTextChanged 함수는 검색창에 글씨가 입력되어 Text가 변경될 때마다 호출되는 이벤트이고,

OnTextCommitted 함수는 엔터가 눌렸을 때 호출되는 이벤트이다.

SSearchBox 이벤트

OnTextChanged 함수에서는 검색창에 쓰이는 문자열 SearchText를 새롭게 입력받는 InText 매개변수로 초기화한다.

CompareToCaseIgnored 함수대소문자 구분없이 문자열을 비교하는 기능을 제공한다.

CompareToCaseIgnored 함수의 결과는 비교하는 문자열이 매개변수보다 작은 경우 -1, 같은 경우 0, 큰 경우 1이 반환된다.

 

즉, 반환값이 0일 때 return 하므로 이전 입력값과 현재의 입력값이 같으면 함수를 실행시키지 않고, 다른 경우에만 SearchText를 갱신하며 ReadDataAssetList 함수를 실행시켜 DataAsset을 읽어온다.

 

OnTextCommitted 함수엔터를 누른 경우이므로 OnTextChanged와 같은 동작을 수행하도록 함수 호출하였다.

 

기존에 작성해두었던 ReadDataAssetList 함수에는 SearchText의 존재여부를 비교하는 조건문을 추가하여,

불러오는 ListView의 항목에서 검색창의 단어가 포함된 항목만을 데이터목록에 추가하도록 하였다.

 

그 결과, 컴파일 후 프로그램을 실행시켜보면 Weapon Asset Editor 창에는 검색창이 추가되어있고, DataAsset의 이름별로 검색이 잘 되는것을 확인할 수 있었다.

 

728x90