Example #1
0
void gui_windows_reset_settings(void)
{
	GSList *tmp;
	int old_wcwidth_impl = wcwidth_impl;

	wcwidth_impl = settings_get_choice("wcwidth_implementation");

	for (tmp = windows; tmp != NULL; tmp = tmp->next) {
		WINDOW_REC *rec = tmp->data;
		GUI_WINDOW_REC *gui = WINDOW_GUI(rec);

		if (old_wcwidth_impl != wcwidth_impl) {
			textbuffer_view_reset_cache(gui->view);
		}

		textbuffer_view_set_break_wide(gui->view, settings_get_bool("break_wide"));

		textbuffer_view_set_default_indent(gui->view,
						   settings_get_int("indent"),
						   !settings_get_bool("indent_always"),
						   get_default_indent_func());

		textbuffer_view_set_scroll(gui->view,
					   gui->use_scroll ? gui->scroll :
					   settings_get_bool("scroll"));

		if (old_wcwidth_impl != wcwidth_impl) {
			textbuffer_view_redraw(gui->view);
		}
	}
}
Example #2
0
/* Clear the view, don't actually remove any lines from buffer. */
void textbuffer_view_clear(TEXT_BUFFER_VIEW_REC *view)
{
        g_return_if_fail(view != NULL);

	view->ypos = -1;
	view->bottom_startline = view->startline =
		textbuffer_line_last(view->buffer);
	view->bottom_subline = view->subline =
		view->buffer->cur_line == NULL ? 0 :
		view_get_linecount(view, view->buffer->cur_line);
	view->empty_linecount = view->height;
	view->bottom = TRUE;
	view->more_text = FALSE;

        textbuffer_view_redraw(view);
}
Example #3
0
void textbuffer_view_remove_lines_by_level(TEXT_BUFFER_VIEW_REC *view, int level)
{
	LINE_REC *line, *next;
	
	term_refresh_freeze();
	line = textbuffer_view_get_lines(view);

	while (line != NULL) {
		next = line->next;

		if (line->info.level & level)
			textbuffer_view_remove_line(view, line);
		line = next;
	}
	textbuffer_view_redraw(view);
	term_refresh_thaw();
}
Example #4
0
/* Scroll to specified line */
void textbuffer_view_scroll_line(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
{
        g_return_if_fail(view != NULL);

	if (textbuffer_line_exists_after(view->bottom_startline->next, line)) {
		view->startline = view->bottom_startline;
		view->subline = view->bottom_subline;
	} else {
		view->startline = line;
                view->subline = 0;
	}

	textbuffer_view_init_ypos(view);
	view->bottom = view_is_bottom(view);
        if (view->bottom) view->more_text = FALSE;

	textbuffer_view_redraw(view);
}
Example #5
0
static void window_lastlog_clear(WINDOW_REC *window)
{
	TEXT_BUFFER_VIEW_REC *view;
        LINE_REC *line, *next;

        term_refresh_freeze();
	view = WINDOW_GUI(window)->view;
	line = textbuffer_view_get_lines(view);

	while (line != NULL) {
                next = line->next;

		if (line->info.level & MSGLEVEL_LASTLOG)
			textbuffer_view_remove_line(view, line);
                line = next;
	}
        textbuffer_view_redraw(view);
        term_refresh_thaw();
}
Example #6
0
/* Returns number of lines actually scrolled */
static int view_scroll(TEXT_BUFFER_VIEW_REC *view, LINE_REC **lines,
		       int *subline, int scrollcount, int draw_nonclean)
{
	int linecount, realcount, scroll_visible;

	if (*lines == NULL)
                return 0;

	/* scroll down */
	scroll_visible = lines == &view->startline;

	realcount = -*subline;
	scrollcount += *subline;
        *subline = 0;
	while (scrollcount > 0) {
		linecount = view_get_linecount(view, *lines);

		if ((scroll_visible && *lines == view->bottom_startline) &&
		    (scrollcount >= view->bottom_subline)) {
			*subline = view->bottom_subline;
                        realcount += view->bottom_subline;
                        scrollcount = 0;
                        break;
		}

                realcount += linecount;
		scrollcount -= linecount;
		if (scrollcount < 0) {
                        realcount += scrollcount;
			*subline = linecount+scrollcount;
                        scrollcount = 0;
                        break;
		}

		if ((*lines)->next == NULL)
			break;

                *lines = (*lines)->next;
	}

        /* scroll up */
	while (scrollcount < 0 && (*lines)->prev != NULL) {
		*lines = (*lines)->prev;
		linecount = view_get_linecount(view, *lines);

                realcount -= linecount;
		scrollcount += linecount;
		if (scrollcount > 0) {
                        realcount += scrollcount;
			*subline = scrollcount;
                        break;
		}
	}

	if (scroll_visible && realcount != 0 && view->window != NULL) {
		if (realcount <= -view->height || realcount >= view->height) {
			/* scrolled more than screenful, redraw the
			   whole view */
                        textbuffer_view_redraw(view);
		} else {
			term_set_color(view->window, ATTR_RESET);
			term_window_scroll(view->window, realcount);

			if (draw_nonclean) {
				if (realcount < 0)
                                        view_draw_top(view, -realcount, TRUE);
				else
					view_draw_bottom(view, realcount);
			}

			term_refresh(view->window);
		}
	}

	return realcount >= 0 ? realcount : -realcount;
}