18ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
28ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Use of this source code is governed by a BSD-style license that can be
38ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// found in the LICENSE file.
48ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
58ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#ifndef CHROME_COMMON_EXTENSIONS_EXTENSION_ICON_SET_H_
68ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#define CHROME_COMMON_EXTENSIONS_EXTENSION_ICON_SET_H_
78ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#pragma once
88ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
98ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include <map>
108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include <string>
118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Represents the set of icons for an extension.
138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass ExtensionIconSet {
148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen public:
15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ExtensionIconSet();
16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ~ExtensionIconSet();
17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
188ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Access to the underlying map from icon size->path.
198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  typedef std::map<int, std::string> IconMap;
208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  const IconMap& map() const { return map_; }
218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Remove all icons from the set.
238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  void Clear();
248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Add an icon to the set. If the specified size is already present, it is
268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // overwritten.
278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  void Add(int size, const std::string& path);
288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Get an icon from the set, optionally falling back to a smaller or bigger
308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // size. MatchType is exclusive (do not OR them together).
318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  enum MatchType {
328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    MATCH_EXACTLY,
338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    MATCH_BIGGER,
348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen    MATCH_SMALLER
358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  };
368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  std::string Get(int size, MatchType match_type) const;
378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  // Returns true if the set contains the specified path.
398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  bool ContainsPath(const std::string& path) const;
408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen private:
428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen  IconMap map_;
438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen};
448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen
458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#endif  // CHROME_COMMON_EXTENSIONS_EXTENSION_ICON_SET_H_
46