NeoMutt  2025-01-09-41-g086358
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
recalc()

Recalculate the Window data. More...

+ Collaboration diagram for recalc():

Functions

int alias_recalc (struct MuttWindow *win)
 Recalculate the display of the Alias Window - Implements MuttWindow::recalc() -.
 
static int attach_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int cbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int compose_recalc (struct MuttWindow *dlg)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int preview_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int enter_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int env_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int msgwin_recalc (struct MuttWindow *win)
 Recalculate the display of the Message Window - Implements MuttWindow::recalc() -.
 
static int sbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int helpbar_recalc (struct MuttWindow *win)
 Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -.
 
static int ibar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int index_recalc (struct MuttWindow *win)
 Recalculate the Index display - Implements MuttWindow::recalc() -.
 
static int menu_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int pager_recalc (struct MuttWindow *win)
 Recalculate the Pager display - Implements MuttWindow::recalc() -.
 
static int pbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int progress_window_recalc (struct MuttWindow *win)
 Recalculate the Progress Bar - Implements MuttWindow::recalc() -.
 
int sb_recalc (struct MuttWindow *win)
 Recalculate the Sidebar display - Implements MuttWindow::recalc() -.
 

Detailed Description

Recalculate the Window data.

Parameters
winWindow
Return values
0Success
-1Error
Precondition
win is not NULL
win is visible

Function Documentation

◆ alias_recalc()

int alias_recalc ( struct MuttWindow win)

Recalculate the display of the Alias Window - Implements MuttWindow::recalc() -.

Definition at line 92 of file gui.c.

93{
94 struct Menu *menu = win->wdata;
95 struct AliasMenuData *mdata = menu->mdata;
96
97 alias_array_sort(&mdata->ava, mdata->sub);
98
100 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
101 return 0;
102}
void alias_array_sort(struct AliasViewArray *ava, const struct ConfigSubset *sub)
Sort and reindex an AliasViewArray.
Definition: sort.c:235
#define mutt_debug(LEVEL,...)
Definition: logging2.h:89
@ LL_DEBUG5
Log at debug level 5.
Definition: logging2.h:47
#define WA_REPAINT
Redraw the contents of the Window.
Definition: mutt_window.h:111
AliasView array wrapper with Pattern information -.
Definition: gui.h:54
struct Menu * menu
Menu.
Definition: gui.h:58
Definition: lib.h:79
struct MuttWindow * win
Window holding the Menu.
Definition: lib.h:86
void * mdata
Private data.
Definition: lib.h:147
void * wdata
Private data.
Definition: mutt_window.h:145
WindowActionFlags actions
Actions to be performed, e.g. WA_RECALC.
Definition: mutt_window.h:132
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ attach_recalc()

static int attach_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 242 of file attach.c.

243{
244 struct Menu *menu = win->wdata;
245 struct ComposeAttachData *adata = menu->mdata;
246
247 const int cur_rows = win->state.rows;
248 const int new_rows = adata->actx->idxlen;
249
250 if (new_rows != cur_rows)
251 {
252 win->req_rows = new_rows;
255 }
256
257 win->actions |= WA_REPAINT;
258 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
259 return 0;
260}
void menu_adjust(struct Menu *menu)
Reapply the config to the Menu.
Definition: move.c:319
void mutt_window_reflow(struct MuttWindow *win)
Resize a Window and its children.
Definition: mutt_window.c:306
short idxlen
Number of attachmentes.
Definition: attach.h:68
Data to fill the Compose Attach Window.
Definition: attach_data.h:33
struct Menu * menu
Menu displaying the attachments.
Definition: attach_data.h:35
struct AttachCtx * actx
Set of attachments.
Definition: attach_data.h:34
struct WindowState state
Current state of the Window.
Definition: mutt_window.h:127
short req_rows
Number of rows required.
Definition: mutt_window.h:125
struct MuttWindow * parent
Parent Window.
Definition: mutt_window.h:135
short rows
Number of rows, can be MUTT_WIN_SIZE_UNLIMITED.
Definition: mutt_window.h:62
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cbar_recalc()

static int cbar_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

See also
$compose_format

Definition at line 81 of file cbar.c.

82{
83 struct Buffer *buf = buf_pool_get();
84 struct ComposeSharedData *shared = win->parent->wdata;
85
86 const struct Expando *c_compose_format = cs_subset_expando(shared->sub, "compose_format");
87 expando_filter(c_compose_format, ComposeRenderCallbacks, shared,
89
90 struct ComposeBarData *cbar_data = win->wdata;
91 if (!mutt_str_equal(buf_string(buf), cbar_data->compose_format))
92 {
94 win->actions |= WA_REPAINT;
95 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
96 }
97 buf_pool_release(&buf);
98
99 return 0;
100}
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:96
const struct ExpandoRenderCallback ComposeRenderCallbacks[]
Callbacks for Compose Expandos.
Definition: expando.c:105
const struct Expando * cs_subset_expando(const struct ConfigSubset *sub, const char *name)
Get an Expando config item by name.
Definition: config_type.c:357
int expando_filter(const struct Expando *exp, const struct ExpandoRenderCallback *erc, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
Render an Expando and run the result through a filter.
Definition: filter.c:138
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:660
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
Definition: string.c:280
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
Definition: pool.c:82
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
Definition: pool.c:96
#define MUTT_FORMAT_NO_FLAGS
No flags are set.
Definition: render.h:33
String manipulation buffer.
Definition: buffer.h:36
Data to fill the Compose Bar Window.
Definition: cbar_data.h:34
char * compose_format
Cached status string.
Definition: cbar_data.h:35
Shared Compose Data.
Definition: shared_data.h:36
struct ConfigSubset * sub
Config set to use.
Definition: shared_data.h:37
Parsed Expando trees.
Definition: expando.h:41
short cols
Number of columns, can be MUTT_WIN_SIZE_UNLIMITED.
Definition: mutt_window.h:61
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compose_recalc()

static int compose_recalc ( struct MuttWindow dlg)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 127 of file dlg_compose.c.

128{
129 if (!dlg)
130 return -1;
131
132 struct ComposeSharedData *shared = dlg->wdata;
133 struct MuttWindow *win_env = window_find_child(dlg, WT_CUSTOM);
134 struct MuttWindow *win_preview = shared->win_preview;
135 struct MuttWindow *win_preview_bar = shared->win_preview_bar;
136
137 const bool c_show_preview = cs_subset_bool(shared->sub, "compose_show_preview");
138 const short c_preview_min_rows = cs_subset_number(shared->sub, "compose_preview_min_rows");
139
140 // How many rows are available for the preview window?
141 // Total rows - (envelope window + attachments + number of status bars)
142 int rows_available = dlg->state.rows -
143 (win_env->state.rows + shared->adata->actx->idxlen + 3);
144
145 if (c_show_preview && rows_available >= c_preview_min_rows)
146 {
147 window_set_visible(win_preview, true);
148 window_set_visible(win_preview_bar, true);
150 }
151 else
152 {
153 window_set_visible(win_preview, false);
154 window_set_visible(win_preview_bar, false);
156 }
157
158 return 0;
159}
void attachment_size_fixed(struct MuttWindow *win)
Make the Attachment Window fixed-size.
Definition: attach.c:297
void attachment_size_max(struct MuttWindow *win)
Make the Attachment Window maximised.
Definition: attach.c:310
short cs_subset_number(const struct ConfigSubset *sub, const char *name)
Get a number config item by name.
Definition: helpers.c:143
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:47
void window_set_visible(struct MuttWindow *win, bool visible)
Set a Window visible or hidden.
Definition: mutt_window.c:165
struct MuttWindow * window_find_child(struct MuttWindow *win, enum WindowType type)
Recursively find a child Window of a given type.
Definition: mutt_window.c:495
@ WT_CUSTOM
Window with a custom drawing function.
Definition: mutt_window.h:95
struct MuttWindow * win_preview
Message preview window.
Definition: shared_data.h:42
struct MuttWindow * win_preview_bar
Status bar divider above preview.
Definition: shared_data.h:43
struct ComposeAttachData * adata
Attachments.
Definition: shared_data.h:40
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ preview_recalc()

static int preview_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 325 of file preview.c.

326{
327 if (!win)
328 return -1;
329
330 win->actions |= WA_REPAINT;
331 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
332 return 0;
333}
+ Here is the caller graph for this function:

◆ enter_recalc()

static int enter_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

See also
$compose_format

Definition at line 175 of file window.c.

176{
177 win->actions |= WA_REPAINT;
178 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
179
180 return 0;
181}
+ Here is the caller graph for this function:

◆ env_recalc()

static int env_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 722 of file window.c.

723{
724 struct EnvelopeWindowData *wdata = win->wdata;
725
726 const int cur_rows = win->state.rows;
727 const int new_rows = calc_envelope(win, wdata);
728
729 if (new_rows != cur_rows)
730 {
731 win->req_rows = new_rows;
733 }
734
735 win->actions |= WA_REPAINT;
736 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
737 return 0;
738}
static int calc_envelope(struct MuttWindow *win, struct EnvelopeWindowData *wdata)
Calculate how many rows the envelope will need.
Definition: window.c:304
Data to fill the Envelope Window.
Definition: wdata.h:38
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ msgwin_recalc()

static int msgwin_recalc ( struct MuttWindow win)
static

Recalculate the display of the Message Window - Implements MuttWindow::recalc() -.

Definition at line 161 of file msgwin.c.

162{
163 win->actions |= WA_REPAINT;
164 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
165 return 0;
166}
+ Here is the caller graph for this function:

◆ sbar_recalc()

static int sbar_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 82 of file sbar.c.

83{
84 if (!win)
85 return -1;
86
87 win->actions |= WA_REPAINT;
88 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
89 return 0;
90}
+ Here is the caller graph for this function:

◆ helpbar_recalc()

static int helpbar_recalc ( struct MuttWindow win)
static

Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -.

Generate the help string from data on the focused Window. The Help Bar isn't drawn, yet.

Definition at line 125 of file helpbar.c.

126{
128 if (!wdata)
129 return 0;
130
131 FREE(&wdata->help_str);
132
133 struct MuttWindow *win_focus = window_get_focus();
134 if (!win_focus)
135 return 0;
136
137 // Ascend the Window tree until we find help_data
138 while (win_focus && !win_focus->help_data)
139 win_focus = win_focus->parent;
140
141 if (!win_focus)
142 return 0;
143
144 struct Buffer *helpstr = buf_pool_get();
145 compile_help(win_focus->help_menu, win_focus->help_data, helpstr);
146
147 wdata->help_menu = win_focus->help_menu;
148 wdata->help_data = win_focus->help_data;
149 wdata->help_str = buf_strdup(helpstr);
150 buf_pool_release(&helpstr);
151
152 win->actions |= WA_REPAINT;
153 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
154 return 0;
155}
char * buf_strdup(const struct Buffer *buf)
Copy a Buffer's string.
Definition: buffer.c:571
struct HelpbarWindowData * helpbar_wdata_get(struct MuttWindow *win)
Get the Helpbar data for this window.
Definition: wdata.c:64
static void compile_help(enum MenuType menu, const struct Mapping *items, struct Buffer *buf)
Create the text for the help menu.
Definition: helpbar.c:108
#define FREE(x)
Definition: memory.h:55
struct MuttWindow * window_get_focus(void)
Get the currently focused Window.
Definition: mutt_window.c:630
Help Bar Window data -.
Definition: private.h:34
int help_menu
Menu for key bindings, e.g. MENU_PAGER.
Definition: private.h:35
char * help_str
Formatted Help Bar string.
Definition: private.h:37
const struct Mapping * help_data
Data for the Help Bar.
Definition: private.h:36
const struct Mapping * help_data
Data for the Help Bar.
Definition: mutt_window.h:142
int help_menu
Menu for key bindings, e.g. MENU_PAGER.
Definition: mutt_window.h:141
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ibar_recalc()

static int ibar_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 91 of file ibar.c.

92{
93 struct Buffer *buf = buf_pool_get();
94
95 struct IBarPrivateData *ibar_data = win->wdata;
96 struct IndexSharedData *shared = ibar_data->shared;
97 struct IndexPrivateData *priv = ibar_data->priv;
98
99 const struct Expando *c_status_format = cs_subset_expando(shared->sub, "status_format");
100 menu_status_line(buf, shared, priv->menu, win->state.cols, c_status_format);
101
102 if (!mutt_str_equal(buf_string(buf), ibar_data->status_format))
103 {
104 mutt_str_replace(&ibar_data->status_format, buf_string(buf));
105 win->actions |= WA_REPAINT;
106 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
107 }
108
109 const bool c_ts_enabled = cs_subset_bool(shared->sub, "ts_enabled");
110 if (c_ts_enabled && TsSupported)
111 {
112 buf_reset(buf);
113 const struct Expando *c_ts_status_format = cs_subset_expando(shared->sub, "ts_status_format");
114 menu_status_line(buf, shared, priv->menu, -1, c_ts_status_format);
115 if (!mutt_str_equal(buf_string(buf), ibar_data->ts_status_format))
116 {
118 win->actions |= WA_REPAINT;
119 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
120 }
121
122 buf_reset(buf);
123 const struct Expando *c_ts_icon_format = cs_subset_expando(shared->sub, "ts_icon_format");
124 menu_status_line(buf, shared, priv->menu, -1, c_ts_icon_format);
125 if (!mutt_str_equal(buf_string(buf), ibar_data->ts_icon_format))
126 {
127 mutt_str_replace(&ibar_data->ts_icon_format, buf_string(buf));
128 win->actions |= WA_REPAINT;
129 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
130 }
131 }
132
133 buf_pool_release(&buf);
134 return 0;
135}
void buf_reset(struct Buffer *buf)
Reset an existing Buffer.
Definition: buffer.c:76
void menu_status_line(struct Buffer *buf, struct IndexSharedData *shared, struct Menu *menu, int max_cols, const struct Expando *exp)
Create the status line.
Definition: status.c:50
Data to draw the Index Bar.
Definition: ibar.c:80
char * ts_icon_format
Cached terminal icon string.
Definition: ibar.c:85
struct IndexSharedData * shared
Shared Index data.
Definition: ibar.c:81
char * ts_status_format
Cached terminal status string.
Definition: ibar.c:84
char * status_format
Cached screen status string.
Definition: ibar.c:83
struct IndexPrivateData * priv
Private Index data.
Definition: ibar.c:82
Private state data for the Index.
Definition: private_data.h:35
struct Menu * menu
Menu controlling the index.
Definition: private_data.h:41
Data shared between Index, Pager and Sidebar.
Definition: shared_data.h:37
struct ConfigSubset * sub
Config set to use.
Definition: shared_data.h:38
bool TsSupported
Terminal Setting is supported.
Definition: terminal.c:42
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ index_recalc()

static int index_recalc ( struct MuttWindow win)
static

Recalculate the Index display - Implements MuttWindow::recalc() -.

Definition at line 587 of file index.c.

588{
589 win->actions |= WA_REPAINT;
590 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
591 return 0;
592}
+ Here is the caller graph for this function:

◆ menu_recalc()

static int menu_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 80 of file window.c.

81{
82 if (win->type != WT_MENU)
83 return 0;
84
85 win->actions |= WA_REPAINT;
86 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
87 return 0;
88}
@ WT_MENU
An Window containing a Menu.
Definition: mutt_window.h:98
enum WindowType type
Window type, e.g. WT_SIDEBAR.
Definition: mutt_window.h:144
+ Here is the caller graph for this function:

◆ pager_recalc()

static int pager_recalc ( struct MuttWindow win)
static

Recalculate the Pager display - Implements MuttWindow::recalc() -.

Definition at line 121 of file pager.c.

122{
123 win->actions |= WA_REPAINT;
124 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
125 return 0;
126}
+ Here is the caller graph for this function:

◆ pbar_recalc()

static int pbar_recalc ( struct MuttWindow win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 91 of file pbar.c.

92{
93 struct PBarPrivateData *pbar_data = win->wdata;
94 struct IndexSharedData *shared = pbar_data->shared;
95 struct PagerPrivateData *priv = pbar_data->priv;
96 if (!priv || !priv->pview)
97 return 0;
98
99 struct Buffer *buf = buf_pool_get();
100 char pager_progress_str[65] = { 0 }; /* Lots of space for translations */
101
102 long offset;
103 if (priv->lines && (priv->cur_line <= priv->lines_used))
104 offset = priv->lines[priv->cur_line].offset;
105 else
106 offset = priv->bytes_read;
107
108 if (offset < (priv->st.st_size - 1))
109 {
110 const long percent = (100 * offset) / priv->st.st_size;
111 /* L10N: Pager position percentage.
112 `%ld` is the number, `%%` is the percent symbol.
113 They may be reordered, or space inserted, if you wish. */
114 snprintf(pager_progress_str, sizeof(pager_progress_str), _("%ld%%"), percent);
115 }
116 else
117 {
118 const char *msg = (priv->top_line == 0) ?
119 /* L10N: Status bar message: the entire email is visible in the pager */
120 _("all") :
121 /* L10N: Status bar message: the end of the email is visible in the pager */
122 _("end");
123 mutt_str_copy(pager_progress_str, msg, sizeof(pager_progress_str));
124 }
125
126 if ((priv->pview->mode == PAGER_MODE_EMAIL) || (priv->pview->mode == PAGER_MODE_ATTACH_E))
127 {
128 int msg_in_pager = shared->mailbox_view ? shared->mailbox_view->msg_in_pager : -1;
129
130 const struct Expando *c_pager_format = cs_subset_expando(shared->sub, "pager_format");
131 mutt_make_string(buf, win->state.cols, c_pager_format, shared->mailbox, msg_in_pager,
132 shared->email, MUTT_FORMAT_NO_FLAGS, pager_progress_str);
133 }
134 else
135 {
136 buf_printf(buf, "%s (%s)", priv->pview->banner, pager_progress_str);
137 }
138
139 if (!mutt_str_equal(buf_string(buf), pbar_data->pager_format))
140 {
141 mutt_str_replace(&pbar_data->pager_format, buf_string(buf));
142 win->actions |= WA_REPAINT;
143 }
144
145 buf_pool_release(&buf);
146 return 0;
147}
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition: buffer.c:161
int mutt_make_string(struct Buffer *buf, size_t max_cols, const struct Expando *exp, struct Mailbox *m, int inpgr, struct Email *e, MuttFormatFlags flags, const char *progress)
Create formatted strings using mailbox expandos.
Definition: dlg_index.c:803
#define _(a)
Definition: message.h:28
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
Definition: string.c:581
@ PAGER_MODE_EMAIL
Pager is invoked via 1st path. The mime part is selected automatically.
Definition: lib.h:136
@ PAGER_MODE_ATTACH_E
A special case of PAGER_MODE_ATTACH - attachment is a full-blown email message.
Definition: lib.h:138
struct Email * email
Currently selected Email.
Definition: shared_data.h:42
struct Mailbox * mailbox
Current Mailbox.
Definition: shared_data.h:41
struct MailboxView * mailbox_view
Current Mailbox view.
Definition: shared_data.h:40
LOFF_T offset
Offset into Email file (PagerPrivateData->fp)
Definition: display.h:51
int msg_in_pager
Message currently shown in the pager.
Definition: mview.h:45
Data to draw the Pager Bar.
Definition: pbar.c:82
struct PagerPrivateData * priv
Private Pager data.
Definition: pbar.c:84
char * pager_format
Cached status string.
Definition: pbar.c:85
struct IndexSharedData * shared
Shared Index data.
Definition: pbar.c:83
Private state data for the Pager.
Definition: private_data.h:41
int cur_line
Current line (last line visible on screen)
Definition: private_data.h:51
int lines_used
Size of lines array (used entries)
Definition: private_data.h:49
struct Line * lines
Array of text lines in pager.
Definition: private_data.h:48
LOFF_T bytes_read
Number of bytes read from file.
Definition: private_data.h:46
int top_line
First visible line on screen.
Definition: private_data.h:55
struct stat st
Stats about Email file.
Definition: private_data.h:45
struct PagerView * pview
Object to view in the pager.
Definition: private_data.h:42
enum PagerMode mode
Pager mode.
Definition: lib.h:172
const char * banner
Title to display in status bar.
Definition: lib.h:174
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ progress_window_recalc()

static int progress_window_recalc ( struct MuttWindow win)
static

Recalculate the Progress Bar - Implements MuttWindow::recalc() -.

Definition at line 135 of file window.c.

136{
137 if (!win || !win->wdata)
138 return -1;
139
140 struct ProgressWindowData *wdata = win->wdata;
141 wdata->display_pos = wdata->update_pos;
142 wdata->display_time = wdata->update_time;
143
144 if (wdata->is_bytes)
145 mutt_str_pretty_size(wdata->pretty_pos, sizeof(wdata->pretty_pos), wdata->display_pos);
146
147 if ((wdata->update_percent < 0) && (wdata->size != 0))
148 wdata->display_percent = 100 * wdata->display_pos / wdata->size;
149 else
150 wdata->display_percent = wdata->update_percent;
151
153 return 0;
154}
void mutt_str_pretty_size(char *buf, size_t buflen, size_t num)
Display an abbreviated size, like 3.4K.
Definition: muttlib.c:1003
Progress Bar Window Data.
Definition: wdata.h:36
int update_percent
Updated percentage complete.
Definition: wdata.h:55
size_t size
Total expected size.
Definition: wdata.h:42
char pretty_pos[24]
Pretty string for the position.
Definition: wdata.h:51
uint64_t update_time
Time of last update.
Definition: wdata.h:56
int display_percent
Displayed percentage complete.
Definition: wdata.h:49
size_t display_pos
Displayed position.
Definition: wdata.h:48
bool is_bytes
true if measuring bytes
Definition: wdata.h:45
size_t update_pos
Updated position.
Definition: wdata.h:54
struct MuttWindow * win
Window to draw on.
Definition: wdata.h:37
uint64_t display_time
Time of last display.
Definition: wdata.h:50
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sb_recalc()

int sb_recalc ( struct MuttWindow win)

Recalculate the Sidebar display - Implements MuttWindow::recalc() -.

Definition at line 506 of file window.c.

507{
509 struct IndexSharedData *shared = wdata->shared;
510
511 if (ARRAY_EMPTY(&wdata->entries))
512 {
513 struct MailboxList ml = STAILQ_HEAD_INITIALIZER(ml);
515 struct MailboxNode *np = NULL;
516 STAILQ_FOREACH(np, &ml, entries)
517 {
518 if (np->mailbox->visible)
519 sb_add_mailbox(wdata, np->mailbox);
520 }
522 }
523
524 if (!prepare_sidebar(wdata, win->state.rows))
525 {
526 win->actions |= WA_REPAINT;
527 return 0;
528 }
529
530 int num_rows = win->state.rows;
531 int num_cols = win->state.cols;
532
533 if (ARRAY_EMPTY(&wdata->entries) || (num_rows <= 0))
534 return 0;
535
536 if (wdata->top_index < 0)
537 return 0;
538
539 int width = num_cols - wdata->divider_width;
540 int row = 0;
541 struct Mailbox *m_cur = shared->mailbox;
542 struct SbEntry **sbep = NULL;
543 ARRAY_FOREACH_FROM(sbep, &wdata->entries, wdata->top_index)
544 {
545 if (row >= num_rows)
546 break;
547
548 if ((*sbep)->is_hidden)
549 continue;
550
551 struct SbEntry *entry = (*sbep);
552 struct Mailbox *m = entry->mailbox;
553
554 const int entryidx = ARRAY_FOREACH_IDX_sbep;
555 entry->color = calc_color(m, (entryidx == wdata->opn_index),
556 (entryidx == wdata->hil_index));
557
558 if (m_cur && (m_cur->realpath[0] != '\0') &&
559 mutt_str_equal(m->realpath, m_cur->realpath))
560 {
561 m->msg_unread = m_cur->msg_unread;
562 m->msg_count = m_cur->msg_count;
563 m->msg_flagged = m_cur->msg_flagged;
564 }
565
566 const char *path = mailbox_path(m);
567
568 const char *const c_folder = cs_subset_string(NeoMutt->sub, "folder");
569 // Try to abbreviate the full path
570 const char *abbr = abbrev_folder(path, c_folder, m->type);
571 if (!abbr)
572 abbr = abbrev_url(path, m->type);
573 const char *short_path = abbr ? abbr : path;
574
575 /* Compute the depth */
576 const char *last_part = abbr;
577 const char *const c_sidebar_delim_chars = cs_subset_string(NeoMutt->sub, "sidebar_delim_chars");
578 entry->depth = calc_path_depth(abbr, c_sidebar_delim_chars, &last_part);
579
580 const bool short_path_is_abbr = (short_path == abbr);
581 const bool c_sidebar_short_path = cs_subset_bool(NeoMutt->sub, "sidebar_short_path");
582 if (c_sidebar_short_path)
583 {
584 short_path = last_part;
585 }
586
587 // Don't indent if we were unable to create an abbreviation.
588 // Otherwise, the full path will be indent, and it looks unusual.
589 const bool c_sidebar_folder_indent = cs_subset_bool(NeoMutt->sub, "sidebar_folder_indent");
590 if (c_sidebar_folder_indent && short_path_is_abbr)
591 {
592 const short c_sidebar_component_depth = cs_subset_number(NeoMutt->sub, "sidebar_component_depth");
593 if (c_sidebar_component_depth > 0)
594 entry->depth -= c_sidebar_component_depth;
595 }
596 else if (!c_sidebar_folder_indent)
597 {
598 entry->depth = 0;
599 }
600
601 mutt_str_copy(entry->box, short_path, sizeof(entry->box));
602 make_sidebar_entry(entry->display, sizeof(entry->display), width, entry, shared);
603 row++;
604 }
605
606 win->actions |= WA_REPAINT;
607 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
608 return 0;
609}
#define ARRAY_EMPTY(head)
Check if an array is empty.
Definition: array.h:74
#define ARRAY_FOREACH_FROM(elem, head, from)
Iterate from an index to the end.
Definition: array.h:223
const char * cs_subset_string(const struct ConfigSubset *sub, const char *name)
Get a string config item by name.
Definition: helpers.c:291
static const char * mailbox_path(const struct Mailbox *m)
Get the Mailbox's path string.
Definition: mailbox.h:223
@ MUTT_MAILBOX_ANY
Match any Mailbox type.
Definition: mailbox.h:42
void neomutt_mailboxlist_clear(struct MailboxList *ml)
Free a Mailbox List.
Definition: neomutt.c:168
size_t neomutt_mailboxlist_get_all(struct MailboxList *head, struct NeoMutt *n, enum MailboxType type)
Get a List of all Mailboxes.
Definition: neomutt.c:191
#define STAILQ_HEAD_INITIALIZER(head)
Definition: queue.h:324
#define STAILQ_FOREACH(var, head, field)
Definition: queue.h:390
void sb_add_mailbox(struct SidebarWindowData *wdata, struct Mailbox *m)
Add a Mailbox to the Sidebar.
Definition: sidebar.c:89
struct SidebarWindowData * sb_wdata_get(struct MuttWindow *win)
Get the Sidebar data for this window.
Definition: wdata.c:77
static const char * abbrev_url(const char *mbox, enum MailboxType type)
Abbreviate a url-style Mailbox path.
Definition: window.c:193
static const struct AttrColor * calc_color(const struct Mailbox *m, bool current, bool highlight)
Calculate the colour of a Sidebar row.
Definition: window.c:222
static const char * abbrev_folder(const char *mbox, const char *folder, enum MailboxType type)
Abbreviate a Mailbox path using a folder.
Definition: window.c:129
static int calc_path_depth(const char *mbox, const char *delims, const char **last_part)
Calculate the depth of a Mailbox path.
Definition: window.c:285
static bool prepare_sidebar(struct SidebarWindowData *wdata, int page_size)
Prepare the list of SbEntry's for the sidebar display.
Definition: window.c:421
static void make_sidebar_entry(char *buf, size_t buflen, int width, struct SbEntry *sbe, struct IndexSharedData *shared)
Turn mailbox data into a sidebar string.
Definition: window.c:315
List of Mailboxes.
Definition: mailbox.h:166
struct Mailbox * mailbox
Mailbox in the list.
Definition: mailbox.h:167
A mailbox.
Definition: mailbox.h:79
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
Definition: mailbox.h:81
int msg_count
Total number of messages.
Definition: mailbox.h:88
enum MailboxType type
Mailbox type.
Definition: mailbox.h:102
bool visible
True if a result of "mailboxes".
Definition: mailbox.h:130
int msg_flagged
Number of flagged messages.
Definition: mailbox.h:90
int msg_unread
Number of unread messages.
Definition: mailbox.h:89
Container for Accounts, Notifications.
Definition: neomutt.h:42
struct ConfigSubset * sub
Inherited config items.
Definition: neomutt.h:46
Info about folders in the sidebar.
Definition: private.h:41
const struct AttrColor * color
Colour to use.
Definition: private.h:47
int depth
Indentation depth.
Definition: private.h:44
char display[256]
Formatted string to display.
Definition: private.h:43
struct Mailbox * mailbox
Mailbox this represents.
Definition: private.h:45
char box[256]
Mailbox path (possibly abbreviated)
Definition: private.h:42
Sidebar private Window data -.
Definition: private.h:88
int top_index
First mailbox visible in sidebar.
Definition: private.h:93
short divider_width
Width of the divider in screen columns.
Definition: private.h:100
int hil_index
Highlighted mailbox.
Definition: private.h:95
struct IndexSharedData * shared
Shared Index Data.
Definition: private.h:90
int opn_index
Current (open) mailbox.
Definition: private.h:94
struct MuttWindow * win
Sidebar Window.
Definition: private.h:89
struct SbEntryArray entries
Items to display in the sidebar.
Definition: private.h:91
+ Here is the call graph for this function:
+ Here is the caller graph for this function: