Skip to content

Commit

Permalink
WIP numeric widgets
Browse files Browse the repository at this point in the history
  • Loading branch information
darbyjohnston committed Apr 30, 2023
1 parent 1c021a7 commit d696c50
Show file tree
Hide file tree
Showing 16 changed files with 423 additions and 110 deletions.
78 changes: 78 additions & 0 deletions etc/Icons/Decrement.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
78 changes: 78 additions & 0 deletions etc/Icons/Increment.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions lib/tlUI/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ set(HEADERS
IWidgetInline.h
IWidgetOptions.h
IconLibrary.h
IncButton.h
IntEdit.h
IntModel.h
IntSlider.h
Expand Down Expand Up @@ -57,6 +58,7 @@ set(SOURCE
IWidget.cpp
IWidgetOptions.cpp
IconLibrary.cpp
IncButton.cpp
IntEdit.cpp
IntModel.cpp
IntSlider.cpp
Expand Down
86 changes: 48 additions & 38 deletions lib/tlUI/FloatEdit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@

#include <tlUI/FloatEdit.h>

#include <tlUI/IncButton.h>
#include <tlUI/LineEdit.h>

#include <tlCore/StringFormat.h>

namespace tl
Expand All @@ -13,6 +16,9 @@ namespace tl
struct FloatEdit::Private
{
std::shared_ptr<FloatModel> model;
std::shared_ptr<LineEdit> lineEdit;
std::shared_ptr<IncButton> incrementButton;
std::shared_ptr<IncButton> decrementButton;
int digits = 3;
int precision = 2;

Expand All @@ -24,13 +30,16 @@ namespace tl
const std::shared_ptr<system::Context>& context,
const std::shared_ptr<IWidget>& parent)
{
LineEdit::_init(context, parent);
_name = "tl::ui::FloatEdit";
IWidget::_init("tl::ui::FloatEdit", context, parent);
TLRENDER_P();

p.lineEdit = LineEdit::create(context, shared_from_this());
p.incrementButton = IncButton::create(context, shared_from_this());
p.decrementButton = IncButton::create(context, shared_from_this());

setModel(FloatModel::create(context));

_floatUpdate();
_textUpdate();
}

FloatEdit::FloatEdit() :
Expand Down Expand Up @@ -66,16 +75,16 @@ namespace tl
p.model->observeValue(),
[this](float)
{
_floatUpdate();
_textUpdate();
});
p.rangeObserver = observer::ValueObserver<math::FloatRange>::create(
p.model->observeRange(),
[this](const math::FloatRange&)
{
_floatUpdate();
_textUpdate();
});
}
_floatUpdate();
_textUpdate();
}

void FloatEdit::setDigits(int value)
Expand All @@ -84,7 +93,7 @@ namespace tl
if (value == p.digits)
return;
p.digits = value;
_floatUpdate();
_textUpdate();
}

void FloatEdit::setPrecision(int value)
Expand All @@ -93,44 +102,45 @@ namespace tl
if (value == p.precision)
return;
p.precision = value;
_floatUpdate();
_textUpdate();
}

void FloatEdit::setFontRole(FontRole value)
{
_p->lineEdit->setFontRole(value);
}

void FloatEdit::keyPressEvent(KeyEvent& event)
void FloatEdit::setGeometry(const math::BBox2i& value)
{
LineEdit::keyPressEvent(event);
IWidget::setGeometry(value);
TLRENDER_P();
if (!event.accept)
{
switch (event.key)
{
case Key::Down:
event.accept = true;
p.model->subtractStep();
break;
case Key::Up:
event.accept = true;
p.model->addStep();
break;
case Key::PageUp:
event.accept = true;
p.model->addLargeStep();
break;
case Key::PageDown:
event.accept = true;
p.model->subtractLargeStep();
break;
}
}
math::BBox2i g = value;
const int buttonsWidth = std::max(
p.incrementButton->getSizeHint().x,
p.decrementButton->getSizeHint().x);
g.max.x -= buttonsWidth;
p.lineEdit->setGeometry(g);
g = value;
g.min.x = g.max.x - buttonsWidth;
g.max.y = g.min.y + g.h() / 2;
p.incrementButton->setGeometry(g);
g.min.y = g.max.y;
g.max.y = value.max.y;
p.decrementButton->setGeometry(g);
}

void FloatEdit::keyReleaseEvent(KeyEvent& event)
void FloatEdit::sizeHintEvent(const SizeHintEvent& event)
{
LineEdit::keyPressEvent(event);
event.accept = true;
IWidget::sizeHintEvent(event);
TLRENDER_P();
_sizeHint = p.lineEdit->getSizeHint();
const int buttonsWidth = std::max(
p.incrementButton->getSizeHint().x,
p.decrementButton->getSizeHint().x);
_sizeHint.x += buttonsWidth;
}

void FloatEdit::_floatUpdate()
void FloatEdit::_textUpdate()
{
TLRENDER_P();
std::string text;
Expand All @@ -143,8 +153,8 @@ namespace tl
arg(range.getMin() < 0 ? "-" : "").
arg(0.F, p.precision, p.precision + 1 + p.digits);
}
setText(text);
setFormat(format);
p.lineEdit->setText(text);
p.lineEdit->setFormat(format);
}
}
}
13 changes: 8 additions & 5 deletions lib/tlUI/FloatEdit.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@

#pragma once

#include <tlUI/LineEdit.h>
#include <tlUI/IWidget.h>
#include <tlUI/FloatModel.h>

namespace tl
{
namespace ui
{
//! Floating point number editor.
class FloatEdit : public LineEdit
class FloatEdit : public IWidget
{
TLRENDER_NON_COPYABLE(FloatEdit);

Expand Down Expand Up @@ -43,11 +43,14 @@ namespace tl
//! Set the display precision.
void setPrecision(int);

void keyPressEvent(KeyEvent&) override;
void keyReleaseEvent(KeyEvent&) override;
//! Set the font role.
void setFontRole(FontRole);

void setGeometry(const math::BBox2i&) override;
void sizeHintEvent(const SizeHintEvent&) override;

private:
void _floatUpdate();
void _textUpdate();

TLRENDER_PRIVATE();
};
Expand Down
8 changes: 4 additions & 4 deletions lib/tlUI/FloatModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,13 @@ namespace tl
_p->step = value;
}

void FloatModel::addStep()
void FloatModel::incrementStep()
{
TLRENDER_P();
setValue(p.value->get() + p.step);
}

void FloatModel::subtractStep()
void FloatModel::decrementStep()
{
TLRENDER_P();
setValue(p.value->get() - p.step);
Expand All @@ -109,13 +109,13 @@ namespace tl
_p->largeStep = value;
}

void FloatModel::addLargeStep()
void FloatModel::incrementLargeStep()
{
TLRENDER_P();
setValue(p.value->get() + p.largeStep);
}

void FloatModel::subtractLargeStep()
void FloatModel::decrementLargeStep()
{
TLRENDER_P();
setValue(p.value->get() - p.largeStep);
Expand Down
Loading

0 comments on commit d696c50

Please sign in to comment.