#include "DRW/drwwh.h"
#include "DRW/drwWwinit.h"
#include "DRW/drwWxdata.h"
#include "DRW/drwWopenW.h"
#include "DRW/drwWRedraw.h"
#include "DRW/drwWState.h"
#include "DRW/drwWiState.h"
#include "DRW/drwWitext.h"
#include "DRW/drwWiflags.h"

#ifndef drw_u_trdf_H
 #include "drwUTrdf.h"
#endif

#include "bar2/bar2h.h"
#include "bar2/bar2_.h"


static int done1 = FALSE;
static int done2 = FALSE;
static int objectid1 = 0;
static int objectid2 = 0;
static int objectid3 = 0;
static int objectid4 = 0;


int bar2tmpl_main_opw(wimp_w whan,
                    int x,
                    int y,
                    wimp_w stack,
                    void *userdata)

{

wimp_w whan1, whan2;
bar2_app_data *bd;
int w1, h1, w2, h2;

if (!drw_wimp_iswindowopen(whan))
 drw_show_icons(whan, 0, NULL, 0);

bd = (bar2_app_data *) pwd->uwd->appdata;

w1 = drw_wimp_getwindowvisiblesize(whan, 0);
h1 = drw_wimp_getwindowvisiblesize(whan, 1);

whan1 = (wimp_w) -1;
whan2 = (wimp_w) -1;

if (whan == pwd->uwd->barwin)
 {
  whan1 = bd->barw1;
  whan2 = bd->barw2;
 }
else
 {
  if (whan == bd->main2)
   {
    whan1 = bd->barw3;
    whan2 = bd->barw4;
   }
 }

if (whan1 != (wimp_w) -1 && whan2 != (wimp_w) -1)
 {
  w2 = drw_wimp_getwindowvisiblesize(whan1, 0);
  h2 = drw_wimp_getwindowvisiblesize(whan1, 1);

  drw_wimp_openwindowat(whan1, (x + w1/2) - w2/2,
                        (y - h1/4) + h2/2,
                        0,
                        0,
                        stack);

  stack = whan1;

  w2 = drw_wimp_getwindowvisiblesize(whan2, 0);
  h2 = drw_wimp_getwindowvisiblesize(whan2, 1);

  drw_wimp_openwindowat(whan2, (x + w1/2) - w2/2,
                        (y - (3 * (h1/4))) + h2/2,
                        0,
                        0,
                        stack);
 }

return TRUE;

}


wimp_w bar2tmpl_main_paw(wimp_w whan,
                       void *userdata)

{

wimp_w pane;
bar2_app_data *bd;

bd = (bar2_app_data *) pwd->uwd->appdata;

pane  = (wimp_w) -1;

if (whan == pwd->uwd->barwin)
 pane = bd->barw2;
else
 {
  if (whan == bd->main2)
   pane = bd->barw4;
 }

return pane;

}


int bar2tmpl_main_clw(wimp_w whan,
                    void *userdata)

{

bar2_app_data *bd;

bd = (bar2_app_data *) pwd->uwd->appdata;

if (whan == pwd->uwd->barwin)
 {
  drw_wimp_closewindow(bd->barw1);
  drw_wimp_closewindow(bd->barw2);
 }
else
 {
  if (whan == bd->main2)
   {
    drw_wimp_closewindow(bd->barw3);
    drw_wimp_closewindow(bd->barw4);
   }
 }

return TRUE;

}


int bar2tmpl_main_newobj(wimp_w whan,
                        wimp_i icon,
                        wimp_mouse_state buttontype,
                        int mousex,
                        int mousey,
                        int x,
                        int y,
                        void *userdata)

{

bar2_app_data *bd;

bd = (bar2_app_data *) pwd->uwd->appdata;

if (whan == pwd->uwd->barwin)
 {
  if (!done1)
   {
    objectid1 = drw_new_object(pwd->uwd->barwin,
                               "bar2",
                               "bar2tmpl",
                               "main",
                               TRUE,
                               TRUE,
                               0,
                               NULL,
                               "bar",
                               "bartmpl",
                               "barw",
                               "barobject",
                               NULL,
                               FALSE,
                               100,
                               0);

    objectid2 = drw_new_object(pwd->uwd->barwin,
                               "bar2",
                               "bar2tmpl",
                               "main",
                               TRUE,
                               TRUE,
                               0,
                               NULL,
                               "bar",
                               "bartmpl",
                               "barw",
                               "barobject",
                               NULL,
                               FALSE,
                               100,
                               -600);

    drw_wimp_puticontext(whan,
                         icon,
                         "Move");

    done1 = TRUE;
   }
  else
   {
    if (objectid1 > 0)
     {
      drw_move_objectby(whan,
                        objectid1,
                        buttontype == wimp_CLICK_ADJUST ? 10: -10,
                        buttontype == wimp_CLICK_ADJUST ? -10: 10,
                        NULL);
     }

    if (objectid2 > 0)
     {
      drw_move_objectby(whan,
                        objectid2,
                        buttontype == wimp_CLICK_ADJUST ? 10: -10,
                        0,
                        NULL);
     }
   }
 }
else
 {
  if (whan == bd->main2)
   {
    if (!done2)
     {
      objectid3 = drw_new_object(bd->main2,
                               "bar2",
                               "bar2tmpl",
                               "main",
                               TRUE,
                               TRUE,
                               0,
                               NULL,
                               "bar",
                               "bartmpl",
                               "barw",
                               "barobject",
                               NULL,
                               TRUE,
                               100,
                               0);

      objectid4 = drw_new_object(bd->main2,
                                 "bar2",
                                 "bar2tmpl",
                                 "main",
                                 TRUE,
                                 TRUE,
                                 0,
                                 NULL,
                                 "bar",
                                 "bartmpl",
                                 "barw",
                                 "barobject",
                                 NULL,
                                 TRUE,
                                 100,
                                 -600);

    drw_wimp_puticontext(whan,
                         icon,
                         "Move");

      done2 = TRUE;
     }
    else
     {
      if (objectid3 > 0)
       {
        drw_move_objectby(whan,
                          objectid3,
                          buttontype == wimp_CLICK_ADJUST ? 10: -10,
                          0,
                          NULL);
       }

      if (objectid4 > 0)
       {
        drw_move_objectby(whan,
                          objectid4,
                          buttontype == wimp_CLICK_ADJUST ? 10: -10,
                          0,
                          NULL);
       }
     }
   }
 }

return TRUE;

}


extern int bar2tmpl_main_linktest(wimp_w whan,
                                  wimp_i icon,
                                  wimp_mouse_state buttontype,
                                  int mousex,
                                  int mousey,
                                  int x,
                                  int y,
                                  void *userdata)

{

wimp_i baricon;
drw_app_fn_data *appfndata;
bar_bartmpl_barw_barobject_d *bard;

appfndata = (drw_app_fn_data *) userdata;

if (buttontype == wimp_CLICK_SELECT ||
    buttontype == wimp_CLICK_ADJUST)
 {
  if ((bard = (bar_bartmpl_barw_barobject_d *) appfndata->ofnuserdata))
   {
    if ((baricon = drw_get_iconno(whan,
                                  "bar:bartmpl/barw.baricon",
                                   bard->objectid,
                                   -1))
     != (wimp_i) -1)
     drw_wimp_colouricon(whan, baricon, rand() % 16, 1);
   }
 }

return TRUE;

}


extern wimp_menu *bar2tmpl_main_linktest_mid(wimp_w window,
                                             wimp_i icon,
                                             wimp_menu *menu,
                                             int mousex,
                                             int mousey,
                                             void *userdata,
                                             int *use_by_default)

{

return menu;

}


extern int bar2tmpl_main_linkradio(wimp_w whan,
                                   wimp_i icon,
                                   wimp_mouse_state buttontype,
                                   int mousex,
                                   int mousey,
                                   int x,
                                   int y,
                                   void *userdata)

{

wimp_w info;

if ((info = bar2windowdata.bar2tmpl_stdinfo) != (wimp_w) -1)
 {
  if (drw_wimp_iswindowopen(info))
   {
    drw_wimp_closewindow(info);
    drw_wimp_iconselect(whan, icon, 0);
   }
  else
   {
    drw_wimp_openwindowat(info,
                          0,
                          200 + drw_wimp_getwindowvisiblesize(info, 1),
                          0,
                          0,
                          (wimp_w) -1);
    drw_wimp_iconselect(whan, icon, 1);
   }
 }

return TRUE;

}


extern int bar2tmpl_main_linkradio_sho(wimp_w whan,
                                       wimp_i iconno,
                                       os_box *box,
                                       int usercode,
                                       void *userdata)

{

wimp_w info;
int state;

state = 0;

if ((info = bar2windowdata.bar2tmpl_stdinfo) != (wimp_w) -1)
 {
  if (drw_wimp_iswindowopen(info))
   state = 1;
 }

drw_wimp_iconselect(whan, iconno, state);

return TRUE;

}


extern int bar2tmpl_main_linkradio_clw(wimp_w whan,
                                       void *userdata)

{

wimp_w info;
wimp_i icon;
drw_app_fn_data *hdefn;
bar_bartmpl_barw_barobject_d *bard;

hdefn = (drw_app_fn_data *) userdata;

bard = (bar_bartmpl_barw_barobject_d *) hdefn->ofnuserdata;

if ((info = bar2windowdata.bar2tmpl_stdinfo) != (wimp_w) -1)
 {
  if (drw_wimp_iswindowopen(info))
   drw_wimp_closewindow(info);

  if ((icon = drw_get_iconno(whan,
                             "linkradio->bar:bartmpl/barw.radio",
                             0,
                            -1)))
   drw_wimp_iconselect(whan, icon, 0);
 }

return TRUE;

}


