- Now resources can be removed

- Little patch to ConcreteHistory to make it remove emptied requests after a resource removal. I hope this will not break anything...

git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@926 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
elvez 2006-08-21 22:01:31 +00:00
parent ba00eac7f0
commit 82b4105519
5 changed files with 380 additions and 253 deletions

View file

@ -174,7 +174,7 @@ ConcreteHistory::remove(resource_key_t resource_key)
for (Threads::iterator it2 = threads.begin(); it2 != threads.end(); it2++)
{
Requests& reqs = (*it2)->get_dynamic_requests();
for (Requests::iterator it3 = reqs.begin(); it3 != reqs.end(); it3++)
for (Requests::iterator it3 = reqs.begin(); it3 != reqs.end();)
{
SubRequests& subr = (*it3)->get_dynamic_subrequests();
SubRequests::iterator it4 = subr.begin();
@ -186,6 +186,12 @@ ConcreteHistory::remove(resource_key_t resource_key)
}
else
it4++;
// erase empty requests
if(subr.size() == 0)
it3 = reqs.erase(it3);
else
++it3;
}
}
} //~ end monstrous construct, "The Thing That Should Not Be"

View file

@ -68,17 +68,18 @@ ResourcesWidget::~ResourcesWidget()
Simulation::get_instance().get_history().detach(*this);
}
sgpem::Resource*
ResourcesWidget::get_selected_resource()
bool
ResourcesWidget::get_selected_key(unsigned int& selection)
{
TreeModel::iterator sel = get_selection()->get_selected();
TreeModel::iterator it = get_selection()->get_selected();
if(!sel)
return NULL;
const void* p_handle = (*sel)[_handles_column];
return reinterpret_cast<Resource*>(const_cast<void*>(p_handle));
if(it)
{
selection = (*it)[_key_column];
return true;
}
else
return false;
}
bool
@ -93,14 +94,24 @@ ResourcesWidget::on_button_press_event(GdkEventButton* event)
action_group->add( Gtk::Action::create("AddResource", "Add Resource"),
sigc::mem_fun(*this, &ResourcesWidget::_on_add_resource) );
action_group->add( Gtk::Action::create("RemoveResource", "Remove Resource"),
sigc::mem_fun(*this, &ResourcesWidget::_on_remove_resource) );
RefPtr<UIManager> UIManager = Gtk::UIManager::create();
UIManager->insert_action_group(action_group);
unsigned int selection;
Glib::ustring ui_info =
"<ui>"
" <popup name='PopupMenu'>"
" <menuitem action='AddResource'/>"
" </popup>"
" <menuitem action='AddResource'/>";
if(get_selected_key(selection))
ui_info +=
" <separator/>"
" <menuitem action='RemoveResource'/>";
ui_info +=
" </popup>"
"</ui>";
UIManager->add_ui_from_string(ui_info);
@ -160,3 +171,10 @@ ResourcesWidget::_on_add_resource()
_add_resource_dialog->hide();
}
void
ResourcesWidget::_on_remove_resource()
{
unsigned int selection;
if(get_selected_key(selection))
Simulation::get_instance().get_history().remove(selection);
}

View file

@ -51,9 +51,10 @@ namespace sgpem
bool on_button_press_event(GdkEventButton* event);
private:
Resource* get_selected_resource();
bool get_selected_key(unsigned int& selection);
void _on_add_resource();
void _on_remove_resource();
Glib::RefPtr<Gtk::ListStore> _model;
Gtk::TreeModelColumnRecord _columns;