Author: ilor
Date: Sat Jul 26 01:15:08 2008
New Revision: 28211

URL: http://svn.gna.org/viewcvs/wesnoth?rev=28211&view=rev
Log:
not yet used bit of editor palette rework

Added:
    trunk/src/editor2/terrain_group.cpp   (with props)
    trunk/src/editor2/terrain_group.hpp   (with props)

Added: trunk/src/editor2/terrain_group.cpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/editor2/terrain_group.cpp?rev=28211&view=auto
==============================================================================
--- trunk/src/editor2/terrain_group.cpp (added)
+++ trunk/src/editor2/terrain_group.cpp Sat Jul 26 01:15:08 2008
@@ -1,0 +1,129 @@
+/* $Id$ */
+/*
+   Copyright (C) 2008 by Tomasz Sniatowski <[EMAIL PROTECTED]>
+   Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License version 2
+   or at your option any later version.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY.
+
+   See the COPYING file for more details.
+*/
+
+#include "terrain_group.hpp"
+#include "editor_common.hpp"
+#include "../foreach.hpp"
+
+namespace editor2 {
+
+terrain_group::terrain_group(const config& cfg);
+: id_(cfg["id"]), name_(cfg["name"]), icon_string_(cfg["icon"])
+{
+}
+
+terrain_group::terrain_group(const std::string& id)
+: id_(id), name_(id), icon_string_()
+{
+}
+
+void terrain_group::add_terrain(t_translation::t_terrain terrain)
+{
+       terrains_.push_back(terrain);
+}
+
+const std::string terrain_palette::TERRAIN_GROUP_DEFAULT = "all";
+
+static bool is_invalid_terrain(t_translation::t_terrain c) {
+       return (c == t_translation::VOID_TERRAIN || c == t_translation::FOGGED);
+}
+
+terrain_palette::terrain_palette(const gamemap &map, const config& cfg)
+: map_(map), current_group_index_(0)
+{
+       // Get the available terrains
+       std::vector<t_translation::t_terrain> terrains = 
map_.get_terrain_list();
+       terrains.erase(std::remove_if(terrains.begin(), terrains.end(), 
is_invalid_terrain), terrains.end());
+       
+       // Get the available groups and add them to the structure
+    const config::child_list& group_configs = cfg.get_children("editor_group");
+       std::set<std::string> group_ids;
+       foreach (config* c, group_configs) {
+               if (group_ids.find((*c)["id"]) == group_ids.end()) {
+                       groups_.push_back(terrain_group(*c, gui));
+               } else {
+                       ERR_ED << "Duplicate terrain group: " << (*c)["id"] << 
"\n";
+               }
+       }
+       if (groups_.find(TERRAIN_GROUP_DEFAULT) == groups_.end()) {
+               ERR_ED << "No default (" << TERRAIN_GROUP_DEFAULT << ") terrain 
group defined!\n";
+               groups_.push_back(terrain_group(TERRAIN_GROUP_DEFAULT)));
+       }
+       std::map<std::string, terrain_group*> groups_map;
+       foreach (terrain_group& tg, groups_) {
+               groups_map.insert(std::make_pair(tg.get_id(), &tg));
+       }
+       
+       // add the groups for all terrains to the map
+       foreach (t_translation::t_terrain t, terrains) {
+        const terrain_type& t_info = map_.get_terrain_info(t);
+        // don't display terrains that were automatically created from 
base+overlay
+               if (t_info.is_combined()) continue;
+               
+               std::vector<std::string>& keys = 
utils::split(t_info.editor_group());           
+               foreach (std::string& key, keys) {
+                       std::map<std::string, terrain_group*>::iterator it = 
groups_map.find(key);
+                       if (it != groups_map.end()) {
+                               groups_map[key]->add_terrain(t);
+                       } else {
+                               WRN_ED << "Undefined terrain group used in 
terrain: " << key << "\n";
+                       }
+               }
+               // Add the terrain to the default group
+               groups_[TERRAIN_GROUP_DEFAULT].add_terrain(t);
+       }
+}
+
+terrain_palette::current_group()
+{
+       return groups_[current_group_index_];
+}
+
+int terrain_palette::groups_count()
+{
+       return groups_.size();
+}
+
+void terrain_palette::next_group();
+{
+       current_group_index_++;
+       current_group_index_ %= groups_.size();
+}
+
+void terrain_palette::prev_group()
+{
+       current_group_index_ += groups_size();
+       current_group_index_--;
+       current_group_index_ %= groups_.size();
+}
+
+void terrain_palette::set_group_index(int index)
+{
+       assert(index >= 0);
+       assert(index < groups_.size());
+       current_group_index_ = index;
+}
+
+void set_group(const std::string& id)
+{
+       int idx = 0;
+       while (idx < groups_.size() && groups_[idx].get_id() != id) idx++;
+       if (idx < groups_.size()) {
+               current_group_index_ = index;
+       } else {
+               ERR_ED << "Invalid terrain group id (" << id << ") in 
set_group\n";
+       }
+}
+
+} //end namespace editor2

Propchange: trunk/src/editor2/terrain_group.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: trunk/src/editor2/terrain_group.cpp
------------------------------------------------------------------------------
    svn:keywords = 'Author Date Id Revision'

Added: trunk/src/editor2/terrain_group.hpp
URL: 
http://svn.gna.org/viewcvs/wesnoth/trunk/src/editor2/terrain_group.hpp?rev=28211&view=auto
==============================================================================
--- trunk/src/editor2/terrain_group.hpp (added)
+++ trunk/src/editor2/terrain_group.hpp Sat Jul 26 01:15:08 2008
@@ -1,0 +1,66 @@
+/* $Id$ */
+/*
+   Copyright (C) 2008 by Tomasz Sniatowski <[EMAIL PROTECTED]>
+   Part of the Battle for Wesnoth Project http://www.wesnoth.org/
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License version 2
+   or at your option any later version.
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY.
+
+   See the COPYING file for more details.
+*/
+
+//! @file action.hpp
+//! Editor action classes
+
+#ifndef EDITOR2_TERRAIN_GROUP_HPP
+#define EDITOR2_TERRAIN_GROUP_HPP
+
+#include "action_base.hpp"
+#include "editor_map.hpp"
+#include "map_fragment.hpp"
+#include "../map.hpp"
+#include "../terrain.hpp"
+
+
+namespace editor2 {
+
+class terrain_group
+{
+public:
+       terrain_group(const config& cfg);
+       explicit terrain_group(const std::string id);
+       void add_terrain(t_translation::t_terrain terrain);
+       const std::string& get_id() const { return id_; }
+       std::vector<t_translation::t_terrain> get_terrains();
+       
+private:
+       std::string id_;
+       t_string name_;
+       std::string icon_string_;
+       std::vector<t_translation::t_terrain> terrains_;
+};
+
+class terrain_palette
+{
+public:
+       terrain_palette(const config& cfg, const gamemap& map);
+       terrain_group& current_group();
+       int groups_count();
+       void next_group();
+       void prev_group();
+       void set_group_index(int index);
+       void set_group(const std::string& id);
+       
+       static const std::string TERRAIN_GROUP_DEFAULT;
+private:
+       std::vector<terrain_group> groups_;
+       int current_group_index_;
+};
+
+
+} //end namespace editor2
+
+#endif

Propchange: trunk/src/editor2/terrain_group.hpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: trunk/src/editor2/terrain_group.hpp
------------------------------------------------------------------------------
    svn:keywords = 'Author Date Id Revision'


_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits

Reply via email to