1use crate::enums::{Color, Font, FrameType};
2use crate::prelude::*;
3use crate::utils::FlString;
4use fltk_sys::valuator::*;
5use std::{
6 ffi::{CStr, CString},
7 os::raw,
8};
9
10#[derive(Debug)]
12pub struct Slider {
13 inner: crate::widget::WidgetTracker,
14 is_derived: bool,
15}
16
17crate::macros::widget::impl_widget_ext!(Slider, Fl_Slider);
18crate::macros::widget::impl_widget_base!(Slider, Fl_Slider);
19crate::macros::widget::impl_widget_default!(Slider, Fl_Slider);
20crate::macros::valuator::impl_valuator_ext!(Slider, Fl_Slider);
21
22impl Slider {
24 pub fn slider_size(&self) -> f32 {
26 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
27 }
28
29 pub fn set_slider_size(&mut self, v: f32) {
31 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
32 }
33
34 pub fn slider_frame(&self) -> FrameType {
36 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
37 }
38
39 pub fn set_slider_frame(&mut self, c: FrameType) {
41 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
42 }
43}
44
45#[derive(Debug)]
47pub struct NiceSlider {
48 inner: crate::widget::WidgetTracker,
49 is_derived: bool,
50}
51
52crate::macros::widget::impl_widget_ext!(NiceSlider, Fl_Nice_Slider);
53crate::macros::widget::impl_widget_base!(NiceSlider, Fl_Nice_Slider);
54crate::macros::widget::impl_widget_default!(NiceSlider, Fl_Nice_Slider);
55crate::macros::valuator::impl_valuator_ext!(NiceSlider, Fl_Nice_Slider);
56
57impl NiceSlider {
59 pub fn slider_size(&self) -> f32 {
61 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
62 }
63
64 pub fn set_slider_size(&mut self, v: f32) {
66 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
67 }
68
69 pub fn slider_frame(&self) -> FrameType {
71 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
72 }
73
74 pub fn set_slider_frame(&mut self, c: FrameType) {
76 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
77 }
78}
79
80#[repr(i32)]
82#[derive(Debug, Copy, Clone, PartialEq, Eq)]
83pub enum SliderType {
84 Vertical = 0,
86 Horizontal = 1,
88 VerticalFill = 2,
90 HorizontalFill = 3,
92 VerticalNice = 4,
94 HorizontalNice = 5,
96}
97
98crate::macros::widget::impl_widget_type!(SliderType);
99
100#[derive(Debug)]
102pub struct Dial {
103 inner: crate::widget::WidgetTracker,
104 is_derived: bool,
105}
106
107crate::macros::widget::impl_widget_ext!(Dial, Fl_Dial);
108crate::macros::widget::impl_widget_base!(Dial, Fl_Dial);
109crate::macros::widget::impl_widget_default!(Dial, Fl_Dial);
110crate::macros::valuator::impl_valuator_ext!(Dial, Fl_Dial);
111
112impl Dial {
113 pub fn angles(&self) -> (i32, i32) {
115 let angle1 = unsafe { Fl_Dial_angle1(self.inner.widget() as _) };
116 let angle2 = unsafe { Fl_Dial_angle2(self.inner.widget() as _) };
117 (i32::from(angle1), i32::from(angle2))
118 }
119
120 pub fn set_angles(&mut self, angle1: i32, angle2: i32) {
122 if angle1 <= 360 {
123 unsafe {
124 Fl_Dial_set_angle1(self.inner.widget() as _, angle1 as _);
125 }
126 }
127 if angle2 <= 360 {
128 unsafe {
129 Fl_Dial_set_angle2(self.inner.widget() as _, angle2 as _);
130 }
131 }
132 }
133}
134
135#[derive(Debug)]
137pub struct LineDial {
138 inner: crate::widget::WidgetTracker,
139 is_derived: bool,
140}
141
142crate::macros::widget::impl_widget_ext!(LineDial, Fl_Line_Dial);
143crate::macros::widget::impl_widget_base!(LineDial, Fl_Line_Dial);
144crate::macros::widget::impl_widget_default!(LineDial, Fl_Line_Dial);
145crate::macros::valuator::impl_valuator_ext!(LineDial, Fl_Line_Dial);
146
147impl LineDial {
148 pub fn angles(&self) -> (i32, i32) {
150 let angle1 = unsafe { Fl_Dial_angle1(self.inner.widget() as _) };
151 let angle2 = unsafe { Fl_Dial_angle2(self.inner.widget() as _) };
152 (i32::from(angle1), i32::from(angle2))
153 }
154
155 pub fn set_angles(&mut self, angle1: i32, angle2: i32) {
157 if angle1 <= 360 {
158 unsafe {
159 Fl_Dial_set_angle1(self.inner.widget() as _, angle1 as _);
160 }
161 }
162 if angle2 <= 360 {
163 unsafe {
164 Fl_Dial_set_angle2(self.inner.widget() as _, angle2 as _);
165 }
166 }
167 }
168}
169
170#[repr(i32)]
172#[derive(Debug, Copy, Clone, PartialEq, Eq)]
173pub enum DialType {
174 Normal = 0,
176 Line = 1,
178 Fill = 2,
180}
181
182crate::macros::widget::impl_widget_type!(DialType);
183
184#[derive(Debug)]
186pub struct Counter {
187 inner: crate::widget::WidgetTracker,
188 is_derived: bool,
189}
190
191crate::macros::widget::impl_widget_ext!(Counter, Fl_Counter);
192crate::macros::widget::impl_widget_base!(Counter, Fl_Counter);
193crate::macros::widget::impl_widget_default!(Counter, Fl_Counter);
194crate::macros::valuator::impl_valuator_ext!(Counter, Fl_Counter);
195
196#[repr(i32)]
198#[derive(Debug, Copy, Clone, PartialEq, Eq)]
199pub enum CounterType {
200 Normal = 0,
202 Simple = 1,
204}
205
206crate::macros::widget::impl_widget_type!(CounterType);
207
208#[derive(Debug)]
210pub struct Scrollbar {
211 inner: crate::widget::WidgetTracker,
212 is_derived: bool,
213}
214
215crate::macros::widget::impl_widget_ext!(Scrollbar, Fl_Scrollbar);
216crate::macros::widget::impl_widget_base!(Scrollbar, Fl_Scrollbar);
217crate::macros::widget::impl_widget_default!(Scrollbar, Fl_Scrollbar);
218crate::macros::valuator::impl_valuator_ext!(Scrollbar, Fl_Scrollbar);
219
220impl Scrollbar {
221 pub fn slider_size(&self) -> f32 {
223 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
224 }
225
226 pub fn set_slider_size(&mut self, v: f32) {
228 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
229 }
230
231 pub fn slider_frame(&self) -> FrameType {
233 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
234 }
235
236 pub fn set_slider_frame(&mut self, c: FrameType) {
238 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
239 }
240
241 pub fn linesize(&self) -> i32 {
243 unsafe { Fl_Scrollbar_linesize(self.inner.widget() as _) }
244 }
245
246 pub fn set_linesize(&mut self, sz: i32) {
248 unsafe { Fl_Scrollbar_set_linesize(self.inner.widget() as _, sz) }
249 }
250
251 pub fn scroll_value(
262 &mut self,
263 pos: i32,
264 win_size: i32,
265 first_line: i32,
266 total_lines: i32,
267 ) -> i32 {
268 unsafe {
269 Fl_Scrollbar_scroll_value(
270 self.inner.widget() as _,
271 pos,
272 win_size,
273 first_line,
274 total_lines,
275 )
276 }
277 }
278}
279
280#[repr(i32)]
282#[derive(Debug, Copy, Clone, PartialEq, Eq)]
283pub enum ScrollbarType {
284 Vertical = 0,
286 Horizontal = 1,
288 VerticalFill = 2,
290 HorizontalFill = 3,
292 VerticalNice = 4,
294 HorizontalNice = 5,
296}
297
298crate::macros::widget::impl_widget_type!(ScrollbarType);
299
300#[derive(Debug)]
302pub struct Roller {
303 inner: crate::widget::WidgetTracker,
304 is_derived: bool,
305}
306
307crate::macros::widget::impl_widget_ext!(Roller, Fl_Roller);
308crate::macros::widget::impl_widget_base!(Roller, Fl_Roller);
309crate::macros::widget::impl_widget_default!(Roller, Fl_Roller);
310crate::macros::valuator::impl_valuator_ext!(Roller, Fl_Roller);
311
312#[derive(Debug)]
314pub struct ValueSlider {
315 inner: crate::widget::WidgetTracker,
316 is_derived: bool,
317}
318
319crate::macros::widget::impl_widget_ext!(ValueSlider, Fl_Value_Slider);
320crate::macros::widget::impl_widget_base!(ValueSlider, Fl_Value_Slider);
321crate::macros::widget::impl_widget_default!(ValueSlider, Fl_Value_Slider);
322crate::macros::valuator::impl_valuator_ext!(ValueSlider, Fl_Value_Slider);
323
324impl ValueSlider {
325 pub fn text_font(&self) -> Font {
327 unsafe { std::mem::transmute(Fl_Value_Slider_text_font(self.inner.widget() as _)) }
328 }
329
330 pub fn set_text_font(&mut self, f: Font) {
332 unsafe { Fl_Value_Slider_set_text_font(self.inner.widget() as _, f.bits()) }
333 }
334
335 pub fn text_size(&self) -> i32 {
337 unsafe { Fl_Value_Slider_text_size(self.inner.widget() as _) }
338 }
339
340 pub fn set_text_size(&mut self, s: i32) {
342 unsafe { Fl_Value_Slider_set_text_size(self.inner.widget() as _, s) }
343 }
344
345 pub fn text_color(&self) -> Color {
347 unsafe { std::mem::transmute(Fl_Value_Slider_text_color(self.inner.widget() as _)) }
348 }
349
350 pub fn set_text_color(&mut self, color: Color) {
352 unsafe { Fl_Value_Slider_set_text_color(self.inner.widget() as _, color.bits()) }
353 }
354
355 pub fn slider_size(&self) -> f32 {
357 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
358 }
359
360 pub fn set_slider_size(&mut self, v: f32) {
362 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
363 }
364
365 pub fn slider_frame(&self) -> FrameType {
367 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
368 }
369
370 pub fn set_slider_frame(&mut self, c: FrameType) {
372 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
373 }
374
375 pub fn scroll_value(
386 &mut self,
387 pos: i32,
388 win_size: i32,
389 first_line: i32,
390 total_lines: i32,
391 ) -> i32 {
392 unsafe {
393 Fl_Slider_scroll_value(
394 self.inner.widget() as _,
395 pos,
396 win_size,
397 first_line,
398 total_lines,
399 )
400 }
401 }
402}
403
404#[derive(Debug)]
406pub struct Adjuster {
407 inner: crate::widget::WidgetTracker,
408 is_derived: bool,
409}
410
411crate::macros::widget::impl_widget_ext!(Adjuster, Fl_Adjuster);
412crate::macros::widget::impl_widget_base!(Adjuster, Fl_Adjuster);
413crate::macros::widget::impl_widget_default!(Adjuster, Fl_Adjuster);
414crate::macros::valuator::impl_valuator_ext!(Adjuster, Fl_Adjuster);
415
416#[derive(Debug)]
419pub struct ValueInput {
420 inner: crate::widget::WidgetTracker,
421 is_derived: bool,
422}
423
424crate::macros::widget::impl_widget_ext!(ValueInput, Fl_Value_Input);
425crate::macros::widget::impl_widget_base!(ValueInput, Fl_Value_Input);
426crate::macros::widget::impl_widget_default!(ValueInput, Fl_Value_Input);
427crate::macros::valuator::impl_valuator_ext!(ValueInput, Fl_Value_Input);
428
429impl ValueInput {
430 pub fn text_font(&self) -> Font {
432 unsafe { std::mem::transmute(Fl_Value_Input_text_font(self.inner.widget() as _)) }
433 }
434
435 pub fn set_text_font(&mut self, f: Font) {
437 unsafe { Fl_Value_Input_set_text_font(self.inner.widget() as _, f.bits()) }
438 }
439
440 pub fn text_size(&self) -> i32 {
442 unsafe { Fl_Value_Input_text_size(self.inner.widget() as _) }
443 }
444
445 pub fn set_text_size(&mut self, s: i32) {
447 unsafe { Fl_Value_Input_set_text_size(self.inner.widget() as _, s) }
448 }
449
450 pub fn text_color(&self) -> Color {
452 unsafe { std::mem::transmute(Fl_Value_Input_text_color(self.inner.widget() as _)) }
453 }
454
455 pub fn set_text_color(&mut self, color: Color) {
457 unsafe { Fl_Value_Input_set_text_color(self.inner.widget() as _, color.bits()) }
458 }
459
460 pub fn soft(&self) -> bool {
463 unsafe { Fl_Value_Input_soft(self.inner.widget() as _) != 0 }
464 }
465
466 pub fn set_soft(&mut self, val: bool) {
468 unsafe { Fl_Value_Input_set_soft(self.inner.widget() as _, raw::c_char::from(val)) }
469 }
470}
471
472#[derive(Debug)]
474pub struct ValueOutput {
475 inner: crate::widget::WidgetTracker,
476 is_derived: bool,
477}
478
479crate::macros::widget::impl_widget_ext!(ValueOutput, Fl_Value_Output);
480crate::macros::widget::impl_widget_base!(ValueOutput, Fl_Value_Output);
481crate::macros::widget::impl_widget_default!(ValueOutput, Fl_Value_Output);
482crate::macros::valuator::impl_valuator_ext!(ValueOutput, Fl_Value_Output);
483
484impl ValueOutput {
485 pub fn text_font(&self) -> Font {
487 unsafe { std::mem::transmute(Fl_Value_Output_text_font(self.inner.widget() as _)) }
488 }
489
490 pub fn set_text_font(&mut self, f: Font) {
492 unsafe { Fl_Value_Output_set_text_font(self.inner.widget() as _, f.bits()) }
493 }
494
495 pub fn text_size(&self) -> i32 {
497 unsafe { Fl_Value_Output_text_size(self.inner.widget() as _) }
498 }
499
500 pub fn set_text_size(&mut self, s: i32) {
502 unsafe { Fl_Value_Output_set_text_size(self.inner.widget() as _, s) }
503 }
504
505 pub fn text_color(&self) -> Color {
507 unsafe { std::mem::transmute(Fl_Value_Output_text_color(self.inner.widget() as _)) }
508 }
509
510 pub fn set_text_color(&mut self, color: Color) {
512 unsafe { Fl_Value_Output_set_text_color(self.inner.widget() as _, color.bits()) }
513 }
514}
515
516#[derive(Debug)]
518pub struct FillSlider {
519 inner: crate::widget::WidgetTracker,
520 is_derived: bool,
521}
522
523crate::macros::widget::impl_widget_ext!(FillSlider, Fl_Fill_Slider);
524crate::macros::widget::impl_widget_base!(FillSlider, Fl_Fill_Slider);
525crate::macros::widget::impl_widget_default!(FillSlider, Fl_Fill_Slider);
526crate::macros::valuator::impl_valuator_ext!(FillSlider, Fl_Fill_Slider);
527
528#[derive(Debug)]
530pub struct FillDial {
531 inner: crate::widget::WidgetTracker,
532 is_derived: bool,
533}
534
535crate::macros::widget::impl_widget_ext!(FillDial, Fl_Fill_Dial);
536crate::macros::widget::impl_widget_base!(FillDial, Fl_Fill_Dial);
537crate::macros::widget::impl_widget_default!(FillDial, Fl_Fill_Dial);
538crate::macros::valuator::impl_valuator_ext!(FillDial, Fl_Fill_Dial);
539
540impl FillDial {
541 pub fn angles(&self) -> (i32, i32) {
543 let angle1 = unsafe { Fl_Dial_angle1(self.inner.widget() as _) };
544 let angle2 = unsafe { Fl_Dial_angle2(self.inner.widget() as _) };
545 (i32::from(angle1), i32::from(angle2))
546 }
547
548 pub fn set_angles(&mut self, angle1: i32, angle2: i32) {
550 if angle1 <= 360 {
551 unsafe {
552 Fl_Dial_set_angle1(self.inner.widget() as _, angle1 as _);
553 }
554 }
555 if angle2 <= 360 {
556 unsafe {
557 Fl_Dial_set_angle2(self.inner.widget() as _, angle2 as _);
558 }
559 }
560 }
561}
562
563#[derive(Debug)]
565pub struct HorSlider {
566 inner: crate::widget::WidgetTracker,
567 is_derived: bool,
568}
569
570crate::macros::widget::impl_widget_ext!(HorSlider, Fl_Hor_Slider);
571crate::macros::widget::impl_widget_base!(HorSlider, Fl_Hor_Slider);
572crate::macros::widget::impl_widget_default!(HorSlider, Fl_Hor_Slider);
573crate::macros::valuator::impl_valuator_ext!(HorSlider, Fl_Hor_Slider);
574
575impl HorSlider {
577 pub fn slider_size(&self) -> f32 {
579 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
580 }
581
582 pub fn set_slider_size(&mut self, v: f32) {
584 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
585 }
586
587 pub fn slider_frame(&self) -> FrameType {
589 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
590 }
591
592 pub fn set_slider_frame(&mut self, c: FrameType) {
594 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
595 }
596}
597
598#[derive(Debug)]
600pub struct HorFillSlider {
601 inner: crate::widget::WidgetTracker,
602 is_derived: bool,
603}
604
605crate::macros::widget::impl_widget_ext!(HorFillSlider, Fl_Hor_Fill_Slider);
606crate::macros::widget::impl_widget_base!(HorFillSlider, Fl_Hor_Fill_Slider);
607crate::macros::widget::impl_widget_default!(HorFillSlider, Fl_Hor_Fill_Slider);
608crate::macros::valuator::impl_valuator_ext!(HorFillSlider, Fl_Hor_Fill_Slider);
609
610impl HorFillSlider {
612 pub fn slider_size(&self) -> f32 {
614 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
615 }
616
617 pub fn set_slider_size(&mut self, v: f32) {
619 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
620 }
621
622 pub fn slider_frame(&self) -> FrameType {
624 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
625 }
626
627 pub fn set_slider_frame(&mut self, c: FrameType) {
629 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
630 }
631}
632
633#[derive(Debug)]
635pub struct HorNiceSlider {
636 inner: crate::widget::WidgetTracker,
637 is_derived: bool,
638}
639
640crate::macros::widget::impl_widget_ext!(HorNiceSlider, Fl_Hor_Nice_Slider);
641crate::macros::widget::impl_widget_base!(HorNiceSlider, Fl_Hor_Nice_Slider);
642crate::macros::widget::impl_widget_default!(HorNiceSlider, Fl_Hor_Nice_Slider);
643crate::macros::valuator::impl_valuator_ext!(HorNiceSlider, Fl_Hor_Nice_Slider);
644
645impl HorNiceSlider {
647 pub fn slider_size(&self) -> f32 {
649 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
650 }
651
652 pub fn set_slider_size(&mut self, v: f32) {
654 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
655 }
656
657 pub fn slider_frame(&self) -> FrameType {
659 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
660 }
661
662 pub fn set_slider_frame(&mut self, c: FrameType) {
664 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
665 }
666}
667
668#[derive(Debug)]
670pub struct HorValueSlider {
671 inner: crate::widget::WidgetTracker,
672 is_derived: bool,
673}
674
675crate::macros::widget::impl_widget_ext!(HorValueSlider, Fl_Hor_Value_Slider);
676crate::macros::widget::impl_widget_base!(HorValueSlider, Fl_Hor_Value_Slider);
677crate::macros::widget::impl_widget_default!(HorValueSlider, Fl_Hor_Value_Slider);
678crate::macros::valuator::impl_valuator_ext!(HorValueSlider, Fl_Hor_Value_Slider);
679
680impl HorValueSlider {
681 pub fn text_font(&self) -> Font {
683 unsafe { std::mem::transmute(Fl_Hor_Value_Slider_text_font(self.inner.widget() as _)) }
684 }
685
686 pub fn set_text_font(&mut self, f: Font) {
688 unsafe { Fl_Hor_Value_Slider_set_text_font(self.inner.widget() as _, f.bits()) }
689 }
690
691 pub fn text_size(&self) -> i32 {
693 unsafe { Fl_Hor_Value_Slider_text_size(self.inner.widget() as _) }
694 }
695
696 pub fn set_text_size(&mut self, s: i32) {
698 unsafe { Fl_Hor_Value_Slider_set_text_size(self.inner.widget() as _, s) }
699 }
700
701 pub fn text_color(&self) -> Color {
703 unsafe { std::mem::transmute(Fl_Hor_Value_Slider_text_color(self.inner.widget() as _)) }
704 }
705
706 pub fn set_text_color(&mut self, color: Color) {
708 unsafe { Fl_Hor_Value_Slider_set_text_color(self.inner.widget() as _, color.bits()) }
709 }
710
711 pub fn slider_size(&self) -> f32 {
713 unsafe { Fl_Slider_slider_size(self.inner.widget() as _) }
714 }
715
716 pub fn set_slider_size(&mut self, v: f32) {
718 unsafe { Fl_Slider_set_slider_size(self.inner.widget() as _, v) }
719 }
720
721 pub fn slider_frame(&self) -> FrameType {
723 unsafe { FrameType::from_i32(Fl_Slider_slider_box(self.inner.widget() as _)) }
724 }
725
726 pub fn set_slider_frame(&mut self, c: FrameType) {
728 unsafe { Fl_Slider_set_slider_box(self.inner.widget() as _, c.as_i32()) }
729 }
730}