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); } }
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); } }
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(); }
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(); }
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; }