Lines Matching refs:item
91 static bool fieldctl(struct privateitem *item, enum operation op) in fieldctl() argument
100 if (item->pos == 0 && item->xcursor == 0) in fieldctl()
104 item->pos = 0; in fieldctl()
105 item->xcursor = 0; in fieldctl()
106 item->xposdraw = 0; in fieldctl()
109 while (fieldctl(item, MOVE_CURSOR_RIGHT)) in fieldctl()
113 if (item->pos == 0) in fieldctl()
116 if (item->xcursor == 0 && item->xposdraw == 0) in fieldctl()
120 item->pos -= 1; in fieldctl()
121 width = wcwidth(item->pubwbuf[item->pos]); in fieldctl()
122 if (((int)item->xcursor) - width < 0) { in fieldctl()
123 item->xcursor = 0; in fieldctl()
124 item->xposdraw -= 1; in fieldctl()
126 item->xcursor -= width; in fieldctl()
129 if (item->xposdraw == 0) in fieldctl()
131 if (item->xcursor >= item->fieldcols / 2) in fieldctl()
133 if (wcwidth(item->pubwbuf[item->xposdraw - 1]) + in fieldctl()
134 item->xcursor + width > item->fieldcols) in fieldctl()
137 item->xposdraw -= 1; in fieldctl()
138 item->xcursor += in fieldctl()
139 wcwidth(item->pubwbuf[item->xposdraw]); in fieldctl()
143 if (item->nletters == 0) in fieldctl()
145 if (item->pos == item->nletters) in fieldctl()
149 for (i = item->pos; i < item->nletters; i++) { in fieldctl()
150 item->privwbuf[i] = item->privwbuf[i+1]; in fieldctl()
151 item->pubwbuf[i] = item->pubwbuf[i+1]; in fieldctl()
153 item->nletters -= 1; in fieldctl()
154 item->privwbuf[i] = L'\0'; in fieldctl()
155 item->pubwbuf[i] = L'\0'; in fieldctl()
158 if (item->pos + 1 == item->maxletters) in fieldctl()
160 if (item->pos == item->nletters) in fieldctl()
164 oldwidth = wcwidth(item->pubwbuf[item->pos]); in fieldctl()
165 item->pos += 1; in fieldctl()
166 if (item->pos == item->nletters) { /* empty column */ in fieldctl()
169 nextwidth = wcwidth(item->pubwbuf[item->pos]); in fieldctl()
171 if (item->xcursor + oldwidth + nextwidth - 1 >= item->fieldcols) { in fieldctl()
173 item->xposdraw = item->pos; in fieldctl()
174 while (item->xposdraw != 0) { in fieldctl()
175 cols += wcwidth(item->pubwbuf[item->xposdraw - 1]); in fieldctl()
176 if (cols > (int)item->fieldcols) in fieldctl()
178 item->xposdraw -= 1; in fieldctl()
180 item->xcursor = 0; in fieldctl()
181 for (i = item->xposdraw; i < item->pos ; i++) in fieldctl()
182 item->xcursor += wcwidth(item->pubwbuf[i]); in fieldctl()
185 item->xcursor += oldwidth; in fieldctl()
195 drawitem(struct privateform *form, struct privateitem *item, bool focus) in drawitem() argument
202 mvwaddstr(form->pad, item->ylabel, item->xlabel, item->label); in drawitem()
206 if (item->readonly) in drawitem()
208 else if (item->fieldnocolor) in drawitem()
213 mvwhline(form->pad, item->yfield, item->xfield, ' ', item->fieldcols); in drawitem()
215 cols = wcwidth(item->pubwbuf[item->xposdraw]); in drawitem()
216 while (cols <= item->fieldcols && item->xposdraw + n < in drawitem()
217 wcslen(item->pubwbuf)) { in drawitem()
219 cols += wcwidth(item->pubwbuf[item->xposdraw + n]); in drawitem()
222 mvwaddnwstr(form->pad, item->yfield, item->xfield, in drawitem()
223 &item->pubwbuf[item->xposdraw], n); in drawitem()
229 if (item->bottomdesc != NULL && focus) { in drawitem()
231 addstr(item->bottomdesc); in drawitem()
237 curs_set((focus && item->cursor) ? 1 : 0); in drawitem()
238 wmove(form->pad, item->yfield, item->xfield + item->xcursor); in drawitem()
252 #define DRAWITEM_TRICK(form,item,focus) do { \ argument
253 drawitem(form, item, !focus); \
254 drawitem(form, item, focus); \
258 insertch(struct privateform *form, struct privateitem *item, wchar_t wch) in insertch() argument
262 if (item->nletters >= item->maxletters) in insertch()
265 for (i = (int)item->nletters - 1; i >= (int)item->pos; i--) { in insertch()
266 item->privwbuf[i+1] = item->privwbuf[i]; in insertch()
267 item->pubwbuf[i+1] = item->pubwbuf[i]; in insertch()
270 item->privwbuf[item->pos] = wch; in insertch()
271 item->pubwbuf[item->pos] = item->secure ? form->securewch : wch; in insertch()
272 item->nletters += 1; in insertch()
273 item->privwbuf[item->nletters] = L'\0'; in insertch()
274 item->pubwbuf[item->nletters] = L'\0'; in insertch()
493 static void curriteminview(struct privateform *form, struct privateitem *item) in curriteminview() argument
497 yup = MIN(item->ylabel, item->yfield); in curriteminview()
498 ydown = MAX(item->ylabel, item->yfield); in curriteminview()
518 struct privateitem *items, *item; in bsddialog_form() local
546 item = &items[i]; in bsddialog_form()
547 item->label = apiitems[i].label; in bsddialog_form()
548 item->ylabel = apiitems[i].ylabel; in bsddialog_form()
549 item->xlabel = apiitems[i].xlabel; in bsddialog_form()
550 item->yfield = apiitems[i].yfield; in bsddialog_form()
551 item->xfield = apiitems[i].xfield; in bsddialog_form()
552 item->secure = apiitems[i].flags & BSDDIALOG_FIELDHIDDEN; in bsddialog_form()
553 item->readonly = apiitems[i].flags & BSDDIALOG_FIELDREADONLY; in bsddialog_form()
554 item->fieldnocolor = apiitems[i].flags & BSDDIALOG_FIELDNOCOLOR; in bsddialog_form()
555 item->extendfield = apiitems[i].flags & BSDDIALOG_FIELDEXTEND; in bsddialog_form()
556 item->fieldonebyte = apiitems[i].flags & in bsddialog_form()
558 item->cursorend = apiitems[i].flags & BSDDIALOG_FIELDCURSOREND; in bsddialog_form()
559 item->bottomdesc = apiitems[i].bottomdesc; in bsddialog_form()
560 if (item->readonly || (item->secure && !insecurecursor)) in bsddialog_form()
561 item->cursor = false; in bsddialog_form()
563 item->cursor = true; in bsddialog_form()
565 item->maxletters = apiitems[i].maxvaluelen; in bsddialog_form()
566 item->privwbuf = calloc(item->maxletters + 1, sizeof(wchar_t)); in bsddialog_form()
567 if (item->privwbuf == NULL) in bsddialog_form()
569 memset(item->privwbuf, 0, item->maxletters + 1); in bsddialog_form()
570 item->pubwbuf = calloc(item->maxletters + 1, sizeof(wchar_t)); in bsddialog_form()
571 if (item->pubwbuf == NULL) in bsddialog_form()
573 memset(item->pubwbuf, 0, item->maxletters + 1); in bsddialog_form()
577 wcsncpy(item->privwbuf, winit, item->maxletters); in bsddialog_form()
578 wcsncpy(item->pubwbuf, winit, item->maxletters); in bsddialog_form()
580 item->nletters = wcslen(item->pubwbuf); in bsddialog_form()
581 if (item->secure) { in bsddialog_form()
582 for (j = 0; j < item->nletters; j++) in bsddialog_form()
583 item->pubwbuf[j] = form.securewch; in bsddialog_form()
586 item->fieldcols = apiitems[i].fieldlen; in bsddialog_form()
587 item->xposdraw = 0; in bsddialog_form()
588 item->xcursor = 0; in bsddialog_form()
589 item->pos = 0; in bsddialog_form()
651 fieldctl(item, MOVE_CURSOR_END); in bsddialog_form()
677 item = &items[curritem]; in bsddialog_form()
678 curriteminview(&form, item); in bsddialog_form()
681 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
683 item = NULL; in bsddialog_form()
727 if(fieldctl(item, MOVE_CURSOR_LEFT)) in bsddialog_form()
728 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
739 if(fieldctl(item, MOVE_CURSOR_RIGHT)) in bsddialog_form()
740 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
783 if(fieldctl(item, MOVE_CURSOR_LEFT)) in bsddialog_form()
784 if(fieldctl(item, DEL_LETTER)) in bsddialog_form()
785 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
790 if(fieldctl(item, DEL_LETTER)) in bsddialog_form()
791 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
796 if(fieldctl(item, MOVE_CURSOR_BEGIN)) in bsddialog_form()
797 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
802 if (fieldctl(item, MOVE_CURSOR_END)) in bsddialog_form()
803 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
870 curriteminview(&form, item); in bsddialog_form()
874 DRAWITEM_TRICK(&form, item, focusinform); in bsddialog_form()
883 if (item->fieldonebyte && wctob(input) == EOF) in bsddialog_form()
890 if(insertch(&form, item, input)) { in bsddialog_form()
891 fieldctl(item, MOVE_CURSOR_RIGHT); in bsddialog_form()
896 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()
915 DRAWITEM_TRICK(&form, item, focusinform); in bsddialog_form()
920 DRAWITEM_TRICK(&form, item, false); in bsddialog_form()
922 item = &items[curritem]; in bsddialog_form()
923 curriteminview(&form, item); in bsddialog_form()
925 DRAWITEM_TRICK(&form, item, true); in bsddialog_form()