📄 _panel.c
字号:
PANEL_VALUE_STORED_LENGTH, 256,
0);
#ifdef XVIEW
if (n>0)
{
menu = (Menu)window_create(NULL, MENU,
MENU_NCOLS, cols,
MENU_CLIENT_DATA, p->string_item[p->string_count],
MENU_NOTIFY_PROC, menu_proc,
0);
for(i=0;i<n;i++) menu_set(menu,MENU_STRING_ITEM,items[i],i,0);
(void) window_create(p->panel, PANEL_BUTTON,
PANEL_LABEL_STRING, menu_label,
PANEL_ITEM_MENU, menu,
0);
}
#else
if (n > 0)
{
sprintf(menu_l,"%s -> ",menu_label);
menu_label = menu_l;
menu = menu_create(MENU_NCOLS, cols,
MENU_NOTIFY_PROC, menu_return_item,
0);
for(i=0;i<n;i++) menu_set(menu,MENU_STRING_ITEM,items[i],i,0);
panel_create_item(p->panel, PANEL_BUTTON,
PANEL_LABEL_IMAGE,panel_button_image(p->panel,menu_label,0,0),
PANEL_EVENT_PROC, panel_menu_proc,
PANEL_CLIENT_DATA,p->string_count,
0);
}
p->string_menu[p->string_count] = menu;
#endif
p->string_count++;
}
void x_draw_panel_string_item(p,text,s)
leda_panel p;
char* text;
char* s;
{ x_draw_panel_string_menu_item(p,text,s,"",0,0); }
void x_draw_panel_int_item(p,text,i)
leda_panel p;
char* text;
int* i;
{
char s[32];
if (p->int_count == MAX_ITEM) return;
sprintf(s,"%d",*i);
p->panel_row+=40;
p->int_ref[p->int_count] = i;
p->int_item[p->int_count] = panel_create_item(p->panel, PANEL_TEXT,
PANEL_ITEM_X, 20,
PANEL_ITEM_Y, p->panel_row,
PANEL_LABEL_STRING, text,
PANEL_VALUE,s,
PANEL_VALUE_X,180,
PANEL_LABEL_X,20,
PANEL_VALUE_DISPLAY_LENGTH, 10,
PANEL_VALUE_STORED_LENGTH, 32,
0);
/*
p->int_item[p->int_count] = panel_create_item(p->panel, PANEL_NUMERIC_TEXT,
PANEL_ITEM_X, 20,
PANEL_ITEM_Y, p->panel_row,
PANEL_LABEL_STRING, text,
PANEL_VALUE, *i,
PANEL_MIN_VALUE, -MAXINT,
PANEL_MAX_VALUE, MAXINT,
PANEL_VALUE_X,180,
PANEL_LABEL_X,20,
PANEL_VALUE_DISPLAY_LENGTH, 10,
NULL);
*/
p->int_count++;
}
void x_draw_panel_float_item(p,text,f)
leda_panel p;
char* text;
double* f;
{
char s[256];
sprintf(s,"%f",*f);
if (p->float_count == MAX_ITEM) return;
p->panel_row+=40;
p->float_item[p->float_count] = panel_create_item(p->panel, PANEL_TEXT,
PANEL_ITEM_X, 20,
PANEL_ITEM_Y, p->panel_row,
PANEL_LABEL_STRING, text,
PANEL_VALUE, s,
PANEL_VALUE_X,180,
PANEL_LABEL_X,20,
PANEL_VALUE_DISPLAY_LENGTH, 10,
PANEL_VALUE_STORED_LENGTH, 256,
0);
p->float_ref[p->float_count] = f;
p->float_count++;
}
int x_draw_panel_button(p,button)
leda_panel p;
char* button;
{
Rect *r;
int i;
if (p->but_count == MAX_BUT) return;
p->but_centered[p->but_count] = 0;
if (p->but_line_count==0)
{
if (p->panel_row==0)
p->panel_row = 20;
else
if (p->but_count==0)
p->panel_row+=50;
else
p->panel_row+=35;
p->but_item[p->but_count] = panel_create_item(p->panel, PANEL_BUTTON,
#ifdef XVIEW
PANEL_LABEL_STRING, button,
#else
PANEL_LABEL_IMAGE,panel_button_image(p->panel,button,0,0),
#endif
PANEL_NOTIFY_PROC, panel_button_notify,
PANEL_CLIENT_DATA,p->but_count,
PANEL_ITEM_Y, p->panel_row,
PANEL_ITEM_X,20,
0);
}
else
{
p->but_item[p->but_count] = panel_create_item(p->panel, PANEL_BUTTON,
#ifdef XVIEW
PANEL_LABEL_STRING, button,
#else
PANEL_LABEL_IMAGE,panel_button_image(p->panel,button,0,0),
#endif
PANEL_NOTIFY_PROC, panel_button_notify,
PANEL_CLIENT_DATA,p->but_count,
PANEL_ITEM_Y, p->panel_row,
0);
if ( panel_get(p->but_item[p->but_count],PANEL_ITEM_X)
< panel_get(p->but_item[p->but_count-1],PANEL_ITEM_X) )
{ /* new line */
p->panel_row += 35;
p->but_line_count = 0;
panel_set(p->but_item[p->but_count],PANEL_ITEM_Y,p->panel_row,0);
p->button_width = (int) window_get(p->panel,WIN_WIDTH) - 10;
}
}
p->but_line_count++;
p->but_count++;
}
int x_draw_panel_button_line(p,n,buttons)
leda_panel p;
int n;
char** buttons;
{ int i;
int w;
Panel_item dummy;
for(i=0; i<n; i++) x_draw_panel_button(p,buttons[i]);
dummy = panel_create_item(p->panel, PANEL_BUTTON, PANEL_ITEM_Y, p->panel_row, 0);
w = (int)panel_get(dummy,PANEL_ITEM_X);
panel_destroy_item(dummy);
if (w < (int)panel_get(p->but_item[p->but_count-1],PANEL_ITEM_X))
p->button_width = (int)window_get(p->panel,WIN_WIDTH) - 10;
else
if (w > p->button_width) p->button_width = w;
p->but_line_count = 0;
}
void x_draw_panel_label(p,label)
leda_panel p;
char* label;
{ window_set(p->panel_frame,FRAME_LABEL, label,0); }
int x_draw_panel_open(p,left,top,win_left,win_top,win_width,win_height)
leda_panel p;
int left,top;
int win_left;
int win_top;
int win_width;
int win_height;
{
Panel_item cont_but, quit_but;
Rect *r;
int width,height,delta;
int i;
current_panel = p;
if (p->but_count == 0) /* default buttons: continue /quit */
{
p->panel_row+=50;
cont_but = panel_create_item(p->panel, PANEL_BUTTON,
#ifdef XVIEW
PANEL_LABEL_STRING, "continue",
#else
PANEL_LABEL_IMAGE,panel_button_image(p->panel,"continue",0,0),
#endif
PANEL_NOTIFY_PROC, panel_button_notify,
PANEL_CLIENT_DATA,-1,
PANEL_ITEM_Y, p->panel_row,
PANEL_ITEM_X, 180,
0);
quit_but = panel_create_item(p->panel, PANEL_BUTTON,
#ifdef XVIEW
PANEL_LABEL_STRING, "quit",
#else
PANEL_LABEL_IMAGE,panel_button_image(p->panel,"quit",0,0),
#endif
PANEL_NOTIFY_PROC, panel_button_notify,
PANEL_CLIENT_DATA,-2,
PANEL_ITEM_Y, p->panel_row,
0);
}
else
if (p->but_line_count > 0) x_draw_panel_button_line(p,0,0);
#ifndef XVIEW
panel_create_item(p->panel, PANEL_MESSAGE,
PANEL_LABEL_BOLD, TRUE,
PANEL_LABEL_STRING, " ",
PANEL_ITEM_X, 20,
PANEL_ITEM_Y, p->panel_row+25,
0);
#endif
window_fit(p->panel);
window_fit(p->panel_frame);
/* center buttons */
delta = ((int) window_get(p->panel,WIN_WIDTH) - p->button_width - 10)/2;
for (i=0;i<p->but_count;i++)
if (p->but_centered[i] == 0)
{ panel_set(p->but_item[i],PANEL_ITEM_X,
panel_get(p->but_item[i],PANEL_ITEM_X) + delta, 0);
p->but_centered[i] = 1;
}
if (left<0 || top <0)
{
/* center panel frame on the screen */
width = (int) window_get(p->panel_frame, WIN_WIDTH);
height = (int) window_get(p->panel_frame, WIN_HEIGHT);
if (win_width == 0)
{ r = (Rect *) window_get(p->panel_frame, WIN_SCREEN_RECT);
left = (r->r_width - width) / 2;
top = (r->r_height - height)/ 2;
if (left < 0) left = 0;
if (top < 0) top = 0;
}
else
{ left = (win_width - width) / 2;
top = (win_height - height)/ 2;
}
}
left += win_left;
top += win_top;
window_set(p->panel_frame, WIN_X, left, WIN_Y, top, 0);
window_main_loop(p->panel_frame);
window_set(p->panel_frame,WIN_SHOW,FALSE,0);
if (p->but_count == 0)
{ panel_destroy_item(cont_but);
panel_destroy_item(quit_but);
p->panel_row -= 50;
}
if (panel_button_answer == -2) exit(0);
return panel_button_answer;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -