Example #1
0
static void
insert_function_into_syntax_area (GtkTreeIter iter,
				  GtkWidget *text_view,
				  GtkTreeModel *model,
				  gpointer data
				  )
{
  GString *string;
  GValue name_value = {0};
  GValue arity_value = {0};
  gint arity;
  gint i;

  GtkTextBuffer *buffer ;

  g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));

  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));

  gtk_tree_model_get_value (model, &iter, COMPUTE_COL_NAME, &name_value);
  gtk_tree_model_get_value (model, &iter, COMPUTE_COL_ARITY, &arity_value);

  arity = g_value_get_int (&arity_value);

  string = g_string_new (g_value_get_string (&name_value));

  g_string_append (string, "(");
  for ( i = 0 ; i < arity -1 ; ++i )
    {
      g_string_append (string, "?,");
    }
  g_string_append (string, "?)");


  erase_selection (buffer);

  gtk_text_buffer_insert_at_cursor (buffer, string->str, string->len);

  g_value_unset (&name_value);
  g_value_unset (&arity_value);
  g_string_free (string, TRUE);

  /* Now position the cursor over the first '?' */
  {
    GtkTextIter insert;
    GtkTextIter selectbound;
    GtkTextMark *cursor = gtk_text_buffer_get_insert (buffer);
    gtk_text_buffer_get_iter_at_mark (buffer, &insert, cursor);
    for ( i = 0 ; i < arity ; ++i )
      {
	gtk_text_iter_backward_cursor_position (&insert);
	gtk_text_iter_backward_cursor_position (&insert);
      }
    selectbound = insert;
    gtk_text_iter_forward_cursor_position (&selectbound);

    gtk_text_buffer_select_range (buffer, &insert, &selectbound);
  }

}
Example #2
0
gboolean
on_LocalText_key_press_event           (GtkWidget       *widget,
                                        GdkEventKey     *event,
                                        gpointer         user_data)
{
    gchar	*outstr;
    gchar	instr[2];
    int		inbytes;
    int		outbytes;

    if(event->keyval==GDK_BackSpace || event->keyval==GDK_Delete) {
        GtkTextIter		start;
        GtkTextIter		end;

        chat_write_byte('\b');
        gtk_text_buffer_get_iter_at_mark(
            gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget))
            ,&start
            ,gtk_text_buffer_get_insert(
                gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget))
            )
        );
        end=start;
        gtk_text_iter_backward_cursor_position(&end);
        gtk_text_buffer_delete(
            gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget))
            ,&start
            ,&end
        );
    }
    if(event->keyval >= 32 && event->keyval < 127) {
        instr[1]=0;
        instr[0]=event->keyval;
        chat_write_byte(event->keyval);
        outstr=g_convert(instr, 1, "UTF-8", "CP437", &inbytes, &outbytes, NULL);
        gtk_text_buffer_insert_at_cursor(
            gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget))
            ,outstr
            ,1
        );
        g_free(outstr);
    }
    if(event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
        instr[1]=0;
        instr[0]='\n';
        chat_write_byte('\r');
        outstr=g_convert(instr, 1, "UTF-8", "CP437", &inbytes, &outbytes, NULL);
        gtk_text_buffer_insert_at_cursor(
            gtk_text_view_get_buffer(GTK_TEXT_VIEW(widget))
            ,outstr
            ,1
        );
        g_free(outstr);
    }

    return FALSE;
}
Example #3
0
static gboolean
backward_cursor_position (GtkTextIter *iter,
			  gboolean     visible)
{
	if (visible)
	{
		return gtk_text_iter_backward_visible_cursor_position (iter);
	}

	return gtk_text_iter_backward_cursor_position (iter);
}
Example #4
0
gint
get_from_remote(gpointer data)
{
    int		ch;
    gchar	*outstr;
    gchar	instr[2];
    int		inbytes;
    int		outbytes;

    instr[1]=0;
    switch(chat_check_remote()) {
    case 2:		/* Chat active */
        while(ch=chat_read_byte()) {
            if(ch==-1) {
                chat_close();
                gtk_main_quit();
                return(FALSE);
            }
            if(ch==8 || ch==127) {
                GtkTextIter		start;
                GtkTextIter		end;

                gtk_text_buffer_get_iter_at_mark(
                    gtk_text_view_get_buffer(GTK_TEXT_VIEW(data))
                    ,&start
                    ,gtk_text_buffer_get_insert(
                        gtk_text_view_get_buffer(GTK_TEXT_VIEW(data))
                    )
                );
                end=start;
                gtk_text_iter_backward_cursor_position(&end);
                gtk_text_buffer_delete(
                    gtk_text_view_get_buffer(GTK_TEXT_VIEW(data))
                    ,&start
                    ,&end
                );
            }
            else {
                instr[0]=ch;
                outstr=g_convert(instr, 1, "UTF-8", "CP437", &inbytes, &outbytes, NULL);
                gtk_text_buffer_insert_at_cursor(
                    gtk_text_view_get_buffer(GTK_TEXT_VIEW(data))
                    ,outstr
                    ,1
                );
                g_free(outstr);
            }
        }
        return(TRUE);
    }
    chat_close();
    return(FALSE);
}
Example #5
0
/*******************************************************************************
 * Advance the cursor n positions on the tutor text view
 */
gint
cursor_advance (gint n)
{
	gint i;
	gboolean cursor_out_screen;
	GtkWidget *wg;
	GtkTextBuffer *buf;
	GtkTextIter new_start;
	GtkTextIter old_start;
	GtkTextIter end;
	GtkTextMark *mark;

	wg = get_wg ("text_tutor");
	buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (wg));

	/* Get current position for the iter old_start */
	gtk_text_buffer_get_iter_at_mark (buf, &new_start, gtk_text_buffer_get_insert (buf));
	old_start = new_start;

	/* Get new position for the iter new_start */
	if (n > 0)
		for (i = 0; i < n && gtk_text_iter_forward_cursor_position (&new_start); i++);
	else
		for (i = 0; i > n && gtk_text_iter_backward_cursor_position (&new_start); i--);

	/* Move cursor blinking */
	end = new_start;
	gtk_text_iter_forward_char (&end);
	gtk_text_buffer_apply_tag_by_name (buf, "cursor_blink", &new_start, &end);

	end = old_start;
	gtk_text_iter_forward_char (&end);
	gtk_text_buffer_remove_tag_by_name (buf, "cursor_blink", &old_start, &end);

	/* Move cursor */
	gtk_text_buffer_place_cursor (buf, &new_start);

	/* Check need for auto-scrolling */
	if (i == n)
	{
		end = new_start;
		gtk_text_iter_forward_line (&end);
		mark = gtk_text_buffer_create_mark (buf, "aux", &end, FALSE);
		cursor_out_screen = gtk_text_view_move_mark_onscreen (GTK_TEXT_VIEW (wg), mark);
		if (cursor_out_screen)
		{
			gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (wg),
				       	gtk_text_buffer_get_insert (buf), 0.0, TRUE, 0.5, 0.12);
		}
	}
	return (i);
}
Example #6
0
int32_t startwin_puts(const char *str)
{
    GtkWidget *textview;
    GtkTextBuffer *textbuffer;
    GtkTextIter enditer;
    GtkTextMark *mark;
    const char *aptr, *bptr;

    if (!gtkenabled || !str) return 0;
    if (!stwidgets.startwin) return 1;
    if (!(textview = stwidgets.messagestext)) return -1;
    textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));

    gtk_text_buffer_get_end_iter(textbuffer, &enditer);
    for (aptr = bptr = str; *aptr != 0;)
    {
        switch (*bptr)
        {
        case '\b':
            if (bptr > aptr)
                gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr)-1);
#if GTK_CHECK_VERSION(2,6,0)
            gtk_text_buffer_backspace(textbuffer, &enditer, FALSE, TRUE);
#else
            {
                GtkTextIter iter2 = enditer;
                gtk_text_iter_backward_cursor_position(&iter2);
                //FIXME: this seems be deleting one too many chars somewhere!
                if (!gtk_text_iter_equal(&iter2, &enditer))
                    gtk_text_buffer_delete_interactive(textbuffer, &iter2, &enditer, TRUE);
            }
#endif
            aptr = ++bptr;
            break;
        case 0:
            if (bptr > aptr)
                gtk_text_buffer_insert(textbuffer, &enditer, (const gchar *)aptr, (gint)(bptr-aptr));
            aptr = bptr;
            break;
        case '\r':	// FIXME
        default:
            bptr++;
            break;
        }
    }

    mark = gtk_text_buffer_create_mark(textbuffer, NULL, &enditer, 1);
    gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(textview), mark, 0.0, FALSE, 0.0, 1.0);
    gtk_text_buffer_delete_mark(textbuffer, mark);

    return 0;
}
Example #7
0
static void
on_keypad_button (PsppireKeypad *kp, const gchar *syntax, gpointer data)
{
  GtkBuilder *xml = data;

  GtkWidget *rhs = get_widget_assert (xml, "compute-textview1");

  GtkTextBuffer *buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (rhs));

  erase_selection (buffer);

  gtk_text_buffer_insert_at_cursor (buffer, syntax, strlen (syntax));

  if (0 == strcmp (syntax, "()"))
    {
      GtkTextIter iter;
      GtkTextMark *cursor = gtk_text_buffer_get_insert (buffer);
      gtk_text_buffer_get_iter_at_mark (buffer, &iter, cursor);
      gtk_text_iter_backward_cursor_position (&iter);
      gtk_text_buffer_move_mark (buffer, cursor, &iter);
    }

}