Re: liststore questions




On Apr 8, 2005, at 7:38 PM, Dave M wrote:

1. I don't understand how the liststore works like this. In Tk, for
example, I would create an HList, and use something like this to add
to it:
$widget->itemCreate( entrypath, column, -text => "foo");
Is there a dummy's guide to how this works?

you can do

    $model->set ($iter,
                0, $col0_data,
                1, $col1_data,
                2, $col2_data,
                3, $col3_data);

at any time during a tree model's lifetime, and all attached views will update automatically.

you can update existing iters as well as add and remove iters at will.

there are other functions that you can use to keep the view scrolled to the bottom as you append new rows.

it would help if you describe what you want you app to do, so we can give you more specific advice.


if you're going to insert a whole lot of rows at once (more than a hundred), it can be a good idea to remove the model from the view, do the insertions, then put the model back into the view to avoid a deluge of ui updates.



2. (Sorry to keep using Tk examples; it's all I know...) Is there a
gtk2 equivalent to $mw->update to refresh the screen? There are
various widgets that will need refreshed to create a "real-time" look
as data gets displayed in the columns.

depends on what $mw->update is supposed to do.

   $toplevel->queue_draw;

will place a complete-redraw event on the queue to be handled at the next idle. you can call this on any widget if you want finer granularity.

in a lot of cases, if you have those other widgets listening to the right events, it will all just work out; most widgets will call queue_draw on themselves after a change. (using queue draw reduces flicker resulting from rapid-fire repaints.)

if your ui isn't updating because you're in a tight loop or blocking on a function call, there are other techniques.

something like this at the bottom of a loop can help:

   # flush the event queue
   Gtk2->main_iteration while Gtk2->events_pending;

if you're blocking on IO, then you want to look at Glib::IO->add_watch().

if you have a function call that blocks or an intensive algorithm, you may want to fork a child process to do that work, and monitor its progress over a pipe.


--
"Ears! They help us -- Ears! They help us hear th-- Ea--E--E--E--Ears!"
  -- A Sesame Street singing toy, with Yvonne gleefully pressing
    the button over and over and over and over and...




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]