Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > dialog that pops up when window busy

Reply
Thread Tools

dialog that pops up when window busy

 
 
Joe Van Dyk
Guest
Posts: n/a
 
      01-11-2006
Hi,

In my window, I sometimes want to prevent the user from doing anything
while an action is occuring. So I want to disable the window (using
Gtk::Widget#sensitive).

But I also want to popup a little dialog saying why the window is
being disabled (and perhaps have a little progress indicator on it).

Are there any Gtk widgets that could help me, or do I need to make a
custom dialog box for this?


 
Reply With Quote
 
 
 
 
David Vallner
Guest
Posts: n/a
 
      01-11-2006
Joe Van Dyk wrote:

>Hi,
>
>In my window, I sometimes want to prevent the user from doing anything
>while an action is occuring. So I want to disable the window (using
>Gtk::Widget#sensitive).
>
>But I also want to popup a little dialog saying why the window is
>being disabled (and perhaps have a little progress indicator on it).
>
>Are there any Gtk widgets that could help me, or do I need to make a
>custom dialog box for this?
>
>
>

A custom progress dialog should not be hard to implement. If you pop it
up as a modal dialog, you'll also avoid having to desentivize the window
by hand. You'll definitely need a separate thread for a progress dialog,
and possibly wrap whatever you're doing that requires waiting in some
sort of ProgressingTask object to get things completely done.

That said, I do have a weird hunch I saw some existing implementations
of the problem around, but can't for the heck of it figure out in what
context. Brief googling would indicate that indeed Gtk has a "progress
bar" widget, the documentation to that might provide some insights as to
what you're looking at. And embedding one in a pop-up modal progress
dialog should then be trivial.

David Vallner


 
Reply With Quote
 
 
 
 
Joe Van Dyk
Guest
Posts: n/a
 
      01-11-2006
On 1/10/06, David Vallner <(E-Mail Removed)> wrote:
> Joe Van Dyk wrote:
>
> >Hi,
> >
> >In my window, I sometimes want to prevent the user from doing anything
> >while an action is occuring. So I want to disable the window (using
> >Gtk::Widget#sensitive).
> >
> >But I also want to popup a little dialog saying why the window is
> >being disabled (and perhaps have a little progress indicator on it).
> >
> >Are there any Gtk widgets that could help me, or do I need to make a
> >custom dialog box for this?
> >
> >
> >

> A custom progress dialog should not be hard to implement. If you pop it
> up as a modal dialog, you'll also avoid having to desentivize the window
> by hand. You'll definitely need a separate thread for a progress dialog,
> and possibly wrap whatever you're doing that requires waiting in some
> sort of ProgressingTask object to get things completely done.
>
> That said, I do have a weird hunch I saw some existing implementations
> of the problem around, but can't for the heck of it figure out in what
> context. Brief googling would indicate that indeed Gtk has a "progress
> bar" widget, the documentation to that might provide some insights as to
> what you're looking at. And embedding one in a pop-up modal progress
> dialog should then be trivial.


Bleh, meant to send this to ruby-gnome2, not ruby-talk.

Anyway, here's how I solved it. If there's a cleaner way to do it,
I'd love to hear about it.

class App
def initialize
Gtk::init
@window =3D Gtk::Window.new "Joe's Crazy Application"
@window.set_default_size 300, 300

vbox =3D Gtk::VBox.new
@window << vbox

vbox << Gtk::Label.new("Stuff")
vbox << Gtk::Label.new("More Stuff")
vbox << Gtk::Button.new("Useless button")
vbox << Gtk::Button.new("Another Useless button")

lock_button =3D Gtk::Button.new "Lock window for three seconds"
vbox << lock_button

lock_button.signal_connect("clicked") do
# Window gets locked while doing stuff
@window.lock do
start_time =3D Time.now
# computationally heavy thing there
loop do
Gtk:rocess_gui_events # Any way I can get rid of this?
rand 100000000
break if Time.now - start_time >=3D 3
end
end
end

@window.signal_connect("delete-event") { Gtk::main_quit }
@window.show_all
Gtk::main
end
end

module Gtk
# Makes sure that Gtk has a change to draw stuff
def self.process_gui_events
while Gtk::events_pending?
Gtk::main_iteration
end
end
end

class Gtk::Window
# Locks the window
def lock reason =3D "hold on there buddy", &block
self.sensitive =3D false
display_locking_dialog(reason) do
block.call
end
self.sensitive =3D true
end

# Displays a locking dialog box with a
# pulsing progress bar over the window
def display_locking_dialog reason, &block
dialog =3D Gtk:ialog.new "", self, Gtk:ialog::MODAL
dialog.decorated =3D false
vbox =3D Gtk::VBox.new
reason_label =3D Gtk::Label.new reason
progress_bar =3D Gtk:rogressBar.new
thread_id =3D Gtk::timeout_add(100) { progress_bar.pulse }
vbox << reason_label << progress_bar
dialog.action_area << vbox
dialog.show_all
block.call
Gtk::timeout_remove(thread_id)
dialog.destroy
end

end

App.new if __FILE__ =3D=3D $0


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
problem in running a basic code in python 3.3.0 that includes HTML file Satabdi Mukherjee Python 1 04-04-2013 07:48 PM
wx.ToplevelWindow.SetIcon: Native MS Windows error dialog pops upin wxPython app, no exception raised, no stack trace Laszlo Nagy Python 3 09-13-2007 02:08 PM
Windows Log in dialog pops up with IE7 and FireFox Shimon Sim ASP .Net 0 07-04-2006 07:35 PM
'Busy Signals' from other then the called number being busy Bob Alan VOIP 1 09-28-2005 06:21 PM
OT:Busy Busy Doom MCSE 36 07-08-2004 04:36 PM



Advertisments