/*
* subjectlayout.c
*
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2012 project bchan
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
*/
#include "subjectlayout.h"
-#include "subjectparser.h"
+#include "subjectlist.h"
#include "tadlib.h"
#include <bstdio.h>
#include <bstdlib.h>
-#include <tstring.h>
#include <tcode.h>
#include <btron/btron.h>
#include <btron/dp.h>
draw = 1;
}
digit = num % 10;
- if ((digit != 0)||(draw != 0)) {
- dest[i++] = dec[digit];
- draw = 1;
- }
+ dest[i++] = dec[digit];
+ draw = 1;
+ dest[i] = TNULL;
+
+ return i;
+}
+
+LOCAL W DATE_TIMtoTCS(DATE_TIM *dtim, TC *dest)
+{
+ W len;
+
+ len = WtoTCS(dtim->d_year + 1900, dest);
+ dest[len++] = TK_SLSH;
+ len += WtoTCS(dtim->d_month, dest + len);
+ dest[len++] = TK_SLSH;
+ len += WtoTCS(dtim->d_day, dest + len);
+ dest[len] = TNULL;
+
+ return len;
+}
+
+LOCAL W VIGORtoTCS(W vigor, TC *dest)
+{
+ W n0 = vigor / 10;
+ W n1 = vigor % 10;
+ W i;
+
+ i = WtoTCS(n0, dest);
+ dest[i++] = TK_PROD;
+ i += WtoTCS(n1, dest + i);
+ dest[i++] = TK_r;
+ dest[i++] = TK_e;
+ dest[i++] = TK_s;
+ dest[i++] = TK_SLSH;
+ dest[i++] = TK_d;
+ dest[i++] = TK_a;
+ dest[i++] = TK_y;
dest[i] = TNULL;
return i;
typedef struct sbjtlayout_thread_t_ sbjtlayout_thread_t;
struct sbjtlayout_thread_t_ {
- sbjtparser_thread_t *parser_thread;
- W index;
+ sbjtlist_tuple_t *tuple;
+ //W index;
W view_l,view_t,view_r,view_b;
- W i_titlesepareter;
SIZE sz_title;
W baseline;
RECT vframe;
};
+#define SBJTLAYOUT_FLAG_RESNUM_DISPLAY 0x00000001
+#define SBJTLAYOUT_FLAG_SINCE_DISPLAY 0x00000002
+#define SBJTLAYOUT_FLAG_VIGOR_DISPLAY 0x00000004
+
struct sbjtlayout_t_ {
GID target;
W draw_l,draw_t,draw_r,draw_b;
W len;
FSSPEC fspec;
COLOR vobjbgcol;
+ UW flag;
};
-LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtparser_thread_t *thread)
+LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtlist_tuple_t *thread)
{
sbjtlayout_thread_t *layout_thread;
- TC *str;
layout_thread = (sbjtlayout_thread_t*)malloc(sizeof(sbjtlayout_thread_t));
if (layout_thread == NULL) {
return NULL;
}
- layout_thread->parser_thread = thread;
+ layout_thread->tuple = thread;
layout_thread->view_l = 0;
layout_thread->view_t = 0;
layout_thread->view_r = 0;
layout_thread->view_b = 0;
- str = tc_strrchr(thread->title, TK_LPAR);
- if (str == NULL) {
- layout_thread->i_titlesepareter = thread->title_len;
- } else {
- layout_thread->i_titlesepareter = (str - thread->title) - 1;
- }
-
return layout_thread;
}
LOCAL VOID sbjtlayout_thread_delete(sbjtlayout_thread_t *layout_thread)
{
- sbjtparser_thread_delete(layout_thread->parser_thread);
free(layout_thread);
}
LOCAL W sbjtlayout_thread_calcindexdrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
{
TC str[12];
- W err, len;
+ W err, len, num;
- len = WtoTCS(layout_thread->index, str);
+ sbjtlist_tuple_getnumber(layout_thread->tuple, &num);
+
+ len = WtoTCS(num, str);
str[len++] = TK_COLN;
str[len] = TNULL;
LOCAL W sbjtlayout_thread_calctitledrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
{
- return tadlib_calcdrawsize(layout_thread->parser_thread->title, layout_thread->i_titlesepareter, gid, sz);
+ TC *str;
+ W len;
+ sbjtlist_tuple_gettitle(layout_thread->tuple, &str, &len);
+ return tadlib_calcdrawsize(str, len, gid, sz);
}
LOCAL W sbjtlayout_thread_calcresnumdrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
{
- return tadlib_calcdrawsize(layout_thread->parser_thread->title + layout_thread->i_titlesepareter, layout_thread->parser_thread->title_len - layout_thread->i_titlesepareter, gid, sz);
+ TC *str;
+ W len;
+ sbjtlist_tuple_getresnumberstr(layout_thread->tuple, &str, &len);
+ return tadlib_calcdrawsize(str, len, gid, sz);
}
-LOCAL W sbjtlayout_thread_calcsize(sbjtlayout_thread_t *layout_res, GID gid, W top, W index)
+LOCAL W sbjtlayout_thread_calcsincedrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
{
- SIZE sz_index, sz_title, sz_resnum;
- W err;
+ DATE_TIM dtim;
+ TC str[11];
+ W len = 10;
+ sbjtlist_tuple_getsince(layout_thread->tuple, &dtim);
+ len = DATE_TIMtoTCS(&dtim, str);
+ return tadlib_calcdrawsize(str, len, gid, sz);
+}
+
+LOCAL W sbjtlayout_thread_calcvigordrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
+{
+ W vigor;
+ TC str[100];
+ W len;
+ sbjtlist_tuple_getvigor(layout_thread->tuple, &vigor);
+ len = VIGORtoTCS(vigor, str);
+ return tadlib_calcdrawsize(str, len, gid, sz);
+}
- layout_res->index = index;
+LOCAL W sbjtlayout_thread_calcsize(sbjtlayout_thread_t *layout_res, GID gid, W top, sbjtlayout_t *layout)
+{
+ SIZE sz_index, sz_title, sz_resnum, sz_since, sz_vigor;
+ W err;
+ Bool ok;
err = sbjtlayout_thread_calcindexdrawsize(layout_res, gid, &sz_index);
if (err < 0) {
if (err < 0) {
return err;
}
+ err = sbjtlayout_thread_calcsincedrawsize(layout_res, gid, &sz_since);
+ if (err < 0) {
+ return err;
+ }
+ err = sbjtlayout_thread_calcvigordrawsize(layout_res, gid, &sz_vigor);
+ if (err < 0) {
+ return err;
+ }
layout_res->sz_title = sz_title;
layout_res->view_t = top + 2;
layout_res->view_l = 0;
layout_res->view_b = layout_res->view_t + sz_title.v + 16;
- layout_res->view_r = 16*6 + sz_title.h + sz_resnum.h;
+ layout_res->view_r = 16*6 + sz_title.h;
+ ok = sbjtlayout_getresnumberdisplay(layout);
+ if (ok != False) {
+ layout_res->view_r += sz_resnum.h;
+ }
+ ok = sbjtlayout_getsincedisplay(layout);
+ if (ok != False) {
+ layout_res->view_r += 16 + sz_since.h;
+ }
+ ok = sbjtlayout_getvigordisplay(layout);
+ if (ok != False) {
+ layout_res->view_r += 16 + sz_vigor.h;
+ }
layout_res->baseline = 20;
layout_res->vframe.c.left = sz_index.h + 16;
return gset_fon(gid, &layout->fspec);
}
-EXPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtparser_thread_t *parser_thread)
+EXPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtlist_tuple_t *tuple)
{
sbjtlayout_thread_t *layout_thread;
W len;
- layout_thread = sbjtlayout_thread_new(parser_thread);
+ layout_thread = sbjtlayout_thread_new(tuple);
if (layout_thread == NULL) {
return -1; /* TODO */
}
sbjtlayout_setupgid(layout, layout->target);
- sbjtlayout_thread_calcsize(layout_thread, layout->target, layout->draw_b, layout->len);
+ sbjtlayout_thread_calcsize(layout_thread, layout->target, layout->draw_b, layout);
/* orrect */
if (layout->draw_l > layout_thread->view_l) {
return layout->vobjbgcol;
}
+EXPORT VOID sbjtlayout_setresnumberdisplay(sbjtlayout_t *layout, Bool display)
+{
+ if (display == False) {
+ layout->flag = layout->flag & ~SBJTLAYOUT_FLAG_RESNUM_DISPLAY;
+ } else {
+ layout->flag |= SBJTLAYOUT_FLAG_RESNUM_DISPLAY;
+ }
+}
+
+EXPORT VOID sbjtlayout_setsincedisplay(sbjtlayout_t *layout, Bool display)
+{
+ if (display == False) {
+ layout->flag = layout->flag & ~SBJTLAYOUT_FLAG_SINCE_DISPLAY;
+ } else {
+ layout->flag |= SBJTLAYOUT_FLAG_SINCE_DISPLAY;
+ }
+}
+
+EXPORT VOID sbjtlayout_setvigordisplay(sbjtlayout_t *layout, Bool display)
+{
+ if (display == False) {
+ layout->flag = layout->flag & ~SBJTLAYOUT_FLAG_VIGOR_DISPLAY;
+ } else {
+ layout->flag |= SBJTLAYOUT_FLAG_VIGOR_DISPLAY;
+ }
+}
+
+EXPORT Bool sbjtlayout_getresnumberdisplay(sbjtlayout_t *layout)
+{
+ if ((layout->flag & SBJTLAYOUT_FLAG_RESNUM_DISPLAY) != 0) {
+ return True;
+ } else {
+ return False;
+ }
+}
+
+EXPORT Bool sbjtlayout_getsincedisplay(sbjtlayout_t *layout)
+{
+ if ((layout->flag & SBJTLAYOUT_FLAG_SINCE_DISPLAY) != 0) {
+ return True;
+ } else {
+ return False;
+ }
+}
+
+EXPORT Bool sbjtlayout_getvigordisplay(sbjtlayout_t *layout)
+{
+ if ((layout->flag & SBJTLAYOUT_FLAG_VIGOR_DISPLAY) != 0) {
+ return True;
+ } else {
+ return False;
+ }
+}
+
EXPORT sbjtlayout_t* sbjtlayout_new(GID gid)
{
sbjtlayout_t *layout;
layout->fspec.size.h = 16;
layout->fspec.size.v = 16;
layout->vobjbgcol = 0x10000000;
+ layout->flag = 0;
return layout;
}
LOCAL W sbjtdraw_entrydraw_drawtitle(sbjtlayout_thread_t *entry, GID gid, W dh, W dv)
{
- TC *str = entry->parser_thread->title;
- W len = entry->i_titlesepareter;
+ TC *str;
+ W len;
+ sbjtlist_tuple_gettitle(entry->tuple, &str, &len);
return tadlib_drawtext(str, len, gid, dh, dv);
}
LOCAL W sbjtdraw_entrydraw_drawresnum(sbjtlayout_thread_t *entry, GID gid, W dh, W dv)
{
- TC *str = entry->parser_thread->title + entry->i_titlesepareter;
- W len = entry->parser_thread->title_len - entry->i_titlesepareter;
+ TC *str;
+ W len;
+ sbjtlist_tuple_getresnumberstr(entry->tuple, &str, &len);
return tadlib_drawtext(str, len, gid, dh, dv);
}
LOCAL W sbjtdraw_entrydraw_resnumber(sbjtlayout_thread_t *entry, W resnum, GID target)
+
{
TC str[11];
W len;
return gdra_str(target, str, len, G_STORE);
}
+LOCAL W sbjtdraw_entrydraw_drawsince(sbjtlayout_thread_t *entry, GID gid, W dh, W dv)
+{
+ DATE_TIM dtim;
+ TC str[11];
+ W len = 10;
+ sbjtlist_tuple_getsince(entry->tuple, &dtim);
+ len = DATE_TIMtoTCS(&dtim, str);
+ return gdra_str(gid, str, len, G_STORE);
+}
+
+LOCAL W sbjtdraw_entrydraw_drawvigor(sbjtlayout_thread_t *entry, GID gid, W dh, W dv)
+{
+ W vigor;
+ TC str[100];
+ W len;
+ sbjtlist_tuple_getvigor(entry->tuple, &vigor);
+ len = VIGORtoTCS(vigor, str);
+ return gdra_str(gid, str, len, G_STORE);
+}
+
LOCAL int sectrect_tmp(RECT a, W left, W top, W right, W bottom)
{
return (a.c.left<right && left<a.c.right && a.c.top<bottom && top<a.c.bottom);
}
-LOCAL W sbjtdraw_drawthread(sbjtlayout_thread_t *entry, W index, GID target, RECT *r, W dh, W dv, COLOR vobjbgcol)
+LOCAL W sbjtdraw_drawthread(sbjtlayout_thread_t *entry, GID target, RECT *r, W dh, W dv, COLOR vobjbgcol, sbjtlayout_t *layout)
{
- W sect, err;
+ W sect, err, num;
RECT view, vframe, vframe_b;
static PAT pat0 = {{
0,
0x10000000,
FILL100
}};
+ Bool ok;
/* sectrect */
sect = sectrect_tmp(*r, entry->view_l - dh, entry->view_t - dv, entry->view_r - dh, entry->view_b - dv);
view.c.right = entry->view_r - dh;
view.c.bottom = entry->view_b - dv;
+ sbjtlist_tuple_getnumber(entry->tuple, &num);
+
err = gset_chp(target, - dh, entry->view_t + entry->baseline - dv, 1);
if (err < 0) {
return err;
}
- err = sbjtdraw_entrydraw_resnumber(entry, index+1, target);
+ err = sbjtdraw_entrydraw_resnumber(entry, num, target);
if (err < 0) {
return err;
}
}
gset_chc(target, 0x10000000, 0x10FFFFFF);
+ ok = sbjtlayout_getresnumberdisplay(layout);
err = gset_chp(target, 16, 0, 0);
if (err < 0) {
return err;
}
- err = sbjtdraw_entrydraw_drawresnum(entry, target, dh, dv);
- if (err < 0) {
- return err;
+ if (ok != False) {
+ err = sbjtdraw_entrydraw_drawresnum(entry, target, dh, dv);
+ if (err < 0) {
+ return err;
+ }
+ }
+ ok = sbjtlayout_getsincedisplay(layout);
+ if (ok != False) {
+ err = gset_chp(target, 16, 0, 0);
+ if (err < 0) {
+ return err;
+ }
+ err = sbjtdraw_entrydraw_drawsince(entry, target, dh, dv);
+ if (err < 0) {
+ return err;
+ }
+ }
+ ok = sbjtlayout_getvigordisplay(layout);
+ if (ok != False) {
+ err = gset_chp(target, 16, 0, 0);
+ if (err < 0) {
+ return err;
+ }
+ err = sbjtdraw_entrydraw_drawvigor(entry, target, dh, dv);
+ if (err < 0) {
+ return err;
+ }
}
return 0;
for (i=0;i < layout->len;i++) {
sbjtlayout_setupgid(layout, layout->target);
- err = sbjtdraw_drawthread(layout->layout_thread[i], i, target, r, draw->view_l, draw->view_t, layout->vobjbgcol);
+ err = sbjtdraw_drawthread(layout->layout_thread[i], target, r, draw->view_l, draw->view_t, layout->vobjbgcol, layout);
if (err < 0) {
return err;
}
return 0;
}
-EXPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtparser_thread_t **thread, RECT *vframe)
+EXPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtlist_tuple_t **thread, RECT *vframe)
{
W i,abs_x,abs_y,l,t,r,b;
sbjtlayout_t *layout;
b = sbjt_thread->view_t + sbjt_thread->vframe.c.bottom;
if ((l <= abs_x)&&(abs_x < r)
&&(t <= abs_y)&&(abs_y < b)) {
- *thread = sbjt_thread->parser_thread;
+ *thread = sbjt_thread->tuple;
if (vframe != NULL) {
vframe->c.left = l - draw->view_l;
vframe->c.top = t - draw->view_t;