Я пытаюсь создать виджет календаря в Vala с GTK.У меня есть класс, конструктор которого заполняет Gtk.Grid 42 метками, которые будут днями.Но при вызове метода fill_grid_days (), который отвечает за итерацию списка меток (скрывает или показывает их в соответствии с максимумом дней), при запуске в первый раз не скрывает метки, пока во внешнем классе я не использую тот же методfill_grid_days () нажатием кнопки.
Класс CalendarView - конструктор
public CalendarView () {
this.orientation = Gtk.Orientation.VERTICAL;
int max_labels = 42;
var days_header = new DaysRow();
/*
* Grid that contains any number of days
* day_of_week is the start day(m,t,w,t,f,s,s) of month
* end_day is the final number day
*/
day_grid = new Grid ();
var col = 0;
var row = 0;
for (int i = 0; i < max_labels; i++) {
var label_day = new Label("");
label_day.get_style_context ().add_class ("label-day");
label_day.expand = true;
label_day.halign = Align.CENTER;
label_day.valign = Align.START;
day_grid.attach (label_day, col, row, 1, 1);
col++;
if (col != 0 && col % 7 == 0) {
row++;
col = 0;
}
labels.append(label_day);
}
this.pack_start (days_header);
this.pack_end (day_grid);
}
Класс CalendarView - метод fill_grid_days
public void fill_grid_days (int start_day, int max_day, int current_day) {
/*
* All days in interation to add a new Label
*/
var day_number = 1;
for (int i = 0; i < 42; i++) {
Label label = labels.nth_data (i);
label.get_style_context ().remove_class ("label-today");
label.visible = true;
/*
* max_day + start_day, it is necessary to
* find the correct label in list
*/
if (i < start_day || i >= max_day + start_day) {
print ("\nMe pongo invisible");
label.visible = false;
} else {
/*
* current_day + start_day, it is necessary to
* find the correct label in list
*/
if ( current_day != -1 && (i+1) == current_day + start_day ) {
label.get_style_context ().add_class ("label-today");
}
//label.set_label (day_number.to_string());
label.label = day_number.to_string();
day_number++;
}
}
}
Полный код https://github.com/calo001/luna/blob/master/src/views/CalendarView.vala