static void undo_add(const gchar *text, gint start_pos, gint end_pos, UndoAction action, UndoMain *undostruct) { UndoInfo *undoinfo; GtkAdjustment *vadj; cm_return_if_fail(text != NULL); cm_return_if_fail(end_pos >= start_pos); undo_free_list(&undostruct->redo); /* Set the redo sensitivity */ undostruct->change_state_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE, undostruct->change_state_data); if (undostruct->paste != 0) { if (action == UNDO_ACTION_INSERT) action = UNDO_ACTION_REPLACE_INSERT; else action = UNDO_ACTION_REPLACE_DELETE; undostruct->paste = undostruct->paste + 1; if (undostruct->paste == 3) undostruct->paste = 0; } if (undo_merge(undostruct->undo, start_pos, end_pos, action, text)) return; undo_check_size(undostruct); vadj = GTK_ADJUSTMENT(gtk_text_view_get_vadjustment( GTK_TEXT_VIEW(undostruct->textview))); undoinfo = undo_object_new(g_strdup(text), start_pos, end_pos, action, gtk_adjustment_get_value(vadj)); if (end_pos - start_pos != 1 || text[0] == '\n') undoinfo->mergeable = FALSE; else undoinfo->mergeable = TRUE; undostruct->undo = g_list_prepend(undostruct->undo, undoinfo); undostruct->change_state_func(undostruct, UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED, undostruct->change_state_data); }
GtkWidget* createConsoleBox() { GtkWidget* textArea = gtk_text_view_new(); GtkWidget* scrollbar= gtk_vscrollbar_new(gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(textArea))); GtkWidget* textEntry = gtk_entry_new(); GtkWidget* console = gtk_table_new(2, 2, FALSE); gtk_table_attach_defaults(GTK_TABLE(console), textArea, 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(console), scrollbar, 1, 2, 0, 1); //gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 2, 1, 2); //This code sets the preferred size for the widget, so it does not ask for extra space gtk_widget_set_size_request(textArea, 320, 240); return console; }
GtkWidget* chatFrame()// crea el frame para el chat { // manejo de variables de la libreria gtk para crear el chatFrame textEntry = gtk_entry_new(); textArea = gtk_text_view_new(); GtkWidget* scrollbar= gtk_vscrollbar_new(gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(textArea))); GtkWidget* console = gtk_table_new(3, 2, FALSE); gtk_text_view_set_editable(G_OBJECT(textArea),0); boton = gtk_button_new_with_label("Enviar"); gtk_table_attach_defaults(GTK_TABLE(console), textArea, 0, 4, 0, 1); gtk_table_attach_defaults(GTK_TABLE(console), scrollbar, 0, 4, 0, 1); gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(console), boton, 3,4,1,2); gtk_widget_set_size_request(textArea, 320, 240); gtk_widget_grab_focus(textEntry); return console; }
/** * undo_redo: * @w: not used * @data: not used * * executes a redo request on the current document **/ void undo_redo(UndoMain *undostruct) { UndoInfo *redoinfo; GtkTextView *textview; GtkTextBuffer *buffer; GtkTextIter iter, start_iter, end_iter; GtkTextMark *mark; cm_return_if_fail(undostruct != NULL); if (undostruct->redo == NULL) return; redoinfo = (UndoInfo *)undostruct->redo->data; cm_return_if_fail (redoinfo != NULL); undostruct->undo = g_list_prepend(undostruct->undo, redoinfo); undostruct->redo = g_list_remove(undostruct->redo, redoinfo); textview = undostruct->textview; buffer = gtk_text_view_get_buffer(textview); undo_block(undostruct); /* Check if there is a selection active */ mark = gtk_text_buffer_get_insert(buffer); gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); gtk_text_buffer_place_cursor(buffer, &iter); /* Move the view to the right position. */ gtk_adjustment_set_value(gtk_text_view_get_vadjustment(textview), redoinfo->window_position); switch (redoinfo->action) { case UNDO_ACTION_INSERT: gtk_text_buffer_get_iter_at_offset(buffer, &iter, redoinfo->start_pos); gtk_text_buffer_insert(buffer, &iter, redoinfo->text, -1); break; case UNDO_ACTION_DELETE: gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, redoinfo->start_pos); gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, redoinfo->end_pos); gtk_text_buffer_delete(buffer, &start_iter, &end_iter); break; case UNDO_ACTION_REPLACE_DELETE: gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, redoinfo->start_pos); gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, redoinfo->end_pos); gtk_text_buffer_delete(buffer, &start_iter, &end_iter); debug_print("UNDO_ACTION_REPLACE %s\n", redoinfo->text); /* "pull" another data structure from the list */ redoinfo = (UndoInfo *)undostruct->redo->data; cm_return_if_fail(redoinfo != NULL); undostruct->undo = g_list_prepend(undostruct->undo, redoinfo); undostruct->redo = g_list_remove(undostruct->redo, redoinfo); cm_return_if_fail(redoinfo->action == UNDO_ACTION_REPLACE_INSERT); gtk_text_buffer_insert(buffer, &start_iter, redoinfo->text, -1); break; case UNDO_ACTION_REPLACE_INSERT: /* This is needed only if we redo from a middle-click button */ gtk_text_buffer_get_iter_at_offset(buffer, &iter, redoinfo->start_pos); gtk_text_buffer_insert(buffer, &iter, redoinfo->text, -1); break; default: g_assert_not_reached(); break; } undostruct->change_state_func(undostruct, UNDO_STATE_TRUE, UNDO_STATE_UNCHANGED, undostruct->change_state_data); if (undostruct->redo == NULL) undostruct->change_state_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_FALSE, undostruct->change_state_data); undo_unblock(undostruct); }
/** * undo_undo: * @w: not used * @data: not used * * Executes an undo request on the current document **/ void undo_undo(UndoMain *undostruct) { UndoInfo *undoinfo; GtkTextView *textview; GtkTextBuffer *buffer; GtkTextIter iter, start_iter, end_iter; GtkTextMark *mark; cm_return_if_fail(undostruct != NULL); if (undostruct->undo == NULL) return; /* The undo data we need is always at the top op the stack. So, therefore, the first one */ undoinfo = (UndoInfo *)undostruct->undo->data; cm_return_if_fail(undoinfo != NULL); undoinfo->mergeable = FALSE; undostruct->redo = g_list_prepend(undostruct->redo, undoinfo); undostruct->undo = g_list_remove(undostruct->undo, undoinfo); textview = undostruct->textview; buffer = gtk_text_view_get_buffer(textview); undo_block(undostruct); /* Check if there is a selection active */ mark = gtk_text_buffer_get_insert(buffer); gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); gtk_text_buffer_place_cursor(buffer, &iter); /* Move the view (scrollbars) to the correct position */ gtk_adjustment_set_value (GTK_ADJUSTMENT(gtk_text_view_get_vadjustment(textview)), undoinfo->window_position); switch (undoinfo->action) { case UNDO_ACTION_DELETE: gtk_text_buffer_get_iter_at_offset(buffer, &iter, undoinfo->start_pos); gtk_text_buffer_insert(buffer, &iter, undoinfo->text, -1); break; case UNDO_ACTION_INSERT: gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, undoinfo->start_pos); gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, undoinfo->end_pos); gtk_text_buffer_delete(buffer, &start_iter, &end_iter); break; case UNDO_ACTION_REPLACE_INSERT: gtk_text_buffer_get_iter_at_offset(buffer, &start_iter, undoinfo->start_pos); gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, undoinfo->end_pos); gtk_text_buffer_delete(buffer, &start_iter, &end_iter); /* "pull" another data structure from the list */ if (undostruct->undo){ undoinfo = (UndoInfo *)undostruct->undo->data; undostruct->redo = g_list_prepend(undostruct->redo, undoinfo); undostruct->undo = g_list_remove(undostruct->undo, undoinfo); cm_return_if_fail(undoinfo != NULL); cm_return_if_fail(undoinfo->action == UNDO_ACTION_REPLACE_DELETE); gtk_text_buffer_insert(buffer, &start_iter, undoinfo->text, -1); } break; case UNDO_ACTION_REPLACE_DELETE: g_warning("This should not happen. UNDO_REPLACE_DELETE"); break; default: g_assert_not_reached(); break; } undostruct->change_state_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_TRUE, undostruct->change_state_data); if (undostruct->undo == NULL) undostruct->change_state_func(undostruct, UNDO_STATE_FALSE, UNDO_STATE_UNCHANGED, undostruct->change_state_data); undo_unblock(undostruct); }
void ygtk_html_wrap_scroll (GtkWidget *widget, gboolean top) { ygutils_scrollAdj (gtk_text_view_get_vadjustment(GTK_TEXT_VIEW (widget)), top); }
static gboolean log_window_append(gpointer source, gpointer data) { LogText *logtext = (LogText *) source; LogWindow *logwindow = (LogWindow *) data; GtkTextView *text; GtkTextBuffer *buffer; GtkTextIter iter; gchar *head = NULL; const gchar *tag; cm_return_val_if_fail(logtext != NULL, TRUE); cm_return_val_if_fail(logtext->text != NULL, TRUE); cm_return_val_if_fail(logwindow != NULL, FALSE); if (logwindow->clip && !logwindow->clip_length) return FALSE; text = GTK_TEXT_VIEW(logwindow->text); buffer = logwindow->buffer; gtk_text_buffer_get_iter_at_offset(buffer, &iter, -1); switch (logtext->type) { case LOG_MSG: tag = "message"; head = "* "; break; case LOG_WARN: tag = "warn"; head = "** "; break; case LOG_ERROR: tag = "error"; head = "*** "; logwindow->has_error = TRUE; break; case LOG_STATUS_OK: tag = "status_ok"; head = "> "; break; case LOG_STATUS_NOK: tag = "status_nok"; head = "> "; break; case LOG_STATUS_SKIP: tag = "status_skip"; head = "> skipped: "; break; default: tag = NULL; break; } if (logtext->instance == LOG_PROTOCOL) { if (tag == NULL) { if (strstr(logtext->text, "] POP3>") || strstr(logtext->text, "] IMAP4>") || strstr(logtext->text, "] SMTP>") || strstr(logtext->text, "] ESMTP>") || strstr(logtext->text, "] NNTP>")) tag = "output"; if (strstr(logtext->text, "] POP3<") || strstr(logtext->text, "] IMAP4<") || strstr(logtext->text, "] SMTP<") || strstr(logtext->text, "] ESMTP<") || strstr(logtext->text, "] NNTP<")) tag = "input"; } } if (head) gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, head, -1, tag, NULL); if (!g_utf8_validate(logtext->text, -1, NULL)) { gchar * mybuf = g_malloc(strlen(logtext->text)*2 +1); conv_localetodisp(mybuf, strlen(logtext->text)*2 +1, logtext->text); gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, mybuf, -1, tag, NULL); g_free(mybuf); } else { gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, logtext->text, -1, tag, NULL); } gtk_text_buffer_get_start_iter(buffer, &iter); if (logwindow->clip) log_window_clip (logwindow, logwindow->clip_length); if (!logwindow->hidden) { GtkAdjustment *vadj = gtk_text_view_get_vadjustment(text); gfloat upper = gtk_adjustment_get_upper(vadj) - gtk_adjustment_get_page_size(vadj); gfloat value = gtk_adjustment_get_value(vadj); if (value == upper || (upper - value < 16 && value < 8)) gtk_text_view_scroll_mark_onscreen(text, logwindow->end_mark); } return FALSE; }
GtkWidget *create_input_window() { GtkWidget *window; GtkWidget *vbox; GtkWidget *hbox1, *hbox2, *hbox3; GtkWidget *label, *label2; GtkWidget *scrollwin; GtkWidget *text_view; GtkWidget *button, *button2; GtkWidget *progress_bar; /* window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Typer"); gtk_window_set_default_size(GTK_WINDOW(window), 800, 400); // gtk_window_set_deletable(GTK_WINDOW(window), FALSE); gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_container_border_width(GTK_CONTAINER(window), 10); g_signal_connect( GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); vbox = gtk_vbox_new(FALSE, 10); hbox1 = gtk_hbox_new(FALSE, 10); label = gtk_label_new("Text:"); gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); /* center text view */ text_view = gtk_text_view_new(); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_CHAR); input_text_buffer_origin = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); g_object_ref(input_text_buffer_origin); scrollwin = gtk_scrolled_window_new( NULL, gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(text_view))); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(scrollwin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(scrollwin), text_view); gtk_box_pack_start(GTK_BOX(vbox), scrollwin, TRUE, TRUE, 0); /* progress bar */ label2 = gtk_label_new("Progress: "); progress_bar = gtk_progress_bar_new(); hbox3 = gtk_hbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(hbox3), label2, FALSE, FALSE, 0); gtk_box_pack_start( GTK_BOX(hbox3), progress_bar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, FALSE, 0); /* period setting */ GtkWidget *hbox5 = gtk_hbox_new(FALSE, 10); gtk_box_pack_start( GTK_BOX(hbox5), gtk_label_new("Period: "), FALSE, FALSE, 0); btn_prev_period = gtk_button_new_with_label("<<"); g_signal_connect( GTK_OBJECT(btn_prev_period), "clicked", GTK_SIGNAL_FUNC(prev_period), NULL); gtk_box_pack_start(GTK_BOX(hbox5), btn_prev_period, FALSE, FALSE, 0); lbl_period = gtk_label_new(NULL); load_current_period(); gtk_box_pack_start(GTK_BOX(hbox5), lbl_period, FALSE, FALSE, 0); btn_next_period = gtk_button_new_with_label(">>"); g_signal_connect( GTK_OBJECT(btn_next_period), "clicked", GTK_SIGNAL_FUNC(next_period), NULL); gtk_box_pack_start(GTK_BOX(hbox5), btn_next_period, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox5, FALSE, FALSE, 0); /* buttons on the BOTTOM */ hbox2 = gtk_hbox_new(FALSE, 10); button = gtk_button_new_with_label("Send"); gtk_widget_set_size_request(button, 100, 40); g_signal_connect( GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(send_button_clicked), NULL); gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 0); button2 = gtk_button_new_with_label("STOP!"); gtk_widget_set_size_request(button2, 100, 40); g_signal_connect( GTK_OBJECT(button2), "clicked", GTK_SIGNAL_FUNC(stop_button_clicked), NULL); gtk_box_pack_end(GTK_BOX(hbox2), button2, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); input_send_button = button; input_stop_button = button2; input_text_view = text_view; input_progress_bar = progress_bar; gtk_widget_show_all(window); gtk_widget_hide(button2); return window; }
static GtkAdjustment * terminal_adjustment_text_view(GtkWidget *terminal) { return gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(terminal)); }