/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    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.

***************************************************************************/


#ifndef DDWEBVIEW_H
#define DDWEBVIEW_H

#include <dddatatable.h>
#include <dddataobject.h>
#include <ddwebrenderer.h>
#include <dditem.h>

class ddwebpage;
class ddiobuffer;
class ddwebpage;
class ddwebview;
class ddwebviewpos;


/// ddwebview : Erweiterte Datatable, die Methoden auf ihre Objekte kennt.
/**
	Anstatt eines Table-Adapters kann man die Tables auch beerben. Jeder Datentyp
	(Thread,News ... ) kriegt seine eigene	View, so dass die pagelets einfacher werden.
	Der Vorteil ist die Vererbbarkeit der views, d.h. simple Methoden wie remove etc.
	müssen nur einmal programmiert werden und sind ausserdem konfigurbar über die 
	SQL-Statements ( z.B: "delete from {<name>} where id = {id}" ). 
	Die SQL-Config sollte auch vererbbar sein.
*/

class ddwebview : public dddatatable< dddataobject<ddwebview> >
{

friend class dddataconnection;
friend class dddatareader;

public: 
	
	
	ddwebview();
	ddwebview( const ddstring& name );
	~ddwebview();
	
	void add_entry( size_t num_fields, MYSQL_ROW row )	;
	
	int read( ddwebpage& pagelet, dditem& item );
	
	void set_child_flag( const ddstring& id, int flag  );
	ddstring get_neighbor_entry_id( const ddstring& id, bool get_last );
	
	
	
	inline ddwebrenderer& get_renderer()
	{
		return _renderer;
	}	
	
	
	inline ddstring on_render( ddwebpage& pagelet, dditem& target, int from=0, int to=0 )
	{
		return _renderer.render( pagelet, target, *this, from, to );	
	}
	
	
	inline ddstring on_render_entry( ddwebpage& pagelet, dditem& target, int rowidx, bool doinit=false )
	{
		return _renderer.render_entry( pagelet, target, (*this)[rowidx], rowidx, doinit );	
	}
	
	
	dd_result on_render_cgi( ddwebpage& pagelet, dditem& target );
	
	
protected:
	
	ddwebrenderer _renderer;
	
	
private:
	
	ddwebview( const ddwebview& src )
	{
		(void) src;
	}
	
	ddwebview& operator=( const ddwebview& src )
	{
		return *this;
	}

};


/***************************************************************************

    supportware
    Copyright (C) 2001-2008 by c.holzheuer
    c.holzheuer@sourceworx.org

    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.

***************************************************************************/

/// ddwebviewmap: eine ptrmap mit tabellen
/**	
	
	ddwebviewmap: eine ptrmap mit tabellen

*/

class ddwebviewmap : public ddmapptr<ddwebview>
{

public:

	ddwebviewmap();
	virtual ~ddwebviewmap();
	
	void init_tables( ddconfig& config );
	void add_table( ddconfig& config, ddconfigsection& section );	
protected:


	
};


#endif
