corz.org uses cookies to remember that you've seen this notice explaining that corz.org uses cookies, okay!
	
	
		
		global $cpc_my_version = "1.8.1"
    corz color pickin chooser
    a color picker to use on your desktop, or in your AutoIt applications.
    for information, see here..
        http:
    have fun!
    
    If you are compiling this yourself, you need to use "AutoIt Wrapper"
    to add the extra icons. You will also need to use AT LEAST version
    1.9.3 of AutoIt Wrapper for the paths to work correctly. You can
    download it here..
        http:
    © 2007-> Cor @ corz.org 
 
 ; http:
$cpc_stand_alone = true    
    
    
    const $CC_ANYCOLOR = 0x100
    const $CC_FULLOPEN = 0x2
    const $CC_RGBINIT = 0x1
    const $TRAY_CHECKED = 1
    const $TRAY_UNCHECKED = 4
    const $BS_AUTOCHECKBOX = 0x0003
    const $BS_ICON = 0x0040
    const $WS_TABSTOP = 0x00010000
    const $WS_MINIMIZEBOX = 0x00020000
    const $WS_SYSMENU = 0x00080000
    const $WS_SIZEBOX = 0x00040000
    const $ES_MULTILINE = 4
    const $SS_SUNKEN    = 0x1000
    const $SS_LEFTNOWORDWRAP    = 12
    const $GUI_BKCOLOR_TRANSPARENT = -2
    const $GUI_WS_EX_PARENTDRAG = 0x00100000
    const $GUI_DOCKBORDERS = 0x0066
    const $GUI_DOCKLEFT = 0x0002
    const $GUI_DOCKRIGHT = 0x0004
    const $GUI_DOCKBOTTOM = 0x0040
    const $GUI_DOCKWIDTH = 0x0100
    const $GUI_DOCKHEIGHT = 0x0200
    const $GUI_DEFBUTTON = 512
    const $GUI_ONTOP            = 2048
    
    
    
    
    if $cpc_stand_alone then
        const $TRAY_EVENT_PRIMARYDOWN = -7
        const $GUI_EVENT_CLOSE = -3
        const $GUI_EVENT_DROPPED = -13
        const $GUI_CHECKED = 1
        const $GUI_UNCHECKED = 4
        const $GUI_DROPACCEPTED = 8
        const $GUI_FOCUS = 256
        const $CBS_DROPDOWN = 0x0002
        const $CBS_AUTOHSCROLL = 0x0040
        const $CBS_SORT = 0x0100
        const $ES_NUMBER = 8192
        const $WS_VSCROLL = 0x00200000
        const $WS_CAPTION = 0x00C00000
        const $WS_MINIMIZE = 0x20000000
        const $WS_POPUP = 0x80000000
        const $WS_EX_ACCEPTFILES = 0x00000010
        const $WS_EX_TOOLWINDOW = 0x00000080
        const $WS_EX_TOPMOST = 0x00000008
        const $SS_NOTIFY    = 0x0100
        const $BS_CENTER = 0x0300
        const $BS_VCENTER = 0x0C00
        const $BS_PUSHLIKE = 0x1000
        const $TBS_NOTICKS = 0x0010
    endif
if $cpc_stand_alone then
    ce_Singleton("ColorPickinChooser")
    ColorPickinChooser()
    exit
endif
func ColorPickinChooser($set_color="", $scheme="", $autoit_val=false, $func="")
    
    cpc_Setup()
    cpc_InitColorWells()
    if $scheme <> "" then
        if InArray($group_names, $scheme) then
            $cpc_my_group = $scheme
            GUICtrlSetData($combo_custom_groups, $cpc_my_group)
            cpc_LoadColorGroup()
        endif
    endif
    if $set_color <> "" then
        if StringLen($set_color) <> 6 then $set_color = StringRight($set_color, 6)
        $cpc_my_color = $set_color
    endif
    global $do_func = $func
    cpc_UpdateImageContextMenu()
    cpc_SwitchImage($cpc_picker_image)
    
    cpc_UpdateHexOutput($cpc_my_color)
    cpc_AddHex()
    cpc_SetColor(true) 
    local $last_event_mode = AutoItSetOption("GUIOnEventMode", 1)
    local $last_traymenu_mode = AutoItSetOption("TrayMenuMode", 1)
    local $last_trayonevent_mode = AutoItSetOption("TrayOnEventMode", 1)
    
    corz_GUIAnimateOpen($gui_color, $cpc_gui_fx)
    cpc_ToggleOnTopWin(true)
    cpc_ToggleOnTopWin(true)
    cpc_ToggleLiveTitleBar(true)
    cpc_ToggleLiveTitleBar(true)
    if $cpc_stand_alone then
        cpc_ToggleDoneQuits(true)
        cpc_ToggleDoneQuits(true)
    endif
    cpc_LoadMag()
    GUICtrlSetState($combo_custom_groups, $GUI_FOCUS)
    $color_set = 0
    global $do_quit = false
    global $cpc_killed = false
    global $super_mag = false
    $left_window = false
    
    if $cpc_no_tips = $GUI_UNCHECKED or ce_IsPressed(10) then
        cpc_HotKeyShowTips()
    endif
    
    
    while not $do_quit
        if $do_func <> "" then
            Call($do_func)
        endif
        sleep(75)
        local $mouse_info = GUIGetCursorInfo() 
        
        if $mouse_info = 0 then
            $left_window = true
            cpc_UnSetHotKeys()
        else
            cpc_SetHotKeys()
            if $super_mag and $left_window = true then 
                cpc_SwitchOffSuperMag()
            endif
            $left_window = false
        endif
        if not IsArray($mouse_info) then continueloop 
        local $MousePos = MouseGetPos()
        if not IsArray($MousePos) then continueloop
        
        if $mouse_info[4] = $pic_color_picker or $mouse_info[4] >= $info_dummy then
            if $mouse_info[4] = $info_dummy or $mouse_info[4] = $label_colorwell then
                GUISetCursor(9, 1, $gui_color)    
                continueloop                    
            endif
            GUISetCursor(3, 1, $gui_color) 
            $cpc_live_color = StringRight(Hex(PixelGetColor($MousePos[0],$MousePos[1])), 6)
            cpc_UpdateLiveColorBox()
            
            if $live_luminance = $GUI_CHECKED or ce_IsPressed(01) then cpc_UpdateLumGrad($cpc_live_color)
            if $live_mag = $GUI_CHECKED or ce_IsPressed(01) then cpc_UpdateMag()
            if $live_hex = $GUI_CHECKED then
                if ce_IsPressed(10) then
                    ToolTip(ConvertColorValue($cpc_live_color, $cpc_output_mode, $add_prefix), $MousePos[0]+2, $MousePos[1]+2)
                else
                    ToolTip($cpc_live_color, $MousePos[0]+2, $MousePos[1]+2)
                endif
            endif
            $color_set = 1
        elseif $super_mag then
            cpc_UpdateMag()
            GUISetCursor(3, 1, $gui_color)
        else 
            GUISetCursor()
            ToolTip ("")
            if $color_set = 1 then
                if $hold_live_color = $GUI_UNCHECKED then
                    GUICtrlSetBkColor($label_live_color, "0x" & $cpc_my_color)
                    if $live_luminance = $GUI_CHECKED then cpc_UpdateLumGrad($cpc_my_color)
                endif
                $color_set = 0
            endif
        endif
    wend
    
    cpc_KillWindow()
    AutoItSetOption("GUIOnEventMode", $last_event_mode)
    AutoItSetOption("TrayMenuMode", $last_traymenu_mode)
    AutoItSetOption("TrayOnEventMode", $last_trayonevent_mode)
    $return_val = $cpc_my_color
    
    if $cpc_killed then $return_val = $set_color
    if $autoit_val then
        return '0x' & $return_val
    else
        return $return_val
    endif
endfunc
func cpc_Setup()
    global $cpc_my_name = "color pickin chooser"
    global $cpc_data_parent = @AppDataDir & "\corz\" & $cpc_my_name
    global $cpc_ini_path = $cpc_data_parent & "\" & $cpc_my_name & ".ini"
    global $colors_ini_path = $cpc_data_parent & "\custom colors.ini"
    global $default_picker_img_dir = $cpc_data_parent & "\picker images"
    global $picker_img_dir = IniRead($cpc_ini_path, $cpc_my_name, "picker_images_folder", $default_picker_img_dir)
    global $previous_combo_groups[501] = [500] 
    global $ini_process = false
    global $group_process = false
    global $no_colorwells = 64 
    global $sort_flags[11] = [10]
    if not FileExists($picker_img_dir) then DirCreate($picker_img_dir)
    
    if $picker_img_dir = $default_picker_img_dir then cpc_InstallSampleImages()
    
    global $tips_file = $cpc_data_parent & "\tips.txt"
    
    FileInstall(".\stuff\tips.txt", $tips_file, 0)
    global $cpc_no_tips = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "no_tips", $GUI_UNCHECKED)
    global $cpc_live_color, $red_index, $green_index, $blue_index
    global $cpc_my_color = IniRead($cpc_ini_path, $cpc_my_name, "my_color", "FF50A3")
    global $cpc_my_group = IniRead($cpc_ini_path, $cpc_my_name, "my_group", "empty")
    global $current_group_index, $cpc_previous_mode
    global $cpc_picker_image = IniRead($cpc_ini_path, $cpc_my_name, "picker_image", $picker_img_dir & "\Spectrums\Spectrum.jpg")
    global $cpc_last_mag = IniRead($cpc_ini_path, $cpc_my_name, "last_mag", "0|0")
    global $live_luminance = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "live_luminance", $GUI_UNCHECKED)
    global $live_hex = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "live_hex", $GUI_UNCHECKED)
    global $live_mag = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "live_mag", $GUI_UNCHECKED)
    global $hold_live_color = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "hold_live_color", $GUI_UNCHECKED)
    global $cpc_auto_copy = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "auto_copy", $GUI_UNCHECKED)
    global $cpc_on_top = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "always_on_top", $GUI_CHECKED)
    global $cpc_live_titlebar = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "colors_in_titlebar", $GUI_UNCHECKED)
    global $cpc_output_mode = IniRead($cpc_ini_path, $cpc_my_name, "output_mode", "Web Hex")
    global $cpc_output_modes[9] = [    "Web Hex", _        
                                    "Autoit RGB Hex", _    
                                    "Autoit BGR Hex", _    
                                    "Visual C++ Hex", _ 
                                    "Delphi Hex", _        
                                    "RGB Integer", _
                                    "RGB Float", _
                                    "HSL", _
                                    "CMYK" ]
    global $cpc_menu_output_modes[uBound($cpc_output_modes)]
    global $add_prefix = IniReadCheckBoxValue($cpc_ini_path, $cpc_my_name, "add_prefix", $GUI_UNCHECKED)
    global $gui_fx = IniRead($cpc_ini_path, $cpc_my_name, "gui_fx", "Slide Right")
    global $cpc_gui_fx = corz_GUIGetFX($gui_fx, $cpc_ini_path, $cpc_my_name)
    global $done_quits = IniReadCheckboxValue($cpc_ini_path, $cpc_my_name, "done_quits", $GUI_UNCHECKED)
    global $dont_pop_up_comments = IniReadCheckBoxValue($cpc_ini_path, $cpc_my_name, "dont_pop_up_comments", $GUI_UNCHECKED)
    global $cpc_width = 395
    global $cpc_height = 215
    global $cpc_x = IniRead($cpc_ini_path, $cpc_my_name, "x", @DesktopWidth-$cpc_width-16)    
    global $cpc_y = IniRead($cpc_ini_path, $cpc_my_name, "y",  26)                            
    global $cpc_picker_size = 150
    global $cpc_mag_top = $cpc_picker_size + 10
    global $cpc_lum_width = 16
    global $cpc_lum_height = $cpc_picker_size
    global $cpc_grad_step = $cpc_lum_height / 2
    global $cpc_uncheck_img_idx
    global $cpc_current_img_idx
    cpc_MakeGUI()
endfunc
func cpc_MakeGUI()
    
    
    local $last_coord_mode = AutoItSetOption("GUICoordMode", 0)
    global $dummy_container = GUICreate(-1,-1,-1,-1,-1, $WS_EX_TOOLWINDOW) 
    global $gui_color = GUICreate($cpc_my_name & "..", $cpc_width , $cpc_height , $cpc_x , $cpc_y, _
            BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_ACCEPTFILES, $dummy_container)
    if not $cpc_stand_alone then GuiSetIcon(@ScriptFullPath, 6) ; set correct icon (see 
    
    GUISetOnEvent($GUI_EVENT_CLOSE, "cpc_ExitDoQuit", $gui_color)
    GUISetOnEvent($GUI_EVENT_DROPPED, "cpc_GetDroppedItem", $gui_color)
    global $pic_color_picker = GUICtrlCreatePic("", 6, 6, $cpc_picker_size , $cpc_picker_size)
    GUICtrlSetOnEvent(-1, "cpc_ClickMouseSetColor")
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    
    global $check_lumlive = GUICtrlCreateCheckbox("", $cpc_picker_size+5, $cpc_lum_height+5, 15, 15, _
                        BitOr($BS_AUTOCHECKBOX, $BS_PUSHLIKE, $BS_ICON, $BS_VCENTER, $BS_CENTER))
    GUICtrlSetOnEvent(-1, "cpc_ToggleLiveLum")
    GUICtrlSetTip(-1, " click this switch to toggle the live luminance gradient  [F5]")
    GUICtrlSetState(-1, $live_luminance)
    if @compiled then
        GUICtrlSetImage(-1, @ScriptFullPath, -4, 0)
    else
        GUICtrlSetImage(-1, ".\img\icons\grad.ico", -1, 0)
    endif
    global $check_maglive = GUICtrlCreateCheckbox("", 0, 17, 15, 15, _
        BitOr($BS_AUTOCHECKBOX, $BS_PUSHLIKE, $BS_ICON, $BS_VCENTER, $BS_CENTER))
    GUICtrlSetOnEvent(-1, "cpc_ToggleLiveMag")
    GUICtrlSetTip(-1, " click this switch to toggle the live magnifier (it will revert once you select an area)  [F6] " _
            & @CRLF & " [ shift-click for super-mag ] ")
    GUICtrlSetState(-1, $live_mag)
    if @compiled then
        GUICtrlSetImage(-1, @ScriptFullPath, -5, 0)
    else
        GUICtrlSetImage(-1, ".\img\icons\mag.ico", -1, 0)
    endif
    global $check_hexlive = GUICtrlCreateCheckbox(", 0, 17, 15, 15, _
        BitOr($BS_AUTOCHECKBOX, $BS_PUSHLIKE, $BS_ICON, $BS_VCENTER, $BS_CENTER))
    GUICtrlSetOnEvent(-1, "cpc_ToggleLiveHex")
    GUICtrlSetTip(-1, " click this switch to toggle the live hex color readout tip  [F7] " & @CRLF & _
                        " while running, hold down the SHIFT key to see the converted output")
    GUICtrlSetState(-1, $live_hex)
    if @compiled then
        GUICtrlSetImage(-1, @ScriptFullPath, -6, 0)
    else
        GUICtrlSetImage(-1, ".\img\icons\hex.ico", -1, 0)
    endif
    GUISetCoord(5, $cpc_mag_top)
    global $label_live_color = GUICtrlCreateLabel("", $cpc_picker_size/3, 0, $cpc_picker_size/3, $cpc_picker_size/3)
    GUICtrlSetOnEvent(-1, "cpc_ToggleLiveColorHold")
    GUICtrlSetTip(-1, " this is the current live color " & @CRLF & _
                      " [as well as a readout, you can click it to toggle the live color hold] ")
    global $label_my_color = GUICtrlCreateLabel("", $cpc_picker_size/3, 0, $cpc_picker_size/3, $cpc_picker_size/3)
    GUICtrlSetOnEvent(-1, "cpc_AddMyColor")
    GUICtrlSetTip(-1, " your currently selected color, aka 'my color' " & @CRLF & _
                      " [click this box (or press F2) to add this color to the end of your current color group] ")
    GUISetCoord(184, 10)
    global $cpc_label_red = GUICtrlCreateLabel("Red: ", 0, 3, 32, 20, -1, $GUI_WS_EX_PARENTDRAG)
    global $cpc_input_red = GUICtrlCreateInput(" ", 40, -4, 32, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "cpc_AddRed")
    GUICtrlSetTip(-1, " red input/output. here you can enter a decimal value for red (0-255) ")
    global $cpc_label_green = GUICtrlCreateLabel("Green: ", -40, 47, 32, 20, -1, $GUI_WS_EX_PARENTDRAG)
    global $cpc_input_green = GUICtrlCreateInput(" ", 40, -4, 32, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "cpc_AddGreen")
    GUICtrlSetTip(-1, " green input/output. here you can enter a decimal value for green (0-255) ")
    global $cpc_label_blue = GUICtrlCreateLabel("Blue: ", -40, 47, 32, 20, -1, $GUI_WS_EX_PARENTDRAG)
    global $cpc_input_blue = GUICtrlCreateInput(" ", 40, -4, 32, 20, $ES_NUMBER)
    GUICtrlSetOnEvent(-1, "cpc_AddBlue")
    GUICtrlSetTip(-1, " blue input/output. here you can enter a decimal value for blue (0-255) ")
    global $cpc_slider_red = GUICtrlCreateSlider( -40, -65, 85 , 20 , BitOr($TBS_NOTICKS, $WS_TABSTOP))
    GUICtrlSetOnEvent(-1, "cpc_SlideRed")
    GUICtrlSetLimit (-1, 255, 0)
    GUICtrlSetTip(-1, " red slider. slide it up and down to chage the red value (0-255) ")
    global $cpc_slider_green = GUICtrlCreateSlider( 0, 43, 85 , 20 , BitOr($TBS_NOTICKS, $WS_TABSTOP))
    GUICtrlSetOnEvent(-1, "cpc_Slidegreen")
    GUICtrlSetLimit (-1, 255, 0)
    GUICtrlSetTip(-1, " green slider. sliding it chages the green value (0-255) ")
    global $cpc_slider_blue = GUICtrlCreateSlider( 0, 43, 85 , 20 , BitOr($TBS_NOTICKS, $WS_TABSTOP))
    GUICtrlSetOnEvent(-1, "cpc_Slideblue")
    GUICtrlSetLimit (-1, 255, 0)
    GUICtrlSetTip(-1, " blue slider. give it a slide to chage the blue value (0-255) ")
    global $label_hex_in_out = GUICtrlCreateLabel("Hex: ", 0, 28, 32, 20, -1, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetTip(-1, " current output: " & ConvertColorValue($cpc_my_color, $cpc_output_mode, $add_prefix) _
            & @CRLF & " right-click me for a menu of various clipboard output formats ")
    global $input_hex_in_out = GUICtrlCreateInput("", 27, -3, 53, 20)
    GUICtrlSetOnEvent(-1, "cpc_AddHex")
    GUICtrlSetData(-1, $cpc_my_color)
    GUICtrlSetTip(-1, " RGB hex input/output. here you can enter a standard RGB hex color value, eg. 'FF00FF' " & @CRLF & _
                      " (note: you can copy to the clipboard in a number of formats)
    global $check_autocopy = GUICtrlCreateCheckbox("auto", -27, 24, 28, 19, _
        BitOr($BS_AUTOCHECKBOX, $BS_PUSHLIKE, $BS_VCENTER, $BS_CENTER))
    GUICtrlSetOnEvent(-1, "cpc_ToggleAutoCopy")
    GUICtrlSetTip(-1, " click this switch to automatically copy the " & $cpc_output_mode & " value of all selected colors to the clipboard, or not  [F3] ")
    GUICtrlSetState(-1, $cpc_auto_copy)
    global $check_special_clip_copy = GUICtrlCreateCheckbox("copy hex", 28, 0, 50, 19, _
                                        BitOr($BS_AUTOCHECKBOX, $BS_PUSHLIKE, $BS_VCENTER, $BS_CENTER))
    GUICtrlSetOnEvent(-1, "cpc_ButtCopyColor")
    GUICtrlSetTip(-1, " click this button to copy the " & $cpc_output_mode &" value to the clipboard  [F4] ")
    if $cpc_auto_copy = $GUI_CHECKED then GUICtrlSetState(-1, $GUI_CHECKED)
    
    GUISetCoord($cpc_width-44, $cpc_height-25)
    $butt_all_done = GUICtrlCreateButton( "&done!", 0, 0, 40, 20 )
    GUICtrlSetOnEvent(-1, "cpc_Done")
    GUISetCoord(269, 8)
    
    global $combo_custom_groups = GUICtrlCreateCombo( "", 0, 0, 86, 18, BitOR($CBS_SORT, $CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    GUICtrlSetOnEvent(-1, "cpc_LoadColorGroup")
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetTip(-1, " your color groups " & @CRLF & _
        " you can drag palettes and ini files (even folders of ini files) into here (and the picker image) to import their colors ")
    global $butt_delete_group = GUICtrlCreateButton("-", 88, 1, 16, 18)
    GUICtrlSetOnEvent(-1, "cpc_DeleteColorGroup")
    GUICtrlSetTip(-1, " remove this color group ")
    GUICtrlSetFont(-1, Default , 800)
    global $butt_add_group = GUICtrlCreateButton("+", 18, 0, 16, 18)
    GUICtrlSetOnEvent(-1, "cpc_AddColorGroup")
    GUICtrlSetTip(-1, " add a new color group ")
    
    
    GUISetCoord(374, 17)
    global $custom_color_box[$no_colorwells+1] = [$no_colorwells] 
    $box = 1
    for $i = 1 to 8 
        
        
        $custom_color_box[$box] = GUICtrlCreateLabel("", -105, 16, 16, 17, BitOr($SS_NOTIFY, $SS_SUNKEN))
        GUICtrlSetOnEvent(-1, "cpc_SelectColorWell") 
        GUICtrlSetBkColor(-1, Default)                 
        $box += 1                                     
        for $t = 1 to 7 
            $custom_color_box[$box] = GUICtrlCreateLabel("", 15, 0, 16, 17, BitOr($SS_NOTIFY, $SS_SUNKEN))
            GUICtrlSetOnEvent(-1, "cpc_SelectColorWell")
            GUICtrlSetBkColor(-1, Default)
            $box += 1
        next
    next
    global $input_color_name = GUICtrlCreateInput("", -106, 20, 122, 20)
    GUICtrlSetTip(-1, " the color name input. enter something here to save a color by that name. " & @CRLF & _
                      " to rename a color: click it, type a new name, click it again (or hit F2/Enter) ")
    
    
    global $info_dummy = GUICtrlCreateLabel("", -83, 21, 164, 30, -1, $GUI_WS_EX_PARENTDRAG)
    global $label_colorwell = GUICtrlCreateLabel("", 0, 9, 164, 15, $SS_LEFTNOWORDWRAP, $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetTip(-1, " information appears here. you can click and drag the window around from here, too ")
    GUICtrlSetFont(-1, 7, 200)
    
    
    AutoItSetOption("GUICoordMode", 1)
    $count = 0
    global $mag_x = 5
    $mag_size = 5
    global $mag_block[200] 
    global $mag_save_blocks[200] = [100]
    for $iterX = 0 to 49 step $mag_size
        for $iterY = 0 to 49 step $mag_size
            $mag_block[$count] = GUICtrlCreateLabel("", $iterX+$mag_x, $iterY+$cpc_mag_top, $mag_size, $mag_size)
            GUICtrlSetOnEvent(-1, "cpc_ClickMouseSetColor") 
            GUICtrlSetBkColor(-1, Default)
            GUICtrlSetTip(-1, "the magnifier area, aka. 'mag box'. you can magnify this, too ")
            $count += 1
        next
    next
    
    
    global $grad_bars[151] = [150]
    for $bar = 1 to 150
        $grad_bars[$bar] = GuiCtrlCreateLabel("", $cpc_picker_size+10, 4 + $bar, $cpc_lum_width, 1)
        GUICtrlSetOnEvent(-1, "cpc_ClickMouseSetColor")
    next
    
    
    
    global $cpc_MenuHex = GUICtrlCreateContextMenu($label_hex_in_out)
    GUICtrlCreateMenuitem("Clipboard Copy Modes..", $cpc_MenuHex)
    GUICtrlCreateMenuitem("", $cpc_MenuHex)
        for $i = 0 to uBound($cpc_output_modes)-1
            $cpc_menu_output_modes[$i] = GUICtrlCreateMenuitem($cpc_output_modes[$i], $cpc_MenuHex)
            GUICtrlSetOnEvent(-1, "cpc_SwitchMode")
            if $cpc_output_modes[$i] = $cpc_output_mode then
                GUICtrlSetState($cpc_menu_output_modes[$i], $GUI_CHECKED)
                $cpc_previous_mode = $i
            endif
        next
    GUICtrlCreateMenuitem("", $cpc_MenuHex)
    global $menu_hex_prefix = GUICtrlCreateMenuitem("Add Prefix", $cpc_MenuHex)
    GUICtrlSetOnEvent(-1, "cpc_MenuTogglePrefix")
    GUICtrlSetState(-1, $add_prefix)
    
    for $i = $combo_custom_groups to $butt_add_group
        GUICtrlCreateContextMenu($i)
        GUICtrlCreateMenuitem("Export Color Group..", $i)
        GUICtrlSetOnEvent(-1, "cpc_ExportGroup")
        GUICtrlCreateMenuitem("Export Gimp Palette..", $i)
        GUICtrlSetOnEvent(-1, "cpc_ExportGimpPalette")
        GUICtrlCreateMenuitem("Export JASC Palette..", $i)
        GUICtrlSetOnEvent(-1, "cpc_ExportJASCPalette")
        GUICtrlCreateMenuitem("", $i)
        GUICtrlCreateMenuitem("Sort Colors by Name..    Ctrl + KeyPad 0", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsName")
        GUICtrlCreateMenuitem("", $i)
        GUICtrlCreateMenuitem("Sort Colors by Red..    Ctrl + KeyPad 1", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsRed")
        GUICtrlCreateMenuitem("Sort Colors by Green..    Ctrl + KeyPad 2", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsGreen")
        GUICtrlCreateMenuitem("Sort Colors by Blue..    Ctrl + KeyPad 3", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsBlue")
        GUICtrlCreateMenuitem("", $i)
        GUICtrlCreateMenuitem("Sort Colors by Hue..    Ctrl + KeyPad 4", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsHue")
        GUICtrlCreateMenuitem("Sort Colors by Saturation..    Ctrl + KeyPad 5", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsSat")
        GUICtrlCreateMenuitem("Sort Colors by Lightness..    Ctrl + KeyPad 6", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuSortColorsLum")
        GUICtrlCreateMenuitem("", $i)
        GUICtrlCreateMenuitem("Group notes and comments..    Alt+C", $i)
        GUICtrlSetOnEvent(-1, "cpc_MenuGroupComments")
    next
    
    global $cpc_MenuColorPicker = GUICtrlCreateContextMenu($pic_color_picker)
    
    
    
    if $cpc_stand_alone then
        $TrayItemAbout = TrayCreateItem("About color pickin chooser..")
        TrayItemSetOnEvent(-1, "cpc_DoAbout")
        global $TrayItemDoneQuits= TrayCreateItem("Tips and Tricks..    F1", -1)
        TrayItemSetOnEvent(-1, "cpc_HotKeyShowTips")
        TrayCreateItem("")
        global $TrayItemOpenDataFolder = TrayCreateItem("Open data folder..    F10")
        TrayItemSetOnEvent(-1, "cpc_OpenDataFolder")
        TrayCreateItem("")
        global $TrayItemToggleOnTop= TrayCreateItem("Always on top")
        TrayItemSetOnEvent(-1, "cpc_MenuToggleOnTopWin")
        GUICtrlSetState(-1, $cpc_on_top)
        global $TrayItemLiveTitleBar= TrayCreateItem("Color output in title bar")
        TrayItemSetOnEvent(-1, "cpc_MenuToggleLiveTitleBar")
        GUICtrlSetState(-1, $cpc_live_titlebar)
        TrayCreateItem("")
        global $TrayMenuWinAnim = TrayCreateMenu("Window animation..")
        local $win_anims[11] = ["Slide Left", "Slide Right", "Slide Top", "Slide Bottom", _
                                "Slide Top Left", "Slide Top Right", "Slide Bottom Right", "Slide Bottom Left", _
                                "Explode/Implode", "Fade", "Disable window animation"]
        global $menu_items_win_anim[11]
        for $i = 0 to 10
            $menu_items_win_anim[$i] = TrayCreateItem($win_anims[$i], $TrayMenuWinAnim, -1, 1)
            TrayItemSetOnEvent(-1, "cpc_MenuSetWinAnim")
        next
        for $i in $menu_items_win_anim
            if TrayItemGetText($i) = $gui_fx then TrayItemSetState($i, $TRAY_CHECKED)
        next
        TrayCreateItem("")
        global $TrayItemDoneQuits= TrayCreateItem("'Done!' quits the program", -1)
        TrayItemSetOnEvent(-1, "cpc_MenuToggleDoneQuits")
        GUICtrlSetState(-1, $done_quits)
        TrayCreateItem("")
        $TrayItemExit = TrayCreateItem("Exit    (Esc)", -1)
        TrayItemSetOnEvent(-1, "cpc_ExitDoQuit")
        TraySetToolTip (" left-click to toggle the color pickin chooser   [Ctrl+F1]" & _
                                            @CRLF & " right-click to bring up the menu ")
        TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "cpc_ToggleWindow")
        TraySetState()
        TraySetClick(8) 
    endif
    AutoItSetOption("GUICoordMode", $last_coord_mode)
endfunc
func cpc_MenuSetWinAnim()
    $cpc_gui_fx = corz_GUIGetFX(TrayItemGetText(@TRAY_ID), $cpc_ini_path, $cpc_my_name)
    
endfunc
func cpc_HotKeyShowTips()
    if $tips_live then return 
    cpc_DialogOpen()
    corz_TipsSystem($tips_file, $gui_color, $cpc_ini_path, $cpc_my_name, "color pickin tips", "", "", $do_func)
    cpc_DialogClose()
endfunc
func cpc_ClickMouseSetColor()
    cpc_MouseSetColor()
    if $live_mag = $GUI_CHECKED then cpc_UnliveMag()
    cpc_UpdateMag()
endfunc
func cpc_MouseSetColor()
    $mouse_info = GUIGetCursorInfo()
    if not IsArray($mouse_info) then return
    if $mouse_info[4] = $pic_color_picker or $mouse_info[4] >= $mag_block[0] then
        cpc_SetColor()
        
        if ce_IsPressed(10) then cpc_AddNewColor($cpc_my_color, GUICtrlRead($input_color_name))
        if ($mouse_info[4] >= $grad_bars[1] and $mouse_info[4] < $grad_bars[150]) _
            and $live_mag = $GUI_CHECKED then cpc_UnliveMag()
    endif
endfunc
func cpc_SetColor($first=false)
    if cpc_MakeNewColor($first) then
        cpc_UpdateInputs()
        cpc_UpdateLiveColorBox()
    endif
endfunc
func cpc_MakeNewColor($first=false)
    if $first = false and $cpc_my_color = $cpc_live_color then return 0
    cpc_MakeRGBFromCurrentColor()
    $cpc_my_color = $cpc_live_color
    if $cpc_auto_copy = $GUI_CHECKED then cpc_ClipCopyHex($cpc_my_color)
    return 1
endfunc
func cpc_SlideRed()
    $red_index = Hex(GUICtrlRead($cpc_slider_red), 2)
    cpc_Update()
endfunc
func cpc_Slidegreen()
    $green_index = Hex(GUICtrlRead($cpc_slider_green), 2)
    cpc_Update()
endfunc
func cpc_Slideblue()
    $blue_index = Hex(GUICtrlRead($cpc_slider_blue), 2)
    cpc_Update()
endfunc
func cpc_AddRed()
    $red_index = Hex(GUICtrlRead($cpc_input_red), 2)
    cpc_Update()
endfunc
func cpc_AddGreen()
    $green_index = Hex(GUICtrlRead($cpc_input_green), 2)
    cpc_Update()
endfunc
func cpc_AddBlue()
    $blue_index = Hex(GUICtrlRead($cpc_input_blue), 2)
    cpc_Update()
endfunc
func cpc_AddHex()
    if cpc_CheckBigHex(GUICtrlRead($input_hex_in_out)) then
        cpc_MakeRGBFromHex()
        cpc_Update()
    else
        cpc_UpdateHexOutput($cpc_my_color)
    endif
endfunc
func cpc_MakeRGBFromHex()
    $red_index = StringLeft(GUICtrlRead($input_hex_in_out), 2)
    $green_index = StringMid(GUICtrlRead($input_hex_in_out), 3, 2)
    $blue_index = StringRight(GUICtrlRead($input_hex_in_out), 2)
endfunc
func cpc_MakeColorFromRGB()
    $cpc_live_color = $red_index & $green_index & $blue_index
endfunc
func cpc_MakeRGBFromCurrentColor()
    $red_index = StringLeft($cpc_live_color, 2)
    $green_index = StringMid($cpc_live_color, 3, 2)
    $blue_index = StringRight($cpc_live_color, 2)
endfunc
func cpc_Update()
        cpc_MakeColorFromRGB()
        if cpc_MakeNewColor() then
            cpc_UpdateInputs()
            cpc_UpdateLiveColorBox()
        endif
endfunc
func cpc_UpdateInputs()
    
    
    GUICtrlSetData($cpc_slider_red, Dec($red_index))
    GUICtrlSetData($cpc_slider_green, Dec($green_index))
    GUICtrlSetData($cpc_slider_blue, Dec($blue_index))
    GUICtrlSetData($cpc_input_red, Dec($red_index))
    GUICtrlSetData($cpc_input_green, Dec($green_index))
    GUICtrlSetData($cpc_input_blue, Dec($blue_index))
    cpc_UpdateHexOutput($cpc_my_color)
    GUICtrlSetBkColor($label_my_color, "0x" & $cpc_my_color)
    cpc_UpdateLumGrad($cpc_my_color)
endfunc
func cpc_UpdateHexOutput($web_hex)
    GUICtrlSetData($input_hex_in_out, $web_hex)
    $c_color = ConvertColorValue($web_hex, $cpc_output_mode, $add_prefix)
    if $cpc_live_titlebar = $GUI_CHECKED then _
        WinSetTitle($gui_color, "", "color pickin chooser..     " & $cpc_output_mode & ": " & $c_color & "" )
    GUICtrlSetTip($label_hex_in_out, " current output: " & $c_color & @CRLF & _
                                    " right-click me for a menu of various clipboard output formats ")
endfunc
func cpc_UpdateLiveColorBox()
    GUICtrlSetBkColor($label_live_color, "0x" & $cpc_live_color)
endfunc
func cpc_UpdateLumGrad($target_color)
    $target_color = "0x" & $target_color
    GUICtrlSetBkColor($grad_bars[1], 0xFFFFFF) 
    for $i = 2 to $cpc_grad_step
        $color_str = cpc_MakeGradLineColors(0xFFFFFF, $target_color, $i)
        GUICtrlSetBkColor($grad_bars[$i], $color_str)
    next
    for $i = 1 to $cpc_grad_step
        $color_str = cpc_MakeGradLineColors($target_color, 0x000000, $i)
        GUICtrlSetBkColor($grad_bars[$cpc_grad_step+$i], $color_str)
    next
endfunc
func cpc_MakeGradLineColors($start_color, $target_color, $i)
    local $g_red = GetColorRed($start_color)
    local $g_green = GetColorGreen($start_color)
    local $g_blue = GetColorBlue($start_color)
    local $g_r_step = (GetColorRed($target_color) - $g_red) / $cpc_grad_step
    local $g_g_step = (GetColorGreen($target_color) - $g_green) / $cpc_grad_step
    local $g_b_step = (GetColorBlue($target_color) - $g_blue) / $cpc_grad_step
    return "0x" & StringFormat("%02X%02X%02X", $g_red + $g_r_step * $i, $g_green + $g_g_step * $i, $g_blue + $g_b_step * $i)
endfunc
func cpc_UpdateMag($firstrun=false)
    if $firstrun then
        if $cpc_last_mag then
            
            
            
            
            
            $mag_xy = StringSplit($cpc_last_mag, "|")
            local $MousePos[2] = [$mag_xy[1], $mag_xy[2]] 
        else
            return
        endif
    else
        $MousePos = MouseGetPos()
        if IsArray($MousePos) then $cpc_last_mag = $MousePos[0] & "|" & $MousePos[1]
    endif
    $count = 0
    for $iterX = -5 to 4
        for $iterY = -5 to 4
            $mag_save_blocks[$count+1] = PixelGetColor($MousePos[0]+$iterX, $MousePos[1]+$iterY) 
            GUICtrlSetBkColor($mag_block[$count], $mag_save_blocks[$count+1])
            $count += 1
        next
    next
endfunc
func cpc_InstallSampleImages()
    if IniReadCheckBoxValue($cpc_ini_path, $cpc_my_name, "samples_installed", $GUI_UNCHECKED) = $GUI_UNCHECKED then
        if not FileExists($picker_img_dir) then return
        FileInstall(".\img\picker images\Homer X-Ray.jpg", $picker_img_dir & "\Homer X-Ray.jpg")
        FileInstall(".\img\picker images\New York.jpg", $picker_img_dir & "\New York.jpg")
        FileInstall(".\img\picker images\Biker.jpg", $picker_img_dir & "\Biker.jpg")
        FileInstall(".\img\picker images\Reds.jpg", $picker_img_dir & "\Reds.jpg")
        FileInstall(".\img\picker images\Sarah.jpg", $picker_img_dir & "\Sarah.jpg")
        FileInstall(".\img\picker images\Tropical bed and breakfast.jpg", $picker_img_dir & "\Tropical bed and breakfast.jpg")
        
        FileInstall(".\img\picker images\Shoreline.jpeg", $picker_img_dir & "\Shoreline.jpeg")
        if not FileExists($picker_img_dir & "\Spectrums") then DirCreate($picker_img_dir & "\Spectrums")
        FileInstall(".\img\picker images\Spectrums\Gimp.jpg", $picker_img_dir & "\Spectrums\Gimp.jpg")
        FileInstall(".\img\picker images\Spectrums\Microsoft.jpg", $picker_img_dir & "\Spectrums\Microsoft.jpg")
        FileInstall(".\img\picker images\Spectrums\Spectrum.jpg", $picker_img_dir & "\Spectrums\Spectrum.jpg")
        FileInstall(".\img\picker images\Spectrums\Primary-Secondary.jpg", $picker_img_dir & "\Spectrums\Primary-Secondary.jpg")
        if not FileExists($picker_img_dir & "\Stretchies") then DirCreate($picker_img_dir & "\Stretchies")
        FileInstall(".\img\picker images\Stretchies\Primary Stretchie 1.bmp", $picker_img_dir & "\Stretchies\Primary Stretchie 1.bmp")
        FileInstall(".\img\picker images\Stretchies\Primary Stretchie 2.bmp", $picker_img_dir & "\Stretchies\Primary Stretchie 2.bmp")
        FileInstall(".\img\picker images\Stretchies\Stretchie [blue-green].jpg", $picker_img_dir & "\Stretchies\Stretchie [blue-green].jpg")
        FileInstall(".\img\picker images\Stretchies\Stretchie [red-yellow].jpg", $picker_img_dir & "\Stretchies\Stretchie [red-yellow].jpg")
        FileInstall(".\img\picker images\Stretchies\Stretchie [yellow-green].jpg", $picker_img_dir & "\Stretchies\Stretchie [yellow-green].jpg")
        IniWrite($cpc_ini_path, $cpc_my_name, "samples_installed", 1)
    endif
endfunc
func cpc_ImportImage($some_image)
        $new_image = $picker_img_dir & "\Imported\" & BaseName($some_image)
        $current_picker_images = RecurseDir($picker_img_dir, "*.jpg,*.jpeg,*.gif,*.bmp")
        for $i in $current_picker_images
            if BaseName($i) = BaseName($some_image) and FileGetSize($i) = FileGetSize($some_image) then
                cpc_DoInfo("import failed: image already exists")
                AdlibEnable("cpc_SwitchOffInfo", 4000)
                return
            endif
        next
        FileCopy($some_image, $new_image, 8)
        if FileExists($new_image) then
            cpc_DoInfo("image imported successfully")
            AdlibEnable("cpc_SwitchOffInfo", 4000)
            cpc_UpdateImageContextMenu()
            cpc_SwitchImage($new_image)
        endif
endfunc
func cpc_MenuUpdateImageContextMenu()
    cpc_UpdateImageContextMenu()
    
    
    ControlFocus ($gui_color, "", $pic_color_picker)
    ControlSend($gui_color, "", $pic_color_picker, "{APPSKEY}")
endfunc
func cpc_UpdateImageContextMenu()
        GUICtrlDelete($cpc_MenuColorPicker)
        global $cpc_MenuColorPicker = GUICtrlCreateContextMenu($pic_color_picker)
        global $cpc_picker_images = RecurseDir($picker_img_dir, "*.jpg,*.jpeg,*.gif,*.bmp")
        if IsArray($cpc_picker_images) and FileExists($picker_img_dir) then
            global $img_menu_items[$cpc_picker_images[0]+1]
            $current_picker_path = $picker_img_dir
            for $i = 1 to $cpc_picker_images[0]
                
                if $current_picker_path <> GetParent($cpc_picker_images[$i]) then
                    $current_picker_path = GetParent($cpc_picker_images[$i])
                    GUICtrlCreateMenuItem("", $cpc_MenuColorPicker)
                endif
                if $cpc_picker_images[$i] <> '' then
                    $img_menu_items[$i] = GUICtrlCreateMenuItem(CleanName($cpc_picker_images[$i]), $cpc_MenuColorPicker)
                    GUICtrlSetOnEvent(-1, "cpc_Menucpc_SwitchImage")
                    if $cpc_picker_images[$i] = $cpc_picker_image then
                        $cpc_current_img_idx = $i
                        GUICtrlSetState($img_menu_items[$i], $GUI_CHECKED)
                    endif
                endif
            next
        else
            $img_menu_item = GUICtrlCreateMenuItem("[no images in this folder]", $cpc_MenuColorPicker)
            GUICtrlSetOnEvent(-1, "cpc_NewPickerFolder")
        endif
        GUICtrlCreateMenuitem("", $cpc_MenuColorPicker)
        $MenuSchemePrefs = GUICtrlCreateMenuitem("Open Picker Images Folder..", $cpc_MenuColorPicker)
        GUICtrlSetOnEvent(-1, "cpc_OpenPickersFolder")
        $MenuSchemePrefs = GUICtrlCreateMenuitem("New Picker Images Folder..", $cpc_MenuColorPicker)
        GUICtrlSetOnEvent(-1, "cpc_NewPickerFolder")
        $MenuSchemePrefs = GUICtrlCreateMenuitem("Refresh this menu..    F8", $cpc_MenuColorPicker)
        GUICtrlSetOnEvent(-1, "cpc_MenuUpdateImageContextMenu")
        GUICtrlCreateMenuitem("", $cpc_MenuColorPicker)
        $MenuSchemePrefs = GUICtrlCreateMenuitem("Use System Picker..    F9", $cpc_MenuColorPicker)
        GUICtrlSetOnEvent(-1, "cpc_SystemPicker")
        GUICtrlCreateMenuitem("", $cpc_MenuColorPicker)
        $MenuSchemePrefs = GUICtrlCreateMenuitem("About corz color pickin chooser", $cpc_MenuColorPicker)
        GUICtrlSetOnEvent(-1, "cpc_DoAbout")
        
        $cpc_picker_image = IniRead($cpc_ini_path, $cpc_my_name, "picker_image", $picker_img_dir & "\Spectrums\Spectrum.jpg")
endfunc
func cpc_Menucpc_SwitchImage()
if not IsArray($cpc_picker_images) then return
    for $s = 1 to $cpc_picker_images[0]
        select
            case @GUI_CtrlId = $img_menu_items[$s]
                if ce_IsPressed(10) then 
                    FileRecycle($cpc_picker_images[$s]) 
                    cpc_UpdateImageContextMenu()
                    return
                endif
                $cpc_current_img_idx = $s
                cpc_SwitchImage($cpc_picker_images[$s])
        endselect
    next
endfunc
func cpc_SwitchImage($new_image)
    if FileExists($new_image) then
        GUICtrlSetState($img_menu_items[$cpc_uncheck_img_idx], $GUI_UNCHECKED)
        $cpc_picker_image = $new_image
        for $i = 1 to $cpc_picker_images[0]
            if $cpc_picker_images[$i] = $cpc_picker_image then
                $cpc_current_img_idx = $i
                $cpc_uncheck_img_idx = $i
                GUICtrlSetState($img_menu_items[$i], $GUI_CHECKED)
            endif
        next
        if not ce_IsPressed(11) then GUICtrlSetImage($pic_color_picker, "") 
        GUICtrlSetImage($pic_color_picker, $cpc_picker_image)
        IniWrite($cpc_ini_path, $cpc_my_name, "picker_image", $cpc_picker_image) 
    elseif IsArray($cpc_picker_images) then
        GUICtrlSetImage($pic_color_picker , $cpc_picker_images[1])
    else
        cpc_NewPickerFolder() 
    endif
endfunc
func cpc_OpenPickersFolder()
    ShellExecute ("Explorer.exe", $picker_img_dir)
    WinWaitActive($picker_img_dir, "" , 5)
    
    Send("!vh")
endfunc
func cpc_NewPickerFolder()
    if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 0)
    $new_dir = FileSelectFolder( "Select a folder to use for picker images (subfolders will also be scanned)", _
                                                                                      "" , 6 , $picker_img_dir)
    if $new_dir <> "" then
        $picker_img_dir = $new_dir
        IniWrite($cpc_ini_path, $cpc_my_name, "picker_images_folder", $picker_img_dir)
        cpc_UpdateImageContextMenu()
    endif
    if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 1)
endfunc
func cpc_SwitchMode()
    GUICtrlSetState($cpc_menu_output_modes[$cpc_previous_mode], $GUI_UNCHECKED)
    for $i = 0 to uBound($cpc_output_modes)-1
        select
            case @GUI_CtrlId = $cpc_menu_output_modes[$i]
                $cpc_output_mode = $cpc_output_modes[$i]
                GUICtrlSetState($cpc_menu_output_modes[$i], $GUI_CHECKED)
                GUICtrlSetTip($check_special_clip_copy, " click this button to copy the " & $cpc_output_modes[$i] & _
                                                                                        " value to the clipboard  [F4] ")
                GUICtrlSetTip($check_autocopy, " click this switch to automatically copy the " & $cpc_output_modes[$i] & _
                                                            " value of all selected colors to the clipboard, or not  [F3] ")
                $cpc_previous_mode = $i
                IniWrite($cpc_ini_path, $cpc_my_name, "output_mode", $cpc_output_mode)
        endselect
    next
    if $cpc_auto_copy = $GUI_CHECKED then ControlClick($gui_color, "", $check_special_clip_copy)
    cpc_UpdateHexOutput($cpc_my_color)
endfunc
func cpc_HotAutoKeyCopyHex()
    ControlClick($gui_color, "", $check_autocopy)
endfunc
func cpc_HotKeyCopyHex()
    ControlClick($gui_color, "", $check_special_clip_copy)
endfunc
func cpc_ButtCopyColor()
    cpc_ClipCopyHex(GUICtrlRead($input_hex_in_out))
endfunc
func cpc_ClipCopyHex($color)
    if $color = "" then $color = GUICtrlRead($input_hex_in_out)
    $color = ConvertColorValue($color, $cpc_output_mode, $add_prefix)
    ClipPut($color)
    
    if $cpc_auto_copy = $GUI_UNCHECKED then
        GUICtrlSetState($check_special_clip_copy, $GUI_UNCHECKED)
    else
        GUICtrlSetState($check_special_clip_copy, $GUI_CHECKED)
    endif
endfunc
func cpc_ToggleAutoCopy()
        if $cpc_auto_copy = $GUI_UNCHECKED then
        $cpc_auto_copy = $GUI_CHECKED
        ControlClick($gui_color, "", $check_special_clip_copy)
    else
        $cpc_auto_copy = $GUI_UNCHECKED
        GUICtrlSetState($check_special_clip_copy, $GUI_UNCHECKED)
    endif
    IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "auto_copy", $cpc_auto_copy)
endfunc
func cpc_MenuToggleDoneQuits()
    cpc_ToggleDoneQuits()
endfunc
func cpc_ToggleDoneQuits($flip=0)
    if $done_quits <> $GUI_CHECKED then
        $done_quits = $GUI_CHECKED
    else
        $done_quits = $GUI_UNCHECKED
    endif
    TrayItemSetState($TrayItemDoneQuits, $done_quits)
    if not $flip then IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "done_quits", $done_quits)
endfunc
func cpc_HotKeyToggleLiveLum()
    ControlClick($gui_color, "", $check_lumlive)
endfunc
func cpc_ToggleLiveLum()
    if $live_luminance = $GUI_CHECKED then
        $live_luminance = $GUI_UNCHECKED
    else
        $live_luminance = $GUI_CHECKED
    endif
    IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "live_luminance", $live_luminance)
endfunc
func cpc_HotKeyToggleLiveMag()
    ControlClick($gui_color, "", $check_maglive)
endfunc
func cpc_ToggleLiveMag()
    select
        
        case ce_IsPressed(10)
            cpc_GetXYPrefs(1)
            ToolTip(" click somewhere to grab that region " & @CRLF & _
                    " or even right-click, if it's an active thing ", $cpc_x, $cpc_y, "super mag activated", 1)
            AdlibEnable("cpc_SwitchOffInfo", 4000)
            $super_mag = true
            GUISetCursor(3, 1, $gui_color) 
            $live_mag = $GUI_CHECKED
            GUICTrlSetState($check_maglive, $GUI_CHECKED)
        case $live_mag = $GUI_CHECKED
            $live_mag = $GUI_UNCHECKED
            if $super_mag = true then
                $super_mag = false
                GUISetCursor()
            endif
        case $live_mag = $GUI_UNCHECKED
            $live_mag = $GUI_CHECKED
    endselect
    IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "live_mag", $live_mag)
endfunc
func cpc_UnliveMag()
    $live_mag = $GUI_UNCHECKED
    GUICtrlSetState($check_maglive, $GUI_UNCHECKED)
    
    
    
    
endfunc
func cpc_SwitchOffSuperMag()
    cpc_UnliveMag()
    $super_mag = false
endfunc
func cpc_HotKeyToggleLiveHex()
    ControlClick($gui_color, "", $check_hexlive)
endfunc
func cpc_ToggleLiveHex()
    if $live_hex = $GUI_CHECKED then
        $live_hex = $GUI_UNCHECKED
        ToolTip("")
    else
        $live_hex = $GUI_CHECKED
    endif
    IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "live_hex", $live_hex)
endfunc
func cpc_ToggleLiveColorHold()
    if $hold_live_color = $GUI_UNCHECKED then
        $hold_live_color = $GUI_CHECKED
    else
        $hold_live_color = $GUI_UNCHECKED
    endif
    IniWriteCheckboxValue($cpc_ini_path, $cpc_my_name, "hold_live_color", $hold_live_color)
endfunc
func cpc_MenuToggleOnTopWin()
    cpc_ToggleOnTopWin()
endfunc
func cpc_ToggleOnTopWin($flip=0)
    if $cpc_on_top <> $GUI_CHECKED then 
        $cpc_on_top = $GUI_CHECKED
        WinSetOnTop($gui_color, "", 1)
    else
        $cpc_on_top = $GUI_UNCHECKED
        WinSetOnTop($gui_color, "", 0)
    endif
    if $cpc_stand_alone then TrayItemSetState($TrayItemToggleOnTop, $cpc_on_top)
    if not $flip then IniWriteCheckBoxValue($cpc_ini_path, $cpc_my_name, "always_on_top", $cpc_on_top)
endfunc
func cpc_MenuToggleLiveTitleBar()
    cpc_ToggleLiveTitleBar()
endfunc
func cpc_ToggleLiveTitleBar($flip=0)
    if $cpc_live_titlebar <> $GUI_CHECKED then
        $cpc_live_titlebar = $GUI_CHECKED 
        if not $flip then _
            WinSetTitle($gui_color, "", "color pickin chooser..     " & $cpc_output_mode & ": " & _
                ConvertColorValue(GUICtrlRead($input_hex_in_out), $cpc_output_mode, $add_prefix) & "" )
    else
        $cpc_live_titlebar = $GUI_UNCHECKED
        if not $flip then _
            WinSetTitle($gui_color, "", "color pickin chooser..")
    endif
    if $cpc_stand_alone then TrayItemSetState($TrayItemLiveTitleBar, $cpc_live_titlebar)
    if not $flip then IniWriteCheckBoxValue($cpc_ini_path, $cpc_my_name, "colors_in_titlebar", $cpc_live_titlebar)
endfunc
func cpc_MenuTogglePrefix()
    if $add_prefix = $GUI_CHECKED then
        $add_prefix = $GUI_UNCHECKED
    else
        $add_prefix = $GUI_CHECKED
    endif
    GUICtrlSetState($menu_hex_prefix, $add_prefix)
    IniWriteCheckBoxValue($cpc_ini_path, $cpc_my_name, "add_prefix", $add_prefix)
    cpc_UpdateHexOutput($cpc_my_color)
    if $cpc_auto_copy = $GUI_CHECKED then cpc_ClipCopyHex($cpc_my_color)
endfunc
func cpc_InitColorWells()
    cpc_LoadAllSavedColors()
    cpc_FillGroupsCombo()
    cpc_LoadColorGroup()
endfunc
func cpc_LoadAllSavedColors()
    cpc_GetColorGroupNames()
    for $i = 1 to $group_names[0]
        local $a_group[$no_colorwells+1][2]
        local $tmp_array = IniReadSection($colors_ini_path, $group_names[$i])
        if not IsArray($tmp_array) then local $tmp_array[1][2] = [[0]]
        
        for $j = 0 to uBound($tmp_array)-1
            if $tmp_array[$j][0] <> ""  then
                $a_group[$j][0] = $tmp_array[$j][0]
                $a_group[$j][1] = $tmp_array[$j][1]
            endif
            if $j = $no_colorwells then exitloop    
        next                                        
        $groups[$i] = $a_group
    next
endfunc
func cpc_GetColorGroupNames()
    global $group_names = IniReadSectionNames($colors_ini_path)
    if not IsArray($group_names) then
        global $group_names = MakeDummyArray("empty")
        global $groups[$group_names[0]+1] 
        IniWrite($cpc_ini_path, $cpc_my_name, "my_group", "empty")
        $cpc_my_group = "empty"
    else
        if not InArray($group_names, $cpc_my_group) then
            $cpc_my_group = $group_names[$group_names[0]]
            IniWrite($cpc_ini_path, $cpc_my_name, "my_group", $cpc_my_group)
        endif
        global $groups[$group_names[0]+1] = [$group_names[0]] 
    endif
endfunc
func cpc_FillGroupsCombo()
    GUICtrlSetData($combo_custom_groups, "|")
    for $i = 1 to $group_names[0]
        GUICtrlSetData($combo_custom_groups, $group_names[$i])
    next
    GUICtrlSetData($combo_custom_groups, $cpc_my_group)
endfunc
func cpc_LoadColorGroup()
    global $current_box = 0 
    RememberComboSelection($previous_combo_groups, $cpc_my_group)
    $load_group = GUICtrlRead($combo_custom_groups)
    for $i = 1 to $group_names[0]
        if $load_group = $group_names[$i] then
            $current_group_index = $i
            $cpc_my_group = $group_names[$current_group_index] 
            
            global $this_group = $groups[$i]
            cpc_UpdateColorWells()
            
        endif
    next
endfunc
func cpc_UpdateColorWells()
    for $i = 1 to $no_colorwells
        GUICtrlSetBkColor($custom_color_box[$i], Default) 
        if $this_group[$i][0] <> "" then
            GUICtrlSetBkColor($custom_color_box[$i], '0x' & $this_group[$i][0])
            GUICtrlSetTip($custom_color_box[$i], $this_group[$i][1])
        else
            GUICtrlSetTip($custom_color_box[$i], "no color")
        endif
    next
endfunc
func cpc_SelectColorWell()
    $overwrite = false
    if ce_IsPressed(10) then $overwrite = true
    for $i = $custom_color_box[1] to $custom_color_box[$no_colorwells] 
        $box_idx = $i - ($custom_color_box[1]) + 1
        
        if $i = @GUI_CtrlId then
            
            
            $flash_color = '0xffffff'    
            if RGBToHSL($this_group[$box_idx][0], 3) > 0.9 then $flash_color = '0x000000'
            GUICtrlSetBkColor($custom_color_box[$box_idx], $flash_color)  
            
            if $this_group[$box_idx][0] = "" then
                $this_group[$box_idx][0] = $cpc_my_color
                $this_group[$box_idx][1] = GUICtrlRead($input_color_name)
                cpc_AddNewColor($this_group[$box_idx][0], $this_group[$box_idx][1])
            
            else
                
                if $current_box = $box_idx and GUICtrlRead($input_color_name) <> $this_group[$box_idx][1] and _
                                            GUICtrlRead($input_color_name) <> "" then    
                    $this_group[$box_idx][1] = GUICtrlRead($input_color_name)            
                    cpc_AddNewColor($this_group[$box_idx][0], $this_group[$box_idx][1])
                    exitloop
                endif
                
                if $cpc_my_color = $this_group[$box_idx][0] and $overwrite then
                    cpc_DeleteColor($this_group[$box_idx][0])
                    $this_group[$box_idx][0] = "" 
                    cpc_InitColorWells()
                
                elseif $overwrite then
                    cpc_DeleteColor($this_group[$box_idx][0])
                    $this_group[$box_idx][0] = $cpc_my_color
                    $this_group[$box_idx][1] = GUICtrlRead($input_color_name)
                    cpc_AddNewColor($this_group[$box_idx][0], $this_group[$box_idx][1])
                else
                    
                    GUICtrlSetData($input_color_name, $this_group[$box_idx][1])
                    if GUICtrlRead($input_hex_in_out) <> $this_group[$box_idx][0] then
                        cpc_UpdateHexOutput($this_group[$box_idx][0])
                        cpc_AddHex()
                    endif
                    GUICtrlSetBkColor($custom_color_box[$box_idx],  $flash_color)
                    Sleep(100)
                    GUICtrlSetBkColor($custom_color_box[$box_idx], '0x' & $this_group[$box_idx][0])
                endif
            endif
            $current_box = $box_idx
        endif
    next
    
    cpc_DoInfo("Color Well " & $current_box & " :  " & $this_group[$current_box][1])
    GUICtrlSetState($input_color_name, $GUI_FOCUS) 
    Send("{RIGHT}") 
endfunc
func cpc_HotKeyDeleteColor()
    cpc_DeleteColor($this_group[$current_box][0])
    $save_box = $current_box
    cpc_InitColorWells()
    $current_box = $save_box
endfunc
func cpc_DeleteColor($color)
    IniDelete($colors_ini_path, $cpc_my_group, $color)
endfunc
func cpc_HotKeyAddChosenColor()
    cpc_AddMyColor()
endfunc
func cpc_AddMyColor()
    if GUICtrlRead($combo_custom_groups) = "" then
        ControlCommand($gui_color, "", $combo_custom_groups, "SelectString", $cpc_my_group)
    endif
    $under_limit = false
    for $i = 1 to $no_colorwells
        if $this_group[$i][0] = "" then
            $this_group[$i][0] = $cpc_my_color
            $this_group[$i][1] = GUICtrlRead($input_color_name) 
            GUICtrlSetBkColor($custom_color_box[$i], '0x' & $this_group[$i][0])
            cpc_AddNewColor($this_group[$i][0], $this_group[$i][1])
            ControlFocus ($gui_color, "", $custom_color_box[$i])
            $current_box = $i
            $under_limit = true
            exitloop
        endif
    next
    
    
    
    
    
    if not $under_limit then cpc_AddNewColor($cpc_my_color, GUICtrlRead($input_color_name))
endfunc
func cpc_AddNewColor($color, $name)
    
    
    
    $poss_old_name = IniRead($colors_ini_path, $cpc_my_group, $color, "()*&(*&^*&^%*&^%(*&^")
    if $poss_old_name <> "()*&(*&^*&^%*&^%(*&^" and $name = "" then $name = $poss_old_name
    IniWrite($colors_ini_path, $cpc_my_group, $color, $name)
    cpc_InitColorWells()
endfunc
func cpc_AddColorGroup()
    $new_group = StringReplace(GUICtrlRead($combo_custom_groups), "[", "{")
    $new_group = StringReplace($new_group, "]", "}")
    for $i = 1 to $group_names[0] 
        if $group_names[$i] = $new_group and $new_group <> "empty" then return
    next
    
    $old_group = IniReadSection($colors_ini_path, $cpc_my_group)
    if IsArray($old_group) then
        IniWriteSection($colors_ini_path, $new_group, $old_group)
    else
        IniWrite($colors_ini_path, $new_group, "tmp", "")
        IniDelete($colors_ini_path, $new_group, "tmp")
    endif
    cpc_LoadAllSavedColors()
    cpc_FillGroupsCombo()
    GUICtrlSetData($combo_custom_groups, $new_group)
    cpc_LoadColorGroup()
endfunc
func cpc_DeleteColorGroup()
    if ce_IsPressed(10) then
        cpc_RecoverBackup($colors_ini_path)
        cpc_LoadAllSavedColors()
        cpc_FillGroupsCombo()
        return
    endif
    cpc_StoreBackup($colors_ini_path)
    IniDelete($colors_ini_path, GUICtrlRead($combo_custom_groups))
    cpc_LoadAllSavedColors()
    $cpc_my_group = GetLastComboSelection($previous_combo_groups, $group_names)
    IniWrite($cpc_ini_path, $cpc_my_name, "my_group", $cpc_my_group)
    cpc_FillGroupsCombo()
    GUICtrlSetData($combo_custom_groups, $cpc_my_group)
    cpc_LoadColorGroup()
    GUICtrlSetState($combo_custom_groups, $GUI_FOCUS)
endfunc
func cpc_DoInfo($info_string)
    GUICtrlSetData($label_colorwell, $info_string)
endfunc
func cpc_SwitchOffInfo()
    if $ini_process then return 
    GUICtrlSetData($label_colorwell, "")
    ToolTip("")
    AdLibDisable()
endfunc
func cpc_GetDroppedItem()
    global $found_colors = false
    $ini_process = false
    WinActivate($gui_color)
    $new_group = ""
    if @GUI_DRAGID = -1 then 
        if not StringInStr(FileGetAttrib(@GUI_DRAGFILE), "D") then 
            $import_file = @GUI_DRAGFILE
            switch GetExtension($import_file)
                case "ini"
                    $ini_process = true
                    $new_group = cpc_ImportIniColors(@GUI_DRAGFILE)
                case "jpg", "jpeg", "bmp", "gif"
                    cpc_ImportImage(@GUI_DRAGFILE)
                case "gpl", "pal"
                    $multiple_groups = true
                    if ce_IsPressed(10) then $multiple_groups = false
                    cpc_DoInfo("scanning palette.. " & BaseName(@GUI_DRAGFILE))
                    cpc_ImportPalette(@GUI_DRAGFILE, $multiple_groups)
                    GUICtrlSetState($combo_custom_groups, $GUI_FOCUS)
            endswitch
        else 
            $ini_process = true
            $group_process = true
            cpc_DoInfo("scanning for ini files in: " & BaseName(@GUI_DRAGFILE))
            $list_o_inis = RecurseDir(@GUI_DRAGFILE, "*.ini")
            if IsArray($list_o_inis) and FileExists(@GUI_DRAGFILE) then
                for $i = 1 to $list_o_inis[0]
                    if $list_o_inis[$i] <> '' then
                        cpc_DoInfo("assimilating colors in: " & BaseName($list_o_inis[$i]))
                        $new_group = cpc_ImportIniColors($list_o_inis[$i])
                    endif
                next
            endif
        endif
    endif
    if $ini_process then
        if $found_colors then
            if $group_process then
                cpc_GetXYPrefs(1)
                ToolTip(" Imported colors are now available in your color groups ", $cpc_x, $cpc_y, _
                                                                                            "Import Complete", 1)
                cpc_DoInfo("import complete: new colors added")
            endif
            cpc_InitColorWells()
            cpc_DoInfo("import complete")
        else
            cpc_DoInfo("no colors found")
        endif
    endif
    $ini_process = false
    AdlibEnable("cpc_SwitchOffInfo", 4000)
    if $new_group then
        if $dont_pop_up_comments = $GUI_UNCHECKED then cpc_PopUpComments($new_group)
        
        
        ControlCommand($gui_color, "", $combo_custom_groups, "SelectString", $new_group)
    endif
endfunc
func cpc_ImportIniColors($import_file)
    $new_group = $cpc_my_group    
    $comment_string = ""        
    $imported_sections = IniReadSectionNames($import_file)
    if not IsArray($imported_sections) then 
            if not $group_process then
                cpc_GetXYPrefs(1)
                ToolTip(" The ini file is in a non-standard format. ", $cpc_x, $cpc_y, "An error occurred.", 1)
                AdlibEnable("cpc_SwitchOffInfo", 3333)
            endif
        return
    endif
    
    $removed = 0
    for $i = 1 to $imported_sections[0] 
        $found_here = false
        $new_group = $imported_sections[$i]
        $ini_section = IniReadSection($import_file, $new_group)
        if not IsArray($ini_section) then continueloop
        for $j = 0 to uBound($ini_section)-1
            select
                
                case StringLen($ini_section[$j][0]) = 6 and $ini_section[$j][1] = "-"
                    if IniRead($colors_ini_path, $new_group, $ini_section[$j][0], "foo") <> "foo" then $removed += 1
                    IniDelete($colors_ini_path, $new_group, $ini_section[$j][0])
                
                
                case StringLen($ini_section[$j][1]) = 6 and cpc_CheckBigHex($ini_section[$j][1])
                    IniWrite($colors_ini_path, $new_group, $ini_section[$j][1], _
                                                    StringReplace($ini_section[$j][0], "_", " "))
                    $found_colors = true
                    $found_here = true
                
                
                case StringLen($ini_section[$j][0]) = 6 and cpc_CheckBigHex($ini_section[$j][0])
                    IniWrite($colors_ini_path, $new_group, $ini_section[$j][0], _
                                                    StringReplace($ini_section[$j][1], "_", " "))
                    $found_colors = true
                    $found_here = true
            endselect
        next
        if $found_here then
            
            
            if not InArray($group_names, $new_group) then $comment_string = GrabCommentsFromIniSection($import_file, $new_group)
            
            if $comment_string then WriteCommentsToIniSection($colors_ini_path, $new_group, $comment_string)
        endif
    next
    if not $group_process then
        $tip_add = ""
        if $removed then $tip_add = @CRLF & $removed & " colors were removed."
        cpc_GetXYPrefs(1)
        ToolTip("All available colors have been added to your color groups. " & $tip_add, $cpc_x, $cpc_y, "Import Complete", 1)
        AdlibEnable("cpc_SwitchOffInfo", 3333)
        $tip_add = ""
        if $removed then $tip_add = " (" & $removed & " colors removed)"
        cpc_DoInfo("import complete" & $tip_add)
        AdlibEnable("cpc_SwitchOffInfo", 4000)
    endif
    return $new_group
endfunc
func cpc_CheckBigHex($so_called_color)
    $tmp_dec = Dec($so_called_color)
    if $tmp_dec = 0 and $so_called_color = "000000" then return 1
    if $tmp_dec <> 0 then  return 1
    return 0
endfunc
func cpc_ImportPalette($file, $multiple_groups=true)
    cpc_GetXYPrefs(1)
    $palfile = FileOpen($file, 0)
    if $palfile = -1 then
        ToolTip(" There was an error reading the file. Check its permissions.", $cpc_x, $cpc_y, "Import Failed", 1)
        AdlibEnable("cpc_SwitchOffInfo", 3333)
        return 0
    endif
    $palette_values = FileRead($palfile)
    FileClose($palfile)
    $palette_values = StringSplit($palette_values, @LF)
    switch StringStripWS($palette_values[1], 3)
        case "JASC-PAL"
            $pal_type = "jasc"
            $new_group = StringReplace(CleanName($file), "[", "{")
            $new_group = StringReplace($new_group, "]", "}")
            $got_colums = true
        case "GIMP Palette"
            $pal_type = "gimp"
            $new_group = StringStripWS(StringReplace($palette_values[2], "Name:", ""), 3)
            $got_colums = false
        case else
            ToolTip(" The palette was of an unknown type", $cpc_x, $cpc_y, "Import Failed", 1)
            cpc_DoInfo("import failed: unknown palette type")
            AdlibEnable("cpc_SwitchOffInfo", 4000)
            return
    endswitch
    if InArray($group_names, $new_group) then
        ToolTip(" '" & $new_group & "' already exists", $cpc_x, $cpc_y, "Import Failed", 1)
        cpc_DoInfo("failed: '" & $new_group & "' already exists")
        AdlibEnable("cpc_SwitchOffInfo", 4000)
        return
    endif
    $color_well = 1
    $name_count = 1
    $name_append = ""
    $comment_string = ""
    $partial = false
    $got_black = false
    local $check_array[$palette_values[0]] 
    for $i = 3 to $palette_values[0] 
        if not StringInStr($palette_values[$i], " ") then continueloop
        if $palette_values[$i] <> "" then
            
            if not $got_colums and $pal_type = "gimp" and StringLeft($palette_values[$i], 8) = "Columns:" then
                $got_colums = true 
                continueloop
            endif
            if $pal_type = "jasc" and StringStripWS($palette_values[$i], 3) = "0 0 0" then
                if $got_black then
                    continueloop
                else
                    $got_black = true
                endif
            endif
            if $pal_type = "gimp" and StringLeft($palette_values[$i], 1) = " then
                $comment_string &= StringStripWS($palette_values[$i], 3) & @CRLF
                continueloop
            endif
            
            
            if $multiple_groups then
                
                if $color_well = $no_colorwells+1 then
                    $name_count += 1
                    $color_well = 1 
                endif
                if $name_count > 1 then $name_append = " " & $name_count
                if InArray($group_names, $new_group & $name_append) then
                    $partial = true
                    continueloop 
                endif 
            endif
            
            switch $pal_type
                case "jasc" 
                    $dec_array = StringSplit(StringStripWS($palette_values[$i], 3), " ")
                    $hex_val = Hex($dec_array[1], 2) & Hex($dec_array[2], 2) & Hex($dec_array[3], 2)
                    $color_name = StringStripWS($palette_values[$i], 3)
                case "gimp" 
                    $gimp_col = StringSplit(StringStripWS($palette_values[$i], 3), "    ")
                    $color_name = $gimp_col[$gimp_col[0]]
                    $col_array = StringSplit(StringStripWS($gimp_col[1], 3), " ")
                    local $gimp_col[3] 
                    $count = 0
                    for $g = 1 to $col_array[0]
                        if StringStripWS($col_array[$g], 8) <> "" then
                            $gimp_col[$count] = $col_array[$g]
                            $count +=1
                        endif
                    next
                    $hex_val = Hex($gimp_col[0], 2) & Hex($gimp_col[1], 2) & Hex($gimp_col[2], 2)
            endswitch
            
            if not InArray($check_array, $hex_val) then
                $check_array[$i] = $hex_val
                IniWrite($colors_ini_path, $new_group & $name_append, $hex_val, $color_name)
                $color_well += 1 
            elseif $color_well = 1 then 
                $color_well = $no_colorwells+1
                $name_count -= 1
            endif
        endif
    next
    if $comment_string then
        $comment_string = StringStripWS($comment_string, 2)
        WriteCommentsToIniSection($colors_ini_path, $new_group, $comment_string)
    endif
    $tip_append = ""
    $info_append = ""
    $pause = 3333
    if $name_append <> "" then
        $tip_append = @CRLF & " note: the palette has been split into " & $name_count & " groups"
        $info_append = "  (" & $name_count & " groups)"
        if $partial then $tip_append &= @CRLF & " note also: some groups already existed and were not overwritten "
        $pause = 6000
    endif
    cpc_GetXYPrefs(1)
    cpc_DoInfo("Success: added  '" & $new_group & "'" & $info_append)
    ToolTip(" The palette is now available as the group '" & $new_group & "'" & $tip_append, $cpc_x, $cpc_y, _
                                                                                        "Import Complete", 1)
    AdlibEnable("cpc_SwitchOffInfo", $pause)
    cpc_InitColorWells()
    if $dont_pop_up_comments = $GUI_UNCHECKED then cpc_PopUpComments($new_group)
    ControlCommand($gui_color, "", $combo_custom_groups, "SelectString", $new_group)
endfunc
func cpc_ExportGroup()
    cpc_DialogOpen()
    $save_to = IniRead($cpc_ini_path, $cpc_my_name, "save_inis", @MyDocumentsDir)
    $group_section = IniReadSection($colors_ini_path, $cpc_my_group)
    $comment_string = GrabCommentsFromIniSection($colors_ini_path, $cpc_my_group)
    $save_file = FileSaveDialog( "Export the Color Group..", $save_to, "ini files (*.ini)" , 16 , $cpc_my_group & ".ini")
    cpc_DialogClose()
    if $save_file = "" then return
    IniWrite($cpc_ini_path, $cpc_my_name, "save_inis", GetParent($save_file))
    IniWriteSection ($save_file, $cpc_my_group, $group_section)
    if $comment_string then WriteCommentsToIniSection($save_file, $cpc_my_group, $comment_string)
endfunc
func cpc_ExportJASCPalette()
    $save_file = cpc_GetPalleteSaveLocation("JASC Palette files", "save_jasc_palettes", "pal")
    if not $save_file then return
    $group_section = IniReadSection($colors_ini_path, $cpc_my_group)
    $pal_type = "256"
    if $group_section[0][0] <= 16 then $pal_type = "16"
    $pal_string = "JASC-PAL" & @CRLF & "0100" & @CRLF & $pal_type & @CRLF
    if IsArray($group_section) then
        if $pal_type = "256" then
            $pal_string &= "255 255 255" & @CRLF 
            $pal_type = "255"
        endif
        for $i = 1 to $group_section[0][0]
            $pal_string &= StringReplace(ConvertColorValue($group_section[$i][0], "int"), ",", " ") & @CRLF
        next
        for $j = $i to $pal_type
            $pal_string &= "0 0 0" & @CRLF
        next
        
        FileWrite($save_file, $pal_string)
    endif
endfunc
func cpc_ExportGimpPalette()
    $save_file = cpc_GetPalleteSaveLocation("Gimp Palette files", "save_gimp_palettes", "gpl")
    if not $save_file then return
    $group_section = IniReadSection($colors_ini_path, $cpc_my_group)
    $comment_string = GrabCommentsFromIniSection($colors_ini_path, $cpc_my_group, "", "exported color pickin chooser")
    $pal_string = "GIMP Palette" & @LF & "Name: " & $cpc_my_group & @LF & " & @LF
    if $comment_string then $pal_string &= StringReplace(StringStripWS($comment_string, 1), @CRLF, @LF) & @LF
    if IsArray($group_section) then
        for $i = 1 to $group_section[0][0]
            $tmp_string = StringReplace(ConvertColorValue($group_section[$i][0], "int"), ",", " ")
            $rgb = StringSplit($tmp_string, " ")
            for $c = 1 to $rgb[0]
                
                
                
                
                
                
                $rgb[$c] = StringFormat("% 3s", $rgb[$c])
            next
            $pal_string &= $rgb[1] & " " & $rgb[2] & " " & $rgb[3]
            
            if $group_section[$i][1] = "" then $group_section[$i][1] = "Untitled"
            $pal_string &= "    " & $group_section[$i][1] & @LF
        next
        $save_file = FileOpen($save_file, 2)
        FileWrite($save_file, $pal_string)
        FileClose($save_file)
    endif
endfunc
func cpc_GetPalleteSaveLocation($type_string, $ini_save, $ext)
    cpc_DialogOpen()
    $save_to = IniRead($cpc_ini_path, $cpc_my_name, $ini_save, @MyDocumentsDir)
    $save_file = FileSaveDialog( "Export the Color Group as a Palette..", $save_to, $type_string & "(*" & "." & $ext & ")" , 16 , $cpc_my_group & "." & $ext)
    cpc_DialogClose()
    if $save_file = "" then return
    IniWrite($cpc_ini_path, $cpc_my_name, $ini_save, GetParent($save_file))
    if GetExtension($save_file) <> $ext then $save_file &= "." & $ext
    return $save_file
endfunc
func cpc_PopUpComments($group)
    cpc_GroupComments($group, 1)
endfunc
func cpc_MenuGroupComments()
    cpc_GroupComments($cpc_my_group)
endfunc
func cpc_GroupComments($color_group, $popped=0)
    $comment_string = ""
    $comment_array = GrabCommentsFromIniSection($colors_ini_path, $color_group, true)
    ; strip " character (and any spaces) from left side of comment lines..
    if $comment_array[0] > 0 then
        for $i = 1 to $comment_array[0]
            $comment_array[$i] = StringTrimLeft($comment_array[$i], 1)
            $comment_array[$i] = StringStripWS($comment_array[$i], 1)
            $comment_string &= $comment_array[$i] & @CRLF
        next
        $comment_string = StringStripWS($comment_string, 2)
    endif
    
    if $comment_string = "" and $popped then return
    $last_mode = AutoItSetOption("GUIOnEventMode", 0)
    $last_coord_mode = AutoItSetOption("GUICoordMode", 0)
    cpc_DialogOpen()
    $dont_pop_up_comments = IniReadCheckBoxValue($cpc_ini_path, $cpc_my_name, "dont_pop_up_comments", $GUI_UNCHECKED)
    cpc_GetXYPrefs(1)
    $com_x = $cpc_x - 55
    $com_y = $cpc_y + 75
    if $com_x < 0 then $com_x = 0
    if $com_y < 0 then $com_y = 0
    global $gui_comments = GUICreate("Notes and Comments for '" & $color_group & "'..", _
                                            450, 172, $com_x, $com_y, -1, $WS_EX_TOOLWINDOW)
    WinSetOnTop($gui_comments, "", 1)
    global $edit_comments = GUICtrlCreateEdit("", 7, 7, 440, 138)
    GUICtrlSetData(-1, $comment_string)
    $butt_done= GUICtrlCreateButton("&cancel", 0, 142, 46, 22)
    GUICtrlSetTip(-1, " close this dialog " )
    $check_no_comments_pop = GUICtrlCreateCheckBox("don't pop-up comments on import", 80, 0, 200)
    GUICtrlSetTip(-1, " check this box to prevent comments popping up when you import color groups " )
    GUICtrlSetState(-1, $dont_pop_up_comments)
    $butt_revert = GUICtrlCreateButton("&revert", 250, 0, 54, 22)
    GUICtrlSetTip(-1, " revert the comments back to the last saved version " )
    $butt_save = GUICtrlCreateButton("&save", 56, 0, 54, 22)
    GUICtrlSetTip(-1, " save the comments for this color group " )
    GUISetState()
    GUICtrlSetState($edit_comments, $GUI_FOCUS) 
    WinActivate($gui_comments) 
    
    while 1
        sleep(50)
        $msg = GUIGetMsg()
        switch $msg
            case $GUI_EVENT_CLOSE, $butt_done
                exitloop
            case $edit_comments
            case $butt_revert
                GUICtrlSetData($edit_comments, $comment_string)
            case $check_no_comments_pop
                $dont_pop_up_comments = GUICtrlRead($check_no_comments_pop)
                if $dont_pop_up_comments = $GUI_CHECKED then
                    IniWrite($cpc_ini_path, $cpc_my_name, "dont_pop_up_comments", "true")
                else
                    IniWrite($cpc_ini_path, $cpc_my_name, "dont_pop_up_comments", "false")
                endif
            case $butt_save
                if StringStripWS(GUICtrlRead($edit_comments), 3) = "" then exitloop
                $comment_string = ""
                $new_comments_array = StringSplit(GUICtrlRead($edit_comments), @CRLF)
                for $i = 1 to $new_comments_array[0]
                    if StringStripWS($new_comments_array[$i], 3) <> "" then
                        $comment_string &= " & StringStripWS($new_comments_array[$i], 3) & @CRLF
                    endif
                next
                $tmp_colors = IniReadSection($colors_ini_path, $color_group)
                if IsArray($tmp_colors) then
                    
                    
                    IniDelete($colors_ini_path, $color_group)
                    IniWriteSection($colors_ini_path, $color_group, $tmp_colors)
                    
                    if $comment_string then WriteCommentsToIniSection($colors_ini_path, $color_group, StringStripWS($comment_string, 2))
                endif
                exitloop
        endswitch
        if GUICtrlRead($edit_comments) <> $comment_string then
            GUICtrlSetData($butt_save, "&save")
        else
            GUICtrlSetData($butt_save, "&ok")
        endif
    wend
    AutoItSetOption("GUIOnEventMode", $last_mode)
    AutoItSetOption("GUICoordMode", $last_coord_mode)
    GUIDelete($gui_comments)
    cpc_DialogClose()
endfunc
    sort flags..
        1:    red sort
        2:    green sort
        3:    blue sort
        4:    hue sort
        5:    sat sort
        6:    lum sort
        10:    name sort
func cpc_MenuSortColorsName()
    if $sort_flags[10] then
        cpc_ReverseColors()
        $sort_flags[10] = false
    else
        cpc_SetSortFlag(10)
        cpc_GetColorsToSort()
        cpc_ColorSortName($sort_colors)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsRed()
    if $sort_flags[1] then
        cpc_ReverseColors()
        $sort_flags[1] = false
    else
        cpc_SetSortFlag(1)
        cpc_GetColorsToSort()
        cpc_ColorSortRGB($sort_colors, 1)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsGreen()
    if $sort_flags[2] then
        cpc_ReverseColors()
        $sort_flags[2] = false
    else
        cpc_SetSortFlag(2)
        cpc_GetColorsToSort()
        cpc_ColorSortRGB($sort_colors, 2)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsBlue()
    if $sort_flags[3] then
        cpc_ReverseColors()
        $sort_flags[3] = false
    else
        cpc_SetSortFlag(3)
        cpc_GetColorsToSort()
        cpc_ColorSortRGB($sort_colors, 3)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsHue()
    if $sort_flags[4] then
        cpc_ReverseColors()
        $sort_flags[4] = false
    else
        cpc_SetSortFlag(4)
        cpc_GetColorsToSort()
        cpc_ColorSortHSL($sort_colors, 1)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsSat()
    if $sort_flags[5] then
        cpc_ReverseColors()
        $sort_flags[5] = false
    else
        cpc_SetSortFlag(5)
        cpc_GetColorsToSort()
        cpc_ColorSortHSL($sort_colors, 2)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_MenuSortColorsLum()
    if $sort_flags[6] then
        cpc_ReverseColors()
        $sort_flags[6] = false
    else
        cpc_SetSortFlag(6)
        cpc_GetColorsToSort()
        cpc_ColorSortHSL($sort_colors, 3)
    endif
    cpc_ShowSortedColors()
endfunc
func cpc_GetColorsToSort()
    global $sort_colors = IniReadSection($colors_ini_path, $cpc_my_group)
endfunc
func cpc_ShowSortedColors()
    $comment_string = GrabCommentsFromIniSection($colors_ini_path, $cpc_my_group)
    IniWriteSection($colors_ini_path, $cpc_my_group , $sort_colors)
    if $comment_string then WriteCommentsToIniSection($colors_ini_path, $cpc_my_group, $comment_string)
    cpc_InitColorWells()
endfunc
func cpc_ReverseColors()
    cpc_GetColorsToSort()
    $limit = $sort_colors[0][0]
    local $tmp_array[$limit+1][2] = [[$limit]]
    $a = 1
    for $i = $limit to 1 step -1
        $tmp_array[$a][0] = $sort_colors[$i][0]
        $tmp_array[$a][1] = $sort_colors[$i][1]
        $a += 1
    next
    $sort_colors = $tmp_array
endfunc
func cpc_SetSortFlag($flag)
    for $i = 1 to $sort_flags[0]
        if $i <> $flag then
            $sort_flags[$i] = false
        else
            $sort_flags[$i] = true
        endif
    next
endfunc
func cpc_ColorSortHSL(ByRef $array, $idx)
    for $i = 1 to $array[0][0]
        $store = $array[$i][0]
        $store2 = $array[$i][1]
        $hsl_idx = RGBToHSL($array[$i][0], $idx)
        $j = $i
        while $j > 1 and RGBToHSL($array[$j-1][0], $idx) > $hsl_idx
            $array[$j][0] = $array[$j-1][0]
            $array[$j][1] = $array[$j-1][1]
            $j -= 1
        wend
        $array[$j][0] = $store
        $array[$j][1] = $store2
    next
endfunc
func cpc_ColorSortRGB(ByRef $array, $idx)
    for $i = 1 to $array[0][0]
        $store = $array[$i][0]
        $store2 = $array[$i][1]
        $hsl_idx = ConvertColorValue($array[$i][0], "i", 0, $idx)
        $j = $i
        while $j > 1 and ConvertColorValue($array[$j-1][0], "i", 0, $idx) > $hsl_idx
            $array[$j][0] = $array[$j-1][0]
            $array[$j][1] = $array[$j-1][1]
            $j -= 1
        wend
        $array[$j][0] = $store
        $array[$j][1] = $store2
    next
endfunc
func cpc_ColorSortName(ByRef $bs_array)
    for $i = uBound($bs_array)-1 to 1 step -1
        for $j = 2 to $i
            if $bs_array[$j-1][1] > $bs_array[$j][1] then
                $temp = $bs_array[$j-1][0]
                $temp2 = $bs_array[$j-1][1]
                $bs_array[$j-1][0] = $bs_array[$j][0]
                $bs_array[$j-1][1] = $bs_array[$j][1]
                $bs_array[$j][0] = $temp
                $bs_array[$j][1] = $temp2
            endif
        next
    next
endfunc
func cpc_DialogOpen()
    cpc_UnSetHotKeys()
    GUISetState(@SW_DISABLE, $gui_color)
    if $cpc_stand_alone then
        AutoItSetOption ("TrayIconHide" , 1)
        if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 0)
    endif
endfunc
func cpc_DialogClose()
    if $cpc_stand_alone then
        if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 1)
        AutoItSetOption("TrayIconHide" , 0)
    endif
    GUISetState(@SW_ENABLE, $gui_color)
    WinActivate($gui_color) 
    cpc_SetHotKeys()
endfunc
func cpc_SaveColorPrefs()
    IniWrite($cpc_ini_path, $cpc_my_name, "my_color", $cpc_my_color)
    IniWrite($cpc_ini_path, $cpc_my_name, "my_group", $cpc_my_group)
endfunc
func cpc_LoadMag()
    local $tmp_blocks = IniRead($cpc_ini_path, $cpc_my_name, "mag_save", "")
    if $tmp_blocks = "" then
        cpc_UpdateMag(true) 
        return
    endif
    $mag_save_blocks = StringSplit($tmp_blocks, "|")
    if $mag_save_blocks[0] = 1 then return
    for $i = 1 to 100
        GUICtrlSetBkColor($mag_block[$i-1], $mag_save_blocks[$i])
    next
endfunc
func cpc_SaveMag()
    local $mag_save = ""
    for $i = 1 to 100
        $mag_save &= $mag_save_blocks[$i] & "|"
    next
    $mag_save = StringTrimRight($mag_save, 1)
    IniWrite($cpc_ini_path, $cpc_my_name, "mag_save",  $mag_save)
    IniWrite($cpc_ini_path, $cpc_my_name, "last_mag", $cpc_last_mag) 
endfunc
func cpc_StoreBackup($inifile_path)
    FileCopy($inifile_path, @TempDir & "\" & Basename($inifile_path) & ".backup.ini", 1)
endfunc
func cpc_RecoverBackup($inifile_path)
    FileCopy($inifile_path, @TempDir & "\" & Basename($inifile_path) & ".backupTMP", 1)
    cpc_ImportIniColors(@TempDir & "\" & Basename($inifile_path) & ".backup.ini")
    FileMove(@TempDir & "\" & Basename($inifile_path) & ".backupTMP", @TempDir & "\" & Basename($inifile_path) & ".backup.ini", 1)
endfunc
func cpc_RemoveBackup($inifile_path)
    FileDelete(@TempDir & "\" & Basename($inifile_path) & ".backup.ini")
endfunc
func cpc_OpenDataFolder()
    ShellExecute ("Explorer.exe", $cpc_data_parent)
endfunc
func cpc_DoAbout()
    GUISetCursor()
    cpc_DialogOpen()
    $last_mode = AutoItSetOption("GUIOnEventMode", 0) 
    $gui_about = GUICreate(" about corz " & $cpc_my_name & "..", 225, 100, -1, -1, _
                                        $WS_CAPTION, BitOr($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUICtrlCreateLabel(" " & $cpc_my_name & " v" & $cpc_my_version & @CRLF & " by cor", 60, 8)
    GUICtrlCreateIcon("shell32.dll", 274, 10, 10)
    GUICtrlCreateLabel(" do you want to visit the " & @CRLF & " color pickin chooser web page? ", 60, 38)
    $gui_about_NO = GUICtrlCreateButton("No, not right now", 10, 73, 85, 22)
    $gui_about_OK = GUICtrlCreateButton("Yes, let's do it!", 133, 73, 85, 22)
    GUICtrlSetState($gui_about_OK, $GUI_FOCUS)
    GUISetState()
    while 1
        $msg = GUIGetMsg()
        switch $msg
            case $GUI_EVENT_CLOSE, $gui_about_NO
                GUIDelete($gui_about)
                exitloop
            case $gui_about_OK
                VisitURL('http:
                GUIDelete($gui_about)
                exitloop
        endswitch
    wend
    AutoItSetOption("GUIOnEventMode", $last_mode)
    cpc_DialogClose()
endfunc
func cpc_ToggleWindow()
    $winstate = WinGetState($gui_color)
    if BitAnd($winstate, 2) then 
        if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 0)
        GUISetCursor()
        ToolTip ("")
        cpc_GetXYPrefs() 
        cpc_UnSetHotKeys()
        corz_GUIAnimateClose($gui_color, $cpc_gui_fx)
    else 
        corz_GUIAnimateOpen($gui_color, $cpc_gui_fx)
        cpc_UpdateImageContextMenu()
        cpc_SetHotKeys()
        if $cpc_on_top = $GUI_CHECKED then WinSetOnTop($gui_color, "", 1)
    endif
endfunc
func cpc_SetHotKeys()
    HotKeySet("^{F1}", "cpc_ToggleWindow")
    HotKeySet("{DEL}", "cpc_HotKeyDeleteColor")
    HotKeySet("{ESC}", "cpc_ExitDoQuit")
    HotKeySet("{ENTER}", "cpc_HotKeyAddChosenColor")
    HotKeySet("{F1}", "cpc_HotKeyShowTips")
    HotKeySet("{F2}", "cpc_HotKeyAddChosenColor")
    HotKeySet("{F3}", "cpc_HotAutoKeyCopyHex")
    HotKeySet("{F4}", "cpc_HotKeyCopyHex")
    HotKeySet("{F5}", "cpc_HotKeyToggleLiveLum")
    HotKeySet("{F6}", "cpc_HotKeyToggleLiveMag")
    HotKeySet("{F7}", "cpc_HotKeyToggleLiveHex")
    HotKeySet("{F8}", "cpc_MenuUpdateImageContextMenu")
    HotKeySet("{F9}", "cpc_HotKeySystemPicker")
    HotKeySet("{F10}", "cpc_OpenDataFolder")
    HotKeySet("^{NUMPAD0}", "cpc_MenuSortColorsName")
    HotKeySet("^{NUMPAD1}", "cpc_MenuSortColorsRed")
    HotKeySet("^{NUMPAD2}", "cpc_MenuSortColorsGreen")
    HotKeySet("^{NUMPAD3}", "cpc_MenuSortColorsBlue")
    HotKeySet("^{NUMPAD4}", "cpc_MenuSortColorsHue")
    HotKeySet("^{NUMPAD5}", "cpc_MenuSortColorsSat")
    HotKeySet("^{NUMPAD6}", "cpc_MenuSortColorsLum")
    HotKeySet("!c", "cpc_MenuGroupComments")
endfunc
func cpc_UnSetHotKeys()
    HotKeySet("{DEL}")
    HotKeySet("{ESC}")
    HotKeySet("{ENTER}")
    HotKeySet("{F1}")
    HotKeySet("{F2}")
    HotKeySet("{F3}")
    HotKeySet("{F4}")
    HotKeySet("{F5}")
    HotKeySet("{F6}")
    HotKeySet("{F7}")
    HotKeySet("{F8}")
    HotKeySet("{F9}")
    HotKeySet("{F10}")
    HotKeySet("^{NUMPAD0}")
    HotKeySet("^{NUMPAD1}")
    HotKeySet("^{NUMPAD2}")
    HotKeySet("^{NUMPAD3}")
    HotKeySet("^{NUMPAD4}")
    HotKeySet("^{NUMPAD5}")
    HotKeySet("^{NUMPAD6}")
    HotKeySet("!c")
endfunc
func cpc_GetXYPrefs($check_only=false) 
    $size_array = WinGetPos($gui_color)
    if IsArray($size_array) then
        $cpc_x = $size_array[0]
        $cpc_y = $size_array[1]
    else
        $cpc_x = -1
        $cpc_y = -1
    endif
    if not $check_only then
        IniWrite($cpc_ini_path, $cpc_my_name, "x", $cpc_x)
        IniWrite($cpc_ini_path, $cpc_my_name, "y", $cpc_y)
    endif
endfunc
func cpc_KillWindow()
    cpc_UnSetHotKeys() 
    GUISetCursor()
    ToolTip ("")
    if not $cpc_killed then corz_GUIAnimateClose($gui_color, $cpc_gui_fx)
    GUIDelete($gui_color)
    GUIDelete($dummy_container)
endfunc
func cpc_Done()
    if $done_quits = $GUI_CHECKED or not $cpc_stand_alone then
        cpc_DoneDoQuit()
        return
    else
        cpc_ToggleWindow()
    endif
endfunc
func cpc_DoneDoQuit()
    cpc_UnSetHotKeys()
    cpc_GetXYPrefs()
    cpc_SaveColorPrefs()
    cpc_SaveMag()
    $do_quit = true
endfunc
func cpc_ExitDoQuit()
    $cpc_killed = true
    cpc_DoneDoQuit()
endfunc
func cpc_HotKeySystemPicker()
    cpc_SystemPicker()
endfunc
func cpc_SystemPicker()
    cpc_UnSetHotKeys()
    $some_color = cpc__ChooseColor(2, "0x" & $cpc_my_color, 2, $gui_color)
    if not @error then
        $cpc_live_color = StringTrimLeft($some_color, 2)
        cpc_SetColor()
    endif
    cpc_SetHotKeys()
endfunc
Func cpc__ChooseColor($i_ReturnType = 0, $i_colorref = 0, $i_refType = 0, $h_wnd_owner = 0)
    Local $custcolors = "int[16]"
    Local $struct = "dword
    Local $p = DllStructCreate($struct)
    If @error Then
        SetError(-1)
        Return -1
    EndIf
    Local $cc = DllStructCreate($custcolors)
    If @error Then
        SetError(-2)
        Return -1
    EndIf
    If ($i_refType == 1) Then
        $i_colorref = Int($i_colorref)
    ElseIf ($i_refType == 2) Then
        $i_colorref = Hex(String($i_colorref), 6)
        $i_colorref = '0x' & StringMid($i_colorref, 5, 2) & StringMid($i_colorref, 3, 2) & StringMid($i_colorref, 1, 2)
    EndIf
    DllStructSetData($p, 1, DllStructGetSize($p))
    DllStructSetData($p, 2, $h_wnd_owner)
    DllStructSetData($p, 4, $i_colorref)
    DllStructSetData($p, 5, DllStructGetPtr($cc))
    DllStructSetData($p, 6, BitOR($CC_ANYCOLOR, $CC_FULLOPEN, $CC_RGBINIT))
    Local $ret = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr", DllStructGetPtr($p))
    If ($ret[0] == 0) Then
        SetError(-3)
        Return -1
    EndIf
    Local $color_picked = DllStructGetData($p, 4)
    If ($i_ReturnType == 1) Then 
        Return '0x' & Hex(String($color_picked), 6)
    ElseIf ($i_ReturnType == 2) Then 
        $color_picked = Hex(String($color_picked), 6)
        Return '0x' & StringMid($color_picked, 5, 2) & StringMid($color_picked, 3, 2) & StringMid($color_picked, 1, 2)
    ElseIf ($i_ReturnType == 0) Then
        Return $color_picked
    Else
        SetError(-4)
        Return -1
    EndIf
EndFunc
    changes        [since release]
    1.8.1
    *    maintenance release - non-code changes only.
    1.8
    *    fixed picker image install bug, no  really.
    *    last if the include paths is now relative I upgraded to the latest AutoIt
        Wrapper, and the extra icons worked! Ensure you are using at least v1.9.3
        of AutoIt wrapper. YOu should be able to compile the source pack now with
        zero editing.
    1.7.9
    *    bugfix to the cpc_ButtCopyColor()function
    *    fixed incorrect ini path entry
    1.7.8
    *    made include paths relative
    *    notes updates
    1.7.7
    *    documentation updates and typo fixes
    *    cleaned up a couple of sections
    1.7.6
    *    added page URL to about box (and made the page!)