
// @(#)GQuery.h	3.8	7/28/92

#ifndef GQuery_First

#ifdef __GNUG__
#pragma interface
#endif

#define GQuery_First

#include "Query.h"
#include "QueryDialog.h"

class GQuery: public Object {
	// friend class QueryDialog;
	// friend class QuelQueries;

	bool		empty;
	bool		loaded;
	TextItem	*qname;
	ObjList		*ol;
	QueryDialog	*d;
	QuelQueries	*q;
	Object		*obs;
	int		nrtuples;
	bool		force_load;

	void		LoadCol(class ObjList *oids_new_qs, ObjList *loaded_qs);

public:
	MetaDef(GQuery);

	GQuery(QuelQueries *);
	~GQuery();

	void		DoObserve(int id, int part, void *data, Object *o);
	bool		PrintOnWhenObserved(Object*) { return FALSE; }

	void 		EditQuery(TextItem *t);
	void		AddQShapes(ObjList *new_oids, ObjList *loaded_qs);
	void		ForceLoad() { force_load= TRUE; }
	bool		EditShape(long oid) { return d->EditShape(oid); }
	void		SetEmpty(bool b) { empty= b; }
	void		SetObs(Object *o) {
			  if (!obs) {
			    obs= o;
			    AddObserver(o);
			  }
			}

	int		NrTuples() { return nrtuples; }
	ObjList		*GetCol(bool area_changed, bool do_load,
	  			bool display_refresh= FALSE);
	char		*GetTableName() { return d->TableName(); }
	class MapView 	*GetDrawView() { return (MapView*) q->GetView(); }
	QueryDialog	*GetQD() const { return d; }
	Object		*GetObs() const { return obs; }
	bool		IsEmpty() const { return empty; }
	void		GetWhere(char *where_p);

#ifdef ET25
	OStream &PrintOn(OStream &);
	IStream &ReadFrom(IStream &);
#else
	ostream &PrintOn(ostream &);
	istream &ReadFrom(istream &);
#endif
};

#endif GQuery_First
