fltk-rs / fl2rust

A fluid (fltk ui designer) file to Rust transpiler
MIT License
52 stars 3 forks source link

Group inside flex generates different from fuild. #25

Closed felixmaker closed 1 year ago

felixmaker commented 1 year ago

Here is the fl sample:

# data file for the Fltk User Interface Designer (fluid)
version 1.0400
header_name {.h}
code_name {.cxx}
class UserInterface {open
} {
  Function {make_window()} {open
  } {
    Fl_Window window {
      label Sample open
      xywh {321 208 400 300} type Double resizable visible
    } {
      Fl_Flex flex {open
        xywh {0 0 400 300} type HORIZONTAL set_size_tuples {1  0 200 }
      } {
        Fl_Group group {open
          xywh {0 0 200 300}
        } {
          Fl_Button button {
            label button1 selected
            xywh {10 10 180 25}
          }
        }
      }
    }
  }
}

It generates

// Automatically generated by fl2rust

#![allow(unused_variables)]
#![allow(unused_mut)]
#![allow(unused_imports)]
#![allow(dead_code)]
#![allow(clippy::needless_update)]

use fltk::browser::*;
use fltk::button::*;
use fltk::dialog::*;
use fltk::enums::*;
use fltk::frame::*;
use fltk::group::*;
use fltk::image::*;
use fltk::input::*;
use fltk::menu::*;
use fltk::misc::*;
use fltk::output::*;
use fltk::prelude::*;
use fltk::table::*;
use fltk::text::*;
use fltk::tree::*;
use fltk::valuator::*;
use fltk::widget::*;
use fltk::window::*;

#[derive(Debug, Clone)]
pub struct UserInterface {
    pub window: Window,
    pub flex: Flex,
    pub group: Group,
    pub button: Button,
}

impl UserInterface {
    pub fn make_window() -> Self {
    let mut window = Window::new(321, 208, 400, 300, None);
    window.set_label("Sample");
    window.end();
    window.set_type(WindowType::Double);
    window.make_resizable(true);
    window.show();
    let mut flex = Flex::new(0, 0, 400, 300, None);
    flex.end();
    flex.set_type(FlexType::Row);
    window.add(&flex);
    let mut group = Group::new(0, 0, 200, 300, None);
    group.end();
    flex.add(&group);
    let mut button = Button::new(10, 10, 180, 25, None);
    button.set_label("button1");
    group.add(&button);
    flex.set_size(&flex.child(0).unwrap(), 200);
    flex.recalc();
    Self {
        window,
        Flex
        group,
        button,
    }
    }
}

I tried if flex.add(&group); generate after group.add(&button);, the result will be the same as in fuild:

// Automatically generated by fl2rust

#![allow(unused_variables)]
#![allow(unused_mut)]
#![allow(unused_imports)]
#![allow(dead_code)]
#![allow(clippy::needless_update)]

use fltk::browser::*;
use fltk::button::*;
use fltk::dialog::*;
use fltk::enums::*;
use fltk::frame::*;
use fltk::group::*;
use fltk::image::*;
use fltk::input::*;
use fltk::menu::*;
use fltk::misc::*;
use fltk::output::*;
use fltk::prelude::*;
use fltk::table::*;
use fltk::text::*;
use fltk::tree::*;
use fltk::valuator::*;
use fltk::widget::*;
use fltk::window::*;

#[derive(Debug, Clone)]
pub struct UserInterface {
    pub window: Window,
    pub flex: Flex,
    pub group: Group,
    pub button: Button,
}

impl UserInterface {
    pub fn make_window() -> Self {
    let mut window = Window::new(321, 208, 400, 300, None);
    window.set_label("Sample");
    window.end();
    window.set_type(WindowType::Double);
    window.make_resizable(true);
    window.show();
    let mut flex = Flex::new(0, 0, 400, 300, None);
    flex.end();
    flex.set_type(FlexType::Row);
    window.add(&flex);
    let mut group = Group::new(0, 0, 200, 300, None);
    group.end();
    // flex.add(&group); // <--- This line 
    let mut button = Button::new(10, 10, 180, 25, None);
    button.set_label("button1");
    group.add(&button);
    flex.add(&group); // <--- if this line is here, then it will be the same!
    flex.set_size(&flex.child(0).unwrap(), 200);
    flex.recalc();
    Self {
        window,
        flex,
        group,
        button,
    }
    }
}
MoAlyousef commented 1 year ago

I've pushed a fix. Can you try with the main branch?

felixmaker commented 1 year ago

It works! Thank you!