2 * Displays and customizes the iconbar.
7 /* Values for ib_displayas ... don't change these or you will break the templates */
8 #define IB_PICTEXT 0 /* picture and text */
9 #define IB_PICONLY 1 /* just a picture */
10 #define IB_TEXTONLY 2 /* just text */
12 void DontDeleteThis(void *Data){}
14 #define IconbarIsEnabled(a, b) IconbarIsENABLED(a, sizeof(a) - 1, b)
17 HashList *IB_Seeting_Order = NULL;
18 typedef struct _dflt_IB_Setting {
19 int DefVal; /* default value for non-set users */
20 long n; /* counter for internal purposes */
21 const char *Key; /* Stringvalue */
22 long len; /* Length... */
26 dflt_IB_Setting IconbarDefaults[] = {
27 {0, 0, HKEY("unused")},
28 {0, 1, HKEY("ib_displayas")},
29 {0, 2, HKEY("ib_logo")},
30 {1, 3, HKEY("ib_summary")},
31 {1, 4, HKEY("ib_inbox")},
32 {1, 5, HKEY("ib_calendar")},
33 {1, 6, HKEY("ib_contacts")},
34 {1, 7, HKEY("ib_notes")},
35 {1, 8, HKEY("ib_tasks")},
36 {1, 9, HKEY("ib_rooms")},
37 {1, 10, HKEY("ib_users")},
38 {1, 11, HKEY("ib_chat")},
39 {1, 12, HKEY("ib_advanced")},
40 {1, 13, HKEY("ib_logoff")},
41 {1, 14, HKEY("ib_citadel")},
45 HashList *IBDfl = NULL;
48 long IconbarIsENABLED(long val, const char *key, size_t keylen)
54 (WCC->IBSettingsVec != NULL) &&
57 return WCC->IBSettingsVec[val];
59 if (GetHash(IBDfl, key, keylen, &vIBDfl)) {
60 dflt_IB_Setting *Set = (dflt_IB_Setting*)vIBDfl;
67 #ifdef DBG_ICONBAR_HASH
69 inline const char *PrintInt(void *Prefstr)
71 snprintf(nbuf, sizeof(nbuf), "%ld", (long)Prefstr);
77 hprintf("Cache-Control: private\r\n");
81 int ConditionalIsActiveStylesheet(StrBuf *Target, WCTemplputParams *TP) {
86 lookAt = GetTemplateTokenNumber(Target, TP, 3, IB_PICTEXT);
87 testFor = GetTemplateTokenNumber(Target, TP, 2, IB_PICTEXT);
91 ib_displayas = IconbarIsENABLED(lookAt, TKEY(3));
93 printf ("%ld == %ld ? %s : %s\n",
96 IconbarDefaults[lookAt ].Key,
97 ChrPtr(TP->Tokens->FlatToken));
100 return (testFor == ib_displayas);
103 void LoadIconSettings(StrBuf *iconbar, long lvalue)
106 dflt_IB_Setting *Set;
107 const char *pCh = NULL;
116 if (WCC->IBSettingsVec == NULL)
118 WCC->IBSettingsVec = (long*) malloc (nIBV * sizeof(long));
121 * The initialized values of these variables also happen to
122 * specify the default values for users who haven't customized
123 * their iconbars. These should probably be set in a master
124 * configuration somewhere.
127 while (StrBufExtract_NextToken(buf, iconbar, &pCh, ',') >= 0)
129 StrBufExtract_token(key, buf, 0, '=');
130 val = StrBufExtract_long(buf, 1, '=');
132 if (!GetHash(IBDfl, SKEY(key), &vIBDfl))
134 Set = (dflt_IB_Setting*)vIBDfl;
136 WCC->IBSettingsVec[Set->n] = val;
137 /* printf("%ld %s %s -> %ld \n", Set->n, Set->Key, IconbarDefaults[Set->n].Key, val);*/
139 #ifdef DBG_ICONBAR_HASH
140 dbg_PrintHash(WCC->IconBarSetttings, PrintInt, NULL);
149 * save changes to iconbar settings
151 void commit_iconbar(void) {
152 const StrBuf *MimeType;
158 if (!havebstr("ok_button")) {
163 iconbar = NewStrBuf();
165 StrBufPrintf(iconbar, "ib_displayas=%d", ibstr("ib_displayas"));
166 for (i=0; i<(sizeof(IconbarDefaults)/sizeof(dflt_IB_Setting )); ++i) {
168 if (!strcasecmp(Bstr(IconbarDefaults[i].Key,
169 IconbarDefaults[i].len),
174 else if (!strcasecmp(Bstr(IconbarDefaults[i].Key,
175 IconbarDefaults[i].len),
183 StrBufPrintf(buf, ",%s=%s", IconbarDefaults[i].Key, Val);
184 StrBufAppendBuf(iconbar, buf, 0);
188 set_preference("iconbar", iconbar, 1);
192 MimeType = DoTemplate(HKEY("iconbar_save"), NULL, &NoCtx);
193 http_transmit_thing(ChrPtr(MimeType), 0);
194 #ifdef DBG_ICONBAR_HASH
195 dbg_PrintHash(WC->IconBarSetttings, PrintInt, NULL);
201 * Display the icon bar as long as we have an active session,
202 * and either the user is logged in or the server allows guest mode.
204 void tmplput_iconbar(StrBuf *Target, WCTemplputParams *TP)
209 && ( (WCC->logged_in)
210 || (WCC->serv_info->serv_supports_guest)
213 DoTemplate(HKEY("iconbar"), NULL, &NoCtx);
219 ServerShutdownModule_ICONBAR
228 ServerStartModule_ICONBAR
232 IBDfl = NewHash(1, NULL);
234 while (IconbarDefaults[i].len != 0)
237 IconbarDefaults[i].Key,
238 IconbarDefaults[i].len,
240 reference_free_handler);
251 /*WebcitAddUrlHandler(HKEY("user_iconbar"), "", 0, doUserIconStylesheet, 0); */
252 WebcitAddUrlHandler(HKEY("commit_iconbar"), "", 0, commit_iconbar, 0);
253 RegisterConditional(HKEY("COND:ICONBAR:ACTIVE"), 3, ConditionalIsActiveStylesheet, CTX_NONE);
254 RegisterNamespace("ICONBAR", 0, 0, tmplput_iconbar, NULL, CTX_NONE);
256 RegisterPreference("iconbar", _("Iconbar Setting"), PRF_STRING, LoadIconSettings);
258 while (IconbarDefaults[l].len != 0)
260 RegisterTokenParamDefine(IconbarDefaults[l].Key,
261 IconbarDefaults[l].len, l);
270 SessionDestroyModule_ICONBAR
273 if (sess->IBSettingsVec != NULL)
274 free(sess->IBSettingsVec);