The program resides in the system tray. when you right click you get the menu. A left click brings up the interface. When you click on VCI int the menu and the left click, the program should bring up the VCI interface. this interface resides in the menu widget. what I want to do is add a progressbar in the menu widget so that the user can see the downloads progress. I tried but could not get the progressbar to show up. Any ideas? The area of interest is in the interface section.
#!/usr/bin/perl -w use strict; use warnings; use threads; use threads::shared; use Glib qw/TRUE FALSE/; use Gtk2 '-init'; use Gtk2::TrayIcon; #user variables my $icon_main = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Des +ktop/Gtk2/test.png"); my $icon_nav = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desk +top/Gtk2/uvnav.png"); my $icon_vci = Gtk2::Gdk::Pixbuf->new_from_file("/home/deadpickle/Desk +top/Gtk2/vci.png"); my $time = 1200000; #global variables my $user : shared = 'uas'; my $server : shared = 'updraft.unl.edu'; my $local_waypoint : shared = '/local'; my $remote_waypoint : shared = '/remote'; my $waytemp : shared = 'waytemp'; my $wayfinal : shared = 'wayfinal'; my $file = 'default.cfg'; my $local_uaspos : shared = '/local'; my $remote_uaspos : shared = '/remote'; my $local_uas : shared = '/local'; my $remote_uas : shared = '/remote'; my $die : shared = 0; my $sftp_connect : shared = 0; my $current_controls = 0; #icon goes in box, box goes in tray my $icon = Gtk2::Image->new_from_pixbuf($icon_main); my $eventbox = Gtk2::EventBox->new; $eventbox->add($icon); my $tray = Gtk2::TrayIcon->new('Test'); $tray->add($eventbox); #threads my $thread_1 = threads->new( \&sftp); #tooltip my $tooltip = Gtk2::Tooltips->new; $tooltip->set_tip($tray, "GRRUVI v1.0"); #events and timeouts $eventbox->signal_connect('button_release_event', \&click); #show tray $tray->show_all; #end event loop Gtk2->main; #handles tray clicks sub click { #left mouse button if ($_[1]->button == 1) { &interface; } #right mouse button elsif ($_[1]->button == 3) { &menu; } return 1; } #right click menu sub menu { my $menu = Gtk2::Menu->new(); #UVNav # my $menu_UVNav = Gtk2::ImageMenuItem->new_with_label("UVNav"); # $menu_UVNav->signal_connect(activate => \&UVNav); # $menu_UVNav->set_image(Gtk2::Image->new_from_stock('gtk-refresh', + 'menu')); # $menu->add($menu_UVNav); #VCI my $menu_VCI = Gtk2::ImageMenuItem->new_with_label("VCI"); $menu_VCI->signal_connect(activate => sub { #change the icon when VCI +is clicked in the menu $eventbox->remove($icon); $icon = Gtk2::Image->new_f +rom_pixbuf($icon_vci); $eventbox->add($icon); $eventbox->reparent($tray) +; $tray->show_all; $tooltip->set_tip($tray, " +Virtual Cockpit Interface"); #Set the correct interface $current_controls = 1; } ); $menu_VCI->set_image(Gtk2::Image->new_from_stock('gtk-refresh', 'm +enu')); $menu->add($menu_VCI); #configure my $menu_pref = Gtk2::ImageMenuItem->new_with_label("Configure"); $menu_pref->signal_connect(activate => \&configure); $menu_pref->set_image(Gtk2::Image->new_from_stock('gtk-preferences +', 'menu')); $menu->add($menu_pref); #separator my $menu_sep = Gtk2::SeparatorMenuItem->new(); $menu->add($menu_sep); #Quit my $menu_quit = Gtk2::ImageMenuItem->new_with_label("Quit"); $menu_quit->signal_connect(activate => \&exit_threads); $menu_quit->set_image(Gtk2::Image->new_from_stock('gtk-quit', 'men +u')); $menu->add($menu_quit); $menu->show_all; #popup menu, the three is for right mouse button $menu->popup(undef,undef,undef,3,undef,undef); return 1; } #Program interfaces sub interface { my $interface = Gtk2::Menu->new(); #menu items for VCI if ( $current_controls == 1) { #Progress bar for number of downloads; just a countng bar #my $progressbar_vci_uasposition = Gtk2::ProgressBar->new #my $menu = Gtk2::Menu->new(my $progressbar_vci_uasposition = +Gtk2::ProgressBar->new); #interface->add($menu); #$progressbar_vci_uasposition->{timer} = Glib::Timeout->add(10 +0, \&progress_timeout, $progressbar_vci_uasposition); #separator my $menu_sep = Gtk2::SeparatorMenuItem->new(); $interface->add($menu_sep); #Add the correct controls to menu my $menu_vci_connect = Gtk2::ImageMenuItem->new_with_label("Co +nnect"); $interface->add($menu_vci_connect); my $menu_vci_stop = Gtk2::ImageMenuItem->new_with_label("Stop" +); $interface->add($menu_vci_stop); #limit the button options if ( $sftp_connect == 1) { $menu_vci_connect->set_sensitive(0); $menu_vci_stop->set_sensitive(1); } else { $menu_vci_connect->set_sensitive(1); $menu_vci_stop->set_sensitive(0); } } $interface->show_all; $interface->popup(undef,undef,undef,1,undef,undef); } #UVNav interface sub UVNav { } #VCI interface sub VCI { } #configuration dialog window sub configure { #Create the new window my $config_window = Gtk2::Window->new('toplevel'); $config_window->set_title("Configuration"); $config_window->set_position('center'); #VBox container my $table_config = Gtk2::Table->new(3, 5, FALSE); #Create Notebook my $config_notebook = Gtk2::Notebook->new; $config_notebook->set_tab_pos('top'); #the First Page; Config file select my $hbox_file = Gtk2::HBox->new(FALSE, 1); my $label_file = Gtk2::Label->new('Configuration Filename'); my $entry_file = Gtk2::Entry->new; my $button_file = Gtk2::Button->new_with_mnemonic("_Browse"); $button_file->set_size_request( 80, 32); my $align_button_file = Gtk2::Alignment->new( 0.5, 0.5, 0, 0); $align_button_file->add( $button_file); $entry_file->set_text($file); $hbox_file->pack_start($label_file, FALSE, FALSE, 1); $hbox_file->pack_start($entry_file, FALSE, FALSE, 1); $hbox_file->pack_start($align_button_file, FALSE, FALSE, 1); #the Second Page; Connection my $connect_vbox = Gtk2::VBox->new( FALSE, 1); my $label_user = Gtk2::Label->new('Username'); my $entry_user = Gtk2::Entry->new; my $label_server = Gtk2::Label->new('Server'); my $entry_server = Gtk2::Entry->new; $entry_user->set_text($user); $entry_server->set_text($server); $connect_vbox->pack_start($label_user, FALSE, FALSE, 1); $connect_vbox->pack_start($entry_user, FALSE, FALSE, 1); $connect_vbox->pack_start($label_server, FALSE, FALSE, 1); $connect_vbox->pack_start($entry_server, FALSE, FALSE, 1); #the Third Page; Waypoint my $table_waypoint = Gtk2::Table->new(4, 2, FALSE); my $label_temp_waypoint = Gtk2::Label->new('Temp Waypoint Filename +'); my $entry_temp_waypoint = Gtk2::Entry->new; my $label_final_waypoint = Gtk2::Label->new('Final Waypoint Filena +me'); my $entry_final_waypoint = Gtk2::Entry->new; my $label_local_waypoint = Gtk2::Label->new('Local Waypoint Folder +'); my $entry_local_waypoint = Gtk2::Entry->new; my $label_remote_waypoint = Gtk2::Label->new('Remote Waypoint Fold +er'); my $entry_remote_waypoint = Gtk2::Entry->new; $entry_temp_waypoint->set_text($waytemp); $entry_final_waypoint->set_text($wayfinal); $entry_local_waypoint->set_text($local_waypoint); $entry_remote_waypoint->set_text($remote_waypoint); $entry_temp_waypoint->set_editable(0); $entry_final_waypoint->set_editable(0); $table_waypoint->attach_defaults($label_temp_waypoint, 0, 1, 0, 1) +; $table_waypoint->attach_defaults($entry_temp_waypoint, 1, 2, 0, 1) +; $table_waypoint->attach_defaults($label_final_waypoint, 0, 1, 1, 2 +); $table_waypoint->attach_defaults($entry_final_waypoint, 1, 2, 1, 2 +); $table_waypoint->attach_defaults($label_local_waypoint, 0, 1, 2, 3 +); $table_waypoint->attach_defaults($entry_local_waypoint, 1, 2, 2, 3 +); $table_waypoint->attach_defaults($label_remote_waypoint, 0, 1, 3, +4); $table_waypoint->attach_defaults($entry_remote_waypoint, 1, 2, 3, +4); #the Fourth Page; UAS my $vbox_uas = Gtk2::VBox->new( FALSE, 1); my $table_uaspos = Gtk2::Table->new(4, 2, FALSE); my $frame_uaspos = Gtk2::Frame->new( 'uasposition File Transfer'); my $label_local_uaspos = Gtk2::Label->new('Local uasposition Folde +r'); my $entry_local_uaspos = Gtk2::Entry->new; my $label_remote_uaspos = Gtk2::Label->new('Remote uasposition Fol +der'); my $entry_remote_uaspos = Gtk2::Entry->new; $entry_local_uaspos->set_text($local_uaspos); $entry_remote_uaspos->set_text($remote_uaspos); $table_uaspos->attach_defaults($label_local_uaspos, 0, 1, 0, 1); $table_uaspos->attach_defaults($entry_local_uaspos, 1, 2, 0, 1); $table_uaspos->attach_defaults($label_remote_uaspos, 0, 1, 1, 2); $table_uaspos->attach_defaults($entry_remote_uaspos, 1, 2, 1, 2); $frame_uaspos->add( $table_uaspos); my $table_uas = Gtk2::Table->new(4, 2, FALSE); my $frame_uas = Gtk2::Frame->new( 'UAS Placefile Transfer'); my $label_local_uas = Gtk2::Label->new('Local uaspf.txt Folder'); my $entry_local_uas = Gtk2::Entry->new; my $label_remote_uas = Gtk2::Label->new('Remote uaspf.txt Folder') +; my $entry_remote_uas = Gtk2::Entry->new; $entry_local_uas->set_text($local_uas); $entry_remote_uas->set_text($remote_uas); $table_uas->attach_defaults($label_local_uas, 0, 1, 0, 1); $table_uas->attach_defaults($entry_local_uas, 1, 2, 0, 1); $table_uas->attach_defaults($label_remote_uas, 0, 1, 1, 2); $table_uas->attach_defaults($entry_remote_uas, 1, 2, 1, 2); $frame_uas->add( $table_uas); $vbox_uas->pack_start($frame_uaspos, FALSE, FALSE, 1); $vbox_uas->pack_start($frame_uas, FALSE, FALSE, 1); #append pages $config_notebook->append_page($hbox_file, "Configuration File"); $config_notebook->append_page($connect_vbox, "Connection"); $config_notebook->append_page($table_waypoint, "Waypoint"); $config_notebook->append_page($vbox_uas, "UAS Settings"); #add button to the main window my $button_accept = Gtk2::Button->new_with_mnemonic("_Accept"); my $button_cancel = Gtk2::Button->new_with_mnemonic("_Cancel"); #pack them into the dialog window $table_config->attach_defaults($config_notebook, 0, 5, 0, 1); $table_config->attach_defaults($button_accept, 1, 2, 2, 3); $table_config->attach_defaults($button_cancel, 3, 4, 2, 3); $config_window->add($table_config); $config_window->show_all; #Button Functions $button_cancel->signal_connect('clicked' => sub {$config_window->d +estroy}); $button_accept->signal_connect('clicked' => sub { my @settings = ( + ($user = $entry_user->get_text), ($server = $entry_server->get_text) + ,($local_waypoint = $entry_local_waypoint->get_text), ($remote_waypo +int = $entry_remote_waypoint->get_text), ($local_uaspos = $entry_loca +l_uaspos->get_text), ($remote_uaspos = $entry_remote_uaspos->get_text +), ($local_uas = $entry_local_uas->get_text), ($remote_uas = $entry_r +emote_uas->get_text)); save_default(@settings); $config_window->destr +oy}); $button_file->signal_connect('clicked' => sub {my $chooser_file = +Gtk2::FileChooserDialog->new ( 'Open Config File...', undef, 'open')} +); return 1; } #Exit threads sub exit_threads { $die = 1; $thread_1->join; Gtk2->main_quit; return FALSE; } #save to the file default.cfg when apply is clicked sub save_default { open DEFAULT, '>', 'default.cfg' or die "Could not Open file!! $!" +; for (@_) { print DEFAULT "$_\n"; } close DEFAULT; } #thread 1; SFTP connection thread sub sftp{ $|++; while(1){ if ( $die == 1 ){ goto END }; if ( $sftp_connect == 1 ){ my $seconds = 120; my %args = (host=> $server, user=>$user, timeout=>$seconds +); my $sftp = Net::SFTP::Foreign->new(%args); for(;;){ if($sftp_connect == 0){ last} if($die == 1){ goto END }; } undef $sftp; $sftp_connect = 0; }else { sleep 1 } } END: }

In reply to Gtk2: adding a progressbar to the menu by deadpickle

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.