バリュエーター
バリュエーターは、 実数値入力装置と訳されます。 その名の通り、ユーザーが浮動小数点数の値を入力を支援するために利用されます。 Fl_Valuatorクラスをベースクラスとして、様々な形態の派生クラスが提供されています。 ボタンもそうでしたが、このような多様なバリュエーターを提供するのはFLTKの一つの特徴と言えるでしょう。
リファレンスページに各種バリュエーターを実際にプログラムに配置したときのサンプル画像が掲載されています。
普段使いのGUIアプリケーションではあまり見慣れないものもありますが、初めてでも説明なしになんとなく使い方がわかる直感的なデザインになっています。
Fl_Valuator クラス
Fl_Valuatorクラスは抽象クラスではありませんが、コンストラクタがprotectedであるために、ユーザーが直接インスタンスオブジェクトを作成することはできません。 より用途が特化された派生クラスに継承されることで共通の性質を提供するためのベースクラスとして存在しています。
Fl_Counter クラス
#include <FL/Fl.H>
#include <FL/Fl_Counter.H>
#include <FL/Fl_Window.H>
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Counter demo"};
auto counter1 = new Fl_Counter{50, 30, 300, 30, "Label 1 is placed on the bottom"};
auto counter2 = new Fl_Counter{50, 100, 300, 50, "Label 2 is placed on the bottom"};
auto counter3 = new Fl_Counter{50, 190, 300, 70, "Label 3 is placed on the bottom"};
counter1->range(-1, 1);
counter1->step(0.01, 0.1);
counter2->minimum(-99);
counter2->maximum(99);
counter2->step(1, 10);
counter3->range(0, 1);
counter3->precision(5);
counter3->lstep(0.1);
counter3->value(0.5);
window->end();
window->show(argc, argv);
return Fl::run();
}
Fl_Dial クラス
#include <FL/Fl.H>
#include <FL/Fl_Dial.H>
#include <FL/Fl_Window.H>
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Dial demo"};
auto dial1 = new Fl_Dial{90, 30, 100, 100, "Right eye"};
auto dial2 = new Fl_Dial{210, 30, 100, 100, "Left eye"};
auto dial3 = new Fl_Dial{120, 180, 150, 50, "Mouse"};
dial3->type(FL_FILL_DIAL);
dial3->angles(15, 345);
window->end();
window->show(argc, argv);
return Fl::run();
}
Fl_Roller クラス
#include <FL/Fl.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Roller.H>
#include <FL/Fl_Window.H>
void roller_callback(Fl_Widget *w, void *data) {
if (auto roller = dynamic_cast<Fl_Roller *>(w)) {
if (auto output = static_cast<Fl_Output *>(data)) {
output->value(roller->value());
}
}
}
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Roller demo"};
auto roller1 = new Fl_Roller{50, 50, 20, 100, "Roller 1"};
auto roller2 = new Fl_Roller{120, 50, 30, 200, "Roller 2"};
auto roller3 = new Fl_Roller{200, 50, 150, 30, "Roller 3"};
roller3->type(FL_HORIZONTAL);
roller3->range(-123.0, 123.0);
roller3->step(123.0, 1000);
auto output1 = new Fl_Output{250, 130, 100, 30, "Value 1"};
auto output2 = new Fl_Output{250, 180, 100, 30, "Value 2"};
auto output3 = new Fl_Output{250, 230, 100, 30, "Value 3"};
roller1->callback(roller_callback, output1);
roller2->callback(roller_callback, output2);
roller3->callback(roller_callback, output3);
window->end();
window->show(argc, argv);
return Fl::run();
}
Fl_Slider クラス
#include <FL/Fl.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Slider.H>
#include <FL/Fl_Window.H>
void slider_callback(Fl_Widget *w, void *data) {
if (auto slider = dynamic_cast<Fl_Slider *>(w)) {
if (auto output = static_cast<Fl_Output *>(data)) {
output->value(slider->value());
}
}
}
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Slider demo"};
auto slider1 = new Fl_Slider{50, 50, 20, 100, "Slider 1"};
auto slider2 = new Fl_Slider{120, 50, 30, 200, "Slider 2"};
auto slider3 = new Fl_Slider{200, 50, 150, 30, "Slider 3"};
slider2->type(FL_VERT_NICE_SLIDER);
slider3->type(FL_HORIZONTAL);
slider3->range(-123.0, 123.0);
slider3->step(123.0, 1000);
auto output1 = new Fl_Output{250, 130, 100, 30, "Value 1"};
auto output2 = new Fl_Output{250, 180, 100, 30, "Value 2"};
auto output3 = new Fl_Output{250, 230, 100, 30, "Value 3"};
slider1->callback(slider_callback, output1);
slider2->callback(slider_callback, output2);
slider3->callback(slider_callback, output3);
window->end();
window->show(argc, argv);
return Fl::run();
}
Fl_Scrollbar クラス
#include <FL/Fl.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Scrollbar.H>
#include <FL/Fl_Window.H>
void scrollbar_callback(Fl_Widget *w, void *data) {
if (auto scrollbar = dynamic_cast<Fl_Scrollbar *>(w)) {
if (auto output = static_cast<Fl_Output *>(data)) {
output->value(scrollbar->value());
}
}
}
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Scrollbar demo"};
auto scrollbar1 = new Fl_Scrollbar{50, 50, 20, 100, "Scrollbar 1"};
auto scrollbar2 = new Fl_Scrollbar{120, 50, 30, 200, "Scrollbar 2"};
auto scrollbar3 = new Fl_Scrollbar{200, 50, 150, 30, "Scrollbar 3"};
scrollbar2->type(FL_VERT_NICE_SLIDER);
scrollbar2->range(-100, 100);
scrollbar3->type(FL_HORIZONTAL);
scrollbar3->range(-123.0, 123.0);
scrollbar3->step(123.0, 1000);
auto output1 = new Fl_Output{250, 130, 100, 30, "Value 1"};
auto output2 = new Fl_Output{250, 180, 100, 30, "Value 2"};
auto output3 = new Fl_Output{250, 230, 100, 30, "Value 3"};
scrollbar1->callback(scrollbar_callback, output1);
scrollbar2->callback(scrollbar_callback, output2);
scrollbar3->callback(scrollbar_callback, output3);
window->end();
window->show(argc, argv);
return Fl::run();
}
Fl_Value_Slider クラス
#include <FL/Fl.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Value_Slider.H>
#include <FL/Fl_Window.H>
void slider_callback(Fl_Widget *w, void *data) {
if (auto slider = dynamic_cast<Fl_Value_Slider *>(w)) {
if (auto output = static_cast<Fl_Output *>(data)) {
output->value(slider->value());
}
}
}
int main(int argc, char **argv) {
auto window = new Fl_Window{400, 300, "Fl_Value_Slider demo"};
auto slider1 = new Fl_Value_Slider{50, 50, 20, 100, "Value Slider 1"};
auto slider2 = new Fl_Value_Slider{120, 50, 30, 200, "Value Slider 2"};
auto slider3 = new Fl_Value_Slider{200, 50, 150, 30, "Value Slider 3"};
slider2->type(FL_VERT_NICE_SLIDER);
slider2->range(-100, 100);
slider3->type(FL_HORIZONTAL);
slider3->range(-123.0, 123.0);
slider3->step(123.0, 1000);
auto output1 = new Fl_Output{250, 130, 100, 30, "Value 1"};
auto output2 = new Fl_Output{250, 180, 100, 30, "Value 2"};
auto output3 = new Fl_Output{250, 230, 100, 30, "Value 3"};
slider1->callback(slider_callback, output1);
slider2->callback(slider_callback, output2);
slider3->callback(slider_callback, output3);
window->end();
window->show(argc, argv);
return Fl::run();
}