00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifdef HAVE_CONFIG_H
00011 # include <config.h>
00012 #endif
00013
00014 #define DISABLE_DEBUGLOG
00015
00016
00017 #include "g_tablerow_p.h"
00018 #include "g_box_l.h"
00019 #include "g_generic_l.h"
00020 #include "htmlctx_l.h"
00021 #include "o_grid_l.h"
00022 #include "o_gridentry_l.h"
00023
00024 #include <gwenhywfar/debug.h>
00025
00026
00027 GWEN_INHERIT(HTML_GROUP, GROUP_TABLEROW)
00028
00029
00030
00031
00032 HTML_GROUP *HtmlGroup_TableRow_new(const char *groupName,
00033 HTML_GROUP *parent,
00034 GWEN_XML_CONTEXT *ctx) {
00035 HTML_GROUP *g;
00036 GROUP_TABLEROW *xg;
00037
00038
00039 g=HtmlGroup_Generic_new(groupName, parent, ctx);
00040 assert(g);
00041 GWEN_NEW_OBJECT(GROUP_TABLEROW, xg);
00042 GWEN_INHERIT_SETDATA(HTML_GROUP, GROUP_TABLEROW, g, xg, HtmlGroup_TableRow_FreeData);
00043
00044
00045 HtmlGroup_SetStartTagFn(g, HtmlGroup_TableRow_StartTag);
00046
00047 return g;
00048 }
00049
00050
00051
00052 void GWENHYWFAR_CB HtmlGroup_TableRow_FreeData(void *bp, void *p) {
00053 GROUP_TABLEROW *xg;
00054
00055 xg=(GROUP_TABLEROW*) p;
00056
00057 GWEN_FREE_OBJECT(xg);
00058 }
00059
00060
00061
00062 int HtmlGroup_TableRow_GetColumns(const HTML_GROUP *g) {
00063 GROUP_TABLEROW *xg;
00064
00065 assert(g);
00066 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
00067 assert(xg);
00068
00069 return xg->columns;
00070 }
00071
00072
00073
00074 int HtmlGroup_TableRow_StartTag(HTML_GROUP *g, const char *tagName) {
00075 GROUP_TABLEROW *xg;
00076 HTML_GROUP *gNew=NULL;
00077 GWEN_XML_CONTEXT *ctx;
00078 GWEN_DB_NODE *dbAttribs;
00079
00080 assert(g);
00081 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
00082 assert(xg);
00083
00084 ctx=HtmlGroup_GetXmlContext(g);
00085 dbAttribs=HtmlCtx_GetCurrentAttributes(ctx);
00086
00087 if (strcasecmp(tagName, "th")==0) {
00088 HTML_OBJECT *o;
00089 HTML_PROPS *pr;
00090 HTML_FONT *fnt;
00091
00092
00093 gNew=HtmlGroup_Box_new(tagName, g, ctx);
00094 pr=HtmlProps_dup(HtmlGroup_GetProperties(g));
00095 fnt=HtmlProps_GetFont(pr);
00096 fnt=HtmlCtx_GetFont(ctx,
00097 HtmlFont_GetFontName(fnt),
00098 HtmlFont_GetFontSize(fnt),
00099 HtmlFont_GetFontFlags(fnt) | HTML_FONT_FLAGS_STRONG);
00100 if (fnt) {
00101 HtmlProps_SetFont(pr, fnt);
00102
00103 }
00104 HtmlGroup_SetProperties(gNew, pr);
00105 HtmlProps_free(pr);
00106
00107 o=HtmlObject_GridEntry_new(ctx);
00108 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
00109 HtmlObject_GridEntry_SetColumn(o, xg->columns++);
00110 HtmlObject_GridEntry_SetRow(o, xg->row);
00111 HtmlObject_GridEntry_SetIsHeader(o, 1);
00112
00113 if (dbAttribs) {
00114 const char *s;
00115
00116 s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left");
00117 if (s) {
00118 if (strcasecmp(s, "right")==0)
00119 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT);
00120 else if (strcasecmp(s, "center")==0)
00121 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER);
00122 }
00123 }
00124
00125 HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o);
00126 HtmlGroup_SetObject(gNew, o);
00127 }
00128 else if (strcasecmp(tagName, "td")==0) {
00129 HTML_OBJECT *o;
00130
00131
00132 gNew=HtmlGroup_Box_new(tagName, g, ctx);
00133 HtmlGroup_SetProperties(gNew, HtmlGroup_GetProperties(g));
00134 o=HtmlObject_GridEntry_new(ctx);
00135 HtmlObject_SetProperties(o, HtmlGroup_GetProperties(g));
00136 HtmlObject_GridEntry_SetColumn(o, xg->columns++);
00137 HtmlObject_GridEntry_SetRow(o, xg->row);
00138 HtmlObject_GridEntry_SetIsHeader(o, 0);
00139
00140 if (dbAttribs) {
00141 const char *s;
00142
00143 s=GWEN_DB_GetCharValue(dbAttribs, "align", 0, "left");
00144 if (s) {
00145 if (strcasecmp(s, "right")==0)
00146 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_RIGHT);
00147 else if (strcasecmp(s, "center")==0)
00148 HtmlObject_AddFlags(o, HTML_OBJECT_FLAGS_JUSTIFY_HCENTER);
00149 }
00150 }
00151
00152 HtmlObject_Tree_AddChild(HtmlGroup_GetObject(g), o);
00153 HtmlGroup_SetObject(gNew, o);
00154 }
00155 else {
00156 DBG_ERROR(GWEN_LOGDOMAIN,
00157 "Unexpected group [%s]", tagName);
00158 return GWEN_ERROR_BAD_DATA;
00159 }
00160
00161 if (gNew) {
00162 HtmlCtx_SetCurrentGroup(ctx, gNew);
00163 GWEN_XmlCtx_IncDepth(ctx);
00164 }
00165
00166 return 0;
00167 }
00168
00169
00170
00171 void HtmlGroup_TableRow_SetRow(HTML_GROUP *g, int row) {
00172 GROUP_TABLEROW *xg;
00173
00174 assert(g);
00175 xg=GWEN_INHERIT_GETDATA(HTML_GROUP, GROUP_TABLEROW, g);
00176 assert(xg);
00177
00178 xg->row=row;
00179 }
00180
00181
00182
00183
00184
00185