mirror of
https://github.com/javalsai/lidm.git
synced 2025-09-05 04:28:00 +02:00
feat: utf8 support & partial ui.c refactor
This commit is contained in:
61
src/ofield.c
Normal file
61
src/ofield.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include "efield.h"
|
||||
#include "ofield.h"
|
||||
#include "ui.h"
|
||||
#include "util.h"
|
||||
|
||||
struct opts_field ofield_new(size_t opts) {
|
||||
if (opts == 0) {
|
||||
return (struct opts_field){
|
||||
.opts = 0,
|
||||
.current_opt = 0,
|
||||
.efield = efield_new(""),
|
||||
};
|
||||
}
|
||||
|
||||
return (struct opts_field){
|
||||
.opts = opts,
|
||||
.current_opt = 1,
|
||||
};
|
||||
}
|
||||
|
||||
void ofield_toedit(struct opts_field* self, char* init) {
|
||||
self->current_opt = 0;
|
||||
self->efield = efield_new(init);
|
||||
}
|
||||
|
||||
void ofield_kbd_type(struct opts_field* self, char* typed,
|
||||
char* empty_default) {
|
||||
if (self->current_opt != 0) ofield_toedit(self, empty_default);
|
||||
efield_update(&self->efield, typed);
|
||||
}
|
||||
|
||||
bool ofield_opts_seek(struct opts_field* self, char seek) {
|
||||
// no options or (a single option but its selected isntead of on edit)
|
||||
if (self->opts == 0 || (self->opts == 1 && self->current_opt != 0))
|
||||
return false;
|
||||
|
||||
self->current_opt = 1 + ((self->current_opt - 1 + seek) % self->opts);
|
||||
ui_update_ofield(self);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ofield_seek(struct opts_field* self, char seek) {
|
||||
if (self->current_opt == 0) {
|
||||
if (efield_seek(&self->efield, seek)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->opts == 0) return false;
|
||||
ofield_opts_seek(self, seek);
|
||||
return true;
|
||||
}
|
||||
|
||||
u_char ofield_display_cursor_col(struct opts_field* self) {
|
||||
if (self->current_opt == 0)
|
||||
return utf8len_until(self->efield.content,
|
||||
&self->efield.content[self->efield.pos]);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user