Как я могу нарисовать свой собственный массив строк с помощью примера таблицы Rust fltk?

#rust

#Ржавчина

Вопрос:

Пожалуйста! простите мое умение писать по-английски !…

Я подтверждаю sarray , что значение изменено с помощью моей mycallback1 процедуры. (другая функция …) однако table.draw_cell это не так !.

Как я могу нарисовать свой массив строк, а массив строк можно изменить с помощью моей функции!

 //..omitted

fn mycallback1(sarray : amp;mut [amp;str]) {
    let max = 200 * 11;
    for n in 0..max {
        sarray[n] = "Array ^^^";
    }
}


fn main() { 
    //..omitted;

    let mut sarray = [""; 200 * 11];
    let max = 200 * 11;
    for n in 0..max {
        sarray[n] = "array ^";
    }

    butStock1.set_callback(Box::new(move || mycallback1(amp;mut sarray)));

    // Called when the table is drawn then when it's redrawn due to events

    table.draw_cell(Box::new(move |ctx, row, col, x, y, w, h| match ctx {
        table::TableContext::StartPage => draw::set_font(Font::Helvetica, 14),
        table::TableContext::ColHeader => {
            let idx = col as usize;
            draw_header(amp;format!("{}", tuple[idx]), x, y, w, h);
        } // Column titles
        table::TableContext::RowHeader => draw_header(amp;format!("{}", row   1), x, y, w, h), // Row titles
        table::TableContext::Cell => {
            let idx = (row * 11   col) as usize;
            println!("Drawn {}", idx);
            draw_data( amp;format!("{} {}", sarray[idx], idx), x, y, w, h, table_c.is_selected(row, col),); // Data in cells
        }
        _ => (),
    }));
    app.run().unwrap();
}
  

Комментарии:

1. Пример скриншота нравится! imgur.com/q10vN3n

Ответ №1:

Способ работы fltk заключается в том, что он перерисовывает виджет только тогда, когда установлен флаг «повреждения», например, при нажатии кнопки щелчок устанавливает флаг повреждения в классе button, поэтому fltk перерисует его в следующем кадре.

Таблица также перерисовывается, когда она «повреждена». Изменяя значение в массиве, fltk не может знать, что ему нужно перерисовать таблицу.

Таким образом, вы можете добавить явный вызов перерисовки либо таблицы, либо всего приложения.

 butStock1.set_callback(Box::new(move || {
    mycallback1(amp;mut sarray);
    fltk::app::redraw();
}));
  

Комментарии:

1. Работает нормально !, однако значение sarray все равно не меняется !.