示例#1
0
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;
}