// C++ code Copyright (C) David R. Evans G4AMJ/NQ0I

// classes for sunview mode of MIDAS

#ifndef SMSUNVIEWMODEH
#define SMSUNVIEWMODEH

#include <colour.h>
#include <panel_item.h>
#include <set.h>
#include <sm_mode.h>
#include <DREstring.h>
#include <surf_lw.h>
#include <surf_sun.h>

const int N_SUB_BUTTON_PANEL_ITEMS = 3,
          N_TEXT_PANEL_ITEMS = 4;

extern const colour black,
                    white;

class event;
class sunview_mode;

extern sunview_mode* imode;  // vital to SunView kludge

class sunview_mode : public operating_mode
{ button *bin_button, /* *calibrate_button, */ *comment_button,
         *change_button,
         *dump_button, *first_button, *ignore_button, *init_button,
	 *invert_button, *last_button, *next_button,
	 *open_button, *plot_button, *plotall_button,
	 *plotrmdr_button, *print_button, *printer_button,
	 *prior_button, *recall_button, *replot_button, *set_button,
	 *show_button;

  button *sub_button_panel_item[N_SUB_BUTTON_PANEL_ITEMS];

  colourmap button_panel_cmap, frame_cmap;

  frame base_frame;

  laserwriter lw;

  myicon midas_icon;

  panel	*sub_button_panel, *button_panel, *text_panel;

  sunscreen Monitor;

  text_item *text_panel_item[N_TEXT_PANEL_ITEMS]; 

  void _change_1(void);
  void _change_2(void);
  void _change_3(void);
  void _clear_text_panel(void);
  void _create_panel_items(void);
  void _destroy_sub_button_panel_item(const int n = N_SUB_BUTTON_PANEL_ITEMS);
  void _display_in_window(const char*, DREstring&, const colour,
                          const colour);
  void _plot_1(void);
  void _plot_2(void);
  void _pol_contrast(void);
  void _pol_threshold(void);
  void _set_display(event&);
  void _set_file_type(event&);
  void _set_file_type_1(void);
  void _set_plot_mode(event&);
  void _set_pra_mode(event&);
  void _set_sc_mode(event&);
  void _show_pra_modes(void);
  void _show_range(void);
  void _show_sc_modes(void);
  int _temp_slider(DREstring& label, const int current_value,
                   const int min_display, const int max_display);
  void _text_item_position(const int = -1, const int = -1,
                           const int = -1, const int = -1);
  void _tomplot_range(void);
  void _tomplot_range_1(void);
  
// verbose does nothing
  void verbose(DREstring) 
    { }

public:
  sunview_mode(const double);
 ~sunview_mode(void);
 
  inline frame& base(void) { return base_frame; }
  void bin(void);
  void brightness(void);
//  void calibrate(void);
  void change(void);
  void comment(void);  
  void saturation(void);
  void dump(void);
  void ignore(void);
  void open(void);
  void plot(void);
  void printer(void);
  void recall(void);
  void Set(void);
  void show(void);
  
// additional commands
  void invert(void);
  
// non-commands
  void clear_status(void) { _clear_text_panel(); }
  void display_status(DREstring&);
  void error(DREstring);
  void information(const char* cp) 
    { _display_in_window("INFORMATION", cp, black, white); }
};

#endif
