def delete_color(self, color, palette_type, palette_name): """Delete color.""" if palette_type == '__special__': if palette_name == "Favorites": favs = util.get_favs()['colors'] if color in favs: favs.remove(color) util.save_palettes(favs, favs=True) self.show_colors(palette_type, palette_name, delete=True, update=False) elif palette_type in ('__global__', '__project__'): if palette_type == '__global__': color_palettes = util.get_palettes() else: color_palettes = util.get_project_palettes(self.view.window()) for palette in color_palettes: if palette_name == palette['name']: if color in palette['colors']: palette['colors'].remove(color) if palette_type == '__global__': util.save_palettes(color_palettes) else: util.save_project_palettes(self.view.window(), color_palettes) self.show_colors(palette_type, palette_name, delete=True, update=False) break
def add_palette(self, color, palette_type, palette_name): """Add pallete.""" if palette_type == "__special__": if palette_name == 'Favorites': favs = util.get_favs()['colors'] if color not in favs: favs.append(color) util.save_palettes(favs, favs=True) self.show_color_info(update=True) elif palette_type in ('__global__', '__project__'): if palette_type == '__global__': color_palettes = util.get_palettes() else: color_palettes = util.get_project_palettes(self.view.window()) for palette in color_palettes: if palette_name == palette['name']: if color not in palette['colors']: palette['colors'].append(color) if palette_type == '__global__': util.save_palettes(color_palettes) else: util.save_project_palettes(self.view.window(), color_palettes) self.show_color_info(update=True) break
def show_colors(self, palette_type, palette_name, delete=False, update=False): """Show colors under the given palette.""" target = None current = False if palette_type == "__special__": if palette_name == "Current Colors": current = True target = { "name": palette_name, "colors": self.view.settings().get('color_helper_file_palette', []) } elif palette_name == "Project Colors": data = self.view.window().project_data() current = True target = { "name": palette_name, "colors": [] if data is None else data.get('color_helper_project_palette', []) } elif palette_name == "Favorites": target = util.get_favs() elif palette_type == "__global__": for palette in util.get_palettes(): if palette_name == palette['name']: target = palette elif palette_type == "__project__": for palette in util.get_project_palettes(self.view.window()): if palette_name == palette['name']: target = palette if target is not None: html = [] if not delete: html.append(BACK_PALETTE_MENU) if not current: html.append(DELETE_COLOR_MENU % (palette_type, target['name'])) else: html.append(BACK_COLORS_MENU % (palette_type, target['name'])) if delete: html.append(DELETE_COLOR) html.append( self.format_colors(target['colors'], target['name'], palette_type, delete) ) if update: mdpopups.update_popup(self.view, ''.join(html), css=ADD_CSS) else: mdpopups.show_popup( self.view, ''.join(html), location=-1, max_width=600, on_navigate=self.on_navigate, flags=sublime.COOPERATE_WITH_AUTO_COMPLETE, css=ADD_CSS )
def remove_fav(self, color): """Remove favorite.""" favs = util.get_favs()['colors'] favs.remove(color) util.save_palettes(favs, favs=True) # For some reason if using update, # the convert divider will be too wide. self.show_color_info(update=False)
def show_palettes(self, delete=False, color=None, update=False): """Show preview of all palettes.""" show_div = False s = sublime.load_settings('color_helper.sublime-settings') show_global_palettes = s.get('enable_global_user_palettes', True) show_project_palettes = s.get('enable_project_user_palettes', True) show_favorite_palette = s.get('enable_favorite_palette', True) show_current_palette = s.get('enable_current_file_palette', True) html = [] if (not self.no_info and not delete) or color: html.append(BACK_INFO_MENU) elif delete: html.append(BACK_PALETTE_MENU) if not delete and not color and (show_global_palettes or show_project_palettes or show_favorite_palette): html.append(DELETE_PALETTE_MENU) if delete: html.append(DELETE_PALETTE) if color: html.append(NEW_PALETTE % {'color': color}) if show_favorite_palette: favs = util.get_favs() if len(favs['colors']) or color: show_div = True html.append( self.format_palettes(favs['colors'], favs['name'], '__special__', delete=delete, color=color) ) if show_current_palette: current_colors = self.view.settings().get('color_helper_file_palette', []) if not delete and not color and len(current_colors): show_div = True html.append( self.format_palettes(current_colors, "Current Colors", '__special__', delete=delete, color=color) ) if show_global_palettes: palettes = util.get_palettes() if len(palettes) and show_div: show_div = False html.append('\n\n---\n\n') for palette in palettes: show_div = True name = palette.get("name") html.append( self.format_palettes( palette.get('colors', []), name, '__global__', palette.get('caption'), delete=delete, color=color ) ) if show_project_palettes: palettes = util.get_project_palettes(self.view.window()) if len(palettes) and show_div: show_div = False html.append(DIVIDER) for palette in palettes: name = palette.get("name") html.append( self.format_palettes( palette.get('colors', []), name, '__project__', palette.get('caption'), delete=delete, color=color ) ) if update: mdpopups.update_popup(self.view, ''.join(html), css=ADD_CSS) else: mdpopups.show_popup( self.view, ''.join(html), location=-1, max_width=600, on_navigate=self.on_navigate, flags=sublime.COOPERATE_WITH_AUTO_COMPLETE, css=ADD_CSS )
def format_info(self, color, alpha=None): """Format the selected color info.""" rgba = RGBA(color) try: web_color = csscolors.hex2name(rgba.get_rgb()) except Exception: web_color = None color_picker = util.color_picker_available() s = sublime.load_settings('color_helper.sublime-settings') show_global_palettes = s.get('enable_global_user_palettes', True) show_project_palettes = s.get('enable_project_user_palettes', True) show_favorite_palette = s.get('enable_favorite_palette', True) show_current_palette = s.get('enable_current_file_palette', True) show_conversions = s.get('enable_color_conversions', True) show_picker = s.get('enable_color_picker', True) palettes_enabled = ( show_global_palettes or show_project_palettes or show_favorite_palette or show_current_palette ) click_color_box_to_pick = s.get('click_color_box_to_pick', 'none') if click_color_box_to_pick == 'color_picker' and color_picker and show_picker: color_box_wrapper = '\n\n[%s]' + ('(__color_picker__:%s)' % color) elif click_color_box_to_pick == 'palette_picker' and palettes_enabled: color_box_wrapper = '\n\n[%s](__palettes__)' else: color_box_wrapper = '\n\n%s' info = [] if click_color_box_to_pick != 'palette_picker' and palettes_enabled: info.append(PALETTE_MENU) if click_color_box_to_pick != 'color_picker' and color_picker and show_picker: info.append(PICK_MENU % color) if show_global_palettes or show_project_palettes: info.append(ADD_COLOR_MENU % color.lower()) if show_favorite_palette: if color in util.get_favs()['colors']: info.append(UNMARK_MENU % color.lower()) else: info.append(MARK_MENU % color.lower()) info.append( color_box_wrapper % mdpopups.color_box([color], '#cccccc', '#333333', height=64, width=192, border_size=2) ) if show_conversions: info.append('\n\n---\n\n') if web_color: info.append(WEB_COLOR % (color, web_color)) info.append(HEX_COLOR % (color, (color.lower() if not alpha else color[:-2].lower()))) info.append(RGB_COLOR % (color, rgba.r, rgba.g, rgba.b)) info.append(RGBA_COLOR % (color, rgba.r, rgba.g, rgba.b, alpha if alpha else '1')) h, l, s = rgba.tohls() info.append( HSL_COLOR % (color, util.fmt_float(h * 360.0), util.fmt_float(s * 100.0), util.fmt_float(l * 100.0)) ) info.append( HSLA_COLOR % ( color, util.fmt_float(h * 360.0), util.fmt_float(s * 100.0), util.fmt_float(l * 100.0), alpha if alpha else '1' ) ) return ''.join(info)