/**
 * @author Khalid Alharbi
 */
package org.sikuli.slides.utils;

import java.io.File;

/**
 * This class contains constants.
 */
public class Constants {
	/**
	 * The working directory absolute path. 
	 * This holds the sikuli slides working directory in the operating system's temp directory. 
	 */
	public static String workingDirectoryPath;
	/**
	 * The current project directory name that contains the imported and extracted .pptx file. 
	 */
	public static String projectDirectory;
	/**
	 * The relative directory path to the embedding resources icons for the GUIs.
	 */
	public static final String RESOURCES_ICON_DIR="/org/sikuli/slides/gui/icons/";
	/**
	 * The name of the directory that sikuli-slides creates in the operating system's tmp directory.
	 */
	public static final String SIKULI_SLIDES_ROOT_DIRECTORY="org.sikuli.SikuliSlides";
	/**
	 * The name of the directory that contains all sikuli related files in the .pptx file.
	 */
	public static final String SIKULI_DIRECTORY=File.separator+"sikuli";
	/**
	 * The name of the images directory that contains the cropped target images.
	 */
	public static final String IMAGES_DIRECTORY=File.separator+"images";
	/**
	 * The slides directory that contains the XML files for each slide in the .pptx file.
	 */
	public static final String SLIDES_DIRECTORY=File.separator+"ppt"+File.separator+"slides";
	/**
	 * The slides directory that contains the media files for each slide in the .pptx file.
	 */
	public static final String MEDIA_DIRECTORY=File.separator+"ppt"+File.separator+"media";
	/**
	 * The slides directory that contains the slide notes.
	 */
	public static final String SLIDE_NOTES_DIRECTORY=File.separator+"ppt"+File.separator+"notesSlides";
	/**
	 * The presentaion.xml absolute path name. 
	 */
	public static final String PRESENTATION_DIRECTORY=File.separator+"ppt"+File.separator+"presentation.xml";
	/**
	 * The relationship directory that contains info about the duplicated media files in the presentation slides.
	 */
	public static final String RELATIONSHIP_DIRECTORY=File.separator+"ppt"+File.separator+"slides"+File.separator+"_rels";
	/**
	 * The key name for maximum wait time to find target on the screen.
	 */
	public static final String MAX_WAIT_TIME_MS = "max_wait_time_ms";
	/**
	 * The default key value for maximum wait time in milliseconds to find target on the screen. 
	 */
	public static int MAX_WAIT_TIME_MS_DEFAULT = 15000;
	/**
	 *  The key name for the time to display a label on the screen.
	 */
	public static final String LABEL_DISPLAY_TIME_SEC = "label_display_time_sec";
	/**
	 *  The default key value for the time, in seconds, to display a label on the screen.
	 */
	public static final int LABEL_DISPLAY_TIME_SEC_DEFAULT = 3;
	/**
	 *  The key name for the instruction hint (tooltip) font size.
	 */
	public static final String INSTRUCTION_HINT_FONT_SIZE="instruction_hint_font_size";
	/**
	 *  The default key value of the instruction hint (tooltip) font size.
	 */
	public static int INSTRUCTION_HINT_FONT_SIZE_DEFAULT=18;
	/**
	 *  The key name for the canvas width size.
	 */
	public static final String CANVAS_WIDTH_SIZE="canvas_width_size";
	/**
	 *  The default key value of the canvas width size.
	 */
	public static int CANVAS_WIDTH_SIZE_DEFAULT=5;
	
	/**
	 * Screen id. Use this constant to run the test on a secondary monitor, 
	 * 0 means the default monitor and 1 means the secondary monitor.
	 */
	public static int ScreenId=0;
	/**
	 * This control how fuzzy the image search is. A value of 1 means the search
	 * is very precise and less fuzzy
	 */
	public static double MinScore=0.7;
	/**
	 * Flag for the old syntax. Prior to version 1.2.0, we use special shapes to represent each action.
	 */
	public static boolean UseOldSyntax=false;
	/**
	 * Desktop input events
	 */
	public enum DesktopEvent {
		LEFT_CLICK, RIGHT_CLICK, DOUBLE_CLICK, DRAG_N_DROP, KEYBOARD_TYPING, LAUNCH_BROWSER, 
		EXIST, NOT_EXIST, WAIT
	}
	/**
	 * Running modes
	 */
	public static boolean ACTION_MODE=false;
	public static boolean HELP_MODE=false;
	public static boolean TUTORIAL_MODE=false;
	public static boolean DEVELOPMENT_MODE=false;
	/**
	 * Execution start time in milliseconds.
	 */
	public static long Execution_Start_Time;
	/**
	 * Tutorial mode previous step.
	 */
	public static boolean IsPreviousStep=false;
	/**
	 * Tutorial mode next step.
	 */
	public static boolean IsNextStep=false;
	/**
	 * Wait action.
	 */
	public static boolean IsWaitAction=false;
	/**
	 *  Total steps in the tutorial mode
	 */
	public static int Steps_Total=0;
	/**
	 * Tutorial mode navigation status
	 */
	public enum NavigationStatus {
		NEXT, PREVIOUS
	}
}

@@ -2421,24 +2421,460 @@
 15000;%0A%09/**%0A
+%09 * The key name for the score value that controls how fuzzy the image search is. A value of 1 means the search%0A%09 * is very precise and less fuzzy. This is defined as minscore in the API%0A%09 */%0A%09public static final String PRECISE_SEARCH_SCORE = %22precise_search_score%22;%0A%09/**%0A%09 * The default key value for the score value that controls how fuzzy the image search is%0A%09 */%0A%09public static final double PRECISE_SEARCH_SCORE_DEFAULT = 0.7;%0A%09/**%0A
 %09 *  The key
@@ -3893,167 +3893,8 @@
 /**%0A
-%09 * This control how fuzzy the image search is. A value of 1 means the search%0A%09 * is very precise and less fuzzy%0A%09 */%0A%09public static double MinScore=0.7;%0A%09/**%0A
 %09 * 

add fuzziness control preferences keys