listbox rewrite done
Some checks failed
pyrite-dev/milsko/pipeline/head There was a failure building this commit
Some checks failed
pyrite-dev/milsko/pipeline/head There was a failure building this commit
This commit is contained in:
parent
a666010564
commit
55c562645a
6 changed files with 77 additions and 32 deletions
|
|
@ -40,18 +40,18 @@ int main() {
|
||||||
|
|
||||||
MwSetInteger(lb, MwNleftPadding, 20);
|
MwSetInteger(lb, MwNleftPadding, 20);
|
||||||
|
|
||||||
index = MwListBoxInsert(lb, -1, 0, "Harvard sentence");
|
index = MwListBoxSet(lb, -1, 0, "Harvard sentence");
|
||||||
MwListBoxInsert(lb, index, -1, "Length");
|
MwListBoxSet(lb, index, -1, "Length");
|
||||||
|
|
||||||
for(i = 0; i < len; i++) {
|
for(i = 0; i < len; i++) {
|
||||||
char sz[16];
|
char sz[16];
|
||||||
MwStringPrintIntoBuffer(sz, 16, "%d", (int)strlen(harvard[i]));
|
MwStringPrintIntoBuffer(sz, 16, "%d", (int)strlen(harvard[i]));
|
||||||
index = MwListBoxInsert(lb, -1, 0, harvard[i]);
|
index = MwListBoxSet(lb, -1, 0, harvard[i]);
|
||||||
MwListBoxInsert(lb, index, -1, sz);
|
MwListBoxSet(lb, index, -1, sz);
|
||||||
MwListBoxSetIcon(lb, index, px);
|
MwListBoxSetIcon(lb, index, px);
|
||||||
}
|
}
|
||||||
|
|
||||||
MwAddUserHandler(lb, MwNactivateHandler, activate, NULL);
|
MwAddUserHandler(lb, MwNlistBoxActivateHandler, activate, NULL);
|
||||||
MwVaApply(lb,
|
MwVaApply(lb,
|
||||||
MwNhasHeading, 1,
|
MwNhasHeading, 1,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ typedef struct _MwLabelSegment MwLabelSegment;
|
||||||
typedef struct _MwListBoxEntry MwListBoxEntry;
|
typedef struct _MwListBoxEntry MwListBoxEntry;
|
||||||
typedef struct _MwTreeViewEntry MwTreeViewEntry;
|
typedef struct _MwTreeViewEntry MwTreeViewEntry;
|
||||||
typedef struct _MwDirectoryEntry MwDirectoryEntry;
|
typedef struct _MwDirectoryEntry MwDirectoryEntry;
|
||||||
typedef struct _MwListBoxPacket MwListBoxPacket;
|
|
||||||
typedef struct _MwBox* MwBox;
|
typedef struct _MwBox* MwBox;
|
||||||
typedef struct _MwMouse MwMouse;
|
typedef struct _MwMouse MwMouse;
|
||||||
#ifdef _MILSKO
|
#ifdef _MILSKO
|
||||||
|
|
@ -202,11 +201,6 @@ struct _MwDirectoryEntry {
|
||||||
time_t mtime;
|
time_t mtime;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _MwListBoxPacket {
|
|
||||||
MwLLPixmap* pixmaps;
|
|
||||||
char*** names;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _MwBox {
|
struct _MwBox {
|
||||||
int layout;
|
int layout;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,10 @@ MWDECL MwClass MwListBoxClass;
|
||||||
* @param text Text
|
* @param text Text
|
||||||
* @return Index
|
* @return Index
|
||||||
*/
|
*/
|
||||||
MwInline int MwListBoxInsert(MwWidget handle, int row, int col, const char* text) {
|
MwInline int MwListBoxSet(MwWidget handle, int row, int col, const char* text) {
|
||||||
int out;
|
int out;
|
||||||
|
|
||||||
MwVaWidgetExecute(handle, "mwListBoxInsert", (void*)&out, row, col, text);
|
MwVaWidgetExecute(handle, "mwListBoxSet", (void*)&out, row, col, text);
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@ static void layout(MwWidget handle) {
|
||||||
MwNleftPadding, 16,
|
MwNleftPadding, 16,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
index = MwListBoxInsert(fc->nav, -1, 0, "Home");
|
index = MwListBoxSet(fc->nav, -1, 0, "Home");
|
||||||
MwListBoxSetIcon(fc->nav, index, fc->computer);
|
MwListBoxSetIcon(fc->nav, index, fc->computer);
|
||||||
|
|
||||||
MwAddUserHandler(fc->nav, MwNlistBoxActivateHandler, nav_activate, NULL);
|
MwAddUserHandler(fc->nav, MwNlistBoxActivateHandler, nav_activate, NULL);
|
||||||
|
|
@ -462,9 +462,9 @@ static void scan(MwWidget handle, const char* path, int record) {
|
||||||
MwListBoxSetWidth(fc->files, 1, 128);
|
MwListBoxSetWidth(fc->files, 1, 128);
|
||||||
MwListBoxSetWidth(fc->files, 2, 0);
|
MwListBoxSetWidth(fc->files, 2, 0);
|
||||||
|
|
||||||
index = MwListBoxInsert(fc->files, -1, 0, "Name");
|
index = MwListBoxSet(fc->files, -1, 0, "Name");
|
||||||
MwListBoxInsert(fc->files, index, -1, "Date modified");
|
MwListBoxSet(fc->files, index, -1, "Date modified");
|
||||||
MwListBoxInsert(fc->files, index, -1, "Size");
|
MwListBoxSet(fc->files, index, -1, "Size");
|
||||||
|
|
||||||
for(i = 0; i < arrlen(fc->entries); i++) {
|
for(i = 0; i < arrlen(fc->entries); i++) {
|
||||||
if(strcmp(fc->entries[i]->name, ".") == 0 || strcmp(fc->entries[i]->name, "..") == 0) continue;
|
if(strcmp(fc->entries[i]->name, ".") == 0 || strcmp(fc->entries[i]->name, "..") == 0) continue;
|
||||||
|
|
@ -473,9 +473,9 @@ static void scan(MwWidget handle, const char* path, int record) {
|
||||||
|
|
||||||
MwStringTime(date, fc->entries[i]->mtime);
|
MwStringTime(date, fc->entries[i]->mtime);
|
||||||
|
|
||||||
index = MwListBoxInsert(fc->files, -1, 0, fc->entries[i]->name);
|
index = MwListBoxSet(fc->files, -1, 0, fc->entries[i]->name);
|
||||||
MwListBoxInsert(fc->files, index, -1, date);
|
MwListBoxSet(fc->files, index, -1, date);
|
||||||
MwListBoxInsert(fc->files, index, -1, NULL);
|
MwListBoxSet(fc->files, index, -1, NULL);
|
||||||
MwListBoxSetIcon(fc->files, index, fc->dir);
|
MwListBoxSetIcon(fc->files, index, fc->dir);
|
||||||
|
|
||||||
arrput(fc->sorted_entries, fc->entries[i]);
|
arrput(fc->sorted_entries, fc->entries[i]);
|
||||||
|
|
@ -489,9 +489,9 @@ static void scan(MwWidget handle, const char* path, int record) {
|
||||||
MwStringTime(date, fc->entries[i]->mtime);
|
MwStringTime(date, fc->entries[i]->mtime);
|
||||||
MwStringSize(size, fc->entries[i]->size);
|
MwStringSize(size, fc->entries[i]->size);
|
||||||
|
|
||||||
index = MwListBoxInsert(fc->files, -1, 0, fc->entries[i]->name);
|
index = MwListBoxSet(fc->files, -1, 0, fc->entries[i]->name);
|
||||||
MwListBoxInsert(fc->files, index, -1, date);
|
MwListBoxSet(fc->files, index, -1, date);
|
||||||
MwListBoxInsert(fc->files, index, -1, size);
|
MwListBoxSet(fc->files, index, -1, size);
|
||||||
MwListBoxSetIcon(fc->files, index, fc->file);
|
MwListBoxSetIcon(fc->files, index, fc->file);
|
||||||
|
|
||||||
arrput(fc->sorted_entries, fc->entries[i]);
|
arrput(fc->sorted_entries, fc->entries[i]);
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ static void click(MwWidget handle) {
|
||||||
MwLLSetCursor(((MwListBox)cb->listbox->internal)->frame->lowlevel, &MwCursorArrow, &MwCursorArrowMask);
|
MwLLSetCursor(((MwListBox)cb->listbox->internal)->frame->lowlevel, &MwCursorArrow, &MwCursorArrowMask);
|
||||||
|
|
||||||
for(i = 0; i < arrlen(cb->list); i++) {
|
for(i = 0; i < arrlen(cb->list); i++) {
|
||||||
MwListBoxInsert(cb->listbox, -1, 0, cb->list[i]);
|
MwListBoxSet(cb->listbox, -1, 0, cb->list[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
MwAddUserHandler(cb->listbox, MwNlistBoxActivateHandler, listbox_activate, NULL);
|
MwAddUserHandler(cb->listbox, MwNlistBoxActivateHandler, listbox_activate, NULL);
|
||||||
|
|
|
||||||
|
|
@ -387,18 +387,64 @@ static void prop_change(MwWidget handle, const char* prop) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mwListBoxInsertImpl(MwWidget handle, int row, int col, const char* text) {
|
static void redrawIfNeeded(MwWidget handle, int row) {
|
||||||
MwListBox lb = handle->internal;
|
MwListBox lb = handle->internal;
|
||||||
int old;
|
|
||||||
if(row == -1) row = arrlen(lb->list);
|
|
||||||
old = row;
|
|
||||||
|
|
||||||
resize(handle);
|
if(MwGetInteger(lb->vscroll, MwNvalue) <= row && row <= (MwGetInteger(lb->vscroll, MwNvalue) + MwGetInteger(lb->vscroll, MwNareaShown))) {
|
||||||
if(old < (MwGetInteger(lb->vscroll, MwNvalue) + MwGetInteger(lb->vscroll, MwNareaShown))) {
|
|
||||||
MwForceRender(lb->frame);
|
MwForceRender(lb->frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mwListBoxSetImpl(MwWidget handle, int row, int col, const char* text) {
|
||||||
|
MwListBox lb = handle->internal;
|
||||||
|
MwListBoxEntry entry;
|
||||||
|
char* t = text == NULL ? NULL : MwStringDuplicate(text);
|
||||||
|
if(row == -1) row = arrlen(lb->list);
|
||||||
|
|
||||||
|
entry.name = NULL;
|
||||||
|
entry.pixmap = NULL;
|
||||||
|
if(row < arrlen(lb->list)) {
|
||||||
|
entry = lb->list[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(col == -1) col = arrlen(entry.name);
|
||||||
|
arrins(entry.name, col, t);
|
||||||
|
|
||||||
|
if(row < arrlen(lb->list)) {
|
||||||
|
lb->list[row] = entry;
|
||||||
|
} else {
|
||||||
|
arrins(lb->list, row, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(row >= arrlen(lb->list)) resize(handle);
|
||||||
|
redrawIfNeeded(handle, row);
|
||||||
|
|
||||||
|
return row;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mwListBoxSetIconImpl(MwWidget handle, int index, MwLLPixmap icon) {
|
||||||
|
MwListBox lb = handle->internal;
|
||||||
|
MwListBoxEntry entry;
|
||||||
|
if(index == -1) index = arrlen(lb->list);
|
||||||
|
|
||||||
|
entry.name = NULL;
|
||||||
|
entry.pixmap = NULL;
|
||||||
|
if(index < arrlen(lb->list)) {
|
||||||
|
entry = lb->list[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.pixmap = icon;
|
||||||
|
|
||||||
|
if(index < arrlen(lb->list)) {
|
||||||
|
lb->list[index] = entry;
|
||||||
|
} else {
|
||||||
|
arrins(lb->list, index, entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(index >= arrlen(lb->list)) resize(handle);
|
||||||
|
redrawIfNeeded(handle, index);
|
||||||
|
}
|
||||||
|
|
||||||
static void mwListBoxDeleteImpl(MwWidget handle, int index) {
|
static void mwListBoxDeleteImpl(MwWidget handle, int index) {
|
||||||
MwListBox lb = handle->internal;
|
MwListBox lb = handle->internal;
|
||||||
int i;
|
int i;
|
||||||
|
|
@ -496,11 +542,16 @@ static void func_handler(MwWidget handle, const char* name, void* out, va_list v
|
||||||
int alignment = va_arg(va, int);
|
int alignment = va_arg(va, int);
|
||||||
mwListBoxSetAlignmentImpl(handle, index, alignment);
|
mwListBoxSetAlignmentImpl(handle, index, alignment);
|
||||||
}
|
}
|
||||||
if(strcmp(name, "mwListBoxInsert") == 0) {
|
if(strcmp(name, "mwListBoxSet") == 0) {
|
||||||
int row = va_arg(va, int);
|
int row = va_arg(va, int);
|
||||||
int col = va_arg(va, int);
|
int col = va_arg(va, int);
|
||||||
const char* text = va_arg(va, const char*);
|
const char* text = va_arg(va, const char*);
|
||||||
mwListBoxInsertImpl(handle, row, col, text);
|
*(int*)out = mwListBoxSetImpl(handle, row, col, text);
|
||||||
|
}
|
||||||
|
if(strcmp(name, "mwListBoxSetIcon") == 0) {
|
||||||
|
int index = va_arg(va, int);
|
||||||
|
MwLLPixmap icon = va_arg(va, MwLLPixmap);
|
||||||
|
mwListBoxSetIconImpl(handle, index, icon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue