diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/skin/widgets/pathpicker.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/pathpicker.cpp')
-rw-r--r-- | Src/Wasabi/api/skin/widgets/pathpicker.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/pathpicker.cpp b/Src/Wasabi/api/skin/widgets/pathpicker.cpp new file mode 100644 index 00000000..baa0c443 --- /dev/null +++ b/Src/Wasabi/api/skin/widgets/pathpicker.cpp @@ -0,0 +1,111 @@ +#include <precomp.h> +#include "pathpicker.h" +#include <api/script/objects/guiobject.h> +#include <api/script/scriptguid.h> +#include <api/script/objects/c_script/c_text.h> +#include <api/util/selectfile.h> + +#define PATHPICKER_MAIN_GROUP L"wasabi.pathpicker.main.group" +#define PATHPICKER_BUTTON L"pathpicker.button" +#define PATHPICKER_TEXT L"pathpicker.text" + +// ----------------------------------------------------------------------- +PathPicker::PathPicker() +{ + abstract_setAllowDeferredContent(1); + abstract_setContent(PATHPICKER_MAIN_GROUP); + clicks_button = NULL; + disable_cfg_event = 0; +} + +PathPicker::~PathPicker() { +} + +int PathPicker::onInit() { + int rt = PATHPICKER_PARENT::onInit(); + return rt; +} + +void PathPicker::abstract_onNewContent() { + PATHPICKER_PARENT::abstract_onNewContent(); + trapControls(); + updatePathInControl(); +} + +#ifdef WASABI_COMPILE_CONFIG +int PathPicker::onReloadConfig() { + int r = PATHPICKER_PARENT::onReloadConfig(); + disable_cfg_event = 1; + updatePathFromConfig(); // triggers onSelect + disable_cfg_event = 0; + return r; +} + +void PathPicker::updatePathFromConfig() { + + const wchar_t *val = getGuiObject()->guiobject_getCfgString(); + const wchar_t *old = getPath(); + if (old && val && !_wcsicmp(val, old)) return; + + setPath(val); +} +#endif + +void PathPicker::trapControls() { + delete clicks_button; + clicks_button = NULL; + + GuiObject *butGuiObj = getGuiObject()->guiobject_findObject(PATHPICKER_BUTTON); + if (butGuiObj) clicks_button = new PPClicksCallback(*butGuiObj, this); +} + +void PathPicker::clickCallback() { + SelectFile sf(this,0,0); + sf.setDefaultDir(getPath()); + if (sf.runSelector(L"directory",0,0)) { + StringW p = sf.getDirectory(); + if (p[wcslen(p-1)] != '/' && p[wcslen(p-1)] != '\\') + p += L"\\"; + setPath(p); + } +} + +void PathPicker::setDefault() { +#ifdef WASABI_COMPILE_CONFIG + onReloadConfig(); +#endif +} + +void PathPicker::setPath(const wchar_t *path) +{ + if (WCSCASEEQLSAFE(curpath, path)) return; + curpath = path; + onPathChanged(path); +} + +void PathPicker::onPathChanged(const wchar_t *newpath) { + updatePathInControl(); + if (!disable_cfg_event) { +#ifdef WASABI_COMPILE_CONFIG + if (newpath == NULL) + getGuiObject()->guiobject_setCfgString(L""); + else + getGuiObject()->guiobject_setCfgString(newpath); +#endif + } +} + +void PathPicker::updatePathInControl() { + GuiObject *content = getContent(); + if (content != NULL) { + GuiObject *text = content->guiobject_findObject(PATHPICKER_TEXT); + if (text != NULL) { + C_Text t(*text); + if (curpath.isempty()) + t.setText(L""); + else + t.setText(curpath); + } + } +} + |