void AssetBrowser::onGUI() { if (m_wanted_resource.isValid()) { selectResource(m_wanted_resource); m_wanted_resource = ""; } if (!ImGui::BeginDock("Asset Browser", &m_is_opened)) { if (m_activate) ImGui::SetDockActive(); m_activate = false; ImGui::EndDock(); return; } if (m_activate) ImGui::SetDockActive(); m_activate = false; if (m_is_focus_requested) { m_is_focus_requested = false; ImGui::SetWindowFocus(); } if (ImGui::Button("Refresh")) findResources(); ImGui::SameLine(); ImGui::Checkbox("Autoreload", &m_autoreload_changed_resource); auto getter = [](void* data, int idx, const char** out) -> bool { auto& browser = *static_cast<AssetBrowser*>(data); *out = browser.m_plugins[idx]->getName(); return true; }; ImGui::Combo("Type", &m_current_type, getter, this, m_plugins.size()); ImGui::InputText("Filter", m_filter, sizeof(m_filter)); ImGui::ListBoxHeader("Resources"); auto& resources = m_resources[m_current_type + 1]; for (auto& resource : resources) { if (m_filter[0] != '\0' && strstr(resource.c_str(), m_filter) == nullptr) continue; bool is_selected = m_selected_resource ? m_selected_resource->getPath() == resource : false; if (ImGui::Selectable(resource.c_str(), is_selected)) { selectResource(resource); } } ImGui::ListBoxFooter(); onGUIResource(); ImGui::EndDock(); }
void AssetBrowser::onGUI() { if (m_wanted_resource.isValid()) { selectResource(m_wanted_resource, true); m_wanted_resource = ""; } if (!ImGui::BeginDock("Asset Browser", &m_is_opened)) { if (m_activate) ImGui::SetDockActive(); m_activate = false; ImGui::EndDock(); return; } onToolbar(); if (ImGui::BeginChild("content")) { if (m_activate) ImGui::SetDockActive(); m_activate = false; if (m_is_focus_requested) { m_is_focus_requested = false; ImGui::SetWindowFocus(); } auto getter = [](void* data, int idx, const char** out) -> bool { auto& browser = *static_cast<AssetBrowser*>(data); *out = browser.m_plugins[idx]->getName(); return true; }; ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); ImGui::Combo("Type", &m_current_type, getter, this, m_plugins.size()); ImGui::FilterInput("Filter", m_filter, sizeof(m_filter)); static ImVec2 size(0, 200); ImGui::ListBoxHeader("Resources", size); auto& resources = m_resources[m_current_type + 1]; for (auto& resource : resources) { if (m_filter[0] != '\0' && strstr(resource.c_str(), m_filter) == nullptr) continue; bool is_selected = m_selected_resource ? m_selected_resource->getPath() == resource : false; if (ImGui::Selectable(resource.c_str(), is_selected)) { selectResource(resource, true); } if (ImGui::IsMouseDragging() && ImGui::IsItemActive()) { m_app.startDrag(StudioApp::DragData::PATH, resource.c_str(), Lumix::stringLength(resource.c_str()) + 1); } } ImGui::ListBoxFooter(); ImGui::HSplitter("splitter", &size); ImGui::PopItemWidth(); onGUIResource(); } ImGui::EndChild(); ImGui::EndDock(); }