//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1990-1999 Odinn Sorensen
//  Copyright (C) 1999 Alexander S. Aganichev
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library 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
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library 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
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  GCUI: Golded+ Character-oriented User Interface.
//  Search manager.
//  ------------------------------------------------------------------

#ifndef __gsrchmgr_h
#define __gsrchmgr_h


//  ------------------------------------------------------------------

#include <gdefs.h>
#include <vector>
#include <gsearch.h>
#include <gwinput.h>


//  ------------------------------------------------------------------

class search_item : public gsearch {

public:

  enum item_logic {
    logic_and,
    logic_or
  };

  struct item_where {
    bool from;
    bool to;
    bool subject;
    bool body;
    bool tagline;
    bool tearline;
    bool origin;
    bool signature;
    bool kludges;
  };

  item_logic logic;
  item_where where;

  search_item();
  virtual ~search_item();

  search_item& operator=(const search_item& a);

};


//  ------------------------------------------------------------------

class search_manager : public gwinput2 {

public:

  enum {
    if_nothing,
    id_pattern1, id_logic1, id_options1,
    id_pattern2, id_logic2, id_options2,
    id_pattern3, id_logic3, id_options3,
    id_pattern4, id_logic4, id_options4,
    id_pattern5, id_logic5, id_options5,
    id_pattern6, id_logic6, id_options6,
    id_pattern7, id_logic7, id_options7,
    id_pattern8, id_logic8, id_options8,
    id_pattern9, id_logic9, id_options9,
    id_direction,
    id_messages,
    id_action,
    id_areas
  };

  enum search_direction {
    direction_backward,
    direction_forward
  };

  enum search_messages {
    messages_new,
    messages_unread,
    messages_all
  };

  enum search_action {
    action_read,
    action_mark,
    action_delete,
    action_write,
    action_copy,
    action_move
  };

  enum search_areas {
    areas_current,
    areas_tagged,
    areas_all
  };

  std::vector<search_item> items;

  search_direction    direction;
  search_messages     messages;
  search_action       action;
  search_areas        areas;

  gwindow window;

  search_manager();
  virtual ~search_manager();

};


//  ------------------------------------------------------------------

#endif

//  ------------------------------------------------------------------
