XEphem/GUI/xephem/skytoolbar.c

1180 lines
41 KiB
C

#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/RowColumn.h>
#include <Xm/ToggleB.h>
#include <stdlib.h>
#include "xephem.h"
static void svtb_ct_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_tt_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_cyl_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_sph_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_toggle_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_monument_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_contrast_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_glass_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_gauss_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_slice_cb (Widget w, XtPointer client, XtPointer call);
static void svtb_roi_cb (Widget w, XtPointer client, XtPointer call);
/* bitmaps and basic organization for skyvnew toolbars */
#define zoomin_width 21
#define zoomin_height 21
static unsigned char zoomin_bits[] = {
0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x38, 0x38, 0x00, 0x0c, 0x60, 0x00,
0x84, 0x43, 0x00, 0x86, 0xc3, 0x00, 0x82, 0x83, 0x00, 0xf2, 0x9f, 0x00,
0xf2, 0x9f, 0x00, 0xf2, 0x9f, 0x00, 0x82, 0x83, 0x00, 0x86, 0xc3, 0x00,
0x84, 0x43, 0x00, 0x0c, 0xe0, 0x00, 0x38, 0xf8, 0x00, 0xe0, 0xef, 0x03,
0x00, 0x80, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e,
0x00, 0x00, 0x1c};
#define zoomin_ins_width 21
#define zoomin_ins_height 21
static unsigned char zoomin_ins_bits[] = {
0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x28, 0x28, 0x00, 0x0c, 0x40, 0x00,
0x80, 0x02, 0x00, 0x06, 0xc1, 0x00, 0x82, 0x82, 0x00, 0x50, 0x15, 0x00,
0xa2, 0x8a, 0x00, 0x50, 0x15, 0x00, 0x80, 0x82, 0x00, 0x06, 0x41, 0x00,
0x80, 0x82, 0x00, 0x04, 0xa0, 0x00, 0x28, 0x08, 0x01, 0x60, 0x35, 0x02,
0x00, 0x40, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02,
0x00, 0x00, 0x14};
#define unzoom_width 21
#define unzoom_height 21
static unsigned char unzoom_bits[] = {
0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x38, 0x38, 0x00, 0x0c, 0x60, 0x00,
0x04, 0x40, 0x00, 0x06, 0xc0, 0x00, 0x02, 0x80, 0x00, 0xf2, 0x9f, 0x00,
0xf2, 0x9f, 0x00, 0xf2, 0x9f, 0x00, 0x02, 0x80, 0x00, 0x06, 0xc0, 0x00,
0x04, 0x40, 0x00, 0x0c, 0xe0, 0x00, 0x38, 0xf8, 0x00, 0xe0, 0xef, 0x03,
0x00, 0x80, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e,
0x00, 0x00, 0x1c};
#define unzoom_ins_width 21
#define unzoom_ins_height 21
static unsigned char unzoom_ins_bits[] = {
0x00, 0x00, 0x00, 0x60, 0x09, 0x00, 0x28, 0x28, 0x00, 0x0c, 0x40, 0x00,
0x00, 0x00, 0x00, 0x06, 0xc0, 0x00, 0x02, 0x80, 0x00, 0x50, 0x15, 0x00,
0xa2, 0x8a, 0x00, 0x50, 0x15, 0x00, 0x00, 0x80, 0x00, 0x06, 0x40, 0x00,
0x00, 0x80, 0x00, 0x04, 0xa0, 0x00, 0x28, 0x08, 0x01, 0x60, 0x35, 0x02,
0x00, 0x40, 0x05, 0x00, 0x80, 0x08, 0x00, 0x00, 0x15, 0x00, 0x00, 0x02,
0x00, 0x00, 0x14};
#define brighter_width 21
#define brighter_height 21
static unsigned char brighter_bits[] = {
0x88, 0x24, 0x02, 0x10, 0x15, 0x01, 0x20, 0x80, 0x10, 0x07, 0x1f, 0x0c,
0x98, 0x3f, 0x03, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xcf, 0x7f, 0x1e,
0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0a, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x00, 0x00};
#define dimmer_width 21
#define dimmer_height 21
static unsigned char dimmer_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0xc0, 0x6a, 0x00, 0x40, 0x55, 0x00,
0xc0, 0x6a, 0x00, 0x40, 0x55, 0x00, 0x80, 0x2a, 0x00, 0x80, 0x35, 0x00,
0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0a, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x00, 0x00};
#define automag_width 21
#define automag_height 21
static unsigned char automag_bits[] = {
0x00, 0x91, 0x00, 0x00, 0xa2, 0x02, 0x30, 0x04, 0x00, 0xc0, 0xe0, 0x03,
0x00, 0xb3, 0x04, 0x00, 0x78, 0x09, 0x00, 0xb8, 0x08, 0x00, 0x78, 0x09,
0x00, 0xb8, 0x08, 0xf8, 0x78, 0x09, 0x06, 0xb3, 0x04, 0x02, 0x72, 0x05,
0x89, 0xe4, 0x02, 0x01, 0xe4, 0x03, 0x01, 0xe4, 0x03, 0x89, 0x44, 0x01,
0x71, 0xe4, 0x03, 0x02, 0xc2, 0x01, 0x06, 0xe3, 0x03, 0xf8, 0xc0, 0x01,
0x00, 0x00, 0x00};
#define constel_width 21
#define constel_height 21
static unsigned char constel_bits[] = {
0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x40, 0x12, 0x0e, 0x47, 0x28, 0x01,
0x47, 0x28, 0x06, 0x47, 0x28, 0x08, 0x82, 0x73, 0x07, 0x02, 0x00, 0x00,
0x04, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x9c, 0x0f, 0x00, 0x7c, 0x0e, 0x00,
0x1c, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x1c,
0x00, 0x10, 0x1c, 0x00, 0x10, 0x1e, 0x00, 0x70, 0x01, 0x00, 0xf0, 0x00,
0x00, 0x70, 0x00};
#define grid_width 21
#define grid_height 21
static unsigned char grid_bits[] = {
0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08,
0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f,
0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08,
0x82, 0x20, 0x08, 0xff, 0xff, 0x1f, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08,
0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0x82, 0x20, 0x08, 0xff, 0xff, 0x1f,
0x82, 0x20, 0x08};
#define what_width 50
#define what_height 21
static unsigned char what_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x42, 0x10, 0x24, 0x00, 0x00, 0x00, 0x00, 0x43, 0x10, 0x24, 0x00, 0x20,
0x00, 0x80, 0x43, 0x28, 0x24, 0x00, 0x20, 0x00, 0xc0, 0x83, 0x28, 0xa2,
0xc3, 0xf3, 0x00, 0xe0, 0x83, 0x28, 0x62, 0x66, 0x26, 0x00, 0xf0, 0x83,
0x28, 0x22, 0x04, 0x24, 0x00, 0xe0, 0x03, 0x45, 0x21, 0xc4, 0x27, 0x00,
0xc0, 0x03, 0x45, 0x21, 0x64, 0x24, 0x00, 0x80, 0x03, 0x45, 0x21, 0x24,
0x24, 0x00, 0x00, 0x03, 0x82, 0x20, 0x64, 0x26, 0x00, 0x00, 0x02, 0x82,
0x20, 0xc4, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define how_width 21
#define how_height 40
static unsigned char how_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x03, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x10, 0x00,
0x80, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1c, 0x00,
0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x80, 0x61, 0x00,
0x80, 0x40, 0x00, 0x80, 0x40, 0x00, 0x80, 0x61, 0x00, 0x00, 0x3f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x02, 0x00,
0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00,
0x00, 0x02, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#define where_width 21
#define where_height 56
static unsigned char where_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
0x00, 0x1c, 0x00, 0x80, 0x03, 0x00, 0x60, 0x00, 0x00, 0x80, 0x03, 0x00,
0x00, 0x3c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x03, 0x00,
0x60, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xe0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x08, 0x00,
0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0xe0, 0x0f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x60, 0x1a, 0x00,
0x20, 0x12, 0x00, 0x20, 0x12, 0x00, 0x60, 0x1a, 0x00, 0x40, 0x0e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00,
0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x0f, 0x00,
0x60, 0x1a, 0x00, 0x20, 0x12, 0x00, 0x20, 0x12, 0x00, 0x60, 0x1a, 0x00,
0x40, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#define orient_width 21
#define orient_height 21
static unsigned char orient_bits[] = {
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00,
0x1f, 0x00, 0x00, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00,
0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00,
0x04, 0x80, 0x01, 0x44, 0x04, 0x07, 0xff, 0xff, 0x1f, 0x44, 0x04, 0x07,
0x04, 0x80, 0x01};
#define orient_ins_width 21
#define orient_ins_height 21
static unsigned char orient_ins_bits[] = {
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00,
0x0a, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x80, 0x00, 0x44, 0x04, 0x05, 0xaa, 0xaa, 0x12, 0x44, 0x04, 0x05,
0x00, 0x80, 0x00};
#define magscale_width 21
#define magscale_height 21
static unsigned char magscale_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x88, 0x01, 0x30, 0x48, 0x01, 0x30, 0xc8, 0x01,
0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xc8, 0x01, 0x78, 0x08, 0x01, 0x78, 0xc8, 0x01, 0x30, 0x48, 0x00,
0x00, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc8, 0x01,
0xf8, 0x48, 0x01, 0xf8, 0x48, 0x01, 0xf8, 0x48, 0x01, 0x70, 0xc8, 0x01,
0x00, 0x00, 0x00};
#define planes_width 21
#define planes_height 21
static unsigned char planes_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x08, 0x06, 0x01,
0x90, 0x01, 0x02, 0x60, 0x00, 0x02, 0x60, 0x00, 0x02, 0x90, 0x00, 0x02,
0x10, 0x01, 0x02, 0x08, 0x02, 0x01, 0x08, 0x00, 0x01, 0x04, 0x80, 0x00,
0x04, 0x80, 0x00, 0x04, 0x40, 0x00, 0x04, 0x20, 0x00, 0x04, 0x98, 0x00,
0x08, 0x06, 0x01, 0xf0, 0x01, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define fliplr_width 21
#define fliplr_height 21
static unsigned char fliplr_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x00, 0x00, 0xe0, 0x00, 0xf0, 0xff, 0x03, 0x08, 0xe0, 0x00,
0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0x00, 0xc0, 0x01, 0x04, 0xf0, 0xff, 0x03, 0xc0, 0x01, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define fliptb_width 21
#define fliptb_height 21
static unsigned char fliptb_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x40, 0x40, 0x00, 0x40, 0x40, 0x00, 0x40, 0xe0, 0x00, 0x40, 0xe0, 0x00,
0x40, 0xf0, 0x01, 0x40, 0x50, 0x01, 0x40, 0x40, 0x00, 0x40, 0x40, 0x00,
0x50, 0x41, 0x00, 0xf0, 0x41, 0x00, 0xe0, 0x40, 0x00, 0xe0, 0x40, 0x00,
0x40, 0x40, 0x00, 0x40, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define horizon_width 21
#define horizon_height 21
static unsigned char horizon_bits[] = {
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xd0, 0x00, 0x00, 0xa8, 0x00, 0x00,
0x58, 0x03, 0x00, 0x84, 0x02, 0x00, 0x04, 0x04, 0x00, 0x02, 0x08, 0x00,
0x01, 0x08, 0x00, 0x10, 0x10, 0x07, 0x10, 0xa4, 0x0d, 0x38, 0xe4, 0x08,
0x10, 0x46, 0x10, 0x74, 0x4c, 0x00, 0x1c, 0x95, 0x01, 0x30, 0x0e, 0x02,
0x9c, 0x04, 0x00, 0x70, 0x04, 0x00, 0x16, 0x00, 0x00, 0xfc, 0x00, 0x00,
0x10, 0x00, 0x00};
#define cyl_width 21
#define cyl_height 21
static unsigned char cyl_bits[] = {
0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x38, 0x80, 0x03, 0x06, 0x00, 0x0c,
0x01, 0x00, 0x10, 0x01, 0x00, 0x10, 0x07, 0x00, 0x1c, 0x39, 0x80, 0x1f,
0xe1, 0xff, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f,
0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f,
0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x06, 0x80, 0x0e, 0x38, 0xc0, 0x03,
0xc0, 0x7f, 0x00};
#define cyl_ins_width 21
#define cyl_ins_height 21
static unsigned char cyl_ins_bits[] = {
0x00, 0x00, 0x00, 0x80, 0x2a, 0x00, 0x28, 0x80, 0x02, 0x02, 0x00, 0x08,
0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x04, 0x00, 0x08, 0x29, 0x00, 0x15,
0x80, 0xaa, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15,
0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15,
0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x04, 0x80, 0x0a, 0x28, 0x40, 0x01,
0x80, 0x2a, 0x00};
#define sph_width 21
#define sph_height 21
static unsigned char sph_bits[] = {
0x80, 0x3f, 0x00, 0x60, 0xf0, 0x00, 0x18, 0xe0, 0x03, 0x04, 0xd0, 0x07,
0x04, 0xa0, 0x07, 0x02, 0x40, 0x0f, 0x02, 0xa0, 0x0f, 0x01, 0x40, 0x1f,
0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f,
0x01, 0x80, 0x1e, 0x01, 0x40, 0x1f, 0x02, 0xa0, 0x0f, 0x02, 0x40, 0x0f,
0x04, 0xa0, 0x07, 0x04, 0xd0, 0x07, 0x18, 0xe0, 0x03, 0x60, 0xf0, 0x00,
0x80, 0x3f, 0x00};
#define sph_ins_width 21
#define sph_ins_height 21
static unsigned char sph_ins_bits[] = {
0x80, 0x2a, 0x00, 0x40, 0x50, 0x01, 0x10, 0xa0, 0x02, 0x04, 0x50, 0x05,
0x00, 0xa0, 0x0a, 0x02, 0x40, 0x05, 0x00, 0xa0, 0x0a, 0x01, 0x40, 0x15,
0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0x80, 0x0a, 0x01, 0x40, 0x15,
0x00, 0x80, 0x0a, 0x01, 0x40, 0x15, 0x00, 0xa0, 0x0a, 0x02, 0x40, 0x05,
0x00, 0xa0, 0x0a, 0x04, 0x50, 0x05, 0x10, 0xa0, 0x02, 0x40, 0x50, 0x01,
0x80, 0x2a, 0x00};
#define names_width 21
#define names_height 21
static unsigned char names_bits[] = {
0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00, 0x44, 0x00, 0x00,
0x44, 0x00, 0x00, 0x44, 0x77, 0x07, 0x44, 0x55, 0x05, 0x44, 0x55, 0x05,
0x44, 0x57, 0x05, 0x44, 0x51, 0x05, 0x28, 0x51, 0x05, 0x10, 0x77, 0x0f,
0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x20, 0x40, 0x00, 0x70, 0x70, 0x00,
0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define fstars_width 21
#define fstars_height 21
static unsigned char fstars_bits[] = {
0x80, 0x00, 0x48, 0xc4, 0x44, 0x41, 0x0a, 0x00, 0x90, 0x23, 0xb0, 0x28,
0x62, 0x0a, 0x85, 0x10, 0xa0, 0x10, 0xb5, 0x84, 0x2a, 0x40, 0x10, 0x61,
0x12, 0xb1, 0xb0, 0x42, 0x24, 0x01, 0x0c, 0x80, 0xc4, 0x41, 0x30, 0x02,
0x04, 0xad, 0x04, 0x82, 0x00, 0x28, 0x24, 0xa4, 0x05, 0x18, 0x01, 0x80,
0x62, 0xa4, 0x88, 0x12, 0x04, 0x04, 0x81, 0x18, 0x44, 0xc8, 0x80, 0xc0,
0x00, 0x02, 0x08};
#define smallgap_width 7
#define smallgap_height 7
static unsigned char smallgap_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#define clusters_width 21
#define clusters_height 21
static unsigned char clusters_bits[] = {
0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01,
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x04, 0x80, 0x74, 0x00,
0xc0, 0x21, 0x00, 0x88, 0x04, 0x00, 0x00, 0x5e, 0x00, 0x00, 0xe5, 0x00,
0x44, 0x40, 0x00, 0xe0, 0x12, 0x00, 0x40, 0xb8, 0x00, 0x00, 0x12, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00};
#define galaxies_width 21
#define galaxies_height 21
static unsigned char galaxies_bits[] = {
0x00, 0x07, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0x00, 0xe0, 0x60, 0x00, 0xe0,
0x10, 0x00, 0xe0, 0x70, 0x0f, 0xe0, 0x70, 0x0f, 0xe0, 0xf0, 0x1f, 0xe0,
0xf0, 0x3f, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, 0x3f, 0xe0, 0xe0, 0xff, 0xe0,
0x80, 0xff, 0xe0, 0x00, 0xef, 0xe0, 0x00, 0xc0, 0xe0, 0x00, 0xc0, 0xe0,
0x00, 0x20, 0xe0, 0x00, 0x30, 0xe0, 0x00, 0x0e, 0xe0, 0x00, 0x0e, 0xe0,
0x00, 0x00, 0xe0};
#define nebulae_width 21
#define nebulae_height 21
static unsigned char nebulae_bits[] = {
0x00, 0x06, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x80, 0xff, 0x01,
0xf0, 0xff, 0x01, 0xf0, 0xff, 0x03, 0xf0, 0xf9, 0x03, 0xf0, 0xf8, 0x03,
0x00, 0xf8, 0x07, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x03,
0x10, 0xf8, 0x07, 0xa4, 0xfa, 0x03, 0x51, 0xfd, 0x07, 0xa4, 0xfe, 0x0b,
0x52, 0xff, 0x05, 0xad, 0xff, 0x0b, 0xf2, 0xff, 0x17, 0xff, 0xff, 0x0b,
0xff, 0xff, 0x1f};
#define stars_width 21
#define stars_height 21
static unsigned char stars_bits[] = {
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x80, 0x1c, 0x00,
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x82, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00,
0x00, 0x00, 0x00};
#define other_width 21
#define other_height 21
static unsigned char other_bits[] = {
0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x10, 0x20, 0x02, 0x10, 0xd0, 0x05,
0x7c, 0x50, 0x05, 0x10, 0xd0, 0x05, 0x10, 0x20, 0x02, 0x00, 0xc0, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00,
0x80, 0x0a, 0x04, 0x00, 0x05, 0x08, 0x00, 0x02, 0x08, 0x00, 0x00, 0x08,
0x44, 0x40, 0x04, 0x6c, 0x80, 0x03, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define solsys_width 21
#define solsys_height 21
static unsigned char solsys_bits[] = {
0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0xc0, 0xf1, 0x00, 0x20, 0xe0, 0x00,
0x10, 0x00, 0x01, 0x08, 0x00, 0x02, 0x04, 0x00, 0x04, 0x04, 0x00, 0x04,
0x04, 0x0e, 0x04, 0x02, 0x1f, 0x08, 0x02, 0x1f, 0x08, 0x02, 0x1f, 0x08,
0x04, 0x0e, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x04, 0x08, 0x00, 0x02,
0x10, 0x00, 0x01, 0x20, 0x80, 0x00, 0xc0, 0x71, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x00, 0x00};
#define dss_width 21
#define dss_height 21
static unsigned char dss_bits[] = {
0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x30, 0x40, 0x0f,
0xf0, 0x7f, 0x0f, 0xfc, 0xff, 0x0b, 0x0c, 0x00, 0x0c, 0x86, 0x3f, 0x08,
0xc6, 0x7f, 0x0c, 0xe2, 0xf1, 0x08, 0x72, 0xc0, 0x0d, 0x72, 0xc2, 0x09,
0x32, 0x82, 0x0d, 0xb2, 0x8d, 0x09, 0x32, 0x82, 0x0d, 0x72, 0xc2, 0x09,
0x76, 0xc0, 0x0d, 0xe6, 0xf1, 0x08, 0xdc, 0x7f, 0x07, 0x80, 0x3f, 0x00,
0x00, 0x00, 0x00};
#define glass_width 21
#define glass_height 21
static unsigned char glass_bits[] = {
0x88, 0x80, 0x01, 0x20, 0x80, 0x01, 0x00, 0x10, 0x04, 0xf8, 0xff, 0x00,
0x09, 0x80, 0x02, 0x08, 0x80, 0x00, 0xc8, 0x80, 0x00, 0xe8, 0x81, 0x10,
0xe8, 0xc1, 0x00, 0xc8, 0xe0, 0x00, 0x0a, 0xe0, 0x06, 0x08, 0xc6, 0x06,
0x08, 0x8f, 0x00, 0x09, 0x8f, 0x08, 0x08, 0x86, 0x00, 0xfa, 0xff, 0x08,
0x40, 0x00, 0x00, 0x00, 0x86, 0x02, 0x06, 0x06, 0x00, 0x46, 0x10, 0x08,
0x00, 0x02, 0x01};
#define glass_ins_width 21
#define glass_ins_height 21
static unsigned char glass_ins_bits[] = {
0x08, 0x00, 0x01, 0x20, 0x80, 0x00, 0x00, 0x10, 0x04, 0x50, 0x55, 0x00,
0x09, 0x80, 0x02, 0x00, 0x00, 0x00, 0x48, 0x81, 0x00, 0xa0, 0x00, 0x00,
0x48, 0xa1, 0x00, 0xa0, 0x40, 0x00, 0x08, 0xa0, 0x02, 0x00, 0x45, 0x00,
0x08, 0x8a, 0x00, 0x01, 0x05, 0x08, 0x08, 0x8a, 0x00, 0x12, 0x55, 0x08,
0x40, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x02, 0x00, 0x44, 0x10, 0x00,
0x00, 0x02, 0x01};
static int glass_on;
#define report_width 21
#define report_height 21
static unsigned char report_bits[] = {
0x00, 0x00, 0x00, 0x5a, 0x60, 0x0b, 0xfa, 0x20, 0x0f, 0x00, 0x00, 0x00,
0x64, 0x20, 0x05, 0xf6, 0x60, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x00, 0x00, 0x40, 0x03, 0x00, 0x80, 0x04, 0x00, 0x80, 0x02, 0x00,
0x00, 0x05, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define slice_width 21
#define slice_height 21
static unsigned char slice_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc3, 0x03, 0xfc, 0x37, 0x04,
0x0c, 0x1e, 0x08, 0x06, 0x0c, 0x08, 0x06, 0x00, 0x08, 0x06, 0x00, 0x04,
0x04, 0x00, 0x04, 0x0c, 0x00, 0x04, 0x0c, 0x00, 0x04, 0x0c, 0x00, 0x04,
0x18, 0x00, 0x02, 0x18, 0x00, 0x02, 0x18, 0x00, 0x02, 0x30, 0x00, 0x02,
0x30, 0x00, 0x01, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define slice_ins_width 21
#define slice_ins_height 21
static unsigned char slice_ins_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x42, 0x01, 0x54, 0x15, 0x04,
0x04, 0x0a, 0x00, 0x02, 0x04, 0x08, 0x04, 0x00, 0x00, 0x02, 0x00, 0x04,
0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04,
0x10, 0x00, 0x00, 0x08, 0x00, 0x02, 0x10, 0x00, 0x00, 0x20, 0x00, 0x02,
0x10, 0x00, 0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
static int slice_on;
#define roi_width 21
#define roi_height 21
static unsigned char roi_bits[] = {
0x00, 0x00, 0x00, 0xf8, 0x7f, 0x02, 0x08, 0x40, 0x00, 0x08, 0x4f, 0x01,
0x88, 0x50, 0x00, 0x89, 0x43, 0x08, 0x88, 0x47, 0x01, 0x88, 0x47, 0x0c,
0x08, 0x47, 0x0c, 0x28, 0x44, 0x00, 0xca, 0x43, 0x00, 0x08, 0x40, 0x08,
0x08, 0x40, 0x00, 0xf8, 0xff, 0x00, 0x02, 0x40, 0x03, 0x00, 0x81, 0x04,
0x00, 0x81, 0x02, 0x44, 0x10, 0x05, 0x0e, 0x02, 0x08, 0x04, 0x00, 0x00,
0x00, 0x08, 0x00};
static int roi_on;
#define roi_ins_width 21
#define roi_ins_height 21
static unsigned char roi_ins_bits[] = {
0x00, 0x00, 0x00, 0xa8, 0x2a, 0x02, 0x00, 0x40, 0x00, 0x28, 0x05, 0x01,
0x00, 0x50, 0x02, 0x89, 0x02, 0x09, 0x00, 0x45, 0x01, 0x88, 0x02, 0x00,
0x00, 0x45, 0x00, 0x28, 0x00, 0x02, 0x82, 0x42, 0x00, 0x08, 0x00, 0x08,
0x00, 0x40, 0x00, 0xa8, 0xaa, 0x00, 0x02, 0x40, 0x03, 0x00, 0x81, 0x00,
0x00, 0x81, 0x02, 0x44, 0x10, 0x00, 0x0e, 0x02, 0x08, 0x04, 0x00, 0x00,
0x00, 0x08, 0x00};
#define snap_width 21
#define snap_height 21
static unsigned char snap_bits[] = {
0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0xc0, 0x00, 0x0c, 0xe0, 0x01,
0x06, 0xe0, 0x01, 0x02, 0xc0, 0x00, 0x11, 0x00, 0x00, 0x31, 0x0f, 0x00,
0xe3, 0x1f, 0x00, 0xfe, 0x1f, 0x00, 0xe0, 0x1f, 0x08, 0xb0, 0x1f, 0x08,
0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x82, 0x00, 0x06, 0x07, 0x10, 0x00, 0x02, 0x00, 0x00, 0x60, 0x00,
0x00, 0x60, 0x00};
#define snap_ins_width 21
#define snap_ins_height 21
static unsigned char snap_ins_bits[] = {
0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x80, 0x00, 0x08, 0x40, 0x01,
0x04, 0x80, 0x00, 0x02, 0x00, 0x00, 0x11, 0x05, 0x00, 0xa0, 0x0a, 0x00,
0x41, 0x15, 0x00, 0xaa, 0x0a, 0x00, 0x40, 0x15, 0x08, 0xa0, 0x0a, 0x00,
0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x04, 0x82, 0x00, 0x02, 0x05, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00};
static int snap_on;
#define monument_width 21
#define monument_height 21
static unsigned char monument_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00,
0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x80, 0x3b, 0x00,
0x80, 0x35, 0x00, 0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define monument_ins_width 21
#define monument_ins_height 21
static unsigned char monument_ins_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00,
0x00, 0x0a, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x04, 0x00,
0x00, 0x0a, 0x00, 0x00, 0x15, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x15, 0x00,
0x00, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x15, 0x00, 0x80, 0x2a, 0x00,
0x00, 0x15, 0x00, 0x80, 0x2a, 0x00, 0x40, 0x55, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
static int monument_on;
#define contrast_width 21
#define contrast_height 21
static unsigned char contrast_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7c, 0x00, 0x40, 0x7c, 0x00,
0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00, 0x20, 0xfc, 0x00,
0x20, 0xfc, 0x00, 0x40, 0x7c, 0x00, 0xc0, 0x7c, 0x00, 0x00, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
#define contrast_ins_width 21
#define contrast_ins_height 21
static unsigned char contrast_ins_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x80, 0x54, 0x00, 0x40, 0xa8, 0x00,
0x00, 0x54, 0x00, 0x20, 0xa8, 0x00, 0x00, 0x54, 0x00, 0x20, 0xa8, 0x00,
0x00, 0x54, 0x00, 0x40, 0xa8, 0x00, 0x80, 0x54, 0x00, 0x00, 0x2a, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00};
static int contrast_on;
#define gauss_width 21
#define gauss_height 21
static unsigned char gauss_bits[] = {
0x03, 0x0e, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x80, 0x20, 0x00,
0x87, 0x20, 0x00, 0x80, 0x20, 0x00, 0x40, 0x40, 0x00, 0x40, 0x40, 0x00,
0x43, 0x40, 0x00, 0x40, 0x40, 0x00, 0x20, 0x91, 0x00, 0xe0, 0xff, 0x00,
0x27, 0x91, 0x00, 0x20, 0x80, 0x00, 0x20, 0x80, 0x00, 0x10, 0x00, 0x01,
0x13, 0x00, 0x01, 0x18, 0x00, 0x03, 0x0c, 0x04, 0x06, 0x4c, 0x44, 0x06,
0x47, 0x44, 0x1c};
#define gauss_ins_width 21
#define gauss_ins_height 21
static unsigned char gauss_ins_bits[] = {
0x02, 0x04, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00,
0x05, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
0x02, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x11, 0x00, 0xa0, 0xaa, 0x00,
0x05, 0x11, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01,
0x02, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x48, 0x40, 0x02,
0x05, 0x04, 0x14};
static int gauss_on;
typedef enum {
LTB, TTB, RTB
} TBWhere;
typedef struct {
TBWhere where; /* which toolbar */
int tb; /* TB, else PB (or Label if !tip) */
int igonly; /* 1=for images only, 2=gr only 3=either ok */
char *tip; /* tip text, or NULL */
unsigned char *bits; /* bitmap pattern */
unsigned char *insbits; /* bitmap pattern when insensitive, if any */
int w, h; /* bitmap size */
XtCallbackProc cb; /* callback when activated or changed */
XtPointer client; /* client arg, if any */
char *ct; /* svf class table, also implies make TB */
ObjType_t tt[NOBJTYPES]; /* svf type table, also implies make TB */
Widget wid; /* widget */
Pixmap pm, ipm; /* normal and insensitive pixmaps */
} SVTBarItem;
static SVTBarItem svtb[] = {
/* corner is DSS */
{TTB, 0, 3, "Fetch and display DSS image",
dss_bits, 0, dss_width, dss_height, sf_go_cb, 0},
/* top bar is for "what" */
{TTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{TTB, 1, 3, "Toggle coordinate grid underlay matching display mode, or Off",
grid_bits, 0, grid_width, grid_height, svtb_grid_cb, 0},
{TTB, 1, 3,"Toggle horizon line and cutoff (if Alt/Az mode) off or restore",
horizon_bits, 0, horizon_width, horizon_height, svtb_hzn_cb, 0},
{TTB, 1, 3, "Toggle constellations graphics and names off or restore",
constel_bits, 0, constel_width, constel_height, svtb_constel_cb, 0},
{TTB, 1, 3, "Toggle object names off or restore",
names_bits, 0, names_width, names_height, svtb_names_cb, 0},
{TTB, 1, 3, "Toggle magnitude key on or off",magscale_bits,0,magscale_width,
magscale_height, svtb_magscale_cb, 0},
{TTB, 1, 3, "Turn Equatorial, Ecliptic and Galactic planes on or off",
planes_bits, 0, planes_width, planes_height, svtb_planes_cb, 0},
{TTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{TTB, 1, 3, "Toggle Solar System objects on or off",
solsys_bits, 0, solsys_width, solsys_height, svtb_tt_cb, 0,
NULL, {ELLIPTICAL, HYPERBOLIC, PARABOLIC, PLANET, EARTHSAT}},
{TTB, 1, 3, "Toggle Clusters on or off",
clusters_bits, 0, clusters_width, clusters_height, svtb_ct_cb, 0,
"COU"},
{TTB, 1, 3, "Toggle Galaxies on or off",
galaxies_bits, 0, galaxies_width, galaxies_height, svtb_ct_cb, 0,
"GHA"},
{TTB, 1, 3, "Toggle Nebulae on or off",
nebulae_bits, 0, nebulae_width, nebulae_height, svtb_ct_cb, 0,
"NFKP"},
{TTB, 1, 3, "Toggle Other types on or off",
other_bits, 0, other_width, other_height, svtb_ct_cb, 0,
"QLJYR"},
{TTB, 1, 3, "Toggle Stars on or off",
stars_bits, 0, stars_width, stars_height, svtb_ct_cb, 0,
"SBDMVT"},
{TTB, 1, 3, "Toggle automatic Field Star loading and display on or off",
fstars_bits, 0, fstars_width, fstars_height, svtb_fstars_cb, 0},
{TTB, 0, 0, NULL, what_bits, 0, what_width, what_height, NULL, 0},
/* left bar is for "how" */
{LTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{LTB, 0, 3, "Set all magnitude limits one fainter",
brighter_bits, 0, brighter_width, brighter_height, svtb_brighter_cb, 0},
{LTB, 0, 3, "Set all magnitude limits one brighter",
dimmer_bits, 0, dimmer_width, dimmer_height, svtb_dimmer_cb, 0},
{LTB, 1, 3, "Toggle automatic magnitude control on or off",
automag_bits, 0, automag_width, automag_height, svtb_automag_cb, 0},
{LTB, 1, 1, "3d Monument image view", monument_bits, monument_ins_bits,
monument_width, monument_height, svtb_monument_cb, NULL},
{LTB, 1, 1, "Brightness and Contrast control", contrast_bits,
contrast_ins_bits, contrast_width, contrast_height, svtb_contrast_cb,
NULL},
{LTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{LTB, 0, 2, "Toggle between Alt-Az and RA-Dec orientation", orient_bits,
orient_ins_bits, orient_width, orient_height, svtb_orient_cb, 0},
{LTB, 1, 2, "Set Spherical projection mode",
sph_bits, sph_ins_bits, sph_width, sph_height, svtb_sph_cb, 0},
{LTB, 1, 2, "Set Cylindrical projection mode",
cyl_bits, cyl_ins_bits, cyl_width, cyl_height, svtb_proj_cb, 0},
{LTB, 1, 3, "Flip Left/Right",
fliplr_bits, 0, fliplr_width, fliplr_height, svtb_flip_cb, 0},
{LTB, 1, 3, "Flip Top/Bottom",
fliptb_bits, 0, fliptb_width, fliptb_height, svtb_flip_cb,(XtPointer)1},
{LTB, 0, 0, NULL, how_bits, 0, how_width, how_height, NULL, 0},
/* right bar is "where" */
{RTB, 1, 3, "Toggle live report in corners", report_bits, NULL,
report_width, report_height, svtb_report_cb, NULL},
{RTB, 0, 3, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{RTB, 0, 3, "Zoom in so selected region expands to fill the window",
zoomin_bits, zoomin_ins_bits, zoomin_width, zoomin_height,
svtb_zoomin_cb, 0},
{RTB, 0, 3, "Undo last Zoom",
unzoom_bits, unzoom_ins_bits, unzoom_width, unzoom_height,
svtb_unzoom_cb, 0},
{RTB, 1, 3, "Draw region of interest", roi_bits, roi_ins_bits,
roi_width, roi_height, svtb_roi_cb, NULL},
{RTB, 0, 0, NULL, smallgap_bits, 0, smallgap_width, smallgap_height},
{RTB, 1, 1, "Enable magnifying glass", glass_bits, glass_ins_bits,
glass_width, glass_height, svtb_glass_cb, NULL},
{RTB, 1, 1, "Climb gradient to max", snap_bits, snap_ins_bits, snap_width,
snap_height, svtb_toggle_cb, (XtPointer)&snap_on},
{RTB, 1, 1, "Plot along a cross-sectional slice", slice_bits,slice_ins_bits,
slice_width, slice_height, svtb_slice_cb, NULL},
{RTB, 1, 1, "Measure and compare star brightness", gauss_bits,
gauss_ins_bits, gauss_width, gauss_height, svtb_gauss_cb, NULL},
{RTB, 0, 0, NULL, where_bits, 0, where_width, where_height, NULL, 0},
};
/* search for the SVTBarItem containing the bitmaps bits */
static SVTBarItem *
findSVTB (bits)
unsigned char *bits;
{
SVTBarItem *sp;
for (sp = svtb; sp < &svtb[XtNumber(svtb)]; sp++)
if (sp->bits == bits)
return (sp);
printf ("Bug! Can not find SVTB\n");
abort();
return(0); /* ! */
}
/* go through each toolbar TB and PB set its pixmap
* rc_w is just any manager in Sky View we can use to make a temp TB to learn
* current color scheme.
*/
void
svtb_newpm (rc_w)
Widget rc_w;
{
static Pixel last_fg, last_bg;
Display *dsp = XtDisplay(toplevel_w);
Window win = RootWindow (dsp, DefaultScreen(dsp));
Arg args[20];
Pixel fg, bg;
Widget w;
int n;
int d;
int i;
/* make a temp TB just so we can sneak its colors and depth.
* turns out Motif 1.2 can not handle a Bitmap and 2.x can, but we
* go the conservative route.
*/
n = 0;
w = XmCreateToggleButton (rc_w, "TMP", args, n);
n = 0;
XtSetArg (args[n], XmNforeground, &fg); n++;
XtSetArg (args[n], XmNbackground, &bg); n++;
XtSetArg (args[n], XmNdepth, &d); n++;
XtGetValues (w, args, n);
XtDestroyWidget (w);
/* don't bother if no change .. avoids extra blinking */
if (fg == last_fg && bg == last_bg)
return;
last_fg = fg;
last_bg = bg;
for (i = 0; i < XtNumber(svtb); i++) {
SVTBarItem *ip = &svtb[i];
if (ip->pm)
XFreePixmap (dsp, ip->pm);
ip->pm = XCreatePixmapFromBitmapData (dsp, win, (char *)ip->bits,
ip->w, ip->h, fg, bg, d);
set_something (ip->wid, XmNlabelPixmap, (XtArgVal)(ip->pm));
if (ip->insbits) {
if (ip->ipm)
XFreePixmap (dsp, ip->ipm);
ip->ipm = XCreatePixmapFromBitmapData (dsp, win,
(char *)ip->insbits, ip->w, ip->h, fg, bg, d);
set_something (ip->wid, XmNlabelInsensitivePixmap,
(XtArgVal)(ip->ipm));
}
}
}
/* create top/left/right toolbar controls in the given RowColumn widgets */
void
svtb_create (trc_w, lrc_w, rrc_w)
Widget trc_w, lrc_w, rrc_w;
{
SVTBarItem *ip;
Arg args[20];
Widget rc_w, w;
int i;
int n;
/* create the widgets */
for (i = 0; i < XtNumber(svtb); i++) {
ip = &svtb[i];
rc_w= ip->where == LTB ? lrc_w : (ip->where == RTB ? rrc_w : trc_w);
n = 0;
XtSetArg (args[n], XmNlabelType, XmPIXMAP); n++;
if (!ip->tip) {
w = XmCreateLabel (rc_w, "SVTBL", args, n);
} else if (ip->tb) {
XtPointer client;
/* N.B. we rely on resources to set shadowThickness > 0 */
XtSetArg (args[n], XmNindicatorOn, False); n++;
w = XmCreateToggleButton (rc_w, "SVTBTB", args, n);
if (ip->ct)
client = (XtPointer)ip->ct;
else if (ip->tt[0])
client = (XtPointer)ip->tt;
else
client = ip->client;
if (ip->cb)
XtAddCallback (w, XmNvalueChangedCallback, ip->cb, client);
wtip (w, ip->tip);
} else {
w = XmCreatePushButton (rc_w, "SVTBPB", args, n);
if (ip->cb)
XtAddCallback (w, XmNactivateCallback, ip->cb, ip->client);
wtip (w, ip->tip);
}
XtManageChild (w);
ip->wid = w;
}
/* create their pixmaps */
svtb_newpm (trc_w);
/* no zooming until ROI defined */
svtb_zoomok(0);
svtb_unzoomok(0);
/* add radio-box behavior to sph/cyl pair */
ip = findSVTB (cyl_bits);
XtAddCallback (ip->wid, XmNvalueChangedCallback, svtb_cyl_cb, 0);
}
/* called to desensitize those controls inappropriate to images.
* TODO N.B. zoom/unzoom ain't this easy .. they come and go based on their
* stack and svtb_iszoomok() tests it directly. Need to implement non-Sen
* version of iszoomok then teach callbacks to tolerate stack end cases and
* implement image cropping.
*/
void
svtb_imMode (on)
int on;
{
Widget zi = findSVTB(zoomin_bits)->wid;
Widget uz = findSVTB(unzoom_bits)->wid;
int i;
/* important it be 1 or 0 */
on = !!on;
for (i = 0; i < XtNumber(svtb); i++) {
SVTBarItem *sp = &svtb[i];
/* !tip implies label */
if (sp->tip && sp->wid != zi && sp->wid != uz)
XtSetSensitive(sp->wid, (on && (sp->igonly & 1)) ||
(!on && (sp->igonly & 2)));
}
}
/* return 1 if zooming now is ok, else 0 */
int
svtb_iszoomok(void)
{
return (XtIsSensitive(findSVTB(zoomin_bits)->wid));
}
/* show whether zooming now is ok */
void
svtb_zoomok(ok)
int ok;
{
XtSetSensitive (findSVTB(zoomin_bits)->wid, ok);
}
/* set whether unzooming now is ok */
void
svtb_unzoomok(ok)
int ok;
{
XtSetSensitive (findSVTB(unzoom_bits)->wid, ok);
}
/* call to set the Grid TB */
void
svtb_updateGrid (on)
int on;
{
XmToggleButtonSetState (findSVTB(grid_bits)->wid, on, False);
}
/* call to set the LR flip TB */
void
svtb_updateLRFlip (on)
int on;
{
XmToggleButtonSetState (findSVTB(fliplr_bits)->wid, on, False);
}
/* call to set the TB flip TB */
void
svtb_updateTBFlip (on)
int on;
{
XmToggleButtonSetState (findSVTB(fliptb_bits)->wid, on, False);
}
/* call to set the Horizon TB */
void
svtb_updateHorizon (on)
int on;
{
XmToggleButtonSetState (findSVTB(horizon_bits)->wid, on, False);
}
/* call to set the Field Stars TB */
void
svtb_updateFStars (on)
int on;
{
XmToggleButtonSetState (findSVTB(fstars_bits)->wid, on, False);
}
/* call to set the Cns TB */
void
svtb_updateCns (on)
int on;
{
XmToggleButtonSetState (findSVTB(constel_bits)->wid, on, False);
}
/* call to set the Automag TB */
void
svtb_updateAutoMag (on)
int on;
{
XmToggleButtonSetState (findSVTB(automag_bits)->wid, on, False);
}
/* call to set the Cyl and Sph projection TBs */
void
svtb_updateCyl (on)
int on;
{
XmToggleButtonSetState (findSVTB(cyl_bits)->wid, on, False);
XmToggleButtonSetState (findSVTB(sph_bits)->wid, !on, False);
}
/* call to set the Names TB */
void
svtb_updateNames (on)
int on;
{
XmToggleButtonSetState (findSVTB(names_bits)->wid, on, False);
}
/* call to set the Planes TB */
void
svtb_updatePlanes (on)
int on;
{
XmToggleButtonSetState (findSVTB(planes_bits)->wid, on, False);
}
/* call to set the MagScale TB */
void
svtb_updateMagScale (on)
int on;
{
XmToggleButtonSetState (findSVTB(magscale_bits)->wid, on, False);
}
/* call to set the LiveReport TB */
void
svtb_updateReport (on)
int on;
{
XmToggleButtonSetState(findSVTB(report_bits)->wid, on, False);
}
/* call to set the Slice TB */
void
svtb_updateSlice (on)
int on;
{
XmToggleButtonSetState (findSVTB(slice_bits)->wid, slice_on=on, False);
}
/* call to set the ROI TB */
void
svtb_updateROI (on)
int on;
{
XmToggleButtonSetState (findSVTB(roi_bits)->wid, roi_on=on, False);
}
/* call to set the Gauss TB */
void
svtb_updateGauss (on)
int on;
{
XmToggleButtonSetState(findSVTB(gauss_bits)->wid, gauss_on=on, False);
}
/* call to set the Contrast TB */
void
svtb_updateContrast (on)
int on;
{
XmToggleButtonSetState(findSVTB(contrast_bits)->wid, contrast_on=on, 0);
}
/* call to set the Glass TB */
void
svtb_updateGlass (on)
int on;
{
XmToggleButtonSetState(findSVTB(glass_bits)->wid, glass_on=on, False);
}
/* call to set the Class and Solsys TB according to svf filter tables */
void
svtb_updateCTTT(ct, tt)
char ct[NCLASSES];
char tt[NOBJTYPES];
{
int i, j;
/* beware being called before being initialized */
if (!svtb[0].w)
return;
/* search each TB involved with a filter */
for (i = 0; i < XtNumber(svtb); i++) {
SVTBarItem *ip = &svtb[i];
if (ip->ct) {
int l = strlen (ip->ct);
int set = 0;
/* set if any classes for this TB are set */
for (j = 0; j < l; j++) {
if (ct[(int)ip->ct[j]]) {
set = 1;
break;
}
}
XmToggleButtonSetState (ip->wid, set, False);
}
if (ip->tt[0]) {
int set = 0;
/* set if any types for this TB are set */
for (j = 0; j < NOBJTYPES; j++) {
if (tt[(int)ip->tt[j]]) {
set = 1;
break;
}
}
XmToggleButtonSetState (ip->wid, set, False);
}
}
}
/* whether monument view */
int
svtb_monumentIsOn (void)
{
return (monument_on);
}
/* whether snap-to-max is on */
int
svtb_snapIsOn (void)
{
return (snap_on);
}
/* whether slice is on */
int
svtb_sliceIsOn (void)
{
return (slice_on);
}
/* whether ROI is on */
int
svtb_ROIIsOn (void)
{
return (roi_on);
}
/* whether glass is on */
int
svtb_glassIsOn (void)
{
return (glass_on);
}
/* whether gauss is on */
int
svtb_gaussIsOn (void)
{
return (gauss_on);
}
/* callback from any of the Class TBs.
* client is ct list.
*/
static void
svtb_ct_cb (Widget w, XtPointer client, XtPointer call)
{
int set = XmToggleButtonGetState(w);
char *types = (char *)client;
char tt[NOBJTYPES];
char ct[NCLASSES];
int ntypes;
int i;
svf_gettables (tt, ct);
ntypes = strlen(types);
for (i = 0; i < ntypes; i++) {
ct[(int)types[i]] = set;
if (types[i] == 'B')
tt[BINARYSTAR] = set;
}
svf_settables (tt, ct);
sv_all(mm_get_now());
}
/* callback from the solsys TB.
* client is tt list.
*/
static void
svtb_tt_cb (Widget w, XtPointer client, XtPointer call)
{
int set = XmToggleButtonGetState(w);
ObjType_t *types = (ObjType_t *)client;
char tt[NOBJTYPES];
char ct[NCLASSES];
int i;
svf_gettables (tt, ct);
for (i = 0; i < NOBJTYPES; i++)
if (types[i])
tt[(int)types[i]] = set;
svf_settables (tt, ct);
sv_all(mm_get_now());
}
/* called when the Sph TB changes.
* activate the Cyl TB to the opposite state.
*/
static void
svtb_sph_cb (Widget w, XtPointer client, XtPointer call)
{
SVTBarItem *ip = findSVTB (cyl_bits);
XmToggleButtonSetState (ip->wid, !XmToggleButtonGetState(w), True);
}
/* called when the Cyl TB changes.
* slace the Sph TB to the opposite state.
*/
static void
svtb_cyl_cb (Widget w, XtPointer client, XtPointer call)
{
SVTBarItem *ip = findSVTB (sph_bits);
XmToggleButtonSetState (ip->wid, !XmToggleButtonGetState(w), False);
}
/* fast control of a simple toggle setting.
* client is addr of int to set.
*/
static void
svtb_toggle_cb (Widget w, XtPointer client, XtPointer call)
{
*(int *)client = XmToggleButtonGetState(w);
}
/* monument toggle */
static void
svtb_monument_cb (Widget w, XtPointer client, XtPointer call)
{
monument_on = XmToggleButtonGetState(w);
if (si_ison())
sv_dspFITS();
}
/* contrast toggle */
static void
svtb_contrast_cb (Widget w, XtPointer client, XtPointer call)
{
contrast_on = XmToggleButtonGetState(w);
si_updateContrast(contrast_on);
}
/* glass toggle */
static void
svtb_glass_cb (Widget w, XtPointer client, XtPointer call)
{
glass_on = XmToggleButtonGetState(w);
si_updateGlass(glass_on);
}
/* roi toggle */
static void
svtb_roi_cb (Widget w, XtPointer client, XtPointer call)
{
roi_on = XmToggleButtonGetState(w);
si_updateROI(roi_on);
}
/* gauss toggle */
static void
svtb_gauss_cb (Widget w, XtPointer client, XtPointer call)
{
gauss_on = XmToggleButtonGetState(w);
si_updateGauss(gauss_on);
}
/* slice toggle */
static void
svtb_slice_cb (Widget w, XtPointer client, XtPointer call)
{
slice_on = XmToggleButtonGetState(w);
si_updateSlice(slice_on);
}