Browse Source

Persist tagFilter and manufacturerFilter of Module Browser

tags/v0.6.0
Andrew Belt 7 years ago
parent
commit
1591892505
1 changed files with 21 additions and 19 deletions
  1. +21
    -19
      src/app/ModuleBrowser.cpp

+ 21
- 19
src/app/ModuleBrowser.cpp View File

@@ -12,6 +12,9 @@ namespace rack {




static std::set<Model*> sFavoriteModels; static std::set<Model*> sFavoriteModels;
static std::string sManufacturerFilter;
static ModelTag sTagFilter = NO_TAG;





bool isMatch(std::string s, std::string search) { bool isMatch(std::string s, std::string search) {
@@ -73,6 +76,8 @@ struct BrowserListItem : OpaqueWidget {
Widget::draw(vg); Widget::draw(vg);
} }


void onDragStart(EventDragStart &e) override;

void onDragDrop(EventDragDrop &e) override { void onDragDrop(EventDragDrop &e) override {
if (e.origin != this) if (e.origin != this)
return; return;
@@ -88,12 +93,9 @@ struct BrowserListItem : OpaqueWidget {
gScene->setOverlay(NULL); gScene->setOverlay(NULL);
} }
} }

void onMouseEnter(EventMouseEnter &e) override;
}; };





struct ModelItem : BrowserListItem { struct ModelItem : BrowserListItem {
Model *model; Model *model;
Label *manufacturerLabel; Label *manufacturerLabel;
@@ -286,12 +288,10 @@ struct SearchModuleField : TextField {
}; };




struct ModuleBrowser : OpaqueWidget {
struct ModuleBrowser : VirtualWidget {
SearchModuleField *searchField; SearchModuleField *searchField;
ScrollWidget *moduleScroll; ScrollWidget *moduleScroll;
BrowserList *moduleList; BrowserList *moduleList;
std::string manufacturerFilter;
ModelTag tagFilter = NO_TAG;
std::set<std::string> availableManufacturers; std::set<std::string> availableManufacturers;
std::set<ModelTag> availableTags; std::set<ModelTag> availableTags;


@@ -337,10 +337,10 @@ struct ModuleBrowser : OpaqueWidget {
} }


bool isModelFiltered(Model *model) { bool isModelFiltered(Model *model) {
if (!manufacturerFilter.empty() && model->manufacturer != manufacturerFilter)
if (!sManufacturerFilter.empty() && model->manufacturer != sManufacturerFilter)
return false; return false;
if (tagFilter != NO_TAG) {
auto it = std::find(model->tags.begin(), model->tags.end(), tagFilter);
if (sTagFilter != NO_TAG) {
auto it = std::find(model->tags.begin(), model->tags.end(), sTagFilter);
if (it == model->tags.end()) if (it == model->tags.end())
return false; return false;
} }
@@ -367,7 +367,7 @@ struct ModuleBrowser : OpaqueWidget {
} }


// Manufacturers // Manufacturers
if (manufacturerFilter.empty() && tagFilter == NO_TAG) {
if (sManufacturerFilter.empty() && sTagFilter == NO_TAG) {
// Manufacturer items // Manufacturer items
{ {
SeparatorItem *item = new SeparatorItem(); SeparatorItem *item = new SeparatorItem();
@@ -401,7 +401,7 @@ struct ModuleBrowser : OpaqueWidget {
} }


// Models // Models
if (!manufacturerFilter.empty() || tagFilter != NO_TAG || !search.empty()) {
if (!sManufacturerFilter.empty() || sTagFilter != NO_TAG || !search.empty()) {
{ {
SeparatorItem *item = new SeparatorItem(); SeparatorItem *item = new SeparatorItem();
item->setText("Modules"); item->setText("Modules");
@@ -424,7 +424,7 @@ struct ModuleBrowser : OpaqueWidget {
box.pos.y = 60; box.pos.y = 60;
box.size.y = parent->box.size.y - 2 * box.pos.y; box.size.y = parent->box.size.y - 2 * box.pos.y;


moduleScroll->box.size.y = box.size.y - moduleScroll->box.pos.y;
moduleScroll->box.size.y = min(box.size.y - moduleScroll->box.pos.y, moduleList->box.size.y);
gFocusedWidget = searchField; gFocusedWidget = searchField;
Widget::step(); Widget::step();
} }
@@ -435,7 +435,7 @@ struct ModuleBrowser : OpaqueWidget {


void ManufacturerItem::onAction(EventAction &e) { void ManufacturerItem::onAction(EventAction &e) {
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>();
moduleBrowser->manufacturerFilter = manufacturer;
sManufacturerFilter = manufacturer;
moduleBrowser->clearSearch(); moduleBrowser->clearSearch();
moduleBrowser->refreshSearch(); moduleBrowser->refreshSearch();
e.consumed = false; e.consumed = false;
@@ -443,7 +443,7 @@ void ManufacturerItem::onAction(EventAction &e) {


void TagItem::onAction(EventAction &e) { void TagItem::onAction(EventAction &e) {
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>();
moduleBrowser->tagFilter = tag;
sTagFilter = tag;
moduleBrowser->clearSearch(); moduleBrowser->clearSearch();
moduleBrowser->refreshSearch(); moduleBrowser->refreshSearch();
e.consumed = false; e.consumed = false;
@@ -451,8 +451,8 @@ void TagItem::onAction(EventAction &e) {


void ClearFilterItem::onAction(EventAction &e) { void ClearFilterItem::onAction(EventAction &e) {
ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>(); ModuleBrowser *moduleBrowser = getAncestorOfType<ModuleBrowser>();
moduleBrowser->manufacturerFilter = "";
moduleBrowser->tagFilter = NO_TAG;
sManufacturerFilter = "";
sTagFilter = NO_TAG;
moduleBrowser->clearSearch(); moduleBrowser->clearSearch();
moduleBrowser->refreshSearch(); moduleBrowser->refreshSearch();
e.consumed = false; e.consumed = false;
@@ -475,9 +475,11 @@ void FavoriteRadioButton::onAction(EventAction &e) {
moduleBrowser->refreshSearch(); moduleBrowser->refreshSearch();
} }


void BrowserListItem::onMouseEnter(EventMouseEnter &e) {
// BrowserList *list = getAncestorOfType<BrowserList>();
// list->selectItem(this);
void BrowserListItem::onDragStart(EventDragStart &e) {
BrowserList *list = dynamic_cast<BrowserList*>(parent);
if (list) {
list->selectItem(this);
}
} }


void SearchModuleField::onTextChange() { void SearchModuleField::onTextChange() {


Loading…
Cancel
Save