messagebox.c 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*
  2. * messagebox.c
  3. *
  4. * $Id$
  5. *
  6. * The iODBC driver manager.
  7. *
  8. * Copyright (C) 1996-2021 OpenLink Software <[email protected]>
  9. * All Rights Reserved.
  10. *
  11. * This software is released under the terms of either of the following
  12. * licenses:
  13. *
  14. * - GNU Library General Public License (see LICENSE.LGPL)
  15. * - The BSD License (see LICENSE.BSD).
  16. *
  17. * Note that the only valid version of the LGPL license as far as this
  18. * project is concerned is the original GNU Library General Public License
  19. * Version 2, dated June 1991.
  20. *
  21. * While not mandated by the BSD license, any patches you make to the
  22. * iODBC source code may be contributed back into the iODBC project
  23. * at your discretion. Contributions will benefit the Open Source and
  24. * Data Access community as a whole. Submissions may be made at:
  25. *
  26. * http://www.iodbc.org
  27. *
  28. *
  29. * GNU Library Generic Public License Version 2
  30. * ============================================
  31. * This library is free software; you can redistribute it and/or
  32. * modify it under the terms of the GNU Library General Public
  33. * License as published by the Free Software Foundation; only
  34. * Version 2 of the License dated June 1991.
  35. *
  36. * This library is distributed in the hope that it will be useful,
  37. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  38. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  39. * Library General Public License for more details.
  40. *
  41. * You should have received a copy of the GNU Library General Public
  42. * License along with this library; if not, write to the Free
  43. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  44. *
  45. *
  46. * The BSD License
  47. * ===============
  48. * Redistribution and use in source and binary forms, with or without
  49. * modification, are permitted provided that the following conditions
  50. * are met:
  51. *
  52. * 1. Redistributions of source code must retain the above copyright
  53. * notice, this list of conditions and the following disclaimer.
  54. * 2. Redistributions in binary form must reproduce the above copyright
  55. * notice, this list of conditions and the following disclaimer in
  56. * the documentation and/or other materials provided with the
  57. * distribution.
  58. * 3. Neither the name of OpenLink Software Inc. nor the names of its
  59. * contributors may be used to endorse or promote products derived
  60. * from this software without specific prior written permission.
  61. *
  62. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  63. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  64. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  65. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL OPENLINK OR
  66. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  67. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  68. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  69. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  70. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  71. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  72. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  73. */
  74. #include "gui.h"
  75. static gint
  76. delete_event (GtkWidget *widget, GdkEvent *event)
  77. {
  78. return FALSE;
  79. }
  80. static void
  81. message_ok_clicked (GtkWidget *widget, GtkWidget *message)
  82. {
  83. gtk_signal_disconnect_by_func (GTK_OBJECT (message),
  84. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  85. gtk_main_quit ();
  86. gtk_widget_destroy (message);
  87. }
  88. void
  89. create_message (HWND hwnd, LPCSTR dsn, LPCSTR text)
  90. {
  91. GtkWidget *message, *dialog_vbox1, *hbox1, *vbox1;
  92. GtkWidget *l_message, *dialog_action_area1, *hbuttonbox1, *b_ok;
  93. GtkAccelGroup *accel_group;
  94. guint b_ok_key;
  95. char msg[1024];
  96. if (hwnd == NULL || !GTK_IS_WIDGET (hwnd))
  97. return;
  98. accel_group = gtk_accel_group_new ();
  99. message = gtk_dialog_new ();
  100. if (dsn)
  101. sprintf (msg, "Message on DSN %s", dsn);
  102. else
  103. sprintf (msg, "Message ...");
  104. gtk_object_set_data (GTK_OBJECT (message), "message", message);
  105. gtk_window_set_title (GTK_WINDOW (message), msg);
  106. gtk_widget_set_size_request (message, 400, 150);
  107. gtk_window_set_position (GTK_WINDOW (message), GTK_WIN_POS_CENTER);
  108. gtk_window_set_modal (GTK_WINDOW (message), TRUE);
  109. gtk_window_set_default_size (GTK_WINDOW (message), 400, 150);
  110. gtk_window_set_type_hint (GTK_WINDOW (message), GDK_WINDOW_TYPE_HINT_DIALOG);
  111. #if GTK_CHECK_VERSION(2,0,0)
  112. gtk_widget_show (message);
  113. #endif
  114. dialog_vbox1 = GTK_DIALOG (message)->vbox;
  115. gtk_object_set_data (GTK_OBJECT (message), "dialog_vbox1", dialog_vbox1);
  116. gtk_widget_show (dialog_vbox1);
  117. hbox1 = gtk_hbox_new (FALSE, 6);
  118. gtk_widget_ref (hbox1);
  119. gtk_object_set_data_full (GTK_OBJECT (message), "hbox1", hbox1,
  120. (GtkDestroyNotify) gtk_widget_unref);
  121. gtk_widget_show (hbox1);
  122. gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox1, TRUE, TRUE, 0);
  123. gtk_container_set_border_width (GTK_CONTAINER (hbox1), 6);
  124. vbox1 = gtk_vbox_new (TRUE, 0);
  125. gtk_widget_ref (vbox1);
  126. gtk_object_set_data_full (GTK_OBJECT (message), "vbox1", vbox1,
  127. (GtkDestroyNotify) gtk_widget_unref);
  128. gtk_widget_show (vbox1);
  129. gtk_box_pack_start (GTK_BOX (hbox1), vbox1, TRUE, TRUE, 0);
  130. l_message = gtk_label_new ("");
  131. gtk_label_parse_uline (GTK_LABEL (l_message), (text) ? text : "");
  132. gtk_widget_ref (l_message);
  133. gtk_object_set_data_full (GTK_OBJECT (message), "l_message", l_message,
  134. (GtkDestroyNotify) gtk_widget_unref);
  135. gtk_widget_show (l_message);
  136. gtk_box_pack_start (GTK_BOX (vbox1), l_message, FALSE, TRUE, 0);
  137. gtk_label_set_justify (GTK_LABEL (l_message), GTK_JUSTIFY_LEFT);
  138. gtk_label_set_line_wrap (GTK_LABEL (l_message), TRUE);
  139. dialog_action_area1 = GTK_DIALOG (message)->action_area;
  140. gtk_object_set_data (GTK_OBJECT (message), "dialog_action_area1",
  141. dialog_action_area1);
  142. gtk_widget_show (dialog_action_area1);
  143. gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area1), 5);
  144. hbuttonbox1 = gtk_hbutton_box_new ();
  145. gtk_widget_ref (hbuttonbox1);
  146. gtk_object_set_data_full (GTK_OBJECT (message), "hbuttonbox1", hbuttonbox1,
  147. (GtkDestroyNotify) gtk_widget_unref);
  148. gtk_widget_show (hbuttonbox1);
  149. gtk_box_pack_start (GTK_BOX (dialog_action_area1), hbuttonbox1, TRUE, TRUE,
  150. 0);
  151. gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END);
  152. gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbuttonbox1), 10);
  153. b_ok = gtk_button_new_from_stock ("gtk-ok");
  154. gtk_widget_ref (b_ok);
  155. gtk_object_set_data_full (GTK_OBJECT (message), "b_ok", b_ok,
  156. (GtkDestroyNotify) gtk_widget_unref);
  157. gtk_widget_show (b_ok);
  158. gtk_container_add (GTK_CONTAINER (hbuttonbox1), b_ok);
  159. gtk_dialog_add_action_widget (GTK_DIALOG (message), b_ok, GTK_RESPONSE_OK);
  160. GTK_WIDGET_SET_FLAGS (b_ok, GTK_CAN_DEFAULT);
  161. /* Ok button events */
  162. gtk_signal_connect (GTK_OBJECT (b_ok), "clicked",
  163. GTK_SIGNAL_FUNC (message_ok_clicked), message);
  164. /* Close window button events */
  165. gtk_signal_connect (GTK_OBJECT (message), "delete_event",
  166. GTK_SIGNAL_FUNC (delete_event), NULL);
  167. gtk_signal_connect (GTK_OBJECT (message), "destroy",
  168. GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
  169. gtk_window_add_accel_group (GTK_WINDOW (message), accel_group);
  170. gtk_widget_show_all (message);
  171. gtk_main ();
  172. }
  173. void
  174. create_messagew (HWND hwnd, LPCWSTR dsn, LPCWSTR text)
  175. {
  176. LPSTR _dsn = NULL;
  177. LPSTR _text = NULL;
  178. _dsn = dm_SQL_WtoU8((SQLWCHAR*)dsn, SQL_NTS);
  179. _text = dm_SQL_WtoU8((SQLWCHAR*)text, SQL_NTS);
  180. create_message(hwnd, _dsn, _text);
  181. if (_dsn)
  182. free(_dsn);
  183. if (_text)
  184. free(_text);
  185. }