4 * Displays and customizes the iconbar.
9 /* Values for ib_displayas ... don't change these or you will break the templates */
10 #define IB_PICTEXT 0 /* picture and text */
11 #define IB_PICONLY 1 /* just a picture */
12 #define IB_TEXTONLY 2 /* just text */
14 void DontDeleteThis(void *Data){}
16 #define IconbarIsEnabled(a, b) IconbarIsENABLED(a, sizeof(a) - 1, b)
19 HashList *IB_Seeting_Order = NULL;
20 typedef struct _dflt_IB_Setting {
21 int DefVal; /* default value for non-set users */
22 long n; /* counter for internal purposes */
23 const char *Key; /* Stringvalue */
24 long len; /* Length... */
28 dflt_IB_Setting IconbarDefaults[] = {
29 {0, 0, HKEY("unused")},
30 {0, 1, HKEY("ib_displayas")},
31 {0, 2, HKEY("ib_logo")},
32 {1, 3, HKEY("ib_summary")},
33 {1, 4, HKEY("ib_inbox")},
34 {1, 5, HKEY("ib_calendar")},
35 {1, 6, HKEY("ib_contacts")},
36 {1, 7, HKEY("ib_notes")},
37 {1, 8, HKEY("ib_tasks")},
38 {1, 9, HKEY("ib_rooms")},
39 {1, 10, HKEY("ib_users")},
40 {1, 11, HKEY("ib_chat")},
41 {1, 12, HKEY("ib_advanced")},
42 {1, 13, HKEY("ib_logoff")},
43 {1, 14, HKEY("ib_citadel")},
47 HashList *IBDfl = NULL;
50 long IconbarIsENABLED(long val, const char *key, size_t keylen)
56 (WCC->IBSettingsVec != NULL) &&
59 return WCC->IBSettingsVec[val];
61 if (GetHash(IBDfl, key, keylen, &vIBDfl)) {
62 dflt_IB_Setting *Set = (dflt_IB_Setting*)vIBDfl;
69 #ifdef DBG_ICONBAR_HASH
71 inline const char *PrintInt(void *Prefstr)
73 snprintf(nbuf, sizeof(nbuf), "%ld", (long)Prefstr);
79 hprintf("Cache-Control: private\r\n");
83 int ConditionalIsActiveStylesheet(StrBuf *Target, WCTemplputParams *TP) {
88 lookAt = GetTemplateTokenNumber(Target, TP, 3, IB_PICTEXT);
89 testFor = GetTemplateTokenNumber(Target, TP, 2, IB_PICTEXT);
93 ib_displayas = IconbarIsENABLED(lookAt, TKEY(3));
95 printf ("%ld == %ld ? %s : %s\n",
98 IconbarDefaults[lookAt ].Key,
99 ChrPtr(TP->Tokens->FlatToken));
102 return (testFor == ib_displayas);
105 void LoadIconSettings(StrBuf *iconbar, long lvalue)
108 dflt_IB_Setting *Set;
109 const char *pCh = NULL;
118 if (WCC->IBSettingsVec == NULL)
120 WCC->IBSettingsVec = (long*) malloc (nIBV * sizeof(long));
123 * The initialized values of these variables also happen to
124 * specify the default values for users who haven't customized
125 * their iconbars. These should probably be set in a master
126 * configuration somewhere.
129 while (StrBufExtract_NextToken(buf, iconbar, &pCh, ',') >= 0)
131 StrBufExtract_token(key, buf, 0, '=');
132 val = StrBufExtract_long(buf, 1, '=');
134 if (!GetHash(IBDfl, SKEY(key), &vIBDfl))
136 Set = (dflt_IB_Setting*)vIBDfl;
138 WCC->IBSettingsVec[Set->n] = val;
139 /* printf("%ld %s %s -> %ld \n", Set->n, Set->Key, IconbarDefaults[Set->n].Key, val);*/
141 #ifdef DBG_ICONBAR_HASH
142 dbg_PrintHash(WCC->IconBarSetttings, PrintInt, NULL);
151 * save changes to iconbar settings
153 void commit_iconbar(void) {
154 const StrBuf *MimeType;
160 if (!havebstr("ok_button")) {
165 iconbar = NewStrBuf();
167 StrBufPrintf(iconbar, "ib_displayas=%d", ibstr("ib_displayas"));
168 for (i=0; i<(sizeof(IconbarDefaults)/sizeof(dflt_IB_Setting )); ++i) {
170 if (!strcasecmp(Bstr(IconbarDefaults[i].Key,
171 IconbarDefaults[i].len),
176 else if (!strcasecmp(Bstr(IconbarDefaults[i].Key,
177 IconbarDefaults[i].len),
185 StrBufPrintf(buf, ",%s=%s", IconbarDefaults[i].Key, Val);
186 StrBufAppendBuf(iconbar, buf, 0);
190 set_preference("iconbar", iconbar, 1);
194 MimeType = DoTemplate(HKEY("iconbar_save"), NULL, &NoCtx);
195 http_transmit_thing(ChrPtr(MimeType), 0);
196 #ifdef DBG_ICONBAR_HASH
197 dbg_PrintHash(WC->IconBarSetttings, PrintInt, NULL);
202 void tmplput_iconbar(StrBuf *Target, WCTemplputParams *TP)
206 if ((WCC != NULL) && (WCC->logged_in)) {
207 DoTemplate(HKEY("iconbar"), NULL, &NoCtx);
213 ServerShutdownModule_ICONBAR
222 ServerStartModule_ICONBAR
226 IBDfl = NewHash(1, NULL);
228 while (IconbarDefaults[i].len != 0)
231 IconbarDefaults[i].Key,
232 IconbarDefaults[i].len,
234 reference_free_handler);
245 /*WebcitAddUrlHandler(HKEY("user_iconbar"), "", 0, doUserIconStylesheet, 0); */
246 WebcitAddUrlHandler(HKEY("commit_iconbar"), "", 0, commit_iconbar, 0);
247 RegisterConditional(HKEY("COND:ICONBAR:ACTIVE"), 3, ConditionalIsActiveStylesheet, CTX_NONE);
248 RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, NULL, CTX_NONE);
250 RegisterPreference("iconbar", _("Iconbar Setting"), PRF_STRING, LoadIconSettings);
252 while (IconbarDefaults[l].len != 0)
254 RegisterTokenParamDefine(IconbarDefaults[l].Key,
255 IconbarDefaults[l].len, l);
264 SessionDestroyModule_ICONBAR
267 if (sess->IBSettingsVec != NULL)
268 free(sess->IBSettingsVec);