void ExactPreferencesTable::resize(int n_c) { assert (n_c > 0); if (n_c == nc) return; Gtk::Table::resize(2, n_c+1); if (n_c > nc) { critnames.resize(n_c); weights.resize(n_c); for (int i=nc;i<n_c;i++) { critnames[i] = new Gtk::Label(""); weights[i] = new NumberEntry(); weights[i]->signal_changed().connect(sigc::mem_fun(*this, &ExactPreferencesTable::set_changed)); attach (*critnames[i], 0, 1, i+1, i+2, Gtk::SHRINK, Gtk::SHRINK, 5, 5); attach (*weights[i], 1, 2, i+1, i+2, Gtk::SHRINK, Gtk::SHRINK, 5, 5); } show_all_children(); } else // n_c < nc { for (int i=nc-1;i>=n_c;i--) { Gtk::Label *l = critnames[i]; if (l->get_parent()) remove (*l); delete l; NumberEntry *e = weights[i]; if (e->get_parent()) remove (*e); delete e; } critnames.resize(n_c); weights.resize(n_c); } nc = n_c; }