예제 #1
0
void update_chat_state_message(LinphoneChatMessageState state,LinphoneChatMessage *msg){
	GtkWidget *main_window=linphone_gtk_get_main_window();
	GtkWidget *friendlist=linphone_gtk_get_widget(main_window,"contact_list");
	GtkWidget *page=(GtkWidget*)g_object_get_data(G_OBJECT(friendlist),"chatview");
	GHashTable *table=(GHashTable*)g_object_get_data(G_OBJECT(page),"table");
	
	if(page!=NULL){
		GtkTextView *text=GTK_TEXT_VIEW(linphone_gtk_get_widget(page,"textview"));
		GtkTextBuffer *b=gtk_text_view_get_buffer(text);
		GtkTextIter iter;
		GtkTextIter end;
		GtkTextIter start;
		gchar *result;
		gint line;
		line=GPOINTER_TO_INT(g_hash_table_lookup(table,msg));

		gtk_text_buffer_get_iter_at_line(b,&iter,line);
		if(gtk_text_iter_get_chars_in_line(&iter) >0) {
			gtk_text_buffer_get_iter_at_line_offset(b,&start,line,
					gtk_text_iter_get_chars_in_line(&iter)-1);
		}else{
			gtk_text_buffer_get_iter_at_line_offset(b,&start,line,0);
		}
		gtk_text_buffer_get_iter_at_line_offset(b,&end,line,0);
		gtk_text_buffer_delete(b,&start,&end);
		gtk_text_buffer_get_iter_at_line(b,&iter,line);

		switch (state) {
			case LinphoneChatMessageStateInProgress:
				result="Sending ..";
				break;
			case LinphoneChatMessageStateDelivered:
			{
				time_t t=time(NULL);
				struct tm *tm=localtime(&t);
				char buf[80];
				strftime(buf,80,"%H:%M",tm);
				result=buf;
				g_hash_table_remove(table,msg);
				break;
			}
			case  LinphoneChatMessageStateNotDelivered:
			{
				result="Message not sent";
				g_hash_table_remove(table,msg);
				break;
			}
			default : result="Sending ..";
		}
		gtk_text_buffer_insert_with_tags_by_name(b,&iter,result,-1,
												"right","small","italic","font_grey","bg",NULL);
		g_object_set_data(G_OBJECT(page),"table",table);
	} 
}
예제 #2
0
static void
wrap_line (GtkTextBuffer *buffer,
           GtkTextIter   *iter,
           gchar         *text,
           gint           count,
           gpointer       data)
{
    gint chars = gtk_text_iter_get_chars_in_line (iter);

    if ( chars > DOC_LINE_LENGTH )
    {
        GtkTextIter line_fold = *iter;
        GtkTextIter cursor;

        gtk_text_iter_set_line_offset (&line_fold, DOC_LINE_LENGTH);

        gtk_text_buffer_insert (buffer, &line_fold, "\r\n", 2);

        cursor = line_fold;
        gtk_text_iter_forward_to_line_end (&cursor);

        gtk_text_buffer_place_cursor (buffer, &cursor);
    }

}
예제 #3
0
void gTextArea::setColumn(int vl)
{
	GtkTextIter *iter = getIterAt();

	if (vl < 0) 
	{
		vl = gtk_text_iter_get_chars_in_line(iter)-1;
	}
	else
	{
		if (gtk_text_iter_get_chars_in_line (iter) <= vl) 
			vl = gtk_text_iter_get_chars_in_line(iter) - 1;
	}
	
	gtk_text_iter_set_line_offset(iter,vl);
	gtk_text_buffer_place_cursor(_buffer, iter);
	ensureVisible();
}
예제 #4
0
void gTextArea::setLine(int vl)
{
	int col = column();
	GtkTextIter *iter = getIterAt();
	
	if (vl < 0)
	{
		setPosition(0);
		return;
	}
	else if (vl >= gtk_text_buffer_get_line_count(_buffer))
	{
		setPosition(length());
		return;
	}
	
	gtk_text_iter_set_line(iter, vl);
	if (gtk_text_iter_get_chars_in_line(iter) <= col)
		col = gtk_text_iter_get_chars_in_line(iter) - 1;
	gtk_text_iter_set_line_offset(iter, col);
	gtk_text_buffer_place_cursor(_buffer, iter);
	ensureVisible();
}
예제 #5
0
gboolean
gedit_document_goto_line_offset (GeditDocument *doc,
				 gint           line,
				 gint           line_offset)
{
	gboolean ret;
	GtkTextIter iter;

	g_return_val_if_fail (GEDIT_IS_DOCUMENT (doc), FALSE);
	g_return_val_if_fail (line >= -1, FALSE);
	g_return_val_if_fail (line_offset >= -1, FALSE);

	ret = gedit_document_goto_line (doc, line);

	if (ret)
	{
		guint offset_count;

		gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (doc),
						  &iter,
						  line);

		offset_count = gtk_text_iter_get_chars_in_line (&iter);
		if (line_offset > offset_count)
		{
			ret = FALSE;
		}
		else
		{
			gtk_text_iter_set_line_offset (&iter, line_offset);
			gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER (doc), &iter);
		}
	}

	return ret;
}