Paul Davis wrote:
> On 3/20/07, Jef Driesen <[EMAIL PROTECTED]> wrote:
>> I am writing my first gtkmm application (actually my first GUI
>> application). To get familiar with the toolkit (both gtk and gtkmm), I
>> studied the code of some existing applications. And in one of those
>> applications I found a construct that I would like to use in my own
>> application, but I don't know how to port the gtk code to gtkmm.
>>
>> The main application contains a treeview and a secondary dialog is used
>> to edit the treeview entries. But if you try to edit an entry that is
>> already "open", the existing dialog is activated instead of creating a
>> new one (see code snippet below). How can I do this in C++?
>>
>> And how do I automatically destroy the dialog after clicking the (close)
>> button?
>>
>> [code removed]
>>
> 
> I think I'd make a column in your TreeModelColumnRecord a smart
> pointer to the dialog.
> 
> I'm not certain what I'd do to delete the window when its closed.  You
> could connect to the dialog's signal_hide, bind the smart pointer to
> the call back and search the tree view for the corresponding row, but
> that seems rather inefficient. I suppose you could store weak pointers
> in the tree view, the shared ptr's in a std::set and then your search
> for the dialog to delete would be a bit faster.
> 
> Generally, I would only allow editing of a single row at a time to
> prevent this but I could imagine there are times when having the
> multiple row selection would be a good thing.

Storing a smart pointer in the treeview model is not the solution in my 
case, because the treeview is not the only widget that can make the 
dialog appear. That's why I liked the approach with the hashtable from 
the code snippet. Because it doesn't matter at what place the function 
is called, only one dialog will appear for the same object.

I was not planning to allow multiple row selections in the treeview. But 
it is possible to edit more than one entry simultaneously (e.g activate 
an item in the treeview, move to the next and activate that one also). 
The treeview doesn't have to be notified directly by the dialog about 
changes. I wanted to make the database engine (sqlite) responsible for 
doing that.


_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to