Update project list on project rename

This commit is contained in:
Nedko Arnaudov 2008-07-03 23:50:32 +03:00
parent 3c2dac1491
commit 9bb7fd8ba4
6 changed files with 73 additions and 3 deletions

View File

@ -173,7 +173,7 @@ lash_proxy::dbus_message_hook(
}
me->info_msg((string)"Project '" + project_name + "' renamed to '" + new_project_name + "'.");
//me->_app->on_project_renamed(project_name, new_project_name);
me->_session_ptr->project_rename(project_name, new_project_name);
return DBUS_HANDLER_RESULT_HANDLED;
}

View File

@ -49,6 +49,13 @@ project::get_name(
name = _impl_ptr->name;
}
void
project::set_name(
const string& name)
{
_impl_ptr->name = name;
}
void
project::get_modification_time(
time_t& modification_time)

View File

@ -43,6 +43,10 @@ public:
get_comment(
string& comment);
void
set_name(
const string& name);
private:
project_impl * _impl_ptr;
};

View File

@ -30,6 +30,7 @@
struct project_list_column_record : public Gtk::TreeModel::ColumnRecord
{
Gtk::TreeModelColumn<Glib::ustring> name;
Gtk::TreeModelColumn<shared_ptr<project> > project_ptr;
};
struct project_list_impl : public sigc::trackable
@ -46,6 +47,7 @@ struct project_list_impl : public sigc::trackable
void project_added(shared_ptr<project> project_ptr);
void project_closed(shared_ptr<project> project_ptr);
void project_renamed(shared_ptr<project> project_ptr);
bool on_button_press_event(GdkEventButton * event);
@ -64,6 +66,7 @@ project_list::project_list(
_impl_ptr = new project_list_impl(xml, app);
session_ptr->_signal_project_added.connect(mem_fun(_impl_ptr, &project_list_impl::project_added));
session_ptr->_signal_project_closed.connect(mem_fun(_impl_ptr, &project_list_impl::project_closed));
session_ptr->_signal_project_renamed.connect(mem_fun(_impl_ptr, &project_list_impl::project_renamed));
}
project_list::~project_list()
@ -79,6 +82,7 @@ project_list_impl::project_list_impl(
_widget.init(xml, "projects_list");
_columns.add(_columns.name);
_columns.add(_columns.project_ptr);
_model = Gtk::ListStore::create(_columns);
_widget->set_model(_model);
@ -195,12 +199,38 @@ project_list_impl::project_added(
row = *(_model->append());
row[_columns.name] = project_name;
row[_columns.project_ptr] = project_ptr;
}
void
project_list_impl::project_closed(
shared_ptr<project> project_ptr)
{
shared_ptr<project> temp_project_ptr;
Gtk::TreeModel::Children children = _model->children();
Gtk::TreeModel::Children::iterator iter = children.begin();
while(iter != children.end())
{
Gtk::TreeModel::Row row = *iter;
temp_project_ptr = row[_columns.project_ptr];
if (temp_project_ptr == project_ptr)
{
_model->erase(iter);
return;
}
iter++;
}
}
void
project_list_impl::project_renamed(
shared_ptr<project> project_ptr)
{
shared_ptr<project> temp_project_ptr;
string project_name;
Gtk::TreeModel::Children children = _model->children();
Gtk::TreeModel::Children::iterator iter = children.begin();
@ -211,9 +241,11 @@ project_list_impl::project_closed(
{
Gtk::TreeModel::Row row = *iter;
if (row[_columns.name] == project_name)
temp_project_ptr = row[_columns.project_ptr];
if (temp_project_ptr == project_ptr)
{
_model->erase(iter);
row[_columns.name] = project_name;
return;
}

View File

@ -66,3 +66,24 @@ session::project_close(
}
}
}
void
session::project_rename(
const string& old_name,
const string& new_name)
{
shared_ptr<project> project_ptr;
string temp_name;
for (list<shared_ptr<project> >::iterator iter = _impl_ptr->projects.begin(); iter != _impl_ptr->projects.end(); iter++)
{
project_ptr = *iter;
project_ptr->get_name(temp_name);
if (temp_name == old_name)
{
project_ptr->set_name(new_name);
_signal_project_renamed.emit(project_ptr);
}
}
}

View File

@ -36,8 +36,14 @@ public:
project_close(
const string& project_name);
void
project_rename(
const string& old_name,
const string& new_name);
sigc::signal<void, shared_ptr<project> > _signal_project_added;
sigc::signal<void, shared_ptr<project> > _signal_project_closed;
sigc::signal<void, shared_ptr<project> > _signal_project_renamed;
private:
session_impl * _impl_ptr;