/**********************************************************************
This file is part of Crack dot Com's free source code release of Golgotha.
for information about compiling & licensing issues visit this URL
 If that doesn't help, contact Jonathan Clark at 
  golgotha_source@usa.net (Subject should have "GOLG" in it) 
***********************************************************************/

#include "window/style.hh"
#include "palette/pal.hh"
#include "arch.hh"
#include "loaders/load.hh"
#include "font/plain.hh"
#include "font/anti_prop.hh"

i4_style_manager_class i4_style_man;

i4_icon_hint_class::i4_icon_hint_class()
{
  close_icon=i4_load_image(i4gets("close_icon"));
  up_icon=i4_load_image(i4gets("up_icon"));
  down_icon=i4_load_image(i4gets("down_icon"));
  left_icon=i4_load_image(i4gets("left_icon"));
  right_icon=i4_load_image(i4gets("right_icon"));
  plus_icon=i4_load_image(i4gets("plus_icon"));
  minus_icon=i4_load_image(i4gets("minus_icon"));
  background_bitmap=i4_load_image(i4gets("background_bitmap"));
  ok_icon=i4_load_image(i4gets("ok_icon"));
  cancel_icon=i4_load_image(i4gets("cancel_icon"));
}

i4_time_hint_class::i4_time_hint_class()
{
  i4_const_str::iterator d=i4gets("button_delay").begin();
  i4_const_str::iterator r=i4gets("button_repeat").begin();
  i4_const_str::iterator dc=i4gets("double_click").begin();
  button_delay=d.read_number();
  button_repeat=r.read_number();
  double_click=dc.read_number();
}

void i4_graphical_style_class::cleanup()
{
  if (color_hint)
  { 
    delete color_hint;
    color_hint=0;
  }

  if (font_hint)
  {
    delete font_hint;
    font_hint=0;
  }

  if (cursor_hint)
  {
    delete cursor_hint;
    cursor_hint=0;
  }

  if (icon_hint)
  {
    delete icon_hint;
    icon_hint=0;
  }

  if (time_hint)
  {
    delete time_hint;
    time_hint=0;
  }
}

void i4_graphical_style_class::uninit()
{
  cleanup();
}


void i4_graphical_style_class::init()
{
  i4_style_man.add_style(this);
}

void i4_style_manager_class::add_style(i4_graphical_style_class *which)
{
  which->next=list;
  list=which;
}

i4_graphical_style_class *i4_style_manager_class::find_style(char *name)
{
  i4_graphical_style_class *f=list;
  for (;f;f=f->next)
     if (!strcmp(f->name(),name))
       return f;
  return 0;
}

i4_graphical_style_class *i4_style_manager_class::first_style()
{ return list; }

i4_graphical_style_class *i4_style_manager_class::next_style(i4_graphical_style_class *last)
{  return last->next; }


i4_color i4_read_color_from_resource(char *name)
{
  i4_const_str::iterator i=i4gets(name).begin();

  i4_color red=i.read_number();
  i4_color grn=i.read_number();
  i4_color blue=i.read_number();

  return (red<<16)|(grn<<8)|(blue);
}



i4_color_hint_class::i4_color_hint_class()
{
  window.active.bright=i4_read_color_from_resource("window_active_bright");
  window.active.medium=i4_read_color_from_resource("window_active_medium");
  window.active.dark=i4_read_color_from_resource("window_active_dark");

  window.passive.bright=i4_read_color_from_resource("window_passive_bright");
  window.passive.medium=i4_read_color_from_resource("window_passive_medium");
  window.passive.dark=i4_read_color_from_resource("window_passive_dark");

  button=window;

  text_foreground=i4_read_color_from_resource("text_foreground");
  text_background=i4_read_color_from_resource("text_background");

  selected_text_foreground=i4_read_color_from_resource("selected_text_foreground");
  selected_text_background=i4_read_color_from_resource("selected_text_background");

  black = 0;
  white = 0xffffff;
}

i4_font_hint_class::i4_font_hint_class()
{
  i4_image_class *im=i4_load_image(i4gets("small_font"));
  normal_font=small_font=new i4_anti_proportional_font_class(im, '!');
  delete im;
}


i4_cursor_hint_class::i4_cursor_hint_class()
{
  normal=i4_load_cursor("normal_cursor", &i4_string_man);
  text=i4_load_cursor("text_cursor", &i4_string_man);
}


void i4_graphical_style_class::prepare_for_mode(const i4_pal *pal, 
                                                i4_display_class::mode *mode)
{
  cleanup();

  time_hint=new i4_time_hint_class();
  color_hint=new i4_color_hint_class();
  font_hint=new i4_font_hint_class();
  cursor_hint=new i4_cursor_hint_class();
  icon_hint=new i4_icon_hint_class();

}

i4_font_hint_class::~i4_font_hint_class() 
{  
  delete normal_font;  
  if (small_font && small_font!=normal_font)
    delete small_font;
}

i4_icon_hint_class::~i4_icon_hint_class()
{
  delete close_icon;
  delete up_icon;
  delete down_icon;
  delete left_icon;
  delete right_icon;
  delete plus_icon;
  delete minus_icon;
  delete background_bitmap;
  delete ok_icon;
  delete cancel_icon;
}