1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
#include <stdio.h>
#include "fppxp.h"
#include <support.h>
#include <xcio.h>
extern FL_OBJECT **CreateMessagePanel();
extern FL_OBJECT **CreateIpPanel();
extern FL_OBJECT **CreateMonitorPanel();
extern FL_OBJECT **CreateUserPanel();
extern void UpdateIpPanel(), ActivateIpPanel();
extern void UpdateMonitorPanel(), ActivateMonitorPanel();
extern void ActivateUserPanel();
static struct {
FL_OBJECT *tag, **objs;
FL_OBJECT **(*create)();
void (*update)(), (*activate)();
const char *name, *key;
} *current, panels[]={
{
0, 0,
CreateMonitorPanel, UpdateMonitorPanel, ActivateMonitorPanel,
"Monitor", "#M"
}, {
0, 0,
CreateIpPanel, UpdateIpPanel, ActivateIpPanel,
"IP", "#I"
}, {
0, 0,
CreateUserPanel, NULL, ActivateUserPanel,
"User", "#U"
},
/* {NULL, NULL, CreateMessagePanel, "Message", "#E"},*/
};
enum {
MONITOR_PANEL,
IP_PANEL,
USER_PANEL,
/* MESSAGE_PANEL,*/
MAX_PANELS
};
#define PANEL_WIDTH 250
#define PANEL_HEIGHT 150
#define TAG_WIDTH 50
#define TAG_HEIGHT 20
static FL_OBJECT *tagObj;
static void
TagCallBack(FL_OBJECT *obj, long arg)
{
int n = fl_get_notetag(obj);
if (current == &panels[n]) return;
current->activate(FALSE);
fl_redraw_object(obj);
current = &panels[n];
current->activate(TRUE);
}
void
UpdatePanels(struct pppinfo_s *old, struct pppinfo_s *new)
{
if (current->update) current->update(old, new);
}
void
CreatePanels(FL_FORM *form)
{
FL_OBJECT *obj;
int i, n, x, bw;
char *names[MAX_PANELS];
x = FRAME_GAP;
obj = fl_add_box(FL_FRAME_BOX, x, FRAME_GAP,
PANEL_WIDTH, PANEL_HEIGHT, "");
fl_set_object_color(obj, FL_DARKORANGE, FL_COL1);
bw = obj->bw;
obj = fl_add_notetag(FL_NORMAL_NOTETAG, obj->x + obj->bw,
obj->y + obj->bw, obj->w - (obj->bw << 1),
obj->h - (obj->bw << 1), "");
fl_set_object_color(obj, FL_MCOL, FL_MCOL);
fl_set_object_boxtype(obj, FL_SHADOW_BOX);
for (n = 0; n < MAX_PANELS; n ++) names[n] = panels[n].name;
fl_setup_notetag(obj, names, MAX_PANELS);
/* fl_set_notetag_color(obj, 1, FL_RED);*/
fl_set_object_callback(obj, TagCallBack, 0);
tagObj = obj;
x += bw;
for (n = 0; n < MAX_PANELS; n ++) {
if (panels[n].create) {
panels[n].objs = panels[n].create(FRAME_GAP + bw,
FRAME_GAP + TAG_HEIGHT +
bw,
PANEL_WIDTH - bw * 2,
PANEL_HEIGHT - TAG_HEIGHT
- bw * 2, "");
for (i = 0; panels[n].objs[i]; i ++) {
fl_deactivate_object(panels[n].objs[i]);
fl_hide_object(panels[n].objs[i]);
}
}
/*
obj = fl_add_button(FL_PUSH_BUTTON, x, FRAME_GAP + bw,
TAG_WIDTH, TAG_HEIGHT, panels[n].name);
x += TAG_WIDTH;
fl_set_object_boxtype(obj, FL_FLAT_BOX);
fl_set_object_color(obj, FL_DARKORANGE, FL_MCOL);
fl_set_object_callback(obj, TagsCallBack, n);
fl_set_object_shortcut(obj, panels[n].key, 1);
panels[n].tag = obj;
*/
if (!current) current = &panels[n];
}
current->activate(TRUE);
}
|