fix game config (#97)
This commit is contained in:
parent
804661f558
commit
ed7acc5f99
|
|
@ -2144,6 +2144,7 @@ bool SciterMainWindow::OnTimer(SCITER_ELEMENT /*element*/, uint32_t * timerId)
|
|||
m_gameConfig.reset(new GameConfig(m_sciterUI, m_modules));
|
||||
m_gameConfig->Display((void *)m_window->GetHandle(), path.c_str());
|
||||
}
|
||||
}
|
||||
else if (timerId == (uint32_t *)TIMER_DEFERRED_STOP_GAME)
|
||||
{
|
||||
DoStopGame();
|
||||
|
|
|
|||
|
|
@ -182,6 +182,8 @@ void GameConfig::Display(void * parentWindow, const char * gamePath)
|
|||
m_pageNav = std::static_pointer_cast<IPageNav>(interfacePtr);
|
||||
m_pageNav->AddSink(this);
|
||||
}
|
||||
|
||||
AttachClickHandler(m_sciterUI, root.FindFirst("button[role=\"window-ok\"]"), this);
|
||||
}
|
||||
|
||||
m_window->FixMinSize();
|
||||
|
|
@ -232,3 +234,21 @@ void GameConfig::PageNavCreatedPage(const std::string & pageName, SCITER_ELEMENT
|
|||
void GameConfig::PageNavPageChanged(const std::string & /*pageName*/, SCITER_ELEMENT /*pageNav*/)
|
||||
{
|
||||
}
|
||||
|
||||
bool GameConfig::OnClick(SCITER_ELEMENT element, SCITER_ELEMENT /*source*/, uint32_t /*reason*/)
|
||||
{
|
||||
SciterElement clickElem(element);
|
||||
if (clickElem.GetAttribute("role") == "window-ok")
|
||||
{
|
||||
if (m_gameConfigAddons)
|
||||
{
|
||||
m_gameConfigAddons->SaveSetting();
|
||||
}
|
||||
if (m_window != nullptr)
|
||||
{
|
||||
m_window->Destroy();
|
||||
m_window = nullptr;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <sciter_handler.h>
|
||||
#include <widgets/page_nav.h>
|
||||
#include <string>
|
||||
|
||||
|
|
@ -9,6 +10,7 @@ class SystemModules;
|
|||
class GameConfigAddons;
|
||||
|
||||
class GameConfig :
|
||||
public IClickSink,
|
||||
public IPagesSink
|
||||
{
|
||||
public:
|
||||
|
|
@ -18,6 +20,9 @@ public:
|
|||
void Display(void * parentWindow, const char * gamePath);
|
||||
uint64_t ProgramId() const { return m_programId; }
|
||||
|
||||
// IClickSink
|
||||
bool OnClick(SCITER_ELEMENT element, SCITER_ELEMENT source, uint32_t reason) override;
|
||||
|
||||
// IPagesSink
|
||||
bool PageNavChangeFrom(const std::string & pageName, SCITER_ELEMENT pageNav) override;
|
||||
bool PageNavChangeTo(const std::string & pageName, SCITER_ELEMENT pageNav) override;
|
||||
|
|
|
|||
|
|
@ -62,3 +62,55 @@ void GameConfigAddons::PopulateAddons(void)
|
|||
|
||||
list.SetHTML(reinterpret_cast<const uint8_t *>(html.c_str()), html.size());
|
||||
}
|
||||
|
||||
void GameConfigAddons::SaveSetting(void)
|
||||
{
|
||||
const uint64_t programId = m_config.ProgramId();
|
||||
if (!m_page.IsValid() || programId == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SciterElement list = m_page.GetElementByID("AddonsList");
|
||||
if (!list.IsValid())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> disabledNames;
|
||||
std::vector<const char *> disabledPtrs;
|
||||
const uint32_t childCount = list.GetChildCount();
|
||||
for (uint32_t i = 0; i < childCount; ++i)
|
||||
{
|
||||
SciterElement row = list.GetChild(i);
|
||||
if (!row.IsValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
SciterElement checkbox = row.FindFirst("input.addon-enabled");
|
||||
if (!checkbox.IsValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const bool checked = (checkbox.GetState() & SciterElement::STATE_CHECKED) != 0;
|
||||
if (checked)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const std::string name = checkbox.GetAttribute("data-name");
|
||||
if (!name.empty())
|
||||
{
|
||||
disabledNames.push_back(name);
|
||||
}
|
||||
}
|
||||
|
||||
disabledPtrs.reserve(disabledNames.size());
|
||||
for (const std::string & name : disabledNames)
|
||||
{
|
||||
disabledPtrs.push_back(name.c_str());
|
||||
}
|
||||
|
||||
m_modules.Modules().Systemloader().SetDisabledAddons(
|
||||
programId, disabledPtrs.empty() ? nullptr : disabledPtrs.data(),
|
||||
static_cast<uint32_t>(disabledPtrs.size()));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue