create.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /* $Id: create.c,v 1.5 2001/04/25 14:31:48 kilobug Exp $ */
  2. #include "gtkutil.h"
  3. /*
  4. ** Create and show items
  5. */
  6. GtkWidget *create_frame(const char *label)
  7. {
  8. GtkWidget *widget;
  9. widget = gtk_frame_new(label);
  10. gtk_frame_set_shadow_type(GTK_FRAME(widget), GTK_SHADOW_ETCHED_IN);
  11. gtk_frame_set_label_align(GTK_FRAME(widget), 0.5, 0);
  12. gtk_widget_show(widget);
  13. return widget;
  14. }
  15. GtkWidget *create_label(const char *label)
  16. {
  17. GtkWidget *widget;
  18. widget = gtk_label_new(label);
  19. gtk_widget_show(widget);
  20. return widget;
  21. }
  22. GtkWidget *create_hscale(int min, int max, int *value)
  23. {
  24. GtkObject *adj;
  25. GtkWidget *wid;
  26. adj = gtk_adjustment_new(*value, min, max, 1, 10, 20);
  27. wid = gtk_hscale_new(GTK_ADJUSTMENT(adj));
  28. gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
  29. set_data_from_adjustment, value);
  30. gtk_scale_set_digits(GTK_SCALE(wid), 0);
  31. gtk_widget_show(wid);
  32. return wid;
  33. }
  34. GtkWidget *create_hscale_float(float min, float max, float *value)
  35. {
  36. GtkObject *adj;
  37. GtkWidget *wid;
  38. adj = gtk_adjustment_new(*value, min, max, 1, 2, 0);
  39. wid = gtk_hscale_new(GTK_ADJUSTMENT(adj));
  40. gtk_signal_connect(GTK_OBJECT(adj), "value_changed",
  41. set_data_from_adjustment_float, value);
  42. gtk_scale_set_digits(GTK_SCALE(wid), 2);
  43. gtk_widget_show(wid);
  44. return wid;
  45. }
  46. GtkWidget *create_dialog(const char *title, GtkWidget *main_area,
  47. const char *msg1, const char *msg2,
  48. GtkSignalFunc callback, void *data,
  49. GtkSignalFunc destroy)
  50. {
  51. GtkWidget *dialog, *hbox, *widget;
  52. GtkAccelGroup *accel_group;
  53. /* Main box */
  54. dialog = gtk_dialog_new();
  55. gtk_widget_hide(dialog);
  56. gtk_signal_connect(GTK_OBJECT(dialog), "destroy",
  57. GTK_SIGNAL_FUNC(destroy), dialog);
  58. gtk_window_set_title(GTK_WINDOW(dialog), title);
  59. gtk_container_set_border_width(GTK_CONTAINER(&(GTK_DIALOG(dialog)->window)),
  60. 7);
  61. accel_group = gtk_accel_group_new();
  62. gtk_window_add_accel_group(GTK_WINDOW(&(GTK_DIALOG(dialog)->window)),
  63. accel_group);
  64. /* Buttons */
  65. hbox = gtk_hbox_new(FALSE, 3);
  66. gtk_widget_show(hbox);
  67. if (msg1 != NULL)
  68. {
  69. widget = gtk_button_new_with_label(msg1);
  70. gtk_widget_add_accelerator(widget, "clicked", accel_group, GDK_Return, 0,
  71. GTK_ACCEL_VISIBLE);
  72. gtk_widget_show(widget);
  73. gtk_signal_connect(GTK_OBJECT(widget), "clicked",
  74. GTK_SIGNAL_FUNC(callback), data);
  75. gtk_signal_connect_after(GTK_OBJECT(widget), "clicked",
  76. GTK_SIGNAL_FUNC(destroy), dialog);
  77. gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 9);
  78. }
  79. widget = gtk_button_new_with_label(msg2);
  80. gtk_widget_add_accelerator(widget, "clicked", accel_group, GDK_Escape, 0,
  81. GTK_ACCEL_VISIBLE);
  82. if (callback == NULL)
  83. gtk_widget_add_accelerator(widget, "clicked", accel_group, GDK_Return, 0,
  84. GTK_ACCEL_VISIBLE);
  85. gtk_widget_show(widget);
  86. gtk_signal_connect(GTK_OBJECT(widget), "clicked",
  87. GTK_SIGNAL_FUNC(destroy), dialog);
  88. gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 9);
  89. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), hbox, TRUE,
  90. TRUE, 9);
  91. gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), main_area, TRUE,
  92. TRUE, 9);
  93. return dialog;
  94. }
  95. GtkWidget *create_spin(int min, int max, int def)
  96. {
  97. GtkAdjustment *adj;
  98. GtkWidget *result;
  99. adj = (GtkAdjustment *)gtk_adjustment_new(def, min, max, 1, 10, 0);
  100. result = gtk_spin_button_new(adj, 0.4, 0);
  101. gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(result), TRUE);
  102. gtk_widget_show(result);
  103. return result;
  104. }
  105. GtkWidget *create_entry(const char *def, int len)
  106. {
  107. GtkWidget *result;
  108. if (len > 0)
  109. result = gtk_entry_new_with_max_length(len);
  110. else
  111. result = gtk_entry_new();
  112. if (def != NULL)
  113. gtk_entry_set_text(GTK_ENTRY(result), def);
  114. gtk_widget_show(result);
  115. return result;
  116. }
  117. GtkWidget *create_check(gboolean def)
  118. {
  119. GtkWidget *result;
  120. result = gtk_check_button_new();
  121. gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(result), def);
  122. gtk_widget_show(result);
  123. return result;
  124. }