Merge pull request #1057 from paulfd/button-hints
Button hints and closing the about dialog with Esc
This commit is contained in:
commit
3d50afc794
5 changed files with 101 additions and 16 deletions
|
|
@ -3,7 +3,7 @@ version 1.0304
|
||||||
header_name {.h}
|
header_name {.h}
|
||||||
code_name {.cxx}
|
code_name {.cxx}
|
||||||
widget_class mainView {open
|
widget_class mainView {open
|
||||||
xywh {607 439 800 475} type Double
|
xywh {624 612 800 475} type Double
|
||||||
class LogicalGroup visible
|
class LogicalGroup visible
|
||||||
} {
|
} {
|
||||||
Fl_Box imageContainer_ {
|
Fl_Box imageContainer_ {
|
||||||
|
|
@ -161,7 +161,7 @@ widget_class mainView {open
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Fl_Group {subPanels_[kPanelInfo]} {open
|
Fl_Group {subPanels_[kPanelInfo]} {
|
||||||
xywh {5 110 790 285} hide
|
xywh {5 110 790 285} hide
|
||||||
class LogicalGroup
|
class LogicalGroup
|
||||||
} {
|
} {
|
||||||
|
|
@ -221,7 +221,7 @@ widget_class mainView {open
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Fl_Group {subPanels_[kPanelControls]} {open
|
Fl_Group {subPanels_[kPanelControls]} {
|
||||||
xywh {5 110 790 285} hide
|
xywh {5 110 790 285} hide
|
||||||
class LogicalGroup
|
class LogicalGroup
|
||||||
} {
|
} {
|
||||||
|
|
@ -235,7 +235,7 @@ widget_class mainView {open
|
||||||
} {}
|
} {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Fl_Group {subPanels_[kPanelSettings]} {open
|
Fl_Group {subPanels_[kPanelSettings]} {
|
||||||
xywh {0 110 825 360}
|
xywh {0 110 825 360}
|
||||||
class LogicalGroup
|
class LogicalGroup
|
||||||
} {
|
} {
|
||||||
|
|
@ -366,7 +366,7 @@ widget_class mainView {open
|
||||||
class Label
|
class Label
|
||||||
}
|
}
|
||||||
Fl_Check_Button sustainCancelsReleaseCheckbox_ {
|
Fl_Check_Button sustainCancelsReleaseCheckbox_ {
|
||||||
comment {tag=kTagSetSustainCancelsRelease} selected
|
comment {tag=kTagSetSustainCancelsRelease}
|
||||||
xywh {200 220 25 25} down_box DOWN_BOX
|
xywh {200 220 25 25} down_box DOWN_BOX
|
||||||
class Checkbox
|
class Checkbox
|
||||||
}
|
}
|
||||||
|
|
@ -456,4 +456,9 @@ widget_class mainView {open
|
||||||
xywh {5 110 790 285} hide
|
xywh {5 110 790 285} hide
|
||||||
class LogicalGroup
|
class LogicalGroup
|
||||||
} {}
|
} {}
|
||||||
|
Fl_Box lblHover_ {
|
||||||
|
comment {palette=invertedPalette} selected
|
||||||
|
xywh {5 105 170 25} labelsize 12 hide
|
||||||
|
class HoverBox
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -223,6 +223,24 @@ CMouseEventResult SAboutDialog::onMouseDown(CPoint& where, const CButtonState& b
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t SAboutDialog::onKeyDown (const VstKeyCode& keyCode, CFrame* frame)
|
||||||
|
{
|
||||||
|
if (keyCode.virt == VKEY_ESCAPE) {
|
||||||
|
setVisible(false);
|
||||||
|
frame->unregisterKeyboardHook(this);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t SAboutDialog::onKeyUp (const VstKeyCode& keyCode, CFrame* frame)
|
||||||
|
{
|
||||||
|
(void)keyCode;
|
||||||
|
(void)frame;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void SAboutDialog::valueChanged(CControl *ctl)
|
void SAboutDialog::valueChanged(CControl *ctl)
|
||||||
{
|
{
|
||||||
int32_t tag = ctl->getTag();
|
int32_t tag = ctl->getTag();
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
using namespace VSTGUI;
|
using namespace VSTGUI;
|
||||||
|
|
||||||
class SAboutDialog : public CViewContainer, public IControlListener {
|
class SAboutDialog : public CViewContainer, public IControlListener, public IKeyboardHook{
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
kTagButtonSfztools,
|
kTagButtonSfztools,
|
||||||
|
|
@ -28,6 +28,8 @@ public:
|
||||||
|
|
||||||
void setPluginFormat(const std::string& pluginFormat);
|
void setPluginFormat(const std::string& pluginFormat);
|
||||||
void setPluginHost(const std::string& pluginHost);
|
void setPluginHost(const std::string& pluginHost);
|
||||||
|
int32_t onKeyDown (const VstKeyCode& code, CFrame* frame) override;
|
||||||
|
int32_t onKeyUp (const VstKeyCode& code, CFrame* frame) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override;
|
CMouseEventResult onMouseDown(CPoint& where, const CButtonState& buttons) override;
|
||||||
|
|
|
||||||
|
|
@ -139,6 +139,7 @@ struct Editor::Impl : EditorController::Receiver,
|
||||||
CTextLabel* keyswitchLabel_ = nullptr;
|
CTextLabel* keyswitchLabel_ = nullptr;
|
||||||
CTextLabel* keyswitchInactiveLabel_ = nullptr;
|
CTextLabel* keyswitchInactiveLabel_ = nullptr;
|
||||||
CTextLabel* keyswitchBadge_ = nullptr;
|
CTextLabel* keyswitchBadge_ = nullptr;
|
||||||
|
CTextLabel* lblHover_ = nullptr;
|
||||||
COptionMenu* themeMenu_ = nullptr;
|
COptionMenu* themeMenu_ = nullptr;
|
||||||
std::unique_ptr<Theme> theme_;
|
std::unique_ptr<Theme> theme_;
|
||||||
|
|
||||||
|
|
@ -232,6 +233,8 @@ struct Editor::Impl : EditorController::Receiver,
|
||||||
void updatePreloadSizeLabel(int preloadSize);
|
void updatePreloadSizeLabel(int preloadSize);
|
||||||
void updateScalaRootKeyLabel(int rootKey);
|
void updateScalaRootKeyLabel(int rootKey);
|
||||||
void updateStretchedTuningLabel(float stretchedTuning);
|
void updateStretchedTuningLabel(float stretchedTuning);
|
||||||
|
void buttonHoverEnter(CControl* btn, const char* text);
|
||||||
|
void buttonHoverLeave(CControl* btn);
|
||||||
|
|
||||||
absl::string_view getCurrentKeyswitchName() const;
|
absl::string_view getCurrentKeyswitchName() const;
|
||||||
void updateKeyswitchNameLabel();
|
void updateKeyswitchNameLabel();
|
||||||
|
|
@ -871,6 +874,19 @@ void Editor::Impl::createFrameContents()
|
||||||
cb->setRoundRectRadius(5.0);
|
cb->setRoundRectRadius(5.0);
|
||||||
return cb;
|
return cb;
|
||||||
};
|
};
|
||||||
|
auto createHoverBox = [this, &palette](const CRect& bounds, int, const char* label, CHoriTxtAlign align, int fontsize) {
|
||||||
|
CTextLabel* lbl = new CTextLabel(bounds, label);
|
||||||
|
auto font = makeOwned<CFontDesc>("Roboto", fontsize);
|
||||||
|
OnThemeChanged.push_back([lbl, palette]() {
|
||||||
|
lbl->setFontColor(palette->valueText);
|
||||||
|
lbl->setBackColor(palette->valueBackground);
|
||||||
|
lbl->setFrameColor(palette->valueText);
|
||||||
|
});
|
||||||
|
lbl->setHoriAlign(align);
|
||||||
|
lbl->setFont(font);
|
||||||
|
lbl->setAutosizeFlags(kAutosizeAll);
|
||||||
|
return lbl;
|
||||||
|
};
|
||||||
auto createGlyphButton = [this, &palette](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) {
|
auto createGlyphButton = [this, &palette](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) {
|
||||||
STextButton* btn = new STextButton(bounds, this, tag, glyph);
|
STextButton* btn = new STextButton(bounds, this, tag, glyph);
|
||||||
btn->setFont(makeOwned<CFontDesc>("Sfizz Fluent System F20", fontsize));
|
btn->setFont(makeOwned<CFontDesc>("Sfizz Fluent System F20", fontsize));
|
||||||
|
|
@ -884,18 +900,29 @@ void Editor::Impl::createFrameContents()
|
||||||
btn->setGradientHighlighted(nullptr);
|
btn->setGradientHighlighted(nullptr);
|
||||||
return btn;
|
return btn;
|
||||||
};
|
};
|
||||||
auto createHomeButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
auto createHomeButton = [this, &createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
||||||
return createGlyphButton(u8"\ue1d6", bounds, tag, fontsize);
|
auto* btn = createGlyphButton(u8"\ue1d6", bounds, tag, fontsize);
|
||||||
|
btn->OnHoverEnter = [this, btn]() { buttonHoverEnter(btn, "Home"); };
|
||||||
|
btn->OnHoverLeave = [this, btn]() { buttonHoverLeave(btn); };
|
||||||
|
return btn;
|
||||||
};
|
};
|
||||||
auto createInfoButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
auto createInfoButton = [this, &createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
||||||
return createGlyphButton(u8"\ue1e7", bounds, tag, fontsize);
|
auto* btn = createGlyphButton(u8"\ue1e7", bounds, tag, fontsize);
|
||||||
|
btn->OnHoverEnter = [this, btn]() { buttonHoverEnter(btn, "Information"); };
|
||||||
|
btn->OnHoverLeave = [this, btn]() { buttonHoverLeave(btn); };
|
||||||
|
return btn;
|
||||||
};
|
};
|
||||||
auto createCCButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
auto createCCButton = [this, &createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
||||||
// return createGlyphButton(u8"\ue240", bounds, tag, fontsize);
|
auto* btn = createGlyphButton(u8"\ue253", bounds, tag, fontsize);
|
||||||
return createGlyphButton(u8"\ue253", bounds, tag, fontsize);
|
btn->OnHoverEnter = [this, btn]() { buttonHoverEnter(btn, "Controls"); };
|
||||||
|
btn->OnHoverLeave = [this, btn]() { buttonHoverLeave(btn); };
|
||||||
|
return btn;
|
||||||
};
|
};
|
||||||
auto createSettingsButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
auto createSettingsButton = [this, &createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
||||||
return createGlyphButton(u8"\ue2e4", bounds, tag, fontsize);
|
auto* btn = createGlyphButton(u8"\ue2e4", bounds, tag, fontsize);
|
||||||
|
btn->OnHoverEnter = [this, btn]() { buttonHoverEnter(btn, "Settings"); };
|
||||||
|
btn->OnHoverLeave = [this, btn]() { buttonHoverLeave(btn); };
|
||||||
|
return btn;
|
||||||
};
|
};
|
||||||
#if 0
|
#if 0
|
||||||
auto createEditFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
auto createEditFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
|
||||||
|
|
@ -1714,6 +1741,30 @@ void Editor::Impl::updateStretchedTuningLabel(float stretchedTuning)
|
||||||
label->setText(text);
|
label->setText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Editor::Impl::buttonHoverEnter(CControl* btn, const char* text)
|
||||||
|
{
|
||||||
|
lblHover_->setText(text);
|
||||||
|
lblHover_->sizeToFit();
|
||||||
|
CRect rect = lblHover_->getViewSize();
|
||||||
|
CRect btnRect = btn->getViewSize();
|
||||||
|
auto height = rect.getHeight();
|
||||||
|
auto width = rect.getWidth();
|
||||||
|
rect.left = btnRect.left;
|
||||||
|
rect.top = btnRect.bottom + 2;
|
||||||
|
rect.setWidth(width + 10);
|
||||||
|
rect.setHeight(height);
|
||||||
|
lblHover_->setViewSize(rect);
|
||||||
|
lblHover_->setVisible(true);
|
||||||
|
lblHover_->invalid();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Editor::Impl::buttonHoverLeave(CControl* btn)
|
||||||
|
{
|
||||||
|
(void)btn;
|
||||||
|
lblHover_->setVisible(false);
|
||||||
|
lblHover_->invalid();
|
||||||
|
}
|
||||||
|
|
||||||
absl::string_view Editor::Impl::getCurrentKeyswitchName() const
|
absl::string_view Editor::Impl::getCurrentKeyswitchName() const
|
||||||
{
|
{
|
||||||
int sw = currentKeyswitch_;
|
int sw = currentKeyswitch_;
|
||||||
|
|
@ -2076,7 +2127,10 @@ void Editor::Impl::valueChanged(CControl* ctl)
|
||||||
if (value != 1)
|
if (value != 1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
Call::later([this]() { aboutDialog_->setVisible(true); });
|
Call::later([this]() {
|
||||||
|
aboutDialog_->setVisible(true);
|
||||||
|
frame_->registerKeyboardHook(aboutDialog_);
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kTagThemeMenu:
|
case kTagThemeMenu:
|
||||||
|
|
|
||||||
|
|
@ -238,3 +238,9 @@ auto* const view__91 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCent
|
||||||
subPanels_[kPanelGeneral] = view__91;
|
subPanels_[kPanelGeneral] = view__91;
|
||||||
view__0->addView(view__91);
|
view__0->addView(view__91);
|
||||||
view__91->setVisible(false);
|
view__91->setVisible(false);
|
||||||
|
enterPalette(invertedPalette);
|
||||||
|
auto* const view__92 = createHoverBox(CRect(5, 105, 175, 130), -1, "", kCenterText, 12);
|
||||||
|
lblHover_ = view__92;
|
||||||
|
view__0->addView(view__92);
|
||||||
|
view__92->setVisible(false);
|
||||||
|
enterPalette(defaultPalette);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue