123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /* XView viewer routines.
- Copyright (C) 1995 Jakub Jelinek.
-
- 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
- #include <config.h>
- #include <X11/Xlib.h>
- #include <xview/xview.h>
- #include <xview/frame.h>
- #include <xview/panel.h>
- #include <xview/svrimage.h>
- #include <xview/canvas.h>
- #include <xview/scrollbar.h>
- #include <xview/cms.h>
- #include <xview/xv_xrect.h>
- #include <xview/textsw.h>
- #include <stdio.h>
- #include "fs.h"
- #include "dlg.h"
- #define WANT_WIDGETS
- #include "view.h"
- #include "../src/util.h"
- #include "../src/mad.h"
- #include "xvmain.h"
- extern Frame mcframe;
- Frame viewframe;
- Panel viewpanel;
- Textsw viewcanvas;
- Cms viewcms;
- extern void view_destroy(WView *);
- static void x_quit_cmd (Panel_button_item);
- /*static struct {
- unsigned short *bits;
- void (*callback) (void);
- } buttons [] = {
- index_bits, x_index_cmd,
- back_bits, x_back_cmd,
- previous_bits, x_previous_cmd,
- next_bits, x_next_cmd,
- search_bits, x_search_cmd };*/
- static void fetch_content (Textsw textsw, WView *view)
- {
- char *p;
- int n;
- if (view->growing_buffer) {
- p = xmalloc (2048, "view growing");
- if (view->stdfile != (FILE *)-1)
- n = fread (p, 1, 2048, view->stdfile);
- else
- n = mc_read (view->file, p, 2048);
- textsw_insert (textsw, p, n);
- free (p);
- } else {
- textsw_insert (textsw, view->data, view->bytes_read);
- }
- }
- static void textsw_notify (Textsw textsw, Attr_attribute *attrs)
- {
- WView *view = (WView *) xv_get (textsw, XV_KEY_DATA, KEY_DATA_VIEW);
- Rect *from, *to;
-
- for (; *attrs; attrs = attr_next (attrs)) {
- switch (*attrs) {
- case TEXTSW_ACTION_SCROLLED:
- from = (Rect *) attrs [1];
- to = (Rect *) attrs [2];
- if (view->growing_buffer) {
- if (view->stdfile != (FILE *) -1) {
- xv_get (textsw, TEXTSW_FIRST_LINE);
- } else {
- xv_get (textsw, TEXTSW_FIRST_LINE);
- }
- }
- break;
- default:
- break;
- }
- }
- }
- static void create_frame (WView *view)
- {
- Panel_button_item button;
- /* int i;*/
- viewcms = (Cms) xv_create (XV_NULL, CMS,
- CMS_CONTROL_CMS, TRUE,
- CMS_SIZE, CMS_CONTROL_COLORS + 5,
- CMS_NAMED_COLORS, "black", "red4", "green4", "black", NULL,
- NULL);
-
- viewframe = xv_create (mcframe, FRAME,
- FRAME_LABEL, "View",
- WIN_CMS, viewcms,
- FRAME_INHERIT_COLORS, TRUE,
- FRAME_SHOW_FOOTER, TRUE,
- XV_KEY_DATA, KEY_DATA_VIEW, view,
- NULL);
-
- viewpanel = xv_create (viewframe, PANEL,
- XV_KEY_DATA, KEY_DATA_VIEW, view,
- NULL);
- /*
- xv_create (viewpanel, PANEL_BUTTON,
- PANEL_LABEL_STRING, "Help",
- PANEL_ITEM_MENU, xv_create (XV_NULL, MENU,
- MENU_ITEM,
- MENU_STRING, "Help on Help",
- MENU_NOTIFY_PROC, x_view_on_view,
- NULL,
- MENU_ITEM,
- MENU_STRING, "Index",
- MENU_NOTIFY_PROC, x_index_cmd,
- NULL,
- MENU_ITEM,
- MENU_STRING, "Back",
- MENU_NOTIFY_PROC, x_back_cmd,
- NULL,
- MENU_ITEM,
- MENU_STRING, "Previous",
- MENU_NOTIFY_PROC, x_previous_cmd,
- NULL,
- MENU_ITEM,
- MENU_STRING, "Next",
- MENU_NOTIFY_PROC, x_next_cmd,
- NULL,
- MENU_ITEM,
- MENU_STRING, "Search",
- MENU_NOTIFY_PROC, x_search_cmd,
- NULL,
- NULL),
- NULL);
- button = (Panel_button_item) xv_create (viewpanel, PANEL_BUTTON,
- PANEL_LABEL_STRING, "Quit",
- PANEL_NOTIFY_PROC, x_quit_cmd,
- NULL);
- for (i = 0; i < sizeof (buttons) / sizeof (buttons [0]); i++) {
- button = (Panel_button_item) xv_create (viewpanel, PANEL_BUTTON,
- PANEL_LABEL_IMAGE, xv_create (XV_NULL, SERVER_IMAGE,
- SERVER_IMAGE_DEPTH, 1,
- XV_WIDTH, 48,
- XV_HEIGHT, 48,
- SERVER_IMAGE_BITS, buttons [i].bits,
- NULL),
- PANEL_NOTIFY_PROC, buttons [i].callback,
- NULL);
- if (!i)
- xv_set (button,
- PANEL_NEXT_ROW, -1,
- NULL);
- }
- */
- button = (Panel_button_item) xv_create (viewpanel, PANEL_BUTTON,
- PANEL_LABEL_STRING, "Quit",
- XV_KEY_DATA, KEY_DATA_VIEW, view,
- PANEL_CLIENT_DATA, viewframe,
- PANEL_NOTIFY_PROC, x_quit_cmd,
- NULL);
- window_fit (viewpanel);
-
- xv_set (viewpanel,
- XV_WIDTH, WIN_EXTEND_TO_EDGE,
- NULL);
-
- xv_set (viewframe,
- XV_KEY_DATA, KEY_DATA_PANEL, viewpanel,
- NULL);
-
- viewcanvas = xv_create (viewframe, TEXTSW,
- WIN_BELOW, viewpanel,
- XV_KEY_DATA, KEY_DATA_VIEW, view,
- TEXTSW_BROWSING, TRUE,
- TEXTSW_DISABLE_CD, TRUE,
- TEXTSW_DISABLE_LOAD, TRUE,
- TEXTSW_NOTIFY_PROC, textsw_notify,
- TEXTSW_NOTIFY_LEVEL, TEXTSW_NOTIFY_ALL,
- TEXTSW_IGNORE_LIMIT, TEXTSW_INFINITY,
- TEXTSW_INSERT_MAKES_VISIBLE, TEXTSW_IF_AUTO_SCROLL,
- TEXTSW_LOWER_CONTEXT, -1,
- TEXTSW_UPPER_CONTEXT, -1,
- NULL);
-
- xv_create (viewcanvas, SCROLLBAR,
- SCROLLBAR_DIRECTION, SCROLLBAR_VERTICAL,
- SCROLLBAR_SPLITTABLE, TRUE,
- NULL);
- fetch_content (viewcanvas, view);
- /* xv_create (viewcanvas, SCROLLBAR,
- SCROLLBAR_DIRECTION, SCROLLBAR_HORIZONTAL,
- SCROLLBAR_SPLITTABLE, TRUE,
- NULL);*/
-
- window_fit (viewframe);
-
- xv_set (viewframe,
- XV_KEY_DATA, KEY_DATA_CANVAS, viewcanvas,
- NULL);
-
- xv_set (viewframe,
- XV_SHOW, TRUE,
- NULL);
-
- }
- void x_view (WView *view)
- {
- create_frame (view);
- }
- static void x_quit_cmd (Panel_button_item button)
- {
- view_destroy ((WView *)xv_get(button, XV_KEY_DATA, KEY_DATA_VIEW));
- xv_destroy_safe ((Frame)xv_get(button, PANEL_CLIENT_DATA));
- xv_dispatch_a_bit();
- }
|