diff -U 3 -H -d -r -N -- FL/Enumerations.H FL/Enumerations.H
--- FL/Enumerations.H	2013-04-02 22:47:57.000000000 +0600
+++ FL/Enumerations.H	2013-12-21 17:32:42.228245202 +0600
@@ -520,6 +520,18 @@
   _FL_GTK_THIN_DOWN_FRAME,	///< gtk+ version of FL_THIN_DOWN_FRAME
   _FL_GTK_ROUND_UP_BOX,		///< gtk+ version of FL_ROUND_UP_BOX
   _FL_GTK_ROUND_DOWN_BOX,	///< gtk+ version of FL_ROUND_DOWN_BOX
+  _FL_OXY_UP_BOX,
+  _FL_OXY_DOWN_BOX,
+  _FL_OXY_UP_FRAME,
+  _FL_OXY_DOWN_FRAME,
+  _FL_OXY_THIN_UP_BOX,
+  _FL_OXY_THIN_DOWN_BOX,
+  _FL_OXY_THIN_UP_FRAME,
+  _FL_OXY_THIN_DOWN_FRAME,
+  _FL_OXY_ROUND_UP_BOX,
+  _FL_OXY_ROUND_DOWN_BOX,
+  _FL_OXY_BUTTON_UP_BOX,
+  _FL_OXY_BUTTON_DOWN_BOX,
   FL_FREE_BOXTYPE		///< the first free box type for creation of new box types
 };
 extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
@@ -566,6 +578,20 @@
 #define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
 #define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
 
+extern FL_EXPORT Fl_Boxtype fl_define_FL_OXY_UP_BOX();
+#define FL_OXY_UP_BOX fl_define_FL_OXY_UP_BOX()
+#define FL_OXY_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+1)
+#define FL_OXY_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+2)
+#define FL_OXY_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+3)
+#define FL_OXY_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+4)
+#define FL_OXY_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+5)
+#define FL_OXY_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+6)
+#define FL_OXY_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+7)
+#define FL_OXY_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+8)
+#define FL_OXY_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+9)
+#define FL_OXY_BUTTON_UP_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+10)
+#define FL_OXY_BUTTON_DOWN_BOX (Fl_Boxtype)(fl_define_FL_OXY_UP_BOX()+11)
+
 // conversions of box types to other boxtypes:
 /**
   Get the filled version of a frame.
diff -U 3 -H -d -r -N -- FL/Fl_Calendar.H FL/Fl_Calendar.H
--- FL/Fl_Calendar.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Calendar.H	2013-12-21 09:51:00.323448120 +0600
@@ -0,0 +1,201 @@
+// Fl_Calendar (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+// NOTE : dear users, if you will using icons in Fl_Calendar_Prefs by defaulf, then you must to link on authors of icons in your apps (somewhere help->about->third_side_of_software) - the author has web site is http://pc.de/icons/#Cologne
+
+#ifndef Fl_Calendar_H
+#define Fl_Calendar_H
+
+#include <FL/Fl_Calendar_Prefs.H>
+#include <FL/Fl_Clock_Spinner.H>
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Choice.H>
+#include <FL/Fl_Spinner.H>
+#include <FL/Fl_Double_Window.H>
+#include <FL/Fl_Menu_Window.H>
+#include <FL/Fl_Menu_Button.H>
+#include <time.h>
+
+
+// year has ~ 52.17 weeks
+class FL_EXPORT Fl_Calendar : public Fl_Menu_Window {
+protected:
+ struct tm _tm; // selected date
+ time_t _ts; // selected date
+ Fl_Button *_sel; // selected dayweek button
+ int _year, _mon, _mday; // for current date
+ 
+ Fl_Box *_header; // Header box with word's `Calendar' (you can change it in _prefs, see Fl_Calendar_Prefs)
+ 
+ Fl_Box *_icon;
+ Fl_Button *_iconaccept;
+ Fl_Button *_iconcancel;
+ Fl_Button *_iconreset;
+ Fl_Button *_iconupdate;
+ 
+ Fl_Nav_Repeat_Button *_left_btn, *_right_btn;
+ 
+ Fl_Choice *_months;
+ Fl_Spinner *_years; // [0-3000]
+ 
+ Fl_Box *_nmdays[7];
+ Fl_Box *_nweeks[6];
+ Fl_Button *_days[42];
+ char _sdays[42]; // values for this array (it linked with `_days' are buttons): `-1' - day for prev month; `0' - day for current month; `1' - day for next month
+ 
+ Fl_Spinner *_weeks; // [1-52]
+ Fl_Clock_Spinner *_clocks;
+ 
+ Fl_Calendar_Prefs _prefs;
+ 
+ int calc_height();
+ int calc_width();
+ 
+ bool _cach; // flag for close after changed date/time(change by double click); default is true
+ bool _rdo; // flag for edit time/date; default is false
+ 
+ void select(int index, bool sel);
+public:
+ 
+ Fl_Calendar(int X,int Y,int W,int H);
+ int handle(int e);
+ 
+ // hide window after changed date by double click or by click on accept button
+ void close_after_change(bool f){ _cach = f; }
+ bool close_after_change(){ return _cach; }
+ 
+ void readonly(bool f);
+ bool readonly(){ return _rdo; }
+ 
+ void activate();
+ void deactivate();
+ 
+ void resize(int X,int Y,int W,int H){ Fl_Menu_Window::resize(X, Y, w(), h()); }
+ 
+ // if p is NULL then redrawing current prefs;
+ void preferences(Fl_Calendar_Prefs *p);
+ Fl_Calendar_Prefs *preferences(){ return &_prefs; }
+ 
+ 
+ // set current local time
+ void set_now();
+ // `-1' - for old values; mday - [1-31]; mon - [0-11]; year - [0-9]{1,4}
+ // example set `5 May 2000 00:20:05': set(5, 04, 2000, 0, 20, 5);
+ void set(int mday, int mon=-1, int year=-1, int hour=-1, int min=-1, int sec=-1);
+ void set(bool utc, time_t t);
+ void set(struct tm *tm);
+ // see man(3):strptime for next function
+ void set(const char* str, const char *fmt);
+ 
+ // get time for selected date in the calendar, if `tm' is not NULL then to there will puts info too
+ time_t get(bool utc = true, struct tm *tm = NULL);
+ // get time to cstring `out' by format `fmt' ; see man(3):strftime
+ int get(const char *fmt, char *out, int szout);
+ 
+ 
+ /// Time functions has `struct tm' presentation:
+ static int get_nweek(int year, int yday, int mon, int mday, int wday); // return number of week
+ static int get_nweek_gm(const time_t target); // return number of week
+ static int get_nweek_local(const time_t target); // return number of week
+ static int get_nweek(struct tm *t); // return number of week
+ static int get_ndays(int year, int mon); // return number days
+ // ending `_pm' - for previous month, `_nm' is for next month relatively `mon'
+ static int get_ndays_pm(int year, int mon); // return number days
+ static int get_ndays_nm(int year, int mon); // return number days
+ static int get_wday(int year, int mon, int mday); // return number of day in the week[0-6]
+ static int get_yday(int year, int mon, int mday); // return number of days in `year'
+ // check `year' for leap (normal presentation: 2013, 2000)
+ static int is_leap_year(int year);
+ // convert wday from `struct tm' presentation into normal
+ static int normal_wday(int _i);
+ // convert wday from normal presentation into `struct tm' 
+ static int base_wday(int _i);
+ #ifdef _WIN32
+ // portable version of this functions for WINDOWS, see man(3):timegm
+ static time_t timegm(struct tm *tm);
+ static time_t timelocal(struct tm *tm);
+ #endif
+ 
+ 
+ /// Functions for Fl_Calendar_Prefs munipulations:
+ Fl_Font font_header(){ return _prefs._fonts[0]; }
+ Fl_Fontsize font_header_size(){ return _prefs._size_fonts[0]; }
+ int font_header_attrs(){ return _prefs._attr_fonts[0]; }
+ void font_header(Fl_Font fn, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  set_font(0, fn, sz, bold, italic);
+ }
+ void font_header(const char *name, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  set_font(0, name, sz, bold, italic);
+ }
+ 
+ Fl_Font font_months(){ return _prefs._fonts[1]; }
+ Fl_Fontsize font_months_size(){ return _prefs._size_fonts[1]; }
+ int font_months_attrs(){ return _prefs._attr_fonts[1]; }
+ void font_months(Fl_Font fn, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  set_font(1, fn, sz, bold, italic);
+ }
+ void font_months(const char *name, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  set_font(1, name, sz, bold, italic);
+ }
+ 
+ Fl_Font font_days(){ return _prefs._fonts[2]; }
+ Fl_Fontsize font_days_size(){ return _prefs._size_fonts[2]; }
+ int font_days_attrs(){ return _prefs._attr_fonts[2]; }
+ void font_days(Fl_Font fn, Fl_Fontsize sz=12, bool bold=false, bool italic=false){
+  set_font(2, fn, sz, bold, italic);
+ }
+ void font_days(const char *name, Fl_Fontsize sz=12, bool bold=false, bool italic=false){
+  set_font(2, name, sz, bold, italic);
+ }
+ 
+ 
+ void set_font(int index, Fl_Font fn, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  if(index < 0 || index >= 3){ return ; }
+  int attrs = 0; if(bold){ attrs |= FL_BOLD; } if(italic){ attrs |= FL_ITALIC; }
+  _prefs._fonts[index] = fn;
+  _prefs._attr_fonts[index] = attrs;
+  _prefs._size_fonts[index] = sz;
+  preferences(NULL);
+ }
+ 
+ void set_font(int index, const char *name, Fl_Fontsize sz=14, bool bold=false, bool italic=false){
+  if(index < 0 || index >= 3){ return ; }
+  int attrs = 0; if(bold){ attrs |= FL_BOLD; } if(italic){ attrs |= FL_ITALIC; }
+  int ifont = font_index(name, attrs);
+  if(ifont < 0){ return; }
+  _prefs._fonts[index] = ifont;
+  _prefs._attr_fonts[index] = attrs;
+  _prefs._size_fonts[index] = sz;
+  preferences(NULL);
+ }
+ 
+ int font_index(const char *name, int attrs=0){
+  int r = -1;
+  if(name == NULL){ return r; }
+  int lfonts = Fl::set_fonts("*");
+  int type = 0;
+  const char *fn = NULL;
+  for(int _i = 0; _i < lfonts; _i++){
+   fn = Fl::get_font_name((Fl_Font)_i, &type);
+   if(!strcasecmp(name, fn) && type == attrs){
+    r = _i; break;
+   }
+  }
+  return r;
+ }
+ 
+ 
+ 
+private:
+ // callbacks
+ static void year_cb(Fl_Spinner* w, Fl_Calendar *a);
+ static void month_cb(Fl_Choice* w, Fl_Calendar *a);
+ static void month_cb2(Fl_Nav_Repeat_Button* w, Fl_Calendar *a);
+ static void week_cb(Fl_Spinner* w, Fl_Calendar *a);
+ static void clock_cb(Fl_Clock_Spinner* w, Fl_Calendar *a);
+ static void button_cb(Fl_Button* w, Fl_Calendar *a);
+ 
+}; // Fl_Calendar
+
+
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Calendar_Prefs.H FL/Fl_Calendar_Prefs.H
--- FL/Fl_Calendar_Prefs.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Calendar_Prefs.H	2013-12-21 09:51:00.330448119 +0600
@@ -0,0 +1,48 @@
+// Fl_Calendar_Prefs (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+// NOTE :  icons were taken from http://pc.de/icons/pc.de-cologne-icon-pack.zip , you can use its and for free & for commerce apps, but you should 
+// NOTE : dear users, if you will using icons in Fl_Calendar_Prefs by default, then you must to link on authors of icons in your apps (somewhere help->about->third_side_of_software) - the author has web site is http://pc.de/icons/#Cologne
+
+#ifndef Fl_Calendar_Prefs_H
+#define Fl_Calendar_Prefs_H
+
+#include <FL/Fl.H>
+#include <FL/Fl_PNG_Image.H>
+
+// TODO : needs in the Fl_PNG_Image class to add method set_image_from_buffer(buff, lenbuff), for users has possibility to change icons for calendar !
+class FL_EXPORT Fl_Calendar_Prefs {
+public:
+ Fl_Calendar_Prefs();
+ ~Fl_Calendar_Prefs();
+ 
+ Fl_PNG_Image _icon; // icon for header (drawing on left side from label has word in `_header')
+ Fl_PNG_Image _iconupdate; // icon for update to current local time and set it
+ Fl_PNG_Image _iconreset; // icon for reset to current date (drawing in left-bottom corner)
+ Fl_PNG_Image _iconaccept; // icon for accept current selected date as base
+ Fl_PNG_Image _iconcancel; // icon for closebutton (drawing on right side from the label)
+ 
+ // NOTE : deimages are auto-generation from normal icons
+ Fl_PNG_Image _deicon, _deiconcancel, _deiconreset, _deiconaccept, _deiconupdate;
+ 
+ // Indexes: 0-_iconupdate, 1-_iconreset, 2-_iconaccept, 3-_iconcancel
+ char _icontooltips[4][32];
+ 
+ char _header[32]; // header label `Calendar' - is the lable
+ char _months[12][32]; // November, September ...
+ char _days[7][32]; // short notations for months: _days[0]="Sun", _days[1]="Mon" ...
+ 
+ // Indexes: 0 - inactive color; 1 - base color; 2 - selection color;
+ Fl_Color _headercolor[3]; // colors of _header
+ Fl_Color _monthscolor[3]; // colors of months
+ Fl_Color _dayscolor[3]; // colors of days
+ 
+ // Indexes: 0 - for _header; 1 - for _months & num year; 2 - for _days;
+ Fl_Fontsize _size_fonts[3];
+ int _attr_fonts[3];
+ char _name_fonts[3][36];
+ Fl_Font _fonts[3];
+ 
+};
+
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Clock_Input.H FL/Fl_Clock_Input.H
--- FL/Fl_Clock_Input.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Clock_Input.H	2013-12-21 09:51:00.330448119 +0600
@@ -0,0 +1,36 @@
+// Fl_Clock_Input (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Clock_Input_H
+#define Fl_Clock_Input_H
+
+#include <FL/Fl_Input.H>
+
+class FL_EXPORT Fl_Clock_Input : public Fl_Input {
+public:
+ Fl_Clock_Input(int X,int Y,int W,int H,const char*L=0);
+ virtual int handle(int e);
+ 
+ void incr();
+ void decr();
+ 
+ void get_values(int &hour, int &minutes);
+ void set_values(int hour, int minute, int pos = -1);
+ 
+ void hours(int hour);
+ int hours(){ return _hours; }
+ 
+ void minutes(int minute);
+ int minutes(){ return _minutes; }
+ 
+ void check_value();
+ void update(int pos = -1);
+ 
+protected:
+ int _lp; // last position (for to know what to increment)
+ int _hours;
+ int _minutes;
+};
+
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Clock_Spinner.H FL/Fl_Clock_Spinner.H
--- FL/Fl_Clock_Spinner.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Clock_Spinner.H	2013-12-21 09:51:00.331448120 +0600
@@ -0,0 +1,52 @@
+// Fl_Clock_Spinner (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Clock_Spinner_H
+#define Fl_Clock_Spinner_H
+
+#include <FL/Fl_Clock_Input.H>
+#include <FL/Fl_Nav_Button.H>
+#include <FL/Fl_Group.H>
+
+// values for type():
+#define FL_NORMAL_CLOCK_SPINNER   0
+#define FL_READONLY_CLOCK_SPINNER   1
+
+#define BUTTON_ARROW_WIDTH 11
+
+
+// TODO : needs add support for seconds in a future (with )
+class FL_EXPORT Fl_Clock_Spinner : public Fl_Group {
+protected:
+ Fl_Clock_Input _input;
+ Fl_Nav_Repeat_Button _up, _down;
+public:
+ 
+ Fl_Clock_Spinner(int X,int Y,int W,int H,const char*L=0);
+ 
+ void resize(int X,int Y,int W,int H);
+ void type(int t);
+ 
+ void readonly(bool f){
+  if(f){ type(FL_READONLY_CLOCK_SPINNER); }
+  else { type(FL_NORMAL_CLOCK_SPINNER); }
+ }
+ 
+ bool readonly(){ return (Fl_Group::type() == FL_READONLY_CLOCK_SPINNER); }
+ 
+ void set_values(int hour, int minute){ _input.set_values(hour, minute); } // set
+ void get_values(int &hour, int &minutes){ _input.get_values((int&)hour, (int&)minutes); } // get
+ 
+ void hours(int hour){ _input.hours(hour); } // set
+ int hours(){ return _input.hours(); } // get
+ 
+ void minutes(int minute){ _input.minutes(minute); } // set
+ int minutes(){ return _input.minutes(); } // get
+ 
+ 
+ virtual int handle(int e);
+ static void sb_cb(Fl_Widget *w, Fl_Clock_Spinner *sb);
+};
+
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Input_Choice.H FL/Fl_Input_Choice.H
--- FL/Fl_Input_Choice.H	2012-12-09 23:45:24.000000000 +0600
+++ FL/Fl_Input_Choice.H	2013-12-21 09:51:00.331448120 +0600
@@ -1,5 +1,5 @@
 //
-// "$Id: Fl_Input_Choice.H 9740 2012-12-09 17:45:24Z manolo $"
+// "$Id: Fl_Input_Choice.H 9203 2011-12-08 18:18:51Z greg.ercolano $"
 //
 // An input/chooser widget.
 //            ______________  ____
@@ -9,6 +9,7 @@
 //
 // Copyright 1998-2010 by Bill Spitzak and others.
 // Copyright 2004 by Greg Ercolano.
+// 2013 by Dmitrij K was made adapting for theme Oxy
 //
 // This library is free software. Distribution and use rights are outlined in
 // the file "COPYING" which should have been included with this file.  If this
@@ -27,196 +28,97 @@
 #ifndef Fl_Input_Choice_H
 #define Fl_Input_Choice_H
 
-#include <FL/Fl.H>
-#include <FL/Fl_Group.H>
+#include <FL/Fl_Menu_.H>
 #include <FL/Fl_Input.H>
-#include <FL/Fl_Menu_Button.H>
-#include <FL/fl_draw.H>
-#include <string.h>
-
-/**
-  A combination of the input widget and a menu button.
-
-  \image html input_choice.jpg
-  \image latex input_choice.jpg "Fl_Input_Choice widget" width=6cm
-
-  The user can either type into the input area, or use the
-  menu button chooser on the right to choose an item which loads
-  the input area with the selected text.
-  <P>
-  The application can directly access both the internal Fl_Input 
-  and Fl_Menu_Button widgets respectively using the input() and menubutton()
-  accessor methods.
-*/
-class FL_EXPORT Fl_Input_Choice : public Fl_Group {
-  // Private class to handle slightly 'special' behavior of menu button
-  class InputMenuButton : public Fl_Menu_Button {
-    void draw() {
-      draw_box(FL_UP_BOX, color());
-      fl_color(active_r() ? labelcolor() : fl_inactive(labelcolor()));
-      int xc = x()+w()/2, yc=y()+h()/2;
-      fl_polygon(xc-5,yc-3,xc+5,yc-3,xc,yc+3);
-      if (Fl::focus() == this) draw_focus();
-    }
-  public:
-    InputMenuButton(int X,int Y,int W,int H,const char*L=0) : 
-	Fl_Menu_Button(X, Y, W, H, L) { box(FL_UP_BOX); }
-  };
-
-  Fl_Input *inp_;
-  InputMenuButton *menu_;
-
-  static void menu_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    const Fl_Menu_Item *item = o->menubutton()->mvalue();
-    if (item && item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)) return;	// ignore submenus
-    if (!strcmp(o->inp_->value(), o->menu_->text()))
-    {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    else
-    {
-      o->inp_->value(o->menu_->text());
-      o->inp_->set_changed();
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-    {
-      o->Fl_Widget::clear_changed();
-      o->inp_->clear_changed();
-    }
-  }
-
-  static void inp_cb(Fl_Widget*, void *data) { 
-    Fl_Input_Choice *o=(Fl_Input_Choice *)data;
-    Fl_Widget_Tracker wp(o);
-    if (o->inp_->changed()) {
-      o->Fl_Widget::set_changed();
-      if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE))
-	o->do_callback();
-    } else {
-      o->Fl_Widget::clear_changed();
-      if (o->when() & FL_WHEN_NOT_CHANGED)
-	o->do_callback();
-    }
-    
-    if (wp.deleted()) return;
-
-    if (o->callback() != default_callback)
-      o->Fl_Widget::clear_changed();
-  }
-
-  // Custom resize behavior -- input stretches, menu button doesn't
-  inline int inp_x() { return(x() + Fl::box_dx(box())); }
-  inline int inp_y() { return(y() + Fl::box_dy(box())); }
-  inline int inp_w() { return(w() - Fl::box_dw(box()) - 20); }
-  inline int inp_h() { return(h() - Fl::box_dh(box())); }
+#include <FL/Fl_Nav_Button.H>
 
-  inline int menu_x() { return(x() + w() - 20 - Fl::box_dx(box())); }
-  inline int menu_y() { return(y() + Fl::box_dy(box())); }
-  inline int menu_w() { return(20); }
-  inline int menu_h() { return(h() - Fl::box_dh(box())); }
 
-public:
-  /**
-    Creates a new Fl_Input_Choice widget using the given position, size,
-    and label string.
-    Inherited destructor destroys the widget and any values associated with it.
-  */
-  Fl_Input_Choice(int X,int Y,int W,int H,const char*L=0);
+class Fl_Input_Choice: public Fl_Menu_ {
+ Fl_Input input_;
+ Fl_Nav_Button button_;
+ public:
+ 
+  Fl_Input_Choice(int X, int Y, int W, int H, const char *L=0);
   
-  /** Adds an item to the menu.
-   You can access the more complex Fl_Menu_Button::add() methods 
-   (setting callbacks, userdata, etc), via menubutton(). Example:
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Fonts");
-   Fl_Menu_Button *mb = choice->menubutton();             // use Fl_Input_Choice's Fl_Menu_Button
-   mb->add("Helvetica", 0, MyFont_CB,     (void*)mydata); // use Fl_Menu_Button's add() methods
-   mb->add("Courier",   0, MyFont_CB,     (void*)mydata);
-   mb->add("More..",    0, FontDialog_CB, (void*)mydata);
-   \endcode
-   */
-  void add(const char *s) { menu_->add(s);  }
-  /** Returns the combined changed() state of the input and menu button widget. */
-  int changed() const { return inp_->changed() | Fl_Widget::changed(); }
-  /** Clears the changed() state of both input and menu button widgets. */
-  void clear_changed() { 
-    inp_->clear_changed();
-    Fl_Widget::clear_changed();
-  }
-  /** Sets the changed() state of both input and menu button widgets
-   to the specfied value.*/
-  void set_changed() { 
-    inp_->set_changed();
-    // no need to call Fl_Widget::set_changed()
-  }
-  /** Removes all items from the menu. */
-  void clear() { menu_->clear(); }
-  /** Gets the box type of the menu button */
-  Fl_Boxtype down_box() const { return (menu_->down_box()); }
-  /** Sets the box type of the menu button */
-  void down_box(Fl_Boxtype b) { menu_->down_box(b); }
-  /** Gets the Fl_Menu_Item array used for the menu. */
-  const Fl_Menu_Item *menu() { return (menu_->menu()); }
-  /** Sets the Fl_Menu_Item array used for the menu. */
-  void menu(const Fl_Menu_Item *m) { menu_->menu(m); }
-  void resize(int X, int Y, int W, int H) {
-    Fl_Group::resize(X,Y,W,H);
-    inp_->resize(inp_x(), inp_y(), inp_w(), inp_h());
-    menu_->resize(menu_x(), menu_y(), menu_w(), menu_h());
+  inline virtual void draw(){
+   int dx = Fl::box_dx(box()), dy = Fl::box_dy(box()), dw = Fl::box_dw(box()), dh = Fl::box_dh(box());
+   int X = x(), Y = y(), W = w(), H = h();
+   fl_push_clip(X,Y,W,H);
+   draw_box(box(), color());
+   input_.damage_resize(X+dx, Y+dy, W-dw-18, H-dh);
+   button_.damage_resize(X+W-18-1, Y+dy/2, 18, H-dh/2);
+   fl_pop_clip();
   }
-  /// Gets the Fl_Input text field's text color.
-  Fl_Color textcolor() const { return (inp_->textcolor());}
-  /// Sets the Fl_Input text field's text color to \p c.
-  void textcolor(Fl_Color c) { inp_->textcolor(c);}
-  /// Gets the Fl_Input text field's font style.
-  Fl_Font textfont() const { return (inp_->textfont());}
-  /// Sets the Fl_Input text field's font style to \p f.
-  void textfont(Fl_Font f) { inp_->textfont(f);}
-  /// Gets the Fl_Input text field's font size
-  Fl_Fontsize textsize() const { return (inp_->textsize()); }
-  /// Sets the Fl_Input text field's font size to \p s.
-  void textsize(Fl_Fontsize s) { inp_->textsize(s); }
-  /// Returns the Fl_Input text field's current contents.
-  const char* value() const { return (inp_->value()); }
-  /** Sets the Fl_Input text field's contents to \p val.
-   Does not affect the menu selection.*/
-  void value(const char *val) { inp_->value(val); }
-  /** Chooses item# \p val in the menu, and sets the Fl_Input text field
-   to that value. Any previous text is cleared.*/
-  void value(int val) {
-    menu_->value(val);
-    inp_->value(menu_->text(val));
+  
+  inline int changed() const { return input_.changed() | Fl_Menu_::changed(); }
+  inline void clear_changed() { input_.clear_changed(); Fl_Menu_::clear_changed(); }
+  inline void set_changed() { input_.set_changed(); }
+  
+  inline Fl_Input* input(){ return &input_; }
+  inline Fl_Nav_Button* button(){ return &button_; }
+  
+  inline void add(const char *l){ Fl_Menu_::add(l); }
+  inline void clear() { Fl_Menu_::clear(); }
+  inline const char* value() const { return (input_.value()); }
+  inline void value(const char *val) { input_.value(val); }
+  inline void value(int val) { Fl_Menu_::value(val); input_.value(Fl_Menu_::text(val)); }
+  
+ public:
+  
+  static void input_cb(Fl_Widget *w, void *d){
+   Fl_Input_Choice *o=(Fl_Input_Choice *)d;
+   Fl_Widget_Tracker wp(o);
+   
+   if (o->input()->changed()) {
+    o->Fl_Widget::set_changed();
+    if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)){ o->do_callback(); }
+   }
+   
+   else {
+    o->Fl_Widget::clear_changed();
+    if (o->when() & FL_WHEN_NOT_CHANGED){ o->do_callback(); }
+   }
+   
+   if (wp.deleted()){ return; }
+   if (o->callback() != default_callback){ o->Fl_Widget::clear_changed(); }
   }
-  /** Returns a pointer to the internal Fl_Menu_Button widget.
-   This can be used to access any of the methods of the menu button, e.g.
-   \code
-   Fl_Input_Choice *choice = new Fl_Input_Choice(100,10,120,25,"Choice:");
-   [..]
-   // Print all the items in the choice menu
-   for ( int t=0; t<choice->menubutton()->size(); t++ ) {
-       const Fl_Menu_Item &item = choice->menubutton()->menu()[t];
-       printf("item %d -- label=%s\n", t, item.label() ? item.label() : "(Null)");
+  
+  static void menu_cb(Fl_Widget *w, void *d) {
+   Fl_Input_Choice *o=(Fl_Input_Choice *)d;
+   Fl_Widget_Tracker wp(o);
+   const Fl_Menu_Item *item = NULL;
+   
+   if (Fl::scheme() || fl_contrast(o->textcolor(), FL_BACKGROUND2_COLOR) != o->textcolor()) {
+    item = o->menu()->pulldown(o->x(),o-> y(), o->w(), o->h(), 0, o);
    }
-   \endcode
-  */
-  Fl_Menu_Button *menubutton() { return menu_; }
-  /** Returns a pointer to the internal Fl_Input widget.
-   This can be used to directly access all of the Fl_Input widget's
-   methods.*/
-  Fl_Input *input() { return inp_; }
+   
+   else {
+    Fl_Color c = o->color();
+    o->color(FL_BACKGROUND2_COLOR);
+    item = o->menu()->pulldown(o->x(),o-> y(), o->w(), o->h(), 0, o);
+    o->color(c);
+   }
+   
+   if (!item){ return; }
+   if (item->flags & (FL_SUBMENU|FL_SUBMENU_POINTER)){ return; } // ignore submenus
+   if ( !strcmp(o->input()->value(), item->label())) {
+    o->Fl_Widget::clear_changed();
+    if (o->when() & FL_WHEN_NOT_CHANGED){ o->do_callback(); }
+   }
+   
+   else {
+    o->input()->value(item->label());
+    o->input()->set_changed();
+    o->Fl_Widget::set_changed();
+    if (o->when() & (FL_WHEN_CHANGED|FL_WHEN_RELEASE)){ o->do_callback(); }
+   }
+   if (wp.deleted()){ return; }
+   if (o->callback() != default_callback){
+    o->Fl_Widget::clear_changed();
+    o->input()->clear_changed();
+   }
+  }
+  
 };
 
-#endif // !Fl_Input_Choice_H
-
-//
-// End of "$Id: Fl_Input_Choice.H 9740 2012-12-09 17:45:24Z manolo $".
-//
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Nav_Button.H FL/Fl_Nav_Button.H
--- FL/Fl_Nav_Button.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Nav_Button.H	2013-12-21 09:51:00.331448120 +0600
@@ -0,0 +1,242 @@
+//
+// Navigation button (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2010 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Nav_Button_H
+#define Fl_Nav_Button_H
+
+#include "Fl_Button.H"
+#include "Fl_Repeat_Button.H"
+#include "fl_draw.H"
+
+extern FL_EXPORT void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc=FL_BLACK);
+
+class Fl_Nav_Repeat_Button : public Fl_Repeat_Button {
+ Fl_Color _hlcol;
+ bool _light;
+ Fl_Align _al;
+public:
+ inline void light(bool flag){ if(!(_light = flag)){ _hlcol = FL_BLACK; } }
+ inline bool light(){ return _light; }
+ inline Fl_Nav_Repeat_Button(int x, int y, int w, int h, const char* l=0):Fl_Repeat_Button(x,y,w,h,l) {
+  _hlcol = FL_BLACK;
+  _light = false;
+  align(FL_ALIGN_BOTTOM);
+  box(FL_THIN_UP_BOX);
+  down_box(FL_THIN_DOWN_BOX);
+ }
+ inline void align(Fl_Align a){
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  if(a == FL_ALIGN_TOP || a == FL_ALIGN_BOTTOM || a == FL_ALIGN_RIGHT || a == FL_ALIGN_LEFT){ _al = a; }
+  if(flag_oxy){ Fl_Repeat_Button::align(a); label(""); return; }
+  switch(a){
+    case FL_ALIGN_TOP:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-42<"); break; }
+    case FL_ALIGN_BOTTOM:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-42>"); break; }
+    case FL_ALIGN_RIGHT:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-45>"); break; }
+    case FL_ALIGN_LEFT:{ Fl_Repeat_Button::align(FL_ALIGN_CENTER); Fl_Repeat_Button::label("@-45<"); break; }
+    default:{ Fl_Repeat_Button::align(a); break; }
+   }
+ }
+ inline virtual void draw(){
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  Fl_Align a = Fl_Repeat_Button::align();
+  
+  if(!flag_oxy){
+   align(a);
+   Fl_Repeat_Button::draw();
+   return;
+  }
+  //else if(*label()){ label(""); }
+  
+  //Fl_Color hlcol = 0x0;
+  int dx = Fl::box_dx(FL_DOWN_BOX);
+  //int dy = Fl::box_dy(FL_DOWN_BOX);
+  int W = w();
+  int H = h();
+  int x1;
+  int y1;
+  
+  if (type() == FL_HIDDEN_BUTTON) return;
+  Fl_Color col = value() ? selection_color() : color();
+  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
+  draw_backdrop();
+  
+  switch(_al){
+   case FL_ALIGN_TOP:{
+    x1 = x()+W/2-4;
+    y1 = y()+H/2+1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_BOTTOM:{
+    L_BOTTOM:
+    x1 = x()+W/2-4;
+    y1 = y()+H/2-3;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_LEFT:{
+    x1 = x()+W/2+2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_RIGHT:{
+    x1 = x()+W/2-3+dx/2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+ }
+ 
+ virtual int handle(int event)
+    {
+     if(!_light){ return Fl_Repeat_Button::handle(event); }
+     bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+     if(!flag_oxy){ return Fl_Repeat_Button::handle(event); }
+     
+        switch (event)
+        {
+        case FL_ENTER:
+            _hlcol = fl_color_average(color(), FL_BLACK, 0.55);
+            Fl_Repeat_Button::redraw();
+            break;
+        case FL_LEAVE:
+            _hlcol = FL_BLACK;
+            Fl_Repeat_Button::redraw();
+            break;
+        }
+        return Fl_Repeat_Button::handle(event);
+    }
+};
+
+
+
+
+
+
+
+
+
+class Fl_Nav_Button : public Fl_Button {
+ Fl_Color _hlcol;
+ bool _light;
+ Fl_Align _al;
+public:
+ inline void light(bool flag){ if(!(_light = flag)){ _hlcol = FL_BLACK; } }
+ inline bool light(){ return _light; }
+ inline Fl_Nav_Button(int x, int y, int w, int h, const char* l=0):Fl_Button(x,y,w,h,l) {
+  _hlcol = FL_BLACK;
+  _light = false;
+  align(FL_ALIGN_TOP);
+  box(FL_THIN_UP_BOX);
+  down_box(FL_THIN_DOWN_BOX);
+ }
+ inline void align(Fl_Align a){
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  if(a == FL_ALIGN_TOP || a == FL_ALIGN_BOTTOM || a == FL_ALIGN_RIGHT || a == FL_ALIGN_LEFT){ _al = a; }
+  if(flag_oxy){ Fl_Button::align(a); label(""); return; }
+  switch(a){
+    case FL_ALIGN_TOP:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-42<"); break; }
+    case FL_ALIGN_BOTTOM:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-42>"); break; }
+    case FL_ALIGN_RIGHT:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-45>"); break; }
+    case FL_ALIGN_LEFT:{ Fl_Button::align(FL_ALIGN_CENTER); Fl_Button::label("@-45<"); break; }
+    default:{ Fl_Button::align(a); break; }
+   }
+ }
+ inline virtual void draw(){
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  Fl_Align a = Fl_Button::align();
+  
+  if(!flag_oxy){
+   align(a);
+   Fl_Button::draw();
+   return;
+  }
+  //else if(*label()){ label(""); }
+  
+  int dx = Fl::box_dx(FL_DOWN_BOX);
+  //int dy = Fl::box_dy(FL_DOWN_BOX);
+  int W = w();
+  int H = h();
+  int x1;
+  int y1;
+  
+  if (type() == FL_HIDDEN_BUTTON) return;
+  Fl_Color col = value() ? selection_color() : color();
+  draw_box(value() ? (down_box()?down_box():fl_down(box())) : box(), col);
+  draw_backdrop();
+  
+  switch(_al){
+   case FL_ALIGN_TOP:{
+    x1 = x()+W/2-4;
+    y1 = y()+H/2+1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_BOTTOM:{
+    L_BOTTOM:
+    x1 = x()+W/2-4;
+    y1 = y()+H/2-3;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_LEFT:{
+    x1 = x()+W/2+2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   
+   case FL_ALIGN_RIGHT:{
+    x1 = x()+W/2-3+dx/2;
+    y1 = y()+H/2-4-1;
+    oxy_arrow(x1, y1, _al, active_r(), color(), _hlcol);
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+ }
+ 
+ virtual int handle(int event)
+    {
+     if(!_light){ return Fl_Button::handle(event); }
+     bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+     if(!flag_oxy){ return Fl_Button::handle(event); }
+     
+        switch (event)
+        {
+        case FL_ENTER:
+            _hlcol = fl_color_average(color(), FL_BLACK, 0.55);
+            Fl_Button::redraw();
+            break;
+        case FL_LEAVE:
+            _hlcol = FL_BLACK;
+            Fl_Button::redraw();
+            break;
+        }
+        return Fl_Button::handle(event);
+    }
+ 
+};
+
+#endif
diff -U 3 -H -d -r -N -- FL/Fl_Spinner.H FL/Fl_Spinner.H
--- FL/Fl_Spinner.H	2013-05-16 11:02:18.000000000 +0600
+++ FL/Fl_Spinner.H	2013-12-15 01:17:25.000000000 +0600
@@ -29,10 +29,12 @@
 #  include <FL/Enumerations.H>
 #  include <FL/Fl_Group.H>
 #  include <FL/Fl_Input.H>
-#  include <FL/Fl_Repeat_Button.H>
+#  include <FL/Fl_Nav_Button.H>
 #  include <stdio.h>
 #  include <stdlib.h>
+#  include <FL/names.h>
 
+#define BUTTON_ARROW_WIDTH 11 // width of buttons for incriment/decriment value
 
 /**
   This widget is a combination of the input
@@ -55,7 +57,7 @@
 protected:
 #endif
   Fl_Input	input_;			// Input field for the value
-  Fl_Repeat_Button
+  Fl_Nav_Repeat_Button
 		up_button_,		// Up button
 		down_button_;		// Down button
 
@@ -111,7 +113,7 @@
                   } else {
 		    sprintf(s, format_, value_);
                   }
-		  input_.value(s);
+		  input_.value(s); input_.redraw();
 		}
 
   public:
@@ -131,11 +133,20 @@
   int		handle(int event) {
 		  switch (event) {
 		    case FL_KEYDOWN :
+             if(Fl::focus() == &input_ &&
+              (Fl::event_key() == FL_Right ||
+              Fl::event_key() == FL_Left)){
+              input_.handle(event);
+              input_.redraw();
+              return 1;
+             }
 		    case FL_SHORTCUT :
 		      if (Fl::event_key() == FL_Up) {
+               up_button_.take_focus();
 			up_button_.do_callback();
 			return 1;
 		      } else if (Fl::event_key() == FL_Down) {
+               down_button_.take_focus();
 			down_button_.do_callback();
 			return 1;
 		      } else return 0;
@@ -143,10 +154,45 @@
 		    case FL_FOCUS :
 		      if (input_.take_focus()) return 1;
 		      else return 0;
-		  }
-
+		  
+           case FL_KEYUP:
+             if(Fl::focus() == &input_){
+              input_.handle(event);
+              input_.do_callback();
+              input_.redraw();
+              return 1;
+             }
+             
+           case FL_PUSH:
+            Fl_Widget *o = Fl::pushed();
+            if(o == &up_button_){
+             up_button_.take_focus();
+             up_button_.do_callback();
+             return 1;
+            } else if(o == &down_button_){
+             down_button_.take_focus();
+             down_button_.do_callback();
+             return 1;
+            }
+           
+          }
+		  
+		  if(Fl::event_inside(&input_) &&
+           (event == FL_DRAG ||event == FL_PUSH ||
+           event == FL_RELEASE)){
+           input_.handle(event);
+           input_.do_callback();
+           input_.redraw();
+           return 1;
+          }
+		  
 		  return Fl_Group::handle(event);
 		}
+		
+		void draw(){
+         if(box()){ draw_box(); }
+         for(int _i = 0; _i < children(); _i++){ child(_i)->draw(); }
+        }
 
   /** Speling mistakes retained for source compatibility \deprecated */
   double	maxinum() const { return (maximum_); }
@@ -164,11 +210,10 @@
   void		range(double a, double b) { minimum_ = a; maximum_ = b; }
   void		resize(int X, int Y, int W, int H) {
 		  Fl_Group::resize(X,Y,W,H);
-
-		  input_.resize(X, Y, W - H / 2 - 2, H);
-		  up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
-		  down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
-		                      H / 2 + 2, H / 2);
+          input_.resize(X, Y, W - BUTTON_ARROW_WIDTH, H);
+          if(Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){ Y+=1; }
+          up_button_.resize(X + W - BUTTON_ARROW_WIDTH, Y, BUTTON_ARROW_WIDTH, H / 2);
+          down_button_.resize(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2);
 		}
   /**
     Sets or returns the amount to change the value when the user clicks a button. 
@@ -249,6 +294,10 @@
     Return the selection color of the spinner widget's input field.
   */
   Fl_Color	selection_color() const { return input_.selection_color(); }
+  
+  inline Fl_Input *input(){ return &input_; }
+  inline Fl_Nav_Repeat_Button *button_up(){ return &up_button_; }
+  inline Fl_Nav_Repeat_Button *button_down(){ return &down_button_; }
 };
 
 #endif // !Fl_Spinner_H
diff -U 3 -H -d -r -N -- FL/Fl_Toggle_Browser.H FL/Fl_Toggle_Browser.H
--- FL/Fl_Toggle_Browser.H	1970-01-01 05:00:00.000000000 +0500
+++ FL/Fl_Toggle_Browser.H	2013-12-21 09:51:00.332448120 +0600
@@ -0,0 +1,71 @@
+//
+// "$Id: Fl_Browser.H 9682 2012-09-17 22:44:54Z greg.ercolano $"
+//
+// Toggle Browser for the Fast Light Tool Kit (FLTK). (author Dmitrij K, kdiman at live dot ru)
+//
+// Copyright 1998-2011 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef Fl_Toggle_Browser_H
+#define Fl_Toggle_Browser_H
+
+#include "Fl.H"
+#include "Fl_Browser.H"
+
+class Fl_Toggle_Browser : public Fl_Browser {
+public:
+ Fl_Toggle_Browser(int X, int Y, int W, int H, const char *L = 0):
+ Fl_Browser(X,Y,W,H,L){
+  type(FL_MULTI_BROWSER);
+ }
+ 
+ virtual int handle(int e){
+  
+  switch(e){
+   case FL_PUSH: {
+    if ( Fl::event_button() == FL_LEFT_MOUSE ){
+     int X, Y;
+     int xx, yy, ww, hh, dx, dy;
+     
+     dx = Fl::box_dy(box())*2;
+     dy = Fl::box_dy(box())*2;
+     X=Fl::event_x(); Y=Fl::event_y();
+     xx = x()+dx; yy = y()+dy; ww = x()+w()-(dx*2); hh = y()+h()-(dy*2);
+     
+     if(hscrollbar.visible()){ hh -= hscrollbar.h(); }
+     if(scrollbar.visible()){ ww -= scrollbar.w(); }
+     
+     if(X >= xx && Y >= yy && X < ww && Y < hh){
+      void *item = NULL;
+      if((item = find_item(Fl::event_y())) != NULL){
+       Fl_Widget::take_focus();
+       // FIXME : Do we need calling callbacks or not ?
+       Fl_Browser_::select(item, !item_selected(item), 1);
+       return 0;
+      }
+     }
+    }
+    break;
+   }
+   default: break;
+  }
+  
+  return Fl_Browser::handle(e);
+ }
+};
+
+#endif
+
+//
+// End of "$Id: Fl_Browser.H 9682 2012-09-17 22:44:54Z greg.ercolano $".
+//
diff -U 3 -H -d -r -N -- FL/Makefile FL/Makefile
--- FL/Makefile	1970-01-01 05:00:00.000000000 +0500
+++ FL/Makefile	2013-12-21 12:10:19.815976164 +0600
@@ -0,0 +1,54 @@
+#
+# "$Id: Makefile.in 8864 2011-07-19 04:49:30Z greg.ercolano $"
+#
+# Header makefile for the Fast Light Tool Kit (FLTK).
+#
+# Copyright 1998-2010 by Bill Spitzak and others.
+#
+# This library is free software. Distribution and use rights are outlined in
+# the file "COPYING" which should have been included with this file.  If this
+# file is missing or damaged, see the license at:
+#
+#      http://www.fltk.org/COPYING.php
+#
+# Please report all bugs and problems on the following page:
+#
+#      http://www.fltk.org/str.php
+#
+
+include ../makeinclude
+
+all:
+
+clean:
+
+depend:
+
+install:
+	echo "Installing include files in $(DESTDIR)$(includedir)..."
+	$(RMDIR) $(DESTDIR)$(includedir)/FL
+	$(INSTALL_DIR) $(DESTDIR)$(includedir)/FL
+	for file in *.[hH]; do \
+		$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/FL; \
+	done
+#	cd $(DESTDIR)$(includedir)/FL;\
+#	for file in *.H; do\
+#		$(RM) "`basename $$file H`h";\
+#		$(LN) $$file "`basename $$file H`h";\
+#	done
+#	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
+#	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.H
+#	$(RM) $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
+#	$(LN) Fl_File_Chooser.H $(DESTDIR)$(includedir)/FL/fl_file_chooser.h
+#	$(RM) $(DESTDIR)$(includedir)/Fl
+#	$(LN) FL $(DESTDIR)$(includedir)/Fl
+
+uninstall:
+	echo "Uninstalling include files..."
+	$(RMDIR) $(DESTDIR)$(includedir)/FL
+#	$(RM) $(DESTDIR)$(includedir)/Fl
+
+
+#
+# End of "$Id: Makefile.in 8864 2011-07-19 04:49:30Z greg.ercolano $".
+#
diff -U 3 -H -d -r -N -- fluid/Fl_Menu_Type.cxx fluid/Fl_Menu_Type.cxx
--- fluid/Fl_Menu_Type.cxx	2011-09-29 02:43:05.000000000 +0600
+++ fluid/Fl_Menu_Type.cxx	2013-12-21 09:51:00.333448120 +0600
@@ -541,7 +541,7 @@
 
 Fl_Type* Fl_Input_Choice_Type::click_test(int, int) {
   if (selected) return 0; // let user move the widget
-  Fl_Menu_* w = ((Fl_Input_Choice*)o)->menubutton();
+  Fl_Menu_* w = (Fl_Menu_*)o;
   if (!menusize) return 0;
   const Fl_Menu_Item* save = w->mvalue();
   w->value((Fl_Menu_Item*)0);
diff -U 3 -H -d -r -N -- fluid/Fl_Widget_Type.cxx fluid/Fl_Widget_Type.cxx
--- fluid/Fl_Widget_Type.cxx	2011-09-29 02:43:05.000000000 +0600
+++ fluid/Fl_Widget_Type.cxx	2013-12-21 09:51:00.334448120 +0600
@@ -678,6 +678,14 @@
 {"GTK_THIN_DOWN_BOX",0,0,(void *)FL_GTK_THIN_DOWN_BOX},
 {"GTK_ROUND_UP_BOX",0,0,(void *)FL_GTK_ROUND_UP_BOX},
 {"GTK_ROUND_DOWN_BOX",0,0,(void *)FL_GTK_ROUND_DOWN_BOX},
+{"OXY_UP_BOX",0,0,(void *)FL_OXY_UP_BOX},
+{"OXY_DOWN_BOX",0,0,(void *)FL_OXY_DOWN_BOX},
+{"OXY_THIN_UP_BOX",0,0,(void *)FL_OXY_THIN_UP_BOX},
+{"OXY_THIN_DOWN_BOX",0,0,(void *)FL_OXY_THIN_DOWN_BOX},
+{"OXY_ROUND_UP_BOX",0,0,(void *)FL_OXY_ROUND_UP_BOX},
+{"OXY_ROUND_DOWN_BOX",0,0,(void *)FL_OXY_ROUND_DOWN_BOX},
+{"OXY_BUTTON_UP_BOX",0,0,(void *)FL_OXY_BUTTON_UP_BOX},
+{"OXY_BUTTON_DOWN_BOX",0,0,(void *)FL_OXY_BUTTON_DOWN_BOX},
 {0},
 {"frames",0,0,0,FL_SUBMENU},
 {"UP_FRAME",0,0,(void *)FL_UP_FRAME},
@@ -696,6 +704,10 @@
 {"GTK_DOWN_FRAME",0,0,(void *)FL_GTK_DOWN_FRAME},
 {"GTK_THIN_UP_FRAME",0,0,(void *)FL_GTK_THIN_UP_FRAME},
 {"GTK_THIN_DOWN_FRAME",0,0,(void *)FL_GTK_THIN_DOWN_FRAME},
+{"OXY_UP_FRAME",0,0,(void *)FL_OXY_UP_FRAME},
+{"OXY_DOWN_FRAME",0,0,(void *)FL_OXY_DOWN_FRAME},
+{"OXY_THIN_UP_FRAME",0,0,(void *)FL_OXY_THIN_UP_FRAME},
+{"OXY_THIN_DOWN_FRAME",0,0,(void *)FL_OXY_THIN_DOWN_FRAME},
 {0},
 {0}};
 
diff -U 3 -H -d -r -N -- fluid/alignment_panel.cxx fluid/alignment_panel.cxx
--- fluid/alignment_panel.cxx	2011-07-19 10:49:30.000000000 +0600
+++ fluid/alignment_panel.cxx	2013-12-21 09:51:00.336448120 +0600
@@ -153,6 +153,7 @@
  {"None", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {"Plastic", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {"GTK+", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Oxy", 0,  0, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
  {0,0,0,0,0,0,0,0,0}
 };
 
diff -U 3 -H -d -r -N -- fluid/alignment_panel.fl fluid/alignment_panel.fl
--- fluid/alignment_panel.fl	2011-07-19 10:49:30.000000000 +0600
+++ fluid/alignment_panel.fl	2013-12-21 09:51:00.337448120 +0600
@@ -187,6 +187,10 @@
         label {GTK+}
         xywh {10 10 35 25}
       }
+      MenuItem {} {
+        label {Oxy}
+        xywh {20 20 35 25}
+      }
     }
     Fl_Group {} {open
       xywh {116 43 220 126} labelfont 1 align 0
diff -U 3 -H -d -r -N -- fluid/fluid.cxx fluid/fluid.cxx
--- fluid/fluid.cxx	2012-04-05 11:12:30.000000000 +0600
+++ fluid/fluid.cxx	2013-12-21 09:51:00.337448120 +0600
@@ -1113,6 +1113,9 @@
     case 3 : // GTK+
       Fl::scheme("gtk+");
       break;
+    case 4 : // OXY
+      Fl::scheme("oxy");
+      break;
   }
 
   fluid_prefs.set("scheme", scheme_choice->value());
diff -U 3 -H -d -r -N -- src/Fl_Browser.cxx src/Fl_Browser.cxx
--- src/Fl_Browser.cxx	2012-07-24 10:37:22.000000000 +0600
+++ src/Fl_Browser.cxx	2013-12-21 09:51:00.338448120 +0600
@@ -361,6 +361,7 @@
 int Fl_Browser::item_height(void *item) const {
   FL_BLINE* l = (FL_BLINE*)item;
   if (l->flags & NOTDISPLAYED) return 0;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
 
   int hmax = 2; // use 2 to insure we don't return a zero!
 
@@ -368,6 +369,7 @@
     // For blank lines set the height to exactly 1 line!
     fl_font(textfont(), textsize());
     int hh = fl_height();
+    if (flag_oxy) hh += 2;
     if (hh > hmax) hmax = hh;
   } else {
     const int* i = column_widths();
@@ -398,6 +400,7 @@
       else str = NULL;
       if((!str && *ptr) || (str && ptr < str)) {
 	fl_font(font, tsize); int hh = fl_height();
+    if (flag_oxy) hh += 2;
 	if (hh > hmax) hmax = hh;
       }
       if (!str || !*str) break;
diff -U 3 -H -d -r -N -- src/Fl_Browser_.cxx src/Fl_Browser_.cxx
--- src/Fl_Browser_.cxx	2012-12-05 23:17:31.000000000 +0600
+++ src/Fl_Browser_.cxx	2013-12-21 10:39:20.997326133 +0600
@@ -394,22 +394,31 @@
   // if not a full redraw or if it is selected:
   void* l = top();
   int yy = -offset_;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
   for (; l && yy < H; l = item_next(l)) {
     int hh = item_height(l);
     if (hh <= 0) continue;
     if ((damage()&(FL_DAMAGE_SCROLL|FL_DAMAGE_ALL)) || l == redraw1 || l == redraw2) {
       if (item_selected(l)) {
-	fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
-	fl_rectf(X, yy+Y, W, hh);
+	if (flag_oxy) draw_box(FL_UP_BOX, X, yy+Y, W, hh, selection_color());
+    else {
+     fl_color(active_r() ? selection_color() : fl_inactive(selection_color()));
+     fl_rectf(X, yy+Y, W, hh);
+    }
+    
       } else if (!(damage()&FL_DAMAGE_ALL)) {
 	fl_push_clip(X, yy+Y, W, hh);
 	draw_box(box() ? box() : FL_DOWN_BOX, x(), y(), w(), h(), color());
 	fl_pop_clip();
       }
-      item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
+      
+      fl_push_clip(X+4, yy+Y, W-8, hh);
+      item_draw(l, X-hposition_+4, yy+Y, W+hposition_-8, hh);
+      fl_pop_clip();
+      
       if (l == selection_ && Fl::focus() == this) {
-	draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color());
-	draw_focus(FL_NO_BOX, X, yy+Y, W+1, hh+1);
+	if (!flag_oxy) draw_box(FL_BORDER_FRAME, X, yy+Y, W, hh, color()); // this is border for selection rect
+	draw_focus(flag_oxy?FL_UP_BOX:FL_NO_BOX, X, yy+Y, flag_oxy?W:W+1, hh+1);
       }
       int ww = item_width(l);
       if (ww > max_width) {max_width = ww; max_width_item = l;}
diff -U 3 -H -d -r -N -- src/Fl_Calendar.cxx src/Fl_Calendar.cxx
--- src/Fl_Calendar.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/Fl_Calendar.cxx	2013-12-21 13:34:05.332764818 +0600
@@ -0,0 +1,1369 @@
+// Fl_Calendar (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Calendar_cxx
+#define Fl_Calendar_cxx
+
+#include <FL/Fl_Calendar.H>
+#include <FL/fl_draw.H>
+#include <FL/Fl_Button.H>
+
+// g++ -I/usr/local/include/FL -I../ -c Fl_Calendar.cxx
+
+
+
+/// +++++++++++++++++TIME FUNCTIONS+++++++++++++++++++++
+
+// args of next function taking from `struct tm' (see `get_nweek_gm')
+int Fl_Calendar::get_nweek(int year, int yday, int mon, int mday, int wday){
+ // http://en.wikipedia.org/wiki/ISO_week_date#Calculating_the_week_number_of_a_given_date
+ if(mon < 0 || mon > 11){ return -1; }
+ 
+ year += 1900;
+ 
+ if(wday == 0){ wday = 7; } // needs format from 1 to 7 (Monday ... Sunday)
+ 
+ int table_cnw[12] = {0,31,59,90,120,151,181,212,243,273,304,334};
+ 
+ int d = table_cnw[mon] + mday + 10 - wday;
+ if(mon > 1 && ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0))){ d++; }
+ 
+ return d/7;
+}
+
+
+
+// get number of week
+int Fl_Calendar::get_nweek_gm(const time_t target){
+struct tm *t=gmtime(&target);
+if(t == NULL){ return 0; }
+
+return get_nweek(t->tm_year, t->tm_yday, t->tm_mon, t->tm_mday, t->tm_wday);
+}
+
+int Fl_Calendar::get_nweek_local(const time_t target){
+struct tm *t=localtime(&target);
+if(t == NULL){ return 0; }
+
+return get_nweek(t->tm_year, t->tm_yday, t->tm_mon, t->tm_mday, t->tm_wday);
+}
+
+int Fl_Calendar::get_nweek(struct tm *t){
+if(t == NULL){ return 0; }
+
+return get_nweek(t->tm_year, t->tm_yday, t->tm_mon, t->tm_mday, t->tm_wday);
+}
+
+// for detect leap year [example: 2013]
+int Fl_Calendar::is_leap_year (int year){
+ return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0);
+}
+
+
+// get number of days in month  `mon[0..11]'
+int Fl_Calendar::get_ndays(int year, int mon){
+ year += 1900;
+ int ret = 0;
+ if(mon >= 0 && mon < 12){
+  if(mon <= 6){
+   if(mon == 1){ ret =  ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0))?29:28; }
+   else {
+    if(mon%2){ ret = 30; }
+    else { ret = 31; }
+   }
+  }
+  else{
+   if(mon%2){ ret = 31; }
+   else { ret = 30; }
+  }
+ }
+ return ret;
+}
+
+
+// get number of days in previous month for `mon'
+int Fl_Calendar::get_ndays_pm(int year, int mon){
+ year += 1900;
+ int ret = 0;
+ 
+ mon--;
+ if(mon < 0){
+  mon = 11;
+  year--;
+ }
+ 
+  if(mon <= 6){
+   if(mon == 1){ ret =  ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0))?29:28; }
+   else {
+    if(mon%2){ ret = 30; }
+    else { ret = 31; }
+   }
+  }
+  else{
+   if(mon%2){ ret = 31; }
+   else { ret = 30; }
+  }
+ return ret;
+}
+
+
+// get number of days in next month for `mon'
+int Fl_Calendar::get_ndays_nm(int year, int mon){
+ year += 1900;
+ int ret = 0;
+ 
+ mon++;
+ if(mon > 11){ mon = 0; year++; }
+ 
+  if(mon <= 6){
+   if(mon == 1){ ret =  ((year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0))?29:28; }
+   else {
+    if(mon%2){ ret = 30; }
+    else { ret = 31; }
+   }
+  }
+  else{
+   if(mon%2){ ret = 31; }
+   else { ret = 30; }
+  }
+ return ret;
+}
+
+
+// returns day of week [0-6] where 0 is Sunday, 1 is Monday, ... 6 is Saturday .
+// args for function taking from `struct tm' 
+int Fl_Calendar::get_wday(int year, int mon, int mday){
+ //http://www.faqs.org/faqs/calendars/faq/part1/index.html  - 2.6
+ mon++; // months: needs format from 1 to 12
+ int a = (14 - mon) / 12;
+ int y = year+1900 - a;
+ int m = mon + 12*a - 2;
+ int d = (mday + y + y/4 - y/100 + y/400 + (31*m)/12) % 7; // gregorian
+ //int d = (5 + mday + y + y/4 + (31*m)/12) % 7; // Julian
+ return d;
+}
+
+
+
+int Fl_Calendar::get_yday(int year, int mon, int mday){
+ int ret = 0;
+ int ndays = get_ndays(year, mon);
+ 
+ if(mday < 1 || mday > ndays){ return -1; }
+ if(mon < 0 || mon > 11){ return -1; }
+ 
+ for(int _i = 0; _i < mon; _i++){ ret += get_ndays(year, _i); }
+ ret += mday;
+ 
+ return ret;
+}
+
+
+
+#ifdef _WIN32
+time_t Fl_Calendar::timegm(struct tm *tm){
+    time_t ret;
+    char *tz;
+    char tmp[100];
+ 
+    tz = getenv("TZ");
+    putenv ("TZ=");
+    tzset();
+    ret = mktime(tm);
+    if (tz)
+    {
+       snprintf (tmp, 100, "TZ=%s", tz);
+       putenv (tmp);
+    }
+    tzset();
+    return ret;
+}
+
+time_t Fl_Calendar::timelocal(struct tm *tm){ return mktime(tm); }
+
+
+const char * my_weekdays[] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"};
+const char * my_monthnames[] = { "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"};
+
+static bool my_atoi(const char * & s, int & result, int low, int high, int offset){
+ bool ret = false;
+ char * end;
+ unsigned long num = strtoul(s, & end, 10);
+ if (num >= (unsigned long)low && num <= (unsigned long)high){
+  result = (int)(num + offset);
+  s = end;
+  ret = true;
+  }
+ return ret;
+}
+
+static char * strptime(const char *s, const char *format, struct tm *tm){
+ bool ret = true;
+ while(ret && *format && *s){
+  switch(*format){
+   case '%':{
+    ++format;
+    switch(*format){
+     case 'a':
+     case 'A':
+     tm->tm_wday = -1;
+     ret = false;
+     for(size_t i = 0; i < 7; ++ i){
+      size_t len = strlen(my_weekdays[i]);
+      if(!strncasecmp(my_weekdays[i], s, len)){
+       tm->tm_wday = i;
+       s += len;
+       ret = true;
+       break;
+      }
+      else if(!strncasecmp(my_weekdays[i], s, 3)){
+       tm->tm_wday = i;
+       s += 3;
+       ret = true;
+       break;
+      }
+     }
+     break;
+     case 'b':
+     case 'B':
+     case 'h':
+     tm->tm_mon = -1;
+     ret = false;
+     for(size_t i = 0; i < 12; ++ i){
+      size_t len = strlen(my_monthnames[i]);
+      if(!strncasecmp(my_monthnames[i], s, len)){
+       tm->tm_mon = i;
+       s += len;
+       ret = true;
+       break;
+      }
+      else if(!strncasecmp(my_monthnames[i], s, 3)){
+       tm->tm_mon = i;
+       s += 3;
+       ret = true;
+       break;
+      }
+     }
+     break;
+     case 'd':
+     case 'e':
+     ret = my_atoi(s, tm->tm_mday, 1, 31, -1);
+     break;
+     case 'D':{
+      const char * s_save = s;
+      ret = my_atoi(s, tm->tm_mon, 1, 12, -1);
+      if(ret && *s == '/'){
+       ++ s;
+       ret = my_atoi(s, tm->tm_mday, 1, 31, -1);
+       if(ret && *s == '/'){
+        ++ s;
+        ret = my_atoi(s, tm->tm_year, 0, 99, 0);
+        if(ret && tm->tm_year < 69) tm->tm_year += 100;
+       }
+      }
+      if(!ret) s = s_save;
+     }
+     break;
+     case 'H':
+     ret = my_atoi(s, tm->tm_hour, 0, 23, 0);
+     break;
+     case 'I':
+     ret = my_atoi(s, tm->tm_hour, 1, 12, 0);
+     break;
+     case 'j':
+     ret = my_atoi(s, tm->tm_yday, 1, 366, -1);
+     break;
+     case 'm':
+     ret = my_atoi(s, tm->tm_mon, 1, 12, -1);
+     break;
+     case 'M':
+     ret = my_atoi(s, tm->tm_min, 0, 59, 0);
+     break;
+     case 'n':
+     case 't':
+     while (isspace((int)*s)) ++s;
+     break;
+     case 'p':
+     if(!strncasecmp(s, "am", 2)){
+      if(tm->tm_hour == 12) tm->tm_hour = 0;
+     }
+     else if(!strncasecmp(s, "pm", 2)){
+      if(tm->tm_hour < 12) tm->tm_hour += 12;
+     }
+     else ret = false;
+     break;
+     case 'r':{
+      const char * s_save = s;
+      ret = my_atoi(s, tm->tm_hour, 1, 12, 0);
+      if(ret && *s == ':'){
+       ++ s;
+       ret = my_atoi(s, tm->tm_min, 0, 59, 0);
+       if(ret && *s == ':'){
+        ++ s;
+        ret = my_atoi(s, tm->tm_sec, 0, 60, 0);
+        if(ret && isspace((int)*s)){
+         ++ s;
+         while(isspace((int)*s)) ++s;
+         if(!strncasecmp(s, "am", 2)){
+          if(tm->tm_hour == 12) tm->tm_hour = 0;
+         }
+         else if(!strncasecmp(s, "pm", 2)){
+          if(tm->tm_hour < 12) tm->tm_hour += 12;
+         }
+         else ret = false;
+        }
+       }
+      }
+      if(!ret) s = s_save;
+     }
+     break;
+     case 'R':{
+      const char * s_save = s;
+      ret = my_atoi(s, tm->tm_hour, 0, 23, 0);
+      if(ret && *s == ':'){
+       ++ s;
+       ret = my_atoi(s, tm->tm_min, 0, 59, 0);
+      }
+      if(!ret) s = s_save;
+     }
+     break;
+     case 'S':
+     ret = my_atoi(s, tm->tm_sec, 0, 60, 0);
+     break;
+     case 'T':{
+      const char * s_save = s;
+      ret = my_atoi(s, tm->tm_hour, 0, 23, 0);
+      if(ret && *s == ':'){
+       ++ s;
+       ret = my_atoi(s, tm->tm_min, 0, 59, 0);
+       if(ret && *s == ':'){
+        ++ s;
+        ret = my_atoi(s, tm->tm_sec, 0, 60, 0);
+       }
+      }
+      if(!ret) s = s_save;
+     }
+     break;
+     case 'w':
+     ret = my_atoi(s, tm->tm_wday, 0, 6, 0);
+     break;
+     case 'Y':
+     ret = my_atoi(s, tm->tm_year, 1900, 65535, -1900);
+     break;
+     case 'y':
+     ret = my_atoi(s, tm->tm_year, 0, 99, 0);
+     if(ret && tm->tm_year < 69) tm->tm_year += 100;
+     break;
+     case '%':
+     if(*s != '%') ret = false;
+     ++s;
+     break;
+     default: ret = false;
+    }
+   }
+   break;
+   case ' ':
+   case '\t':
+   case '\r':
+   case '\n':
+   case '\f':
+   case '\v':
+   while(isspace((int)*s)) ++ s;
+   break;
+   default:
+   if(*s != *format) ret = false;
+   else ++s;
+   break;
+  }
+  ++format;
+ }
+ return (ret?(char *)s:NULL);
+}
+#endif
+/// +++++++++++++++++TIME FUNCTIONS+++++++++++++++++++++
+
+
+
+int Fl_Calendar::normal_wday(int _i){
+ if(_i >= 0 && _i <= 6){
+  if(_i == 0){ _i = 6; }
+  else { _i--; }
+ } else { _i = 0; }
+ return _i;
+}
+
+
+int Fl_Calendar::base_wday(int _i){
+ if(_i >= 0 && _i <= 6){
+  if(_i == 6){ _i = 0; }
+  else { _i++; }
+ } else { _i = 0; }
+ return _i;
+}
+
+
+
+
+
+static const char table_mdays[33][3] = { {"0"},{"1"},{"2"},{"3"},{"4"},{"5"},{"6"},{"7"},{"8"},{"9"},{"10"},{"11"},{"12"},{"13"},{"14"},{"15"},{"16"},{"17"},{"18"},{"19"},{"20"},{"21"},{"22"},{"23"},{"24"},{"25"},{"26"},{"27"},{"28"},{"29"},{"30"},{"31"},{0} };
+
+static const char table_nweeks[55][3] = { {"00"},{"01"},{"02"},{"03"},{"04"},{"05"},{"06"},{"07"},{"08"},{"09"},{"10"},{"11"},{"12"},{"13"},{"14"},{"15"},{"16"},{"17"},{"18"},{"19"},{"20"},{"21"},{"22"},{"23"},{"24"},{"25"},{"26"},{"27"},{"28"},{"29"},{"30"},{"31"},{"32"},{"33"},{"34"},{"35"},{"36"},{"37"},{"38"},{"39"},{"40"},{"41"},{"42"},{"43"},{"44"},{"45"},{"46"},{"47"},{"48"},{"49"},{"50"},{"51"},{"52"},{"53"},{0} };
+
+
+
+#define CLDR_COLS 8
+#define CLDR_ROWS 7
+#define H_ROW 32
+#define H_BOX 24
+#define W_BOX 115
+#define SIDE_OFFSET 4
+
+#define W_BTN 32
+#define H_BTN 20
+
+
+
+Fl_Calendar::Fl_Calendar(int X,int Y,int W,int H):Fl_Menu_Window(X,Y,W,H,0){
+  Fl_Menu_Window::resize(X,Y,calc_width(), calc_height());
+  Fl_Menu_Window::type(FL_DOUBLE_WINDOW);
+  //Fl_Menu_Window::when(FL_WHEN_CHANGED);
+  Fl_Menu_Window::callback((Fl_Callback*)0, 0);
+  
+  _year = _mon = _mday = 0;
+  memset(_sdays, 0, 42);
+  
+  _sel = NULL;
+  memset(&_tm, 0, sizeof(_tm));
+  
+  _ts = time(NULL);
+  memcpy(&_tm, localtime(&_ts), sizeof(_tm));
+  
+  _year = _tm.tm_year;
+  _mon = _tm.tm_mon;
+  _mday = _tm.tm_mday;
+  
+  int xx = SIDE_OFFSET, yy = SIDE_OFFSET, ww = W_BTN, hh = H_BTN;
+  
+  int off_y = (H_ROW-H_BOX)/2, off_x = 0;
+  
+  label(_prefs._header);
+  
+  off_x = (H_BOX+1);
+  _header = new Fl_Box(SIDE_OFFSET, yy, w()-SIDE_OFFSET*2, H_ROW, _prefs._header);
+  _header->labelcolor(_prefs._headercolor[1]);
+  _header->labelsize(_prefs._size_fonts[0]);
+  _header->labelfont(_prefs._fonts[0]);
+  _header->box(FL_THIN_UP_FRAME);
+  
+  
+  _icon = new Fl_Box(xx*2, yy+off_y, H_BOX, H_BOX, 0);
+  _icon->box(FL_NO_BOX); // FL_THIN_UP_FRAME
+  //_icon->down_box(FL_THIN_UP_BOX);
+  _icon->image(&_prefs._icon);
+  _icon->deimage(&_prefs._deicon);
+  
+  
+  yy += H_ROW+1; off_y = (H_ROW-H_BOX)/2; off_x = 0;
+  
+  _left_btn = new Fl_Nav_Repeat_Button(xx, yy+off_y, H_BOX, H_BOX);
+  _left_btn->align(FL_ALIGN_LEFT); _left_btn->box(FL_UP_BOX);
+  _left_btn->callback((Fl_Callback *)month_cb2, this);
+  
+  off_x = w()-SIDE_OFFSET-H_BOX;
+  _right_btn = new Fl_Nav_Repeat_Button(off_x, yy+off_y, H_BOX, H_BOX);
+  _right_btn->align(FL_ALIGN_RIGHT); _right_btn->box(FL_UP_BOX);
+  _right_btn->callback((Fl_Callback *)month_cb2, this);
+  
+  off_x = xx+H_BOX+10;
+  _months = new Fl_Choice(off_x, yy+off_y, W_BOX, H_BOX, 0);
+  _months->when(FL_WHEN_RELEASE);
+  _months->down_box(FL_THIN_DOWN_BOX);
+  _months->labelcolor(_prefs._monthscolor[1]);
+  _months->labelsize(_prefs._size_fonts[1]);
+  _months->labelfont(_prefs._fonts[1]);
+  _months->visible_focus(0);
+  
+  for(int _i = 0; _i < 12; _i++){
+   _months->add(_prefs._months[_i]);
+   Fl_Menu_Item &item = (Fl_Menu_Item &)(_months->menu()[_i]);
+   item.labelcolor(_prefs._monthscolor[1]);
+   item.labelsize(_prefs._size_fonts[1]);
+   item.labelfont(_prefs._fonts[1]);
+  }
+  _months->value(_mon);
+  _months->callback((Fl_Callback *)month_cb, this);
+  
+  off_x += W_BOX+10; ww = (w()-SIDE_OFFSET-H_BOX-10)-off_x;
+  
+  _years = new Fl_Spinner(off_x, yy+off_y, ww, H_BOX);
+  _years->range(0.0, 3000.0);
+  _years->value(_year+1900);
+  _years->labelcolor(_prefs._monthscolor[1]);
+  _years->labelsize(_prefs._size_fonts[1]);
+  _years->labelfont(_prefs._fonts[1]);
+  _years->callback((Fl_Callback *)year_cb, this);
+  _years->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
+  
+  xx = SIDE_OFFSET+W_BTN+2; yy += H_ROW+1; ww = W_BTN; off_y = yy;
+  char str[32]; memset(str, 0, 32);
+  
+  for(int _i = 0; _i < 7; _i++){
+   _nmdays[_i] = new Fl_Box(xx, yy, ww, hh, 0);
+   _nmdays[_i]->label(_prefs._days[_i]);
+   _nmdays[_i]->visible_focus(0);
+   _nmdays[_i]->box(FL_FLAT_BOX);
+   _nmdays[_i]->labelcolor(_prefs._dayscolor[1]);
+   _nmdays[_i]->labelsize(_prefs._size_fonts[1]);
+   _nmdays[_i]->labelfont(_prefs._fonts[1]);
+   xx += W_BTN+1;
+  }
+  
+  xx = SIDE_OFFSET; yy += H_BTN+1;
+  
+  for(int _i = 0; _i < 6; _i++){
+   _nweeks[_i] = new Fl_Box(xx, yy, ww, hh, 0);
+   //_nweeks[_i]->copy_label(table_nweeks[_i+1]);
+   _nweeks[_i]->visible_focus(0);
+   _nweeks[_i]->box(FL_FLAT_BOX);
+   _nweeks[_i]->labelcolor(_prefs._dayscolor[0]);
+   _nweeks[_i]->labelsize(_prefs._size_fonts[2]);
+   _nweeks[_i]->labelfont(_prefs._fonts[2]);
+   yy += H_BTN+1;
+  }
+  
+  
+  xx = SIDE_OFFSET+W_BTN+2; yy = off_y + H_BTN+1;
+  int nweek = get_nweek(_tm.tm_year, _tm.tm_yday, _tm.tm_mon, 1, _tm.tm_wday);
+  
+  int wday = normal_wday(get_wday(_tm.tm_year, _tm.tm_mon, 1));
+  int prev_ndays = get_ndays_pm(_tm.tm_year, _tm.tm_mon);
+  
+  int n_firstpday = prev_ndays-(wday-1);
+  int off_firstday = wday;
+  int off_lastday = off_firstday+get_ndays(_tm.tm_year, _tm.tm_mon);
+  
+  
+  for(int _i = 0, _d = 0, _wd = 0, _nw = 0; _i < 42; _i++, _d++){
+   
+   _days[_i] = new Fl_Button(xx, yy, W_BTN, H_BTN, 0);
+   //_days[_i]->when(FL_WHEN_ENTER_KEY);
+   ///sprintf(str, "%d", _i+1); _days[_i]->copy_label(str);
+   _days[_i]->type(FL_TOGGLE_BUTTON);
+   _days[_i]->visible_focus(0);
+   _days[_i]->box(FL_THIN_UP_BOX);
+   _days[_i]->down_box(FL_DOWN_FRAME);
+   //_days[_i]->labelcolor(_prefs._dayscolor[1]);
+   _days[_i]->selection_color(_prefs._dayscolor[2]);
+   _days[_i]->labelsize(_prefs._size_fonts[2]);
+   _days[_i]->labelfont(_prefs._fonts[2]);
+   
+   
+   if(!(_i%7)){ // first day of week
+    if(nweek >= 53){ nweek = 1; }
+    else if(nweek < 1){ nweek = 52; }
+    _nweeks[_nw]->label(table_nweeks[nweek]);
+    _nw++; nweek++;
+   }
+   
+   
+   if(_i < off_firstday){ /// days from previous month
+    if(_i == 0){ _d = n_firstpday; }
+    _sdays[_i] = -1;
+    _days[_i]->labelcolor(_prefs._dayscolor[0]);
+    _days[_i]->label(table_mdays[_d]);
+   }
+   
+   else if(_i >= off_lastday){ /// days from next month
+    _sdays[_i] = 1;
+    _days[_i]->labelcolor(_prefs._dayscolor[0]);
+    _days[_i]->label(table_mdays[_d]);
+   }
+   
+   else { /// days from current month
+    if(_i == off_firstday){ _d = 1; }
+    _sdays[_i] = 0;
+    _days[_i]->labelcolor(_prefs._dayscolor[1]);
+    _days[_i]->label(table_mdays[_d]);
+    if(_mday == _d && _mon == _months->value() && _year == (int(_years->value())-1900)){ // select current day
+     _days[_i]->down_box(FL_DOWN_BOX);
+     _days[_i]->value(1);
+     _sel = _days[_i];
+    }
+    if(_i == (off_lastday-1)){ _d = 0; }
+   }
+   
+   
+   
+   
+   if(_wd == 6){ _wd = 0; yy += H_BTN+1; xx = SIDE_OFFSET+W_BTN+2; }
+   else { _wd++; xx += W_BTN+1; }
+  }
+  
+  
+  xx = SIDE_OFFSET; off_x = 0; off_y = (H_ROW-H_BOX)/2-1;
+  
+  _iconupdate = new Fl_Button(xx+off_x, yy+off_y, H_BOX, H_BOX, 0);
+  _iconupdate->tooltip(_prefs._icontooltips[0]);
+  _iconupdate->visible_focus(0);
+  _iconupdate->box(FL_UP_BOX);
+  _iconupdate->down_box(FL_THIN_DOWN_BOX);
+  _iconupdate->image(&_prefs._iconupdate);
+  _iconupdate->deimage(&_prefs._deiconupdate);
+  _iconupdate->callback((Fl_Callback *)button_cb, this);
+  _iconupdate->when(FL_WHEN_RELEASE);
+  
+  xx += W_BTN+2;
+  
+  _iconreset = new Fl_Button(xx+off_x, yy+off_y, H_BOX, H_BOX, 0);
+  _iconreset->tooltip(_prefs._icontooltips[1]);
+  _iconreset->visible_focus(0);
+  _iconreset->box(FL_UP_BOX);
+  _iconreset->down_box(FL_THIN_DOWN_BOX);
+  _iconreset->image(&_prefs._iconreset);
+  _iconreset->deimage(&_prefs._deiconreset);
+  _iconreset->callback((Fl_Callback *)button_cb, this);
+  _iconreset->when(FL_WHEN_RELEASE);
+  
+  xx += H_BOX+9; ww = _years->w()-_years->w()/3;
+  
+  _weeks = new Fl_Spinner(xx, yy+off_y, ww, H_BOX);
+  _weeks->format("%02g");
+  _weeks->range(1.0, 52.0);
+  _weeks->labelcolor(_prefs._monthscolor[1]);
+  _weeks->labelsize(_prefs._size_fonts[1]);
+  _weeks->labelfont(_prefs._fonts[1]);
+  nweek = get_nweek(_tm.tm_year, _tm.tm_yday, _tm.tm_mon, _tm.tm_mday, _tm.tm_wday);
+  _weeks->value(nweek);
+  _weeks->callback((Fl_Callback *)week_cb, this);
+  _weeks->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
+  
+  
+  xx += _weeks->w()+10;
+  _clocks = new Fl_Clock_Spinner(xx, yy+off_y, _years->w(), H_BOX);
+  _clocks->labelcolor(_prefs._monthscolor[1]);
+  _clocks->labelsize(_prefs._size_fonts[1]);
+  _clocks->labelfont(_prefs._fonts[1]);
+  _clocks->set_values(_tm.tm_hour, _tm.tm_min);
+  _clocks->callback((Fl_Callback *)clock_cb, this);
+  _clocks->when(FL_WHEN_RELEASE|FL_WHEN_ENTER_KEY);
+  
+  xx = w()-SIDE_OFFSET-H_BOX*2-10;
+  _iconaccept = new Fl_Button(xx, yy+off_y, H_BOX, H_BOX, 0);
+  _iconaccept->tooltip(_prefs._icontooltips[2]);
+  _iconaccept->visible_focus(0);
+  _iconaccept->box(FL_UP_BOX);
+  _iconaccept->down_box(FL_THIN_DOWN_BOX);
+  _iconaccept->image(&_prefs._iconaccept);
+  _iconaccept->deimage(&_prefs._deiconaccept);
+  _iconaccept->callback((Fl_Callback *)button_cb, this);
+  _iconaccept->when(FL_WHEN_RELEASE);
+  
+  xx += H_BOX+10;
+  _iconcancel = new Fl_Button(xx, yy+off_y, H_BOX, H_BOX, 0);
+  _iconcancel->tooltip(_prefs._icontooltips[3]);
+  _iconcancel->visible_focus(0);
+  _iconcancel->box(FL_UP_BOX);
+  _iconcancel->down_box(FL_THIN_DOWN_BOX);
+  _iconcancel->image(&_prefs._iconcancel);
+  _iconcancel->deimage(&_prefs._deiconcancel);
+  _iconcancel->callback((Fl_Callback *)button_cb, this);
+  _iconcancel->when(FL_WHEN_RELEASE);
+  if(parent() != NULL){ _iconcancel->deactivate(); }
+  
+  end();
+  //set_modal();
+  //border(0);
+  //set_prefs(&_prefs);
+  box(FL_THIN_UP_BOX);
+  color(fl_lighter(FL_BACKGROUND_COLOR));
+  
+  _cach = true;
+  _rdo = false;
+  
+  
+  
+  
+ }
+
+
+
+
+
+
+void Fl_Calendar::set(int mday, int mon, int year, int hour, int min, int sec/*, bool chs*/){
+ year -= 1900; // correct with the tm structure
+ bool upd = false;
+ int ndays = 0;
+ 
+//  int o_year = _tm.tm_year;
+//  int o_mon = _tm.tm_mon;
+//  int o_mday = _tm.tm_mday;
+//  int o_yday = _tm.tm_yday;
+//  int o_wday = _tm.tm_wday;
+ 
+ 
+ // changed year ?
+ if((year+1900) != -1 && year != _tm.tm_year){
+  _tm.tm_year = year;
+  _years->value(year+1900);
+  upd = true;
+ }
+ 
+ if(mon < -1){ mon = 0; }
+ else if(mon > 11){ mon = 11; }
+ if(mon != -1 && mon != _tm.tm_mon){
+  _tm.tm_mon = mon;
+  _months->value(mon);
+  upd = true;
+ }
+ 
+ ndays = get_ndays(_tm.tm_year, _tm.tm_mon);
+ 
+ if(mday < -1){ mday = 1; }
+ else if(mday > ndays){ mday = ndays; }
+ if(mday != -1 && mday != _tm.tm_mday){
+  _tm.tm_mday = mday;
+  upd = true;
+ } else if(_tm.tm_mday > ndays){
+  _tm.tm_mday = ndays;
+  upd = true;
+ }
+ 
+ if(hour < -1){ hour = 0; } else if(hour > 23){ hour = 23; }
+ if(min < -1){ min = 0; } else if(min > 59){ min = 59; }
+ if(sec < -1){ sec = 0; } else if(sec > 59){ sec = 59; }
+ 
+ if(sec != -1 && sec != _tm.tm_sec){ _tm.tm_sec = sec; }
+ 
+ 
+ if(hour != -1 && hour != _tm.tm_hour){
+  _tm.tm_hour = hour;
+  _clocks->hours(hour);
+  
+  if(min < -1){ min = 0; }
+ else if(min > 59){ min = 59; }
+ if(min != -1 && min != _tm.tm_min){
+  _tm.tm_min = min;
+  _clocks->minutes(min);
+ }
+ 
+ if(!upd){ /*_clocks->redraw();*/ return; }
+ }
+ 
+ 
+ else if(min != -1 && min != _tm.tm_min){
+  _tm.tm_min = min;
+  _clocks->minutes(min);
+  if(!upd){ /*_clocks->redraw();*/ return; }
+ }
+ 
+ if(!upd){ return; }
+ 
+ _tm.tm_yday = get_yday(_tm.tm_year, _tm.tm_mon, _tm.tm_mday);
+ _tm.tm_wday = get_wday(_tm.tm_year, _tm.tm_mon, _tm.tm_mday);
+ 
+ int wday = get_wday(_tm.tm_year, _tm.tm_mon, 1);
+ int nweek = get_nweek(_tm.tm_year, _tm.tm_yday, _tm.tm_mon, 1, wday);
+ wday = normal_wday(wday);
+ int prev_ndays = get_ndays_pm(_tm.tm_year, _tm.tm_mon);
+ 
+ int n_firstpday = prev_ndays-(wday-1); // number of last month which is beginning in first button of days
+ int off_firstday = wday; // offset for first number of current month in the array's _days[42]
+ int off_lastday = off_firstday+ndays; // offset for first day of next month
+ 
+ 
+ // if first  button of days has label 1 needs to shift it on 7 elements to forward
+ if(off_firstday == 0){
+  //printf("SHIFT: 7>>\n");
+  n_firstpday -= 7;
+  off_firstday += 7;
+  off_lastday += 7;
+  nweek--;
+ } else if(off_lastday == 42){
+  //printf("SHIFT: <<7\n");
+  n_firstpday += 7;
+  off_firstday -= 7;
+  off_lastday -= 7;
+  nweek++;
+ }
+ 
+ 
+ int sel_omday = -1;
+ sel_omday = _tm.tm_mday;
+ 
+//  // fixing old selected day
+//  if(!chs){ for(int _i = 0; _i < 42; _i++){
+//   if(_days[_i]->value()){
+//    if(_days[_i]->down_box() == FL_DOWN_BOX){
+//     if(sel_omday == -1){ sel_omday = strtol(_days[_i]->label(), NULL, 10); }
+//    } else { sel_omday = strtol(_days[_i]->label(), NULL, 10); }
+//   }
+//  } } else { sel_omday = _tm.tm_mday; }
+ 
+ 
+ _sel = NULL;
+ 
+ int py = _tm.tm_year;
+ int pm = _tm.tm_mon-1; if(pm < 0){ pm = 11; py--; }
+ 
+ int ny = _tm.tm_year;
+ int nm = _tm.tm_mon+1; if(nm > 11){ nm = 0; ny++; }
+ 
+ 
+  for(int _i = 0, _d = 0, _wd = 0, _nw = 0; _i < 42; _i++, _d++){
+   
+   _days[_i]->box(FL_THIN_UP_BOX);
+   _days[_i]->down_box(FL_THIN_DOWN_BOX);
+   //_days[_i]->down_box(FL_DOWN_FRAME);
+   _days[_i]->selection_color(_prefs._dayscolor[2]);
+   _days[_i]->value(0);
+   
+   if(!(_i%7)){ // first day of week
+    if(nweek >= 53){ nweek = 1; }
+    else if(nweek < 1){ nweek = 52; }
+    _nweeks[_nw]->label(table_nweeks[nweek]);
+    _nw++; nweek++;
+   }
+   
+   
+   if(_i < off_firstday){ /// days from previous month
+    if(_i == 0){ _d = n_firstpday; }
+    _sdays[_i] = -1;
+    _days[_i]->labelcolor(_prefs._dayscolor[0]);
+    _days[_i]->label(table_mdays[_d]);
+    if(_mday == _d && _mon == pm && _year == py){
+     _days[_i]->down_box(FL_DOWN_BOX); _days[_i]->value(1);
+    }
+   }
+   
+   else if(_i >= off_lastday){ /// days from next month
+    _sdays[_i] = 1;
+    _days[_i]->labelcolor(_prefs._dayscolor[0]);
+    _days[_i]->label(table_mdays[_d]);
+    if(_mday == _d && _mon == nm && _year == ny){
+     _days[_i]->down_box(FL_DOWN_BOX); _days[_i]->value(1);
+    }
+   }
+   
+   else { /// days from current month
+    if(_i == off_firstday){ _d = 1; }
+    _sdays[_i] = 0;
+    _days[_i]->labelcolor(_prefs._dayscolor[1]);
+    _days[_i]->label(table_mdays[_d]);
+    if(_mday == _d && _mon == _months->value() && _year == (int(_years->value())-1900)){ // select current day
+     _days[_i]->down_box(FL_DOWN_BOX); _days[_i]->value(1);
+     if(_sel == NULL){ _sel = _days[_i]; _weeks->value(nweek-1); }
+    } else if(_d == sel_omday){
+     _days[_i]->selection_color(fl_color_average(_prefs._dayscolor[2], FL_WHITE, 0.35));
+     _days[_i]->value(1);
+     _sel = _days[_i];
+     _weeks->value(nweek-1);
+    }
+    if(_i == (off_lastday-1)){ _d = 0; }
+   }
+   
+   if(_wd == 6){ _wd = 0; }
+   else { _wd++; }
+  }
+ 
+ 
+//  if(_sel != NULL && _sel->down_box() != FL_DOWN_BOX){
+//   int X=x()+_sel->x(), Y=y()+_sel->y(), W=_sel->w(), H=_sel->h();
+// //   fl_push_clip(X, Y, W, H);
+// //   fl_rectf(X+2, Y+2, W-4, H-4, fl_lighter(FL_BACKGROUND_COLOR));
+// //   fl_pop_clip();
+//   
+//   //damage_resize(x(), y(), w(), h());
+//   _sel->redraw_label();
+//   _sel->set_changed();
+//   set_changed();
+//  }
+ 
+ 
+}
+
+
+
+
+
+
+void Fl_Calendar::week_cb(Fl_Spinner* w, Fl_Calendar *a){
+  if(a->_sel == NULL){ return; }
+  int new_nweek = (int)a->_weeks->value();
+  int year = a->_years->value()-1900;
+  int mon = a->_months->value();
+  int mday = strtol(a->_sel->label(), NULL, 10);
+  int wday = get_wday(year, mon, mday);
+  int yday = get_yday(year, mon, mday);
+  int nweek = get_nweek(year, yday, mon, mday, wday);
+  int o_index = -1, tmp_i = -1;
+  int n_mday = -1;
+  for(int _i = 0; _i < 42; _i++){ if(a->_sel == a->_days[_i]){ o_index = _i; break; } }
+  if(o_index < 0){ return; }
+  
+  if(new_nweek != nweek && a->_sel->down_box() != FL_DOWN_BOX){ a->_sel->value(0); }
+  
+  // week down ?
+  if(new_nweek < nweek){
+   
+   // BUG : incorrect going sometime
+   if(nweek == 52 && new_nweek == 1){
+    goto L_UPWEEK;
+    //tmp_i = o_index+7;
+    //if(/*tmp_i >= 42 ||*/ (tmp_i < 42 && a->_sdays[tmp_i] == 0)){ goto L_UPWEEK; }
+   }
+   
+   L_DOWNWEEK:
+   if((tmp_i = o_index-7) >= 0 && tmp_i < 42){
+    n_mday = strtol(a->_days[tmp_i]->label(), NULL, 10);
+    
+    if(a->_sdays[tmp_i] == -1){ // day of previous month
+     mon--;
+     if(mon < 0){ mon = 11; year--; }
+    } else if(a->_sdays[tmp_i] == 1){ // day of next month
+     mon++;
+     if(mon > 11){ mon = 0; year++; }
+    }
+    a->_sel = a->_days[tmp_i];
+   } else { // tmp_i is less 0
+    n_mday = strtol(a->_days[0]->label(), NULL, 10);
+    
+    if(n_mday == 1){ n_mday = get_ndays_pm(year, mon)+1; }
+    n_mday += tmp_i;
+    
+    for(int _i = 41; _i >= 0; _i--){
+     if(strtol(a->_days[_i]->label(), NULL, 10) == n_mday){ tmp_i = _i; break; }
+    }
+    mon--;
+    if(mon < 0){ mon = 11; year--; }
+    a->_sel = a->_days[tmp_i];
+   }
+   
+   a->_sel->value(1);
+   a->set(n_mday, mon, year+1900);
+  } // end week down
+  
+  // week up ?
+  else if(new_nweek > nweek){
+   
+   // BUG : incorrect going sometime
+   if(nweek == 1 && new_nweek == 52){
+    goto L_DOWNWEEK;
+    //tmp_i = o_index-7;
+    //if(/*tmp_i < 0 ||*/ (tmp_i >= 0 && a->_sdays[tmp_i] == 0)){ goto L_DOWNWEEK; }
+   }
+   
+   L_UPWEEK:
+   if((tmp_i = o_index+7) < 42 && tmp_i >= 0){
+    
+    n_mday = strtol(a->_days[tmp_i]->label(), NULL, 10);
+    
+    if(a->_sdays[tmp_i] == -1){ // day of previous month
+     mon--;
+     if(mon < 0){ mon = 11; year--; }
+    } else if(a->_sdays[tmp_i] == 1){ // day of next month
+     mon++;
+     if(mon > 11){ mon = 0; year++; }
+    }
+    a->_sel = a->_days[tmp_i];
+    
+   } else { // tmp_i is more than 41
+    n_mday = strtol(a->_days[41]->label(), NULL, 10);
+    
+    if(n_mday == 1){ n_mday = get_ndays_nm(year, mon)-1; }
+    n_mday -= tmp_i;
+    
+    for(int _i = 0; _i < 42; _i++){
+     if(strtol(a->_days[_i]->label(), NULL, 10) == n_mday){ tmp_i = _i; break; }
+    }
+    mon++;
+    if(mon > 11){ mon = 0; year++; }
+    a->_sel = a->_days[tmp_i];
+   }
+   
+   a->_sel->value(1);
+   a->set(n_mday, mon, year+1900);
+   
+  } // end week up
+  
+ }
+
+ 
+ #include <FL/names.h>
+
+ void Fl_Calendar::button_cb(Fl_Button* w, Fl_Calendar *a){
+  
+  if(w == a->_iconupdate){
+   if(a->readonly()){ return ; }
+   a->_ts = time(NULL);
+   struct tm tm; memset(&tm, 0, sizeof(tm));
+   memcpy(&tm, localtime(&a->_ts), sizeof(tm));
+   a->_year=tm.tm_year; a->_mon=tm.tm_mon; a->_mday=tm.tm_mday;
+   a->set(tm.tm_mday, tm.tm_mon, tm.tm_year+1900, tm.tm_hour, tm.tm_min, tm.tm_sec);
+  }
+  
+  else if(w == a->_iconreset){
+   a->set(a->_mday, a->_mon, a->_year+1900);
+  }
+  
+  else if(w == a->_iconaccept){
+   if(a->readonly()){ return ; }
+   a->_year=a->_tm.tm_year; a->_mon=a->_tm.tm_mon; a->_mday=a->_tm.tm_mday;
+   int ny = a->_tm.tm_year+1900;
+   int nh = a->_tm.tm_hour, nm = a->_tm.tm_min, ns = a->_tm.tm_sec;
+   // HACK : needs for redrawing ...
+   a->_tm.tm_year=~a->_tm.tm_year;
+   a->_tm.tm_min=~a->_tm.tm_min;
+   a->set(a->_tm.tm_mday, a->_tm.tm_mon, ny, nh, nm, ns);
+   Fl_Widget *p=Fl::pushed();
+   if(a->callback() && a->shown() && (p == w || Fl::event() == FL_RELEASE)){ a->do_callback(); }
+  }
+  
+  else if(w == a->_iconcancel){
+   if(a->parent() != NULL){ a->_iconcancel->deactivate(); }
+   else { a->hide(); }
+  }
+  
+ }
+
+ 
+ 
+
+ void Fl_Calendar::clock_cb(Fl_Clock_Spinner* w, Fl_Calendar *a){
+  a->set(-1, -1, -1, a->_clocks->hours(), a->_clocks->minutes());
+ }
+ 
+ void Fl_Calendar::year_cb(Fl_Spinner* w, Fl_Calendar *a){
+  a->set(-1, -1, (int)a->_years->value());
+ }
+ 
+ void Fl_Calendar::month_cb(Fl_Choice* w, Fl_Calendar *a){
+  a->set(-1, a->_months->value(), -1);
+ }
+ 
+ 
+ void Fl_Calendar::month_cb2(Fl_Nav_Repeat_Button* w, Fl_Calendar *a){
+  int ny = (int)a->_years->value();
+  int nm = a->_months->value();
+  if(w == a->_left_btn){
+   nm--; if(nm < 0){ nm = 11; ny--; }
+   a->set(-1, nm, ny);
+  }
+  else if(w == a->_right_btn){
+   nm++; if(nm > 11){ nm = 0; ny++; }
+   a->set(-1, nm, ny);
+  }
+ }
+ 
+ 
+ 
+int Fl_Calendar::calc_width(){
+ int ret = SIDE_OFFSET*2; // 4px from left, and 4px from right space
+ ret += 8*(W_BTN+1);
+ 
+ return ret;
+}
+
+
+int Fl_Calendar::calc_height(){
+ int ret = SIDE_OFFSET*2; // 4px from top, and 4px from bottom space
+ 
+ ret += H_ROW; // header height
+ ret += H_ROW; // month_choice&year_spinner height
+ ret += 7*(H_BTN+1);
+ ret += H_ROW-3; // weeks_choice&hours_choice height
+ 
+ return ret;
+}
+
+
+
+
+void Fl_Calendar::set_now(){
+ _ts = time(NULL);
+ //struct tm tm; memset(&tm, 0, sizeof(_tm));
+ memcpy(&_tm, localtime(&_ts), sizeof(_tm));
+ //set(tm.tm_mday, tm.tm_mon, tm.tm_year+1900, tm.tm_hour, tm.tm_min, tm.tm_sec);
+ 
+ if(shown()){ _iconaccept->do_callback(); }
+}
+
+
+
+void Fl_Calendar::set(bool utc, time_t t){
+ _ts = t;
+ struct tm tm; memset(&tm, 0, sizeof(_tm));
+ if(utc){ memcpy(&tm, gmtime(&_ts), sizeof(_tm)); }
+ else { memcpy(&tm, localtime(&_ts), sizeof(_tm)); }
+ set(tm.tm_mday, tm.tm_mon, tm.tm_year+1900, tm.tm_hour, tm.tm_min, tm.tm_sec);
+ 
+ if(shown()){ _iconaccept->do_callback(); }
+}
+
+// cd ../ && rm src/Fl_Calendar.o && make
+void Fl_Calendar::set(const char* str, const char *fmt){
+ if(str == NULL || fmt == NULL){ return ; }
+ struct tm tm; memset(&tm, 0, sizeof(_tm));
+ if(strptime(str, fmt, &tm) != NULL){
+  _ts = timelocal(&tm);
+//   memcpy(&_tm, &tm, sizeof(_tm));
+//   _iconaccept->do_callback();
+  set(tm.tm_mday, tm.tm_mon, tm.tm_year+1900, tm.tm_hour, tm.tm_min, tm.tm_sec);
+  
+  if(shown()){ _iconaccept->do_callback(); }
+ }
+}
+
+
+void Fl_Calendar::set(struct tm *tm){
+ if(tm == NULL){ return ; }
+ _ts = timelocal(tm);
+ //struct tm tm; memset(&tm, 0, sizeof(_tm));
+ memcpy(&_tm, tm, sizeof(_tm));
+ set(tm->tm_mday, tm->tm_mon, tm->tm_year+1900, tm->tm_hour, tm->tm_min, tm->tm_sec);
+ 
+ if(shown()){ _iconaccept->do_callback(); }
+}
+
+
+
+time_t Fl_Calendar::get(bool utc, struct tm *tm){
+ time_t ret = -1;
+ 
+ if(utc){ ret = timegm(&_tm); }
+ else { ret = timelocal(&_tm); }
+ 
+ if(tm != NULL){ memcpy(tm, &_tm, sizeof(_tm)); }
+ 
+ return ret;
+}
+
+
+
+int Fl_Calendar::get(const char *fmt, char *out, int szout){
+ if(fmt == NULL || out == NULL || szout < 1){ return 0; }
+ return strftime(out, szout, fmt, &_tm);
+}
+
+
+
+void Fl_Calendar::readonly(bool f){
+ _rdo = f;
+ 
+ if(f){
+  _iconupdate->deactivate(); _iconupdate->redraw();
+  _iconaccept->deactivate(); _iconaccept->redraw();
+  _clocks->type(FL_READONLY_CLOCK_SPINNER); _clocks->redraw();
+  if(parent() != NULL){ _iconcancel->deactivate(); }
+ }
+ else {
+  _iconupdate->activate(); _iconupdate->redraw();
+  _iconaccept->activate(); _iconaccept->redraw();
+  _clocks->type(FL_NORMAL_CLOCK_SPINNER); _clocks->redraw();
+  if(parent() == NULL){ _iconcancel->activate(); }
+ }
+ 
+}
+
+
+
+
+
+
+void Fl_Calendar::activate(){
+ Fl_Menu_Window::activate();
+ Fl_Widget *const*a = array();
+ Fl_Widget* p;
+ for (int i = children(); i --; a ++){ p = (Fl_Widget*)*a; p->activate(); }
+ readonly(_rdo);
+}
+
+
+void Fl_Calendar::deactivate(){
+ Fl_Menu_Window::deactivate();
+ Fl_Widget *const*a = array();
+ Fl_Widget* p;
+ for (int i = children(); i --; a ++){ p = (Fl_Widget*)*a; p->deactivate(); }
+}
+
+
+
+
+
+
+void Fl_Calendar::preferences(Fl_Calendar_Prefs *p){
+ if(p == NULL){ p = &_prefs; }
+ 
+ color(fl_lighter(FL_BACKGROUND_COLOR));
+ label(p->_header);
+ 
+ // TODO : needs to end its copying
+ if(p != &_prefs){
+  memcpy(_prefs._headercolor, p->_headercolor, sizeof(_prefs._headercolor));
+  memcpy(_prefs._monthscolor, p->_monthscolor, sizeof(_prefs._monthscolor));
+  memcpy(_prefs._dayscolor, p->_dayscolor, sizeof(_prefs._dayscolor));
+  memcpy(_prefs._size_fonts, p->_size_fonts, sizeof(_prefs._size_fonts));
+  memcpy(_prefs._attr_fonts, p->_attr_fonts, sizeof(_prefs._attr_fonts));
+  memcpy(_prefs._fonts, p->_fonts, sizeof(_prefs._fonts));
+ }
+ 
+ _header->labelcolor(p->_headercolor[1]);
+ _header->labelsize(p->_size_fonts[0]);
+ _header->labelfont(p->_fonts[0]);
+ 
+ _icon->image(p->_icon);
+ _icon->deimage(p->_deicon);
+ 
+ _months->labelcolor(p->_monthscolor[1]);
+ _months->labelsize(p->_size_fonts[1]);
+ _months->labelfont(p->_fonts[1]);
+ 
+ int oi = _months->value();
+ _months->clear();
+ for(int _i = 0; _i < 12; _i++){
+  _months->add(p->_months[_i]);
+  Fl_Menu_Item &item = (Fl_Menu_Item &)(_months->menu()[_i]);
+  item.labelcolor(p->_monthscolor[1]);
+  item.labelsize(p->_size_fonts[1]);
+  item.labelfont(p->_fonts[1]);
+ }
+ _months->value(oi);
+ 
+ _years->labelcolor(p->_monthscolor[1]);
+ _years->labelsize(p->_size_fonts[1]);
+ _years->labelfont(p->_fonts[1]);
+ 
+ for(int _i = 0; _i < 7; _i++){
+  _nmdays[_i]->label(p->_days[_i]);
+  _nmdays[_i]->labelcolor(p->_dayscolor[1]);
+  _nmdays[_i]->labelsize(p->_size_fonts[1]);
+  _nmdays[_i]->labelfont(p->_fonts[1]);
+ }
+ 
+ for(int _i = 0; _i < 6; _i++){
+  _nweeks[_i]->labelcolor(p->_dayscolor[0]);
+  _nweeks[_i]->labelsize(p->_size_fonts[2]);
+  _nweeks[_i]->labelfont(p->_fonts[2]);
+ }
+ 
+ 
+ for(int _i = 0; _i < 42; _i++){
+  _days[_i]->selection_color(p->_dayscolor[2]);
+  _days[_i]->labelsize(p->_size_fonts[2]);
+  
+  if(_sdays[_i] == -1 || _sdays[_i] == 1){ _days[_i]->labelcolor(p->_dayscolor[0]); }
+  else { _days[_i]->labelcolor(p->_dayscolor[1]); }
+  
+ }
+ 
+ _iconupdate->tooltip(p->_icontooltips[0]);
+ _iconreset->tooltip(p->_icontooltips[1]);
+ _iconaccept->tooltip(p->_icontooltips[2]);
+ _iconcancel->tooltip(p->_icontooltips[3]);
+ 
+ if(parent() != NULL){ _iconcancel->deactivate(); }
+ else if(!_rdo){ _iconcancel->activate(); }
+ 
+ redraw();
+ 
+}
+
+
+
+
+
+
+
+ int Fl_Calendar::handle(int e){
+  if(!visible() || !active_r()){ return 0; }
+  static int x1=0, y1=0, xoff=0,yoff=0;
+  
+  bool is_parent = (parent() != NULL);
+  Fl_Widget *o = Fl::belowmouse();
+  int index = -1;
+  if(o != this && o != _header){
+   for(int _i = 0; _i < 42; _i++){ if(o == _days[_i]){ index = _i; break; } }
+  }
+  
+  switch(e){
+   case FL_PUSH:{
+    if(o != this && o != _header){
+     if(index != -1){
+      Fl_Button *day = _days[index];
+      int nm, ny, nd, wi, hour, min;
+      if(Fl::event_clicks()){ // double click
+       if((day->down_box() != FL_DOWN_BOX && !day->value()) || _rdo){ return 0; }
+       
+       if(shown()){ Fl::pushed(_iconaccept); _iconaccept->do_callback(); }
+       //char str[128]; get("%F %T", str, 128); printf("str: %s\n", str);
+       if(!is_parent &&_cach){ hide(); return 1; }
+       else { return 1; }
+      }
+      else{ // single click
+        if(day->down_box() != FL_DOWN_BOX && day->value()){ return 0; }
+        else {
+         if(_sel != NULL && _sel->down_box() != FL_DOWN_BOX){ _sel->value(0); }
+         
+         nm = (int)_months->value();
+         ny = (int)_years->value();
+         nd = strtol(day->label(), NULL, 10);
+         hour = _clocks->hours();
+         min = _clocks->minutes();
+         
+         if(_sdays[index] == -1){ // day of previous month
+          nm--; if(nm < 0){ nm = 11; ny--; }
+         }
+         else if(_sdays[index] == 1){ // day of next month
+          nm++; if(nm > 11){ nm = 0; ny++; }
+         }
+         else { // day of current month
+          day->value(1); _sel = day; wi = index/7;
+          _weeks->value(strtol(_nweeks[wi]->label(), NULL, 10)); 
+         }
+         set(nd, nm, ny, hour, min, 0);
+         //if(_sel != NULL){ _sel->redraw_label(); }
+         return 1;
+        }
+      }
+     }
+     
+     break;
+    }
+    else if(!is_parent){
+     x1 = Fl::event_x_root();
+     y1 = Fl::event_y_root();
+     xoff = x() - x1;
+     yoff = y() - y1;
+     return 1;
+    } else { return 0; }
+    break;
+   }
+   case FL_RELEASE:
+   case FL_DRAG:{
+    if(index != -1){ return 0; }
+    if(o != this && o != _header){ return o->handle(e); }
+    if(is_parent){ return 0; }
+    
+    int nX = xoff + Fl::event_x_root();
+    int nY = yoff + Fl::event_y_root();
+    
+    int W2 = 0, H2 = 0, X2 = 0, Y2 = 0;
+    Fl::screen_work_area(X2, Y2, W2, H2);
+    
+    if(nX < 0){ nX = 0; }
+    else if(nX > W2-w()){ nX = W2-w(); }
+    if(nY < 0){ nY = 0; }
+    else if(nY > H2-h()){ nY = H2-h(); }
+    position(nX, nY);
+    return 1;
+   }
+   
+   default: break;
+  }
+  
+  return Fl_Menu_Window::handle(e);
+ }
+ 
+ 
+ 
+#endif
diff -U 3 -H -d -r -N -- src/Fl_Calendar_Prefs.cxx src/Fl_Calendar_Prefs.cxx
--- src/Fl_Calendar_Prefs.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/Fl_Calendar_Prefs.cxx	2013-12-21 09:51:00.340448120 +0600
@@ -0,0 +1,333 @@
+// Fl_Calendar_Prefs (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Calendar_Prefs_cxx
+#define Fl_Calendar_Prefs_cxx
+
+#include <FL/Fl_Calendar_Prefs.H>
+#include <FL/Enumerations.H>
+#include <stdlib.h>
+
+// g++ -I/usr/local/include/FL -I../ -c Fl_Calendar_Prefs.cxx
+
+
+
+
+ /// ++++++++++++++++++IMAGES+++++++++++++++++++++++
+ static unsigned char icon_accept_20x20[876] = /* binary data included from icon_accept_20x20.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,20,0,0,0,20,8,6,0,0,0,
+141,137,29,13,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,0,
+255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,
+24,0,0,0,7,116,73,77,69,7,221,11,22,15,7,55,156,118,232,246,0,0,2,236,73,68,65,
+84,56,203,221,148,79,108,84,85,24,197,207,119,223,155,121,51,239,79,75,255,204,
+88,131,165,38,150,89,0,141,182,153,86,129,5,144,72,98,226,138,133,198,24,196,5,
+97,69,192,196,68,220,184,100,3,43,66,52,70,147,250,39,6,35,38,254,105,162,68,
+66,12,1,82,149,32,85,18,20,8,53,64,160,148,218,233,180,180,239,190,55,115,223,
+189,247,115,71,68,91,53,118,99,60,203,239,36,39,103,241,59,31,164,148,46,22,145,
+148,146,240,95,208,178,91,252,120,123,54,250,102,166,81,90,19,185,119,54,63,92,
+74,196,114,194,190,159,168,87,70,231,237,254,219,162,240,249,249,84,60,181,172,
+134,151,39,235,213,19,51,230,141,113,120,67,141,162,143,66,166,198,86,54,229,
+115,255,170,225,212,220,220,134,227,211,230,173,43,166,48,148,230,3,235,57,142,
+73,51,30,240,4,149,22,13,252,246,70,125,201,230,19,181,185,234,199,215,179,119,
+47,170,194,64,154,243,217,133,32,147,100,142,215,84,31,173,111,119,249,190,64,
+157,206,174,59,53,62,181,113,125,79,59,255,254,158,36,9,1,0,179,237,62,122,93,
+29,25,107,22,43,205,156,207,14,4,230,230,21,183,39,49,158,94,193,167,31,44,136,
+203,2,0,184,25,135,159,93,169,239,218,123,214,140,126,61,237,142,124,121,169,
+246,252,61,30,147,164,37,205,108,158,57,237,61,124,174,118,254,187,184,88,81,
+142,207,108,8,105,162,105,53,39,162,226,153,125,125,109,206,7,221,29,45,179,4,0,
+175,158,156,234,146,200,77,78,122,173,16,58,67,183,149,11,253,45,230,197,237,
+253,165,17,34,178,204,217,170,67,103,103,71,207,44,20,31,114,163,192,10,2,177,
+53,212,169,98,60,234,235,215,118,85,253,3,68,129,6,0,23,0,174,214,153,132,199,
+112,61,1,101,61,140,107,17,185,243,11,159,188,55,86,219,196,108,174,190,125,110,
+230,226,87,53,63,10,34,31,186,73,130,96,176,146,36,54,183,153,15,183,245,181,31,
+38,114,244,61,176,165,148,254,165,137,36,59,61,35,158,249,65,230,143,220,117,
+66,54,6,208,89,70,21,39,190,213,149,215,234,68,173,216,19,173,8,133,101,230,
+156,203,212,193,49,13,120,141,119,118,111,124,96,231,159,150,18,199,49,133,97,
+200,63,221,188,187,230,216,181,108,120,116,222,123,162,153,11,96,44,44,180,17,
+54,211,112,10,30,0,88,71,176,232,160,152,183,182,169,145,29,67,165,109,139,81,
+32,194,48,100,0,88,219,221,250,115,181,205,62,59,24,169,83,94,214,176,90,177,
+200,140,195,86,20,88,41,176,54,44,58,88,242,160,215,56,250,194,96,231,246,165,
+176,186,15,155,45,125,229,155,143,183,152,157,189,78,114,44,18,10,90,51,41,205,
+108,192,212,105,99,83,45,52,222,220,179,169,188,131,136,228,63,10,4,128,39,251,
+203,191,108,45,219,87,30,201,53,190,8,133,50,96,35,86,145,196,80,208,124,253,
+165,45,229,221,68,148,253,229,183,145,82,250,65,16,36,127,52,222,63,121,167,235,
+66,195,27,158,74,169,103,160,85,127,250,242,6,239,0,21,35,249,183,187,140,227,
+216,91,202,27,62,51,221,123,240,248,175,143,177,93,200,227,127,163,223,0,218,
+152,99,88,61,63,54,19,0,0,0,0,73,69,78,68,174,66,96,130};
+
+
+static unsigned char icon_calendar_20x20[1121] = /* binary data included from icon_calendar_20x20.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,20,0,0,0,20,8,6,0,0,0,
+141,137,29,13,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,0,
+255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,
+24,0,0,0,7,116,73,77,69,7,221,11,22,14,55,48,220,150,33,145,0,0,3,225,73,68,65,
+84,56,203,149,148,59,140,85,85,20,134,191,181,207,62,231,206,125,204,131,25,6,
+6,24,121,8,65,2,20,62,34,26,45,124,197,194,40,177,176,209,68,43,31,157,177,
+176,183,49,198,216,89,104,44,44,13,218,104,44,40,36,193,104,180,82,196,132,56,
+131,2,1,5,101,30,50,204,189,119,230,206,189,231,158,179,31,203,226,64,50,54,38,
+174,100,151,251,91,255,250,215,191,183,244,251,253,201,102,179,217,238,245,54,
+146,229,130,198,251,191,41,205,20,174,246,80,231,201,191,124,106,52,176,169,62,
+153,239,101,131,200,182,115,29,6,19,41,201,163,59,164,255,196,140,80,70,242,16,
+163,10,64,111,181,109,70,167,38,227,155,103,250,175,148,145,179,8,8,60,61,28,
+182,223,43,242,13,48,9,125,31,35,10,97,88,50,59,187,255,13,129,175,163,50,84,56,
+244,225,131,205,147,113,176,49,226,32,200,153,133,78,243,92,207,31,159,15,201,
+112,125,145,39,251,93,249,198,24,20,163,247,143,237,137,159,27,116,76,149,243,1,
+246,2,150,40,190,191,40,175,6,39,95,25,35,91,179,22,7,247,239,102,110,58,250,
+206,99,83,233,183,114,226,194,202,3,115,222,254,48,168,55,232,44,150,116,174,23,
+136,64,86,55,108,63,84,199,36,102,243,196,196,16,249,251,66,78,153,71,84,97,203,
+108,141,137,157,25,173,124,192,221,153,127,216,254,216,46,179,114,75,139,212,
+102,218,156,54,146,181,50,0,76,34,152,212,170,136,200,102,160,49,170,147,251,18,
+137,65,1,72,235,6,177,86,219,73,148,249,181,110,195,214,69,210,60,128,113,72,
+146,37,106,71,172,68,64,21,66,80,17,20,184,205,84,20,196,142,166,136,128,1,52,
+170,122,135,104,128,249,182,111,219,118,174,195,216,16,66,0,239,68,162,42,19,86,
+168,25,165,227,133,34,66,205,84,106,138,40,100,6,38,81,138,40,244,130,2,34,137,
+129,16,132,12,49,54,6,76,112,160,9,140,91,120,118,155,112,239,24,24,17,150,11,
+56,177,12,215,6,149,194,217,26,188,180,19,102,71,132,160,112,234,166,112,122,
+21,124,128,224,128,136,152,210,164,191,250,160,56,15,105,132,129,135,143,174,
+193,187,151,33,5,142,79,129,68,136,30,158,159,1,11,188,117,17,190,88,130,103,
+166,225,112,29,74,87,65,39,173,169,217,65,207,237,203,106,96,12,44,56,248,180,
+15,10,20,1,206,180,224,161,73,112,37,236,172,195,254,6,188,115,17,126,239,193,
+70,9,199,198,225,80,19,126,233,64,94,66,119,168,206,198,136,241,30,36,161,34,
+221,142,135,86,35,94,31,64,175,132,59,38,160,91,194,66,31,52,192,218,16,86,10,
+104,38,32,10,33,64,77,69,204,84,38,35,206,11,174,4,231,170,211,47,224,72,11,246,
+54,224,212,34,12,138,234,82,17,96,88,130,119,80,150,80,122,168,1,234,161,116,
+74,55,87,103,187,3,202,144,128,72,21,149,168,112,96,12,94,216,13,39,255,130,
+239,22,193,8,20,37,212,19,32,84,22,216,164,242,51,247,85,147,224,133,36,98,204,
+84,102,234,183,149,21,14,14,52,225,197,125,240,253,18,124,118,165,234,30,61,92,
+93,135,209,20,182,103,176,150,67,6,236,168,195,245,13,88,31,66,240,138,115,162,
+182,87,224,66,166,132,18,102,91,240,250,17,8,17,110,230,240,248,12,164,6,230,86,
+225,82,7,46,175,193,203,7,97,107,13,14,77,64,205,192,217,27,144,23,96,3,68,135,
+218,229,245,56,100,2,60,80,67,89,233,11,131,0,199,166,33,145,106,220,63,215,225,
+143,46,124,48,7,207,221,9,143,108,135,190,131,143,207,195,220,138,18,85,112,94,
+216,213,52,117,43,17,227,28,168,40,151,59,162,111,255,164,34,72,229,233,173,141,
+231,30,18,96,254,38,92,233,66,195,64,25,161,239,21,65,84,68,69,157,226,85,177,
+165,151,152,164,134,60,71,75,84,122,252,235,47,0,42,152,72,21,171,117,96,237,
+214,235,78,16,16,21,85,180,62,98,100,101,149,210,190,118,95,106,78,47,13,88,216,
+210,16,179,57,136,255,163,34,34,187,220,128,123,238,74,123,182,110,249,249,112,
+211,31,189,122,169,211,178,155,136,34,48,211,146,145,165,158,14,255,131,37,101,
+36,236,25,55,99,71,103,228,198,120,38,23,254,1,6,214,252,111,173,140,141,44,0,
+0,0,0,73,69,78,68,174,66,96,130};
+
+
+static unsigned char icon_cancel_20x20[1019] = /* binary data included from cancel_20x20.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,20,0,0,0,20,8,6,0,0,0,
+141,137,29,13,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,0,
+255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,
+24,0,0,0,7,116,73,77,69,7,221,11,23,7,43,4,172,56,212,147,0,0,3,123,73,68,65,
+84,56,203,213,148,95,104,91,85,28,199,191,39,55,109,147,155,100,91,146,38,55,
+75,218,164,55,185,52,48,210,219,164,141,101,12,125,152,130,224,147,236,169,176,
+81,203,88,237,192,201,220,28,3,65,75,95,4,31,6,62,8,78,4,5,193,85,216,131,172,
+160,108,62,40,12,100,101,15,171,99,154,14,55,111,110,109,27,202,77,110,146,91,
+219,154,52,205,159,159,15,53,53,89,75,241,197,7,127,47,231,28,206,143,207,249,
+114,126,223,223,15,248,207,98,122,26,0,240,35,145,249,160,180,188,36,1,0,126,37,
+234,0,0,58,40,249,219,23,95,178,26,111,93,190,145,63,117,234,172,206,243,236,
+217,123,253,111,152,158,72,244,20,47,93,186,253,251,200,200,48,136,218,160,38,0,
+208,175,95,7,0,140,168,234,15,188,182,122,198,202,113,31,145,32,140,1,128,30,
+137,236,194,60,138,2,205,227,137,152,121,254,142,99,99,227,21,103,169,116,123,
+222,229,243,181,190,188,187,207,95,184,240,190,173,80,120,215,82,171,17,29,57,
+194,74,185,220,118,249,241,227,115,30,69,185,209,204,201,6,2,161,46,81,188,101,
+151,229,4,151,203,81,221,102,99,155,181,250,111,213,137,115,199,61,39,79,22,119,
+21,2,0,55,55,247,89,101,105,41,85,247,251,25,91,91,35,94,16,58,173,178,252,105,
+54,24,28,111,194,58,67,161,239,236,3,3,9,78,211,8,130,128,74,169,180,69,169,95,
+166,154,176,54,133,0,80,236,233,233,227,36,233,150,45,22,139,115,154,182,163,
+180,88,44,85,22,22,222,227,188,222,211,246,88,44,201,229,243,68,110,55,43,235,
+122,121,235,225,195,55,220,170,250,133,209,223,15,231,211,167,123,129,0,96,248,
+124,33,38,73,223,56,146,201,1,83,38,67,112,185,88,189,86,3,227,121,152,86,87,
+137,188,94,86,54,140,173,202,252,252,132,75,81,102,138,162,8,215,226,34,246,87,
+24,14,195,165,170,40,244,246,138,92,40,52,107,27,28,148,205,154,70,96,140,129,
+136,72,16,80,206,102,203,149,71,143,38,93,138,50,99,136,34,156,45,176,182,63,4,
+0,151,170,34,47,73,112,175,172,44,86,211,233,139,117,93,175,160,163,131,161,
+86,3,136,24,1,172,154,78,127,233,82,148,25,58,116,104,15,108,15,80,151,36,116,
+43,10,178,129,64,200,44,138,159,152,221,238,46,84,42,4,198,0,34,50,85,171,48,
+135,195,99,217,96,112,156,173,175,239,90,170,53,184,214,14,104,250,204,34,73,95,
+59,100,121,128,203,102,9,129,0,107,48,134,70,111,47,51,45,47,83,71,119,119,39,
+115,58,95,190,92,173,46,123,210,233,159,247,85,168,95,189,138,110,69,129,30,10,
+245,88,162,209,89,187,44,39,56,77,35,18,4,86,210,180,234,31,247,239,95,217,156,
+155,251,169,33,138,59,150,114,187,121,235,177,99,159,231,68,241,53,93,16,218,
+234,96,106,52,26,240,92,187,134,220,208,80,196,236,247,223,113,196,227,49,46,
+151,35,8,2,202,133,66,185,124,239,222,155,174,39,79,62,220,94,88,120,117,227,
+193,131,84,253,232,81,198,12,131,120,175,183,211,54,60,252,49,243,251,199,118,
+70,193,116,123,149,141,183,175,124,96,89,89,126,199,82,175,19,249,124,172,148,
+201,160,146,74,157,113,171,234,87,77,107,24,62,95,31,147,164,89,123,50,57,200,
+101,50,84,183,90,217,166,197,178,184,62,254,250,241,224,243,35,57,0,0,209,78,
+107,223,237,127,193,174,71,163,55,43,163,163,244,231,232,104,169,24,137,156,6,0,
+35,28,70,235,90,16,132,190,181,19,39,82,219,147,147,180,22,143,103,148,161,33,
+121,159,57,211,248,199,216,231,207,223,204,71,163,23,91,33,207,134,230,112,28,
+94,155,152,184,187,196,117,61,119,192,8,107,180,157,214,167,166,254,213,24,165,
+239,241,63,139,191,0,75,241,130,151,30,224,227,37,0,0,0,0,73,69,78,68,174,66,96,
+130};
+
+
+static unsigned char icon_reset_20x20[1147] = /* binary data included from icon_reset_20x20.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,20,0,0,0,20,8,6,0,0,0,
+141,137,29,13,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,0,
+255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,
+24,0,0,0,7,116,73,77,69,7,221,11,22,15,30,45,250,20,184,148,0,0,3,251,73,68,65,
+84,56,203,141,146,75,104,156,85,24,134,159,239,252,231,255,39,147,153,73,154,
+164,147,198,38,109,108,82,180,72,80,106,177,245,2,86,165,8,174,188,161,11,235,
+74,69,92,219,133,43,197,141,59,145,162,11,197,141,130,5,209,77,81,113,81,74,65,
+132,22,141,82,108,27,91,105,33,189,96,154,180,77,166,153,92,230,242,159,203,231,
+34,49,77,81,193,23,190,115,86,223,195,121,223,243,202,242,242,114,111,169,84,
+170,169,46,153,79,78,235,192,137,235,196,135,250,41,212,218,92,255,248,130,180,
+166,246,151,149,117,58,244,251,98,54,151,115,239,213,6,121,127,7,93,195,101,102,
+158,223,110,166,154,45,90,33,70,21,128,197,185,154,84,250,122,245,192,248,114,
+37,143,252,136,208,4,174,199,152,63,83,175,253,41,73,90,48,203,62,106,158,183,
+25,238,31,174,154,36,253,52,66,191,66,65,96,223,71,123,74,181,216,88,178,14,
+144,241,169,155,217,111,139,222,78,132,164,115,225,42,219,154,75,124,37,66,27,
+163,181,210,166,248,161,77,57,162,202,80,128,78,0,245,92,106,92,51,135,137,210,
+139,82,200,202,236,29,25,162,90,213,176,240,120,95,122,209,94,88,244,29,147,222,
+214,41,118,18,58,114,150,111,180,17,3,89,209,80,216,80,121,216,36,178,222,49,26,
+244,100,125,166,113,127,222,138,104,132,158,141,133,43,115,89,70,187,217,224,76,
+221,149,237,207,181,220,228,61,101,82,155,105,169,106,36,43,103,0,152,68,48,169,
+85,17,185,157,104,116,103,239,54,67,12,43,209,166,69,131,88,171,181,36,202,68,
+125,222,216,162,72,163,25,192,56,36,201,18,181,29,118,5,160,16,131,10,40,240,55,
+83,137,136,36,61,41,22,48,17,8,170,222,33,26,96,162,230,203,182,214,212,60,118,
+10,33,0,94,68,215,0,138,172,3,129,208,142,66,71,2,91,38,206,209,44,119,49,219,
+187,9,159,88,73,4,66,16,50,68,108,12,66,112,64,178,186,183,6,145,91,40,17,84,
+149,193,74,224,141,67,7,217,120,252,24,116,117,243,253,203,111,114,100,199,110,
+124,11,130,7,34,98,151,243,136,13,160,97,101,91,4,116,181,121,6,104,70,72,5,210,
+24,120,237,196,119,112,199,16,239,189,243,5,219,47,79,176,255,228,81,174,84,7,
+56,89,222,10,94,233,181,38,49,206,9,193,41,62,7,239,88,187,131,131,185,38,60,
+87,85,114,7,91,107,51,12,157,56,198,161,93,79,51,145,110,228,151,209,71,56,43,
+21,30,252,245,56,165,229,54,222,9,243,45,141,38,70,140,247,224,60,228,14,138,
+192,96,6,85,11,99,37,216,87,21,246,108,80,54,75,78,190,80,231,92,87,17,109,131,
+203,21,105,231,12,158,30,39,169,47,224,131,144,168,220,180,125,153,48,235,5,17,
+112,17,158,172,194,75,195,176,224,192,8,52,60,188,58,34,124,51,62,141,186,64,
+179,189,234,32,6,242,74,55,109,245,120,181,56,167,180,154,170,118,190,129,13,
+201,74,118,6,248,122,18,62,59,191,242,25,197,4,14,238,134,119,79,41,99,253,195,
+24,129,206,28,234,14,84,149,66,109,150,116,126,22,223,10,132,2,36,17,76,95,102,
+196,57,112,110,197,178,141,208,109,86,166,8,124,112,70,185,84,23,166,91,150,98,
+12,60,112,241,60,243,2,33,64,39,129,201,173,59,168,219,18,193,129,115,130,93,
+108,211,17,50,5,183,218,154,117,242,192,229,182,96,13,156,15,21,38,239,219,203,
+11,63,125,201,210,232,83,140,181,175,81,146,192,183,119,61,193,92,82,36,203,91,
+68,7,102,102,33,198,224,193,7,240,94,241,158,219,70,35,56,175,212,164,196,251,
+59,95,97,122,195,16,111,29,62,192,163,127,252,192,231,59,158,229,108,97,4,109,
+130,243,194,64,201,24,43,17,113,14,16,93,61,84,110,149,155,181,146,43,202,169,
+165,14,222,190,243,69,70,211,81,230,186,183,112,185,50,66,116,162,6,21,239,20,
+175,218,107,115,47,205,36,53,52,155,168,200,191,193,110,65,81,152,150,10,87,6,
+31,35,137,144,182,64,80,81,69,139,29,70,110,204,17,236,235,187,210,226,209,233,
+6,83,61,157,98,254,145,226,255,83,68,100,208,53,216,121,119,154,219,162,101,
+225,158,146,47,95,58,127,179,199,26,54,3,83,176,82,163,129,178,216,233,69,45,3,
+243,255,245,236,60,18,135,187,77,97,108,64,74,221,153,204,254,5,16,103,6,201,
+155,7,27,210,0,0,0,0,73,69,78,68,174,66,96,130};
+
+static unsigned char icon_update_20x20[1116] = /* binary data included from update_20x20.png */
+{137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,20,0,0,0,20,8,6,0,0,0,
+141,137,29,13,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,6,98,75,71,68,0,255,0,
+255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,
+24,0,0,0,7,116,73,77,69,7,221,11,23,20,8,30,241,147,71,161,0,0,3,220,73,68,65,
+84,56,203,149,84,91,104,92,85,20,93,231,156,123,239,188,210,76,102,146,153,100,
+172,38,169,212,88,41,37,109,145,138,38,105,10,62,42,165,162,16,65,211,248,6,253,
+136,69,255,44,173,34,33,98,72,13,72,254,82,68,138,82,180,148,10,213,86,20,139,
+180,52,51,70,109,177,132,82,136,137,134,54,50,117,38,51,201,157,87,51,119,238,
+157,115,239,246,163,102,74,156,40,113,253,109,246,218,139,179,246,94,28,96,141,
+24,250,57,249,216,64,52,217,177,92,191,51,158,92,149,167,172,85,112,150,216,
+119,92,216,56,59,167,63,63,113,221,249,124,96,103,131,179,26,143,175,85,16,92,
+192,179,62,66,167,115,202,177,146,38,103,199,46,223,104,168,188,54,58,95,161,
+177,127,206,93,78,228,177,61,82,139,217,84,150,167,77,106,253,37,99,181,95,213,
+173,76,201,229,62,239,13,215,131,49,134,178,148,100,167,50,108,163,74,135,139,
+101,250,112,176,179,41,245,110,52,129,193,174,200,74,193,11,215,117,116,183,6,
+17,187,174,55,95,210,229,208,111,82,236,134,219,221,224,8,5,80,56,49,174,48,
+128,8,0,35,128,168,104,48,119,97,73,247,51,167,123,176,163,233,234,138,29,254,
+248,71,22,15,54,215,225,244,244,194,182,115,11,206,165,25,212,8,143,223,67,236,
+214,94,8,32,102,219,68,0,99,68,68,140,129,121,188,30,42,154,86,208,103,154,125,
+0,14,86,89,30,191,150,217,250,117,66,198,146,222,128,87,8,1,175,6,210,202,38,
+47,21,77,216,92,56,210,229,227,68,14,169,10,103,66,90,78,168,84,224,134,81,62,
+62,210,29,217,87,117,20,34,98,209,121,249,122,92,212,250,24,4,115,49,34,115,33,
+155,178,10,198,93,99,71,63,226,185,76,137,219,54,65,227,128,111,41,143,250,124,
+246,148,102,201,142,145,238,200,190,93,39,231,170,143,178,255,203,217,154,140,
+47,80,64,32,64,28,4,228,116,39,147,206,183,250,106,93,241,19,123,214,163,247,
+236,34,133,155,214,145,43,155,149,28,246,241,225,157,145,23,1,224,80,52,137,161,
+174,166,234,28,222,115,135,127,248,124,209,227,104,101,112,31,153,216,168,217,
+111,188,253,236,221,241,229,126,139,91,162,188,184,200,14,239,10,5,24,83,150,
+222,186,144,192,7,221,145,21,98,43,208,123,42,49,218,19,37,234,137,145,211,243,
+109,238,87,0,56,114,49,117,43,103,177,100,197,201,193,88,130,253,87,92,43,205,
+39,78,38,71,121,168,241,77,16,128,124,246,119,231,102,97,243,153,190,102,11,
+255,3,135,98,201,219,150,189,68,40,58,128,109,131,20,8,165,247,94,183,56,243,47,
+131,3,19,73,69,3,127,239,202,13,10,166,13,194,67,45,220,91,130,253,210,80,103,
+147,93,185,114,231,157,170,99,22,77,178,203,96,196,181,214,43,11,120,25,0,28,
+103,190,74,48,147,148,124,122,65,125,58,229,11,191,170,54,54,190,150,147,174,
+231,30,175,83,196,138,216,248,28,123,36,226,24,76,74,162,37,71,195,156,161,189,
+63,54,158,184,159,239,167,191,99,117,13,79,125,172,3,0,178,82,25,141,91,158,13,
+172,12,198,200,118,80,50,143,61,220,30,178,170,130,125,224,155,244,240,164,93,
+123,192,146,26,44,155,156,160,44,148,111,74,190,69,20,243,130,73,9,197,237,166,
+240,58,113,66,23,53,237,121,184,72,168,64,141,145,97,207,180,216,219,250,30,8,
+77,86,9,126,53,169,135,207,197,105,106,146,252,117,182,33,56,99,68,204,177,37,
+179,109,128,28,16,231,32,161,170,4,70,154,135,49,183,92,194,222,144,57,214,223,
+89,223,31,157,209,209,213,22,188,109,121,42,158,199,147,91,131,169,206,16,118,
+236,16,185,156,42,12,40,110,6,71,40,170,197,92,138,5,143,42,185,75,225,26,135,
+226,33,248,173,60,30,173,45,125,218,223,89,223,255,194,103,9,116,181,5,87,255,
+190,150,241,201,79,250,145,47,166,237,87,100,157,79,101,62,21,36,56,96,74,72,
+221,160,13,220,74,247,108,210,182,239,110,119,253,201,152,135,86,205,225,50,190,
+159,202,225,145,251,252,0,128,244,98,33,116,244,162,177,101,98,78,82,161,68,216,
+20,22,216,187,217,101,237,105,15,252,176,204,143,206,100,209,213,86,87,153,255,
+11,212,45,203,249,209,56,23,162,0,0,0,0,73,69,78,68,174,66,96,130};
+ /// ++++++++++++++++++IMAGES+++++++++++++++++++++++
+
+
+
+
+
+Fl_Calendar_Prefs::Fl_Calendar_Prefs()
+ :_icon("icon_calendar_20x20", icon_calendar_20x20,sizeof(icon_calendar_20x20)),
+ _iconcancel("icon_cancel_20x20",icon_cancel_20x20,sizeof(icon_cancel_20x20)),
+ _iconreset("icon_reset_20x20", icon_reset_20x20,sizeof(icon_reset_20x20)),
+ _iconaccept("icon_accept_20x20", icon_accept_20x20,sizeof(icon_accept_20x20)),
+ _deicon("deicon_calendar_20x20", icon_calendar_20x20,sizeof(icon_calendar_20x20)),
+ _deiconcancel("deicon_cancel_20x20", icon_cancel_20x20,sizeof(icon_cancel_20x20)),
+ _deiconreset("deicon_reset_20x20", icon_reset_20x20,sizeof(icon_reset_20x20)),
+ _deiconaccept("deicon_accept_20x20", icon_accept_20x20,sizeof(icon_accept_20x20)),
+ _iconupdate("icon_update_20x20", icon_update_20x20, sizeof(icon_update_20x20)),
+ _deiconupdate("deicon_update_20x20", icon_update_20x20, sizeof(icon_update_20x20)){
+  _deicon.inactive(); _deiconcancel.inactive();
+  _deiconreset.inactive(); _deiconaccept.inactive();
+  _deiconupdate.inactive();
+  
+  strcpy(_icontooltips[0], "Update time");
+  strcpy(_icontooltips[1], "Show selected date");
+  strcpy(_icontooltips[2], "Accept changes");
+  strcpy(_icontooltips[3], "Close");
+  
+  
+  strcpy(_header, "Calendar");
+  
+  //   Every fourth year, the month of February has 29 days instead of 28. This year is called a "leap year" and the 29th day of February is a "leap day". A leap year has 366 days instead of the usual 365. Most years that can be cleanly divided by four are leap years. 2016, 2020 and 2024, for example, are leap years.
+  strcpy(_days[0], "Mon"); strcpy(_days[1], "Tue"); strcpy(_days[2], "Wed"); strcpy(_days[3], "Thu"); strcpy(_days[4], "Fri"); strcpy(_days[5], "Sat"); strcpy(_days[6], "Sun");
+  
+//   January Jan.    31;  February  Feb.    28/29;  March Mar.    31;  April Apr.    30;  May   May 31;  June  Jun.    30;  July  Jul.    31;  August    Aug.    31;  September Sep.    30;  October   Oct.    31;  November  Nov.    30;  December  Dec.    31;
+  strcpy(_months[0], "January"); strcpy(_months[1], "February"); strcpy(_months[2], "March"); strcpy(_months[3], "April"); strcpy(_months[4], "May"); strcpy(_months[5], "June"); strcpy(_months[6], "July"); strcpy(_months[7], "August"); strcpy(_months[8], "September"); strcpy(_months[9], "October"); strcpy(_months[10], "November"); strcpy(_months[11], "December");
+  
+  _size_fonts[0] = 14; _size_fonts[1] = 14; _size_fonts[2] = 12;
+  memset(_attr_fonts, 0, 3*sizeof(int));
+  memset(_name_fonts, 0, 108);
+  _fonts[0] = FL_HELVETICA_BOLD;
+  _fonts[1] = _fonts[2] = FL_HELVETICA;
+  
+  // FL_BACKGROUND_COLOR, FL_BACKGROUND2_COLOR, FL_FOREGROUND_COLOR, FL_INACTIVE_COLOR(foreground), FL_SELECTION_COLOR
+  for(int _i = 0; _i < 3; _i++){
+   if(_i == 0){
+    _headercolor[_i] = fl_inactive(FL_FOREGROUND_COLOR); // FL_INACTIVE_COLOR
+    _monthscolor[_i] = fl_inactive(FL_FOREGROUND_COLOR);
+    _dayscolor[_i] = fl_inactive(FL_FOREGROUND_COLOR);
+   }
+   else if(_i == 1){
+    _headercolor[_i] = FL_FOREGROUND_COLOR;
+    _monthscolor[_i] = FL_FOREGROUND_COLOR;
+    _dayscolor[_i] = FL_FOREGROUND_COLOR;
+   }
+   else if(_i == 2){
+    _headercolor[_i] = FL_SELECTION_COLOR;
+    _monthscolor[_i] = FL_SELECTION_COLOR;
+    _dayscolor[_i] = FL_SELECTION_COLOR;
+   }
+  }
+  
+ }
+
+ 
+ Fl_Calendar_Prefs::~Fl_Calendar_Prefs(){}
+ 
+ 
+ 
+ 
+#endif
diff -U 3 -H -d -r -N -- src/Fl_Check_Browser.cxx src/Fl_Check_Browser.cxx
--- src/Fl_Check_Browser.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/Fl_Check_Browser.cxx	2013-12-21 09:51:00.341448120 +0600
@@ -98,33 +98,49 @@
 }
 
 int Fl_Check_Browser::item_height(void *) const {
-	return textsize() + 2;
+	bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+    fl_font(textfont(), textsize());
+    int hh = fl_height();
+    if (flag_oxy) hh += 2;
+    return hh;
 }
 
 #define CHECK_SIZE (textsize()-2)
 
 int Fl_Check_Browser::item_width(void *v) const {
 	fl_font(textfont(), textsize());
-	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + 8;
+	return int(fl_width(((cb_item *)v)->text)) + CHECK_SIZE + 8 + 5;
 }
 
-void Fl_Check_Browser::item_draw(void *v, int X, int Y, int, int) const {
+void Fl_Check_Browser::item_draw(void *v, int X, int Y, int W, int H) const {
 	cb_item *i = (cb_item *)v;
 	char *s = i->text;
 	int tsize = textsize();
 	Fl_Color col = active_r() ? textcolor() : fl_inactive(textcolor());
 	int cy = Y + (tsize + 1 - CHECK_SIZE) / 2;
 	X += 2;
+    bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
 
-	fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
-	fl_loop(X, cy, X, cy + CHECK_SIZE,
-	        X + CHECK_SIZE, cy + CHECK_SIZE, X + CHECK_SIZE, cy);
+	if (flag_oxy) {
+     fl_draw_box(FL_DOWN_BOX, X+2, cy, 15, 15, color());
+     fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
+    }
+    else {
+     fl_color(active_r() ? FL_FOREGROUND_COLOR : fl_inactive(FL_FOREGROUND_COLOR));
+     fl_loop(X+2, cy, X+2, cy + CHECK_SIZE,
+            X+2 + CHECK_SIZE, cy + CHECK_SIZE, X+2 + CHECK_SIZE, cy);
+    }
+    
 	if (i->checked) {
 	  int tx = X + 3;
 	  int tw = CHECK_SIZE - 4;
 	  int d1 = tw/3;
 	  int d2 = tw-d1;
 	  int ty = cy + (CHECK_SIZE+d2)/2-d1-2;
+      
+      if (flag_oxy) { tx +=2; tw=9; d1=3; d2=6; ty=cy+(15+d2)/2-d1-2; }
+      else tx += 2;
+      
 	  for (int n = 0; n < 3; n++, ty++) {
 	    fl_line(tx, ty, tx+d1, ty+d1);
 	    fl_line(tx+d1, ty+d1, tx+tw-1, ty+d1-d2+1);
@@ -135,7 +151,7 @@
 		col = fl_contrast(col, selection_color());
 	}
 	fl_color(col);
-	fl_draw(s, X + CHECK_SIZE + 8, Y + tsize - 1);
+	fl_draw(s, X + CHECK_SIZE + 8, flag_oxy?Y + tsize:Y + tsize - 1);
 }
 
 void Fl_Check_Browser::item_select(void *v, int state) {
@@ -309,11 +325,38 @@
 	redraw();
 }
 
-int Fl_Check_Browser::handle(int event) {
-  if (event==FL_PUSH)
-    deselect();
-  return Fl_Browser_::handle(event);
-}
+int Fl_Check_Browser::handle(int e){
+  
+  switch(e){
+   case FL_PUSH: {
+    if ( Fl::event_button() == FL_LEFT_MOUSE ){
+     int X, Y;
+     int xx, yy, ww, hh, dx, dy;
+     
+     dx = Fl::box_dy(box())*2;
+     dy = Fl::box_dy(box())*2;
+     X=Fl::event_x(); Y=Fl::event_y();
+     xx = x()+dx; yy = y()+dy; ww = x()+w()-(dx*2); hh = y()+h()-(dy*2);
+     
+     if(hscrollbar.visible()){ hh -= hscrollbar.h(); }
+     if(scrollbar.visible()){ ww -= scrollbar.w(); }
+     
+     if(X >= xx && Y >= yy && X < ww && Y < hh){
+      void *item = NULL;
+      if((item = find_item(Fl::event_y())) != NULL){
+       Fl_Widget::take_focus();
+       Fl_Browser_::select(item, !item_selected(item), 1);
+       return 0;
+      }
+     }
+    }
+    break;
+   }
+   default: break;
+  }
+  
+  return Fl_Browser_::handle(e);
+ }
 
 //
 // End of "$Id: Fl_Check_Browser.cxx 8864 2011-07-19 04:49:30Z greg.ercolano $".
diff -U 3 -H -d -r -N -- src/Fl_Choice.cxx src/Fl_Choice.cxx
--- src/Fl_Choice.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/Fl_Choice.cxx	2013-12-07 21:04:57.000000000 +0600
@@ -20,22 +20,26 @@
 #include <FL/Fl_Choice.H>
 #include <FL/fl_draw.H>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 // Emulates the Forms choice widget.  This is almost exactly the same
 // as an Fl_Menu_Button.  The only difference is the appearance of the
 // button: it draws the text of the current pick and a down-arrow.
 
 void Fl_Choice::draw() {
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
   int dx = Fl::box_dx(FL_DOWN_BOX);
   int dy = Fl::box_dy(FL_DOWN_BOX);
   int H = h() - 2 * dy;
-  int W = (H > 20) ? 20 : H;
+  int W = (H > 20) ? 20 : H; if (flag_oxy) { W = 17; }
   int X = x() + w() - W - dx;
   int Y = y() + dy;
   int w1 = (W - 4) / 3; if (w1 < 1) w1 = 1;
   int x1 = X + (W - 2 * w1 - 1) / 2;
   int y1 = Y + (H - w1 - 1) / 2;
 
+  fl_push_clip(x(), y(), w(), h());
+  
   if (Fl::scheme()) {
     draw_box(FL_UP_BOX, color());
 
@@ -46,16 +50,38 @@
       fl_polygon(x1, y1 + 1, x1 + w1, y1 - w1 + 1, x1 + 2 * w1, y1 + 1);
     } else {
       // Show smaller up/down arrows with a divider...
-      x1 = x() + w() - 13 - dx;
-      y1 = y() + h() / 2;
-      fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
-      fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
 
-      fl_color(fl_darker(color()));
-      fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+      Fl_Color hlcol = 0x0;
+      
+      if (flag_oxy) { // if was seted the theme `oxy'
+       x1 = x() + w() - dx/2 - W/2 - 5;
+       y1 = y()-1 + h()/2 - 1;
+       
+       // draw down arrow
+       oxy_arrow(x1, y1, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK);
+       // draw the divider
+       hlcol = fl_color_average(color(), FL_BLACK, 0.88);
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(X, y()+dy, y()+h()-dx-2);
+       hlcol = fl_lighter(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(X+1, y()+dy, y()+h()-dx-2);
+       
+      } else {
+       x1 = x() + w() - 13 - dx;
+       y1 = y() + h() / 2; if (flag_oxy) { y1 -= 1; }
+       fl_polygon(x1, y1 - 2, x1 + 3, y1 - 5, x1 + 6, y1 - 2);
+       fl_polygon(x1, y1 + 2, x1 + 3, y1 + 5, x1 + 6, y1 + 2);
+       
+       hlcol = fl_darker(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(x1 - 7, y1 - 8, y1 + 8);
+       
+       hlcol = fl_lighter(color());
+       fl_color(active_r()?hlcol:fl_inactive(hlcol));
+       fl_yxline(x1 - 6, y1 - 8, y1 + 8);
+      }
 
-      fl_color(fl_lighter(color()));
-      fl_yxline(x1 - 6, y1 - 8, y1 + 8);
     }
   } else {
     if (fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) == textcolor()) {
@@ -78,7 +104,8 @@
     // ERCO
     int xx = x() + dx, yy = y() + dy + 1, ww = w() - W, hh = H - 2;
 
-    fl_push_clip(xx, yy, ww, hh);
+    if(flag_oxy) fl_push_clip(xx, yy-1, ww-dx-2, h()-dy-dy/2-1);
+    else fl_push_clip(xx, yy, ww, hh);
 
     if ( Fl::scheme()) {
       Fl_Label l;
@@ -91,9 +118,9 @@
       l.color= m.labelcolor_ ? m.labelcolor_ : textcolor();
       if (!m.active()) l.color = fl_inactive((Fl_Color)l.color);
       fl_draw_shortcut = 2; // hack value to make '&' disappear
-      l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
+      if(flag_oxy) l.draw(xx+2, yy, ww-dx/2-3, hh, FL_ALIGN_LEFT);
+      else l.draw(xx+3, yy, ww>6 ? ww-6 : 0, hh, FL_ALIGN_LEFT);
       fl_draw_shortcut = 0;
-      if ( Fl::focus() == this ) draw_focus(box(), xx, yy, ww, hh);
     }
     else {
       fl_draw_shortcut = 2; // hack value to make '&' disappear
@@ -102,6 +129,10 @@
     }
 
     fl_pop_clip();
+    fl_pop_clip();
+    
+    if ( Fl::focus() == this ) draw_focus(box(), xx, yy-1, flag_oxy?ww-dx/2:ww, flag_oxy?h()-dy-dy:hh);
+    
   }
 
   draw_label();
@@ -155,11 +186,12 @@
 int Fl_Choice::handle(int e) {
   if (!menu() || !menu()->text) return 0;
   const Fl_Menu_Item* v;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
   switch (e) {
   case FL_ENTER:
   case FL_LEAVE:
-    return 1;
-
+   return 1;
+  
   case FL_KEYBOARD:
     if (Fl::event_key() != ' ' ||
         (Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META))) return 0;
@@ -168,24 +200,24 @@
   J1:
     if (Fl::scheme()
 	|| fl_contrast(textcolor(), FL_BACKGROUND2_COLOR) != textcolor()) {
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+      v = menu()->pulldown(x(), y(), w(), h(), flag_oxy?0:mvalue(), this);
     } else {
       // In order to preserve the old look-n-feel of "white" menus,
       // temporarily override the color() of this widget...
       Fl_Color c = color();
       color(FL_BACKGROUND2_COLOR);
-      v = menu()->pulldown(x(), y(), w(), h(), mvalue(), this);
+      v = menu()->pulldown(x(), y(), w(), h(), flag_oxy?0:mvalue(), this);
       color(c);
     }
     if (!v || v->submenu()) return 1;
-    if (v != mvalue()) redraw();
+    /*if (v != mvalue())*/ redraw(); // NOTE: for see the focus (kdiman)
     picked(v);
     return 1;
   case FL_SHORTCUT:
     if (Fl_Widget::test_shortcut()) goto J1;
     v = menu()->test_shortcut();
     if (!v) return 0;
-    if (v != mvalue()) redraw();
+    /*if (v != mvalue())*/ redraw(); // NOTE: for see the focus (kdiman)
     picked(v);
     return 1;
   case FL_FOCUS:
diff -U 3 -H -d -r -N -- src/Fl_Clock_Input.cxx src/Fl_Clock_Input.cxx
--- src/Fl_Clock_Input.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/Fl_Clock_Input.cxx	2013-12-21 09:51:00.342448120 +0600
@@ -0,0 +1,384 @@
+// Fl_Clock_Input (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Clock_Input_cxx
+#define Fl_Clock_Input_cxx
+
+#include <FL/Fl.H>
+#include <FL/Fl_Clock_Input.H>
+#include <stdlib.h>
+#include <string.h>
+#include <FL/names.h>
+
+// g++ -I/usr/local/include/FL -I../ -c Fl_Clock_Input.cxx
+
+Fl_Clock_Input::Fl_Clock_Input(int X,int Y,int W,int H,const char*L)
+: Fl_Input(X,Y,W,H,L),
+_lp(0){
+ set_values(12, 30);
+}
+
+
+
+int Fl_Clock_Input::handle(int e){
+ //printf("Fl_Clock_Input: %s\n", fl_eventnames[e]);
+  if(!active_r()/* || readonly()*/){ Fl_Input::handle(e); }
+  switch(e){
+   
+   case FL_UNFOCUS: {
+    _lp = position();
+    check_value();
+    break;
+   }
+   
+   case FL_PUSH: {
+    
+    int r = Fl_Input::handle(e);
+    _lp = position();
+    check_value();
+    if(Fl::focus() != this){ take_focus(); }
+    return r;
+   }
+   
+   
+   case FL_PASTE:
+   case FL_KEYBOARD: {
+    int k, p, m, letext, litext, r, sinv = 0;
+    k = Fl::event_key();
+    if(k == FL_Tab && Fl_Input::tab_nav()){ return Fl_Input::handle(e); }
+    if(k == FL_Enter || k == FL_KP_Enter){ return Fl_Input::handle(e); }
+    if(k == FL_Home || k == FL_End){ return Fl_Input::handle(e); }
+    const char *etext = Fl::event_text();
+    const char *itext = Fl_Input::value();
+    const char *d = NULL; int id = 0, sd = 0;
+    char cstr[8]; memset(cstr, 0, 8);
+    char hv[8]; memset(hv, 0, 8); // hours value in the cstring mode
+    char mv[8]; memset(mv, 0, 8); // minutes value in the cstring mode
+    int lhv = 0, lmv = 0;
+    p = position();
+    m = mark();
+    if(p > m){ sinv = 1; int tp = p; p=m; m=tp; }
+    int cs = m-p; // number of selection symbols
+    if(itext && (d = strchr(itext, ':'))){ id = d-itext; } // id is index of divider `:'
+    else { return 1; }
+    if(cs > 0){ for(int _i = p, j = 0; _i < m; _i++, j++){ cstr[j] = itext[_i]; } }
+    letext = strlen(etext); litext = strlen(itext);
+    sd = (strchr(cstr, ':') != NULL);
+    for(int _i = 0; _i < id; _i++){ hv[_i] = itext[_i]; }
+    for(int _i = id+1, j = 0; _i < litext; _i++, j++){ mv[j] = itext[_i]; }
+    lhv = strlen(hv); lmv = strlen(mv);
+    
+    if(e == FL_PASTE || (Fl::event_ctrl() && k == 'v')){ // INSERT/PASTE
+     Fl_Input o(0,0,0,0,0); o.type(FL_INT_INPUT);
+     Fl::paste(o, 1);
+     const char *ov = o.value();
+     int lov = strlen(ov);
+     if(cs > 0 && strchr(cstr, ':')){ return 1; }
+     if(lov <= 0 || lov > 2){ return 1; }
+     for(int _i = 0; _i < lov; _i++){ if(ov[_i] < '0' || ov[_i] > '9'){ return 1; } }
+     
+     if(p <= id && m <= id){ // hours
+      if((r = lhv-cs+lov) > 2){ return 1; }
+      // check new value for hours
+      for(int _i = p, _io = 0; _i < r; _i++, _io++){
+       if(p == m){ hv[_i+1] = hv[_i]; }
+       if(p==0){ if(_i+1 < r){ hv[_i] = ov[_io]; } }
+       else { hv[_i] = ov[_io]; }
+      }
+      hv[r] = '\0';
+      if(strlen(hv) > 2){ return 1; }
+      if(strtol(hv, NULL, 10) > 23){ return 1; }
+     }
+     else { // minutes
+      if((r = lmv-cs+lov) > 2){ return 1; }
+      int _I = p-lhv-1;
+      // check new value for minutes
+      for(int _i = _I, _io = 0; _i < r; _i++, _io++){
+       if(p == m){ mv[_i+1] = mv[_i]; }
+       if(_I == 0){ if(_i+1 < r){ mv[_i] = ov[_io]; } }
+       else { mv[_i] = ov[_io]; }
+      }
+      mv[r] = '\0';
+      if(strlen(mv) > 2){ return 1; }
+      if(strtol(mv, NULL, 10) > 59){ return 1; }
+     }
+     replace(p, m, ov, lov);
+     return 1;
+    }
+    
+    else if(Fl::event_ctrl() && k == 'c'){ // COPY
+     if(cs > 0){ Fl::copy(cstr, (int) strlen(cstr), 1); }
+     return 1;
+    }
+    
+    else if(Fl::event_ctrl() && k == 'x'){ // CUT
+     if(cs > 0){
+      if(strchr(cstr, ':')){ return 1; }
+      Fl::copy(cstr, (int) strlen(cstr), 1);
+      replace(p, m, 0);
+     }
+     return 1;
+    }
+    
+    
+    if(k == FL_BackSpace){
+     if(sd || (p == m && id == (p-1))){ return 1; } // don't touch divider's `:'
+     break;
+    }
+    else if(k == FL_Delete){
+     if(sd || (p == m && id == p)){ return 1; } // don't touch divider's `:'
+     break;
+    }
+    
+    if(k == FL_Left){
+     if(sd || (id == (p-1) && !sinv)){
+      if(Fl::focus() != this){ take_focus(); redraw(); }
+      r = Fl_Input::handle(e);
+      check_value();
+      return r;
+     }
+     break;
+    }
+    else if(k == FL_Right){
+     if(sd || (id == p && !sinv) || (id == m && sinv)){
+      if(Fl::focus() != this){ take_focus(); redraw(); }
+      r = Fl_Input::handle(e);
+      check_value();
+      return r;
+     }
+     break;
+    }
+    
+    if(k == FL_Up){ check_value(); _lp = p; incr(); return 1; }
+    else if(k == FL_Down){ check_value(); _lp = p; decr(); return 1; }
+    
+    if(sd){ return 1; }
+    for(int _i = 0; _i < letext; _i++){ if(etext[_i] < '0' || etext[_i] > '9'){ return 1; } }
+    
+    /// printf("line: %d\n", __LINE__);
+    
+    if(p <= id && m <= id){ // hours
+     if((r = lhv-cs+letext) > 2){ return 1; }
+     for(int _i = p, _io = 0; _i < r; _i++, _io++){
+      if(p == m){ hv[_i+1] = hv[_i]; }
+      if(p==0){ if(_i+1 < r){ hv[_i] = etext[_io]; } }
+      else { hv[_i] = etext[_io]; }
+     }
+     hv[r] = '\0';
+     if(strlen(hv) > 2){ return 1; }
+     if(strtol(hv, NULL, 10) > 23){ return 1; }
+    }
+    
+    else { // minutes
+     if((r = lmv-cs+letext) > 2){ return 1; }
+     int _I = p-lhv-1;
+     for(int _i = _I, _io = 0; _i < r; _i++, _io++){
+      if(p == m){ mv[_i+1] = mv[_i]; }
+      if(_I==0){ if(_i+1 < r){ mv[_i] = etext[_io]; } }
+      else { mv[_i] = etext[_io]; }
+     }
+     mv[r] = '\0';
+     if(strlen(mv) > 2){ return 1; }
+     if(strtol(mv, NULL, 10) > 59){ return 1; }
+    }
+    
+    if(letext > 0){ replace(p, m, etext, letext); }
+    return 1;
+    break;
+   }
+   
+   default: break;
+  }
+  return Fl_Input::handle(e);
+ }
+
+
+
+
+
+void Fl_Clock_Input::check_value(){
+  const char *itext = Fl_Input::value();
+  int litext = strlen(itext);
+  if(litext != 5){
+   char hv[8]; memset(hv, 0, 8);
+   char mv[8]; memset(mv, 0, 8);
+   const char *d = strchr(itext, ':');
+   int lhv = 0, lmv = 0, v = 0, isd = (d != NULL);
+   int p = position();
+   int m = mark();
+   int ph = 0, id = 0, np = p;
+   
+   if(isd){
+    np = d-itext;
+    memcpy(hv, itext, np);
+    lhv = strlen(hv);
+    lmv = np+1;
+    memcpy(mv, itext+lmv, litext-lmv);
+    lmv = strlen(mv);
+   }
+   np = p;
+   
+   if(lhv != 2 || lmv != 2 || !isd){
+    if(!isd){
+     Fl_Input::value("00:00");
+     return ;
+    }
+    ph = (p<=m)?p:m;
+    id = (d-itext); // index of divider
+    ph = (ph <= id); // is position on place of hours ?
+    v = strtol(hv, NULL, 10);
+    if(lhv != 2 || v < 0 || v > 23){
+     np += (2-lhv);
+     if(v < 0){ v = 0; }
+     else if(v > 23){ v = 23; }
+     _hours = v;
+     sprintf(hv, "%02d", v);
+    }
+    
+    strcat(hv, ":");
+    v = strtol(mv, NULL, 10);
+    
+    if(lmv != 2 || v < 0 || v > 59){
+     if(!ph){ np -= (2-lmv); }
+     if(v < 0){ v = 0; }
+     else if(v > 59){ v = 59; }
+     _minutes = v;
+     sprintf(hv+strlen(hv), "%02d", v);
+    } else { strcat(hv, mv); }
+    Fl_Input::value(hv);
+    Fl_Input::position(np);
+   }
+  }
+ }
+
+ 
+ 
+ 
+
+ void Fl_Clock_Input::incr(){
+  const char *itext = Fl_Input::value();
+  char hv[8]; memset(hv, 0, 8);
+  char mv[8]; memset(mv, 0, 8);
+  char nv[8]; memset(nv, 0, 8);
+  int v_hv, v_mv;
+  
+  memcpy(hv, itext, 2);
+  memcpy(mv, itext+3, 2);
+  v_hv = strtol(hv, NULL, 10);
+  v_mv = strtol(mv, NULL, 10);
+  
+  if(_lp < 3){ // hours
+   v_hv++;
+   if(v_hv > 23){ v_hv = 0; }
+   sprintf(nv, "%02d", v_hv);
+   memcpy(hv, nv, 2);
+  }
+  
+  else { // minutes
+   v_mv++;
+   if(v_mv > 59){
+    v_hv++;
+    if(v_hv > 23){ v_hv = 0; }
+    sprintf(nv, "%02d", v_hv);
+    memcpy(hv, nv, 2);
+    v_mv = 0;
+   }
+   sprintf(nv, "%02d", v_mv);
+   memcpy(mv, nv, 2);
+  }
+  _hours = v_hv;
+  _minutes = v_mv;
+  sprintf(hv+2, ":%s", mv);
+  Fl_Input::value(hv);
+  Fl_Input::position(_lp);
+ }
+ 
+ 
+ 
+ 
+ void Fl_Clock_Input::decr(){
+  
+  const char *itext = Fl_Input::value();
+  char hv[8]; memset(hv, 0, 8);
+  char mv[8]; memset(mv, 0, 8);
+  char nv[8]; memset(nv, 0, 8);
+  int v_hv, v_mv;
+  
+  memcpy(hv, itext, 2);
+  memcpy(mv, itext+3, 2);
+  v_hv = strtol(hv, NULL, 10);
+  v_mv = strtol(mv, NULL, 10);
+  
+  if(_lp < 3){ // hours
+   v_hv--;
+   if(v_hv < 0){ v_hv = 23; }
+   sprintf(nv, "%02d", v_hv);
+   memcpy(hv, nv, 2);
+  }
+  
+  else { // minutes
+   v_mv--;
+   if(v_mv < 0){
+    v_hv--;
+    if(v_hv < 0){ v_hv = 23; }
+    sprintf(nv, "%02d", v_hv);
+    memcpy(hv, nv, 2);
+    v_mv = 59;
+   }
+   sprintf(nv, "%02d", v_mv);
+   memcpy(mv, nv, 2);
+  }
+  _hours = v_hv;
+  _minutes = v_mv;
+  sprintf(hv+2, ":%s", mv);
+  Fl_Input::value(hv);
+  Fl_Input::position(_lp);
+  
+ }
+ 
+ 
+ 
+ 
+ void Fl_Clock_Input::get_values(int &hour, int &minutes){
+  hour = _hours;
+  minutes = _minutes;
+ }
+ 
+ 
+ void Fl_Clock_Input::set_values(int hour, int minute, int pos){
+  if(hour < 0 || hour > 23){ return; }
+  if(minute < 0 || minute > 59){ return; }
+  _hours = hour;
+  _minutes = minute;
+  update(pos);
+ }
+ 
+ 
+ void Fl_Clock_Input::hours(int hour){
+  if(hour >= 0 && hour <=23){
+   _hours = hour;
+   update();
+  }
+ }
+ 
+ 
+ void Fl_Clock_Input::minutes(int minute){
+  if(minute >= 0 && minute <= 59){
+   _minutes = minute;
+   update();
+  }
+ }
+ 
+ 
+ void Fl_Clock_Input::update(int pos){
+  char str[8];
+  snprintf(str, 8, "%02d:%02d", _hours, _minutes);
+  Fl_Input::value(str);
+  if(pos >= 0){ position(pos); }
+  else { position(_lp); }
+  redraw();
+ }
+ 
+ 
+ 
+#endif
diff -U 3 -H -d -r -N -- src/Fl_Clock_Spinner.cxx src/Fl_Clock_Spinner.cxx
--- src/Fl_Clock_Spinner.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/Fl_Clock_Spinner.cxx	2013-12-21 09:51:00.342448120 +0600
@@ -0,0 +1,122 @@
+// Fl_Clock_Spinner (written by "Dmitrij K" <kdiman at live dot ru>) for the Fast Light Tool Kit (FLTK).
+//  license:   http://www.fltk.org/COPYING.php
+
+#ifndef Fl_Clock_Spinner_cxx
+#define Fl_Clock_Spinner_cxx
+
+#include <FL/Fl_Clock_Spinner.H>
+#include <FL/names.h>
+
+// g++ -I/usr/local/include/FL -I../ -c Fl_Clock_Spinner.cxx
+
+ Fl_Clock_Spinner::Fl_Clock_Spinner(int X,int Y,int W,int H,const char*L)
+ :Fl_Group(X,Y,W,H,L),
+ _input(X,Y,W - BUTTON_ARROW_WIDTH, H),
+ _up(X + W - BUTTON_ARROW_WIDTH, Y+1, BUTTON_ARROW_WIDTH, H / 2, "@-42<"),
+ _down(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2, "@-42>"){
+  end();
+  _up.align(FL_ALIGN_TOP);
+  _down.align(FL_ALIGN_BOTTOM);
+  
+  //_input.value(12, 30);
+  
+  resize(X,Y,W,H);
+  //type(FL_READONLY_CLOCK_SPINNER);
+  
+  _up.callback((Fl_Callback *)sb_cb, this);
+  _down.callback((Fl_Callback *)sb_cb, this);
+  _input.when(FL_WHEN_ENTER_KEY | FL_WHEN_RELEASE);
+  _input.callback((Fl_Callback *)sb_cb, this);
+ }
+ 
+ 
+ 
+ void Fl_Clock_Spinner::resize(int X,int Y,int W,int H){
+  Fl_Group::resize(X,Y,W,H);
+  _input.resize(X,Y,W - BUTTON_ARROW_WIDTH, H);
+  _up.resize(X + W - BUTTON_ARROW_WIDTH, Y+1, BUTTON_ARROW_WIDTH, H / 2);
+  _down.resize(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2);
+ }
+ 
+ 
+ int Fl_Clock_Spinner::handle(int e){
+  //printf("Fl_Clock_Spinner: %s\n", fl_eventnames[e]);
+  switch(e){
+   case FL_FOCUS:{
+    if(Fl::focus() != &_input && _input.active()){ _input.take_focus(); }
+    break;
+   }
+   case FL_ENTER:
+   case FL_MOVE:
+   case FL_PUSH:{
+    int X, Y;
+    int xx, yy, ww, hh;
+    X=Fl::event_x(); Y=Fl::event_y();
+    xx = x()+_input.w();
+    yy = y();
+    ww = xx+BUTTON_ARROW_WIDTH;
+    hh = y()+h()-1;
+//   printf("X: %d; Y: %d\n", X, Y);
+//   printf("xx: %d; yy: %d\n", xx, yy);
+//   printf("ww: %d; hh: %d\n\n", ww, hh);
+  
+    if(X >= xx && Y >= yy && X < ww && Y < hh){
+     fl_cursor(FL_CURSOR_DEFAULT,FL_BLACK,FL_WHITE);
+     return Fl_Group::handle(e);
+    }
+    break;
+   }
+   default: break;
+  }
+  
+  return _input.handle(e);
+ }
+ 
+ 
+ 
+ 
+ void Fl_Clock_Spinner::sb_cb(Fl_Widget *w, Fl_Clock_Spinner *sb){
+  
+  if(w == &(sb->_up)){
+   sb->_input.incr();
+   sb->take_focus();
+   //sb->_input.take_focus();
+   //sb->_input.handle(FL_PUSH);
+  }
+  
+  else if(w == &(sb->_down)){
+   sb->_input.decr();
+   sb->take_focus();
+   //sb->_input.take_focus();
+   //sb->_input.handle(FL_PUSH);
+  }
+  
+  sb->do_callback();
+ }
+
+ 
+ 
+ void Fl_Clock_Spinner::type(int t){
+  if(t == FL_READONLY_CLOCK_SPINNER){
+   Fl_Group::type(t);
+   _up.deactivate();
+   _down.deactivate();
+   _input.type(FL_INPUT_READONLY);
+   _input.visible_focus(0);
+   redraw();
+  }
+  else {
+   if(Fl_Group::type() != FL_NORMAL_CLOCK_SPINNER){
+    Fl_Group::type(FL_NORMAL_CLOCK_SPINNER);
+    _up.activate();
+   _down.activate();
+   _input.type(FL_NORMAL_INPUT);
+   _input.visible_focus(1);
+   redraw();
+   }
+  }
+ }
+ 
+ 
+ 
+#endif
diff -U 3 -H -d -r -N -- src/Fl_Counter.cxx src/Fl_Counter.cxx
--- src/Fl_Counter.cxx	2012-07-24 10:37:22.000000000 +0600
+++ src/Fl_Counter.cxx	2013-12-21 09:51:00.343448120 +0600
@@ -20,10 +20,12 @@
 #include <FL/Fl_Counter.H>
 #include <FL/Fl_Simple_Counter.H>
 #include <FL/fl_draw.H>
+#include "fl_oxy.h"
 
 void Fl_Counter::draw() {
   int i; Fl_Boxtype boxtype[5];
   Fl_Color selcolor;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
 
   boxtype[0] = box();
   if (boxtype[0] == FL_UP_BOX) boxtype[0] = FL_DOWN_BOX;
@@ -36,14 +38,14 @@
 
   int xx[5], ww[5];
   if (type() == FL_NORMAL_COUNTER) {
-    int W = w()*15/100;
+    int W = flag_oxy? h() : w()*15/100;
     xx[1] = x();	 ww[1] = W;
     xx[2] = x()+1*W;     ww[2] = W;
     xx[0] = x()+2*W;     ww[0] = w()-4*W;
     xx[3] = x()+w()-2*W; ww[3] = W;
     xx[4] = x()+w()-1*W; ww[4] = W;
   } else {
-    int W = w()*20/100;
+    int W = flag_oxy? h() : w()*20/100;
     xx[1] = 0;	         ww[1] = 0;
     xx[2] = x();	 ww[2] = W;
     xx[0] = x()+W;	 ww[0] = w()-2*W;
@@ -63,18 +65,50 @@
     selcolor = labelcolor();
   else
     selcolor = fl_inactive(labelcolor());
-
+  
+  int x1, y1;
+  
   if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
-    fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor);
+   draw_box(boxtype[1], xx[1], y(), ww[1], h(), color());
+   if(flag_oxy){
+    x1 = xx[1]+ww[1]/2-1; y1 = y()+h()/2-4;
+    // draw two left arrows
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+    x1+=4;
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+   }
+   else { fl_draw_symbol("@-4<<", xx[1], y(), ww[1], h(), selcolor); }
   }
+  
+  
   draw_box(boxtype[2], xx[2], y(), ww[2], h(), color());
-  fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor);
+  if(flag_oxy){
+   x1 = xx[2]+ww[2]/2+2; y1 = y()+h()/2-4;
+   // draw one left arrow
+    oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK);
+  }
+  else { fl_draw_symbol("@-4<",  xx[2], y(), ww[2], h(), selcolor); }
+  
+  
   draw_box(boxtype[3], xx[3], y(), ww[3], h(), color());
-  fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor);
+  if(flag_oxy){
+   x1 = xx[3]+ww[3]/2-2; y1 = y()+h()/2-4;
+   // draw one right arrow
+    oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+  }
+  else { fl_draw_symbol("@-4>",  xx[3], y(), ww[3], h(), selcolor); }
+  
+  
   if (type() == FL_NORMAL_COUNTER) {
-    draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
-    fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor);
+   draw_box(boxtype[4], xx[4], y(), ww[4], h(), color());
+    if(flag_oxy){
+     x1 = xx[4]+ww[4]/2-4; y1 = y()+h()/2-4;
+     // draw two right arrows
+     oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+     x1+=4;
+     oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK);
+   }
+   else { fl_draw_symbol("@-4>>", xx[4], y(), ww[4], h(), selcolor); }
   }
 }
 
diff -U 3 -H -d -r -N -- src/Fl_Group.cxx src/Fl_Group.cxx
--- src/Fl_Group.cxx	2012-07-24 10:37:22.000000000 +0600
+++ src/Fl_Group.cxx	2013-12-21 09:51:00.343448120 +0600
@@ -828,30 +828,30 @@
 }
 
 
-Fl_Input_Choice::Fl_Input_Choice (int X,int Y,int W,int H,const char*L) 
-: Fl_Group(X,Y,W,H,L) 
-{
-  Fl_Group::box(FL_DOWN_BOX);
-  align(FL_ALIGN_LEFT);				// default like Fl_Input
-  inp_ = new Fl_Input(inp_x(), inp_y(),
-                      inp_w(), inp_h());
-  inp_->callback(inp_cb, (void*)this);
-  inp_->box(FL_FLAT_BOX);		// cosmetic
-  inp_->when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
-  menu_ = new InputMenuButton(menu_x(), menu_y(),
-                              menu_w(), menu_h());
-  menu_->callback(menu_cb, (void*)this);
-  menu_->box(FL_FLAT_BOX);				// cosmetic
-  end();
+Fl_Input_Choice::Fl_Input_Choice(int X, int Y, int W, int H, const char *L)
+ : Fl_Menu_(X,Y,W,H,L),
+ input_(X,Y,W,H,0),
+ button_(0,0,0,0,0) {
+  box(FL_DOWN_BOX);
+  down_box(FL_UP_BOX);
+  align(FL_ALIGN_LEFT);
+  
+  input_.callback(input_cb, (void*)this);
+  input_.box(FL_FLAT_BOX);
+  input_.when(FL_WHEN_CHANGED|FL_WHEN_NOT_CHANGED);
+  
+  button_.box(FL_THIN_UP_BOX);
+  button_.down_box(FL_THIN_UP_BOX);
+  button_.align(FL_ALIGN_BOTTOM);
+  button_.callback(menu_cb, (void*)this);
 }
 
 
 Fl_Spinner::Fl_Spinner(int X, int Y, int W, int H, const char *L)
 : Fl_Group(X, Y, W, H, L),
-  input_(X, Y, W - H / 2 - 2, H),
-  up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2, "@-42<"),
-  down_button_(X + W - H / 2 - 2, Y + H - H / 2,
-               H / 2 + 2, H / 2, "@-42>") 
+  input_(X, Y, W - BUTTON_ARROW_WIDTH, H),
+  up_button_(X + W - BUTTON_ARROW_WIDTH, Y, BUTTON_ARROW_WIDTH, H / 2, "@-42<"), 
+  down_button_(X + W - BUTTON_ARROW_WIDTH, Y + H / 2, BUTTON_ARROW_WIDTH, H / 2, "@-42>") 
 {
   end();
   
@@ -869,8 +869,15 @@
   input_.callback((Fl_Callback *)sb_cb, this);
   
   up_button_.callback((Fl_Callback *)sb_cb, this);
+  up_button_.align(FL_ALIGN_TOP);
+  up_button_.box(FL_THIN_UP_BOX); up_button_.down_box(FL_THIN_DOWN_BOX);
   
   down_button_.callback((Fl_Callback *)sb_cb, this);
+  down_button_.align(FL_ALIGN_BOTTOM);
+  down_button_.box(FL_THIN_UP_BOX); down_button_.down_box(FL_THIN_DOWN_BOX);
+  
+  if(Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){ resize(X,Y,W,H); }
+  
 }
 
 
diff -U 3 -H -d -r -N -- src/Fl_Light_Button.cxx src/Fl_Light_Button.cxx
--- src/Fl_Light_Button.cxx	2012-12-07 22:29:49.000000000 +0600
+++ src/Fl_Light_Button.cxx	2013-12-21 09:51:00.343448120 +0600
@@ -36,7 +36,8 @@
   int W;
   int dx, dy;
 
-  W  = labelsize();
+  if(down_box() && Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){ W = 15; } // for theme `oxy' - fixing size of box
+  else { W  = labelsize(); }
   dx = Fl::box_dx(box()) + 2;
   dy = (h() - W) / 2;
   // if (dy < 0) dy = 0;         // neg. offset o.k. for vertical centering
@@ -84,6 +85,8 @@
 	    fl_color(fl_color_average(FL_WHITE, FL_SELECTION_COLOR, 0.2f));
 	  } else fl_color(col);
 
+	  if(Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){ tW = 5; } // for theme `oxy' - fixing size of inline circle
+
 	  switch (tW) {
 	    // Larger circles draw fine...
 	    default :
diff -U 3 -H -d -r -N -- src/Fl_Menu.cxx src/Fl_Menu.cxx
--- src/Fl_Menu.cxx	2012-12-07 22:29:49.000000000 +0600
+++ src/Fl_Menu.cxx	2013-12-21 09:51:00.344448120 +0600
@@ -28,6 +28,7 @@
 #include <FL/fl_draw.H>
 #include <stdio.h>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 /** Size of the menu starting from this menu item */
 int Fl_Menu_Item::size() const {
@@ -146,6 +147,7 @@
 /** Draws the menu item in bounding box x,y,w,h, optionally selects the item. */
 void Fl_Menu_Item::draw(int x, int y, int w, int h, const Fl_Menu_* m,
 			int selected) const {
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
   Fl_Label l;
   l.value   = text;
   l.image   = 0;
@@ -158,7 +160,7 @@
   Fl_Color color = m ? m->color() : FL_GRAY;
   if (selected) {
     Fl_Color r = m ? m->selection_color() : FL_SELECTION_COLOR;
-    Fl_Boxtype b = m && m->down_box() ? m->down_box() : FL_FLAT_BOX;
+    Fl_Boxtype b = flag_oxy?FL_UP_BOX:(m && m->down_box() ? m->down_box() : FL_FLAT_BOX);
     if (fl_contrast(r,color)!=r) { // back compatibility boxtypes
       if (selected == 2) { // menu title
 	r = color;
@@ -182,6 +184,7 @@
   if (flags & (FL_MENU_TOGGLE|FL_MENU_RADIO)) {
     int d = (h - FL_NORMAL_SIZE + 1) / 2;
     int W = h - 2 * d;
+    if(flag_oxy){ W = 15; d--; } // for theme `oxy' - fixing size of box
 
     if (flags & FL_MENU_RADIO) {
       fl_draw_box(FL_ROUND_DOWN_BOX, x+2, y+d, W, W, FL_BACKGROUND2_COLOR);
@@ -189,7 +192,9 @@
 	int tW = (W - Fl::box_dw(FL_ROUND_DOWN_BOX)) / 2 + 1;
 	if ((W - tW) & 1) tW++;	// Make sure difference is even to center
 	int td = (W - tW) / 2;
+    
         if (Fl::scheme()) {
+         if(flag_oxy){ td = Fl::box_dx(FL_ROUND_DOWN_BOX) + 1; }
 	  if (!strcmp(Fl::scheme(), "gtk+")) {
 	    fl_color(FL_SELECTION_COLOR);
 	    tW --;
@@ -198,6 +203,8 @@
 	  } else fl_color(labelcolor_);
 	} else fl_color(labelcolor_);
 
+	if(flag_oxy){ tW = 5; } // for theme `oxy' - fixing size of inline circle
+
 	switch (tW) {
 	  // Larger circles draw fine...
 	  default :
@@ -277,6 +284,7 @@
 
   Fl::screen_work_area(scr_x, scr_y, scr_w, scr_h);
   if (!right_edge || right_edge > scr_x+scr_w) right_edge = scr_x+scr_w;
+  
 
   end();
   set_modal();
@@ -427,6 +435,8 @@
 void menuwindow::drawentry(const Fl_Menu_Item* m, int n, int eraseit) {
   if (!m) return; // this happens if -1 is selected item and redrawn
 
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+
   int BW = Fl::box_dx(box());
   int xx = BW;
   int W = w();
@@ -436,7 +446,7 @@
 
   if (eraseit && n != selected) {
     fl_push_clip(xx+1, yy-(LEADING-2)/2, ww-2, hh+(LEADING-2));
-    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color());
+    draw_box(box(), 0, 0, w(), h(), button ? button->color() : color()); // NOTE : bg-box for item
     fl_pop_clip();
   }
 
@@ -444,10 +454,16 @@
 
   // the shortcuts and arrows assume fl_color() was left set by draw():
   if (m->submenu()) {
-    int sz = (hh-7)&-2;
-    int y1 = yy+(hh-sz)/2;
-    int x1 = xx+ww-sz-3;
-    fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2);
+   int sz = (hh-7)&-2;
+   int y1 = yy+(hh-sz)/2;
+   int x1 = xx+ww-sz-3;
+   
+   // draw arrows for the OXY theme
+   if (flag_oxy) {
+    x1+=(sz/2-BW*2-1);
+    y1=yy+hh/2-4; // 4 is half of arrow height
+    oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), (n==selected)?selection_color():FL_BLACK);
+   } else { fl_polygon(x1+2, y1, x1+2, y1+sz, x1+sz/2+2, y1+sz/2); }
   } else if (m->shortcut_) {
     Fl_Font f = m->labelsize_ || m->labelfont_ ? (Fl_Font)m->labelfont_ :
                     button ? button->textfont() : FL_HELVETICA;
diff -U 3 -H -d -r -N -- src/Fl_Menu_Button.cxx src/Fl_Menu_Button.cxx
--- src/Fl_Menu_Button.cxx	2012-08-17 03:35:14.000000000 +0600
+++ src/Fl_Menu_Button.cxx	2013-12-21 09:51:00.344448120 +0600
@@ -19,7 +19,7 @@
 #include <FL/Fl.H>
 #include <FL/Fl_Menu_Button.H>
 #include <FL/fl_draw.H>
-
+#include "fl_oxy.h"
 
 static Fl_Menu_Button	*pressed_menu_button_ = 0;
 
@@ -33,10 +33,20 @@
   draw_label(x()+Fl::box_dx(box()), y(), X-x()+2, h());
   if (Fl::focus() == this) draw_focus();
   // ** if (box() == FL_FLAT_BOX) return; // for XForms compatibility
-  fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
-  fl_line(X+H/2, Y+H, X, Y, X+H, Y);
-  fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
-  fl_line(X+H, Y, X+H/2, Y+H);
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  
+  if(flag_oxy){
+    int x1 = X;
+    int y1 = Y+3;
+    oxy_arrow(x1, y1, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK);
+  }
+  
+  else {
+   fl_color(active_r() ? FL_DARK3 : fl_inactive(FL_DARK3));
+   fl_line(X+H/2, Y+H, X, Y, X+H, Y);
+   fl_color(active_r() ? FL_LIGHT3 : fl_inactive(FL_LIGHT3));
+   fl_line(X+H, Y, X+H/2, Y+H);
+  }
 }
 
 
diff -U 3 -H -d -r -N -- src/Fl_Scrollbar.cxx src/Fl_Scrollbar.cxx
--- src/Fl_Scrollbar.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/Fl_Scrollbar.cxx	2013-12-21 09:51:00.345448120 +0600
@@ -22,6 +22,7 @@
 #include <FL/fl_draw.H>
 #include <math.h>
 #include "flstring.h"
+#include "fl_oxy.h"
 
 #define INITIALREPEAT .5
 #define REPEAT .05
@@ -222,10 +223,16 @@
 	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1-1, yy1+w1, x1+w1, yy1);
 	x1 += (W-H);
 	fl_polygon(x1, yy1, x1+1, yy1+w1, x1, yy1+2*w1, x1+w1, yy1+w1);
+      } else if(Fl::scheme_ && !strcmp(Fl::scheme_, "oxy")){
+       x1 = X+H/2+2;
+       int y1 = Y+H/2-3-2;
+       oxy_arrow(x1, y1, FL_ALIGN_LEFT, active_r(), color(), FL_BLACK); /// LEFT ARROW
+       x1 += (W-H)-4;
+       oxy_arrow(x1, y1, FL_ALIGN_RIGHT, active_r(), color(), FL_BLACK); /// RIGHT ARROW
       } else {
-	fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
-	x1 += (W-H);
-	fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
+    fl_polygon(x1, yy1+w1, x1+w1, yy1+2*w1, x1+w1, yy1);
+    x1 += (W-H);
+    fl_polygon(x1, yy1, x1, yy1+2*w1, x1+w1, yy1+w1);
       }
     }
   } else { // vertical
@@ -248,6 +255,12 @@
 	yy1 += H-W;
 	fl_polygon(x1, yy1, x1+w1, yy1+1, x1+w1, yy1+w1);
 	fl_polygon(x1+w1, yy1+1, x1+2*w1, yy1, x1+w1, yy1+w1);
+      } else if(Fl::scheme_ && !strcmp(Fl::scheme_, "oxy")){
+       x1 = X+W/2-4;
+       int y1 = Y+W/2+1;
+       oxy_arrow(x1, y1, FL_ALIGN_TOP, active_r(), color(), FL_BLACK); /// TOP ARROW
+      y1 += H-W-3;
+      oxy_arrow(x1, y1, FL_ALIGN_BOTTOM, active_r(), color(), FL_BLACK); /// BOTTOM ARROW
       } else {
 	fl_polygon(x1, yy1+w1, x1+2*w1, yy1+w1, x1+w1, yy1);
 	yy1 += H-W;
diff -U 3 -H -d -r -N -- src/Fl_Table.cxx src/Fl_Table.cxx
--- src/Fl_Table.cxx	2013-09-25 01:58:24.000000000 +0600
+++ src/Fl_Table.cxx	2013-12-21 10:02:25.078419323 +0600
@@ -804,6 +804,7 @@
               _dragging_x = _event_x;
               ret = 1;
             } else {
+              if(Fl::focus() != this && contains(Fl::focus())){ return 0; } // NOTE (kdiman) : for avoid selection not clicked cells
               // Not resizing? Select the column
               current_col = select_col = C;
               current_row = 0;
@@ -830,6 +831,7 @@
               _dragging_y = _event_y; 
               ret = 1;
             } else {
+              if(Fl::focus() != this && contains(Fl::focus())){ return 0; } // NOTE (kdiman) : for avoid selection not clicked cells
               // Not resizing? Select the row
               current_row = select_row = R;
               current_col = 0;
@@ -896,6 +898,7 @@
         if (_event_button == 1 && 
             _selecting == CONTEXT_CELL &&
             context == CONTEXT_CELL) {
+          if(_event_clicks){ break; } // NOTE (kdiman) : for avoid FL_DRAG for double click
           if (select_row != R || select_col != C) {
             damage_zone(current_row, current_col, select_row, select_col, R, C);
           }
diff -U 3 -H -d -r -N -- src/Fl_Tabs.cxx src/Fl_Tabs.cxx
--- src/Fl_Tabs.cxx	2013-09-25 01:58:24.000000000 +0600
+++ src/Fl_Tabs.cxx	2013-12-21 09:51:00.345448120 +0600
@@ -104,14 +104,24 @@
   int H = h();
   int H2 = y();
   Fl_Widget*const* a = array();
+  
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  int HT = 0, ls = 0;
+  
   for (int i=children(); i--;) {
     Fl_Widget* o = *a++;
     if (o->y() < y()+H) H = o->y()-y();
     if (o->y()+o->h() > H2) H2 = o->y()+o->h();
+    if(flag_oxy && o->labelsize() > ls){
+     // HACK (kdiman) : for preven growing tab header height we are fixing it with biggest height of child labelsize + 10px
+     ls = o->labelsize();
+     fl_font(o->labelfont(), ls);
+     HT = fl_height()+10;
+    }
   }
   H2 = y()+h()-H2;
-  if (H2 > H) return (H2 <= 0) ? 0 : -H2;
-  else return (H <= 0) ? 0 : H;
+  if (H2 > H) return (H2 <= 0) ? 0 : (flag_oxy?-HT:-H2);
+  else return (H <= 0) ? 0 : (flag_oxy?HT:H);
 }
 
 /**
@@ -457,6 +467,7 @@
   int dy = Fl::box_dy(box());
   char prev_draw_shortcut = fl_draw_shortcut;
   fl_draw_shortcut = 1;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
 
   Fl_Boxtype bt = (o==push_ &&!sel) ? fl_down(box()) : box();
 
@@ -471,7 +482,7 @@
 
     H += dh;
 
-    Fl_Color c = sel ? selection_color() : o->selection_color();
+    Fl_Color c = sel ? selection_color() : (flag_oxy?fl_color_average(o->selection_color(), FL_BLACK, 0.90):o->selection_color());
 
     draw_box(bt, x1, y() + yofs, W, H + 10 - yofs, c);
 
@@ -485,7 +496,7 @@
     // Restore the original label color...
     o->labelcolor(oc);
 
-    if (Fl::focus() == this && o->visible())
+    if (Fl::focus() == this && o->visible() && !flag_oxy)
       draw_focus(box(), x1, y(), W, H);
 
     fl_pop_clip();
@@ -497,7 +508,7 @@
 
     H += dh;
 
-    Fl_Color c = sel ? selection_color() : o->selection_color();
+    Fl_Color c = sel ? selection_color() : (flag_oxy?fl_color_average(o->selection_color(), FL_BLACK, 0.90):o->selection_color());
 
     draw_box(bt, x1, y() + h() - H - 10, W, H + 10 - yofs, c);
 
@@ -511,7 +522,7 @@
     // Restore the original label color...
     o->labelcolor(oc);
 
-    if (Fl::focus() == this && o->visible())
+    if (Fl::focus() == this && o->visible() && !flag_oxy)
       draw_focus(box(), x1, y() + h() - H, W, H);
 
     fl_pop_clip();
diff -U 3 -H -d -r -N -- src/Fl_Tree.cxx src/Fl_Tree.cxx
--- src/Fl_Tree.cxx	2013-12-16 00:59:02.000000000 +0600
+++ src/Fl_Tree.cxx	2013-12-21 15:01:46.538472621 +0600
@@ -740,9 +740,12 @@
     {
       int xmax = 0;
       fl_font(_prefs.labelfont(), _prefs.labelsize());
+      if (Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){
+       if( _prefs.selectbox() != FL_UP_BOX){ _prefs.selectbox(FL_UP_BOX); }
+      }
       _root->draw(X, Y, W, 				// descend into tree here to draw it
-		  (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
-		  xmax, 1, 1);
+	   (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
+	   xmax, 1, 1);
     }
     fl_pop_clip();
   }  
@@ -812,12 +815,16 @@
       W += _prefs.openicon()->w();
     }
     int Ysave = Y;
-    fl_push_clip(cx,cy,cw,ch);
+    fl_push_clip(cx,cy,_vscroll->visible()?cw-_vscroll->w():cw,ch);
     {
       fl_font(_prefs.labelfont(), _prefs.labelsize());
-      _root->draw(X, Y, W, this,
-		  (Fl::focus()==this)?_item_focus:0,	// show focus item ONLY if Fl_Tree has focus
-		  _prefs);
+      // HACK (kdiman) : If scheme was taken from enveronment (FLTK_SCHEME), then  needs to set style of selectbox. 
+      if (Fl::scheme() && !strcmp(Fl::scheme(), "oxy")){
+       if( _prefs.selectbox() != FL_UP_BOX){ _prefs.selectbox(FL_UP_BOX); }
+      }
+      _root->draw(X, Y, _vscroll->visible()?W-_vscroll->w():W, this,
+          (Fl::focus()==this)?_item_focus:0,    // show focus item ONLY if Fl_Tree has focus
+          _prefs);
     }
     fl_pop_clip();
     
diff -U 3 -H -d -r -N -- src/Fl_Tree_Item.cxx src/Fl_Tree_Item.cxx
--- src/Fl_Tree_Item.cxx	2013-12-16 00:59:02.000000000 +0600
+++ src/Fl_Tree_Item.cxx	2013-12-21 17:24:34.896265698 +0600
@@ -10,6 +10,8 @@
 #include <FL/Fl_Tree_Prefs.H>
 #include <FL/Fl_Tree.H>
 
+#include "fl_oxy.h"
+
 //////////////////////
 // Fl_Tree_Item.cxx
 //////////////////////
@@ -650,6 +652,8 @@
   int H = calc_item_height(prefs);	// height of item
   int H2 = H + prefs.linespacing();	// height of item with line spacing
 
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+
   // Update the xywh of this item
   _xywh[0] = X;
   _xywh[1] = Y;
@@ -736,13 +740,22 @@
     //    'clipped' is an optimization to prevent drawing anything offscreen.
     //
     if ( drawthis ) {						// draw this item at all?
+     int n_bg_x = bg_x, n_bg_w = bg_w;
+     int tree_tix = _tree->_tix;
+     int tree_tiw = _tree->_tiw;
+     int off_x = bg_x-tree_tix; if(off_x < 0){ off_x = 0; }
+     
+     if(flag_oxy && _tree->_hscroll->visible() && (tree_tix > bg_x-off_x)){
+      n_bg_x = tree_tix; n_bg_w = tree_tiw;
+     }
+     
       if ( (_tree->damage() & ~FL_DAMAGE_CHILD) || !render ) {	// non-child damage?
 	// Draw connectors
 	if ( render && prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
 	  // Horiz connector between center of icon and text
 	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
+	  if (is_root()) draw_horizontal_connector(hconn_x_center, flag_oxy?hconn_x2-5:hconn_x2, item_y_center, prefs);
+	  else           draw_horizontal_connector(hconn_x, flag_oxy?hconn_x2-5:hconn_x2, item_y_center, prefs);
 	  // Small vertical line down to children
 	  if ( has_children() && is_open() )
 	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
@@ -756,19 +769,26 @@
 	if ( render && has_children() && prefs.showcollapse() ) {
 	  // Draw icon image
 	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
+	    if (flag_oxy) oxy_arrow(uicon_x-11, icon_y+3, FL_ALIGN_BOTTOM, is_active(), _labelbgcolor == 0xffffffff ? _tree->color() : _labelbgcolor);
+        else prefs.closeicon()->draw(icon_x,icon_y);
 	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
+	    if (flag_oxy) oxy_arrow(uicon_x-8, icon_y+1, FL_ALIGN_RIGHT, is_active(), _labelbgcolor == 0xffffffff ? _tree->color() : _labelbgcolor);
+        else prefs.openicon()->draw(icon_x,icon_y);
 	  }
 	}
+	
 	// Background for this item
 	// Draw bg only if different from tree's bg
 	if ( render && (bg != _tree->color() || is_selected()) ) {
 	  if ( is_selected() ) {			// Selected? Use selectbox() style
-	    fl_draw_box(prefs.selectbox(),bg_x,bg_y,bg_w,bg_h,bg);
+	    if(flag_oxy){
+         fl_draw_box(prefs.selectbox(),n_bg_x,bg_y+1,n_bg_w,bg_h,bg);
+        }
+        else { fl_draw_box(prefs.selectbox(),bg_x,bg_y,bg_w,bg_h,bg); }
 	  } else {					// Not Selected? use plain filled rectangle
 	    fl_color(bg);
-	    fl_rectf(bg_x,bg_y,bg_w,bg_h);
+        if(flag_oxy){ fl_rectf(n_bg_x,bg_y,n_bg_w,bg_h); }
+	    else { fl_rectf(bg_x,bg_y,bg_w,bg_h); }
 	  }
 	  if ( widget() ) widget()->damage(FL_DAMAGE_ALL);	// if there's a child widget, we just damaged it
 	}
@@ -776,11 +796,21 @@
 	if ( render && usericon() ) {
 	  // Item has user icon? Use it
 	  int uicon_y = item_y_center - (usericon()->h() >> 1);
-	  usericon()->draw(uicon_x,uicon_y);
+      if(flag_oxy){
+       fl_push_clip(n_bg_x+4, bg_y, n_bg_w-8, bg_h);
+       usericon()->draw(uicon_x+4,uicon_y);
+       fl_pop_clip();
+      }
+      else { usericon()->draw(uicon_x,uicon_y); }
 	} else if ( render && prefs.usericon() ) {
 	  // Prefs has user icon? Use it
 	  int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	  prefs.usericon()->draw(uicon_x,uicon_y);
+      if(flag_oxy){
+       fl_push_clip(n_bg_x+4, bg_y, n_bg_w-8, bg_h);
+       prefs.usericon()->draw(uicon_x+4,uicon_y);
+       fl_pop_clip();
+      }
+      else { prefs.usericon()->draw(uicon_x,uicon_y); }
 	}
 	// Draw label
         if ( _label && 
@@ -794,7 +824,13 @@
 
 	  int lw=0, lh=0;
 	  fl_measure(_label, lw, lh);		// get box around text (including white space)
-	  if ( render ) fl_draw(_label, label_x, label_y);
+	  if ( render ){
+       if(flag_oxy){
+        fl_push_clip(n_bg_x+4, bg_y, n_bg_w-8, bg_h);
+        fl_draw(_label, label_x, label_y);
+        fl_pop_clip();
+       } else { fl_draw(_label, label_x, label_y); }
+      }
 	  ixmax = label_x + lw;			// update max width of drawn item
 	}
       }			// end non-child damage
@@ -812,7 +848,12 @@
            Fl::visible_focus() && 
 	   Fl::focus() == _tree &&
 	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,bg_x+1,bg_y+1,bg_w-1,bg_h-1);
+       if(flag_oxy){
+        draw_item_focus(FL_UP_BOX,fg,bg,n_bg_x,bg_y+1,n_bg_w+1,bg_h+1);
+       }
+       else {
+        draw_item_focus(FL_NO_BOX,fg,bg,bg_x+1,bg_y+1,bg_w-1,bg_h-1);
+       }
       }
     }			// end drawthis
   }			// end clipped
@@ -863,6 +904,7 @@
   int tree_bot = tree_top + tree->h();
   int H = calc_item_height(prefs);	// height of item
   int H2 = H + prefs.linespacing();	// height of item with line spacing
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
 
   // Update the xywh of this item
   _xywh[0] = X;
@@ -960,8 +1002,8 @@
 	if ( prefs.connectorstyle() != FL_TREE_CONNECTOR_NONE ) {
 	  // Horiz connector between center of icon and text
 	  // if this is root, the connector should not dangle in thin air on the left
-	  if (is_root()) draw_horizontal_connector(hconn_x_center, hconn_x2, item_y_center, prefs);
-	  else           draw_horizontal_connector(hconn_x, hconn_x2, item_y_center, prefs);
+	  if (is_root()) draw_horizontal_connector(hconn_x_center, flag_oxy?hconn_x2-5:hconn_x2, item_y_center, prefs);
+      else           draw_horizontal_connector(hconn_x, flag_oxy?hconn_x2-5:hconn_x2, item_y_center, prefs);
 	  // Small vertical line down to children
 	  if ( has_children() && is_open() )
 	    draw_vertical_connector(hconn_x_center, item_y_center, Y+H2, prefs);
@@ -975,9 +1017,11 @@
 	if ( has_children() && prefs.showcollapse() ) {
 	  // Draw icon image
 	  if ( is_open() ) {
-	    prefs.closeicon()->draw(icon_x,icon_y);
+	     if (flag_oxy) oxy_arrow(uicon_x-11, icon_y+3, FL_ALIGN_BOTTOM, is_active(), _labelbgcolor == 0xffffffff ? tree->color() : _labelbgcolor);
+        else prefs.closeicon()->draw(icon_x,icon_y);
 	  } else {
-	    prefs.openicon()->draw(icon_x,icon_y);
+	    if (flag_oxy) oxy_arrow(uicon_x-8, icon_y+2, FL_ALIGN_RIGHT, is_active(), _labelbgcolor == 0xffffffff ? tree->color() : _labelbgcolor);
+        else prefs.openicon()->draw(icon_x,icon_y);
 	  }
 	}
 	// Draw the item
@@ -993,7 +1037,7 @@
 	  // Draw bg only if different from tree's bg
 	  if ( bg != tree->color() || is_selected() ) {
 	    if ( is_selected() ) {			// Selected? Use selectbox() style
-	      fl_draw_box(prefs.selectbox(),bg_x,bg_y,bg_w,bg_h,bg);
+	      fl_draw_box(prefs.selectbox(),bg_x,flag_oxy?bg_y+1:bg_y,bg_w,bg_h,bg);
 	    } else {					// Not Selected? use plain filled rectangle
 	      fl_color(bg);
 	      fl_rectf(bg_x,bg_y,bg_w,bg_h);
@@ -1004,11 +1048,11 @@
 	  if ( usericon() ) {
 	    // Item has user icon? Use it
 	    int uicon_y = item_y_center - (usericon()->h() >> 1);
-	    usericon()->draw(uicon_x,uicon_y);
+	    usericon()->draw(flag_oxy?uicon_x+4:uicon_x,uicon_y);
 	  } else if ( prefs.usericon() ) {
 	    // Prefs has user icon? Use it
 	    int uicon_y = item_y_center - (prefs.usericon()->h() >> 1);
-	    prefs.usericon()->draw(uicon_x,uicon_y);
+	    prefs.usericon()->draw(flag_oxy?uicon_x+4:uicon_x,uicon_y);
 	  }
 	  // Draw label
 #if FLTK_ABI_VERSION >= 10301
@@ -1022,7 +1066,9 @@
 	    fl_color(fg);
 	    fl_font(_labelfont, _labelsize);
 	    int label_y = Y+(H/2)+(_labelsize/2)-fl_descent()/2;
+        fl_push_clip(bg_x+4, bg_y, bg_w-8, bg_h);
 	    fl_draw(_label, label_x, label_y);
+        fl_pop_clip();
 	  }
         }		// end non-custom draw
       }			// end non-child damage
@@ -1037,7 +1083,7 @@
            Fl::visible_focus() && 
 	   Fl::focus() == tree &&
 	   prefs.selectmode() != FL_TREE_SELECT_NONE ) {
-	draw_item_focus(FL_NO_BOX,fg,bg,bg_x+1,bg_y+1,bg_w-1,bg_h-1);
+	draw_item_focus(flag_oxy?FL_UP_BOX:FL_NO_BOX,fg,bg,flag_oxy?bg_x:bg_x+1,bg_y+1,flag_oxy?bg_w+1:bg_w-1,flag_oxy?bg_h+1:bg_h-1);
       }
     }			// end drawthis
   }			// end clipped
diff -U 3 -H -d -r -N -- src/Fl_Tree_Prefs.cxx src/Fl_Tree_Prefs.cxx
--- src/Fl_Tree_Prefs.cxx	2013-11-10 10:33:44.000000000 +0600
+++ src/Fl_Tree_Prefs.cxx	2013-12-21 09:51:00.348448119 +0600
@@ -166,6 +166,8 @@
       _selectbox = _FL_GTK_THIN_UP_BOX;
     } else if ( strcmp(Fl::scheme(), "plastic") == 0 ) {
       _selectbox = _FL_PLASTIC_THIN_UP_BOX;
+    }else if ( strcmp(Fl::scheme(), "oxy") == 0 ) {
+      _selectbox = _FL_OXY_UP_BOX;
     }
   }
 }
diff -U 3 -H -d -r -N -- src/Fl_Widget.cxx src/Fl_Widget.cxx
--- src/Fl_Widget.cxx	2012-05-07 13:18:11.000000000 +0600
+++ src/Fl_Widget.cxx	2013-12-21 09:51:00.349448119 +0600
@@ -177,12 +177,14 @@
 void
 Fl_Widget::draw_focus(Fl_Boxtype B, int X, int Y, int W, int H) const {
   if (!Fl::visible_focus()) return;
+  bool flag_oxy = (Fl::scheme() && !strcmp(Fl::scheme(), "oxy"));
+  if(flag_oxy){ W++; }
   switch (B) {
     case FL_DOWN_BOX:
     case FL_DOWN_FRAME:
     case FL_THIN_DOWN_BOX:
     case FL_THIN_DOWN_FRAME:
-      X ++;
+      if(!flag_oxy){ X ++; }
       Y ++;
     default:
       break;
@@ -193,7 +195,7 @@
 #if defined(USE_X11) || defined(__APPLE_QUARTZ__)
   fl_line_style(FL_DOT);
   fl_rect(X + Fl::box_dx(B), Y + Fl::box_dy(B),
-          W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
+           W - Fl::box_dw(B) - 1, H - Fl::box_dh(B) - 1);
   fl_line_style(FL_SOLID);
 #elif defined(WIN32) 
   // Windows 95/98/ME do not implement the dotted line style, so draw
diff -U 3 -H -d -r -N -- src/Fl_get_system_colors.cxx src/Fl_get_system_colors.cxx
--- src/Fl_get_system_colors.cxx	2012-12-09 23:45:24.000000000 +0600
+++ src/Fl_get_system_colors.cxx	2013-12-21 09:51:00.349448119 +0600
@@ -27,6 +27,7 @@
 #include <FL/Fl_Pixmap.H>
 #include <FL/Fl_Tiled_Image.H>
 #include "tile.xpm"
+#include "fl_oxy.h"
 
 #if defined(WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
 // Visual C++ 2005 incorrectly displays a warning about the use of POSIX APIs
@@ -289,6 +290,7 @@
     if (!fl_ascii_strcasecmp(s, "none") || !fl_ascii_strcasecmp(s, "base") || !*s) s = 0;
     else if (!fl_ascii_strcasecmp(s, "gtk+")) s = strdup("gtk+");
     else if (!fl_ascii_strcasecmp(s, "plastic")) s = strdup("plastic");
+    else if (!fl_ascii_strcasecmp(s, "oxy")) s = strdup("oxy");
     else s = 0;
   }
   if (scheme_) free((void*)scheme_);
@@ -375,6 +377,28 @@
 
     // Use slightly thinner scrollbars...
     Fl::scrollbar_size(15);
+  } else if (scheme_ && !strcmp(scheme_, "oxy")) {
+    // Oxy scheme
+    if (scheme_bg_) {
+      delete scheme_bg_;
+      scheme_bg_ = (Fl_Image *)0;
+    }
+
+    set_boxtype(FL_UP_FRAME,        FL_OXY_UP_FRAME);
+    set_boxtype(FL_DOWN_FRAME,      FL_OXY_DOWN_FRAME);
+    set_boxtype(FL_THIN_UP_FRAME,   FL_OXY_THIN_UP_FRAME);
+    set_boxtype(FL_THIN_DOWN_FRAME, FL_OXY_THIN_DOWN_FRAME);
+
+    set_boxtype(FL_UP_BOX,          FL_OXY_UP_BOX);
+    set_boxtype(FL_DOWN_BOX,        FL_OXY_DOWN_BOX);
+    set_boxtype(FL_THIN_UP_BOX,     FL_OXY_THIN_UP_BOX);
+    set_boxtype(FL_THIN_DOWN_BOX,   FL_OXY_THIN_DOWN_BOX);
+    set_boxtype(_FL_ROUND_UP_BOX,   FL_OXY_ROUND_UP_BOX);
+    set_boxtype(_FL_ROUND_DOWN_BOX, FL_OXY_ROUND_DOWN_BOX);
+
+    // Use slightly thinner scrollbars...
+    Fl::scrollbar_size(15);
+
   } else {
     // Use the standard FLTK look-n-feel...
     if (scheme_bg_) {
diff -U 3 -H -d -r -N -- src/Makefile src/Makefile
--- src/Makefile	2013-04-16 20:02:42.000000000 +0600
+++ src/Makefile	2013-12-21 09:51:00.350448119 +0600
@@ -134,6 +134,11 @@
 	fl_file_dir.cxx \
 	fl_font.cxx \
 	fl_gtk.cxx \
+	fl_oxy.cxx \
+        Fl_Calendar.cxx \
+        Fl_Calendar_Prefs.cxx \
+        Fl_Clock_Input.cxx \
+        Fl_Clock_Spinner.cxx \
 	fl_labeltype.cxx \
 	fl_line_style.cxx \
 	fl_open_uri.cxx \
diff -U 3 -H -d -r -N -- src/fl_boxtype.cxx src/fl_boxtype.cxx
--- src/fl_boxtype.cxx	2011-07-19 10:49:30.000000000 +0600
+++ src/fl_boxtype.cxx	2013-12-21 09:51:00.350448119 +0600
@@ -28,6 +28,7 @@
 #include <FL/Fl.H>
 #include <FL/Fl_Widget.H>
 #include <FL/fl_draw.H>
+#include "fl_oxy.h"
 #include <config.h>
 
 ////////////////////////////////////////////////////////////////
@@ -293,6 +294,18 @@
   {fl_down_box,		1,1,2,2,0}, // _FL_GTK_THIN_ROUND_DOWN_BOX,
   {fl_up_box,		2,2,4,4,0}, // _FL_GTK_ROUND_UP_BOX,
   {fl_down_box,		2,2,4,4,0}, // _FL_GTK_ROUND_DOWN_BOX,
+  {oxy_up_box,		2,2,4,4,0}, // _FL_OXY_UP_BOX,
+  {oxy_down_box,		2,2,4,4,0}, // _FL_OXY_DOWN_BOX,
+  {oxy_up_frame,		2,2,4,4,0}, // _FL_OXY_UP_FRAME,
+  {oxy_down_frame,		2,2,4,4,0}, // _FL_OXY_DOWN_FRAME,
+  {oxy_thin_up_box,		1,1,2,2,0}, // _FL_OXY_THIN_UP_BOX,
+  {oxy_thin_down_box,		1,1,2,2,0}, // _FL_OXY_THIN_DOWN_BOX,
+  {oxy_thin_up_frame,		1,1,2,2,0}, // _FL_OXY_THIN_UP_FRAME,
+  {oxy_thin_down_frame,		1,1,2,2,0}, // _FL_OXY_THIN_DOWN_FRAME,
+  {oxy_round_up_box,		4,4,8,8,0}, // _FL_OXY_ROUND_UP_BOX,
+  {oxy_round_down_box,		4,4,8,8,0}, // _FL_OXY_ROUND_DOWN_BOX,
+  {oxy_button_up_box,		2,2,4,4,0}, // _FL_OXY_BUTTON_UP_BOX,
+  {oxy_button_down_box,		2,2,4,4,0}, // _FL_OXY_BUTTON_DOWN_BOX,
   {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+0
   {fl_down_box,		3,3,6,6,0}, // FL_FREE_BOX+1
   {fl_up_box,		3,3,6,6,0}, // FL_FREE_BOX+2
diff -U 3 -H -d -r -N -- src/fl_oxy.cxx src/fl_oxy.cxx
--- src/fl_oxy.cxx	1970-01-01 05:00:00.000000000 +0500
+++ src/fl_oxy.cxx	2013-12-21 09:51:00.357448119 +0600
@@ -0,0 +1,455 @@
+//
+// "Oxy theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_oxy_cxx
+#define fl_oxy_cxx
+
+#include <FL/Fl.H>
+#include <FL/fl_draw.H>
+#include "fl_oxy.h"
+
+
+#define GROFF 0.45f // gradients offset
+
+
+
+void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc){
+ 
+ Fl_Color hlcol = 0x0;
+
+  switch(a){
+   case FL_ALIGN_TOP:{
+    
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+8, y1);
+    
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1++;
+    fl_line(x1+1, y1-1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+7, y1-1);
+    
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1-=2;
+    fl_line(x1, y1, x1+4, y1-4);
+    fl_line(x1+4, y1-4, x1+8, y1);
+    
+    break;
+   }
+   
+   case FL_ALIGN_BOTTOM:{
+    L_BOTTOM:
+    
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+8, y1);
+    
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1--;
+    fl_line(x1+1, y1+1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+7, y1+1);
+    
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    y1+=2;
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+8, y1);
+    
+    break;
+   }
+   
+   case FL_ALIGN_LEFT:{
+    
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1, y1+8);
+    
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1--;
+    fl_line(x1, y1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1, y1+8);
+    
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1+=2;
+    fl_line(x1-1, y1+1, x1-4, y1+4);
+    fl_line(x1-4, y1+4, x1-1, y1+7);
+    
+    break;
+   }
+   
+   case FL_ALIGN_RIGHT:{
+    
+    hlcol = fl_color_average(c, hc, 0.38);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1, y1+8);
+    
+    hlcol = fl_color_average(c, hc, 0.58);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1--;
+    fl_line(x1+1, y1+1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1+1, y1+7);
+    
+    hlcol = fl_color_average(c, hc, 0.78);
+    fl_color(ac?hlcol:fl_inactive(hlcol));
+    x1+=2;
+    fl_line(x1, y1, x1+4, y1+4);
+    fl_line(x1+4, y1+4, x1, y1+8);
+    
+    break;
+   }
+   default: { goto L_BOTTOM; break; }
+  }
+ 
+}
+
+
+
+
+  // draw gradient from South to Nord
+  static void _oxy_up_box_(int x, int y, int w, int h, Fl_Color bg){
+   float groff = GROFF;
+   if(groff < 0.0){ groff = 0.0f; }
+   float gradoffset = groff;
+   float stepoffset = (1.0/(float)h);
+   int xw = x+w-1;
+//    from bottom to top
+   for (int _y = y; _y < y+h; _y++){
+    fl_color(fl_color_average(bg, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+   }
+  }
+  
+  
+  // draw gradient from Nord to South
+  static void _oxy_down_box_(int x, int y, int w, int h, Fl_Color bg){
+   float groff = GROFF;
+   if(groff < 0.0){ groff = 0.0f; }
+   float gradoffset = groff;
+   float stepoffset = (1.0/(float)h);
+   int xw = x+w-1;
+//    from top to bottom
+   for (int _y = y+h-1; _y >= y; _y--){
+    fl_color(fl_color_average(bg, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+   }
+  }
+
+  // draw gradient for button up box
+  static void _oxy_button_up_box_(int x, int y, int w, int h, Fl_Color bg){
+   int half_h = h/2;
+   float gradoffset = 0.15f;
+   float stepoffset = (1.0/(float)half_h);
+   Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+   int xw = x+w-1;
+   for(int _y = y; _y <= y+half_h; _y++){
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+   }
+   gradoffset = 0.0f;
+   c = bg;
+   for(int _y = y+h-1; _y >= y+half_h-1; _y--){
+    fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+    fl_line(x, _y, xw, _y);
+    gradoffset += stepoffset;
+   }
+  }
+    
+  
+  // draw gradient for button down box
+   static void _oxy_button_down_box_(int x, int y, int w, int h, Fl_Color bg){
+  bg = fl_color_average(bg, FL_BLACK, 0.88);
+  int half_h = h/2, xw = x+w-1;
+  float gradoffset = 0.15f, stepoffset = (1.0/(float)half_h);
+  Fl_Color c = fl_color_average(bg, FL_WHITE, 0.5);
+  for(int _y = y; _y <= y+half_h; _y++){
+   fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+   fl_line(x, _y, xw, _y);
+   gradoffset += stepoffset;
+  }
+  gradoffset = 0.0f;
+  c = bg;
+  for(int _y = y+h-1; _y >= y+half_h-1; _y--){
+   fl_color(fl_color_average(c, FL_WHITE, (gradoffset<1.0)?gradoffset:1.0));
+   fl_line(x, _y, xw, _y);
+   gradoffset += stepoffset;
+  }
+ }
+  
+  
+  // draw rounded box
+  static void _oxy_rounded_box_(int x, int y, int w, int h, Fl_Color bg){
+   fl_color(bg);
+   if(w > h){
+    fl_pie(x, y, h, h, 90.0, 270.0); // right half of circle
+    fl_rectf(x+h/2, y, w-h, h); // rectangle between left and right half-circle
+    fl_pie(x+w-h, y, h, h, 0.0, 90.0); // top-left quarter of circle
+    fl_pie(x+w-h, y, h, h, 270.0, 360.0); // bottom-left quarter of circle
+   }
+   else {
+    fl_pie(x, y, w, w, 0.0, 180.0); // top half of circle
+    fl_rectf(x, y+w/2, w, h-w); // rectangle between top and bottom half-circle
+    fl_pie(x, y+h-w, w, w, 180.0, 360.0); // bottom half of circle
+   }
+  }
+
+
+enum {
+ OXY_UP_BOX,
+ OXY_DOWN_BOX,
+ 
+ OXY_UP_BUTTON,
+ OXY_DOWN_BUTTON,
+ 
+ OXY_UP_ROUND,
+ OXY_DOWN_ROUND,
+ 
+ OXY_UP_FRAME,
+ OXY_DOWN_FRAME
+};
+
+
+static Fl_Color oxy_color(Fl_Color c) {
+  if(Fl::draw_box_active()){ return c; }
+  else { return fl_inactive(c); }
+}
+
+
+
+static void oxy_draw(int x, int y, int w, int h, Fl_Color c, int typebox, bool is_shadow){
+ 
+ if(w < 1 || h < 1) return;
+ int X, Y, W, H, X1, Y1;
+ 
+ // draw bg
+ if(typebox != OXY_UP_FRAME && typebox != OXY_DOWN_FRAME){
+  
+  X = x+1; Y = y+1; W = w-2; H = h-2;
+  
+  switch(typebox){
+   case OXY_UP_BOX: { _oxy_up_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_DOWN_BOX: { _oxy_down_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_UP_BUTTON: { _oxy_button_up_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_DOWN_BUTTON: { _oxy_button_down_box_(X, Y, W, H, oxy_color(c)); break; }
+   case OXY_UP_ROUND:
+   case OXY_DOWN_ROUND:
+    _oxy_rounded_box_(x, y, w, h, oxy_color(fl_color_average(c, FL_WHITE, 0.82)));
+    break;
+   default: { break; }
+  }
+ }
+ 
+ Fl_Color leftline = c, topline = c, rightline = c, bottomline = c;
+ 
+ if(typebox == OXY_UP_ROUND || typebox == OXY_DOWN_ROUND){
+  leftline = fl_color_average(c, FL_WHITE, 0.88);
+  leftline = topline = rightline = bottomline = fl_color_average(leftline, FL_BLACK, 0.97);
+ }
+  
+ else if(typebox == OXY_UP_BOX || typebox == OXY_UP_FRAME){
+  topline = fl_color_average(c, FL_BLACK, 0.95);
+  leftline = fl_color_average(c, FL_BLACK, 0.85);
+  rightline = leftline;
+  bottomline = fl_color_average(c, FL_BLACK, 0.88);
+ }
+ 
+ else if(typebox == OXY_DOWN_BOX || typebox == OXY_DOWN_FRAME){
+  topline = fl_color_average(c, FL_BLACK, 0.88);
+  leftline = fl_color_average(c, FL_BLACK, 0.85);
+  rightline = leftline;
+  bottomline = fl_color_average(c, FL_BLACK, 0.95);
+ }
+
+ else if(typebox == OXY_UP_BUTTON || typebox == OXY_DOWN_BUTTON){
+  topline = leftline = rightline = bottomline = fl_color_average(c, FL_BLACK, 0.85);
+ }
+ 
+ // draw border
+ if(typebox != OXY_UP_ROUND && typebox != OXY_DOWN_ROUND){
+  // bottom side
+  fl_color(oxy_color(bottomline));
+  fl_line(x+1, y+h-1, x+w-2, y+h-1);
+  // right side
+  fl_color(oxy_color(rightline));
+  fl_line(x+w-1, y+1, x+w-1, y+h-2);
+  // top side
+  fl_color(oxy_color(topline));
+  fl_line(x+1, y, x+w-2, y);
+  // left side
+  fl_color(oxy_color(leftline));
+  fl_line(x, y+1, x, y+h-2);
+ }
+ 
+ // draw shadow
+ if(is_shadow){
+  
+  if(typebox == OXY_UP_ROUND){
+   topline = fl_color_average(c, FL_WHITE, 0.35);
+   bottomline = fl_color_average(c, FL_BLACK, 0.94);
+  }
+  
+  else if(typebox == OXY_DOWN_ROUND){
+   topline = fl_color_average(c, FL_BLACK, 0.94);
+   bottomline = fl_color_average(c, FL_WHITE, 0.35);
+  }
+  
+  else if(typebox == OXY_UP_BOX || typebox == OXY_UP_FRAME){
+   topline = fl_color_average(c, FL_WHITE, 0.35);
+   leftline = fl_color_average(c, FL_WHITE, 0.4);
+   rightline = leftline;
+   bottomline = fl_color_average(c, FL_BLACK, 0.8);
+  }
+  
+  else if(typebox == OXY_DOWN_BOX || typebox == OXY_DOWN_FRAME){
+   topline = fl_color_average(c, FL_BLACK, 0.8);
+   leftline = fl_color_average(c, FL_BLACK, 0.94);
+   rightline = leftline;
+   bottomline = fl_color_average(c, FL_WHITE, 0.35);
+  }
+  
+  int xw1=x+w-1;
+  int xw2=x+w-2;
+  int xw3=x+w-3;
+  int yh2=y+h-2;
+  int yh1=y+h-1;
+  
+  if(typebox == OXY_UP_BOX || typebox == OXY_UP_FRAME){
+   fl_color(oxy_color(topline));
+   X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+   fl_line(X, Y, X1, Y1); // top line
+   
+   fl_color(oxy_color(leftline));
+   X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+   fl_line(X, Y, X1, Y1); // left line
+   
+   fl_color(oxy_color(rightline));
+   X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // right line
+   
+   fl_color(oxy_color(bottomline));
+   X=xw2;Y=yh2;X1=x+1;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // bottom line
+  }
+  
+  else if(typebox == OXY_DOWN_BOX || typebox == OXY_DOWN_FRAME){
+   fl_color(oxy_color(topline));
+   X=x+1;Y=y+1;X1=xw2;Y1=y+1;
+   fl_line(X, Y, X1, Y1); // top line
+   
+   fl_color(oxy_color(leftline));
+   X=x+1;Y=yh2;X1=x+1;Y1=y+2;
+   fl_line(X, Y, X1, Y1); // left line
+   
+   fl_color(oxy_color(rightline));
+   X=xw2;Y=y+2;X1=xw2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // right line
+   
+   fl_color(oxy_color(bottomline));
+   X=xw3;Y=yh2;X1=x+2;Y1=yh2;
+   fl_line(X, Y, X1, Y1); // bottom line
+  }
+  
+  else if(typebox == OXY_UP_ROUND || typebox == OXY_DOWN_ROUND){
+   
+   int Radius, smooth;
+   int r_offset2; // quarter of smooth and half of smooth
+   
+   if(w > h){ smooth = w; }
+   else { smooth = h; }
+   
+    // correcting `smooth'
+   if(smooth > 0 && (smooth*3 > w || smooth*3 > h)){
+    if(h < w){ smooth = h/3; }
+    else { smooth = w/3; }
+   }
+   
+   r_offset2 = smooth/2;
+   
+   Radius = smooth*3;
+   if(Radius == 3){ Radius = 4; }
+   
+   fl_color(oxy_color(topline));
+   fl_line(x+1, yh1-smooth-r_offset2, x+1, y+r_offset2+smooth); // left side
+   fl_arc(x+1, y+1, Radius, Radius, 90.0, 180.0); // left-top corner
+   if(typebox == OXY_DOWN_ROUND){ fl_arc(x+1, y+1, Radius+1, Radius+1, 90.0, 180.0); } // left-top corner (DOWN_BOX)
+   fl_line(x+smooth+r_offset2, y+1, xw1-smooth-r_offset2, y+1); // top side
+   fl_arc(xw1-Radius, y+1, Radius, Radius, 00.0, 90.0); // right-top corner
+   if(typebox == OXY_DOWN_ROUND){ fl_arc(xw1-Radius, y+1, Radius+1, Radius+1, 00.0, 90.0); } // right-top corner (DOWN_BOX)
+   fl_line(xw2, y+smooth+r_offset2, xw2, yh1-smooth-r_offset2); // right side
+   fl_arc(x+1, yh1-Radius, Radius, Radius, 180.0, 200.0); // left-bottom corner
+   fl_arc(xw1-Radius, yh1-Radius, Radius, Radius, 340.0, 360.0); // right-bottom
+   fl_color(oxy_color(bottomline));
+   fl_arc(x+1, yh1-Radius, Radius, Radius, 200.0, 270.0); // left-bottom corner
+   if(typebox == OXY_UP_ROUND){ fl_arc(x+1, yh1-Radius, Radius+1, Radius+1, 200.0, 270.0); } // left-bottom corner (UP_BOX)
+   fl_line(xw1-smooth-r_offset2, yh2, x+smooth+r_offset2, yh2); // bottom side
+   fl_arc(xw1-Radius, yh1-Radius, Radius, Radius, 270.0, 340.0); // right-bottom corner
+   if(typebox == OXY_UP_ROUND){ fl_arc(xw1-Radius, yh1-Radius, Radius+1, Radius+1, 270.0, 340.0); } // right-bottom corner
+  }
+  
+ } /// end `if(is_shadow)'
+ 
+} /// end `static void oxy_draw(...)'
+
+
+
+void oxy_button_up_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_BUTTON, true); }
+void oxy_button_down_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_BUTTON, true); }
+void oxy_up_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_BOX, true); }
+void oxy_down_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_BOX, true); }
+void oxy_thin_up_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_BOX, false); }
+void oxy_thin_down_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_BOX, false); }
+void oxy_up_frame(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_FRAME, true); }
+void oxy_down_frame(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_FRAME, true); }
+void oxy_thin_up_frame(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_FRAME, false); }
+void oxy_thin_down_frame(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_FRAME, false); }
+void oxy_round_up_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_UP_ROUND, true); }
+void oxy_round_down_box(int x, int y, int w, int h, Fl_Color c){ oxy_draw(x, y, w, h, c, OXY_DOWN_ROUND, true); }
+
+
+
+extern void fl_internal_boxtype(Fl_Boxtype, Fl_Box_Draw_F*);
+
+Fl_Boxtype fl_define_FL_OXY_UP_BOX(){
+
+ fl_internal_boxtype(_FL_OXY_UP_BOX, oxy_up_box);
+ fl_internal_boxtype(_FL_OXY_DOWN_BOX, oxy_down_box);
+ fl_internal_boxtype(_FL_OXY_UP_FRAME, oxy_up_frame);
+ fl_internal_boxtype(_FL_OXY_DOWN_FRAME, oxy_down_frame);
+ fl_internal_boxtype(_FL_OXY_THIN_UP_BOX, oxy_thin_up_box);
+ fl_internal_boxtype(_FL_OXY_THIN_DOWN_BOX, oxy_thin_down_box);
+ fl_internal_boxtype(_FL_OXY_THIN_UP_FRAME, oxy_thin_up_frame);
+ fl_internal_boxtype(_FL_OXY_THIN_DOWN_FRAME, oxy_thin_down_frame);
+ fl_internal_boxtype(_FL_OXY_ROUND_UP_BOX, oxy_round_up_box);
+ fl_internal_boxtype(_FL_OXY_ROUND_DOWN_BOX, oxy_round_down_box);
+ fl_internal_boxtype(_FL_OXY_BUTTON_UP_BOX, oxy_button_up_box);
+ fl_internal_boxtype(_FL_OXY_BUTTON_DOWN_BOX, oxy_button_down_box);
+ 
+ return _FL_OXY_UP_BOX;
+ 
+}
+
+#endif
diff -U 3 -H -d -r -N -- src/fl_oxy.h src/fl_oxy.h
--- src/fl_oxy.h	1970-01-01 05:00:00.000000000 +0500
+++ src/fl_oxy.h	2013-12-21 09:51:00.364448119 +0600
@@ -0,0 +1,39 @@
+//
+// "Oxy theme" drawing routines for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2011 by Dmitrij K. e-mail: kdiman at live dot ru
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file.  If this
+// file is missing or damaged, see the license at:
+//
+//     http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+//     http://www.fltk.org/str.php
+//
+
+#ifndef fl_oxy_h
+#define fl_oxy_h
+
+#include <FL/Fl.H>
+
+// to draw arrow, a - direction the arrow, ac - active widget?, c - color the arrow, hc - lighting the arrrow
+extern FL_EXPORT void oxy_arrow(int x1, int y1, Fl_Align a, bool ac, Fl_Color c, Fl_Color hc=FL_BLACK);
+
+// draw boxes
+extern FL_EXPORT void oxy_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_up_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_down_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_up_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_thin_down_frame(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_round_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_round_down_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_button_up_box(int x, int y, int w, int h, Fl_Color c);
+extern FL_EXPORT void oxy_button_down_box(int x, int y, int w, int h, Fl_Color c);
+
+#endif
diff -U 3 -H -d -r -N -- test/demo.cxx test/demo.cxx
--- test/demo.cxx	2012-12-10 18:49:59.000000000 +0600
+++ test/demo.cxx	2013-12-21 10:50:18.825298469 +0600
@@ -73,11 +73,14 @@
   choice->add("none");
   choice->add("gtk+");
   choice->add("plastic");
+  choice->add("oxy");
   choice->callback((Fl_Callback *)doscheme);
   Fl::scheme(NULL);
   if (!Fl::scheme()) choice->value(0);
   else if (!strcmp(Fl::scheme(), "gtk+")) choice->value(1);
-  else choice->value(2);
+  else if (!strcmp(Fl::scheme(), "plastic")) choice->value(2);
+  else if (!strcmp(Fl::scheme(), "oxy")) choice->value(3);
+  else choice->value(0);
   obj = new Fl_Button(10,15,330,380); obj->type(FL_HIDDEN_BUTTON);
   obj->callback(doback);
   obj = but[0] = new Fl_Button( 30, 85,90,90);
