Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #include <gtk/gtk.h>
  2. #include <gtksourceview/gtksource.h>
  3. #include <gdk/gdkkeysyms.h>
  4. #include <glib/gi18n.h>
  5. #include <errno.h>
  6.  
  7. void dialog_show();
  8.  
  9. int main (int argc,
  10. char *argv[])
  11. {
  12. GtkWidget *window, *scrolled_win, *textview;
  13. GtkWidget *vbox, *menubar, *fileMenu, *fileMi, *quit_item, *open_item;
  14.  
  15. gtk_init (&argc, &argv);
  16.  
  17. window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  18. gtk_window_maximize(GTK_WINDOW (window)); /* This is a cast: expand the windows to fullscreen*/
  19. vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
  20. gtk_container_add(GTK_CONTAINER(window), vbox);
  21.  
  22. gtk_window_set_title (GTK_WINDOW (window), "Text Views");
  23. gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  24.  
  25. textview = gtk_source_view_new();
  26. menubar = gtk_menu_bar_new();
  27. fileMenu = gtk_menu_new();
  28.  
  29. fileMi = gtk_menu_item_new_with_label("File");
  30.  
  31. quit_item = gtk_menu_item_new_with_label("Quit");
  32.  
  33. /* CTRL-Q accelerator */
  34. GtkAccelGroup *accel_group = NULL;
  35. accel_group = gtk_accel_group_new();
  36. gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
  37.  
  38. gtk_widget_add_accelerator(quit_item, "activate", accel_group,
  39. GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
  40.  
  41. /*Expand the textbox to fullscreen */
  42. gtk_widget_set_hexpand(textview, TRUE);
  43. gtk_widget_set_vexpand(textview, TRUE);
  44.  
  45. GtkCssProvider *provider = gtk_css_provider_new ();
  46. gtk_css_provider_load_from_path (provider,
  47. "gtk-widgets.css", NULL);
  48.  
  49. GtkStyleContext *context;
  50.  
  51. context = gtk_widget_get_style_context(textview);
  52.  
  53. gtk_style_context_add_provider (context,
  54. GTK_STYLE_PROVIDER(provider),
  55. GTK_STYLE_PROVIDER_PRIORITY_USER);
  56.  
  57.  
  58. gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu);
  59. gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quit_item);
  60. gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), open_item);
  61.  
  62. gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi);
  63. gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
  64.  
  65. scrolled_win = gtk_scrolled_window_new (NULL, NULL);
  66. gtk_container_add(GTK_CONTAINER(vbox), scrolled_win);
  67. gtk_container_add (GTK_CONTAINER (scrolled_win), textview);
  68.  
  69. gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW(textview), TRUE); /*Show line numbers */
  70.  
  71. gtk_widget_show_all (window);
  72.  
  73. g_signal_connect(G_OBJECT(window), "destroy",
  74. G_CALLBACK(gtk_main_quit), NULL);
  75.  
  76. g_signal_connect(G_OBJECT(quit_item), "activate",
  77. G_CALLBACK(gtk_main_quit), NULL);
  78.  
  79. g_signal_connect(G_OBJECT(open_item), "activate",
  80. G_CALLBACK(dialog_show()), NULL);
  81.  
  82. gtk_main();
  83.  
  84. return 0;
  85. }
  86.  
  87. void dialog_show()
  88. {
  89. GtkWindow *parent_window = NULL;
  90.  
  91. GtkFileChooserNative *native;
  92. GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
  93. gint res;
  94.  
  95. native = gtk_file_chooser_native_new ("Open File",
  96. parent_window,
  97. action,
  98. "_Open",
  99. "_Cancel");
  100.  
  101. res = gtk_native_dialog_run (GTK_NATIVE_DIALOG (native));
  102.  
  103. if (res == GTK_RESPONSE_ACCEPT)
  104. {
  105. char *filename;
  106. GtkFileChooser *chooser = GTK_FILE_CHOOSER (native);
  107. filename = gtk_file_chooser_get_filename (chooser);
  108.  
  109. if(!(fopen(filename, "w+"))) /* if file cannot be opened */
  110. {
  111. g_printerr("%s: %s\n", filename, g_strerror(errno));
  112. return;
  113. }
  114.  
  115. g_free (filename);
  116. }
  117.  
  118. g_object_unref (native);
  119.  
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement