/*
* grn_menu.c: menus data, menu manipulating functions
*
* $Id: grn_menu.c,v 1.45 2000/07/19 06:26:21 sc Exp $
*/
/* Copyright (C) 1999-2000 Sergey Chernikov (sc@ivvs.ul.ru)
*
* Authors: Sergey Chernikov <sc@ivvs.ul.ru>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "grn_consts.h"
#include "grn_menu.h"
#include "grn_commands.h"
#include "grn_vars.h"
#include "grn_config.h"
#include "grn_util.h"
#include "grn_prefs.h"
#include "grn_nglist.h"
#include "grn_threadlist.h"
#include "grn_msgwin.h"
#include "grn_msgpost.h"
#include "grn_mhdrwin.h"
#include "grn_msgsend.h"
#include "grn_find.h"
#include "grn_mime.h"
#include "grn_perl.h"
#include "grn_attach.h"
#include "../pixmaps/ball-green.xpm"
#include "../pixmaps/ball-ltred.xpm"
static GnomeUIInfo grn_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Show newsgroups"), N_("Show the list of available newsgroups"), evt_grouplist, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Message headers.."), N_("Show all message headers"), evt_mhwin_show, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
GNOMEUIINFO_MENU_EXIT_ITEM(evt_app_quit, NULL),
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo ng_navigation_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Prev unread group"), N_("Go to previous group with unread messages"), evt_group_urprev, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Next unread group"), N_("Go to next group with unread messages"), evt_group_urnext, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Mark unread"), N_("Mark currently selected group unread"), evt_group_unread, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FIRST, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Mark read"), N_("Mark currently selected group read (catchup)"), evt_group_catchup, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_LAST, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo ng_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Open"), N_("Open currently selected newsgroup"), ng_list_open_group, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_OPEN, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Subscribe"), N_("Subscribe to the current group"), evt_group_subscribe, NULL, NULL,
GNOME_APP_PIXMAP_DATA, ball_green_xpm, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Unsubscribe"), N_("Unsubscribe from the current group"), evt_group_unsubscribe, NULL, NULL,
GNOME_APP_PIXMAP_DATA, ball_ltred_xpm, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_SUBTREE, N_("Navigation"), NULL, ng_navigation_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("ReRead list"), N_("Re-read the current newsgroups list"), evt_groups_refresh, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo msg_reply_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("To group"), NULL, evt_post_followup, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Via mail"), NULL, evt_send_reply, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
/* { GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("With options..."), NULL, evt_not_impl, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },*/
GNOMEUIINFO_END
};
static GnomeUIInfo msg_forward_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("To group"), NULL, evt_post_forward, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Via mail"), NULL, evt_send_forward, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
/* { GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("With options..."), NULL, evt_not_impl, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },*/
GNOMEUIINFO_END
};
static GnomeUIInfo mw_fonts_group[] =
{
{ GNOME_APP_UI_ITEM, N_("Proportional font"), N_("Variable width font"), evt_mw_prop_font, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Monospaced font"), N_("Single width font"), evt_mw_monosp_font, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo msg_view_menu[] =
{
GNOMEUIINFO_RADIOLIST(mw_fonts_group),
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("MIME"), N_("View MIME structure"), evt_mime_view, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo message_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Open"), N_("View current message"), evt_tl_open_article, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_OPEN, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Post new"), N_("Compose and post message to current newsgroup"), evt_post_new, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_NEW, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Send new"), N_("Compose and send message via SMTP"), evt_send_new, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_NEW, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Reply"), NULL, msg_reply_menu, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_RPL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Forward"), NULL, msg_forward_menu, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_FWD, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_SUBTREE, N_("View"), N_("Some message viewing options"), msg_view_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
// { GNOME_APP_UI_SUBTREE, N_("File"), NULL, msg_file_menu, NULL, NULL,
// GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo tl_navigation_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Expand current thread"), N_("Expand current thread"), evt_expand_cur_thread, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Expand all threads"), N_("Expand all threads"), evt_expand_all_threads, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Collapse current thread"), N_("Collapse current thread"), evt_collapse_cur_thread, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Collapse all threads"), N_("Collapse all threads"), evt_collapse_all_threads, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Prev unread message"), N_("Go to previous unread message"), evt_tl_urprev_msg, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Prev unread thread"), N_("Go to previous unread thread"), evt_tl_urprev_thread, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Next unread message"), N_("Go to next unread message"), evt_tl_urnext_msg, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Next unread thread"), N_("Go to next unread thread"), evt_tl_urnext_thread, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Mark message unread"), N_("Mark current message as unread"), evt_tl_mark_unread, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FIRST, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Mark thread unread"), N_("Mark current thread as unread"), evt_tl_mark_thread_unread, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FIRST, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Mark message read"), N_("Mark current message as read"), evt_tl_mark_read, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_LAST, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Mark thread read"), N_("Mark current thread as read"), evt_tl_mark_thread_read, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_LAST, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo threadlist_menu[] =
{
{ GNOME_APP_UI_SUBTREE, N_("Navigation"), NULL, tl_navigation_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Search..."), N_("Search a message in current group"), evt_find_dlg, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SEARCH, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Search again"), NULL, evt_find_again, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Back"), N_("Return to newsgroups listing"), evt_tl_back, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo settings_menu[] =
{
GNOMEUIINFO_MENU_PREFERENCES_ITEM(evt_preferences, NULL),
{ GNOME_APP_UI_ITEM, N_("Font palette..."), N_("Edit font palette"), evt_fontpal, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FONT, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Color palette..."), N_("Edit color palette"), evt_colorpal, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Save preferences"), NULL, evt_save_prefs, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo scripts_perl_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Load..."), N_("Load script"), evt_perl_load, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("List.."), N_("View list of loaded scripts"), evt_perl_list, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Restart all"), N_("Restart all loaded scripts"), evt_perl_restart, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_REFRESH, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo scripts_menu[] =
{
{ GNOME_APP_UI_SUBTREE, N_("Perl"), NULL, scripts_perl_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo help_menu[] =
{
GNOMEUIINFO_HELP("grn"),
{ GNOME_APP_UI_SEPARATOR },
GNOMEUIINFO_MENU_ABOUT_ITEM(evt_about, NULL),
GNOMEUIINFO_END
};
GnomeUIInfo main_menu[] =
{
{ GNOME_APP_UI_SUBTREE, N_("GRN"), NULL, grn_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Newsgroup"), N_("Newsgroup operations"), ng_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Threadlist"), N_("Threadlist operations"), threadlist_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Message"), N_("Article (message) opertaions"), message_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Settings"), NULL, settings_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Scripts"), NULL, scripts_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Help"), NULL, help_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
GnomeUIInfo main_toolbar[] =
{
{ GNOME_APP_UI_ITEM, N_("Back"), N_("Return to previous window"), evt_prev, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_BACK, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Next"), N_("Go forward"), evt_next, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_FORWARD, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Preferences"), N_("Configure the application"), evt_preferences, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_PREFERENCES, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo msgpost_file_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Load..."), N_("Load file to current window"), evt_compose_load_file, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Save..."), N_("Save current message to file"), evt_not_impl, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo msgpost_msg_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Post"), N_("Post message to group"), evt_post_ok, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_SND, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Cancel"), N_("Cancel message posting"), evt_post_cancel, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CLOSE, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Attachments..."), N_("View attachments dialog"), evt_attachments, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Newsgroups"), N_("Select newsgroup[s]"), evt_sel_groups, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_INDEX, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Edit headers"), N_("Edit article headers"), evt_mhdredit_dlg_create, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PROP, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo msgpost_macro_menu[] =
{
GNOMEUIINFO_END
};
GnomeUIInfo msgpost_menu[] =
{
{ GNOME_APP_UI_SUBTREE, N_("File"), NULL, msgpost_file_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Article"), NULL, msgpost_msg_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Macros"), NULL, msgpost_macro_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Help"), NULL, help_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
GnomeUIInfo msgpost_toolbar[] =
{
{ GNOME_APP_UI_ITEM, N_("Post"), N_("Post article"), evt_post_ok, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_MAIL_SND, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Cancel"), N_("Cancel posting"), evt_post_cancel, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_CLOSE, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Newsgroups"), N_("Select newsgroups"), evt_sel_groups, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_INDEX, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Headers"), N_("Edit article headers"), evt_mhdredit_dlg_create, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_PROPERTIES, 0, 0, NULL },
GNOMEUIINFO_END
};
static GnomeUIInfo msgsend_msg_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("Send"), N_("Send message via SMTP"), evt_send_ok, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_MAIL_SND, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Cancel"), N_("Cancel message sending"), evt_send_cancel, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CLOSE, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Attachments..."), N_("View attachments dialog"), evt_attachments, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Edit headers"), N_("Edit message headers"), evt_mhdredit_dlg_create, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PROP, 0, 0, NULL },
GNOMEUIINFO_END
};
GnomeUIInfo msgsend_menu[] =
{
{ GNOME_APP_UI_SUBTREE, N_("File"), NULL, msgpost_file_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Message"), NULL, msgsend_msg_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Macros"), NULL, msgpost_macro_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SUBTREE, N_("Help"), NULL, help_menu, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
GnomeUIInfo msgsend_toolbar[] =
{
{ GNOME_APP_UI_ITEM, N_("Send"), N_("Send message"), evt_send_ok, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_MAIL_SND, 0, 0, NULL },
{ GNOME_APP_UI_ITEM, N_("Cancel"), N_("Cancel sending"), evt_send_cancel, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_CLOSE, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Attachments"), N_("View message attachments"), evt_attachments, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_ATTACH, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("Headers"), N_("Edit message headers"), evt_mhdredit_dlg_create, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_PIXMAP_PROPERTIES, 0, 0, NULL },
GNOMEUIINFO_END
};
GnomeUIInfo mw_context_menu[] =
{
{ GNOME_APP_UI_SEPARATOR },
GNOMEUIINFO_RADIOLIST(mw_fonts_group),
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, N_("MIME structure"), N_("MIME structure dialog"), evt_mime_view, NULL, NULL,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ATTACH, 0, 0, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
#if 0
GnomeUIInfo view_menu[] =
{
{ GNOME_APP_UI_ITEM, N_("HTML source"), NULL, evt_app_quit, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL, 0, 0, NULL },
{ GNOME_APP_UI_SEPARATOR },
GNOMEUIINFO_RADIOLIST(view_radio_group),
{ GNOME_APP_UI_SEPARATOR },
GNOMEUIINFO_END
};
#endif
static void grn_menuitem_set_sensitive(gchar *path, gboolean enabled)
{
GtkWidget *mshell, *mi;
gint pos;
mshell = gnome_app_find_menu_pos(GNOME_APP(GRN->window)->menubar, path, &pos);
if ((mshell) && (GTK_MENU_SHELL(mshell)->children))
{
mi = (GtkWidget *) g_list_nth_data(GTK_MENU_SHELL(mshell)->children, pos-1);
if (mi)
{
grn_lock();
gtk_widget_set_sensitive(mi, enabled);
grn_unlock();
}
}
}
void grn_menuitem_show(gchar *path, gboolean visible)
{
GtkWidget *mshell, *mi;
gint pos;
g_return_if_fail(path != NULL);
mshell = gnome_app_find_menu_pos(GNOME_APP(GRN->window)->menubar, path, &pos);
if ((mshell) && (GTK_MENU_SHELL(mshell)->children))
{
mi = (GtkWidget *) g_list_nth_data(GTK_MENU_SHELL(mshell)->children, pos-1);
if (mi)
{
grn_lock();
if (visible) gtk_widget_show(mi);
else gtk_widget_hide(mi);
grn_unlock();
}
}
}
void grn_menuitem_check(GtkWidget *menu, gchar *path, gboolean is_active)
{
GtkWidget *mshell, *mi;
gint pos;
g_return_if_fail(menu != NULL);
g_return_if_fail(path != NULL);
mshell = gnome_app_find_menu_pos(menu, path, &pos);
if ((mshell) && (GTK_MENU_SHELL(mshell)->children))
{
mi = (GtkWidget *) g_list_nth_data(GTK_MENU_SHELL(mshell)->children, pos-1);
if (mi && GTK_IS_CHECK_MENU_ITEM(mi))
GTK_CHECK_MENU_ITEM(mi)->active = is_active;
}
else g_warning("'%s' menu item not found", path);
}
void grn_menus_init(void)
{
gchar *buf1 = g_strdup_printf("%s/%s/%s", _("Message"), _("View"), _("Proportional font"));
gchar *buf2 = g_strdup_printf("%s/%s/%s", _("Message"), _("View"), _("Monospaced font"));
grn_menuitem_check(GNOME_APP(GRN->window)->menubar, buf1, grn_prefs.mw_prop);
grn_menuitem_check(GNOME_APP(GRN->window)->menubar, buf2, !grn_prefs.mw_prop);
str_free(&buf1); str_free(&buf2);
show_newsgroups_menu(FALSE);
show_threadlist_menu(FALSE);
grn_menuitem_set_sensitive(_("Message"), FALSE);
}
void build_scripts_menu(void)
{
GtkWidget *mshell, *mi = NULL, *item;
GList *ml;
GSList *l;
gint pos;
gchar *path = g_strdup_printf("%s/%s", _("Scripts"), _("Perl"));
mshell = gnome_app_find_menu_pos(GNOME_APP(GRN->window)->menubar, path, &pos);
g_free(path);
if (! mshell) return;
ml = GTK_MENU_SHELL(mshell)->children;
ml = ml->next;
mi = (GtkWidget *) ml->data;
if (! mi) return;
mi = mi->parent;
item = gtk_menu_item_new();
gtk_widget_show(item);
gtk_menu_append(GTK_MENU(mi), item);
for (l=perl_commands; l; l=l->next)
{
perl_command_handler *pch = l->data;
if (! pch) continue;
if ((pch->context == 1) || (pch->context == 0))
{
item = gtk_menu_item_new_with_label(pch->command_name);
gtk_signal_connect(GTK_OBJECT(item), "activate",
GTK_SIGNAL_FUNC(evt_perl_command), pch->handler_name);
gtk_widget_show(item);
gtk_menu_append(GTK_MENU(mi), item);
}
}
}
void build_macros_menu(GtkWidget *menubar, gint context)
{
GtkWidget *mshell, *mi = NULL, *item;
GList *ml;
GSList *l;
gint pos;
gchar *path = g_strdup_printf("%s/", _("Macros"));
mshell = gnome_app_find_menu_pos(menubar, path, &pos);
g_free(path);
if (! mshell) return;
ml = GTK_MENU_SHELL(mshell)->children;
mi = (GtkWidget *) ml->data;
if (! mi) return;
mi = mi->parent;
for (l=perl_commands; l; l=l->next)
{
perl_command_handler *pch = l->data;
if (! pch) continue;
if ((pch->context == 2) || (pch->context == context) || (pch->context == 0))
{
item = gtk_menu_item_new_with_label(pch->command_name);
gtk_signal_connect(GTK_OBJECT(item), "activate",
GTK_SIGNAL_FUNC(evt_perl_command), pch->handler_name);
gtk_widget_show(item);
gtk_menu_append(GTK_MENU(mi), item);
}
}
}
void menu_delete_scripts(void)
{
GtkWidget *mshell, *mi = NULL;
GList *ml;
gint pos;
gchar *path = g_strdup_printf("%s/%s", _("Scripts"), _("Perl"));
mshell = gnome_app_find_menu_pos(GNOME_APP(GRN->window)->menubar, path, &pos);
g_free(path);
if (! mshell) return;
ml = GTK_MENU_SHELL(mshell)->children;
ml = ml->next;
mi = (GtkWidget *) ml->data;
if (! mi) return;
mi = mi->parent;
ml = GTK_MENU_SHELL(mi)->children;
ml = ml->next; ml = ml->next;
while (ml)
{
if (ml->data)
{
gtk_widget_hide(GTK_WIDGET(ml->data));
// gtk_widget_destroy(GTK_WIDGET(ml->data));
}
ml = ml->next;
}
}
void enable_newsgroups_menu(gboolean visible)
{
gchar buf[1024];
snprintf(buf, 1000, "%s/%s", _("Message"), _("Open"));
grn_menuitem_set_sensitive(buf, ! visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("Reply"));
grn_menuitem_set_sensitive(buf, ! visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("Forward"));
grn_menuitem_set_sensitive(buf, ! visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("File"));
grn_menuitem_set_sensitive(buf, ! visible);
if (visible)
{
grn_menuitem_set_sensitive(_("Message"), visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("View"));
grn_menuitem_set_sensitive(buf, ! visible);
}
}
void show_newsgroups_menu(gboolean visible)
{
grn_menuitem_set_sensitive(_("Newsgroup"), visible);
grn_menuitem_show(_("Newsgroup"), visible);
enable_newsgroups_menu(visible);
}
void enable_threadlist_menu(gboolean visible)
{
gchar buf[1024];
grn_menuitem_set_sensitive(_("Threadlist"), visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("Open"));
grn_menuitem_set_sensitive(buf, visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("View"));
grn_menuitem_set_sensitive(buf, ! visible);
}
void show_threadlist_menu(gboolean visible)
{
enable_threadlist_menu(visible);
grn_menuitem_show(_("Threadlist"), visible);
}
void show_message_menu(gboolean visible)
{
gchar buf[1024];
snprintf(buf, 1000, "%s/%s", _("Message"), _("Open"));
grn_menuitem_set_sensitive(buf, ! visible);
snprintf(buf, 1000, "%s/%s", _("Message"), _("View"));
grn_menuitem_set_sensitive(buf, visible);
}
void enable_findagain_menu(gboolean enabled)
{
gchar buf[1024];
snprintf(buf, 1000, "%s/%s", _("Threadlist"), _("Search again"));
grn_menuitem_set_sensitive(buf, enabled);
}
void grn_menu_set_data(GtkWidget *menu, gchar *base, gchar *path,
const gchar *key, gpointer data)
{
gchar *s = g_strconcat(base, "/", path, NULL);
gint pos;
GtkWidget *w = gnome_app_find_menu_pos(menu, s, &pos);
str_free(&s);
if (w) gtk_object_set_data(GTK_OBJECT(w), key, data);
}
syntax highlighted by Code2HTML, v. 0.9.1