Files
ppsspp/UI/TabbedDialogScreen.h
T

70 lines
2.0 KiB
C++

#pragma once
#include "ppsspp_config.h"
#include <functional>
#include "Common/UI/UIScreen.h"
#include "Common/Render/TextureAtlas.h"
#include "Common/System/System.h"
#include "Core/ConfigValues.h"
#include "UI/BaseScreens.h"
namespace UI {
class TabHolder;
}
enum class TabDialogFlags {
Default = 0,
HorizontalOnlyIcons = 1,
VerticalShowIcons = 2,
AddAutoTitles = 4,
ContextMenuInPortrait = 8,
};
ENUM_CLASS_BITOPS(TabDialogFlags);
enum class TabFlags {
Default = 0,
NonScrollable = 1,
};
ENUM_CLASS_BITOPS(TabFlags);
class UITabbedBaseDialogScreen : public UIBaseDialogScreen {
public:
UITabbedBaseDialogScreen(const Path &gamePath, TabDialogFlags flags = TabDialogFlags::Default) : UIBaseDialogScreen(gamePath), flags_(flags) {}
void AddTab(const char *tag, std::string_view title, ImageID imageId, std::function<void(UI::LinearLayout *)> createCallback, TabFlags flags = TabFlags::Default);
void AddTab(const char *tag, std::string_view title, std::function<void(UI::LinearLayout *)> createCallback, TabFlags flags = TabFlags::Default) {
AddTab(tag, title, ImageID::invalid(), createCallback, flags);
}
void CreateViews() override;
protected:
// Load data and define your tabs here.
virtual void PreCreateViews() {}
virtual void CreateTabs() = 0;
virtual void CreateExtraButtons(UI::ViewGroup *verticalLayout, int margins) {}
virtual bool ShowSearchControls() const { return true; }
virtual void EnsureTabs();
virtual bool UsePopupMenuInPortrait() const { return false; }
virtual bool ForceHorizontalTabs() const { return false; }
int GetCurrentTab() const;
void SetCurrentTab(int tab);
void sendMessage(UIMessage message, const char *value) override;
private:
void ApplySearchFilter();
UI::TabHolder *tabHolder_ = nullptr;
UI::TextView *filterNotice_ = nullptr;
UI::Choice *clearSearchChoice_ = nullptr;
UI::TextView *noSearchResults_ = nullptr;
// If we recreate the views while this is active we show it again
std::string oldSettingInfo_;
std::string searchFilter_;
TabDialogFlags flags_ = TabDialogFlags::Default;
};