gecko-dev/cmd/gnomefe/gnome-src/g-browser-frame.c

431 строка
12 KiB
C

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
/*
browser-frame.c -- browser windows.
Created: Chris Toshok <toshok@hungry.com>, 9-Apr-98.
*/
#include "xp_mem.h"
#include "structs.h"
#include "ntypes.h"
#include "net.h"
#include "g-util.h"
#include "g-browser-frame.h"
#include "g-commands.h"
#include "g-paned-view.h"
#include "g-html-view.h"
#include "g-navcenter-view.h"
static void
callback(GtkWidget *widget,
gpointer client_data)
{
/* blah */
}
static void
toggle_navcenter(GtkWidget *widget,
gpointer client_data)
{
MozBrowserFrame *browser_frame = MOZ_BROWSER_FRAME(client_data);
MozView *view = MOZ_FRAME(browser_frame)->top_view;
MozNavCenterView *ncview = (MozNavCenterView*)moz_get_view_of_type(view,
MOZ_TAG_NAVCENTER_VIEW);
if (moz_component_is_shown(MOZ_COMPONENT(ncview)))
moz_component_hide(MOZ_COMPONENT(ncview));
else
moz_component_show(MOZ_COMPONENT(ncview));
}
static GnomeUIInfo file_submenu[] = {
{ GNOME_APP_UI_ITEM, "New Browser", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Open Location", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Save...", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Save As...", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Save Frame As...", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Send Page", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Send Link", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
#ifdef EDITOR
{ GNOME_APP_UI_ITEM, "Edit Page", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Edit Frame", NULL, callback, NULL, NULL },
#endif
{ GNOME_APP_UI_ITEM, "Upload File", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Print", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Close", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Exit", NULL, moz_exit, NULL, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo edit_submenu[] = {
{ GNOME_APP_UI_ITEM, "Undo", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Redo", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Cut", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Copy", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Paste", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Select All", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Find In Page", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Find Again", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Search", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Preferences...", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo view_submenu[] = {
{ GNOME_APP_UI_ITEM, "Toggle Navigation Toolbar", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Toggle Location Toolbar", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Toggle Personal Toolbar", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Toggle Navigation Center", NULL, toggle_navcenter, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Increase Font", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Decreasea Font", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Reload", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Show Images", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Refresh", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Stop Loading", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "View Page Source", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "View Page Info", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "View Page Services", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo go_submenu[] = {
{ GNOME_APP_UI_ITEM, "Back", "Back to previous page", callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Forward", "Forward to next page", callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Home", "Load home page", callback, NULL, NULL },
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo window_submenu[] = {
{ GNOME_APP_UI_ITEM, "Navigation Center", NULL, callback, NULL, NULL },
{ GNOME_APP_UI_ITEM, "Navigator", NULL, moz_open_browser, NULL, NULL },
#ifdef EDITOR
{ GNOME_APP_UI_ITEM, "Composer", NULL, moz_open_editor, NULL, NULL },
#endif
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM, "Bookmarks", NULL, moz_open_bookmarks, NULL, NULL },
{ GNOME_APP_UI_ITEM, "History", NULL, moz_open_history, NULL, NULL },
#ifdef MOZ_SECURITY
{ GNOME_APP_UI_ITEM, "View Security", NULL, callback, NULL, NULL },
#endif
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo documents_submenu[] = {
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo help_submenu[] = {
{ GNOME_APP_UI_HELP, "HelpStuff", NULL, "GnuZilla" },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo menubar_info[] = {
{ GNOME_APP_UI_SUBTREE, "File", NULL, file_submenu },
{ GNOME_APP_UI_SUBTREE, "Edit", NULL, edit_submenu },
{ GNOME_APP_UI_SUBTREE, "View", NULL, view_submenu },
{ GNOME_APP_UI_SUBTREE, "Go", NULL, go_submenu },
{ GNOME_APP_UI_SUBTREE, "Window", NULL, window_submenu },
{ GNOME_APP_UI_SUBTREE, "Documents", NULL, documents_submenu },
{ GNOME_APP_UI_SUBTREE, "Help", NULL, help_submenu },
{ GNOME_APP_UI_ENDOFINFO }
};
static GnomeUIInfo toolbar_info[] = {
{ GNOME_APP_UI_ITEM,
"Back", "Back to previous page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Back.xpm" },
{ GNOME_APP_UI_ITEM,
"Forward", "Forward to next page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Forward.xpm" },
{ GNOME_APP_UI_ITEM,
"Reload", "Reload current page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Reload.xpm" },
{ GNOME_APP_UI_ITEM,
"Home", "Load home page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Home.xpm" },
{ GNOME_APP_UI_ITEM,
"Search", "Search the Web",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Search.xpm" },
{ GNOME_APP_UI_SEPARATOR },
#ifdef EDITOR
{ GNOME_APP_UI_ITEM,
"Edit", "Edit this page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_EditPage.xpm" },
{ GNOME_APP_UI_SEPARATOR },
#endif
{ GNOME_APP_UI_ITEM,
"Images", "Show Images",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_LoadImages.xpm" },
{ GNOME_APP_UI_ITEM,
"Print", "Print this page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Print.xpm" },
#ifdef MOZ_SECURITY
{ GNOME_APP_UI_ITEM,
"Security", "View the Security Info for this page",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Secure.xpm" },
#endif
{ GNOME_APP_UI_SEPARATOR },
{ GNOME_APP_UI_ITEM,
"Stop", "Stop Loading",
callback, NULL, NULL,
GNOME_APP_PIXMAP_FILENAME,
"images/TB_Stop.xpm" },
{ GNOME_APP_UI_ENDOFINFO }
};
void
moz_browser_frame_init(MozBrowserFrame *frame)
{
/* call our superclass's init method first. */
moz_frame_init(MOZ_FRAME(frame),
menubar_info,
toolbar_info);
/* then do our stuff */
moz_tagged_set_type(MOZ_TAGGED(frame),
MOZ_TAG_BROWSER_FRAME);
}
extern void fe_url_exit (URL_Struct *url, int status, MWContext *context);
static void
combo_activate(GtkWidget *entry,
MozBrowserFrame *frame)
{
MWContext *context = MOZ_FRAME(frame)->context;
gchar *value;
URL_Struct *url;
value = gtk_entry_get_text(GTK_ENTRY(entry));
url = NET_CreateURLStruct(value, NET_NORMAL_RELOAD);
NET_GetURL(url, FO_CACHE_AND_PRESENT,
context, fe_url_exit);
}
static GtkWidget*
moz_browser_frame_create_bookmark_dropdown(MozBrowserFrame *frame)
{
GtkWidget *hbox, *pmap, *button, *label;
hbox = gtk_hbox_new(FALSE, 2);
pmap = gnome_pixmap_new_from_file("images/BM_QFile.xpm");
gtk_widget_show(pmap);
gtk_box_pack_start(GTK_BOX(hbox), pmap, FALSE, FALSE, 0);
label = gtk_label_new(_("Bookmarks"));
gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
button = gtk_button_new();
gtk_widget_show(hbox);
gtk_container_add(GTK_CONTAINER(button), hbox);
return button;
}
static GtkWidget*
moz_browser_frame_create_browser_area(MozBrowserFrame *frame)
{
GtkWidget *combobox, *vbox, *label, *quickfile;
GtkWidget *hbox;
GtkWidget *hb;
GtkWidget *statusbar;
GtkWidget *proxy;
hb = gtk_handle_box_new();
gtk_widget_show(hb);
hbox = gtk_hbox_new(FALSE, 0);
gtk_widget_show(hbox);
vbox = gtk_vbox_new(FALSE, 0);
quickfile = moz_browser_frame_create_bookmark_dropdown(frame);
gtk_box_pack_start(GTK_BOX(hbox), quickfile, FALSE, FALSE, 0);
gtk_widget_show(quickfile);
proxy = gnome_pixmap_new_from_file("images/LocationProxy.xpm");
gtk_box_pack_start(GTK_BOX(hbox), proxy, FALSE, FALSE, 0);
gtk_widget_show(proxy);
label = gtk_label_new(_("Location:"));
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
gtk_widget_show(label);
combobox = gtk_combo_new();
gtk_combo_disable_activate(GTK_COMBO(combobox));
gtk_box_pack_start(GTK_BOX(hbox), combobox, TRUE, TRUE, 0);
gtk_widget_show(combobox);
gtk_container_add(GTK_CONTAINER(hb), hbox);
gtk_widget_show(hb);
gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combobox)->entry),
"activate",
(GtkSignalFunc)combo_activate, frame);
gtk_box_pack_start(GTK_BOX(vbox), hb, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox),
MOZ_COMPONENT(MOZ_FRAME(frame)->top_view)->base_widget,
TRUE, TRUE, 0);
moz_component_show(MOZ_COMPONENT(MOZ_FRAME(frame)->top_view));
gtk_widget_show(vbox);
return vbox;
}
MozBrowserFrame*
moz_browser_frame_create()
{
MozBrowserFrame *frame = XP_NEW_ZAP(MozBrowserFrame);
MozPanedView *paned_view;
MozNavCenterView *navcenter_view;
MozHTMLView *html_view;
moz_browser_frame_init(frame);
MOZ_FRAME(frame)->context->type = MWContextBrowser;
gtk_widget_realize(MOZ_COMPONENT(frame)->base_widget);
paned_view = moz_paned_view_create_horizontal(MOZ_FRAME(frame), MOZ_FRAME(frame)->context);
html_view = moz_html_view_create(MOZ_FRAME(frame), MOZ_FRAME(frame)->context);
#if NAVCENTER_VIEW
navcenter_view = moz_navcenter_view_create(MOZ_FRAME(frame), MOZ_FRAME(frame)->context);
#endif
MOZ_FRAME(frame)->top_view = MOZ_VIEW(paned_view);
#if NAVCENTER_VIEW
moz_paned_view_add_view1(paned_view, MOZ_VIEW(navcenter_view));
#endif
moz_paned_view_add_view2(paned_view, MOZ_VIEW(html_view));
moz_component_show(MOZ_COMPONENT(html_view));
moz_component_show(MOZ_COMPONENT(paned_view));
moz_frame_set_viewarea(MOZ_FRAME(frame),
moz_browser_frame_create_browser_area(frame));
gtk_widget_set_usize(MOZ_COMPONENT(frame)->base_widget,
500, 700); /* XXX save off the default browser size. */
return frame;
}