- 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:
parent
ba00eac7f0
commit
82b4105519
5 changed files with 380 additions and 253 deletions
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue