﻿////////////////////////////////////////////////////////////////////////////
// ADOBE SYSTEMS INCORPORATED
// Copyright 2007 Adobe Systems Incorporated
// All Rights Reserved
//
// NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the
// terms of the Adobe license agreement accompanying it.  If you have received this file from a
// source other than Adobe, then your use, modification, or distribution of it requires the prior
// written permission of Adobe.
/////////////////////////////////////////////////////////////////////////////

/*
<javascriptresource>
<name>Echantillon 10*15</name>
<type>automate</type>
<about>Sélectionne un échantillon 10*15cm pour un format de tirage donné.</about>
<enableinfo>true</enableinfo>
</javascriptresource>
*/

////////////////////////////////////////////////////////////////////////////
///// Script de création de calques de texte 
/////
///// Auteur : Bruno Gallet
///// Date  :14 juillet 2013
/////
/////////////////////////////////////////////////////////////////////////////

#target photoshop					
// Script dédié à Photoshop

app.bringToFront();					// On place Photoshop au premier plan
displayDialogs = DialogModes.NO;	// Désactivation des boîtes de dialogue

// Sauvegarde des unités de mesure en cours, et passage en pixels par défaut
var oRulerUnits = preferences.rulerUnits;
var oTypeUnits = preferences.typeUnits;
preferences.rulerUnits = Units.PIXELS;
preferences.typeUnits = TypeUnits.PIXELS;

try {
    
var DocActif = activeDocument;		// Document actif (image ouverte au premier plan)

    
    
    var leFormat = new Array()
    var laValeur = "A0,840,1186,A1,594,840,A2,420,594,A3+,329,483,A3,297,420,A4,210,297,Autre,600,900," 
//~     var DocActif = activeDocument;		// Document actif (image ouverte au premier plan)
    var HauteurExtrait, LargeurExtrait,  LargeurTirage, laResolution, laMarge  = Number();
  
    function GetResolution()
    {
        LargeurTirage = ((leFormat[2]-laMarge)/25.4) ;
        // Détermine la résolution nécessaire en DPI    
        laResolution = DocActif.width/LargeurTirage;
    }

function GetFormat(MonFormat)
{
    leFormat[0] = MonFormat;    
    var lePointeurDeb = laValeur.indexOf(MonFormat+",");
    lePointeurDeb = laValeur.indexOf(",",lePointeurDeb+1,);
    var lePointeurFin = laValeur.indexOf(",",lePointeurDeb+1,);
    leFormat[1] = laValeur.substring(lePointeurDeb+1,lePointeurFin);
    lePointeurDeb = lePointeurFin+1;
    lePointeurFin = laValeur.indexOf(",",lePointeurDeb+1,);
    leFormat[2] = laValeur.substring(lePointeurDeb,lePointeurFin);
}
    
function SnpCreateSlider () 
{
	this.windowRef = null;
}

/**
 Create a window, add a slider control and a text label. Define behavior for the slider
 that updates the text in the label.

 @return True if the snippet ran as expected, false  otherwise.  
 @type Boolean
*/
SnpCreateSlider.prototype.run = function() {
	var retval = true;
	
	// Create a dialog-type window (a modeless or floating dialog),
	var win = new Window("dialog", "Préparation d'un échantillon", [150, 150, 600, 400]); 
	
    this.windowRef = win;

    // Choix du format de tirage
    var leTirage=new Array("A0","A1","A2","A3+","A3","A4","Autre");
    
    // Définition d'un format spécifique
    GetFormat("Autre");
    win.pnlSpec = win.add("panel", [220, 10, 440, 100], "Format spécifique");
    win.pnlSpec.visible = false;
    win.pnlSpec.HautSt = win.pnlSpec.add("statictext",  [10, 20, 115, 35],"Petit côté en mm :");
    win.pnlSpec.HautEt = win.pnlSpec.add("edittext",  [120, 20, 180, 40],leFormat[1]);
    win.pnlSpec.LargeSt = win.pnlSpec.add("statictext", [10, 50, 115, 65],"Grand côté en mm :");
    win.pnlSpec.LargeEt = win.pnlSpec.add("edittext",  [120, 50, 180, 70],leFormat[2]);
    
    
    var FormatDef = 3 // Choix du format par défaut
    GetFormat(leTirage[FormatDef]);
    var MargeDef = 3; // Marge par défaut
    laMarge = MargeDef; // applique la marge par défaut
    GetResolution()
    win.sText = win.add( "statictext", [10,10,175,25], "Format du tirage" );
    win.sourceList = win.add( "dropdownlist", [10,30,100,45], leTirage );
    win.sourceList.selection = FormatDef;
    win.sDescText = win.add( "statictext", [120,33,200,48], leFormat[1] + " * " + leFormat[2] + "mm" );
    
    win.resolText = win.add( "statictext", [10,75,275,90], "Résolution du document : " + Math.round(laResolution) + " DPI");

	// Add a panel to contain the components
    win.pnl = win.add("panel", [10, 110, 440, 200], "Définissez la marge du tirage");
	// Add some labels that describe the state of the slider
	win.pnl.minLbl = win.pnl.add("statictext", [30, 47, 40, 60], "0");
	win.pnl.curLbl = win.pnl.add("statictext", [152, 47, 170, 60], "25");
	win.pnl.maxLbl = win.pnl.add("statictext", [280, 47, 300, 60], "50");
	win.pnl.displayTextLbl = win.pnl.add("statictext", [320, 20, 360, 40], "Marge :");
	win.pnl.displayUnitLbl = win.pnl.add("statictext", [378, 20, 410, 40], "mm");
	win.pnl.displayLbl = win.pnl.add("statictext", [365, 20, 400, 40],laMarge );
	// Add a slider control
	win.pnl.sliderCtrl = win.pnl.add("slider", [20, 20, 300, 45], laMarge, 0, 50);

	// Add buttons
	win.resetButton = win.add("button", [25, 210, 125, 240], "Initialiser");
	win.doneButton = win.add("button",[320, 210, 420, 240] , "Valider");

	// Define behavior for when the dialog value changes
	win.sourceList.onChange = function() 
	{
		// Mise à jour du texte sur le format.
        GetFormat(leTirage[win.sourceList.selection.index]);
        win.sDescText.text = leFormat[1] + " * " + leFormat[2] + "mm";
        GetResolution()
        win.resolText.text = "Résolution du document : " + Math.round(laResolution) + " DPI";
        
        if (leTirage[win.sourceList.selection.index] == "Autre") 
            {
             win.pnlSpec.visible = true;
             }
         else { win.pnlSpec.visible = false;}
	};

    win.pnl.sliderCtrl.onChanging = function() 
	{
        var val = Math.round(win.pnl.sliderCtrl.value);
        // Update the label text with the current slider value.
        win.pnl.displayLbl.text = val;
        laMarge= win.pnl.sliderCtrl.value;
        GetResolution()
        win.resolText.text = "Résolution du document : " + Math.round(laResolution) + " DPI";
	};
	
    win.pnlSpec.HautEt.onChange = function() 
	{
        leFormat[1] = win.pnlSpec.HautEt.text;
        leFormat[2] = win.pnlSpec.LargeEt.text;
        win.sDescText.text = leFormat[1] + " * " + leFormat[2] + "mm";
        GetResolution()
        win.resolText.text = "Résolution du document : " + Math.round(laResolution) + " DPI";
	};
	
    win.pnlSpec.LargeEt.onChange = function() 
	{
        leFormat[1] = win.pnlSpec.HautEt.text;
        leFormat[2] = win.pnlSpec.LargeEt.text;
        win.sDescText.text = leFormat[1] + " * " + leFormat[2] + "mm";
        GetResolution()
        win.resolText.text = "Résolution du document : " + Math.round(laResolution) + " DPI";
	};
	
	// Define behavior for the "Exit" button 
	win.doneButton.onClick = function ()
	{
		win.close();
	};

	// Define behavior for the "Reset" button 
	win.resetButton.onClick = function()
	{ 
		win.pnl.sliderCtrl.value = MargeDef;
        win.pnl.displayLbl.text= MargeDef;
        win.sourceList.selection = FormatDef;
	}

	// Display the window
    win.center()
    win.show();

	return retval;
}

//===============================================//
//                    PROGRAMME PRINCIPAL                                         //
//                    Affiche la boîte de dialogue                                         //
//                    Calcule la taille de la zone 10*15                              //
//                    La place au centre de l'image                                    //
//===============================================//

if(typeof(SnpCreateSlider_unitTest) == "undefined") {
    new SnpCreateSlider().run();
}

// Détermine la résolution nécessaire en DPI    
laResolution = DocActif.width/LargeurTirage;
// Applique cette résolution à l'image
DocActif.resizeImage(undefined, undefined, laResolution, ResampleMethod.NONE);

// Calcule les dimensions en pixels de l'échantillon en fonction de la résolution
if ( DocActif.height > DocActif.width ) {  // vérifie si le document est plus haut que large
    LargeurExtrait = (95.6*laResolution/25.4);
    HauteurExtrait = (143.4*laResolution/25.4);
    }
    else {
        HauteurExtrait = (95.6*laResolution/25.4);
        LargeurExtrait = (143.4*laResolution/25.4);
        }
// Sélectionne l'échantillon au centre de l'image
var selRegion = Array( // On va dessiner une aire de 4 points
    Array((DocActif.width-LargeurExtrait)/2,(DocActif.height-HauteurExtrait)/2 ),         
    Array(((DocActif.width-LargeurExtrait)/2)+LargeurExtrait,(DocActif.height-HauteurExtrait)/2),      
    Array(((DocActif.width-LargeurExtrait)/2)+LargeurExtrait, (DocActif.height-HauteurExtrait)/2+HauteurExtrait),
    Array((DocActif.width-LargeurExtrait)/2, (DocActif.height-HauteurExtrait)/2+HauteurExtrait));
DocActif.selection.select(selRegion,SelectionType.REPLACE)

alert ("Déplacer la zone avec l'outil Sélection\npuis couper avec la commande\nMenu-Image-Recadrer","Echantillon 95,6*14,34mm prêt")

//===============================================//
//                    Le programme est accompli.                                     //
//                    L'utilisateur va pouvoir                                                 //
//                    sélectionner la zone de l'échantillon,                       //
//                    la découper et l'imprimer                                            //
//===============================================//


}
catch(oErreur)
{
	//Une erreur est survenue...
	alert(oErreur.description)
}
  
// Remise en place des unités de mesure initiales
preferences.rulerUnits = oRulerUnits;
preferences.typeUnits = oTypeUnits;


////////// FIN DU SCRIPT ///////////////////////////////////////////////////