mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-11 21:27:01 -04:00
linking refactor
This commit is contained in:
+42
-23
@@ -13,6 +13,7 @@
|
||||
#include <util/error.hpp>
|
||||
#include <data/filter.hpp>
|
||||
#include <data/field.hpp> // for Card::value
|
||||
#include <unordered_set>
|
||||
|
||||
class Game;
|
||||
class Dependency;
|
||||
@@ -23,8 +24,7 @@ DECLARE_POINTER_TYPE(Field);
|
||||
DECLARE_POINTER_TYPE(Value);
|
||||
DECLARE_POINTER_TYPE(StyleSheet);
|
||||
|
||||
#define THIS_LINKED_PAIRS(var) vector<pair<reference_wrapper<String>, reference_wrapper<String>>> var { make_pair(ref(linked_card_1), ref(linked_relation_1)), make_pair(ref(linked_card_2), ref(linked_relation_2)), make_pair(ref(linked_card_3), ref(linked_relation_3)), make_pair(ref(linked_card_4), ref(linked_relation_4)) }
|
||||
#define OTHER_LINKED_PAIRS(var, other_card) vector<pair<reference_wrapper<String>, reference_wrapper<String>>> var { make_pair(ref(other_card->linked_card_1), ref(other_card->linked_relation_1)), make_pair(ref(other_card->linked_card_2), ref(other_card->linked_relation_2)), make_pair(ref(other_card->linked_card_3), ref(other_card->linked_relation_3)), make_pair(ref(other_card->linked_card_4), ref(other_card->linked_relation_4)) }
|
||||
#define LINK_PAIRS(var, card) vector<pair<reference_wrapper<String>, reference_wrapper<String>>> var { make_pair(ref(card->linked_card_1), ref(card->linked_relation_1)), make_pair(ref(card->linked_card_2), ref(card->linked_relation_2)), make_pair(ref(card->linked_card_3), ref(card->linked_relation_3)), make_pair(ref(card->linked_card_4), ref(card->linked_relation_4)) }
|
||||
|
||||
// ----------------------------------------------------------------------------- : Card
|
||||
|
||||
@@ -80,27 +80,6 @@ public:
|
||||
/// Does any field contains the given query string?
|
||||
bool contains(QuickFilterPart const& query) const;
|
||||
|
||||
/// Link or unlink other cards to this card
|
||||
void link(const Set& set, const vector<CardP>& linked_cards, const String& selected_relation, const String& linked_relation);
|
||||
void link(const Set& set, CardP& linked_card, const String& selected_relation, const String& linked_relation);
|
||||
void unlink(const vector<CardP>& linked_cards);
|
||||
pair<String, String> unlink(CardP& unlinked_card); // Returns the relations that were deleted, so we can undo
|
||||
|
||||
void copyLink(const Set& set, String old_uid, String new_uid);
|
||||
void updateLink(String old_uid, String new_uid);
|
||||
|
||||
vector<pair<CardP, String>> getLinkedCards(const vector<CardP>& cards);
|
||||
vector<pair<CardP, String>> getLinkedCards(const Set& set);
|
||||
|
||||
vector<CardP> getLinkedCardsFromLink(const vector<CardP>& cards, const String& link, bool erase_if_no_card);
|
||||
vector<CardP> getLinkedCardsFromLink(const Set& set, const String& link, bool erase_if_no_card);
|
||||
|
||||
CardP getLinkedOtherFace(const vector<CardP>& cards);
|
||||
CardP getLinkedOtherFace(const Set& set);
|
||||
|
||||
static CardP getCardFromUid(const vector<CardP>& cards, const String& uid);
|
||||
static CardP getCardFromUid(const Set& set, const String& uid);
|
||||
|
||||
/// Find a value in the data by name and type
|
||||
template <typename T> T& value(const String& name) {
|
||||
for(IndexMap<FieldP, ValueP>::iterator it = data.begin() ; it != data.end() ; ++it) {
|
||||
@@ -122,6 +101,46 @@ public:
|
||||
}
|
||||
throw InternalError(_("Expected a card field with name '")+name+_("'"));
|
||||
}
|
||||
|
||||
/// Find the index of a free link slot to write to. Returns -1 if not found.
|
||||
int findFreeLink (const String& linked_uid, const unordered_set<String>& all_existing_uids);
|
||||
vector<int> findFreeLinks(vector<String>& linked_uids, const unordered_set<String>& all_existing_uids);
|
||||
|
||||
/// Find the index of a link slot that references the linked_uid. Returns -1 if not found.
|
||||
int findUIDLink(const String& linked_uid);
|
||||
/// Find all indexes of link slots that references the linked_relation.
|
||||
vector<int> findRelationLinks(const String& linked_relation);
|
||||
|
||||
/// Get a reference to the linked uid slot.
|
||||
String& getLinkedUID (int index);
|
||||
/// Get a reference to the linked relation slot.
|
||||
String& getLinkedRelation(int index);
|
||||
|
||||
/// Make all links that point to old_uid point to new_uid instead.
|
||||
void updateLinkedUID(const String& old_uid, const String& new_uid);
|
||||
/// Make all links that have old_relation have new_relation instead. Not needed apparently.
|
||||
//void updateLinkedRelation(const String& old_relation, const String& new_relation);
|
||||
|
||||
/// Get the card with the given uid.
|
||||
static CardP getUIDCard(const vector<CardP>& cards, const String& uid);
|
||||
static CardP getUIDCard(const Set& set, const String& uid);
|
||||
/// Get all the cards linked to this card with the given relation.
|
||||
vector<CardP> getLinkedRelationCards(const vector<CardP>& cards, const String& linked_relation, bool erase_if_no_card = true);
|
||||
vector<CardP> getLinkedRelationCards(const Set& set, const String& linked_relation, bool erase_if_no_card = true);
|
||||
|
||||
/// Get all the cards linked to this card.
|
||||
vector<pair<CardP, String>> getLinkedCards(const vector<CardP>& cards);
|
||||
vector<pair<CardP, String>> getLinkedCards(const Set& set);
|
||||
|
||||
/// Get the back face or front face of this card.
|
||||
CardP getLinkedOtherFaceCard(const vector<CardP>& cards);
|
||||
CardP getLinkedOtherFaceCard(const Set& set);
|
||||
|
||||
/// Link a card to this card.
|
||||
void addLink(const Set& set, CardP& linked_card, const String& selected_relation, const String& linked_relation);
|
||||
|
||||
/// Unlink a card from this card.
|
||||
void removeLink(const CardP& linked_card);
|
||||
|
||||
DECLARE_REFLECTION();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user