⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _panel.c

📁 数据类型和算法库LEDA 数据类型和算法库LEDA
💻 C
📖 第 1 页 / 共 2 页
字号:
                                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 -1;

  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++;

 return(p->but_count-1);

}



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 + -