Exemplo n.º 1
0
void bug_information_window_new(GtkWidget * window)
{
	GtkWidget *dialog;
	GtkTextBuffer *buffer;
	GtkWidget *scrolled_window, *text_view;
	PangoTabArray *tab_array;

	/* Basic dialog with a close button */
	dialog = gtk_dialog_new_with_buttons(_("Bug information"),
										 (window) ? (GtkWindow *) playlist3_get_window() : NULL,
										 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
										 GTK_STOCK_CLOSE, GTK_RESPONSE_YES, NULL);

	/* Set default window size */
	gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 800);
	/* The buffer that holds the "report" */
	buffer = gtk_text_buffer_new(NULL);

	bug_information_generate_message(buffer);

	/* View to show the textbuffer */
	text_view = gtk_text_view_new();
	/* setup textview */
	/* set tabarray */
	tab_array = pango_tab_array_new_with_positions(1, TRUE, PANGO_TAB_LEFT, 500);
	gtk_text_view_set_accepts_tab(GTK_TEXT_VIEW(text_view), TRUE);
	gtk_text_view_set_tabs(GTK_TEXT_VIEW(text_view), tab_array);
	pango_tab_array_free(tab_array);

	/* not editable */
	gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
	/* set margins */
	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view), 12);
	gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view), 12);

	/* Add the text buffer */
	gtk_text_view_set_buffer(GTK_TEXT_VIEW(text_view), buffer);

	/* scrolled window, this allows the text view to scroll */
	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
	/* setup scrolled window */
	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_ETCHED_IN);
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
	/* add text view to scrolled_window */
	gtk_container_add(GTK_CONTAINER(scrolled_window), text_view);
	/* add scrolled_window to dialog */
	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), scrolled_window, TRUE, TRUE, 0);

	/* Add dialogs response handler */
	g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
	/* show dialog */
	gtk_widget_show_all(dialog);
	if (window == NULL)
	{
		gtk_dialog_run(GTK_DIALOG(dialog));
	}
}
Exemplo n.º 2
0
void indent_refresh_tab_width(GtkWidget *text_view)
{
	PangoTabArray *tab_array;
	
	tab_array = pango_tab_array_new(1, TRUE);
	pango_tab_array_set_tab(tab_array, 0, PANGO_TAB_LEFT,
		calculate_real_tab_width(text_view, current_tab_width));
	gtk_text_view_set_tabs(GTK_TEXT_VIEW(text_view), tab_array);
	pango_tab_array_free(tab_array);
}
Exemplo n.º 3
0
static GtkWidget *
create_window (GtkTextBuffer *buffer)
{
  GtkWidget *window;
  GtkWidget *scrolledwin;
  GtkWidget *box;
  GtkWidget *terminal;
  GtkWidget *bbox;
  GtkWidget *close_button;
  PangoTabArray *tabs;
  int width, height;

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
  gtk_window_set_title (GTK_WINDOW (window), _("Boot messages"));
  gtk_container_set_border_width (GTK_CONTAINER (window), 12);

  width = MIN (800, 0.75 * gdk_screen_get_width (gdk_screen_get_default ()));
  height = MIN (600, 0.75 * gdk_screen_get_height (gdk_screen_get_default ()));
  gtk_window_set_default_size (GTK_WINDOW (window), width, height);

  box = gtk_vbox_new (FALSE, 0);
  scrolledwin = gtk_scrolled_window_new (NULL, NULL);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin), 
                                  GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwin), 
                                       GTK_SHADOW_IN);
  terminal = gtk_text_view_new_with_buffer (buffer);
  gtk_text_view_set_editable (GTK_TEXT_VIEW (terminal), FALSE);
  tabs = pango_tab_array_new_with_positions (1, TRUE, PANGO_TAB_LEFT, width - 130);
  gtk_text_view_set_tabs (GTK_TEXT_VIEW (terminal), tabs);
  gtk_text_view_set_left_margin (GTK_TEXT_VIEW (terminal), 12);
  gtk_text_view_set_right_margin (GTK_TEXT_VIEW (terminal), 12);

  bbox = gtk_hbutton_box_new ();
  gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
  close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);

  gtk_container_add (GTK_CONTAINER (window), box);
  gtk_box_pack_start (GTK_BOX (box), scrolledwin, TRUE, TRUE, 6);
  gtk_container_add (GTK_CONTAINER (scrolledwin), terminal);
  gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, TRUE, 6);
  gtk_box_pack_start (GTK_BOX (bbox), close_button, FALSE, TRUE, 6);

  g_signal_connect (window, "delete-event",
                    G_CALLBACK (close_window), NULL);
  g_signal_connect_swapped (close_button, "clicked", 
                            G_CALLBACK (close_window), window);

  gtk_widget_show_all (box);

  return window;
}
Exemplo n.º 4
0
void
highlight_set_tab (GtkTextView *textview)
{
	PangoTabArray *tab_array;
	PangoLayout *layout;
	gchar *tab_string;
	gint width, height;
	CEditorConfig *config;

	config = editorconfig_config_get ();
	tab_string = g_strnfill (4, ' ');
	layout = gtk_widget_create_pango_layout (GTK_WIDGET (textview), tab_string);
	pango_layout_set_font_description (layout, config->pfd);
	pango_layout_get_pixel_size (layout, &width, &height);
	tab_array = pango_tab_array_new (1, TRUE);
	pango_tab_array_set_tab (tab_array, 0, PANGO_TAB_LEFT, width);
	gtk_text_view_set_tabs (GTK_TEXT_VIEW (textview), tab_array);

	g_free (tab_string);
}
Exemplo n.º 5
0
int main(int argc, char **argv)
{
	Application application;

	g_thread_init(NULL);
	gtk_init(&argc, &argv);

	application.midi_file = MidiFile_load(argv[1]);

	application.window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
	gtk_window_set_default_size(application.window, 640, 480);
	gtk_window_set_title(application.window, "Sequencer");
	g_signal_connect(G_OBJECT(application.window), "destroy", G_CALLBACK(exit), NULL);

	application.vbox = GTK_VBOX(gtk_vbox_new(FALSE, 0));
	gtk_container_add(GTK_CONTAINER(application.window), GTK_WIDGET(application.vbox));

	application.menu_bar = GTK_MENU_BAR(gtk_menu_bar_new());
	gtk_box_pack_start(GTK_BOX(application.vbox), GTK_WIDGET(application.menu_bar), FALSE, FALSE, 0);

	application.file_menu_item = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic("_File"));
	gtk_menu_shell_append(GTK_MENU_SHELL(application.menu_bar), GTK_WIDGET(application.file_menu_item));

	application.file_menu = GTK_MENU(gtk_menu_new());
	gtk_menu_item_set_submenu(application.file_menu_item, GTK_WIDGET(application.file_menu));

	application.exit_menu_item = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic("E_xit"));
	gtk_menu_shell_append(GTK_MENU_SHELL(application.file_menu), GTK_WIDGET(application.exit_menu_item));

	application.scrolled_window = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
	gtk_box_pack_start(GTK_BOX(application.vbox), GTK_WIDGET(application.scrolled_window), TRUE, TRUE, 0);
	gtk_scrolled_window_set_policy(application.scrolled_window, GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);

	application.text_view = GTK_TEXT_VIEW(gtk_text_view_new());
	gtk_container_add(GTK_CONTAINER(application.scrolled_window), GTK_WIDGET(application.text_view));
	gtk_text_view_set_editable(application.text_view, FALSE);

	{
		PangoContext *pango_context;
		PangoLayout *pango_layout;
		PangoTabArray *pango_tab_array;
		int column_width;

		pango_context = gtk_widget_get_pango_context(GTK_WIDGET(application.text_view));
		pango_layout = pango_layout_new(pango_context);
		pango_layout_set_text(pango_layout, "WWWWWWWW", -1);
		pango_layout_get_size(pango_layout, &column_width, NULL);
		pango_tab_array = pango_tab_array_new_with_positions(6, FALSE, PANGO_TAB_LEFT, 0, PANGO_TAB_LEFT, column_width, PANGO_TAB_LEFT, column_width * 2, PANGO_TAB_LEFT, column_width * 3, PANGO_TAB_LEFT, column_width * 4, PANGO_TAB_LEFT, column_width * 5);
		gtk_text_view_set_tabs(application.text_view, pango_tab_array);
		pango_tab_array_free(pango_tab_array);
	}

	{
		GtkTextBuffer *text_buffer = gtk_text_view_get_buffer(application.text_view);
		GtkTextIter text_iter;
		float previous_displayed_beat = 0.0;
		MidiFileEvent_t midi_file_event;

		gtk_text_buffer_get_iter_at_offset(text_buffer, &text_iter, 0);

		for (midi_file_event = MidiFile_getFirstEvent(application.midi_file); midi_file_event != NULL; midi_file_event = MidiFileEvent_getNextEventInFile(midi_file_event))
		{
			if (MidiFileEvent_isNoteStartEvent(midi_file_event) && (MidiFileTrack_getNumber(MidiFileEvent_getTrack(midi_file_event)) == 1))
			{
				float beat = MidiFile_getBeatFromTick(application.midi_file, MidiFileEvent_getTick(midi_file_event));

				while (previous_displayed_beat <= beat)
				{
					gchar *text = g_strdup_printf("%.3f\t\t\t\t\t\n", previous_displayed_beat);
					gtk_text_buffer_insert(text_buffer, &text_iter, text, -1);
					g_free(text);
					previous_displayed_beat += 0.25;
				}

				{
					gchar *text = g_strdup_printf("%.3f\t", beat);
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "beat");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, text, -1, text_tag, NULL);
					g_free(text);
				}

				{
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "event_type");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, "NoteStart\t", -1, text_tag, NULL);
				}

				{
					gchar *text = g_strdup_printf("%d\t", MidiFileTrack_getNumber(MidiFileEvent_getTrack(midi_file_event)));
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "track");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, text, -1, text_tag, NULL);
					g_free(text);
				}

				{
					gchar *text = g_strdup_printf("%d\t", MidiFileNoteStartEvent_getChannel(midi_file_event) + 1);
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "channel");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, text, -1, text_tag, NULL);
					g_free(text);
				}

				{
					gchar *note_string = _midi_note_number_to_string(MidiFileNoteStartEvent_getNote(midi_file_event));
					gchar *text = g_strdup_printf("%s\t", note_string);
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "note");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, text, -1, text_tag, NULL);
					g_free(text);
					g_free(note_string);
				}

				{
					gchar *text = g_strdup_printf("%d\n", MidiFileNoteStartEvent_getVelocity(midi_file_event));
					GtkTextTag *text_tag = gtk_text_buffer_create_tag(text_buffer, NULL, NULL);
					g_object_set_data(G_OBJECT(text_tag), "column_type", "velocity");
					g_object_set_data(G_OBJECT(text_tag), "midi_file_event", midi_file_event);
					gtk_text_buffer_insert_with_tags(text_buffer, &text_iter, text, -1, text_tag, NULL);
					g_free(text);
				}
			}
		}
	}

	g_signal_connect(application.text_view, "event-after", G_CALLBACK(_text_view_click_handler), NULL);

	application.statusbar = GTK_STATUSBAR(gtk_statusbar_new());
	gtk_box_pack_start(GTK_BOX(application.vbox), GTK_WIDGET(application.statusbar), FALSE, FALSE, 0);

	gtk_widget_show_all(GTK_WIDGET(application.window));

	gtk_main();
	return 0;
}
Exemplo n.º 6
0
void bg_gtk_textview_update(bg_gtk_textview_t * t,
                            const char * text)
  {
  const char * next_tab;
  const char * pos;
  const char * end_pos;
  int line;
  int tab_pos;
  int line_width;
  int i;
  PangoTabArray * tab_array;
  GtkTextIter start_iter;
  GtkTextIter end_iter;

  GdkRectangle start_rect;
  GdkRectangle end_rect;
    
  pos = text;
  
  next_tab = strchr(pos, '\t');

  /* No tabs here, just copy the text */
  if(!next_tab)
    {
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(t->textview), GTK_WRAP_WORD);
    
    gtk_text_buffer_set_text(t->buffer, text, -1);
    
    }
  else /* This is the complicated version */
    {
    line    = 0;
    tab_pos = 0;

    
    while(1)
      {
      next_tab = strchr(pos, '\t');
      end_pos  = strchr(pos, '\n');
      if(!end_pos)
        end_pos = pos + strlen(pos);
      if(next_tab > end_pos)
        next_tab = NULL;
      
      /* Insert everything before the tab and calculate width */

      gtk_text_buffer_get_end_iter(t->buffer,
                                   &end_iter);
      
      if(!next_tab)
        {
        gtk_text_buffer_insert(t->buffer, &end_iter, pos, (int)(end_pos - pos));
        }
      else
        {
        gtk_text_buffer_insert(t->buffer, &end_iter, pos, (int)(next_tab - pos));
        }
      
      gtk_text_buffer_get_bounds(t->buffer, &start_iter, &end_iter);
      for(i = 0; i < line; i++)
        {
        gtk_text_view_forward_display_line(GTK_TEXT_VIEW(t->textview),
                                           &start_iter);
        }

      gtk_text_view_get_iter_location(GTK_TEXT_VIEW(t->textview),
                                      &start_iter, &start_rect);
      gtk_text_view_get_iter_location(GTK_TEXT_VIEW(t->textview),
                                      &end_iter, &end_rect);
      line_width = end_rect.x + end_rect.width;

      if(tab_pos < line_width)
        tab_pos = line_width;
      
      /* Insert everything after the tab */

      if(next_tab)
        {
        gtk_text_buffer_get_end_iter(t->buffer, &end_iter);
        gtk_text_buffer_insert(t->buffer, &end_iter, next_tab, (int)(end_pos - next_tab));
        }
      pos = end_pos;
      line++;
      if(*pos == '\0')
        break;
      else
        {
        while(*pos == '\n')
          {
          gtk_text_buffer_get_end_iter(t->buffer, &end_iter);
          gtk_text_buffer_insert(t->buffer, &end_iter, pos, 1);
          pos++;
          }
        }
      }
    /* Set the tab positions */

    tab_array =
      pango_tab_array_new_with_positions(1, /* gint size, */
                                         1, /* gboolean positions_in_pixels, */
                                         PANGO_TAB_LEFT, /* PangoTabAlign first_alignment, */
                                         tab_pos+10 /* gint first_position, */ );
    gtk_text_view_set_tabs(GTK_TEXT_VIEW(t->textview), tab_array);
    pango_tab_array_free(tab_array);
    
    }
  
  gtk_text_buffer_get_bounds(t->buffer,
                             &start_iter,
                             &end_iter);
  gtk_text_buffer_apply_tag(t->buffer,
                            text_tag,
                            &start_iter,
                            &end_iter);
  };