Re: making menuitems insensitive by app context
- From: Anca Mitrica <ancamitrica yahoo com>
- To: gtkmm-list gnome org
- Subject: Re: making menuitems insensitive by app context
- Date: Thu, 22 Sep 2005 06:51:11 -0700 (PDT)
Hello,
I can give you a sollution in this subject, using
UIManager and Gtk::ActionGroup for the menu and the
menuitems.
Still, i'm not using libgladem, but only gtkmm 2.4 and
glibmm 2.4.
Here is the code :
/*MenuBar*/
// create the action group
actionGroup = Gtk::ActionGroup::create();
// File Menu
actionGroup->add(Gtk::Action::create("Fichier","_Fichier"));
string tipCre = "Créer un nouveau fichier";
Glib::ustring tipp = Glib::locale_to_utf8(tipCre);
// File|New
actionGroup->add(Gtk::Action::create("Nouveau",Gtk::Stock::NEW,"_Nouveau",tipp),
sigc::mem_fun(*this,&MainPage::on_New_File));
//File|Open
actionGroup->add(Gtk::Action::create("Ouvrir",Gtk::Stock::OPEN,"_Ouvrir","Ouvrir
un fichier"),
sigc::mem_fun(*this,&MainPage::on_Open_File));
//File|Save
actionGroup->add(Gtk::Action::create("Sauvegarder",Gtk::Stock::SAVE,Glib::locale_to_utf8("Enregistrer"),"Enrégistrer
sur le disque"),
sigc::mem_fun(*this,&MainPage::on_Save_File));
//File|Save As
actionGroup->add(Gtk::Action::create("Save
As",Gtk::Stock::SAVE_AS,Glib::locale_to_utf8("_Enregistrer
sous..."),"Enrégistrer sur le disque"),
sigc::mem_fun(*this,&MainPage::on_Save_As_File));
//File|Close
actionGroup->add(Gtk::Action::create("Quitter",Gtk::Stock::QUIT,"_Quitter","Quitter"),
sigc::mem_fun(*this,&MainPage::on_Close_File));
//Editer
actionGroup->add(Gtk::Action::create("Editer","_Editer"));
//Editer|Undo
actionGroup->add(Gtk::Action::create("Select
All",Glib::locale_to_utf8("Tout
selectionner"),"Quitter"),
Gtk::AccelKey("<control>A"),sigc::mem_fun(*this,&MainPage::on_select_all));
//Editer|Redo
actionGroup->add(Gtk::Action::create("Find",Gtk::Stock::FIND,"Rechercher","Quitter"),
sigc::mem_fun(*this,&MainPage::on_find));
//Editer|Cut
actionGroup->add(Gtk::Action::create("Cut",Gtk::Stock::CUT,"Couper","Quitter"),
sigc::mem_fun(*this,&MainPage::on_clicked_Cut));
//Editer|Copy
actionGroup->add(Gtk::Action::create("Copy",Gtk::Stock::COPY,"Copier","Quitter"),
sigc::mem_fun(*this,&MainPage::on_clicked_Copy));
//Editer|Paste
actionGroup->add(Gtk::Action::create("Paste",Gtk::Stock::PASTE,"Coller","Quitter"),
sigc::mem_fun(*this,&MainPage::on_clicked_Paste));
//Outils
actionGroup->add(Gtk::Action::create("Outils","_Outils"));
//Outils|Boot LVC
actionGroup->add(Gtk::Action::create("Boot_LVC",Gtk::Stock::EXECUTE,"_Boot
BTL","Ouvrir fichier BTL"),
sigc::mem_fun(*this,&MainPage::on_BootLVC));
//Outils|Reset OBC
actionGroup->add(Gtk::Action::create("Reset_OBC",Gtk::Stock::EXECUTE,"_Reset
OBC","Reset OBC"),
sigc::mem_fun(*this,&MainPage::on_ResetOBC));
//Outils|Init CTX TM
actionGroup->add(Gtk::Action::create("Init_CTX_TM",Gtk::Stock::EXECUTE,"_Init
CTX TM","Init CTX TM"),
sigc::mem_fun(*this,&MainPage::on_Init_CTX_TM));
//Outils|CFG FEPROM
actionGroup->add(Gtk::Action::create("CFG_FEPROM",Gtk::Stock::EXECUTE,"GC
FE_PROM","GC FEPROM"),
sigc::mem_fun(*this,&MainPage::on_CFG_FEPROM));
//Outils|CFG FRAM
actionGroup->add(Gtk::Action::create("CFG_FRAM",Gtk::Stock::EXECUTE,"GC
F_RAM","GC FRAM"),
sigc::mem_fun(*this,&MainPage::on_CFG_FRAM));
//gestion de configuration Menu
actionGroup->add(Gtk::Action::create("Gestion de
configuration","_Gestion de configuration"));
//gestion de configuration Menu| chekin
actionGroup->add(Gtk::Action::create("Check-In",Gtk::Stock::REDO,"Check
IN","Check in"),
sigc::mem_fun(*this,&MainPage::check_in));
//gestion de configuration Menu| chekout
actionGroup->add(Gtk::Action::create("Check-Out",Gtk::Stock::UNDO,"Check
OUT","Check out"),
sigc::mem_fun(*this,&MainPage::check_out));
//About
actionGroup->add(Gtk::Action::create("?","_?"));
//About|About
actionGroup->add(Gtk::Action::create("A
Propos",Gtk::Stock::DIALOG_INFO,"_A Propos","About"),
sigc::mem_fun(*this,&MainPage::on_About));
// now create the uiManager
uiManager = Gtk::UIManager::create();
uiManager->insert_action_group(actionGroup);
// the toolbar is created from the menubar items
try{
static const Glib::ustring uiMake =
"<ui>"
" <menubar name='MenuBar'>"
" <menu action='Fichier'>"
" <menuitem action='Nouveau'/>"
" <menuitem action='Ouvrir'/>"
" <menuitem action='Sauvegarder'/>"
" <menuitem action='Save As'/>"
" <separator/>"
" <menuitem action='Quitter'/>"
" </menu>"
" <menu action='Editer'>"
" <menuitem action='Select All'/>"
" <menuitem action='Find'/>"
" <separator/>"
" <menuitem action='Cut'/>"
" <menuitem action='Copy'/>"
" <menuitem action='Paste'/>"
" </menu>"
" <menu action='Outils'>"
" <menuitem action='Boot_LVC'/>"
" <menuitem action='Reset_OBC'/>"
" <menuitem action='Init_CTX_TM'/>"
" <menuitem action='CFG_FEPROM'/>"
" <menuitem action='CFG_FRAM'/>"
" </menu>"
" <menu action='Gestion de configuration'>"
" <menuitem action='Check-In'/>"
" <menuitem action='Check-Out'/>"
" </menu>"
" <menu action='?'>"
" <menuitem action='A Propos'/>"
" </menu>"
" </menubar>"
"</ui>";
// add menubar from string
uiManager->add_ui_from_string(uiMake);
}catch(const Glib::Error &ex){
cout<<"Impossible de construire le menubar"<<endl;
}
menuWidget = uiManager->get_widget("/MenuBar");
et enable/disable stuff here :
//////////////////////////////////////////////////////
Gtk::Widget *nouveau =
uiManager->get_widget("/MenuBar/Fichier/Nouveau");
disable_Widget(nouveau);
Gtk::Widget *quitter =
uiManager->get_widget("/MenuBar/Fichier/Quitter");
enable_Widget(quitter);
////////////////////////////////////////////////////////
void enable_Widget(Gtk::Widget *widget){
widget->set_sensitive(true);
}
void disable_Widget(Gtk::Widget *widget){
widget->set_sensitive(false);
}
I hope this helps.
Anca
--- gtkmm-list-request gnome org wrote:
> Send gtkmm-list mailing list submissions to
> gtkmm-list gnome org
>
> To subscribe or unsubscribe via the World Wide Web,
> visit
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
> or, via email, send a message with subject or body
> 'help' to
> gtkmm-list-request gnome org
>
> You can reach the person managing the list at
> gtkmm-list-owner gnome org
>
> When replying, please edit your Subject line so it
> is more specific
> than "Re: Contents of gtkmm-list digest..."
>
>
> Today's Topics:
>
> 1. Xlib: unexpected async reply (Matthias
> Kaeppler)
> 2. Re: Xlib: unexpected async reply (Paul Davis)
> 3. Re: making menuitems insensitive by app
> context (Rob Benton)
> 4. Gtkmm-forge digest, Vol 1 #975 - 2 msgs
> (gtkmm-forge-request lists sourceforge net)
> 5. The string display in diferent language
> system. (Johnson Zhao)
> 6. C++ equivalents to gdk_threads_enter() and
> related?
> (Matthias Kaeppler)
> 7. Re: Xlib: unexpected async reply (Matthias
> Kaeppler)
> 8. RE: Xlib: unexpected async reply (Foster
> Gareth)
> 9. Re: Xlib: unexpected async reply (Matthias
> Kaeppler)
>
>
>
----------------------------------------------------------------------
>
> Message: 1
> Date: Wed, 21 Sep 2005 22:57:21 +0200
> From: Matthias Kaeppler <noreply finitestate org>
> Subject: Xlib: unexpected async reply
> To: gtkmm-list gnome org
> Message-ID: <dgshfi$egn$1 sea gmane org>
> Content-Type: text/plain; charset=ISO-8859-1;
> format=flowed
>
> Hi,
>
> I am displaying progress information about an
> asynchronous file transfer
> (using gnome-vfsmm) in a dialog box. However, I am
> getting very weird
> errors from the X Window System:
>
> The program 'duality.elf' received an X Window
> System error.
> This probably reflects a bug in the program.
> The error was 'BadGC (invalid GC parameter)'.
> (Details: serial 233809 error_code 13
> request_code 75 minor_code 0)
> (Note to programmers: normally, X errors are
> reported asynchronously;
> that is, you will receive the error a while
> after causing it.
> To debug your program, run it with the --sync
> command line
> option to change this behavior. You can then get
> a meaningful
> backtrace from your debugger if you break on the
> gdk_x_error()
> function.)
>
> I tried reprodcing the error with --sync, but that
> didn't work, the
> program will just lock up and no error message at
> all will show up.
>
> Sometimes I'm also getting this error, which is less
> verbose:
>
> Xlib: unexpected async reply (sequence 0x71e6)!
>
> I googled for this last error and it turned out that
> it may occur when
> the GUI library is not threading aware or not
> thread-safe. Can I enable
> threading support in gtkmm somewhere? I called
> Glib::thread_init() but
> that didn't help.
>
> Thanks in advance,
> Matthias
>
>
>
> ------------------------------
>
> Message: 2
> Date: Wed, 21 Sep 2005 17:54:11 -0400
> From: Paul Davis <paul linuxaudiosystems com>
> Subject: Re: Xlib: unexpected async reply
> To: Matthias Kaeppler <noreply finitestate org>
> Cc: gtkmm-list gnome org
> Message-ID:
> <1127339651 5681 81 camel localhost localdomain>
> Content-Type: text/plain
>
> On Wed, 2005-09-21 at 22:57 +0200, Matthias Kaeppler
> wrote:
>
> please read the GTK+ FAQ entry on threads at
> www.gtk.org
>
>
>
>
>
> ------------------------------
>
> Message: 3
> Date: Wed, 21 Sep 2005 20:29:00 -0500
> From: Rob Benton <rob benton conwaycorp net>
> Subject: Re: making menuitems insensitive by app
> context
> To: Murray Cumming <murrayc murrayc com>
> Cc: gtkmm-list gnome org
> Message-ID: <433208DC 5090001 conwaycorp net>
> Content-Type: text/plain; charset=UTF-8;
> format=flowed
>
> Murray Cumming wrote:
> > On Tue, 2005-09-20 at 19:34 -0500, Rob Benton
> wrote:
> >
> >>Bob Caryl wrote:
> >>
> >>>Rob Benton wrote:
> >>>
> >>>
> >>>>I'm looking for a way, maybe a signal, to make
> my menuitems
> >>>>sensitive/insensitive based on the state of my
> program.
> >
> >
> > This is what Gtk::Actions (see Gtk::UIManager)
> make easy.
> >
>
> So what would be the functional difference between:
>
> A. Using glade to design the menus and then using
> libglademm to get
> them at run-time with get_widget()
>
> B. Building the menus using UIManager at run-time
> and getting pointers
> to them with get_action()
>
>
> Am I overlooking something about the UIManager?
>
>
> ------------------------------
>
> Message: 4
> Date: Wed, 21 Sep 2005 20:20:45 -0700
> From: gtkmm-forge-request lists sourceforge net
> Subject: Gtkmm-forge digest, Vol 1 #975 - 2 msgs
> To: gtkmm-forge lists sourceforge net
> Message-ID:
>
<20050922032340 2E24988376 sc8-sf-spam1 sourceforge net>
> Content-Type: text/plain
>
> Send Gtkmm-forge mailing list submissions to
> gtkmm-forge lists sourceforge net
>
> To subscribe or unsubscribe via the World Wide Web,
> visit
>
>
https://lists.sourceforge.net/lists/listinfo/gtkmm-forge
> or, via email, send a message with subject or body
> 'help' to
> gtkmm-forge-request lists sourceforge net
>
> You can reach the person managing the list at
> gtkmm-forge-admin lists sourceforge net
>
> When replying, please edit your Subject line so it
> is more specific
> than "Re: Contents of Gtkmm-forge digest..."
>
>
> gtkmm-forge is the mailing list that receives gtkmm
> bug reports from bugzilla. A daily digest is sent
> to gtkmm-main, to encourage people to help fixing
> the
=== message truncated ===
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]