/* * Baltisot * Copyright (C) 1999-2007 Nicolas "Pixel" Noble * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "BString.h" #include "Action.h" #include "HttpServ.h" Action * Action::start = 0; static int counter = 0; static HtmlSkinner default_skinner; static String genurl(const String & u) { if (u.strlen()) { return u; } else { // Si l'url passée en paramètre est vide, on génère une URL // sous la forme TmpXXXX où XXXX est une valeur qui s'incrémente. return String("Tmp") + (counter++); } } Action::Action(const String & u, HtmlSkinner * _skin) : next(start), prev(0), URL(genurl(u)), hastoclean(false), accessed(false), skin(_skin) { start = this; if (next) next->prev = this; if (!skin) { skin = &default_skinner; } } Action::~Action() { if (start == this) { start = next; } if (next) next->prev = prev; if (prev) prev->next = next; } Action * Action::Look4URL(const String & URL) { Action * p; // cerr << "Looking for " << URL << endl; for (p = start; p; p = p->next) { // cerr << "p->GetURL() = " << p->GetURL() << endl; if (!p->GetURL().strlen()) { // Si l'action que l'on vient de tester n'a pas d'URL, elle ne sert à rien. // On l'efface donc de notre liste. GetURL renvoie une chaine vide si l'action // était déclarée en mode CleanUp, puis a été accédée. delete p; } else { if (URL == p->GetURL()) return p; } } return 0; } /* * Voici la skin principale. Elle nécessite un fichier 'grain.png' dans le répertoire data * et un fichier 'style.css' (fournis) */ void Action::SendHead(Handle * h) { (*h) << skin->Header(GetTitle()); } void Action::SendFoot(Handle * h) { (*h) << skin->Footer(); } HtmlSkinner * Action::GetSkinner() { return skin; } String Action::GetURL(void) { // Comme décrit plus haut, il faut renvoyer la chaîne vide si l'action est en // mode CleanUp et a été lue. return (hastoclean && accessed) ? "" : URL; } void Action::CleanUp(void) { hastoclean = true; } void Action::Accessed(void) { accessed = true; } void Action::ShowButton(Handle * h, const String & l, const String & u) { (*h) << "