mirror of https://github.com/MidnightCommander/mc
222 lines
6.1 KiB
C
222 lines
6.1 KiB
C
/* Toplevel file window for the Midnight Commander
|
|
*
|
|
* Copyright (C) 1998 The Free Software Foundation
|
|
*
|
|
* Author: Federico Mena <federico@nuclecu.unam.mx>
|
|
*/
|
|
|
|
/* #include <config.h> */
|
|
#include <gnome.h>
|
|
#include "gdesktop.h"
|
|
#include "gmc-window.h"
|
|
|
|
|
|
/* Magic numbers */
|
|
|
|
#define ICON_LIST_SEPARATORS " /-_."
|
|
#define ICON_LIST_ROW_SPACING 2
|
|
#define ICON_LIST_COL_SPACING 2
|
|
#define ICON_LIST_ICON_BORDER 2
|
|
#define ICON_LIST_TEXT_SPACING 2
|
|
|
|
|
|
static void gmc_window_init (GmcWindow *gmc);
|
|
|
|
|
|
/**
|
|
* gmc_window_get_type:
|
|
*
|
|
* Returns the unique Gtk type assigned to the GmcWindow widget.
|
|
*
|
|
* Return Value: the type ID of the GmcWindow widget.
|
|
**/
|
|
GtkType
|
|
gmc_window_get_type (void)
|
|
{
|
|
static GtkType gmc_window_type = 0;
|
|
|
|
if (!gmc_window_type) {
|
|
GtkTypeInfo gmc_window_info = {
|
|
"GmcWindow",
|
|
sizeof (GmcWindow),
|
|
sizeof (GmcWindowClass),
|
|
(GtkClassInitFunc) NULL,
|
|
(GtkObjectInitFunc) gmc_window_init,
|
|
NULL, /* reserved_1 */
|
|
NULL, /* reserved_2 */
|
|
(GtkClassInitFunc) NULL
|
|
};
|
|
|
|
gmc_window_type = gtk_type_unique (gnome_app_get_type (), &gmc_window_info);
|
|
}
|
|
|
|
return gmc_window_type;
|
|
}
|
|
|
|
/* Displays GMC's About dialog */
|
|
static void
|
|
about_dialog (GtkWidget *widget, gpointer data)
|
|
{
|
|
GtkWidget *about;
|
|
const gchar *authors[] = {
|
|
"The Midnight Commander Team",
|
|
"http://www.gnome.org/mc",
|
|
"Bug reports: mc-bugs@nuclecu.unam.mx",
|
|
NULL
|
|
};
|
|
#if 0
|
|
about = gnome_about_new (_("GNU Midnight Commander"), VERSION,
|
|
#endif
|
|
about = gnome_about_new (_("GNU Midnight Commander"), "1.0",
|
|
_("Copyright (C) 1998 The Free Software Foundation"),
|
|
authors,
|
|
_("The GNOME edition of the Midnight Commander file manager."),
|
|
NULL);
|
|
gnome_dialog_run_modal (GNOME_DIALOG (about));
|
|
}
|
|
|
|
/* FIXME: put in the callbacks */
|
|
|
|
/* File menu */
|
|
static GnomeUIInfo file_menu[] = {
|
|
{ GNOME_APP_UI_ITEM, N_("Open _new window"), NULL, NULL, NULL, NULL,
|
|
GNOME_APP_PIXMAP_NONE, NULL, 'n', GDK_CONTROL_MASK, NULL },
|
|
|
|
GNOMEUIINFO_SEPARATOR,
|
|
|
|
{ GNOME_APP_UI_ITEM, N_("_Close this window"), NULL, NULL, NULL, NULL,
|
|
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_CLOSE, 'w', GDK_CONTROL_MASK, NULL },
|
|
{ GNOME_APP_UI_ITEM, N_("E_xit"), NULL, NULL, NULL, NULL,
|
|
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_EXIT, 'q', GDK_CONTROL_MASK, NULL },
|
|
GNOMEUIINFO_END
|
|
};
|
|
|
|
/* View types radioitem list */
|
|
static GnomeUIInfo view_list_types_radioitems[] = {
|
|
GNOMEUIINFO_ITEM_NONE (N_("_Listing view"), NULL, NULL),
|
|
GNOMEUIINFO_ITEM_NONE (N_("_Icon view"), NULL, NULL),
|
|
GNOMEUIINFO_END
|
|
};
|
|
|
|
/* View menu */
|
|
static GnomeUIInfo view_menu[] = {
|
|
GNOMEUIINFO_TOGGLEITEM (N_("Display _tree view"), NULL, NULL, NULL),
|
|
|
|
GNOMEUIINFO_SEPARATOR,
|
|
|
|
GNOMEUIINFO_RADIOLIST (view_list_types_radioitems),
|
|
GNOMEUIINFO_END
|
|
};
|
|
|
|
/* Help menu */
|
|
static GnomeUIInfo help_menu[] = {
|
|
{ GNOME_APP_UI_ITEM, N_("_About the Midnight Commander..."), NULL, about_dialog, NULL, NULL,
|
|
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT, 0, 0, NULL },
|
|
GNOMEUIINFO_END
|
|
};
|
|
|
|
/* Main menu */
|
|
static GnomeUIInfo main_menu[] = {
|
|
GNOMEUIINFO_SUBTREE (N_("_File"), file_menu),
|
|
GNOMEUIINFO_SUBTREE (N_("_View"), view_menu),
|
|
GNOMEUIINFO_SUBTREE (N_("_Help"), help_menu),
|
|
GNOMEUIINFO_END
|
|
};
|
|
|
|
/* Sets up the menu bar for a gmc window */
|
|
static void
|
|
setup_menus (GmcWindow *gmc)
|
|
{
|
|
gnome_app_create_menus_with_data (GNOME_APP (gmc), main_menu, gmc);
|
|
}
|
|
|
|
/* Sets up the toolbar for a gmc window */
|
|
static void
|
|
setup_toolbar (GmcWindow *gmc)
|
|
{
|
|
/* FIXME */
|
|
}
|
|
|
|
/* Sets up the contents for a gmc window */
|
|
static void
|
|
setup_contents (GmcWindow *gmc)
|
|
{
|
|
/* Paned container */
|
|
|
|
gmc->paned = gtk_hpaned_new ();
|
|
gnome_app_set_contents (GNOME_APP (gmc), gmc->paned);
|
|
gtk_widget_show (gmc->paned);
|
|
|
|
/* Tree view */
|
|
|
|
gmc->tree = gtk_button_new_with_label ("Look at me!\nI am a nice tree!");
|
|
gtk_paned_add1 (GTK_PANED (gmc->paned), gmc->tree);
|
|
gtk_widget_show (gmc->tree);
|
|
|
|
/* Notebook */
|
|
|
|
gmc->notebook = gtk_notebook_new ();
|
|
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (gmc->notebook), FALSE);
|
|
gtk_notebook_set_show_border (GTK_NOTEBOOK (gmc->notebook), FALSE);
|
|
gtk_paned_add2 (GTK_PANED (gmc->paned), gmc->notebook);
|
|
gtk_widget_show (gmc->notebook);
|
|
|
|
/* List view */
|
|
|
|
gmc->clist_sw = gtk_scrolled_window_new (NULL, NULL);
|
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (gmc->clist_sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
gtk_notebook_append_page (GTK_NOTEBOOK (gmc->notebook), gmc->clist_sw, NULL);
|
|
gtk_widget_show (gmc->clist_sw);
|
|
|
|
gmc->clist = gtk_clist_new (1); /* FIXME: how many columns? */
|
|
gtk_container_add (GTK_CONTAINER (gmc->clist_sw), gmc->clist);
|
|
gtk_widget_show (gmc->clist);
|
|
|
|
/* Icon view */
|
|
|
|
gmc->ilist_sw = gtk_scrolled_window_new (NULL, NULL);
|
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (gmc->ilist_sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
gtk_notebook_append_page (GTK_NOTEBOOK (gmc->notebook), gmc->ilist_sw, NULL);
|
|
gtk_widget_show (gmc->ilist_sw);
|
|
|
|
gmc->ilist = gnome_icon_list_new (DESKTOP_SNAP_X, NULL, TRUE);
|
|
gnome_icon_list_set_separators (GNOME_ICON_LIST (gmc->ilist), ICON_LIST_SEPARATORS);
|
|
gnome_icon_list_set_row_spacing (GNOME_ICON_LIST (gmc->ilist), ICON_LIST_ROW_SPACING);
|
|
gnome_icon_list_set_col_spacing (GNOME_ICON_LIST (gmc->ilist), ICON_LIST_COL_SPACING);
|
|
gnome_icon_list_set_icon_border (GNOME_ICON_LIST (gmc->ilist), ICON_LIST_ICON_BORDER);
|
|
gnome_icon_list_set_text_spacing (GNOME_ICON_LIST (gmc->ilist), ICON_LIST_TEXT_SPACING);
|
|
gnome_icon_list_set_selection_mode (GNOME_ICON_LIST (gmc->ilist), GTK_SELECTION_MULTIPLE);
|
|
GTK_WIDGET_SET_FLAGS (gmc->ilist, GTK_CAN_FOCUS);
|
|
|
|
gtk_container_add (GTK_CONTAINER (gmc->ilist_sw), gmc->ilist);
|
|
gtk_widget_show (gmc->ilist);
|
|
|
|
gtk_notebook_set_page (GTK_NOTEBOOK (gmc->notebook), gmc->list_type);
|
|
|
|
/* FIXME: connect the clist/ilist signals, setup DnD, etc. */
|
|
}
|
|
|
|
/* Initializes the gmc window by creating all its contents */
|
|
static void
|
|
gmc_window_init (GmcWindow *gmc)
|
|
{
|
|
gmc->list_type = FILE_LIST_ICONS; /* FIXME: load this from the configuration */
|
|
|
|
setup_menus (gmc);
|
|
setup_toolbar (gmc);
|
|
setup_contents (gmc);
|
|
}
|
|
|
|
/**
|
|
* gmc_window_new:
|
|
*
|
|
* Creates a new GMC toplevel file window.
|
|
*
|
|
* Return Value: the newly-created window.
|
|
**/
|
|
GtkWidget *
|
|
gmc_window_new (void)
|
|
{
|
|
return gtk_type_new (gmc_window_get_type ());
|
|
}
|