Refactor : Hide wayland operations from Window Manager
[apps/agl-service-windowmanager.git] / src / wm_layer.hpp
index 4dd4616..1d9435b 100644 (file)
  * limitations under the License.
  */
 
-#ifndef WM_LAYERS_H
-#define WM_LAYERS_H
+#ifndef WM_LAYER_HPP
+#define WM_LAYER_HPP
 
 #include <string>
+#include <vector>
+#include <unordered_map>
+#include <memory>
+#include "wm_error.hpp"
 
-#include "../include/json.hpp"
-#include "layout.hpp"
-#include "result.hpp"
-#include "wayland_ivi_wm.hpp"
+struct json_object;
 
 namespace wm
 {
 
-struct layer
+class WMLayer
 {
-    using json = nlohmann::json;
-
+  public:
+    explicit WMLayer(json_object* j);
+    ~WMLayer() = default;
     // A more or less descriptive name?
+    const std::string& layerName(){ return this->role_list;}
+    unsigned layerID(){ return this->layer_id;}
+    const std::string& roleList();
+    bool hasRole(const std::string& role);
+  private:
     std::string name = "";
     // The actual layer ID
-    int layer_id = -1;
-    // The rectangular region surfaces are allowed to draw on
-    // this layer.
-    compositor::rect rect;
+    int layer_id = 0;
+
     // Specify a role prefix for surfaces that should be
     // put on this layer.
-    std::string role;
-
-    mutable struct LayoutState state;
-
-    explicit layer(nlohmann::json const &j);
-
-    json to_json() const;
+    std::string role_list;
 };
 
-struct layer_map
-{
-    using json = nlohmann::json;
-
-    using storage_type = std::map<int, struct layer>;
-    using layers_type = std::vector<uint32_t>;
-    using role_to_layer_map = std::vector<std::pair<std::string, int>>;
-    using addsurf_layer_map = std::map<int, int>;
-
-    storage_type mapping; // map surface_id to layer
-    layers_type layers;   // the actual layer IDs we have
-    int main_surface;
-    std::string main_surface_name;
-    role_to_layer_map roles;
-    addsurf_layer_map surfaces; // additional surfaces on layers
-
-    optional<int> get_layer_id(int surface_id);
-    optional<int> get_layer_id(std::string const &role);
-    optional<struct LayoutState *> get_layout_state(int surface_id)
-    {
-        int layer_id = *this->get_layer_id(surface_id);
-        auto i = this->mapping.find(layer_id);
-        return i == this->mapping.end()
-                   ? nullopt
-                   : optional<struct LayoutState *>(&i->second.state);
-    }
-    optional<struct layer> get_layer(int layer_id)
-    {
-        auto i = this->mapping.find(layer_id);
-        return i == this->mapping.end() ? nullopt
-                                        : optional<struct layer>(i->second);
-    }
-
-    layers_type::size_type get_layers_count() const
-    {
-        return this->layers.size();
-    }
-
-    void add_surface(int surface_id, int layer_id)
-    {
-        this->surfaces[surface_id] = layer_id;
-    }
-
-    void remove_surface(int surface_id)
-    {
-        this->surfaces.erase(surface_id);
-    }
-
-    json to_json() const;
-    void setupArea(double scaling);
-    compositor::rect getAreaSize(const std::string &area);
-    int loadAreaDb();
-
-  private:
-    std::unordered_map<std::string, compositor::rect> area2size;
-
-    static const char *kDefaultAreaDb;
-};
-
-struct result<struct layer_map> to_layer_map(nlohmann::json const &j);
-
-static const nlohmann::json default_layers_json = {
-   {"main_surface", {
-      {"surface_role", "HomeScreen"}
-   }},
-   {"mappings", {
-      {
-         {"role", "^HomeScreen$"},
-         {"name", "HomeScreen"},
-         {"layer_id", 1000},
-         {"area", {
-            {"type", "full"}
-         }}
-      },
-      {
-         {"role", "MediaPlayer|Radio|Phone|Navigation|HVAC|Settings|Dashboard|POI|Mixer"},
-         {"name", "apps"},
-         {"layer_id", 1001},
-         {"area", {
-            {"type", "rect"},
-            {"rect", {
-               {"x", 0},
-               {"y", 218},
-               {"width", -1},
-               {"height", -433}
-            }}
-         }}
-      },
-      {
-         {"role", "^OnScreen.*"},
-         {"name", "popups"},
-         {"layer_id", 9999},
-         {"area", {
-            {"type", "rect"},
-            {"rect", {
-               {"x", 0},
-               {"y", 760},
-               {"width", -1},
-               {"height", 400}
-            }}
-         }}
-      }
-   }}
-};
 } // namespace wm
 
-#endif // WM_LAYERS_H
+#endif // WM_LAYER_HPP