[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: liststore questions
- From: Dave M <dave nerd gmail com>
- To: muppet <scott asofyet org>
- Cc: gtk-perl-list gnome org
- Subject: Re: liststore questions
- Date: Fri, 8 Apr 2005 19:39:18 -0500
Wow, thanks for all the tips!
In case you're interested in what I'm porting, it's ClamTk, a
point-and-click virus scanner using ClamAV for linux (you can debate
the usefulness :).
freshmeat.net/projects/clamtk/
Anyway, the user picks the file or directory to be scanned, and then
it is kind of locked in a loop as it determines whether to scan,
unrar, or unzip each of the file(s) selected (scans and displays the
results one at a time), which is what, I believe, makes it freeze up
like that, without the $mw->update.
While sometimes lots of files will end up being displayed, they're
certainly not all at once - each file takes a second or so during the
scan, especially since it can end up getting unrar-ed or unzipped.
I'd like to give these tips a shot, and I'll post back with results.
Thanks again for your time!
On Apr 8, 2005 7:22 PM, muppet <scott asofyet org> wrote:
>
> 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]