int key_minus_ch()
{
if ((key_shifts & KB_SHIFT_FLAG  || index_false_shift==1) && index_patch_window==1)
{
iddim=atol(numeric);

if(iddim>0 && iddim<513)
{
Dimmers_selected[iddim]=0;
strcat(string_monitor_patch,"D.");
strncat(string_monitor_patch,numeric,numeric_postext);
strcat(string_monitor_patch,"-");
numeric_postext=0;
reset_numeric_entry();
set_patch_scroll(iddim);
}
}
else{
if(index_type==0)
{
idchannel=atol(numeric);
if(idchannel>0 && idchannel<513)
{
switch (ClassicalChannelView)
{
case 0:
if(check_presence_of_a_channel_in_views(idchannel)==1)
{
Selected_Channel[idchannel]=0;
//last_ch_selected=idchannel;
numeric_postext=0;
reset_numeric_entry();
set_channel_scroll(last_ch_selected);
substract_channel_selection_to_layers_plot();
}
else if(check_presence_of_a_channel_in_views(idchannel)==0)
{
sprintf(string_Last_Order,"This Channel is not in an activ View");
numeric_postext=0;
reset_numeric_entry();
}
break;
case 1:
Selected_Channel[idchannel]=0;
//last_ch_selected=idchannel;
numeric_postext=0;
reset_numeric_entry();
set_channel_scroll(last_ch_selected);
substract_channel_selection_to_layers_plot();
break;
}


}
}
}
 return(0);
}
int call_mem_onpreset()
{

int mem_to_call=(int)(atof(numeric)*10.0001);
if ( mem_to_call>10000)
{sprintf(string_Last_Order,"a Mem can't be > to 1000");}
else
{
if(MemoiresExistantes[mem_to_call]==0)
{
sprintf(string_Last_Order,"Mem %d.%d doesn't exist", mem_to_call/10,mem_to_call%10);
}
else if (MemoiresExistantes[mem_to_call]==1)
{
sprintf(string_Last_Order,"Loaded %d.%d on preset", mem_to_call/10,mem_to_call%10);
position_preset=mem_to_call;
refresh_mem_onpreset(position_preset);
ratio_X1X2_together=ratio_cross_manuel[mem_to_call];
}
}
reset_numeric_entry();
someone_changed_in_sequences=1;//icat

return(0);
}
int call_mem_onstage()
{
int mem_to_call=(int)(atof(numeric)*10.0001);
if (mem_to_call>10000)
{sprintf(string_Last_Order,"a Mem can't be > to 1000");}
else
{
if(MemoiresExistantes[mem_to_call]==0)
{
sprintf(string_Last_Order,"Mem %d.%d doesn't exist", mem_to_call/10,mem_to_call%10);
}
if (MemoiresExistantes[mem_to_call]==1 && mem_to_call!=0)//eviter cherger mem 0 en clickant vide
{
sprintf(string_Last_Order,"Loaded %d.%d on Stage", mem_to_call/10,mem_to_call%10);
position_onstage=mem_to_call;
refresh_mem_onstage(position_onstage);
detect_mem_before_one();
detect_mem_preset();
refresh_mem_onpreset(position_preset);
}
if (MemoiresExistantes[mem_to_call]==1 && mem_to_call==0)//eviter cherger mem 0 en clickant vide
{
sprintf(string_Last_Order,"Mem 0.0 can't be loaded on Stage");
}
}
reset_numeric_entry();
someone_changed_in_sequences=1;//icat
return(0);
}
int Box_artnet_udpport(int macx, int macy)
{
   petitchiffre.Print("Art-Net UDP Ports",macx-5,macy-20);
   petitpetitchiffre.Print("- default 6454 -",macx+10,macy);
   petitpetitchiffre.Print("Out:",macx-5,macy+20);
   petitpetitchiffre.Print("In:",macx+70,macy+20);
   Rect UDPOut(Vec2D(macx+20,macy+5),Vec2D(45,25));
   UDPOut.SetRoundness(7.5);
   UDPOut.Draw(CouleurFond.WithAlpha(0.4));
   Rect UDPIn(Vec2D(macx+95,macy+5),Vec2D(45,25));
   UDPIn.SetRoundness(7.5);
   UDPIn.Draw(CouleurFond.WithAlpha(0.4));
   petitpetitchiffre.Print(ol::ToString(clientport_artnet),macx+25,macy+20);
   petitpetitchiffre.Print(ol::ToString(serveurport_artnet),macx+100,macy+20);


   if(mouse_y>macy+5 && mouse_y<macy+5+25 && window_focus_id==920)
   {
   if(mouse_x>macx+20 && mouse_x<macx+20+45)
   {
   UDPOut.DrawOutline(CouleurLevel);
   if(mouse_button==1 && mouse_released==0)
   {
   clientport_artnet=atoi(numeric);
   reset_numeric_entry();
   index_re_init_client_artnet=1;
   index_ask_confirm=1;
   mouse_released=1;
   }
   }
   else    if(mouse_x>macx+95 && mouse_x<macx+95+45)
   {
   UDPIn.DrawOutline(CouleurLevel);
   if(mouse_button==1 && mouse_released==0)
   {
   serveurport_artnet=atoi(numeric);
   reset_numeric_entry();
   index_re_init_serveur_artnet=1;
   index_ask_confirm=1;
   mouse_released=1;
   }
   }
   }

return(0);
}
int do_keyboard_conf(int cfgnetw_X, int cfgnetw_Y)//ancienne version
{

petitchiffre.Print("Keyboard Mapping: " ,cfgnetw_X, cfgnetw_Y);
Line(Vec2D(cfgnetw_X,cfgnetw_Y+5),Vec2D(cfgnetw_X+90,cfgnetw_Y+5)).Draw(CouleurLigne);
sprintf(string_clavier_is,"Asc= %d Allg= %d KEY= %s ",scan_ascii_is,scan_allegro_key_is,string_key_id);
petitchiffre.Print(string_clavier_is,cfgnetw_X,cfgnetw_Y+20);
char str_iskeyfunct[25];
for (int oi=0;oi<nbre_key_persos;oi++)
{
Rect keyParam(Vec2D(cfgnetw_X+60,cfgnetw_Y+25+(oi*30)),Vec2D(50,25));
keyParam.SetRoundness(7.5);
keyParam.SetLineWidth(epaisseur_ligne_fader);
keyParam.Draw(CouleurFond.WithAlpha(0.5));
switch(oi)
{
case 0:
sprintf(str_iskeyfunct,"AT LEVEL");
break;
case 1:
sprintf(str_iskeyfunct,"CH +");
break;
case 2:
sprintf(str_iskeyfunct,"CH -");
break;
case 3:
sprintf(str_iskeyfunct,"THRU");
break;
case 4:
sprintf(str_iskeyfunct,"CLEAR");
break;
}
if(mouse_x>cfgnetw_X+60 && mouse_x<cfgnetw_X+60+50 && mouse_y>cfgnetw_Y+25+(oi*30) && mouse_y<cfgnetw_Y+25+(oi*30)+25)
{
keyParam.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
int tmp_valAsc=atoi(numeric);
if((tmp_valAsc>0 && tmp_valAsc<255)|| tmp_valAsc==999)//999 pour eviter de bloquer les commandes en 0 ascii , genre touches de fonctions
{
mapping_temporaire[oi]=tmp_valAsc;
}
reset_numeric_entry();
mouse_released=1;
}
}
petitpetitchiffre.Print(str_iskeyfunct,cfgnetw_X,cfgnetw_Y+40+(oi*30));
petitpetitchiffre.Print(ol::ToString(mapping_temporaire[oi]),cfgnetw_X+75,cfgnetw_Y+40+(oi*30));
}

 return(0);
}
int DoDock(int fad, int dk)
{
 ClearDock(fad,dk);

 if(numeric_postext==0)//si pas de chaine de caracteres tapés
 {
 DockTypeIs[fad][dk]=0;//le type est 0, circuits normaux
 if(index_blind==0)
 {
 for (int dc=1;dc<514;dc++)
 {
 FaderDockContains[fad][dk][dc]=0;//nettoyage du fader
 FaderDockContains[fad][dk][dc]=bufferSequenciel[dc];
 //rajout
 bufferSaisie[dc]=0;
 Selected_Channel[dc]=0;
 }
 index_do_dock=0;
 Unselect_other_docks(fad,dk);
 DockIsSelected[fad][dk]=1;
 Fader[fad]=255;
 sprintf(string_Last_Order,">>n Stage Stored in F %d Dock %d",fad+1, dk);
 }

 else if(index_blind==1)
 {
 for (int dc=1;dc<514;dc++)
 {
 FaderDockContains[fad][dk][dc]=bufferBlind[dc];
 }
 index_do_dock=0;
 sprintf(string_Last_Order,">>n Preset Stored in F %d Dock %d",fad+1, dk);
 }
 }
 else if (numeric_postext>0)
 {
 int mem_to_load_in_dock= (int)(atof(numeric)*10.0001);
 if(MemoiresExistantes[mem_to_load_in_dock]==1)
 {
 //ClearDock(fad,dk);
 DockTypeIs[fad][dk]=5;
 int mem_to_load_in_dock= (int)(atof(numeric)*10.0001);
 DockHasMem[fad][dk]=mem_to_load_in_dock;
 reset_numeric_entry();
 sprintf(string_Last_Order,">>n Stored Mem %.1f in F %d Dock %d",(float (mem_to_load_in_dock))/10,fad+1, dk);
 }
 else
 {sprintf(string_Last_Order,">>n Mem %.1f doesn't exist",(float (mem_to_load_in_dock))/10);  }

 }
 return(0);
}
int key_at_zero()
{
 if ((key_shifts & KB_SHIFT_FLAG || index_false_shift==1) && index_patch_window==1)
           {patch_clear_selected();}
 else{
           reset_numeric_entry();
           for (int ci=1;ci<514;ci++)
           {
           if(Selected_Channel[ci]==1 && index_blind==0)    {bufferSaisie[ci]=0;}
           else if(Selected_Channel[ci]==1  && index_blind==1)    {bufferBlind[ci]=0;}
           }
           sprintf(string_Last_Order,">> Selection AT ZERO");
           index_level_attribue=1;//pour déselection lors prochain circuit piqué
 }
 return(0);
}
int do_logical_TheGrid_matrix ( int xb, int yb,int sizecase, int num_grid_player)
{
int grid_selected=index_grider_selected[num_grid_player];
int gr_st_selected=index_grider_step_is[num_grid_player];

if(index_enable_edit_Grider==1 && mouse_x>=xb && mouse_x<=xb+(grider_nb_col*sizecase) && mouse_y>=yb && mouse_y<=yb+(grider_nb_row*sizecase))
{
if( mouse_released==0)
{
if(numeric_postext==0)
{
if(grid_levels[index_grider_selected[num_grid_player]][gr_st_selected][position_grid_editing]==0)
{grid_levels[grid_selected][gr_st_selected][position_grid_editing]=255;}
else if(grid_levels[grid_selected][gr_st_selected][position_grid_editing]==255
|| grid_levels[index_grider_selected[num_grid_player]][gr_st_selected][position_grid_editing]>0 )
{grid_levels[grid_selected][gr_st_selected][position_grid_editing]=0;}
}
else if(numeric_postext>0)
{
int lev_to_attr_to_grid=0;
lev_to_attr_to_grid=atoi(numeric);
switch(dmx_view)
{
case 0://pourcent
if(lev_to_attr_to_grid>0)
{
grid_levels[grid_selected][gr_st_selected][position_grid_editing]=
(int)(((float)(lev_to_attr_to_grid) *2.55) +1);// + 1 pour arrondir le pourcentage lors de la conversion % -> dmx
}
else {grid_levels[grid_selected][gr_st_selected][position_grid_editing]=0;}
break;
case 1://dmx
if(lev_to_attr_to_grid>=0 && lev_to_attr_to_grid<=255)
{
grid_levels[grid_selected][gr_st_selected][position_grid_editing]=lev_to_attr_to_grid;
}
break;
}

}
reset_numeric_entry();
mouse_released=1;
}
}

return(0);
}
int do_direct_channel(int fad,int dk)
{
if(numeric_postext>0)
{
last_ch_selected=atoi(numeric);
reset_numeric_entry();
numeric_postext=0;
}

if(last_ch_selected>0 && last_ch_selected<513)
{
ClearDock(fad,dk);
switch(multiple_direct_chan)
{
case 0:
DockTypeIs[fad][dk]=10;//direct channel mode
FaderDirectChan[fad][dk]=last_ch_selected;
//report dans dock
sprintf( DockName[fad][dk], descriptif_projecteurs[last_ch_selected]);
sprintf(string_Last_Order,">>Direct Channel x1 done");
break;
case 1:
for(int l=0;l<12;l++)
{
if(fad+l<core_user_define_nb_faders)
{
DockTypeIs[fad+l][dk]=10;//direct channel mode
FaderDirectChan[fad+l][dk]=last_ch_selected+l;
//report dans dock
sprintf( DockName[fad+l][dk], descriptif_projecteurs[last_ch_selected+l]);
}
}
sprintf(string_Last_Order,">>Direct Channel x12 done");
break;
default:
break;
}
}
else
{
sprintf(string_Last_Order,">>Direct Channel: Please select a channel !");
}
return(0);
}
int key_unselect_ch()
{
reset_numeric_entry();

//if ((key_shifts & KB_SHIFT_FLAG  || index_false_shift==1))
if(key[KEY_LSHIFT]|| index_false_shift==1)
{
             if( index_patch_window==1 && index_ask_confirm==0)
             {
             patch_unselect_all_dimmers();
             strcpy(string_monitor_patch,"");
             index_patch_affect_is_done=0;
             }
}


else
{

             for (int ci=1;ci<514;ci++)
             {Selected_Channel[ci]=0;}
             last_ch_selected=0;
             index_type=0;index_level_attribue=0;
             substract_channel_selection_to_layers_plot();


             if(index_ask_confirm==1)
             {
             reset_indexs_confirmation();
             reset_index_actions();
             substract_a_window(W_ASKCONFIRM);
             window_focus_id=previous_window_focus_id;
             add_a_window(window_focus_id);
             }
}

return(0);
}
int do_artnet_affect_config(int cfgnetw_X, int cfgnetw_Y)
{


petitchiffre.Print("ArtNet IN is :",(cfgnetw_X), (cfgnetw_Y));

ol::Rect AllowIn(ol::Vec2D((cfgnetw_X+140), cfgnetw_Y-13),ol::Vec2D(50,20));
AllowIn.SetRoundness(7.5);
AllowIn.Draw(CouleurFond.WithAlpha(0.5));

switch(allow_artnet_in)
{
case 0:
petitchiffre.Print("/Off",(cfgnetw_X+150), (cfgnetw_Y));
break;
case 1:
AllowIn.Draw(CouleurFader);
petitchiffre.Print("/On",(cfgnetw_X+155), (cfgnetw_Y));
break;
}

if(mouse_x>cfgnetw_X+140 && mouse_x<cfgnetw_X+190 && mouse_y> cfgnetw_Y-13 && mouse_y< cfgnetw_Y+7  && window_focus_id==W_CFGMENU )
{
AllowIn.DrawOutline(CouleurNiveau);
if(mouse_button==1 && mouse_released==0)
{
allow_artnet_in=toggle(allow_artnet_in);
switch(allow_artnet_in)
{
case 0:
     fermeture_serveur_artnet();
break;
case 1:
     initialisation_serveur_artnet();
break;
}
mouse_released=1;
}
}



///////////////////////////////////////////////////////////////////////////////
ol::Rect AffectToDockN(ol::Vec2D(cfgnetw_X, cfgnetw_Y+17),ol::Vec2D(100,15));
AffectToDockN.SetRoundness(4);
AffectToDockN.Draw(CouleurBlind.WithAlpha(alpha_blinker*index_do_affect_net_to_dock));
AffectToDockN.DrawOutline(CouleurLigne.WithAlpha(0.7));

petitchiffre.Print("Affect to dock",(cfgnetw_X+5), (cfgnetw_Y+27));

if(window_focus_id==W_CFGMENU && mouse_x>cfgnetw_X && mouse_x<cfgnetw_X+100 && mouse_y>cfgnetw_Y+17 && mouse_y<cfgnetw_Y+17+15 && mouse_button==1 && mouse_released==0)
{
index_do_affect_net_to_dock=toggle(index_do_affect_net_to_dock);
index_do_dock=index_do_affect_net_to_dock;
mouse_released=1;
}

ol::Rect AffectD(ol::Vec2D(cfgnetw_X+140, cfgnetw_Y+12),ol::Vec2D(50,25));
AffectD.SetRoundness(7.5);
AffectD.Draw(CouleurFond.WithAlpha(0.5));

petitchiffre.Print(ol::ToString(select_artnet_to_listen),cfgnetw_X+160, cfgnetw_Y+27);

if(window_focus_id==W_CFGMENU && mouse_x>cfgnetw_X+140 && mouse_x<cfgnetw_X+190 && mouse_y>cfgnetw_Y+25 && mouse_y<cfgnetw_Y+47 )
{
AffectD.DrawOutline(CouleurLigne.WithAlpha(0.6));
if(mouse_button==1 && mouse_released==0   )
{
int nu=atoi(numeric);
reset_numeric_entry();
numeric_postext=0;
if(nu>=0 && nu<=15)
{
select_artnet_to_listen=nu;
}
else{sprintf(string_Last_Order,"Universe must be from 0 to 15");}
}
mouse_released=1;
}


return(0);
}
int mini_faders_panel_core(int xmf, int ymf, int larg)
{

if(mouse_y>ymf && mouse_y<ymf+20 )
{

if(mouse_x>xmf+(24*larg)+10 && mouse_x<xmf+(24*larg)+30)
{
if( Midi_Faders_Affectation_Type!=0)
{
 attribute_midi_solo_affectation(774,1);
}
else
{
position_minifader_selected--;
if(position_minifader_selected<0){position_minifader_selected=core_user_define_nb_faders;}
refresh_minifader_state_view_core(position_minifader_selected);
mouse_released=1;
}
}

else if(mouse_x>xmf+(24*larg)+35 && mouse_x<xmf+(24*larg)+55)
{
if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(775,1);
}
else
{
position_minifader_selected++;
if(position_minifader_selected>core_user_define_nb_faders){position_minifader_selected=0;}
refresh_minifader_state_view_core(position_minifader_selected);
mouse_released=1;
}
}
}


//SELECT ALL
if(mouse_y>ymf-25 && mouse_y<ymf-5 )
{
if(mouse_x>xmf+(24*larg)+10 && mouse_x<xmf+(24*larg)+55)
{
if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(145,1);
}
else
{
for(int i=0;i<core_user_define_nb_faders;i++)
{minifaders_selected[i]=1;}
}
}
}





 //select
if(mouse_x>xmf+(24*larg)+10 && mouse_x<xmf+(24*larg)+55 )
{

if(mouse_y>ymf+25 && mouse_y<ymf+45 && mouse_released==0 )
{
if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(776,1);
mouse_released=1;
}
else
{
minifaders_selected[position_minifader_selected]=toggle(minifaders_selected[position_minifader_selected]);
mouse_released=1;
}
}

else if(mouse_y>ymf+50 && mouse_y<ymf+70 && mouse_released==0 )
{
if( Midi_Faders_Affectation_Type!=0)
{
 attribute_midi_solo_affectation(777,1);
 }
else
{
for(int l=0;l<core_user_define_nb_faders;l++)
{
minifaders_selected[l]=0;
}
}
mouse_released=1;
}
}

///////////////LES ACTIONS////////////////////////////////////////////////////
for(int lu=0;lu<5;lu++)
{
for(int llu=0;llu<3;llu++)
{
int numcom=(lu*3)+llu;
//mouse action:
if(mouse_x>xmf+(24*larg)+70+(lu*25) && mouse_x<xmf+(24*larg)+70+(lu*25)+20 && mouse_y>ymf+(llu*25) && mouse_y<ymf+(llu*25)+20)
{
char tmp_c[36];
switch(numcom)
{
case 0:
sprintf(tmp_c,"Flash");
break;
case 1:
sprintf(tmp_c,"Lock");
break;
case 2:
sprintf(tmp_c,"Loop");
break;
case 3:
sprintf(tmp_c,"Lfo UP");
break;
case 4:
sprintf(tmp_c,"Lfo DOWN");
break;
case 5:
sprintf(tmp_c,"Lfo SAW");
break;
case 6:
sprintf(tmp_c,"All Dock Looped");
break;
case 7:
sprintf(tmp_c,"All at 0");
break;
case 8:
sprintf(tmp_c,"Set Pos");
break;
case 9:
sprintf(tmp_c,"To Prev Dock");
break;
case 10:
sprintf(tmp_c,"To Next Dock");
break;
case 11:
sprintf(tmp_c,"Up and Down");
break;
case 12:
sprintf(tmp_c,"Sel Prev Dock");
break;
case 13:
sprintf(tmp_c,"Sel Next Dock");
break;
case 14:
sprintf(tmp_c,"Play Embedded");
break;
default:
                    strcpy(tmp_c,"");
break;
}

sprintf(string_last_midi_id,"%s is Ch: %d Pitch: %d Type: %s",tmp_c, miditable[1][778+numcom],miditable[2][778+numcom],thetypinfo);

if(numcom!=0 )// hors flash
{
if( Midi_Faders_Affectation_Type!=0)
{
 attribute_midi_solo_affectation(778+numcom,1);
 }

else
{
do_action_on_selected_minifaders(numcom);
mouse_released=1;
}
}


}



}
}

//les presets de sélections de faders//////////////////////////////////////////////////////////

for(int lg=0;lg<8;lg++)
{

if(mouse_x>xmf+(24*larg)+10 && mouse_x<xmf+(24*larg)+10+20 && mouse_y>ymf+90+(lg*25) && mouse_y<ymf+90+(lg*25)+20)
{

if(Midi_Faders_Affectation_Type!=0)
{
 //midi report
 switch(miditable[0][794+lg])
 {
  case 0:
  sprintf(thetypinfo,"Note");
  break;
  case 1:
  sprintf(thetypinfo,"Key On");
  break;
  case 2:
  sprintf(thetypinfo,"Key Off");
  break;
  case 4:
  sprintf(thetypinfo,"Ctrl Change");
  break;
 }
  sprintf(string_last_midi_id,"FaderPreset %d is Ch: %d Pitch: %d Type: %s",lg+1, miditable[1][794+lg],miditable[2][794+lg],thetypinfo);

 if(Midi_Faders_Affectation_Type==1)
 {attribute_midi_solo_affectation(794+lg,1);}
 else if(Midi_Faders_Affectation_Type==2)
 {
 attribute_midi_to_control(794, Midi_Faders_Affectation_Type,Midi_Faders_Affectation_Mode);
 }
}
else
{
if(index_do_dock==1)
{
minifader_preset_is=lg;
index_record_minifader_preset=1;
index_ask_confirm=1;
}
else if(index_main_clear==1)
{
minifader_preset_is=lg;
index_clear_minifader_preset=1;
index_ask_confirm=1;
}
else //selection souris normale
{
for(int olp=0;olp<core_user_define_nb_faders;olp++)
{minifaders_selected[olp]=minifaders_preset_selection[lg][olp];}
sprintf(string_Last_Order,"Called Fader Selection from Preset %d", lg+1);
}

}
}
}
////////////Les locks presets///////////////////////////////////////////////////

for(int lck=0;lck<8;lck++)
{

if(mouse_x>xmf+(24*larg)+35 && mouse_x<xmf+(24*larg)+35+20 && mouse_y>ymf+90+(lck*25) && mouse_y<ymf+90+(lck*25)+20)
{

if( Midi_Faders_Affectation_Type!=0)
{

     //midi report
 switch(miditable[0][605+lck])
 {
  case 0:
  sprintf(thetypinfo,"Note");
  break;
  case 1:
  sprintf(thetypinfo,"Key On");
  break;
  case 2:
  sprintf(thetypinfo,"Key Off");
  break;
  case 4:
  sprintf(thetypinfo,"Ctrl Change");
  break;
 }
  sprintf(string_last_midi_id,"Lock Preset %d is Ch: %d Pitch: %d Type: %s",lck+1, miditable[1][605+lck],miditable[2][605+lck],thetypinfo);

  if(Midi_Faders_Affectation_Type==1)
 {attribute_midi_solo_affectation(605+lck,1);}
 else if(Midi_Faders_Affectation_Type==2)
 {
 attribute_midi_to_control(605, Midi_Faders_Affectation_Type,Midi_Faders_Affectation_Mode);
 }
}

else
 {

 if(index_do_dock==1)
 {

 minifader_lockpreset_is=lck;
 index_record_minifader_lockpreset=1;
 index_ask_confirm=1;
 }

 else  if(index_main_clear==1)
 {

 reset_indexs_confirmation();
 lock_preset_selected_for_record=lck;
 index_do_clear_lock_preset=1;
 index_ask_confirm=1;
 sprintf(string_Last_Order,">> Lock State %d cleared",lck+1);
 }
 else
 {
 do_lock_preset(lck);
 sprintf(string_Last_Order,">> Lock State %d called ",lck+1);
 }
mouse_released=1;
}
}
}


/////////////////ALL AT 0///////////////////////////////////////////////////////
all_at_zero_panel_core((xmf+24*larg)+60,ymf+80);

midi_send_faders_button_logical((xmf+24*larg)+140,ymf-40,W_MINIFADERS);


////////////////////////////////////////////////////////////////////////////////
/////////////////////////LES 48 POTARDS/////////////////////////////////////////
int hmfd=200;//hauteur d une ligne de 24 faders
for(int cmptfader=0; cmptfader<max_faders/2; cmptfader++)
{
for(int lfad=0;lfad<2;lfad++)
{

if(cmptfader+(lfad*24)<=core_user_define_nb_faders-1)//limitation nbre faders
{

////FX MODE

if(  window_focus_id==922 && mouse_released==0 && mouse_x>xmf+(cmptfader*larg) && mouse_x<xmf+(cmptfader*larg)+larg && mouse_y>(ymf+(lfad*hmfd))-12  && mouse_y<(ymf+(lfad*hmfd))-12+5 )
{
if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_to_control(1543+cmptfader+(lfad*24), Midi_Faders_Affectation_Type,  Midi_Faders_Affectation_Mode);
}
else
{
  fader_mode_with_buffers[cmptfader+(lfad*24)]++;
 if(fader_mode_with_buffers[cmptfader+(lfad*24)]>5){fader_mode_with_buffers[cmptfader+(lfad*24)]=0;}
}
mouse_released=1;
}

///////////SELECTION SOURIS SUR  NUMEROS AU DESSUS FADERS/////////////////////////////////////////////////////////
if( mouse_x>xmf+(cmptfader*larg) && mouse_x<xmf+(cmptfader*larg)+larg && mouse_y>(ymf+(lfad*hmfd))  && mouse_y<(ymf+15+(lfad*hmfd)) )
{
position_minifader_selected=cmptfader+(lfad*24);

int dock_selected_is=detect_dock_used(position_minifader_selected);


//SELECTION
if(index_do_dock==0 && index_do_modify==0 && index_do_dock==0   && index_type==0    && index_main_clear==0 )
{
 minifaders_selected[position_minifader_selected]=toggle(minifaders_selected[position_minifader_selected]);
 if(index_inspekt==1)//affichage qui dans dock si VIEW activé
 {
 show_who_is_in_dock( position_minifader_selected,   detect_dock_used(position_minifader_selected));
 }
 mouse_released=1;
}


 //store normal
 else if(index_do_dock==1 && index_direct_chan==0   && index_affect_chaser_to_dock==0  && index_affect_time==0 && index_affect_color_to_dock==0 && index_do_affect_net_to_dock==0
 && index_affect_dmxin==0 && index_affect_video_tracking_to_dock==0 && index_affect_audio_to_dock==0 && gridplayer_to_affect_is==-1
 && index_do_fgroup==0 && index_affect_to_dock_mover==0 && index_affect_draw_to_dock==0 &&  index_affect_echo_to_dock==0)
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_record_on_faders=1;
 index_ask_confirm=1;
 }

  //affect time
 else if (index_do_dock==1 && index_affect_time==1 )
 {
 show_im_recording_a_time=1;
 DoTimeToDock(position_minifader_selected,dock_selected_is);
 sprintf(string_Last_Order,">>Time affected to Master %d Dock %d", position_minifader_selected+1,dock_selected_is);
 index_affect_time=0;
 }
 //color dock
 else if(index_do_dock==1 && index_affect_color_to_dock==1 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_affect_color_on_faders=1;
 index_ask_confirm=1;
 }
 //dmx to dock
 else if(index_do_dock==1 && index_affect_dmxin==1 ) // affect couleurs dans dock
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_dmx_to_dock=1;
 index_ask_confirm=1;
 }
 //artnet to dock
 else if(index_do_dock==1 && index_do_affect_net_to_dock==1 ) // affect Network IN dans dock
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_artnet_to_dock=1;
 index_ask_confirm=1;
 }
 //video to dock
 else if(index_do_dock==1 && index_affect_video_tracking_to_dock==1) // affect Network IN dans dock
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_video_to_dock=1;
 index_ask_confirm=1;
 }
 //audio to dock
 else if(index_do_dock==1 &&  index_affect_audio_to_dock==1) // affect audio controls dans dock
 {
 if(player_to_affect_to_dock>=0 && player_to_affect_to_dock<4 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_audio_to_dock=1;
 index_ask_confirm=1;
 }
 }

 //store direct CH
 else if(index_do_dock==1 && index_direct_chan==1 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_record_direct_ch=1;
 index_ask_confirm=1;
 }
 //store FX
 else if(index_do_dock==1 && index_affect_chaser_to_dock==1)
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_affect_fx=1;
 index_ask_confirm=1;
 }
 //store Grid
 else if(index_do_dock==1 &&  gridplayer_to_affect_is>=0 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_affect_grid_to_fader=1;
 index_ask_confirm=1;
 }
 //store group fader
 else if(index_do_dock==1 && index_do_fgroup==1 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 bool index_there_is_fader_selected=0;
 for(int io=0;io<48;io++)
 {
 if(minifaders_selected[io]==1){index_there_is_fader_selected=1;break;}
 }
 if(index_there_is_fader_selected==1)
 {
 index_do_affect_fgroup=1;
 index_ask_confirm=1;
 }
 else{sprintf(string_Last_Order,"No minifaders selected");}
 }

  //Store Mover dans dock
 else if (  index_do_dock==1 && index_affect_to_dock_mover==1)
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_affect_mover=1;
 index_ask_confirm=1;
 }


 //draw
 else if(index_do_dock==1 && index_affect_draw_to_dock==1)
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 draw_preset_selected_for_order=draw_preset_selected;
 index_do_draw_affect_to_dock=1;
 index_ask_confirm=1;
 mouse_released=1;
 }
  //echo
 else if(index_do_dock==1 && index_affect_echo_to_dock==1)
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_affect_echo_to_dock=1;
 index_ask_confirm=1;
 mouse_released=1;
 }

 //modify
 else if( index_do_modify==1 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_modify_on_faders=1;
 index_ask_confirm=1;
 }


  //report
 if( index_do_report==1 && index_type==0 && index_do_dock==0 && index_do_modify==0 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_report_on_faders=1;
 index_ask_confirm=1;
 sprintf(string_Last_Order,"Report");
 }

 //nommage de dock
 else if( index_type==1 && index_do_dock==0 && index_do_report==0 && index_do_modify==0   && numeric_postext!=0 )
 {
 for(int tt=0;tt<24;tt++)
 {
 DockName[position_minifader_selected][dock_selected_is][tt]=numeric[tt];
 }
 DockName[position_minifader_selected][dock_selected_is][24]='\0';
 reset_numeric_entry();numeric_postext=0;
 if(index_text_auto_close==1){index_type=0;}
 sprintf(string_Last_Order,">>On Master %d GIVED A NAME FOR DOCK %d ", position_minifader_selected+1,dock_selected_is+1);
 }

  //clear
 else if(index_main_clear==1 )
 {
 fader_selected_for_record=position_minifader_selected;
 dock_selected_for_record=dock_selected_is;
 index_do_clear_dock=1;
 index_ask_confirm=1;
 }


refresh_minifader_state_view_core(position_minifader_selected);
}

//MANIP DU MINI FADER/////////////////////////////////////////////////////////////
if( mouse_x>xmf+(cmptfader*larg) && mouse_x<xmf+(cmptfader*larg)+larg && mouse_y>(ymf+15+(lfad*hmfd))  && mouse_y<(ymf+20+127+(lfad*hmfd)) )
{

position_minifader_selected=cmptfader+(lfad*24);
refresh_minifader_state_view_core(cmptfader+(lfad*24));
if(index_inspekt==1){ //affichage qui dans dock si VIEW activé
show_who_is_in_dock( cmptfader+(lfad*24),   detect_dock_used(cmptfader+(lfad*24)));
}
set_mouse_range(xmf+(cmptfader*larg), ymf+20+(lfad*hmfd), xmf+(cmptfader*larg)+larg, ymf+20+127+(lfad*hmfd));//pour pas deborder
//click niveau fader
if( index_main_clear==0)
{
//NIVEAU
Fader[cmptfader+(lfad*24)]=((ymf+127+20+(lfad*hmfd))-mouse_y)*2;
midi_levels[cmptfader+(lfad*24)]=((ymf+127+20+(lfad*hmfd))-mouse_y);//desafffceté pour trouver pb

if(Fader[cmptfader+(lfad*24)]>=254){Fader[cmptfader+(lfad*24)]=255;midi_levels[cmptfader+(lfad*24)]=127;}

index_fader_is_manipulated[cmptfader+(lfad*24)]=1;
if(midi_send_out[cmptfader+(lfad*24)]==1){ index_send_midi_out[cmptfader+(lfad*24)]=1;}
if(lfo_mode_is[cmptfader+(lfad*24)]==1 || lfo_mode_is[cmptfader+(lfad*24)]==2 || lfo_cycle_is_on[cmptfader+(lfad*24)]==1)
{
lfo_mode_is[cmptfader+(lfad*24)]=0; lfo_mode_is[cmptfader+(lfad*24)]=0; lfo_cycle_is_on[cmptfader+(lfad*24)]=0;
}
//CONFIG MIDI

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_to_control(cmptfader+(lfad*24), Midi_Faders_Affectation_Type,Midi_Faders_Affectation_Mode);
}
}
//NETTOYAGE DE FADER ET DOCK
if(index_main_clear==1)//clear de tous les dock du fader
{
 fader_selected_for_record=cmptfader+(lfad*24);
 index_do_clear_on_faders=1;
 index_ask_confirm=1;
 mouse_released=1  ;
}
}
}//fin limitation nb faders user define
}//fin doublage des faders
}
////////FIN DES 48 POTARDS//////////////////////////////////////////////////////

return(0);
}
int do_arduino_config(int cfg_X, int cfg_Y)
{
//port COM
petitchiffre.Print("DEVICE ON COM:",cfg_X+20,cfg_Y+45); 
Rect Comport(Vec2D(cfg_X+120,cfg_Y+30),Vec2D(50,25));
Comport.SetRoundness(rondeur_fader/2);
Comport.SetLineWidth(epaisseur_ligne_fader);  
Comport.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+30 && mouse_y<cfg_Y+30+25)
{
Comport.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
Comport.Draw(CouleurBlind);
int new_comport=atoi(numeric);
reset_numeric_entry();
if(  new_comport>0 && new_comport<18)
{
if(arduino_device_0_is_ignited==1){arduino_close(0);}
arduino_com0=new_comport;           
arduino_init(0);      
mouse_released=1; 
}                   
}                     
}
petitchiffre.Print(ol::ToString(arduino_com0),cfg_X+140,cfg_Y+45);

//BAUD RATE
petitchiffre.Print("BAUD-RATE:",cfg_X+20,cfg_Y+75); 
Rect BaudrateB(Vec2D(cfg_X+120,cfg_Y+60),Vec2D(50,25));
BaudrateB.SetRoundness(rondeur_fader/2);
BaudrateB.SetLineWidth(epaisseur_ligne_fader);  
BaudrateB.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+60 && mouse_y<cfg_Y+60+25)
{
BaudrateB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
BaudrateB.Draw(CouleurBlind);
int new_Baudrate=atoi(numeric);
reset_numeric_entry();
if( new_Baudrate>0 && (new_Baudrate ==300 || new_Baudrate==1200 || new_Baudrate==2400 || new_Baudrate==4800 || new_Baudrate==9600 || 
new_Baudrate==14400 || new_Baudrate==19200 || new_Baudrate==28800 || new_Baudrate==38400 || new_Baudrate==57600 || new_Baudrate==115200))
{
if(arduino_device_0_is_ignited==1){arduino_close(0);}
arduino_baud_rate0=new_Baudrate;           
arduino_init(0);      
mouse_released=1; 
}                   
}                     
}
petitchiffre.Print(ol::ToString(arduino_baud_rate0),cfg_X+128,cfg_Y+75);

//REQUEST RATE
petitchiffre.Print("REQUEST-RATE:",cfg_X+20,cfg_Y+105); 
Rect ReqrateB(Vec2D(cfg_X+120,cfg_Y+90),Vec2D(50,25));
ReqrateB.SetRoundness(rondeur_fader/2);
ReqrateB.SetLineWidth(epaisseur_ligne_fader);  
ReqrateB.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+90 && mouse_y<cfg_Y+90+25)
{
ReqrateB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
ReqrateB.Draw(CouleurBlind);
int new_Reqrate=atoi(numeric);
reset_numeric_entry();
if( new_Reqrate>0 && new_Reqrate<=100 )
{
ARDUINO_RATE=new_Reqrate;
install_int_ex(ticker_arduino ,BPS_TO_TIMER(ARDUINO_RATE));         
mouse_released=1; 
}                   
}                     
}
petitchiffre.Print(ol::ToString(ARDUINO_RATE),cfg_X+140,cfg_Y+105);

////////////////LIMITATION DE CARTES ///////////////////////////////////////////
petitchiffre.Print("LAST I/O:",cfg_X+20,cfg_Y+135); 
Rect MaxIOB(Vec2D(cfg_X+120,cfg_Y+120),Vec2D(50,25));
MaxIOB.SetRoundness(rondeur_fader/2);
MaxIOB.SetLineWidth(epaisseur_ligne_fader);  
MaxIOB.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+120 && mouse_y<cfg_Y+120+25)
{
MaxIOB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
MaxIOB.Draw(CouleurBlind);
int new_maxio=atoi(numeric);
reset_numeric_entry();
if( new_maxio>=0 && new_maxio<=digital_limit )
{
arduino_max_digital=new_maxio;
mouse_released=1; 
}                   
}                     
}
petitchiffre.Print(ol::ToString(arduino_max_digital),cfg_X+140,cfg_Y+135);
///////////////////////////////
petitchiffre.Print("LAST ANALOG:",cfg_X+20,cfg_Y+165); 
Rect MaxAnB(Vec2D(cfg_X+120,cfg_Y+150),Vec2D(50,25));
MaxAnB.SetRoundness(rondeur_fader/2);
MaxAnB.SetLineWidth(epaisseur_ligne_fader);  
MaxAnB.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+150 && mouse_y<cfg_Y+150+25)
{
MaxAnB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
MaxAnB.Draw(CouleurBlind);
int new_maxan=atoi(numeric);
reset_numeric_entry();
if( new_maxan>=0 && new_maxan<=analog_limit )
{
arduino_max_analog=new_maxan;
mouse_released=1; 
}                   
}                     
}
petitchiffre.Print(ol::ToString(arduino_max_analog),cfg_X+140,cfg_Y+165);
/////////////////////////////////
petitchiffre.Print("OPEN:",cfg_X+20,cfg_Y+195); 
Rect OpenB(Vec2D(cfg_X+120,cfg_Y+180),Vec2D(50,25));
OpenB.SetRoundness(rondeur_fader/2);
OpenB.SetLineWidth(epaisseur_ligne_fader);  
OpenB.Draw(CouleurFond.WithAlpha(0.5));
switch (arduino_device_0_is_ignited)
{
case 0:
petitchiffre.Print("is OFF",cfg_X+130,cfg_Y+195);      
break;
case 1:
petitchiffre.Print("is ON",cfg_X+130,cfg_Y+195);      
break;       
}
if(mouse_x>cfg_X+120 && mouse_x<cfg_X+120+50 && mouse_y>cfg_Y+180 && mouse_y<cfg_Y+180+25)
{
OpenB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
OpenB.Draw(CouleurBlind);
switch (arduino_device_0_is_ignited)
{
case 0:
   arduino_init(0);   
break;
case 1:
   arduino_close(0); 
   arduino_device_0_is_ignited=0;    
break;       
}
mouse_released=1; 
}                     
}
///////////////////////////////////////////////////////////

petitchiffre.Print("Digital affectation:",cfg_X+200,cfg_Y+20);
petitchiffre.Print("Analog affectation:",cfg_X+510,cfg_Y+20);
///////////////////BOX AFFECTATION DIGITAL////////////////

char string_temp_def[25];
char string_temp_familly[25];



for (int y=0;y<12;y++)
{
////////DIG/////////////////////////////////////////////////////////////////
Rect OverTyp(Vec2D(cfg_X+200+5,(cfg_Y+40+(y*20)-10)),Vec2D(70,18));
OverTyp.SetRoundness(rondeur_fader/2);
OverTyp.Draw(CouleurFond.WithAlpha(0.3));

Rect OverAction(Vec2D(cfg_X+280+5,(cfg_Y+40+(y*20)-10)),Vec2D(140,18));
OverAction.SetRoundness(rondeur_fader/2);
OverAction.Draw(CouleurFond.WithAlpha(0.3));

Rect OverVal(Vec2D(cfg_X+430+5,(cfg_Y+40+(y*20)-10)),Vec2D(30,18));
OverVal.SetRoundness(rondeur_fader/2);
OverVal.Draw(CouleurFond.WithAlpha(0.3));
/////////ANA///////////////////////////////////////////////////////////////

Rect OverAff(Vec2D(cfg_X+520+5,(cfg_Y+40+(y*20)-10)),Vec2D(105,18));
OverAff.SetRoundness(rondeur_fader/2);
OverAff.Draw(CouleurFond.WithAlpha(0.3));

Rect OverValA(Vec2D(cfg_X+630+5,(cfg_Y+40+(y*20)-10)),Vec2D(30,18));
OverValA.SetRoundness(rondeur_fader/2);
OverValA.Draw(CouleurFond.WithAlpha(0.3));


if(mouse_y>(cfg_Y+40+(y*20)-10) && mouse_y<(cfg_Y+40+(y*20)+5))
{
////////////////////DIG//////////////////////////////////////////////////////////
//changement type
if(mouse_x>cfg_X+200+5 && mouse_x<cfg_X+200+5+70)
{
OverTyp.DrawOutline(CouleurLigne);                  
if(mouse_button==1 && mouse_released==0)
{
arduino_digital_type[position_line_io+y]++;
arduino_digital_function_input[position_line_io+y][1]=0;
arduino_digital_function_input[position_line_io+y][0]=0;
arduino_digital_function_output[position_line_io+y][1]=0;
arduino_digital_function_output[position_line_io+y][0]=0;
if(arduino_digital_type[position_line_io+y]>3)
{arduino_digital_type[position_line_io+y]=0;}
OverTyp.Draw(CouleurFader);    
mouse_released=1;               
}
}
//////L'ASSIGNATION INPUT/////////////////////////////////////////////
//arduino_digital_function_input[128][2];//action // Val 1 

if(mouse_x>cfg_X+280+5 && mouse_x<cfg_X+280+5+140)//famille d action
{
OverAction.DrawOutline(CouleurLigne);                  
if(mouse_button==1 && mouse_released==0)
{
if(arduino_digital_type[position_line_io+y]==1)//input
{
arduino_digital_function_input[position_line_io+y][0]++;
if(arduino_digital_function_input[position_line_io+y][0]>33)
{arduino_digital_function_input[position_line_io+y][0]=0;}
arduino_digital_function_input[position_line_io+y][1]=0;
}
if(arduino_digital_type[position_line_io+y]==2 || arduino_digital_type[position_line_io+y]==3)//output ON OF ET PWM
{
arduino_digital_function_output[position_line_io+y][0]++;
if(arduino_digital_function_output[position_line_io+y][0]>2)
{arduino_digital_function_output[position_line_io+y][0]=0;}
arduino_digital_function_output[position_line_io+y][1]=0;
}
OverAction.Draw(CouleurFader);    
mouse_released=1;               
}
}           


///////La valeur de l'ordre si il y en a une ( par ex. num fader)///////

if(mouse_x>cfg_X+430+5 && mouse_x<cfg_X+430+5+30)//famille d action
{
OverVal.DrawOutline(CouleurLigne);                  
if(mouse_button==1 && mouse_released==0)
{
int valois=atoi(numeric);

///INPUT/////////////////////////////////////////////////////////////////////
//data Val1 range pour un input de type fader ( 0 à 11 )
if(
arduino_digital_type[position_line_io+y]==1
&& arduino_digital_function_input[position_line_io+y][0]>=0 && arduino_digital_function_input[position_line_io+y][0]<=11 
&& valois>0 && valois<=48
)
{
arduino_digital_function_input[position_line_io+y][1]=valois;                                                            
}
//faire data range pour le picth: 0 à 127
if(
arduino_digital_type[position_line_io+y]==1
&& ( arduino_digital_function_input[position_line_io+y][0]>=17 || arduino_digital_function_input[position_line_io+y][0]<=32) 
&& valois>=0 && valois<=127
)
{
arduino_digital_function_input[position_line_io+y][1]=valois;                                                            
}
///////////OUTPUT ON OFF ET PWM///////////////////////////////////////////////////////////////
if((arduino_digital_type[position_line_io+y]==2 || arduino_digital_type[position_line_io+y]==3) && arduino_digital_function_output[position_line_io+y][0]==1
&& valois>0 && valois<513)//CHANNEL
{
arduino_digital_function_output[position_line_io+y][1]=valois;                                                 
}
if((arduino_digital_type[position_line_io+y]==2 || arduino_digital_type[position_line_io+y]==3) && arduino_digital_function_output[position_line_io+y][0]==2
&& valois>0 && valois<49)//Fader
{
arduino_digital_function_output[position_line_io+y][1]=valois;                                                 
}
reset_numeric_entry();
OverVal.Draw(CouleurFader);    
mouse_released=1;               
}
}
///////////////////////////////////////          
///////////////////BOX AFFECTATION ANALOG////////////////


//////L'ASSIGNATION Analog/////////////////////////////////////////////

//changement affectation
if(mouse_x>cfg_X+520+5 && mouse_x<cfg_X+520+5+105)
{
OverAff.DrawOutline(CouleurLigne);                  
if(mouse_button==1 && mouse_released==0)
{
arduino_analog_function_input[position_line_ana+y]++;
arduino_analog_attribution_input[position_line_ana+y]=0;
if(arduino_analog_function_input[position_line_ana+y]>20)
{arduino_analog_function_input[position_line_ana+y]=0;}
OverAff.Draw(CouleurFader);    
mouse_released=1;               
}
}
///////////////LA VALEUR/////////////////////////////
if(mouse_x>cfg_X+630+5 && mouse_x<cfg_X+630+5+30)//valeur
{
OverValA.DrawOutline(CouleurLigne);                  
if(mouse_button==1 && mouse_released==0)
{
int valana=0;
valana=atoi(numeric);
reset_numeric_entry();
/////////////INPUT
//limitation des valeurs aux types d entrees
if(arduino_analog_function_input[position_line_ana+y]==1 || arduino_analog_function_input[position_line_ana+y]==2)//faders level et speed
{
 if(valana>0 && valana<=48)
 {arduino_analog_attribution_input[position_line_ana+y]=valana-1;}
}
if(  arduino_analog_function_input[position_line_ana+y]==4)//seq scene et preset
{
 if(valana>0 && valana<=3)//1 stage 2 preset 3 speed
 {arduino_analog_attribution_input[position_line_ana+y]=valana-1;}
}
if(  arduino_analog_function_input[position_line_ana+y]>=5 &&  arduino_analog_function_input[position_line_ana+y]<=20 )//simulation midi
{
 if(valana>=0 && valana<=127)//Pitch
 {arduino_analog_attribution_input[position_line_ana+y]=valana;}
}



OverValA.Draw(CouleurFader);   
mouse_released=1;               
}
}           






/////////////////////////////////////////////////////////////////////////////// 
}
//////////////////AFFICHAGE///////////////////////////////

if(position_line_io+y==0)
{
sprintf(string_temp_def,"0: Serial",position_line_io+y);                          
sprintf(string_temp_familly,"Rx");
OverTyp.Draw(CouleurFond);
petitchiffre.Print(string_temp_familly,cfg_X+280+13,cfg_Y+43+(y*20));  
petitchiffre.Print(string_temp_def,cfg_X+200+15,cfg_Y+43+(y*20));  
petitchiffrerouge.Print(ol::ToString(digital_data_from_arduino[position_line_io+y]),cfg_X+475,cfg_Y+43+(y*20));    
}
if(position_line_io+y==1)
{
sprintf(string_temp_def,"1: Serial",position_line_io+y);
sprintf(string_temp_familly,"Tx");  
OverTyp.Draw(CouleurFond);  
petitchiffre.Print(string_temp_familly,cfg_X+280+13,cfg_Y+43+(y*20));  
petitchiffre.Print(string_temp_def,cfg_X+200+15,cfg_Y+43+(y*20));  
petitchiffrerouge.Print(ol::ToString(digital_data_from_arduino[position_line_io+y]),cfg_X+475,cfg_Y+43+(y*20));                        
}

if(position_line_io+y>1 && position_line_io+y<=arduino_max_digital)
{
///////LE TYPE ////////////////////////////////////////////
switch(arduino_digital_type[position_line_io+y])
{
case 0://desafected
sprintf(string_temp_def,"%d: -",position_line_io+y);
break;
case 1://input      
sprintf(string_temp_def,"%d: Input",position_line_io+y);
OverTyp.Draw(CouleurRed);  
break;
case 2://output
sprintf(string_temp_def,"%d: Output",position_line_io+y);
OverTyp.Draw(CouleurGreen);  
break;
case 3://pwm
sprintf(string_temp_def,"%d: PWM",position_line_io+y);
OverTyp.Draw(CouleurYellow);  
break;      
default:
break;                                        
}      
                             
////////////ACTIONS /////////////////////////////////////////////////
////////////////GRANDE FAMILLE INPUT////////////////////////////////////////
if(arduino_digital_type[position_line_io+y]==1)//si de la famille des inputs
{
switch(arduino_digital_function_input[position_line_io+y][0])
{
case 0://desafected
sprintf(string_temp_familly,"-");
break;
case 1: //fader up                                                
sprintf(string_temp_familly,"Fader: UP");
break;
case 2://fader down
sprintf(string_temp_familly,"Fader: DOWN");
break;
case 3://Fader saw
sprintf(string_temp_familly,"Fader: SAW");
break;      
case 4:
sprintf(string_temp_familly,"Fader: ToPREVDock");     
break;
case 5:
sprintf(string_temp_familly,"Fader: ToNEXTDock");     
break;
case 6:
sprintf(string_temp_familly,"Fader: Up/Down");
break;
case 7:
sprintf(string_temp_familly,"Fader: LOCK");
break;
case 8:
sprintf(string_temp_familly,"Fader: FLASH");
break;
case 9:
sprintf(string_temp_familly,"Fader: All at 0");
break;
case 10:
sprintf(string_temp_familly,"Fader: L/Unloop dock");
break;
case 11:
sprintf(string_temp_familly,"Fader: L/Unloop all");
break;
case 12:
sprintf(string_temp_familly,"Seq: GO");
break;
case 13:
sprintf(string_temp_familly,"Seq: GO BACK");
break;
case 14:
sprintf(string_temp_familly,"Seq: JUMP");
break;
case 15:
sprintf(string_temp_familly,"Seq: SHIFT-W");
break;
case 16:
sprintf(string_temp_familly,"Seq: SHIFT-X");
break;
case 17:
sprintf(string_temp_familly,"Bang Banger num");
break;
case 18:
sprintf(string_temp_familly,"As Key-On CH0 Pitch:");
break;
case 19:
sprintf(string_temp_familly,"As Key-On CH1 Pitch:");
break;
case 20:
sprintf(string_temp_familly,"As Key-On CH2 Pitch:");
break;
case 21:
sprintf(string_temp_familly,"As Key-On CH3 Pitch:");
break;
case 22:
sprintf(string_temp_familly,"As Key-On CH4 Pitch:");
break;
case 23:
sprintf(string_temp_familly,"As Key-On CH5 Pitch:");
break;
case 24:
sprintf(string_temp_familly,"As Key-On CH6 Pitch:");
break;
case 25:
sprintf(string_temp_familly,"As Key-On CH7 Pitch:");
break;
case 26:
sprintf(string_temp_familly,"As Key-On CH8 Pitch:");
break;
case 27:
sprintf(string_temp_familly,"As Key-On CH9 Pitch:");
break;
case 28:
sprintf(string_temp_familly,"As Key-On CH10 Pitch:");
break;
case 29:
sprintf(string_temp_familly,"As Key-On CH11 Pitch:");
break;
case 30:
sprintf(string_temp_familly,"As Key-On CH12 Pitch:");
break;
case 31:
sprintf(string_temp_familly,"As Key-On CH13 Pitch:");
break;
case 32:
sprintf(string_temp_familly,"As Key-On CH14 Pitch:");
break;
case 33:
sprintf(string_temp_familly,"As Key-On CH15 Pitch:");
break;
default:
break;                                        
} 
petitchiffre.Print(string_temp_familly,cfg_X+280+13,cfg_Y+43+(y*20));  
petitchiffre.Print(ol::ToString(arduino_digital_function_input[position_line_io+y][1]),cfg_X+440+3,cfg_Y+43+(y*20)); 
}
petitchiffrerouge.Print(ol::ToString(digital_data_from_arduino[position_line_io+y]),cfg_X+475,cfg_Y+43+(y*20));  
petitchiffre.Print(string_temp_def,cfg_X+200+15,cfg_Y+43+(y*20));     
}

if(arduino_digital_type[position_line_io+y]==2)//si de la famille des Outputs
{
switch(arduino_digital_function_output[position_line_io+y][0])
{
case 0://desafected
sprintf(string_temp_familly,"-");
break;
case 1: //relié à un circuit  
sprintf(string_temp_familly,"Channel >10");            
break;
case 2://relié à un fader
sprintf(string_temp_familly,"Fader >10");
break;
}
petitchiffre.Print(string_temp_familly,cfg_X+280+13,cfg_Y+43+(y*20));  
petitchiffre.Print(ol::ToString(arduino_digital_function_output[position_line_io+y][1]),cfg_X+440+3,cfg_Y+43+(y*20)); 

}
if(arduino_digital_type[position_line_io+y]==3)//si de la famille pwm
{
switch(arduino_digital_function_output[position_line_io+y][0])
{
case 0://desafected
sprintf(string_temp_familly,"-");
break;
case 1: //relié à un circuit  
sprintf(string_temp_familly,"Channel");            
break;
case 2://relié à un fader
sprintf(string_temp_familly,"Fader");
break;
}
petitchiffre.Print(string_temp_familly,cfg_X+280+13,cfg_Y+43+(y*20));  
petitchiffre.Print(ol::ToString(arduino_digital_function_output[position_line_io+y][1]),cfg_X+440+3,cfg_Y+43+(y*20)); 
}


//affichage analog
if(position_line_ana+y<=arduino_max_analog)
{
sprintf(string_temp_def,"%d:",position_line_ana+y);
petitchiffre.Print(string_temp_def,cfg_X+510,cfg_Y+43+(y*20)); 
switch(arduino_analog_function_input[position_line_ana+y])
{
case 0://desafected
sprintf(string_temp_familly,"-");
break;
case 1: //faders  lvl                                           
sprintf(string_temp_familly,"Fader Level:");
petitchiffre.Print(ol::ToString((arduino_analog_attribution_input[position_line_ana+y]+1)),cfg_X+645,cfg_Y+43+(y*20));     
break;
case 2://faders speeed
sprintf(string_temp_familly,"Fader Speed:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]+1),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 3://master
sprintf(string_temp_familly,"Grand Master");
break;      
case 4://seq scene et preset et vitesse
sprintf(string_temp_familly,"Sequence:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]+1),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 5://Midi CH0
sprintf(string_temp_familly,"As CC CH0 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 6://Midi CH1
sprintf(string_temp_familly,"As CC CH1 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 7://Midi CH2
sprintf(string_temp_familly,"As CC CH2 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 8://Midi CH3
sprintf(string_temp_familly,"As CC CH3 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 9://Midi CH4
sprintf(string_temp_familly,"As CC CH4 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 10://Midi CH5
sprintf(string_temp_familly,"As CC CH5 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 11://Midi CH6
sprintf(string_temp_familly,"As CC CH6 Picth:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 12://Midi CH7
sprintf(string_temp_familly,"As CC CH7 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 13://Midi CH8
sprintf(string_temp_familly,"As CC CH8 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 14://Midi CH9
sprintf(string_temp_familly,"As CC CH9 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 15://Midi CH10
sprintf(string_temp_familly,"As CC CH10 Picth:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 16://Midi CH11
sprintf(string_temp_familly,"As CC CH11 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 17://Midi CH12
sprintf(string_temp_familly,"As CC CH12 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 18://Midi CH13
sprintf(string_temp_familly,"As CC CH13 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 19://Midi CH14
sprintf(string_temp_familly,"As CC CH14 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
case 20://Midi CH15
sprintf(string_temp_familly,"As CC CH15 Pitch:");
petitchiffre.Print(ol::ToString(arduino_analog_attribution_input[position_line_ana+y]),cfg_X+645,cfg_Y+43+(y*20)); 
break;
default:
break;
}
petitchiffre.Print(string_temp_familly,cfg_X+515+15,cfg_Y+43+(y*20));     
petitchiffrerouge.Print(ol::ToString(analog_data_from_arduino[position_line_ana+y]),cfg_X+670+5,cfg_Y+43+(y*20));                                             
}

//fin boucle des 12 lignes
}
/////////////////UP DOWN LINE IO /////////////////////
Circle LineUp(Vec2D(cfg_X+200+200,cfg_Y+15),12);
LineUp.Draw(CouleurFond.WithAlpha(0.3));
Circle LineDown(Vec2D(cfg_X+200+240,cfg_Y+15),12);
LineDown.Draw(CouleurFond.WithAlpha(0.3));

if(mouse_y>cfg_Y+15-12 && mouse_y<cfg_Y+15+12)
{  
if(mouse_x>cfg_X+200+200-12 && mouse_x<cfg_X+200+200+12)
{                    
LineUp.Draw(CouleurSurvol);
if(mouse_button==1)
{
LineUp.Draw(CouleurFader);
if(position_line_io>0){position_line_io--;}
}                 
}
else if(mouse_x>cfg_X+200+240-12 && mouse_x<cfg_X+200+240+12)
{
LineDown.Draw(CouleurSurvol);
if(mouse_button==1)
{
LineDown.Draw(CouleurFader);
if(position_line_io<digital_limit-1){position_line_io++;}
}                  
}                                                
}
petitchiffre.Print("-",cfg_X+200+198,cfg_Y+19);
petitchiffre.Print("+",cfg_X+200+236,cfg_Y+19);
LineUp.DrawOutline(CouleurLigne.WithAlpha(0.6));
LineDown.DrawOutline(CouleurLigne.WithAlpha(0.6));

/////////////////UP DOWN ANA /////////////////////
Circle LineUpA(Vec2D(cfg_X+510+150,cfg_Y+15),12);
LineUpA.Draw(CouleurFond.WithAlpha(0.3));
Circle LineDownA(Vec2D(cfg_X+510+190,cfg_Y+15),12);
LineDownA.Draw(CouleurFond.WithAlpha(0.3));

if(mouse_y>cfg_Y+15-12 && mouse_y<cfg_Y+15+12)
{  
if(mouse_x>cfg_X+510+150-12 && mouse_x<cfg_X+510+150+12)
{                    
LineUpA.Draw(CouleurSurvol);
if(mouse_button==1)
{
LineUpA.Draw(CouleurFader);
if(position_line_ana>0){position_line_ana--;}
}                 
}
else if(mouse_x>cfg_X+510+190-12 && mouse_x<cfg_X+510+190+12)
{
LineDownA.Draw(CouleurSurvol);
if(mouse_button==1)
{
LineDownA.Draw(CouleurFader);
if(position_line_ana<analog_limit-1){position_line_ana++;}
}                  
}                                                
}
petitchiffre.Print("-",cfg_X+510+148,cfg_Y+19);
petitchiffre.Print("+",cfg_X+510+186,cfg_Y+19);
LineUpA.DrawOutline(CouleurLigne.WithAlpha(0.6));
LineDownA.DrawOutline(CouleurLigne.WithAlpha(0.6));



//FEEDBACK
petitpetitchiffre.Print("Bytes received:",cfg_X+10,cfg_Y+260);  
petitchiffre.Print(ol::ToString( nBytesReadArduino0),cfg_X+110,cfg_Y+260); 
petitpetitchiffre.Print("Last str. received:",cfg_X+10,cfg_Y+270);  
petitpetitchiffre.Print(tmp_str_arduino,cfg_X+110,cfg_Y+270);  
petitchiffrerouge.Print(string_Arduino_status,cfg_X+10,cfg_Y+285);
  

return(0);                              
}
int do_logical_Time_Window(int xtime, int ytime, int timerayon)
{

//////////////////////ROUE DE TEMPS//////////////////////////////////////////////////////
//affectation midi

if( Midi_Faders_Affectation_Type!=0)
{
if(mouse_x>xtime+150  && mouse_x< xtime+150+100 && mouse_y>ytime+150 && mouse_y<ytime+150+100 )
 {
 //midi report
  switch(miditable[0][758])
  {
  case 0: sprintf(thetypinfo,"Note");break;
  case 1: sprintf(thetypinfo,"Key On");break;
  case 2: sprintf(thetypinfo,"Key Off");break;
  case 4: sprintf(thetypinfo,"Ctrl Change");break;
  }
  sprintf(string_last_midi_id,"TIMEWHEEL FADER is Ch: %d Pitch: %d Typ: %s" , miditable[1][758],miditable[2][758],thetypinfo);

  attribute_midi_solo_affectation(758,Midi_Faders_Affectation_Mode);
  mouse_released=1;
 }
}
/////////////////////////////////////////////////////////////////////////////////////////
if(index_play_chrono==0 )
{
for(time_angle = 0 ; time_angle <5.980005; time_angle+=0.01)//radians
{
   vtimex = cos(time_angle)*timerayon;
   vtimey = sin(time_angle)*timerayon;

   if(mouse_x>xtime+vtimex+150-15  && mouse_x< xtime+vtimex+150+15 && mouse_y>ytime+vtimey+150-15 && mouse_y<ytime+vtimey+150+15 )
   {

   actual_tickers_chrono=0;//reset du chrono
   angle_timesnap=time_angle;//angle rotation roue time
   position_curseur_time_x= xtime+150+vtimex;
   position_curseur_time_y=ytime+150+vtimey ;
   midi_levels[758]=(int)((angle_timesnap/5.980005)* 128);

   if(midi_send_out[758]==1){index_send_midi_out[758]=1;}

   if(time_wheel_datatype_is==0)//minutes
   {
   angle_timesnap_min=angle_timesnap;
   time_minutes=(int)((angle_timesnap_min/5.980005)*60);
   }
   if(time_wheel_datatype_is==1)//secondes
   {
   angle_timesnap_sec=angle_timesnap;
   time_secondes=(int)((angle_timesnap_sec/5.980005)*60);
   }
   if(time_wheel_datatype_is==2)//dixiemes
   {
   angle_timesnap_dix=angle_timesnap;
   time_centiemes=(int)((angle_timesnap_dix/5.980005)*100);
   }

   }
}
}




//////////////////////////CHRONO//////////////////////////////////////////////////

if(mouse_x>xtime+140-15 && mouse_x<xtime+140+15 && mouse_y>ytime+190-15 && mouse_y<ytime+190+15)
{

switch(miditable[0][765])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"ChronoPlay is Ch: %d Pitch: %d Typ: %s",miditable[1][765],miditable[2][765],thetypinfo);

if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(765,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
Chrono_PlayPause();
mouse_released=1;
}
}

if(mouse_x>xtime+180-8 && mouse_x<xtime+180+8 && mouse_y>ytime+200-8 && mouse_y<ytime+200+8)
{

switch(miditable[0][766])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"ChronoReset is Ch: %d Pitch: %d Typ: %s",miditable[1][766],miditable[2][766],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(766,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
Chrono_Reset();
mouse_released=1;
}
}

///////////////////////CHOIX DE SELECTION ROUE= SECONDES ou MINUTES ou HEURES


if(mouse_x>xtime+120 && mouse_x<xtime+180 && mouse_y>ytime+80 && mouse_y<ytime+100)
{

switch(miditable[0][759])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"TimeType is Ch: %d Pitch: %d Typ: %s",miditable[1][759],miditable[2][759],thetypinfo);

if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(759,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
time_wheel_datatype_is++;
if(time_wheel_datatype_is>2){time_wheel_datatype_is=0;}
set_time_cursor_to_time_type(time_wheel_datatype_is);
mouse_released=1;
}
}



/////////////////////////CASES D' AFFECTATION AUX DOCK ET MEMOIRES

//la selection des modes de temps in out din dout
if(mouse_x>xtime+300 && mouse_x<xtime+350)
{
//DIN
if(mouse_y>ytime+120 && mouse_y<ytime+150)
{

switch(miditable[0][760])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"DelayIn Button is Ch: %d Pitch: %d Typ: %s",miditable[1][760],miditable[2][760],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(760,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(index_type_of_time_to_affect[0]==0){index_type_of_time_to_affect[0]=1;}
else if(index_type_of_time_to_affect[0]==1){index_type_of_time_to_affect[0]=0;}
mouse_released=1;
}
}
//IN
if(mouse_y>ytime+20 && mouse_y<ytime+50)
{

switch(miditable[0][761])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"In Button is Ch: %d Pitch: %d Typ: %s",miditable[1][761],miditable[2][761],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(761,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(index_type_of_time_to_affect[1]==0){index_type_of_time_to_affect[1]=1;}
else if(index_type_of_time_to_affect[1]==1){index_type_of_time_to_affect[1]=0;}
mouse_released=1;
}
}
//DOUT
if(mouse_y>ytime+170 && mouse_y<ytime+200)
{

switch(miditable[0][762])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"DelayOut Button is Ch: %d Pitch: %d Typ: %s",miditable[1][762],miditable[2][762],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(762,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(index_type_of_time_to_affect[2]==0){index_type_of_time_to_affect[2]=1;}
else if(index_type_of_time_to_affect[2]==1){index_type_of_time_to_affect[2]=0;}
mouse_released=1;
}
}
//OUT
if(mouse_y>ytime+70 && mouse_y<ytime+100)
{

switch(miditable[0][763])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"Out Button is Ch: %d Pitch: %d Typ: %s",miditable[1][763],miditable[2][763],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(763,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(index_type_of_time_to_affect[3]==0){index_type_of_time_to_affect[3]=1;}
else if(index_type_of_time_to_affect[3]==1){index_type_of_time_to_affect[3]=0;}
mouse_released=1;
}
}
}

///TAP TEMPO sending
if(mouse_x>xtime+265 && mouse_x<xtime+265+15 && mouse_y>ytime+210 && mouse_y<ytime+210+15)
{

switch(miditable[0][1328])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"Send Tap is Ch: %d Pitch: %d Typ: %s",miditable[1][1328],miditable[2][1328],thetypinfo);

if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(1328,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(numeric_postext==0 && index_window_chasers==1)
            {
            set_chaser_tempo_unit(chaser_selected);
            }
            else//si chiffre de chaser tapé
            {
            int chazr=atoi(numeric);
            if(chazr>0 && chazr<128)
            {
            set_chaser_tempo_unit(chazr-1);
            numeric_postext=0;
            reset_numeric_entry();
            }
            }
            mouse_released=1;
do_light_send_tap=1;
}

}



///TAP TEMPO reoording
if(mouse_x>xtime+285 && mouse_x<xtime+285+15 && mouse_y>ytime+210 && mouse_y<ytime+210+15)
{

switch(miditable[0][1327])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"Record Tap is Ch: %d Pitch: %d Typ: %s",miditable[1][1327],miditable[2][1327],thetypinfo);

if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(1327,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
index_recording_tap_tempo=toggle(index_recording_tap_tempo);
if(index_recording_tap_tempo==1)
{
start_tempo_ticks=actual_time;nbr_steps_tempo=0;tempo_interm=0;
sprintf(string_tap_tempo_average,"Step:   -    Global: -");
sprintf(string_actual_tap_tempo,"Last: ");
sprintf(string_Last_Order,"Tap Tempo Rec ON");
}
else{sprintf(string_Last_Order,"Tap Tempo Rec Off");}
mouse_released=1;
}


}


//tap button tempo
if(mouse_x>xtime+310 && mouse_x<xtime+310+40 && mouse_y>ytime+210 && mouse_y<ytime+210+30)
{

switch(miditable[0][1326])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"Tap Tempo is Ch: %d Pitch: %d Typ: %s",miditable[1][1326],miditable[2][1326],thetypinfo);

if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(1326,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
set_new_time_in_tap_tempo();
mouse_released=1;
}
}


//AFFECT TIME
if(mouse_x>xtime+280 && mouse_x<xtime+350 && mouse_y>ytime+260 && mouse_y<ytime+290)
{

switch(miditable[0][764])
{
//midi report
case 0:
sprintf(thetypinfo,"Note");
break;
case 1:
sprintf(thetypinfo,"Key On");
break;
case 2:
sprintf(thetypinfo,"Key Off");
break;
case 4:
sprintf(thetypinfo,"Ctrl Change");
break;
}
sprintf(string_last_midi_id,"Affect Time Button is Ch: %d Pitch: %d Typ: %s",miditable[1][764],miditable[2][764],thetypinfo);

if( Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(764,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(index_affect_time==0)
{
reset_index_actions();
reset_indexs_confirmation();
index_affect_time=1;
}
else
{
reset_index_actions();
}
index_do_dock=index_affect_time;
mouse_released=1;
}
}


button_midi_out_core( xtime+250, ytime+250,758);

return(0);
}
Beispiel #15
0
int do_logical_echo_window(int xe, int ye)
{
if(window_focus_id==W_ECHO && dragging_channel_in_echo==0 && mouse_button==1)
{

//edit
if( mouse_released==0 && mouse_x>xe+610 && mouse_x<xe+610+50 && mouse_y>ye+10 && mouse_y<ye+10+20 )
{
index_enable_edit_echo=toggle(index_enable_edit_echo);
mouse_released=1;
}


int index_ec=0;
//SElection presets
for(int le=0;le<3;le++)
{
for(int cel=0;cel<8;cel++)
{
index_ec=cel+(le*8);
if( mouse_x> xe+180+(40*cel) && mouse_x<xe+180+(40*cel)+30 && mouse_y>ye+10+(le*25) && mouse_y<ye+10+(le*25)+20)
{
if( mouse_released==0 )
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
 attribute_midi_to_control(1663+index_ec,Midi_Faders_Affectation_Type,Midi_Faders_Affectation_Mode);
}
else
{
if(index_main_clear==1)
{
if(index_enable_edit_echo==1)
{
index_selected_echo_for_manipulation=index_ec;
index_ask_clear_echo_preset=1;
index_ask_confirm=1;             //clear_echo_preset(index_selected_echo_for_manipulation);
}
}

else
{
echo_selected=index_ec;

}
}
mouse_released=1;
}
}
}
}


//Set ChanPos
if( mouse_x>xe+615 && mouse_x<xe+615+40 && mouse_y>ye+65 && mouse_y<ye+65+20 && mouse_released==0 && dragging_channel_in_echo==0 && numeric_postext>0)
 {
 echo_grid_channel_position[echo_selected]=atoi(numeric)-1;
 echo_grid_channel_position[echo_selected]= constrain_int_data_to_this_range(echo_grid_channel_position[echo_selected],0,511-14);
 reset_numeric_entry();
 numeric_postext=0;
 mouse_released=1;
 }


//ECHO ACTION PANNEL

for (int n=0;n<5;n++)
{
//actions
if(mouse_x>xe+30 && mouse_x<xe+30+115 && mouse_y>ye+50+(n*30) && mouse_y<ye+50+30+(n*30))
{
if( mouse_released==0 )
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1686+n,Midi_Faders_Affectation_Mode);
}
else
{
switch(n)
{
case 0:
     echo_is_echo_mode[echo_selected]=toggle(echo_is_echo_mode[echo_selected]);
     do_bounce[echo_selected]=echo_is_echo_mode[echo_selected];
break;
case 1:
     snap_fader_state(echo_selected,echo_pointing_fader_num[echo_selected]-1);
break;
case 2:
     bounce(echo_selected);
break;
case 3:
     snap_kill_and_bounce(echo_selected,echo_pointing_fader_num[echo_selected]-1);
break;
case 4:
     recall_fader_state_echo(echo_pointing_fader_num[echo_selected]-1);
break;
default:
break;
}
}
mouse_released=1;
}

}
}

//Fader point to
if( mouse_x>xe+70 && mouse_x<xe+70+45 && mouse_y>ye+200 && mouse_y<ye+200+35 && mouse_released==0 && numeric_postext>0)
{
echo_pointing_fader_num[echo_selected]=constrain_int_data_to_this_range(atoi(numeric),1,48);
reset_numeric_entry();
numeric_postext=0;
mouse_released=1;
}


////AFFECT TO DOCK
if( mouse_released==0 && mouse_x>xe+10 && mouse_x<xe+10+110 && mouse_y>ye+245 && mouse_y<ye+245+20  )
{
if(index_affect_echo_to_dock==0)
{
reset_index_actions();
reset_indexs_confirmation();
index_affect_echo_to_dock=1;
}
else
{
reset_index_actions();
}
index_do_dock=index_affect_echo_to_dock;
mouse_released=1;
}


//manipulate channel params Level mode / ground mode
if( mouse_released==0 && mouse_x>xe+500 && mouse_x<xe+500+70 && mouse_y>ye+10 && mouse_y<ye+10+20)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1696,Midi_Faders_Affectation_Mode);
}
else
{
if(index_main_clear==1 && index_enable_edit_echo==1)
{
switch(echo_channel_manipulate_mode[echo_selected])
{
 case 0://levels
 clear_echo_levels(echo_selected);
 break;
 case 1:
 clear_ground_levels(echo_selected);
 break;
}
index_main_clear=0;
}
else
{
echo_channel_manipulate_mode[echo_selected]=toggle(echo_channel_manipulate_mode[echo_selected]);
}
}
mouse_released=1;
}






//les Trois parametres globaux: gravite masse energy
for (int cl=0;cl<3;cl++)
{

if(mouse_x>=xe+155+(cl*180) && mouse_x<=xe+155+(cl*180)+130 && mouse_y>=ye+255 && mouse_y<=ye+255+10)
{
if(  mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1693+cl,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
echo_global_params[echo_selected][cl]= (float)(constrain_data_to_midi_range(mouse_x-( xe+155+(cl*180))))/127;
midi_levels[1693+cl]=(int)(echo_global_params[echo_selected][cl]*127);
}
}
}
//midi out
if( mouse_released==0 && mouse_x>=xe+290+(cl*180) && mouse_x<=xe+290+(cl*180)+10 && mouse_y>=ye+260 && mouse_y<=ye+265+10)
{
 midi_send_out[1693+cl]=toggle(midi_send_out[1693+cl]);
 mouse_released=1;
}

}//fin des 3 sliders



}
//hors du dragging 0
do_logical_Echo_Aera(xe+155,ye+95);
return(0);
}
int do_logical_GlobalGridViewer(int xb, int yb, int taillecase)
{
//appel de grille

if(mouse_x>xb+40 && mouse_x<xb+40+50 && mouse_y>yb+10 && mouse_y<yb+10+20  )
{
if(mouse_released==0)
{
if(numeric_postext>0)
{
int temp_num_grid=atoi(numeric);
if(temp_num_grid>0 && temp_num_grid<128)
{
grid_selected_for_view  =temp_num_grid-1;
reset_numeric_entry();
}
}
}
mouse_released=1;
}


if(mouse_x>xb+150 && mouse_x<xb+150+50 && mouse_y>yb+10 && mouse_y<yb+10+20 )
{
if( mouse_released==0)
{
if(numeric_postext>0)
{
int temp_num_grid=atoi(numeric);
if(temp_num_grid>0 && temp_num_grid<1024)
{
grid_step_view =temp_num_grid-1;
reset_numeric_entry();
}
}
mouse_released=1;
}
}

//déplacement dans les pas

if(mouse_x>xb+220 && mouse_x<xb+220+20 && mouse_y>yb+10 && mouse_y<yb+10+20)
{
if( mouse_released==0)
{
grid_step_view--;
if(grid_step_view<0){grid_step_view=0;}
mouse_released=1;
}
}
if(mouse_x>xb+250 && mouse_x<xb+250+20 && mouse_y>yb+10 && mouse_y<yb+10+20)
{
if( mouse_released==0)
{
grid_step_view++;
if(grid_step_view>1022){grid_step_view=1022;}
mouse_released=1;
}
}

return(0);
}
int do_screen_config( int x_cfg_sc,int y_cfg_sc, int largeur_cfg_sc, int hauteur_cfg_sc)
{
//////////////////SCREEN SIZE//////////////////////////////////////////////////
Rect EncadreScreen(Vec2D(x_cfg_sc+10,y_cfg_sc+40),Vec2D(200,230));
EncadreScreen.SetRoundness(7.5);
EncadreScreen.SetLineWidth(epaisseur_ligne_fader);

petitchiffre.Print("SIZE -need restart- " ,(x_cfg_sc+20), (y_cfg_sc+60));

for (int lps=0;lps<2;lps++)
{
Rect screen_mode(Vec2D( x_cfg_sc+20,y_cfg_sc+75+(lps*30)),Vec2D(55,15));
screen_mode.SetRoundness(5);
screen_mode.Draw(CouleurFond.WithAlpha(0.5));
//FULLSCREEN or WINDOWED
if(lps==0)
{
petitchiffre.Print("Fullscreen " ,(x_cfg_sc+85), y_cfg_sc+85+(lps*30));
if(mouse_x>x_cfg_sc+20 && mouse_x<x_cfg_sc+75 && mouse_y>y_cfg_sc+75+(lps*30) && mouse_y<y_cfg_sc+90+(lps*30)  && window_focus_id==920)
{
screen_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
if(index_fullscreen==0) {index_fullscreen=1;index_specify_size=0;largeur_ecran= GetSystemMetrics(SM_CXVIRTUALSCREEN);
hauteur_ecran = GetSystemMetrics(SM_CYVIRTUALSCREEN);}
else if (index_fullscreen==1) {index_fullscreen=0;}
mouse_released=1;
}
}
if(index_fullscreen==1)
{screen_mode.Draw(CouleurFader);}
}

//SPECIFY SIZE
else if(lps==1)
{
petitchiffre.Print("Set new size: " ,(x_cfg_sc+85), y_cfg_sc+50+35+(lps*30));
if(mouse_x>x_cfg_sc+20 && mouse_x<x_cfg_sc+75 && mouse_y>y_cfg_sc+75+(lps*30) && mouse_y<y_cfg_sc+90+(lps*30)  && window_focus_id==920)
{
screen_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
if(index_specify_size==0)
{
index_specify_size=1;
index_fullscreen=0;
}
else if (index_specify_size==1) {index_specify_size=0;}
mouse_released=1;
}
}
if(index_specify_size==1)
{screen_mode.Draw(CouleurFader);}
}

}


Rect boxlargeur(Vec2D((x_cfg_sc+100),y_cfg_sc+130),Vec2D(65,30));
boxlargeur.SetRoundness(7.5);
boxlargeur.Draw(CouleurFond.WithAlpha(0.5));


Rect boxhauteur(Vec2D((x_cfg_sc+100),y_cfg_sc+165),Vec2D(65,30));
boxhauteur.SetRoundness(7.5);
boxhauteur.Draw(CouleurFond.WithAlpha(0.5));

if(mouse_x>(x_cfg_sc+100) && mouse_x<(x_cfg_sc+165) && window_focus_id==920)
{
if(mouse_y> y_cfg_sc+130 && mouse_y<y_cfg_sc+160)
{
boxlargeur.DrawOutline(CouleurLigne);
if(mouse_button==1 && mouse_released==0 && index_specify_size==1)
{
if(atoi(numeric)>=1024)
{
largeur_ecran=atoi(numeric);
reset_numeric_entry();
}
else {sprintf(string_Last_Order,"Screen Width must be at minimum 1024 px");}
mouse_released=1;
}
}
if(mouse_y> y_cfg_sc+165 && mouse_y<y_cfg_sc+195)
{
boxhauteur.DrawOutline(CouleurLigne);
if(mouse_button==1 && mouse_released==0 && index_specify_size==1)
{
if(atoi(numeric)>=600)
{
hauteur_ecran=atoi(numeric);
reset_numeric_entry();
}
else {sprintf(string_Last_Order,"Screen Height must be at minimum 600 px");}
mouse_released=1;
}
}
}
petitchiffre.Print("Width: " ,(x_cfg_sc+40), y_cfg_sc+150);
petitchiffre.Print(ol::ToString(largeur_ecran) ,(x_cfg_sc+120), y_cfg_sc+150);
petitchiffre.Print("Height: " ,(x_cfg_sc+40), y_cfg_sc+185);
petitchiffre.Print(ol::ToString(hauteur_ecran) ,(x_cfg_sc+120), y_cfg_sc+185);
EncadreScreen.DrawOutline(CouleurLigne);

/////////////////////WINDOW POS///////////////////////////////////////////////////

Rect EncadrePos(Vec2D(x_cfg_sc+10+230,y_cfg_sc+40),Vec2D(200,230));
EncadrePos.SetRoundness(7.5);
EncadrePos.SetLineWidth(epaisseur_ligne_fader);
petitchiffre.Print("POSITIONS " ,(x_cfg_sc+250), (y_cfg_sc+60));

for (int lpos=0;lpos<4;lpos++)
{
Rect pos_mode(Vec2D( x_cfg_sc+250,y_cfg_sc+75+(lpos*30)),Vec2D(55,15));
pos_mode.SetRoundness(5);
pos_mode.Draw(CouleurFond.WithAlpha(0.5));
//reset windows general
if(lpos==0)
{
petitchiffre.Print("Reset Internal" ,(x_cfg_sc+325), y_cfg_sc+50+35+(lpos*30));
petitchiffre.Print("         Windows" ,(x_cfg_sc+325), y_cfg_sc+50+35+(lpos*30)+15);
if(mouse_x>x_cfg_sc+250 && mouse_x<x_cfg_sc+305 && mouse_y>y_cfg_sc+75+(lpos*30) && mouse_y<y_cfg_sc+90+(lpos*30)  && window_focus_id==920)
{
pos_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
pos_mode.Draw(CouleurFader);
reset_window_positions();
mouse_released=1;
}
}
}
//record custom
else if(lpos==1)
{
petitchiffre.Print("Record Pos" ,(x_cfg_sc+325), y_cfg_sc+85+(lpos*30));
if(mouse_x>x_cfg_sc+250 && mouse_x<x_cfg_sc+305 && mouse_y>y_cfg_sc+75+(lpos*30) && mouse_y<y_cfg_sc+90+(lpos*30) && window_focus_id==920)
{
pos_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
pos_mode.Draw(CouleurFader);
store_window_positions();
mouse_released=1;
}
}
}
//load custom
else if(lpos==2)
{
petitchiffre.Print("Reload Pos" ,(x_cfg_sc+325), y_cfg_sc+85+(lpos*30));
if(mouse_x>x_cfg_sc+250 && mouse_x<x_cfg_sc+305 && mouse_y>y_cfg_sc+75+(lpos*30) && mouse_y<y_cfg_sc+90+(lpos*30) && window_focus_id==920)
{
pos_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
pos_mode.Draw(CouleurFader);
reload_window_positions();
mouse_released=1;
}
}
}
//set position
else if(lpos==3)
{
petitchiffre.Print("Program Position" ,(x_cfg_sc+325), y_cfg_sc+85+(lpos*30));
if(mouse_x>x_cfg_sc+250 && mouse_x<x_cfg_sc+305 && mouse_y>y_cfg_sc+75+(lpos*30) && mouse_y<y_cfg_sc+90+(lpos*30) && window_focus_id==920)
{
pos_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
if(index_set_pos==0){index_set_pos=1;}
else if(index_set_pos==1){index_set_pos=0;}
mouse_released=1;
}
}
if(index_set_pos==1){pos_mode.Draw(CouleurFader);}
}
}
EncadrePos.DrawOutline(CouleurLigne);

Rect boxposx(Vec2D((x_cfg_sc+330),y_cfg_sc+190),Vec2D(65,30));
boxposx.SetRoundness(7.5);
boxposx.Draw(CouleurFond.WithAlpha(0.5));

Rect boxposy(Vec2D((x_cfg_sc+330),y_cfg_sc+225),Vec2D(65,30));
boxposy.SetRoundness(7.5);
boxposy.Draw(CouleurFond.WithAlpha(0.5));

if(mouse_x>(x_cfg_sc+330) && mouse_x<(x_cfg_sc+395) && window_focus_id==920)
{
if(mouse_y> y_cfg_sc+190 && mouse_y<y_cfg_sc+220)
{
boxposx.DrawOutline(CouleurLigne);
if(mouse_button==1 && mouse_released==0 && index_set_pos==1)
{
posX_mainwindow=atoi(numeric);
reset_numeric_entry();
mouse_released=1;
}
}
if(mouse_y> y_cfg_sc+225 && mouse_y<y_cfg_sc+255)
{
boxposy.DrawOutline(CouleurLigne);
if(mouse_button==1 && mouse_released==0 && index_set_pos==1)
{
posY_mainwindow=atoi(numeric);
reset_numeric_entry();
mouse_released=1;
}
}
}

petitchiffre.Print("X: " ,(x_cfg_sc+300), y_cfg_sc+210);
petitchiffre.Print(ol::ToString(posX_mainwindow) ,(x_cfg_sc+350), y_cfg_sc+210);
petitchiffre.Print("Y: " ,(x_cfg_sc+300), y_cfg_sc+245);
petitchiffre.Print(ol::ToString(posY_mainwindow) ,(x_cfg_sc+350), y_cfg_sc+245);
EncadreScreen.DrawOutline(CouleurLigne);

//////////////////////COLOR THEME/////////////////////////////////////////////


Rect EncadreTheme(Vec2D(x_cfg_sc+470,y_cfg_sc+40),Vec2D(350,230));
EncadreTheme.SetRoundness(7.5);
EncadreTheme.SetLineWidth(epaisseur_ligne_fader);
petitchiffre.Print("COLOR THEMES " ,(x_cfg_sc+500), (y_cfg_sc+60));

for (int thp=0;thp<6;thp++)
{
Rect theme_mode(Vec2D( x_cfg_sc+480,y_cfg_sc+75+(thp*30)),Vec2D(55,15));
theme_mode.SetRoundness(5);
theme_mode.Draw(CouleurFond.WithAlpha(0.5));
if(thp==0)
{
petitchiffre.Print("Black 70's" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}
else if(thp==1)
{
petitchiffre.Print("Classic Grey" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}
else if(thp==2)
{
petitchiffre.Print("Electric Night" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}
else if(thp==3)
{
petitchiffre.Print("Discrete" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}
else if(thp==4)
{
petitchiffre.Print("Matrix" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}
else if(thp==5)
{
petitchiffre.Print("User Colors :" ,(x_cfg_sc+550), y_cfg_sc+85+(thp*30));
}

if(mouse_x>x_cfg_sc+480 && mouse_x<x_cfg_sc+535 && mouse_y>y_cfg_sc+65+(thp*30) && mouse_y<y_cfg_sc+90+(thp*30) && window_focus_id==920)
{
theme_mode.Draw(CouleurSurvol);
if(mouse_button==1 && mouse_released==0)
{
config_color_style_is=thp;
LoadWhiteCatColorProfil();
mouse_released=1;
}
}
if(config_color_style_is==thp){theme_mode.Draw(CouleurFader);}
}

///////////////////////////////////////////////////////////////////////////
//selection et affectation user
Rect theme_receive(Vec2D( x_cfg_sc+665,y_cfg_sc+105),Vec2D(55,15));
theme_receive.SetRoundness(5);
theme_receive.Draw(CouleurFond.WithAlpha(0.5));
petitchiffre.Print("Receive" ,(x_cfg_sc+730),y_cfg_sc+105);
petitchiffre.Print("Trichromy" ,(x_cfg_sc+730),y_cfg_sc+120);

if(mouse_x> x_cfg_sc+665 && mouse_x< x_cfg_sc+720 && mouse_y>y_cfg_sc+105 && mouse_y<y_cfg_sc+120 && window_focus_id==920)
{
theme_receive.Draw(CouleurSurvol);
 if(mouse_button==1 && mouse_released==0)
 {
 if( receive_from_trichro==0){receive_from_trichro=1;}
 else if( receive_from_trichro==1){receive_from_trichro=0;}
 mouse_released=1;
 }
}

if(receive_from_trichro==1){theme_receive.Draw(CouleurFader);}

for (int lg=0;lg<3;lg++)
{
 for   (int cl=0;cl<4;cl++)
 {
 Rect ColUser(Vec2D(x_cfg_sc+660+(cl*40),y_cfg_sc+140+(lg*40)),Vec2D(30,30));
 ColUser.SetRoundness(5);
 index_color_user_to_affect=cl+(lg*4);   ;

 switch (index_color_user_to_affect)
 {
 case 0:
 CouleurUserLoop=CouleurUser1;
 break;
 case 1:
 CouleurUserLoop=CouleurUser2;
 break;
 case 2:
 CouleurUserLoop=CouleurUser3;
 break;
 case 3:
 CouleurUserLoop=CouleurUser4;
 break;
 case 4:
 CouleurUserLoop=CouleurUser5;
 break;
 case 5:
 CouleurUserLoop=CouleurUser6;
 break;
 case 6:
 CouleurUserLoop=CouleurUser7;
 break;
 case 7:
 CouleurUserLoop=CouleurUser8;
 break;
 case 8:
 CouleurUserLoop=CouleurUser9;
 break;
 case 9:
 CouleurUserLoop=CouleurUser10;
 break;
 case 10:
 CouleurUserLoop=CouleurUser11;
 break;
 case 11:
 CouleurUserLoop=CouleurUser12;
 break;
 }
 ColUser.Draw(CouleurUserLoop);

 if(mouse_x>x_cfg_sc+660+(cl*40) && mouse_x<x_cfg_sc+690+(cl*40) && mouse_y>y_cfg_sc+140+(lg*40) && mouse_y<y_cfg_sc+170+(lg*40) && window_focus_id==920)
 {
 if(mouse_button==1 && mouse_released==0)
 {
 index_color_user_selected=cl+(lg*4);
 mouse_released=1;
 }
 }
 ColUser.DrawOutline(CouleurLigne);
 if(index_color_user_to_affect==index_color_user_selected)
 {
 ColUser.SetLineWidth(epaisseur_ligne_fader);
 ColUser.DrawOutline(CouleurFader);
 }
}
}
//ventilation couleurs
 if(receive_from_trichro==1 && index_affect_color_to_dock==1)
 {
  couleurs_user[index_color_user_selected][0]=float(my_red)/255;
  couleurs_user[index_color_user_selected][1]=float(my_green)/255;
  couleurs_user[index_color_user_selected][2]=float(my_blue)/255;

  Rgba TmpColor (couleurs_user[index_color_user_selected][0],couleurs_user[index_color_user_selected][1],couleurs_user[index_color_user_selected][2]);

  switch (index_color_user_selected)
 {
 case 0:
 CouleurUser1=TmpColor;
 sprintf(descriptif_colors_user_conf,"Your color is:Background");
 break;
 case 1:
 CouleurUser2=TmpColor;
 sprintf(descriptif_colors_user_conf,"Your color is:Lines");
 break;
 case 2:
 CouleurUser3=TmpColor;
 sprintf(descriptif_colors_user_conf,"Your color is:Fader");
 break;
 case 3:
 sprintf(descriptif_colors_user_conf,"Your color is:Selected");
 CouleurUser4=TmpColor;
 break;
 case 4:
 sprintf(descriptif_colors_user_conf,"Your color is:On mouse over");
 CouleurUser5=TmpColor;
 break;
 case 5:
 sprintf(descriptif_colors_user_conf,"Your color is:Levels");
 CouleurUser6=TmpColor;
 break;
 case 6:
 sprintf(descriptif_colors_user_conf,"Your color is:Selection");
 CouleurUser7=TmpColor;
 break;
 case 7:
 sprintf(descriptif_colors_user_conf,"Your color is:Back levels");
 CouleurUser8=TmpColor;
 break;
 case 8:
 sprintf(descriptif_colors_user_conf,"Your color is:Blind");
 CouleurUser9=TmpColor;
 break;
 case 9:
 sprintf(descriptif_colors_user_conf,"Your color is:Lock");
 CouleurUser10=TmpColor;
 break;
 case 10:
 sprintf(descriptif_colors_user_conf,"Your color is:Config");
 CouleurUser11=TmpColor;
 break;
 case 11:
 sprintf(descriptif_colors_user_conf,"Your color is:Procedure");
 CouleurUser12=TmpColor;
 break;
 }
 LoadWhiteCatColorProfil();
}

petitchiffre.Print(descriptif_colors_user_conf,x_cfg_sc+660,y_cfg_sc+70);
EncadreTheme.DrawOutline(CouleurLigne);

//////////////////SCREEN SIZE//////////////////////////////////////////////////
Rect EncadreUseCol(Vec2D(x_cfg_sc+655,y_cfg_sc+90),Vec2D(160,170));
EncadreUseCol.SetRoundness(7.5);
EncadreUseCol.SetLineWidth(demi_epaisseur_ligne_fader);
EncadreUseCol.DrawOutline(CouleurLigne);

Line(Vec2D(x_cfg_sc+655,y_cfg_sc+230),Vec2D(x_cfg_sc+630,y_cfg_sc+230)).Draw(CouleurLigne);

return(0);
}
int do_dmx_config(int cfgdmx_X, int cfgdmx_Y, int largeurCFGdmxwindow,int hauteurCFGdmxwindow)
{

//definition des aires devices
Rect DeviceArtNetDevice( Vec2D((cfgdmx_X+10),(cfgdmx_Y+50)),Vec2D(180,30));
DeviceArtNetDevice.SetRoundness(15);

Rect DeviceEnttecOpen( Vec2D((cfgdmx_X+10),(cfgdmx_Y+80)),Vec2D(180,30));
DeviceEnttecOpen.SetRoundness(15);

Rect DeviceEnttecPro( Vec2D((cfgdmx_X+10),(cfgdmx_Y+110)),Vec2D(180,30));
DeviceEnttecPro.SetRoundness(15);


Rect DeviceSunlite ( Vec2D((cfgdmx_X+10),(cfgdmx_Y+170)),Vec2D(180,30));
DeviceSunlite.SetRoundness(15);


//definition des aires univers
Rect ArtNetSendUniverse( Vec2D((cfgdmx_X+220),(cfgdmx_Y+50)),Vec2D(70,30));
ArtNetSendUniverse.SetRoundness(15);

//definition des aire d edition d adresse
Rect ArtNetSendAdress( Vec2D((cfgdmx_X+320),(cfgdmx_Y+50)),Vec2D(170,30));
ArtNetSendAdress.SetRoundness(15);

//SPEC. ARTNET: BROADCAST MODE
Rect ArtNetBroadcastMode( Vec2D((cfgdmx_X+520),(cfgdmx_Y+50)),Vec2D(130,30));
ArtNetBroadcastMode.SetRoundness(15);

//SPEC ARTNET ARTPOLL
Rect ArtNetPollforDevices( Vec2D((cfgdmx_X+670),(cfgdmx_Y+50)),Vec2D(100,30));
ArtNetPollforDevices.SetRoundness(15);

//SPEC ARTNET DOUBLE DMX
Rect ArtNetDoubleDMX( Vec2D((cfgdmx_X+770),(cfgdmx_Y+50)),Vec2D(60,30));
ArtNetDoubleDMX.SetRoundness(15);



//SPEC ENTTEC PROIN
Rect EnttecProIN( Vec2D((cfgdmx_X+240),(cfgdmx_Y+110)),Vec2D(170,30));
EnttecProIN.SetRoundness(15);



//SPEC SUNLITE
Rect SunliteAllowsIN( Vec2D((cfgdmx_X+240),(cfgdmx_Y+170)),Vec2D(150,30));
SunliteAllowsIN.SetRoundness(15);





{

//SELECTION DE L INTERFACE
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+20 && mouse_x<cfgdmx_X+200 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80)) //artnet
   {
   DeviceArtNetDevice.Draw(CouleurFond.WithAlpha(0.5));
   Survol_interface_numero=1;
   if(mouse_button==1 && mouse_released==0 )
   {
   SelectDmxDevice(1);
   }
   }
   else if( mouse_y>(cfgdmx_Y+90) && mouse_y< (cfgdmx_Y+110)) //enttec open
   {
   DeviceEnttecOpen.Draw(CouleurFond.WithAlpha(0.5));
   Survol_interface_numero=2;
   if(mouse_button==1 && mouse_released==0  )
   {
   SelectDmxDevice(2);

   }
   }
   else if( mouse_y>(cfgdmx_Y+120) && mouse_y< (cfgdmx_Y+140)) //enttec pro
   {
   DeviceEnttecPro.Draw(CouleurFond.WithAlpha(0.5));
   Survol_interface_numero=3;
   if(mouse_button==1 && mouse_released==0 )
   {
   SelectDmxDevice(3);
   }
   }

    else if( mouse_y>(cfgdmx_Y+170) && mouse_y< (cfgdmx_Y+200)) //sunlite
   {
   DeviceSunlite.Draw(CouleurFond.WithAlpha(0.5));
   Survol_interface_numero=4;
   if(mouse_button==1 && mouse_released==0  )
   {
   SelectDmxDevice(4);
   }
   }
}

//SELECTION DE L UNIVERS
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+230 && mouse_x<cfgdmx_X+300 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80) && myDMXinterfaceis==1) //artnet
   {
   ArtNetSendUniverse.DrawOutline(CouleurLigne.WithAlpha(0.5));
   if(mouse_button==1 &&  mouse_released==0 )
   {
   Univers=atoi(numeric);  if(Univers>15){Univers=15;}
   reset_numeric_entry();
   numeric_postext=0;

   mouse_released=1;
   }
   }

}

//SELECTION DE L ADRESSE OUT ARTNET OU DU VCOM POUR LES INTERFACES DMX
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+320 && mouse_x<cfgdmx_X+490 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80) && myDMXinterfaceis==1) //artnet
   {
   ArtNetSendAdress.DrawOutline(CouleurLigne.WithAlpha(0.7));
   if(mouse_button==1 &&  mouse_released==0  && numeric_postext>0)
   {
   Close_dmx_interface();
   sprintf(ip_artnet,numeric);
   reset_numeric_entry();
   Init_dmx_interface();
   mouse_released=1;
   }
   }

}


//SPECIFIC A CHAQUE INTERFACE
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+520 && mouse_x<cfgdmx_X+620 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80) && myDMXinterfaceis==1) //artnet BROADCAST MODE   ON OFF
   {
   ArtNetBroadcastMode.DrawOutline(CouleurLigne.WithAlpha(0.7));

   if(mouse_button==1 &&  mouse_released==0 )
   {
   ArtNetBroadcastMode.DrawOutline(CouleurLigne.WithAlpha(0.7));
   Close_dmx_interface();
   if(index_broadcast==0)
   {
   index_broadcast=1;
   Init_dmx_interface();
   }
   else if(index_broadcast==1)
   {
   index_broadcast=0;
   Init_dmx_interface();
   }
   mouse_released=1;
   }
   }
}

//SPECIFIC A CHAQUE INTERFACE <ARTNET SUITE>
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+670 && mouse_x<cfgdmx_X+770 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80) ) //artpoll for devices
   {
   ArtNetPollforDevices.DrawOutline(CouleurLigne.WithAlpha(0.7));

   if(mouse_button==1 &&  mouse_released==0 )
   {
   if (myDMXinterfaceis!=1)//dans le cas d un art poll avec interface usb
   {
    initialisation_client_artnet();
    ConstructArtPoll();
    }

   if(index_art_polling==0)
   {
   reset_poll_list();
   ticks_poll=0;
   index_art_polling=1;
   index_show_artpoll_reply_content=1;
   nbrbytessended=sendto(sockartnet, ArtPollBuffer,sizeof( ArtPollBuffer),0,(SOCKADDR*)&sinS,sinsize);
   }
  else if(index_art_polling==1)
   {
   index_art_polling=0;
   if (myDMXinterfaceis!=1)//dans le cas d un art poll avec interface usb
   {fermeture_client_artnet();}
   }
   mouse_released=1;
   }

   }
}
//DOUBLE DMX
if(window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+770 && mouse_x<cfgdmx_X+830 )
{
   if( mouse_y>(cfgdmx_Y+60) && mouse_y< (cfgdmx_Y+80) ) //double dmx
   {
   ArtNetDoubleDMX.DrawOutline(CouleurLigne.WithAlpha(0.7));

   if(mouse_button==1 &&  mouse_released==0 &&  myDMXinterfaceis!=1)
   {
   index_artnet_doubledmx=toggle(index_artnet_doubledmx);
   mouse_released=1;
   switch(index_artnet_doubledmx)
   {
   case 0:
         fermeture_client_artnet();
   break;
   case 1:
         initialisation_client_artnet();
         //ConstructArtPoll();
         ConstructArtPollReply();
         nbrbytessended=sendto(sockartnet, ArtPollBuffer,sizeof( ArtPollBuffer),0,(SOCKADDR*)&sinS,sinsize);
         //ArtNet
         ArtDmx();
         //nbrbytessended=sendto(sockartnet, ArtDmxBuffer,sizeof( ArtDmxBuffer),0,(SOCKADDR*)&sinS,sinsize);
   break;

   }
    }
    }
}
//ENTTEC PRO IN MODULE

if (window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+270 && mouse_x<cfgdmx_X+420 && mouse_y>cfgdmx_Y+120 && mouse_y<cfgdmx_Y+140 )
{
EnttecProIN.Draw(CouleurFond.WithAlpha(0.5));

   if(mouse_button==1 &&  mouse_released==0 )
   {

   if (index_init_EnttecPROIN_ok==0)
   {   Detect_EnttecProIn() ;
       Open_ProIn();
   }
   else if (index_init_EnttecPROIN_ok==1)
   {   Close_ProIn() ; index_init_EnttecPROIN_ok=0;}

   }
   mouse_released=1;
}

//sunlite allows IN
if (window_focus_id==W_CFGMENU && mouse_x>cfgdmx_X+240 && mouse_x<cfgdmx_X+390 && mouse_y>cfgdmx_Y+180 && mouse_y<cfgdmx_Y+210 && myDMXinterfaceis==5)
{
SunliteAllowsIN.Draw(CouleurFond.WithAlpha(0.5));
if(mouse_button==1 &&  mouse_released==0 &&  window_focus_id==920)
   {
   index_allow_sunlite_dmxIN=toggle(index_allow_sunlite_dmxIN);
   mouse_released=1;
   }
}



}//fin condition etre 920 fenetre maitre


/////////////////////////////////////////////////////////////////////////////////////
if(myDMXinterfaceis==1){   DeviceArtNetDevice.DrawOutline(CouleurLevel); }
else if(myDMXinterfaceis==2){   DeviceEnttecOpen.DrawOutline(CouleurLevel); }
else if(myDMXinterfaceis==3){   DeviceEnttecPro.DrawOutline(CouleurLevel); }
else if(myDMXinterfaceis==4)
{
DeviceSunlite.DrawOutline(CouleurLevel);
petitchiffre.Print("Version:",cfgdmx_X+400, cfgdmx_Y+190);
petitchiffre.Print(ol::ToString(sunlite_version_number),cfgdmx_X+460, cfgdmx_Y+190);
petitchiffre.Print("Serial:",cfgdmx_X+500, cfgdmx_Y+190);
petitchiffre.Print(ol::ToString(sunlite_serial_number),cfgdmx_X+550, cfgdmx_Y+190);
petitchiffre.Print(string_sunlite_is,cfgdmx_X+670, cfgdmx_Y+190);
}

if(index_art_polling==1)
{
  ArtNetPollforDevices.DrawOutline(CouleurLevel);
}

if(index_artnet_doubledmx==1)
{
ArtNetDoubleDMX.Draw(CouleurFader);
}
//////////////////////////////////////////////

if (index_init_EnttecPROIN_ok==1)
{
EnttecProIN.DrawOutline(CouleurLevel);
}
/////////////////////////////////////////////

/////////////////////////////////////////////

switch(index_allow_sunlite_dmxIN)
{
case 0:
petitchiffre.Print("DMX-IN OFF", cfgdmx_X+250, cfgdmx_Y+190);
break;
case 1:
SunliteAllowsIN.Draw(CouleurSurvol);
petitchiffre.Print("DMX-IN ON", cfgdmx_X+250, cfgdmx_Y+190);
break;

}



//affichage
sprintf(string_title_panel_config,"DMX CONFIGURATION PANEL");


petitpetitchiffre.Print("Universe" ,(cfgdmx_X+220), (cfgdmx_Y+50));
petitpetitchiffre.Print("To IP" ,(cfgdmx_X+350), (cfgdmx_Y+50));
petitpetitchiffre.Print("Mode" ,(cfgdmx_X+560), (cfgdmx_Y+50));
petitpetitchiffre.Print("Call" ,(cfgdmx_X+710), (cfgdmx_Y+50));
////////////////////////////////////////////////////////////////////////////////
petitchiffre.Print("ART-NET" ,(cfgdmx_X+20), (cfgdmx_Y+70));
petitchiffre.Print(ol::ToString(Univers),(cfgdmx_X+240), (cfgdmx_Y+70));
petitchiffre.Print(ip_artnet,(cfgdmx_X+340), (cfgdmx_Y+70));
if(index_broadcast==0)
{petitchiffre.Print("UNICAST" ,(cfgdmx_X+540), (cfgdmx_Y+70));}
else if (index_broadcast==1)
{petitchiffre.Print("BROADCAST" ,(cfgdmx_X+540), (cfgdmx_Y+70));}
petitchiffre.Print("ART-POLL",(cfgdmx_X+690), (cfgdmx_Y+70));
petitpetitchiffre.Print("Double",(cfgdmx_X+780), (cfgdmx_Y+65));
petitpetitchiffre.Print("DMX",(cfgdmx_X+790), (cfgdmx_Y+75));
////////////////////////////////////////////////////////////////////////////////
petitchiffre.Print("ENTTEC-OPEN-DMX" ,(cfgdmx_X+20), (cfgdmx_Y+100));
petitchiffre.Print("ENTTEC-PRO OUT /VCOM" ,(cfgdmx_X+20), (cfgdmx_Y+130));
petitchiffre.Print(ol::ToString(istheresomeone_in_enttecpro),(cfgdmx_X+170), (cfgdmx_Y+130));
petitchiffre.Print("ENTTEC-PRO IN /VCOM" ,(cfgdmx_X+250), (cfgdmx_Y+130));
petitchiffre.Print(ol::ToString(vcom_inposition_is),(cfgdmx_X+390), (cfgdmx_Y+130));

////////////////////////////////////////////////////////////////////////////////
petitchiffre.Print("SUNLITE SIUDI " ,(cfgdmx_X+20), (cfgdmx_Y+190));
////////////////////////////////////////////////////////////////////////////////

Rect DmxFeedbackZone(Vec2D((cfgdmx_X+10), (cfgdmx_Y+265)),Vec2D(560,25));
DmxFeedbackZone.SetRoundness(5);
DmxFeedbackZone.Draw(CouleurFond.WithAlpha(0.5));
petitchiffre.Print("DMX feedback: >>",(cfgdmx_X+20), (cfgdmx_Y+280));
petitchiffrerouge.Print(string_display_dmx_params,(cfgdmx_X+130), (cfgdmx_Y+280));

affect_dmx_in(cfgdmx_X+710,cfgdmx_Y+200);

return(0);
}
int do_logical_TheGrid_commands ( int xb, int yb, int num_grid_player)
{

//accélérometer du player
if(mouse_x>xb-5 && mouse_x<xb+127+5 && mouse_y>=yb+30 && mouse_y<=yb+30+10 )
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1508+num_grid_player,Midi_Faders_Affectation_Mode);
}
else
{
 if(grid_player_slave[num_grid_player]==0)
 {
  set_mouse_range(xb-5,yb+30,xb+127+5,yb+30+10);
  grid_crossfade_speed[num_grid_player]=mouse_x-xb;
  if(grid_crossfade_speed[num_grid_player]<0){grid_crossfade_speed[num_grid_player]=0;}
  else  if(grid_crossfade_speed[num_grid_player]>127){grid_crossfade_speed[num_grid_player]=127;}
  //integration gridplayer 1 au sequenciel
  if(index_link_speed_crossfade_to_gpl1==1 && num_grid_player==0)
  {
   grid_crossfade_speed[0]=crossfade_speed;
   midi_levels[1508]=crossfade_speed;
  }
  gridder_prepare_cross(num_grid_player,index_grider_selected[num_grid_player],index_grider_step_is[num_grid_player]);
 }
}
}

////////////////SLAVE MODE////////////////////////////////////////////////////
if(mouse_x>xb+150 && mouse_x<xb+150+40 && mouse_y>yb+25 && mouse_y<yb+25+15)
{
if(mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1504+num_grid_player,Midi_Faders_Affectation_Mode);
}
else
{
grid_player_slave[num_grid_player]=toggle(grid_player_slave[num_grid_player]);
}
mouse_released=1;
}
}




for(int sp=0;sp<4;sp++)
{
if( mouse_x>xb && mouse_x<xb+10 && mouse_y>yb+70+(sp*20) && mouse_y<yb+70+(sp*20)+10 )
{
if( mouse_released==0 )
{
 if( Midi_Faders_Affectation_Type!=0)
 {
 attribute_midi_solo_affectation(1512+(sp*4)+num_grid_player,Midi_Faders_Affectation_Mode);
 }
 else
 {
 switch(sp)
 {
 case 0:
 grider_goto_mode[num_grid_player]=toggle(grider_goto_mode[num_grid_player]);
 break;
 case 1:
 grider_count_mode[num_grid_player]=toggle(grider_count_mode[num_grid_player]);
 break;
 case 2:
 grider_seekto_mode[num_grid_player]=toggle(grider_seekto_mode[num_grid_player]);
 break;
 case 3:
 grider_stoplay_mode[num_grid_player]=toggle(grider_stoplay_mode[num_grid_player]);
 break;
 default:
 break;
 }
 }
 mouse_released=1;
}
}
}//fin boucle4

//Goto Grid num
if( index_enable_edit_Grider==1  && mouse_x>xb+105 && mouse_x<xb+105+30 && mouse_y>yb+70 && mouse_y<yb+70+15 )
{
 if(  mouse_released==0 )
 {
 grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][0]=atoi(numeric)-1;
 if(grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][0]<0)
 {grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][0]=-1;}//désaffectation
 if(grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][0]>127)
 {grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][0]=127;}
 reset_numeric_entry();
 mouse_released=1;
 }
}
//Goto step num
if(index_enable_edit_Grider==1  &&  mouse_x>xb+150 && mouse_x<xb+150+40 && mouse_y>yb+70 && mouse_y<yb+70+15 )
{
if( mouse_released==0)
 {
  grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][1]=atoi(numeric)-1;
 if(grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][1]<0)
 {grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][1]=-1;}//désaffectation
 if(grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][1]>1023)
 {grid_goto[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][1]=1023;}
 reset_numeric_entry();
 mouse_released=1;
 }
}

//count num
if( index_enable_edit_Grider==1  && mouse_x>xb+150 && mouse_x<xb+150+40 && mouse_y>yb+90 && mouse_y<yb+90+15  )
{
if( mouse_released==0)
 {
 grid_count[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=atoi(numeric);
 if(grid_count[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]<0)
 {
 grid_count[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=0;
 }
 reset_numeric_entry();
 mouse_released=1;
 }
}


//Seek step num
if( index_enable_edit_Grider==1  && mouse_x>xb+150 && mouse_x<xb+150+40 && mouse_y>yb+110 && mouse_y<yb+110+15  )
{
if( mouse_released==0)
 {
  grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=atoi(numeric)-1;
 if(grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]<0)
 {grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=-1;}//désaffectation
 if(grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]>1023)
 {grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=1023;}
 reset_numeric_entry();
 mouse_released=1;
 }
}

//Stoplay button
if( index_enable_edit_Grider==1  && mouse_x>xb+100 && mouse_x<xb+100+90 && mouse_y>yb+130 && mouse_y<yb+130+15 && mouse_b&1 && mouse_released==0)
{
 grid_stoplay[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]=toggle(grid_stoplay[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]);
 mouse_released=1;
}
return(0);
}
int do_logical_TheGrid_divers( int xb, int yb, int num_grid_player)
{
//affect to dock
 if(mouse_x>xb+60 && mouse_x<xb+60+50 && mouse_y>yb && mouse_y<yb+30 &&  mouse_released==0)
 {

index_do_dock=index_affect_color_to_dock;
  if(num_grid_player==gridplayer_to_affect_is)
  {
  reset_index_actions();
  index_do_dock=0;
  }
  else  {
        reset_index_actions();
        reset_indexs_confirmation();
        gridplayer_to_affect_is=num_grid_player;
        index_do_dock=1;
        }


  mouse_released=1;
 }

 if(  index_enable_edit_Grider==1 && mouse_x>xb && mouse_x<xb+10 && mouse_y>yb+45 && mouse_y<yb+45+10 && mouse_released==0)
 {
 to_step_editing_mode[num_grid_player]=toggle(to_step_editing_mode[num_grid_player]);
 mouse_released=1;
 }

 if( index_enable_edit_Grider==1 && mouse_x>xb+60 && mouse_x<xb+60+40 && mouse_y>yb+45 && mouse_y<yb+45+15 && mouse_released==0  )
 {
 int tempstepto=atoi(numeric)-1;
 if(tempstepto>index_grider_step_is[num_grid_player] && tempstepto<1023)
 {index_StepTo[num_grid_player]=tempstepto;}
 reset_numeric_entry();
 mouse_released=1;
 }

 ///////////COPY TO ////////////////////////////////////////////////////////////



 //copy mode
 if(  index_enable_edit_Grider==1 && mouse_x>xb && mouse_x<xb+50 && mouse_y>yb+75 && mouse_y<yb+75+15 && mouse_released==0)
 {
  index_for_copy_grid=1;
  index_grid_tostep_or_not=to_step_editing_mode[num_grid_player];
  from_gridstep_to=index_StepTo[num_grid_player];
  destination_grid_for_copy= index_Grid_copyto[num_grid_player][0];
  destination_step_for_copy= index_Grid_copyto[num_grid_player][1];
  grid_to_clear=index_grider_selected[num_grid_player];       //utilisé pour menus confirm
  step_grid_to_clear=index_grider_step_is[num_grid_player]; //utilisé pour les menus confirm
  index_ask_confirm=1;
  mouse_released=1;
 }

  //insert mode
 if( index_enable_edit_Grider==1 &&  mouse_x>xb+55 && mouse_x<xb+55+50 && mouse_y>yb+75 && mouse_y<yb+75+15 )
 {
  index_for_insert_grid=1;
  destination_step_for_copy= index_Grid_copyto[num_grid_player][1];//le nombre de steps à insérer après la position actuelle
  grid_to_clear=index_grider_selected[num_grid_player];       //utilisé pour menus confirm
  step_grid_to_clear=index_grider_step_is[num_grid_player]; //utilisé pour les menus confirm
  index_ask_confirm=1;
  mouse_released=1;
 }
 //grid   entry
 if(index_enable_edit_Grider==1 && mouse_x>xb && mouse_x<xb+30 && mouse_y>yb+95 && mouse_y<yb+95+15 && mouse_released==0)
 {
 int tempstepto=atoi(numeric)-1;
 if(tempstepto>=0 && tempstepto<127)
 {index_Grid_copyto[num_grid_player][0]=tempstepto;}
  reset_numeric_entry();
  mouse_released=1;
 }
 //step entry
 if(index_enable_edit_Grider==1 && mouse_x>xb+45 && mouse_x<xb+45+40 && mouse_y>yb+95 && mouse_y<yb+95+15 && mouse_released==0 )
 {
  int tempstepto=atoi(numeric)-1;
 if(tempstepto>=0 && tempstepto<1023)
 {index_Grid_copyto[num_grid_player][1]=tempstepto;}
  reset_numeric_entry();
  mouse_released=1;
  }

  //snap fader
 if( index_enable_edit_Grider==1  &&  mouse_x>xb && mouse_x<xb+105 && mouse_y>yb+135 && mouse_y<yb+135+15 && mouse_released==0)
 {
 if(index_do_dock==1 && numeric_postext>0)
 {
 int getfad=atoi(numeric)-1;
 if(getfad>=0 && getfad<48)
 {GplSnapFader[num_grid_player]=getfad;}
 reset_numeric_entry();
  mouse_released=1;
  index_do_dock=0;
  }
  else//enregistrement
  {
  for(int i=0;i<513;i++)
   {
   if(i+grider_begin_channel_is+1<513)
   {
   grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i]=FaderDoDmx[(GplSnapFader[num_grid_player])][i+grider_begin_channel_is];
   }
   }
   mouse_released=1;
  }
 }



if(num_grid_player==0 )//asservissement speed au séquenciel
{
if(mouse_x>xb && mouse_x<xb+105 && mouse_y>yb+115 && mouse_y<yb+115+15 && mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)
{
 attribute_midi_solo_affectation(1540,Midi_Faders_Affectation_Mode);
}

else
{
index_link_speed_crossfade_to_gpl1=toggle(index_link_speed_crossfade_to_gpl1);
if(index_link_speed_crossfade_to_gpl1==1)
{  grid_crossfade_speed[0]=crossfade_speed;
   midi_levels[1508]=crossfade_speed;
}
}
mouse_released=1;
}
}

return(0);
}
int do_logical_TheStepBox(int xb,int yb, int num_grid_player)
{

//STEP IS

//Step minus
if(mouse_x>xb & mouse_x<xb+20 && mouse_y>yb && mouse_y<yb+20 )
{
if( mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1484+num_grid_player,Midi_Faders_Affectation_Mode);
}
else
{
  gridplayer_step_minus(num_grid_player);
 }
  mouse_released=1;
}
}
 //Step plus
if(mouse_x>xb+60 & mouse_x<xb+60+20 && mouse_y>yb && mouse_y<yb+20 )
{
if( mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1488+num_grid_player,Midi_Faders_Affectation_Mode);
}
else
{
  gridplayer_step_plus(num_grid_player);
}
  mouse_released=1;
 }
}

//set +127 box pour les pas
if(mouse_x>xb+60 && mouse_x<xb+60+20 && mouse_y>yb-6 && mouse_y<yb-6+5)
{
if( mouse_released==0)
 {
 if( Midi_Faders_Affectation_Type!=0)//config midi
 {
 attribute_midi_solo_affectation(1536+num_grid_player,Midi_Faders_Affectation_Mode);
 }
 mouse_released=1;
}
}
//chargement d'un pas, ou affectation d'un temps ou clear  du pas
if(mouse_x>xb+22 & mouse_x<xb+22+35 && mouse_y>yb-5 && mouse_y<yb-5+30 )
 {
if( mouse_released==0)
 {
 if( Midi_Faders_Affectation_Type!=0)//config midi
 {
 attribute_midi_solo_affectation(1532+num_grid_player,Midi_Faders_Affectation_Mode);
 }
 else
 {
 if(numeric_postext>0 && index_affect_time==0 && index_main_clear==0 && index_do_dock==0 )
                      {
                      int step_to_affect_to_grid=0;
                      step_to_affect_to_grid=atoi(numeric);
                      if(step_to_affect_to_grid>0 && step_to_affect_to_grid<1024)
                      {
                       index_grider_step_is[num_grid_player]=step_to_affect_to_grid-1;
                       if(grider_seekto_mode[num_grid_player]==1 && grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]]>0 )//seek position
                       {index_grider_seek_pos[num_grid_player]=grid_seekpos[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]];}
                      }
                      reset_numeric_entry();
                      }
 else if (numeric_postext>0  && index_do_dock==1 && index_enable_edit_Grider==1)//charge mem
 {
  int mem_to_affect_to_grid=0;
  mem_to_affect_to_grid=int(atof(numeric)*10);
  if(MemoiresExistantes[mem_to_affect_to_grid]==1)
  {
    for(int i=1;i<513;i++)
   {
   if(i+grider_begin_channel_is+1<513)
   {
   grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i+1]=Memoires[mem_to_affect_to_grid][i+grider_begin_channel_is+1];
   }
   }
   reset_numeric_entry();
   index_do_dock=0;
  }
 }
 else if (index_do_dock==1 && index_enable_edit_Grider==1)//charge circuits
 {
 if(index_affect_time==0)
 {
 switch(index_blind)
 {
 case 0:
  for(int i=1;i<513;i++)
 {
  grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i-1]=bufferSaisie[i];
  bufferSaisie[i]=0;
 }
 break;
  case 1:
  for(int i=1;i<513;i++)
 {
  grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i-1]=bufferBlind[i];
  bufferBlind[i]=0;
 }
 break;
 }
 }
  else if(index_affect_time==1 )
 {
 switch(to_step_editing_mode[num_grid_player])
 {
 case 0:
                      for(int ty=0;ty<4;ty++)
                      {
                      if(index_type_of_time_to_affect[ty]==1)
                      {
                      grid_times[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][ty]=
                      (time_minutes*60)+time_secondes+(0.01*time_centiemes);
                      }
                      }
                      gridder_prepare_cross(num_grid_player, index_grider_selected[num_grid_player], index_grider_step_is[num_grid_player]);
 break;
 case 1://step to step mode
 if(index_grider_step_is[index_grider_selected[num_grid_player]]<index_StepTo[num_grid_player])
 {
 for(int st=index_grider_step_is[num_grid_player];st<=index_StepTo[num_grid_player];st++)
 {
                       for(int ty=0;ty<4;ty++)
                      {
                      if(index_type_of_time_to_affect[ty]==1)
                      {
                      grid_times[index_grider_selected[num_grid_player]][st][ty]=
                      (time_minutes*60)+time_secondes+(0.01*time_centiemes);
                      }
                      }
 }
 }
 break;
 }
 index_affect_time=0;
 }

 index_do_dock=0;
 }
 else if(index_do_modify==1 && index_enable_edit_Grider==1)
 {
 switch(index_blind)
 {
 case 0:
  for(int i=1;i<513;i++)
 {
  if(Selected_Channel[i]==1)
  {
  grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i-1]=bufferSaisie[i];
  bufferSaisie[i]=0;
 }
 }
 break;
  case 1:
  for(int i=1;i<513;i++)
 {
 if(Selected_Channel[i]==1)
 {
  grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][i-1]=bufferBlind[i];
  bufferBlind[i]=0;
 }
 }
 break;
 }
 index_do_modify=0;
 }

 else if(index_do_report==1 && index_enable_edit_Grider==1)
 {

 for (int u=1;u<513;u++)
 {
 if(bufferSequenciel[u] >= bufferFaders[u])
 {
  grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][u-1]
 =  bufferSequenciel[u];
 }
 if(bufferFaders[u]>bufferSequenciel[u])
 {
grid_levels[index_grider_selected[num_grid_player]][index_grider_step_is[num_grid_player]][u-1]=bufferFaders[u];
 }
 Selected_Channel[u]=0;
 }

 index_do_report=0;
 }

 else if(index_main_clear==1 && index_affect_time==0 && index_enable_edit_Grider==1 )
 {
 grid_to_clear=index_grider_selected[num_grid_player];

  switch(to_step_editing_mode[num_grid_player])
 {
 case 0:
 step_grid_to_clear=index_grider_step_is[num_grid_player];
 index_ask_confirm=1;
 index_clear_a_grid_step=1;
 break;
 case 1:
 index_ask_confirm=1;
 step_grid_to_clear=index_grider_step_is[num_grid_player];
 index_clear_a_grid_serie_step=1;
 index_for_grid_stepto=index_StepTo[num_grid_player];
 break;
 }
 }
 }
 mouse_released=1;
 }

}

 return(0);
}
int do_logical_deroule_repertoire_classical_save(int xrep, int yrep, char name_of_rep[25])
{


for (int y=0;y<8;y++)
{


if(window_focus_id==W_SAVE && mouse_x>xrep+5 && mouse_x<xrep+155 && mouse_y>(yrep+175+(y*20)) && mouse_y<(yrep+190+(y*20)))
{

if(mouse_button==1 && mouse_released==0)
{
savefile_selected=(y+line_save);
sprintf(savefile_name,list_save_files[savefile_selected]);
mouse_released=1;
}
}

}
//nom du spectacle

if(window_focus_id==W_SAVE && mouse_x>xrep+5 && mouse_x<xrep+245 && mouse_y>yrep+347 && mouse_y<yrep+377)
{

if(mouse_button==1 && mouse_released==0 && index_type==1)
{

for (int tt=0;tt<24;tt++)
{
savefile_name[tt]=numeric[tt];
}
reset_numeric_entry();
index_type=0;
mouse_released=1;
}
}

if(window_focus_id==W_SAVE && mouse_x>xrep+208 && mouse_x<xrep+232)
{
if(mouse_y>yrep+188 && mouse_y<yrep+212)
{

if(mouse_button==1)
{

if(line_save>0){line_save--;}
mouse_released=1;
}
}
else if(mouse_y>yrep+298 && mouse_y<yrep+322)
{

if(mouse_button==1)
{

if(line_save<127){line_save++;}
mouse_released=1;
}
}
}
///////////////////////////////////////////////////////////////////////////////
//save button
if(window_focus_id==W_SAVE && mouse_x>xrep+40 && mouse_x<xrep+110 && mouse_y>yrep+390 && mouse_y<yrep+420)
{

if(mouse_button==1 && mouse_released==0)
{

if(strcmp(savefile_name,"")==0){sprintf(savefile_name,"unnamed");}
index_do_saveshow=1;
index_ask_confirm=1;
mouse_released=1;
}
}

////////////////////////////////////////////////////////////////////////////////
//load button
if(window_focus_id==W_SAVE && mouse_x>xrep+140 && mouse_x<xrep+210 && mouse_y>yrep+390 && mouse_y<yrep+420)
{
if(mouse_button==1 && mouse_released==0)
{

if(strcmp(savefile_name,"")==1)
{
index_do_loadshow=1;
index_ask_confirm=1;
}
mouse_released=1;
}
}

////////////////////////////////////////////////////////////////////////////////
//reset button

if(window_focus_id==W_SAVE && mouse_x>xrep+280 && mouse_x<xrep+350 && mouse_y>yrep+390 && mouse_y<yrep+420)
{

if(mouse_button==1 && mouse_released==0)
{
index_do_resetshow=1;
index_ask_confirm=1;
mouse_released=1;
}
}
return(0);
}
int do_core_config( int x_cfg_sc,int y_cfg_sc, int largeur_cfg_sc, int hauteur_cfg_sc)
{
petitchiffre.Print("Max Calculations:", x_cfg_sc+15, y_cfg_sc+40);
Line(Vec2D( x_cfg_sc+15, y_cfg_sc+50),Vec2D( x_cfg_sc+120, y_cfg_sc+50)).Draw(CouleurLigne);

int def_param=0;
int def_param_min=1;
int def_param_max=1;

for (int l=0;l<7;l++)
{
Rect Param(Vec2D(x_cfg_sc+120,y_cfg_sc+60+(l*30)),Vec2D(50,25));
Param.SetRoundness(7.5);
Param.Draw(CouleurFond.WithAlpha(0.5));
switch(l)
{
case 0:
petitchiffre.Print("Faders", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_faders), x_cfg_sc+135,y_cfg_sc+75+(l*30));
def_param_max=48;
def_param_min=1;
break;
case 1:
petitchiffre.Print("Docks", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_docks), x_cfg_sc+140,y_cfg_sc+75+(l*30));
def_param_max=6;
break;
case 2:
petitchiffre.Print("Chasers", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_chasers), x_cfg_sc+135,y_cfg_sc+75+(l*30));
def_param_max=128;
break;
case 3:
petitchiffre.Print("Tracks/Chasers", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_tracks_per_chasers), x_cfg_sc+135,y_cfg_sc+75+(l*30));
def_param_max=24;
break;
case 4:
petitchiffre.Print("Gridplayers", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_gridplayers), x_cfg_sc+140,y_cfg_sc+75+(l*30));
def_param_max=4;
break;
case 5:
petitchiffre.Print("Bangers", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_bangers), x_cfg_sc+135,y_cfg_sc+75+(l*30));
def_param_max=128;
break;
case 6:
petitchiffre.Print("Echo", x_cfg_sc+15,y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(core_user_define_nb_echo), x_cfg_sc+135,y_cfg_sc+75+(l*30));
def_param_max=24;
break;
}
if(window_focus_id==920 && mouse_x>x_cfg_sc+120 && mouse_x<x_cfg_sc+120+50 && mouse_y>y_cfg_sc+60+(l*30) && mouse_y<y_cfg_sc+60+(l*30)+25)
{
Param.DrawOutline(CouleurLigne);
if(mouse_b&1 && mouse_released==0  &&  numeric_postext>0)
{
def_param=atoi(numeric);
if(def_param<=def_param_max && def_param>=def_param_min)
{
switch(l)
{
case 0:
core_user_define_nb_faders=def_param;
break;
case 1:
core_user_define_nb_docks=def_param;
for(int i=0;i<48;i++)//core adapt
{
for(int d=0;d<6;d++)
{
DockIsSelected[i][d]=0;
}

DockIsSelected[i][0]=1;
}
break;
case 2:
core_user_define_nb_chasers=def_param;
break;
case 3:
core_user_define_nb_tracks_per_chasers=def_param;
nbre_track_visualisables=core_user_define_nb_tracks_per_chasers;
if(nbre_track_visualisables>8){nbre_track_visualisables=8;}
break;
case 4:
core_user_define_nb_gridplayers=def_param;
break;
case 5:
core_user_define_nb_bangers=def_param;
break;
case 6:
core_user_define_nb_echo=def_param;
break;
}
mouse_released=1;
reset_numeric_entry();
}
}
}
}

petitchiffre.Print("Do Calculations:", x_cfg_sc+200, y_cfg_sc+40);
Line(Vec2D( x_cfg_sc+200, y_cfg_sc+50),Vec2D( x_cfg_sc+305, y_cfg_sc+50)).Draw(CouleurLigne);
char tmp_state_core[8];
for (int l=0;l<9;l++)
{
Rect BParam(Vec2D(x_cfg_sc+300,y_cfg_sc+60+(l*25)),Vec2D(50,20));
BParam.SetRoundness(7.5);
BParam.Draw(CouleurFond.WithAlpha(0.5));
switch(core_do_calculations[l])
{
case 0:
sprintf(tmp_state_core,"/Off");
break;
case 1:
BParam.Draw(CouleurFader);
sprintf(tmp_state_core,"/On");
break;
}
switch(l)
{
case 0:
petitchiffre.Print("Faders", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 1:
petitchiffre.Print("CueList", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 2:
petitchiffre.Print("Banger", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 3:
petitchiffre.Print("Trichromy", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 4:
petitchiffre.Print("VideoTracking", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 5:
petitchiffre.Print("Chasers", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 6:
petitchiffre.Print("Grid", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 7:
petitchiffre.Print("Ch. Macros", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
case 8:
petitchiffre.Print("Echo", x_cfg_sc+200,y_cfg_sc+75+(l*25));
break;
default:
break;
}
petitchiffre.Print(tmp_state_core,x_cfg_sc+310,y_cfg_sc+75+(l*25));
if(window_focus_id==920 && mouse_x>x_cfg_sc+305 && mouse_x<x_cfg_sc+305+50 && mouse_y>y_cfg_sc+60+(l*25) && mouse_y<y_cfg_sc+60+(l*25)+20
&& mouse_released==0)
{
core_do_calculations[l]=toggle(core_do_calculations[l]);
mouse_released=1;
}

}

petitchiffre.Print("FPS RATE:", x_cfg_sc+370, y_cfg_sc+40);
Line(Vec2D( x_cfg_sc+370, y_cfg_sc+50),Vec2D( x_cfg_sc+485, y_cfg_sc+50)).Draw(CouleurLigne);
for (int l=0;l<2;l++)
{
Rect BCParam(Vec2D(x_cfg_sc+470,y_cfg_sc+60+(l*30)),Vec2D(50,25));
BCParam.SetRoundness(7.5);
BCParam.Draw(CouleurFond.WithAlpha(0.5));
switch(l)
{
case 0:
petitchiffre.Print("DMX:", x_cfg_sc+370, y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(BPS_RATE), x_cfg_sc+485, y_cfg_sc+75+(l*30));
break;
case 1:
petitchiffre.Print("DMX IN:", x_cfg_sc+370, y_cfg_sc+75+(l*30));
petitchiffre.Print(ol::ToString(dmxINrate), x_cfg_sc+485, y_cfg_sc+75+(l*30));
break;
default:
break;
}
if(window_focus_id==920 && mouse_x>x_cfg_sc+470 && mouse_x<x_cfg_sc+470+50 && mouse_y>y_cfg_sc+60+(l*30) && mouse_y<y_cfg_sc+60+(l*30)+25)
{
BCParam.DrawOutline(CouleurLevel);
if(mouse_b&1 && mouse_released==0  &&  numeric_postext>0)
{
def_param=atoi(numeric);
switch(l)
{
case 0://BPS RATE
if(def_param>=10 && def_param<=250)
{
BPS_RATE=def_param;
ticker_rate = BPS_TO_TIMER(BPS_RATE);
install_int_ex(ticker , ticker_rate);
reset_numeric_entry();
}
break;
case 1://DMX IN RATE
if(def_param>=10 && def_param<=50)
{
dmxINrate=def_param;
ticker_dmxIn_rate = BPS_TO_TIMER(dmxINrate);
install_int_ex(ticker_dmxIn , ticker_dmxIn_rate);
reset_numeric_entry();
}
break;
}
mouse_released=1;
}
}
}

 return(0);
}
int do_logical_Grider_Box(int xb, int yb)
{

/////////////nbre Gridplayers affichage///////////////////////////

for(int o=0;o<core_user_define_nb_gridplayers;o++)
{
if( mouse_x>xb+540+(o*15) && mouse_x<xb+540+(o*15)+10 && mouse_y>yb+20 && mouse_y<yb+20+10)
{
if( mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1472+o,Midi_Faders_Affectation_Mode);
}
else
{
index_show_grid_player[o]=toggle(index_show_grid_player[o]);
refresh_hauteur_fenetre_grider();
}
mouse_released=1;
}
}
}
//paramètres de grid
if( mouse_y>yb+15 && mouse_y<yb+15+20 )
{
//////def chan begin
if(mouse_x>xb+245 && mouse_x<xb+245+40 &&  index_enable_edit_Grider==1)//chan edit
{
if(mouse_released==0 )
{
int temp_begchan=atoi(numeric);
if(temp_begchan>0 && temp_begchan<512)
{
grider_begin_channel_is=temp_begchan;
}
reset_numeric_entry();
mouse_released=1;
}
}
if(mouse_x>xb+315 && mouse_x<xb+315+40 &&  index_enable_edit_Grider==1 )//col edit
{
if(mouse_released==0)
{
int temp_col=atoi(numeric);
if(temp_col>0 && temp_col<=24)
{
grider_nb_col=temp_col;
}
reset_numeric_entry();
mouse_released=1;
}
}
if(mouse_x>xb+385 && mouse_x<xb+385+40 &&  index_enable_edit_Grider==1)//rows edit
{

if(mouse_released==0 )
{
int temp_row=atoi(numeric);
if(temp_row>0 && temp_row<=24)
{
grider_nb_row=temp_row;
refresh_hauteur_fenetre_grider();
}
reset_numeric_entry();
mouse_released=1;
}
}
if(mouse_x>xb+430 && mouse_x<xb+430+50)//edit mode
{
if(mouse_released==0 )
{
index_enable_edit_Grider=toggle(index_enable_edit_Grider);
if(index_enable_edit_Grider==0)
{
for(int i=0;i<4;i++)
{
to_step_editing_mode[i]=0;
}
}
mouse_released=1;
}

}
}

//Global grid viewer

////Affichage viewer
switch(show_global_view_grider)
{
case 0:
hauteurGlobalGridviewer=0;
break;
case 1:
hauteurGlobalGridviewer=100+(grider_nb_row*size_preview_case);
do_logical_GlobalGridViewer(xb,yb+40,size_preview_case);  //x y taille de previsu de la grille
break;
}

if(mouse_x>xb+495 && mouse_x<xb+495+40 && mouse_y>yb+20 && mouse_y<yb+20+10)
{
show_global_view_grider=toggle(show_global_view_grider);
refresh_hauteur_fenetre_grider();
mouse_released=1;
}


//AFFICHAGE DES GRID PLAYERS

int numerodeplayer_affiche=0;
for(int yo=0;yo<core_user_define_nb_gridplayers;yo++)
{
if(index_show_grid_player[yo]==1)
{
do_logical_Grid_player(xb, yb+50+hauteurGlobalGridviewer+(numerodeplayer_affiche*(60+(grider_facteur_hauteur*size_grille))), yo);
numerodeplayer_affiche++;
}
}

return(0);
}
int do_logical_Interface_Trichromie(int xchroma, int ychroma, int rayon, int largeurchroma)
{

/////////////////TRICHRO / QUADRI CHOOSE//////////////////////////////////////

if(mouse_x>xchroma-60 && mouse_x<xchroma+80 && mouse_y>ychroma-190 && mouse_y<ychroma-160)
{

if(index_quadri==0){index_quadri=1;dock_color_type[dock_color_selected]=1;}
else if(index_quadri==1){index_quadri=0;dock_color_type[dock_color_selected]=0;}
mouse_released=1;
}


//GEL LIST BUTTON
if(mouse_x>xchroma+90 && mouse_x<xchroma+150 && mouse_y>ychroma-185 && mouse_y<ychroma-165)
{
show_gel_list=toggle(show_gel_list);
mouse_released=1;
}

/////////////////////AFFECTATION ON / OFF AUX DOCKS FADERS///////////////////////////

if(mouse_x>xchroma+20 && mouse_x<xchroma+150 && mouse_y>ychroma+300 && mouse_y< ychroma+330)
{
if(index_affect_color_to_dock==0)
{
reset_index_actions();
reset_indexs_confirmation();
index_affect_color_to_dock=1;
}
else
{
reset_index_actions();
}
index_do_dock=index_affect_color_to_dock;
mouse_released=1;
}
/////////////////////////////////////////////////////////////////////////////////

//////////////////////ROUE DE COULEUR//////////////////////////////////////////////////////

//AFFECTATION MIDI
if( Midi_Faders_Affectation_Type!=0)//config midi
  {
  //midi report
  switch(miditable[0][497])
  {
  case 0: sprintf(thetypinfo,"Note");break;
  case 1: sprintf(thetypinfo,"Key On");break;
  case 2: sprintf(thetypinfo,"Key Off");break;
  case 4: sprintf(thetypinfo,"Ctrl Change");break;
  }
  sprintf(string_last_midi_id,"COLOR WHEEL FADER is Ch: %d Pitch: %d Typ: %s" , miditable[1][497],miditable[2][497],thetypinfo);

  if(mouse_x>xchroma-140 && mouse_x<xchroma+140 && mouse_y>ychroma-140 && mouse_y<ychroma+140)
  {
    attribute_midi_solo_affectation(497,Midi_Faders_Affectation_Mode);
    mouse_released=1;
   }
}


/////////////////////DOCKING DES COULEURS////////////////////////////////////////
//emplacement des box pour actions de storage RVB sur 6 presets

//affectation des circuits aux RVB Y

if(mouse_y>ychroma+165 && mouse_y<ychroma+185)
{
if(mouse_x> xchroma-130 && mouse_x< xchroma-80 )//RED
{
if (index_inspekt==1){show_who_is_in_dock_color(dock_color_selected,0);}
couleur_to_affect=0;
bool there_is_asel_chan=0;

switch(index_paste_on_the_fly)
{
case 0:
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1)
{there_is_asel_chan=1;break;}
}

if(there_is_asel_chan==1 && (index_do_dock==1|| index_do_modify==1 || index_do_report==1))
{index_do_affect_color_trichro=1;index_ask_confirm=1;}

else {index_do_affect_color_trichro=0;index_ask_confirm=0;sprintf(string_Last_Order,"No channel selected to store as color");}
break;
case 1:
if(index_blind==0)
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferSaisie[p]=my_red;}
}
}
else
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferBlind[p]=my_red;}
}
}
sprintf(string_Last_Order,"Pasted On the Fly RED result");
break;
}
mouse_released=1;
}

else if (mouse_x> xchroma-65 && mouse_x< xchroma-15 )//GREEN
{
if (index_inspekt==1){show_who_is_in_dock_color(dock_color_selected,1);}
couleur_to_affect=1;
bool there_is_asel_chan=0;
switch(index_paste_on_the_fly)
{
case 0:
for(int p=1;p<513;p++)
{if(Selected_Channel[p]==1){there_is_asel_chan=1;break;}}
if(there_is_asel_chan==1 && (index_do_dock==1|| index_do_modify==1 || index_do_report==1))
{index_do_affect_color_trichro=1;index_ask_confirm=1;}
else {sprintf(string_Last_Order,"No channel selected to store as color");}
break;
case 1:
if(index_blind==0)
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferSaisie[p]=my_green;}
}
}
else
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferBlind[p]=my_green;}
}
}
sprintf(string_Last_Order,"Pasted On the Fly GREEN result");
break;
}
mouse_released=1;
}

else if (mouse_x> xchroma && mouse_x< xchroma+50 )//BLUE
{
if (index_inspekt==1){show_who_is_in_dock_color(dock_color_selected,2);}

couleur_to_affect=2;
bool there_is_asel_chan=0;
switch(index_paste_on_the_fly)
{
case 0:
for(int p=1;p<513;p++)
{if(Selected_Channel[p]==1){there_is_asel_chan=1;break;}}
if(there_is_asel_chan==1 && (index_do_dock==1|| index_do_modify==1 || index_do_report==1)){index_do_affect_color_trichro=1;index_ask_confirm=1;}
else {sprintf(string_Last_Order,"No channel selected to store as color");}
break;
case 1:
if(index_blind==0)
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferSaisie[p]=my_blue;}
}
}
else
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferBlind[p]=my_blue;}
}
}
sprintf(string_Last_Order,"Pasted On the Fly BLUE result");
break;
}
mouse_released=1;
}

else if (mouse_x> xchroma+65 && mouse_x< xchroma+115 )//YELLOW
{
if (index_inspekt==1){show_who_is_in_dock_color(dock_color_selected,3);}
couleur_to_affect=3;
bool there_is_asel_chan=0;
switch(index_paste_on_the_fly)
{
case 0:
for(int p=1;p<513;p++)
{if(Selected_Channel[p]==1){there_is_asel_chan=1;break;}}
if(there_is_asel_chan==1&& (index_do_dock==1|| index_do_modify==1 || index_do_report==1)){index_do_affect_color_trichro=1;index_ask_confirm=1;}
else {sprintf(string_Last_Order,"No channel selected to store as color");}
break;
case 1:
if(index_blind==0)
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferSaisie[p]=my_yellow;}
}
}
else
{
for(int p=1;p<513;p++)
{
if(Selected_Channel[p]==1){bufferBlind[p]=my_yellow;}
}
}
sprintf(string_Last_Order,"Pasted On the Fly YELLOW result");
break;
}
mouse_released=1;
}
}


//midi out de la roue

if(mouse_x> xchroma+140-10 && mouse_x< xchroma+140+10 && mouse_y>ychroma+110-10 && mouse_y<ychroma+110+10)
{

  if(midi_send_out[497]==0){midi_send_out[497]=1; }
  else if(midi_send_out[497]==1){midi_send_out[497]=0; }
  mouse_released=1;
  }

raccrochage_midi_logical_circulaire (xchroma-6, ychroma, 497, 125, 125);



//premiere rangee de dock colors

for (int dock_color=0;dock_color<4;dock_color++)
{
if(mouse_x>xchroma-130+(65*dock_color) && mouse_x<xchroma-80+(65*dock_color) && mouse_y>ychroma+215 && mouse_y<ychroma+235)
{
if( Midi_Faders_Affectation_Type!=0)
{
if(dock_color==0 && Midi_Faders_Affectation_Type==2)
{attribute_midi_to_control(949,Midi_Faders_Affectation_Type,Midi_Faders_Affectation_Mode);}
else{attribute_midi_solo_affectation(949+dock_color, Midi_Faders_Affectation_Mode);}
}
else
{
dock_color_selected=dock_color;
load_etat_picker_dans_dockcolor(dock_color_selected);
sprintf(string_Last_Order,">>Dock Color Selected %d",(dock_color_selected+1));
mouse_released=1;
}
}
}
//deuxième rangee de dockcolors
for (int dock_colortwo=0;dock_colortwo<4;dock_colortwo++)
{
if(mouse_x>xchroma-130+(65*dock_colortwo) && mouse_x<xchroma-80+(65*dock_colortwo) && mouse_y>ychroma+255 && mouse_y<ychroma+275)
{
if(Midi_Faders_Affectation_Type!=0)
{
attribute_midi_solo_affectation(949+(dock_colortwo+4), Midi_Faders_Affectation_Mode);
}
else
{
dock_color_selected=dock_colortwo+4;
load_etat_picker_dans_dockcolor(dock_color_selected);
sprintf(string_Last_Order,">>Dock Color Selected %d",dock_color_selected+1);
mouse_released=1;
}
}
}

//PASTE ON THE FLY
if(mouse_x>xchroma-150 && mouse_x<xchroma-20 && mouse_y>ychroma+300 && mouse_y< ychroma+330)
{
if(mouse_b&1 &&  mouse_released==0 && window_focus_id==902)
{
index_paste_on_the_fly=toggle(index_paste_on_the_fly);
mouse_released=1;
}
}


//GEL LIST
if(show_gel_list==1)
{

if(mouse_x>xchroma+180 && mouse_x<xchroma+250 && mouse_y>ychroma-185 && mouse_y<ychroma-165)
{
index_gel_type_selected++;
if(index_gel_type_selected>3)index_gel_type_selected=0;
mouse_released=1;
}
//numeric or designer list
if(mouse_x>xchroma+260 && mouse_x<xchroma+330 && mouse_y>ychroma-185 && mouse_y<ychroma-165)
{
show_designer_list=toggle(show_designer_list);
switch(show_designer_list)
{
case 0://numerical order
break;
case 1://designer order
break;
}
mouse_released=1;
}

//saisie d une ref de gelat
if(mouse_x>xchroma+340 && mouse_x<xchroma+390 && mouse_y>ychroma-185 && mouse_y<ychroma-165)
{
call_ref_number=atoi(numeric);
mouse_released=1;
if(call_ref_number<10000 && call_ref_number!=0)
{

//repositionnemennt de la liste
for (int i=0;i<10000;i++)
{
if(refs_of_gels[index_gel_type_selected][i]==call_ref_number )
{
gel_position[index_gel_type_selected]=i;
report_gels_to_rvb_trichro(index_gel_type_selected,gel_position[index_gel_type_selected]);
break;
}
}
reset_numeric_entry();
}

}
//+ - Index gelatine
if(mouse_y>ychroma-187 && mouse_y<ychroma-163)
{
//- index
if(mouse_x>xchroma+398 && mouse_x<xchroma+422)
{
if(gel_position[index_gel_type_selected]>10)gel_position[index_gel_type_selected]-=10;
mouse_released=1;
}
//+ index
if(mouse_x>xchroma+428 && mouse_x<xchroma+452)
{
if(gel_position[index_gel_type_selected]<10000-10)gel_position[index_gel_type_selected]+=10;
mouse_released=1;
}
}

//Transmission calculation
if(mouse_x>xchroma+510 && mouse_x<xchroma+550 && mouse_y>ychroma-185 && mouse_y<ychroma-165)
{
index_use_transmission=toggle(index_use_transmission);
mouse_released=1;
}

//sélection gel
for(int i=0;i<30;i++)
{
if( mouse_x>xchroma+175 && mouse_x<xchroma+485 && mouse_y>ychroma-150+(i*16) && mouse_y<ychroma-134+(i*16) )
{
call_ref_number=refs_of_gels[index_gel_type_selected][gel_position[index_gel_type_selected]+i];
report_gels_to_rvb_trichro(index_gel_type_selected,gel_position[index_gel_type_selected]+i);
mouse_released=1;
}
}
//fin gel list
}


return(0);
}
int do_logical_Sequenciel_Window(int xseq, int yseq,int largeur_seq,int hauteur_seq)
{

do_logical_refresh_vision_memories(xseq,yseq);
do_logical_x1_x2(xseq,yseq-25);

////////////////////MENUS///////////////////////////////////////////////////////
//options hautes

///alink
if(mouse_x>xseq+180 && mouse_x<xseq+180+35 && mouse_y>yseq+50 && mouse_y<yseq+50+15)
{
if(index_link_is_on==0){index_link_is_on=1;}
else if(index_link_is_on==1){index_link_is_on=0;}
mouse_released=1;
}

///banger
if(mouse_x>xseq+223 && mouse_x<xseq+263 && mouse_y>yseq+50 && mouse_y<yseq+50+15)
{
index_banger_is_on=toggle(index_banger_is_on);
mouse_released=1;
}

//grid player 1 embeded
if(mouse_x>xseq+275 && mouse_x<xseq+275+30 && mouse_y>yseq+50 && mouse_y<yseq+50+15 )
{
show_gridplayer_in_seq=toggle(show_gridplayer_in_seq);
mouse_released=1;
}



/////menus bas
int rangee_y= yseq+180+(35*(nbre_memoires_visualisables_en_preset+1));
int index_atoi=0;
for (int op=0;op<7;op++)
{
///actions mouse
if(mouse_x>xseq+20+(op*60) && mouse_x<xseq+20+(op*60)+50 && mouse_y>rangee_y && mouse_y<rangee_y+20)
{
switch(op)
{
case 0:         //create
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(768,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
reset_indexs_confirmation();
index_do_create_mem=1;
index_ask_confirm=1;
}
break;
case 1://delete mem
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(769,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
reset_indexs_confirmation();
index_do_delete_mem=1;
index_ask_confirm=1;
}
break;
case 2://stage minus
if(  Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(770,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
    if(index_go==0 && index_go_back==0 && index_pause==0)
           {
           position_onstage=mem_before_one;
           }
           else {index_go=0;index_pause=0; index_go_back=0;}

refresh_mem_onstage(position_onstage);
detect_mem_before_one();
detect_mem_preset();
refresh_mem_onpreset(position_preset);
niveauX1=255; niveauX2=0;
refresh_banger_wx();
refresh_integrated_gridplayer1();
}
break;
case 3://stage +
if(  Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(771,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{

 if(index_go==0 && index_go_back==0 && index_pause==0)
           {
           position_onstage=position_preset;
           }
            else {index_go=0;index_pause=0; index_go_back=0;}

refresh_mem_onstage(position_onstage);
detect_mem_before_one();
detect_mem_preset();
refresh_mem_onpreset(position_preset);
niveauX1=255; niveauX2=0;
refresh_banger_wx();
refresh_integrated_gridplayer1();
}
break;
case 4://preset -
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(772,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
index_go=0;index_pause=0; index_go_back=0;
detect_mem_preset_previous();
refresh_mem_onpreset(position_preset);
niveauX2=0;
}
break;
case 5://preset +
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(773,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
index_go=0;index_pause=0; index_go_back=0;
detect_next_preset();
refresh_mem_onpreset(position_preset);
niveauX2=0;
}
break;
case 6://goto
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1645,Midi_Faders_Affectation_Mode);
mouse_released=1;
}
else
{
if(numeric_postext>0)
{
index_atoi=(int)(atof(numeric)*10);
if(MemoiresExistantes[index_atoi]==1)
{
position_preset=index_atoi;
refresh_mem_onpreset(position_preset);
reset_numeric_entry();
numeric_postext=0;
}
}
}
break;

default:
break;
}//fin des switch
mouse_released=1;
}
}

//grid player 1 embarqué
if(show_gridplayer_in_seq==1)
{

//UP DOWN griders number selected

if(mouse_x>xseq+880-12 && mouse_x<xseq+880+12 && mouse_y>yseq+40-12 && mouse_y<yseq+40+12)
{

if(mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1476,Midi_Faders_Affectation_Mode);
}
else
{
if(index_grider_selected[0]>0)
{index_grider_selected[0]--;}
}
 mouse_released=1;
}
}


if( mouse_x>xseq+910-12 && mouse_x<xseq+910+12 && mouse_y>yseq+40-12 && mouse_y<yseq+40+12)
{

if( mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1480,Midi_Faders_Affectation_Mode);
}
else
{
if(index_grider_selected[0]<127){index_grider_selected[0]++;}
}
mouse_released=1;
}
}

do_logical_TheStepBox(xseq+660,yseq+90,0);
do_logical_ThePlayCommands(xseq+760,yseq+90,0);
do_logical_TheGrid_commands(xseq+660,yseq+130,0);//pos x, posy y, num player

if(mouse_x>xseq+690 && mouse_x<xseq+690+105 && mouse_y>yseq+295 && mouse_y<yseq+295+15 && mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)
{
 attribute_midi_solo_affectation(1540,Midi_Faders_Affectation_Mode);
}

else
{
index_link_speed_crossfade_to_gpl1=toggle(index_link_speed_crossfade_to_gpl1);
if(index_link_speed_crossfade_to_gpl1==1)
{  grid_crossfade_speed[0]=crossfade_speed;
   midi_levels[1508]=crossfade_speed;
}
}
mouse_released=1;
}
}


return(0);
}
int do_logical_deroule_repertoire_export_import(int xrep, int yrep, char name_of_rep[25])
{

//////////////////////LISTE DOSSIERS ETC///////////////////////////////////////

for (int y=0;y<8;y++)
{


if(window_focus_id==W_SAVE && mouse_x>xrep+5 && mouse_x<xrep+155 && mouse_y>(yrep+175+(y*20)) && mouse_y<(yrep+190+(y*20)))
{

if(mouse_button==1 && mouse_released==0)
{
importfile_selected=(y+line_import);
if(y+line_import<127)
{sprintf(importfile_name,list_import_files[importfile_selected]);  }
check_import_type();
mouse_released=1;
}
}

 //fin des 8 lignes
}



//selection depuis chaine de caracteres pour export plot


if(window_focus_id==W_SAVE && mouse_x>xrep+5 && mouse_x<xrep+205 && mouse_y>yrep+347 && mouse_y<yrep+367)
{

if(mouse_button==1 && mouse_released==0 && index_type==1 )
{
for (int tt=0;tt<24;tt++)
{
importfile_name[tt]=numeric[tt];
}
reset_numeric_entry();
index_type=0;
check_import_type();
mouse_released=1;
}
}




//////////////////UP DOWN LINE IMPORT/////////////////////

if(window_focus_id==W_SAVE && mouse_x>xrep+208 && mouse_x<xrep+232)
{
if(mouse_y>yrep+188 && mouse_y<yrep+212)
{

if(mouse_button==1)
{
if(line_import>0){line_import--;}
mouse_released=1;
}
}
else if(window_focus_id==W_SAVE && mouse_y>yrep+298 && mouse_y<yrep+322)
{

if(mouse_button==1)
{
if(line_import<127){line_import++;}
mouse_released=1;
}
}
}



/////////////////////////////SAVE LOAD && CONDITIONS////////////////////////////////
/*switch (index_export_choice)
{
case 0://ascii
enable_export=1;
enable_import=1;
break;
case 1://schwz
enable_export=0;
enable_import=1;
break;
case 2://alq
enable_export=0;
enable_import=1;
break;
case 3://pdf
enable_export=1;
enable_import=0;
break;

}*/ //mis dans  affichage
////////////////////////////////////////////////////////////////////////////////
if(enable_export==1)
{
if(window_focus_id==W_SAVE && mouse_x>xrep+40 && mouse_x<xrep+110 && mouse_y>yrep+390 && mouse_y<yrep+420)
{
if(mouse_button==1 && mouse_released==0)
{
index_do_export=1;
index_ask_confirm=1;
mouse_released=1;
}
}
}
////////////////////////////////////////////////////////////////////////////////
if(enable_import==1)
{
if(window_focus_id==W_SAVE && mouse_x>xrep+140 && mouse_x<xrep+210 && mouse_y>yrep+390 && mouse_y<yrep+420)
{
if(mouse_button==1 && mouse_released==0)
{
index_do_import=1;
index_ask_confirm=1;
mouse_released=1;
}
}
}
return(0);
}
int do_logical_TheCallGridBox(int xb, int yb, int num_grider)
{

if(mouse_x>xb+10 && mouse_x<xb+10+50 && mouse_y>yb && mouse_y<yb+20)
{
if(mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1528+num_grider,Midi_Faders_Affectation_Mode);
}
else
{
if(numeric_postext>0)
{
int temp_num_grid=atoi(numeric);
if(temp_num_grid>0 && temp_num_grid<128)
{
//rajout
bool was_playing=grider_is_playing[num_grider];
grider_is_playing[num_grider]=0;
grid_niveauX1[num_grider]=255;
grid_niveauX2[num_grider]=0;
grid_floatX1[num_grider]=255.0;
grid_floatX2[num_grider]=0.0;
grid_fraction_X2_in[num_grider]=0.0;
grid_fraction_X1_out[num_grider]=0.0;

index_grider_selected[num_grider]=temp_num_grid-1;//avant modif du 5 nov que cette ligne la

//rajout
index_grider_step_is[num_grider]=0;
//chargement à la volée rafraichissement grid
gridder_prepare_cross(num_grider, index_grider_selected[num_grider], index_grider_step_is[num_grider]);


if(grider_seekto_mode[num_grider]==1 && grid_seekpos[index_grider_selected[num_grider]][index_grider_step_is[num_grider]]>0)//seek position original fonction
  {index_grider_seek_pos[num_grider]=grid_seekpos[index_grider_selected[num_grider]][index_grider_step_is[num_grider]];}

//rajout
if(was_playing==1){grider_is_playing[num_grider]=1;}

reset_numeric_entry();
}
}
else if(index_main_clear==1)
{
 grid_to_clear=index_grider_selected[num_grider];
 step_grid_to_clear=index_grider_step_is[index_grider_selected[num_grider]];
 index_ask_confirm=1;
 index_clear_a_grid=1;
}
}
mouse_released=1;
}
}

if(mouse_x>xb+70 && mouse_x<xb+70+170 && mouse_y>yb && mouse_y<yb+20 && index_type==1 && mouse_released==0)
{
 for(int tt=0;tt<24;tt++)
 {
 grider_name[index_grider_selected[num_grider]][tt]=numeric[tt];
 }
 grider_name[index_grider_selected[num_grider]][24]='\0';
 reset_numeric_entry();numeric_postext=0; if(index_text_auto_close==1){index_type=0;}
mouse_released=1;
}

//UP DOWN griders number selected

if(mouse_x>xb+265-12 && mouse_x<xb+265+12 && mouse_y>yb+10-12 && mouse_y<yb+10+12)
{

if(mouse_released==0)
{
if( Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1476+num_grider,Midi_Faders_Affectation_Mode);
}
else
{
if(index_grider_selected[num_grider]>0)
{index_grider_selected[num_grider]--;}
}
 mouse_released=1;
}
}


if( mouse_x>xb+295-12 && mouse_x<xb+295+12 && mouse_y>yb+10-12 && mouse_y<yb+10+12)
{

if( mouse_released==0)
{
if(Midi_Faders_Affectation_Type!=0)//config midi
{
attribute_midi_solo_affectation(1480+num_grider,Midi_Faders_Affectation_Mode);
}
else
{
if(index_grider_selected[num_grider]<127){index_grider_selected[num_grider]++;}
}
mouse_released=1;
}
}
return(0);
}
int do_logical_Draw_Channel_Preset_Title(int xchan, int ychan, int prst_v)
{


 if(window_focus_id==0 && mouse_button==1  && mouse_released==0 && prst_v!=0 )
 {
 if(mouse_y>ychan && mouse_y<ychan+20  )
 {
 //TITRE VIEW
 if(mouse_x> xchan+40 && mouse_x<xchan+40+210)
 {
 if(prst_v>0 && index_type==1 )
 {
 sprintf( channel_view_Name[prst_v],numeric);
 reset_numeric_entry();
 numeric_postext=0;
 mouse_released=1;
 }
 }
 // Mem sel
 else if(mouse_x>  xchan+435 && mouse_x<xchan+435+20)
 {
 if(channel_view_type_of_behaviour[prst_v]!=1){channel_view_type_of_behaviour[prst_v]=1;}
 else{channel_view_type_of_behaviour[prst_v]=0;}
 mouse_released=1;
 }
 // fader sel
 else if(mouse_x>  xchan+460 && mouse_x<xchan+460+20 )
 {
 if(channel_view_type_of_behaviour[prst_v]!=2){channel_view_type_of_behaviour[prst_v]=2;}
 else{channel_view_type_of_behaviour[prst_v]=0;}
 mouse_released=1;
 }

 //All sel
  else if(mouse_x>  xchan+485 && mouse_x<xchan+485+30  )
 {
 channel_view_mode_builder[prst_v]=toggle(channel_view_mode_builder[prst_v]);
 mouse_released=1;
 }

 //do build logique sortie car plantage grave à la reconstruction. il faut garder ca dans la boucle affichage
/* else if(mouse_x>  xchan+520 && mouse_x<xchan+520+55 )
 {
 channel_view_is=prst_v;
 if(index_do_dock==1)
 {
 if(channel_view_type_of_behaviour[channel_view_is]==0 &&  channel_view_mode_builder[channel_view_is]==0)
 {index_ask_record_selection_of_view=1 ; index_ask_confirm=1; mouse_released=1;}
 else  {index_ask_build_view=1; index_ask_confirm=1; mouse_released=1;  }
 }

 else if(index_do_modify==1)
 {
 index_ask_modify_selection_of_view=1 ;index_ask_confirm=1;   mouse_released=1;
 }
 else if(index_do_report==1)
 {
 index_ask_report_selection_of_view=1;index_ask_confirm=1;      mouse_released=1;
 }
 else if(index_main_clear==1)
 {
 index_ask_clear_selection_of_view=1;   mouse_released=1;
 }

 } */


 }

 }

 return(0);
}
int do_main_config(int cfgnetw_X, int cfgnetw_Y, int largeurCFGdmxwindow,int hauteurCFGdmxwindow)
{
//config channels
for (int oi=0;oi<5;oi++)
{
Rect UnderParam(Vec2D(cfgnetw_X+155,cfgnetw_Y+55+(oi*30)),Vec2D(50,25));
UnderParam.SetRoundness(7.5);
UnderParam.SetLineWidth(epaisseur_ligne_fader);
UnderParam.Draw(CouleurFond.WithAlpha(0.5));
if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+155 && mouse_x<cfgnetw_X+155+50 && mouse_y>cfgnetw_Y+55+(oi*30) && mouse_y<cfgnetw_Y+55+(oi*30)+25)
{
UnderParam.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
int param_data_in=0;
switch(dmx_view)
{
case 0:
if(oi!=1){param_data_in=(int)(atoi(numeric)*2.55)+1;}
else {param_data_in=atoi(numeric);}
reset_numeric_entry();
break;
case 1:
param_data_in=atoi(numeric);
reset_numeric_entry();
break;
}
switch(oi)
{
case 0:
dmx_view=toggle(dmx_view);
break;
case 1:
default_step_level=param_data_in;
break;
case 2:
check_channel_level=param_data_in;
break;
case 3:
dimmer_check_level=param_data_in;
break;
case 4:
index_blink_change_memories=toggle(index_blink_change_memories);
break;
}
UnderParam.Draw(CouleurBlind);
mouse_released=1;
}
}
}
char string_cfg_main[32];
petitchiffre.Print("Channels: " ,(cfgnetw_X+10), (cfgnetw_Y+40));
Line(Vec2D(cfgnetw_X+10,cfgnetw_Y+45),Vec2D(cfgnetw_X+100,cfgnetw_Y+45)).Draw(CouleurLigne);
petitchiffre.Print("Display mode:", (cfgnetw_X+20), (cfgnetw_Y+70) );
switch(dmx_view)
{
case 0:
sprintf(string_cfg_main,"/100");
break;
case 1:
sprintf(string_cfg_main,"/255");
break;
}
petitchiffre.Print(string_cfg_main, (cfgnetw_X+170), (cfgnetw_Y+70) );

//step level ne varie pas
sprintf(string_cfg_main,"%d", default_step_level);
petitchiffre.Print("Default step level:", (cfgnetw_X+20), (cfgnetw_Y+100) );
petitchiffre.Print(string_cfg_main ,(cfgnetw_X+170), (cfgnetw_Y+100));

switch(dmx_view)
{
case 0:
sprintf(string_cfg_main,"%d", (int)(((float)check_channel_level)/2.55));
break;
case 1:
sprintf(string_cfg_main,"%d", check_channel_level);
break;
}
petitchiffre.Print("Check channels level:", (cfgnetw_X+20), (cfgnetw_Y+130) );
petitchiffre.Print(string_cfg_main ,(cfgnetw_X+170), (cfgnetw_Y+130));

switch(dmx_view)
{
case 0:
sprintf(string_cfg_main,"%d", (int)(((float)dimmer_check_level)/2.55));
break;
case 1:
sprintf(string_cfg_main,"%d", dimmer_check_level);
break;
}
petitchiffre.Print("Check dimmers level:", (cfgnetw_X+20), (cfgnetw_Y+160) );
petitchiffre.Print(string_cfg_main ,(cfgnetw_X+170), (cfgnetw_Y+160));



switch(index_blink_change_memories)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print("Show Change/Mem:", (cfgnetw_X+20), (cfgnetw_Y+190) );
petitchiffre.Print(string_cfg_main ,(cfgnetw_X+170), (cfgnetw_Y+190));

/////////////////////////NBRE AUDIO PLAYERS///////////////////////////////////////////////////

Rect UnderParam(Vec2D(cfgnetw_X+155,cfgnetw_Y+235),Vec2D(50,25));
UnderParam.SetRoundness(7.5);
UnderParam.SetLineWidth(epaisseur_ligne_fader);
UnderParam.Draw(CouleurFond.WithAlpha(0.5));

Rect UnderParam2(Vec2D(cfgnetw_X+155,cfgnetw_Y+265),Vec2D(50,20));
UnderParam2.SetRoundness(7.5);
UnderParam2.SetLineWidth(epaisseur_ligne_fader);
UnderParam2.Draw(CouleurFond.WithAlpha(0.5));




if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+155 && mouse_x<cfgnetw_X+155+50 )
{
if( mouse_y>cfgnetw_Y+235 && mouse_y<cfgnetw_Y+235+25)//nbre de channels audio
{
UnderParam.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
int param_data_in=0;
param_data_in=atoi(numeric);
index_nbre_players_visibles=param_data_in;
if(index_nbre_players_visibles<1){index_nbre_players_visibles=1;}
else if(index_nbre_players_visibles>4){index_nbre_players_visibles=4;}
reset_numeric_entry();
UnderParam.Draw(CouleurBlind);
mouse_released=1;
}
}
if(window_focus_id==W_CFGMENU &&  mouse_y>cfgnetw_Y+265 && mouse_y<cfgnetw_Y+265+20)//nbre de channels audio
{
UnderParam2.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
index_preloaded_sounds=toggle(index_preloaded_sounds);
UnderParam2.Draw(CouleurBlind);
mouse_released=1;
}
}
}


petitchiffre.Print("Audio: " ,(cfgnetw_X+10), (cfgnetw_Y+220));
petitchiffre.Print(audio_device_name,(cfgnetw_X+120), (cfgnetw_Y+220));
Line(Vec2D(cfgnetw_X+10,cfgnetw_Y+225),Vec2D(cfgnetw_X+100,cfgnetw_Y+225)).Draw(CouleurLigne);
petitchiffre.Print("Number of Players:", (cfgnetw_X+20), (cfgnetw_Y+250) );
sprintf(string_cfg_main,"%d", index_nbre_players_visibles);
petitchiffre.Print(string_cfg_main ,(cfgnetw_X+170), (cfgnetw_Y+250));
petitchiffre.Print("Preload on read:",(cfgnetw_X+20), (cfgnetw_Y+280));
switch(index_preloaded_sounds)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,(cfgnetw_X+170), (cfgnetw_Y+280));



///////////////////DEUXIEME COLONNE

for (int oi=0;oi<8;oi++)
{
Rect UnderParam(Vec2D(cfgnetw_X+365,cfgnetw_Y+55+(oi*30)),Vec2D(50,25));
UnderParam.SetRoundness(7.5);
UnderParam.SetLineWidth(epaisseur_ligne_fader);
UnderParam.Draw(CouleurFond.WithAlpha(0.5));
if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+365 && mouse_x<cfgnetw_X+365+50 && mouse_y>cfgnetw_Y+55+(oi*30) && mouse_y<cfgnetw_Y+55+(oi*30)+25)
{
UnderParam.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
//sab 02/03/2014 unused var int param_data_in=0;

switch(oi)//action souris
{
case 0://Temps par defaut
default_time=atof(numeric);
reset_numeric_entry();
break;
case 1://temps par defaut d un bang
default_time_of_the_bang=atof(numeric);
reset_numeric_entry();
break;
case 2://time digit nbre decimales affichages chasers
index_affichage_digit_time_unit=atoi(numeric)-1;
if(index_affichage_digit_time_unit<=0){index_affichage_digit_time_unit=0;}
else
{
if (index_affichage_digit_time_unit>3)
{index_affichage_digit_time_unit=3;}
reset_numeric_entry();
}
break;
case 3://nbre tracks visualisables chasers
nbre_track_visualisables=atoi(numeric);
if(nbre_track_visualisables<1){nbre_track_visualisables=1;}
if(nbre_track_visualisables>nbre_tracks_par_chaser){nbre_track_visualisables=nbre_tracks_par_chaser;}
reset_numeric_entry();
break;
case 4://midi force mode pour le play
Midi_Force_Go=toggle(Midi_Force_Go);
break;
case 5://nombre cues dans preset view
nbre_memoires_visualisables_en_preset=atoi(numeric);
if(nbre_memoires_visualisables_en_preset<5){nbre_memoires_visualisables_en_preset=5;}
if(nbre_memoires_visualisables_en_preset>25){nbre_memoires_visualisables_en_preset=25;}
hauteur_globale_sequenciel=180+(35*(nbre_memoires_visualisables_en_preset+1))+35;
reset_numeric_entry();
break;
case 6: // on Go light Channel
go_channel_is=atoi(numeric);
if(go_channel_is<1 || ( go_channel_is> 512)){go_channel_is=0;}
reset_numeric_entry();
break;
case 7: // on Pause light Channel
pause_channel_is=atoi(numeric);
if(pause_channel_is<1 || ( pause_channel_is> 512)){pause_channel_is=0;}
reset_numeric_entry();
break;
default:
break;
}
mouse_released=1;
}
}

switch(oi)//affichage
{
case 0://Temps par defaut
petitchiffre.Print("CueList / Bangs / Chasers " ,(cfgnetw_X+225), (cfgnetw_Y+40));
Line(Vec2D(cfgnetw_X+225,cfgnetw_Y+45),Vec2D(cfgnetw_X+410,cfgnetw_Y+45)).Draw(CouleurLigne);
petitchiffre.Print("Record Default time:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(default_time),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 1:
petitchiffre.Print("Bang stay-on time:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
char tmpo[10];
sprintf(tmpo,"%.1f",default_time_of_the_bang);
petitchiffre.Print(tmpo,cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 2:
petitchiffre.Print("Time Unit Digits:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(index_affichage_digit_time_unit+1),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 3:
petitchiffre.Print("Chaser View Tracks:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(nbre_track_visualisables),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 4:
petitchiffre.Print("GO Midi ForceMode:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
switch(Midi_Force_Go)
{
case 0:
petitchiffre.Print("/Off",cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 1:
petitchiffre.Print("/On",cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
}
break;
case 5:
petitchiffre.Print("Cues in Preset:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(nbre_memoires_visualisables_en_preset),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 6:
petitchiffre.Print("Go Channel:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(go_channel_is),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
case 7:
petitchiffre.Print("Pause Channel:",cfgnetw_X+235,cfgnetw_Y+70+(oi*30));
petitchiffre.Print(ol::ToString(pause_channel_is),cfgnetw_X+380,cfgnetw_Y+70+(oi*30));
break;
default:
break;
}

}

//quatrieme bloc

petitchiffre.Print("On Start" ,(cfgnetw_X+430), (cfgnetw_Y+40));
Line(Vec2D(cfgnetw_X+430,cfgnetw_Y+45),Vec2D(cfgnetw_X+530,cfgnetw_Y+45)).Draw(CouleurLigne);
petitchiffre.Print("Open Camera",cfgnetw_X+430,cfgnetw_Y+70);
Rect CamOn(Vec2D(cfgnetw_X+525,cfgnetw_Y+55),Vec2D(50,20));
CamOn.SetRoundness(7.5);
CamOn.SetLineWidth(epaisseur_ligne_fader);
CamOn.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+55 && mouse_y<cfgnetw_Y+55+20)
{
CamOn.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
load_camera_on_start=toggle(load_camera_on_start);
CamOn.Draw(CouleurBlind);
mouse_released=1;
}
}
switch(load_camera_on_start)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,cfgnetw_X+540,cfgnetw_Y+70);



petitchiffre.Print("Open Arduino",cfgnetw_X+430,cfgnetw_Y+100);
Rect ArduinOn(Vec2D(cfgnetw_X+525,cfgnetw_Y+85),Vec2D(50,20));
ArduinOn.SetRoundness(7.5);
ArduinOn.SetLineWidth(epaisseur_ligne_fader);
ArduinOn.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+85 && mouse_y<cfgnetw_Y+85+20)
{
ArduinOn.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
open_arduino_on_open=toggle(open_arduino_on_open);
ArduinOn.Draw(CouleurBlind);
mouse_released=1;
}
}
switch(open_arduino_on_open)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,cfgnetw_X+540,cfgnetw_Y+100);

//iCat enable_iCat
petitchiffre.Print("Open iCat",cfgnetw_X+430,cfgnetw_Y+130);
Rect iCatOn(Vec2D(cfgnetw_X+525,cfgnetw_Y+115),Vec2D(50,20));
iCatOn.SetRoundness(7.5);
iCatOn.SetLineWidth(epaisseur_ligne_fader);
iCatOn.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+115 && mouse_y<cfgnetw_Y+115+20)
{
iCatOn.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
enable_iCat=toggle(enable_iCat);
mouse_released=1;
}
}
switch(enable_iCat)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,cfgnetw_X+540,cfgnetw_Y+130);



//PROCESS ACCESS>>multicore

Rect ProcessB(Vec2D(cfgnetw_X+525,cfgnetw_Y+190),Vec2D(50,20));
ProcessB.SetRoundness(7.5);
ProcessB.SetLineWidth(epaisseur_ligne_fader);
ProcessB.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+190 && mouse_y<cfgnetw_Y+190+20)
{
ProcessB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
index_allow_multicore=toggle(index_allow_multicore);
ProcessB.Draw(CouleurBlind);
mouse_released=1;
if(index_allow_multicore==1 && core_to_assign>0 && core_to_assign<9)
{process_assign_to_core(core_to_assign);}
}
}


Rect ProcessCorB(Vec2D(cfgnetw_X+525,cfgnetw_Y+215),Vec2D(50,20));
ProcessCorB.SetRoundness(7.5);
ProcessCorB.SetLineWidth(epaisseur_ligne_fader);
ProcessCorB.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+215 && mouse_y<cfgnetw_Y+215+20)
{
ProcessCorB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
core_to_assign=atoi(numeric);
reset_numeric_entry();
if(core_to_assign>0 && core_to_assign<9 && index_allow_multicore==1)
{process_assign_to_core(core_to_assign);}
ProcessCorB.Draw(CouleurBlind);
mouse_released=1;
}
}
petitchiffre.Print("Multicore: " ,(cfgnetw_X+430), (cfgnetw_Y+203));
Line(Vec2D(cfgnetw_X+430,cfgnetw_Y+210),Vec2D(cfgnetw_X+500,cfgnetw_Y+210)).Draw(CouleurLigne);
switch(index_allow_multicore)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,(cfgnetw_X+540), (cfgnetw_Y+203));
petitchiffre.Print("Affect to Core:",cfgnetw_X+430,cfgnetw_Y+228);
petitchiffre.Print(ol::ToString(core_to_assign),cfgnetw_X+545,cfgnetw_Y+228);



//suite Fader space
//LargeurEspaceFaderSize

Rect faderSpace(Vec2D(cfgnetw_X+525,cfgnetw_Y+265),Vec2D(50,20));
faderSpace.SetRoundness(7.5);
faderSpace.SetLineWidth(epaisseur_ligne_fader);
faderSpace.Draw(CouleurFond.WithAlpha(0.5));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+525 && mouse_x<cfgnetw_X+525+50 && mouse_y>cfgnetw_Y+265 && mouse_y<cfgnetw_Y+265+20)
{
faderSpace.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
LargeurEspaceFaderSize=atoi(numeric);
reset_numeric_entry();
if(LargeurEspaceFaderSize<1024 ){LargeurEspaceFaderSize=1024;}
if(LargeurEspaceFaderSize>largeur_ecran){LargeurEspaceFaderSize=largeur_ecran;}
faderSpace.Draw(CouleurBlind);
mouse_released=1;
}
}
petitchiffre.Print("Fader Space Width: " ,(cfgnetw_X+430), (cfgnetw_Y+255));
Line(Vec2D(cfgnetw_X+430,cfgnetw_Y+260),Vec2D(cfgnetw_X+560,cfgnetw_Y+260)).Draw(CouleurLigne);
petitchiffre.Print(ol::ToString(LargeurEspaceFaderSize),(cfgnetw_X+540), (cfgnetw_Y+280));


////////////////////////////////////////////////////



do_keyboard_conf((cfgnetw_X+620), (cfgnetw_Y+40));


//EXPERT MODE confirmations ou non

Rect ExpertB(Vec2D(cfgnetw_X+740,cfgnetw_Y+225),Vec2D(50,20));
ExpertB.SetRoundness(7.5);
ExpertB.SetLineWidth(epaisseur_ligne_fader);
ExpertB.Draw(CouleurFond.WithAlpha(0.5));
ExpertB.Draw(CouleurFader.WithAlpha(expert_mode*alpha_blinker));

if(window_focus_id==W_CFGMENU && mouse_x> cfgnetw_X+740 && mouse_x<cfgnetw_X+740+50 && mouse_y>cfgnetw_Y+225 && mouse_y<cfgnetw_Y+225+20)
{
ExpertB.DrawOutline(CouleurLevel);
if(mouse_button==1 && mouse_released==0)
{
expert_mode=toggle(expert_mode);
ExpertB.Draw(CouleurBlind);
mouse_released=1;
}
}


petitchiffre.Print("EXPERT MODE: " ,(cfgnetw_X+620), (cfgnetw_Y+240));
switch(expert_mode)
{
case 0:
sprintf(string_cfg_main,"/Off");
break;
case 1:
sprintf(string_cfg_main,"/On");
break;
}
petitchiffre.Print(string_cfg_main,(cfgnetw_X+750), (cfgnetw_Y+240));



return(0);
}