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

📄 gui_utils.cpp

📁 jpeg and mpeg 编解码技术源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  sprintf(buffer, "%u", value);
  gtk_entry_set_text(GTK_ENTRY(entry), buffer);
}

GtkWidget *AddNumberEntryBoxWithLabel (GtkWidget *vbox,
				       const char *label_name,
				       size_t value,
				       size_t value_len)
{
  GtkWidget *hbox, *label, *ret;

  hbox = gtk_hbox_new(FALSE, 1);
  gtk_widget_show(hbox);
  label = gtk_label_new(label_name);
  gtk_widget_ref(label);
  gtk_widget_show(label);
  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);

  ret = gtk_entry_new_with_max_length(value_len);
  SetNumberEntryValue(ret, value);
  gtk_widget_show(ret);
  gtk_box_pack_start(GTK_BOX(hbox), ret, TRUE, TRUE, 5);

  gtk_box_pack_start(GTK_BOX(vbox),
		     hbox,
		     TRUE,
		     TRUE, 
		     3);
  return (ret);
}

int GetNumberEntryValue (GtkWidget *entry, size_t *result)
{
  const char *text;
  char *endptr;

  text = gtk_entry_get_text(GTK_ENTRY(entry));
  *result = strtoul(text, &endptr, 10);
  if (*text != '\0' && endptr != NULL && *endptr == '\0') {
    if (*result == ULONG_MAX && errno == ERANGE)
      return (0);
    return (1);
  }
  return (0);
}

GtkWidget *AddButtonToDialog (GtkWidget *dialog,
			      const char *name,
			      GtkSignalFunc on_click)
{
  GtkWidget *button;
  button = gtk_button_new_with_label(name);

  gtk_signal_connect(GTK_OBJECT(button), 
		     "clicked",
		     GTK_SIGNAL_FUNC(on_click),
		     NULL);
  GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);

    /* --- Add the button to the dialog --- */
  gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->action_area),
		      button, TRUE, TRUE, 5);

  /* --- Make the button visible --- */
  gtk_widget_show (button);
  return (button);
}

GtkWidget *AddEntryBoxWithLabel (GtkWidget *vbox,
				 const char *label_name,
				 const char *initial_value,
				 size_t value_len)
{
  GtkWidget *hbox, *label, *ret;

  hbox = gtk_hbox_new(FALSE, 1);
  gtk_widget_show(hbox);
  label = gtk_label_new(label_name);
  gtk_widget_ref(label);
  gtk_widget_show(label);
  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);

  ret = gtk_entry_new_with_max_length(value_len);
  gtk_entry_set_text(GTK_ENTRY(ret),
		     initial_value == NULL ? "" : initial_value);
  gtk_widget_show(ret);
  gtk_box_pack_start(GTK_BOX(hbox), ret, TRUE, TRUE, 5);

  gtk_box_pack_start(GTK_BOX(vbox),
		     hbox,
		     TRUE,
		     TRUE, 
		     3);
  return (ret);
}

/*
 * FreeChild
 *
 * Free all the children of the widget
 * This is called when the button has to display a new image.
 * The old image is destroyed here.
 */
void FreeChild (GtkWidget *widget)
{
    /* --- Free button children --- */
    gtk_container_foreach (
               GTK_CONTAINER (widget),
               (GtkCallback) gtk_widget_destroy,
               NULL);

}

void SetEntryValidator(GtkObject* object, 
	GtkSignalFunc changed_func, GtkSignalFunc leave_func)
{
	gtk_signal_connect(object,
		     "changed",
		     GTK_SIGNAL_FUNC(changed_func),
		     object);

	gtk_signal_connect(object,
		     "focus_out_event",
		     GTK_SIGNAL_FUNC(leave_func),
		     object);
}

static GtkWidget* filesel;
static GtkWidget* fileentry;

static void on_filename_selected (GtkFileSelection *widget, 
				  gpointer data)
{
  const gchar *name;
  name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel));
  gtk_entry_set_text(GTK_ENTRY(fileentry), name);
  gtk_widget_show(fileentry);
  gtk_grab_remove(filesel);
  gtk_widget_destroy(filesel);
}

void FileBrowser (GtkWidget* entry)
{
  fileentry = entry;
  filesel = gtk_file_selection_new("Select File");
  gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel));
  gtk_signal_connect(
			GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button),
		     "clicked",
		     GTK_SIGNAL_FUNC(on_filename_selected),
		     filesel);
  gtk_signal_connect_object(
			GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button),
		     "clicked",
		     GTK_SIGNAL_FUNC(gtk_widget_destroy),
		     GTK_OBJECT(filesel));
  gtk_widget_show(filesel);
  gtk_grab_add(filesel);
}

/*
 * Showmessage.c  from Developing Linux Applications
 */

/*
 * CloseShowMessage
 *
 * Routine to close the about dialog window.
 */
void CloseShowMessage (GtkWidget *widget, gpointer data)
{
    GtkWidget *dialog_widget = (GtkWidget *) data;

    gtk_grab_remove (dialog_widget);

    /* --- Close the widget --- */
    gtk_widget_destroy (dialog_widget);
}


/*
 * ClearShowMessage
 *
 * Release the window "grab" 
 * Clear out the global dialog_window since that
 * is checked when the dialog is brought up.
 */
static void ClearShowMessage (GtkWidget *widget, gpointer data)
{
    gtk_grab_remove (widget);
}


/*
 * ShowMessage
 *
 * Show a popup message to the user.
 */
GtkWidget* ShowMessage (
	const char *szTitle, const char *szMessage, bool userDismiss)
{
    GtkWidget *label;
    GtkWidget *button;
    GtkWidget *dialog_window;

    /* --- Create a dialog window --- */
    dialog_window = gtk_dialog_new ();

    gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
              GTK_SIGNAL_FUNC (ClearShowMessage),
              NULL);

    /* --- Set the title and add a border --- */
    gtk_window_set_title (GTK_WINDOW (dialog_window), szTitle);
    gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);

    /* --- Create an "Ok" button with the focus --- */
	if (userDismiss) {
		button = gtk_button_new_with_label ("OK");

		gtk_signal_connect (GTK_OBJECT (button), "clicked",
				  GTK_SIGNAL_FUNC (CloseShowMessage),
				  dialog_window);

		/* --- Default the "Ok" button --- */
		GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
		gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area), 
				  button, TRUE, TRUE, 0);
		gtk_widget_grab_default (button);
		gtk_widget_show (button);
	}

    /* --- Create a descriptive label --- */
    label = gtk_label_new (szMessage);

    /* --- Put some room around the label text --- */
    gtk_misc_set_padding (GTK_MISC (label), 10, 10);

    /* --- Add label to designated area on dialog --- */
    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox), 
              label, TRUE, TRUE, 0);

    /* --- Show the label --- */
    gtk_widget_show (label);

    /* --- Show the dialog --- */
    gtk_widget_show (dialog_window);

    /* --- Only this window can have actions done. --- */
    gtk_grab_add (dialog_window);

	return dialog_window;
}

static GtkSignalFunc local_yesroutine, local_noroutine;

static void on_yes_button (GtkWidget *widget, gpointer gdata)
{
  GtkWidget *dialog = (GtkWidget *)gdata;

  if (local_yesroutine != NULL) {
    (local_yesroutine)();
  }
  gtk_grab_remove(dialog);
  gtk_widget_destroy(dialog);
}

static void on_no_button (GtkWidget *widget, gpointer data)
{
  GtkWidget *dialog = (GtkWidget *)data;

  if (local_noroutine != NULL) {
    (local_noroutine)();
  }
  gtk_grab_remove(dialog);
  gtk_widget_destroy(dialog);
}

void YesOrNo (const char *szTitle,
	      const char *szMessage,
	      int yes_as_default,
	      GtkSignalFunc yesroutine,
	      GtkSignalFunc noroutine)
{
    GtkWidget *label;
    GtkWidget *button;
    GtkWidget *dialog_window;

    local_yesroutine = yesroutine;
    local_noroutine = noroutine;
    
    /* --- Create a dialog window --- */
    dialog_window = gtk_dialog_new ();

    gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
              GTK_SIGNAL_FUNC (ClearShowMessage),
              NULL);

    /* --- Set the title and add a border --- */
    gtk_window_set_title (GTK_WINDOW (dialog_window), szTitle);
    gtk_container_border_width (GTK_CONTAINER (dialog_window), 0);

    /* --- Create an "Ok" button with the focus --- */
    button = gtk_button_new_with_label ("Yes");

    gtk_signal_connect (GTK_OBJECT (button), "clicked",
              GTK_SIGNAL_FUNC (on_yes_button),
              dialog_window);

    /* --- Default the "Ok" button --- */
    if (yes_as_default != 0) 
      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->action_area), 
              button, TRUE, TRUE, 0);
    if (yes_as_default != 0) 
      gtk_widget_grab_default (button);
    gtk_widget_show (button);

    button = gtk_button_new_with_label("No");
    gtk_signal_connect(GTK_OBJECT(button),
		       "clicked",
		       GTK_SIGNAL_FUNC(on_no_button),
		       dialog_window);
    if (yes_as_default == 0) 
      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
    gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),
		       button, TRUE, TRUE, 0);
    if (yes_as_default == 0)
      gtk_widget_grab_default(button);
    gtk_widget_show(button);
      
        /* --- Create a descriptive label --- */
    label = gtk_label_new (szMessage);

    /* --- Put some room around the label text --- */
    gtk_misc_set_padding (GTK_MISC (label), 10, 10);

    /* --- Add label to designated area on dialog --- */
    gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox), 
              label, TRUE, TRUE, 0);

    /* --- Show the label --- */
    gtk_widget_show (label);


    /* --- Show the dialog --- */
    gtk_widget_show (dialog_window);

    /* --- Only this window can have actions done. --- */
    gtk_grab_add (dialog_window);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -