Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
1da5c637
Commit
1da5c637
authored
Jun 03, 2009
by
Max-Wilhelm Bruker
Browse files
deck editor
parent
3502ec80
Changes
9
Show whitespace changes
Inline
Side-by-side
cockatrice/src/carddatabasemodel.cpp
View file @
1da5c637
...
...
@@ -11,15 +11,13 @@ CardDatabaseModel::~CardDatabaseModel()
}
int
CardDatabaseModel
::
rowCount
(
const
QModelIndex
&
parent
)
const
int
CardDatabaseModel
::
rowCount
(
const
QModelIndex
&
/*
parent
*/
)
const
{
Q_UNUSED
(
parent
);
return
cardList
.
size
();
}
int
CardDatabaseModel
::
columnCount
(
const
QModelIndex
&
parent
)
const
int
CardDatabaseModel
::
columnCount
(
const
QModelIndex
&
/*
parent
*/
)
const
{
Q_UNUSED
(
parent
);
return
5
;
}
...
...
cockatrice/src/decklist.cpp
View file @
1da5c637
...
...
@@ -4,6 +4,7 @@
#include
<QXmlStreamReader>
#include
<QXmlStreamWriter>
#include
<QProgressDialog>
#include
<QVariant>
#include
"decklist.h"
#include
"carddatabase.h"
...
...
@@ -14,6 +15,14 @@ AbstractDecklistNode::AbstractDecklistNode(InnerDecklistNode *_parent)
parent
->
append
(
this
);
}
int
AbstractDecklistNode
::
depth
()
const
{
if
(
parent
)
return
parent
->
depth
()
+
1
;
else
return
0
;
}
InnerDecklistNode
::~
InnerDecklistNode
()
{
clearTree
();
...
...
@@ -26,33 +35,83 @@ QString InnerDecklistNode::getVisibleName() const
else
if
(
name
==
"side"
)
return
QObject
::
tr
(
"Sideboard"
);
else
return
QString
();
return
getName
();
}
void
InnerDecklistNode
::
clearTree
()
{
for
(
int
i
=
0
;
i
<
size
();
i
++
)
delete
at
(
i
);
clear
();
}
int
InnerDecklistNode
::
recursiveCount
()
const
AbstractDecklistNode
*
InnerDecklistNode
::
findChild
(
const
QString
&
name
)
{
for
(
int
i
=
0
;
i
<
size
();
i
++
)
if
(
at
(
i
)
->
getName
()
==
name
)
return
at
(
i
);
return
0
;
}
int
InnerDecklistNode
::
recursiveCount
(
bool
countTotalCards
)
const
{
int
result
=
0
;
for
(
int
i
=
0
;
i
<
size
();
i
++
)
{
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
at
(
i
));
if
(
node
)
result
+=
node
->
recursiveCount
();
result
+=
node
->
recursiveCount
(
countTotalCards
);
else
if
(
countTotalCards
)
result
+=
dynamic_cast
<
AbstractDecklistCardNode
*>
(
at
(
i
))
->
getNumber
();
else
result
+=
1
;
}
return
result
;
}
bool
InnerDecklistNode
::
compare
(
AbstractDecklistNode
*
other
)
const
{
InnerDecklistNode
*
other2
=
dynamic_cast
<
InnerDecklistNode
*>
(
other
);
if
(
other2
)
return
(
getName
()
>
other
->
getName
());
else
return
false
;
}
bool
AbstractDecklistCardNode
::
compare
(
AbstractDecklistNode
*
other
)
const
{
AbstractDecklistCardNode
*
other2
=
dynamic_cast
<
AbstractDecklistCardNode
*>
(
other
);
if
(
other2
)
return
(
getName
()
>
other
->
getName
());
else
return
true
;
}
class
InnerDecklistNode
::
compareFunctor
{
private:
Qt
::
SortOrder
order
;
public:
compareFunctor
(
Qt
::
SortOrder
_order
)
:
order
(
_order
)
{
}
inline
bool
operator
()(
AbstractDecklistNode
*
a
,
AbstractDecklistNode
*
b
)
const
{
return
(
order
==
Qt
::
AscendingOrder
)
^
(
a
->
compare
(
b
));
}
};
void
InnerDecklistNode
::
sort
(
Qt
::
SortOrder
order
)
{
compareFunctor
cmp
(
order
);
qSort
(
begin
(),
end
(),
cmp
);
for
(
int
i
=
0
;
i
<
size
();
i
++
)
{
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
at
(
i
));
if
(
node
)
node
->
sort
(
order
);
}
}
DeckList
::
DeckList
(
CardDatabase
*
_db
,
QObject
*
parent
)
:
QObject
(
parent
),
db
(
_db
)
{
root
=
new
InnerDecklistNode
;
initZones
();
}
DeckList
::~
DeckList
()
...
...
@@ -60,6 +119,25 @@ DeckList::~DeckList()
delete
root
;
}
QXmlStreamReader
&
operator
>>
(
QXmlStreamReader
&
xml
,
InnerDecklistNode
*
node
)
{
while
(
!
xml
.
atEnd
())
{
if
(
xml
.
readNext
()
==
QXmlStreamReader
::
EndElement
)
break
;
if
(
xml
.
name
()
==
"zone"
)
xml
>>
new
InnerDecklistNode
(
xml
.
attributes
().
value
(
"name"
).
toString
(),
node
);
else
if
(
xml
.
name
()
==
"card"
)
{
const
int
number
=
xml
.
attributes
().
value
(
"number"
).
toString
().
toInt
();
const
QString
card
=
xml
.
attributes
().
value
(
"name"
).
toString
();
new
DecklistCardNode
(
card
,
number
,
node
);
while
(
!
xml
.
atEnd
())
if
(
xml
.
readNext
()
==
QXmlStreamReader
::
EndElement
)
break
;
}
}
return
xml
;
}
bool
DeckList
::
loadFromFile_Native
(
QIODevice
*
device
)
{
QXmlStreamReader
xml
(
device
);
...
...
@@ -74,30 +152,35 @@ bool DeckList::loadFromFile_Native(QIODevice *device)
name
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"comments"
)
comments
=
xml
.
readElementText
();
else
if
(
xml
.
name
()
==
"zone"
)
{
InnerDecklistNode
*
node
=
new
InnerDecklistNode
(
xml
.
attributes
().
value
(
"name"
).
toString
(),
root
);
while
(
!
xml
.
atEnd
())
{
if
(
xml
.
readNext
()
==
QXmlStreamReader
::
EndElement
)
break
;
if
(
xml
.
name
()
==
"card"
)
{
const
int
number
=
xml
.
attributes
().
value
(
"number"
).
toString
().
toInt
();
const
QString
card
=
xml
.
attributes
().
value
(
"name"
).
toString
();
new
DecklistCardNode
(
card
,
number
,
node
);
while
(
!
xml
.
atEnd
())
if
(
xml
.
readNext
()
==
QXmlStreamReader
::
EndElement
)
break
;
}
}
}
else
if
(
xml
.
name
()
==
"zone"
)
xml
>>
new
InnerDecklistNode
(
xml
.
attributes
().
value
(
"name"
).
toString
(),
root
);
}
}
}
return
true
;
}
QXmlStreamWriter
&
operator
<<
(
QXmlStreamWriter
&
xml
,
const
AbstractDecklistNode
*
node
)
{
const
InnerDecklistNode
*
inner
=
dynamic_cast
<
const
InnerDecklistNode
*>
(
node
);
if
(
inner
)
{
xml
.
writeStartElement
(
"zone"
);
xml
.
writeAttribute
(
"name"
,
inner
->
getName
());
for
(
int
i
=
0
;
i
<
inner
->
size
();
i
++
)
xml
<<
inner
->
at
(
i
);
xml
.
writeEndElement
();
// zone
}
else
{
const
AbstractDecklistCardNode
*
card
=
dynamic_cast
<
const
AbstractDecklistCardNode
*>
(
node
);
xml
.
writeEmptyElement
(
"card"
);
xml
.
writeAttribute
(
"number"
,
QString
::
number
(
card
->
getNumber
()));
xml
.
writeAttribute
(
"name"
,
card
->
getName
());
}
return
xml
;
}
bool
DeckList
::
saveToFile_Native
(
QIODevice
*
device
)
{
/*
QXmlStreamWriter xml(device);
QXmlStreamWriter
xml
(
device
);
xml
.
setAutoFormatting
(
true
);
xml
.
writeStartDocument
();
...
...
@@ -106,27 +189,18 @@ bool DeckList::saveToFile_Native(QIODevice *device)
xml
.
writeTextElement
(
"deckname"
,
name
);
xml
.
writeTextElement
(
"comments"
,
comments
);
for (int i = 0; i < zones.size(); i++) {
xml.writeStartElement("zone");
xml.writeAttribute("name", zones[i]->getName());
for (int j = 0; j < zones[i]->size(); j++) {
DecklistRow *r = zones[i]->at(j);
xml.writeEmptyElement("card");
xml.writeAttribute("number", QString::number(r->getNumber()));
xml.writeAttribute("name", r->getCard());
}
xml.writeEndElement(); // zone
}
for
(
int
i
=
0
;
i
<
root
->
size
();
i
++
)
xml
<<
root
->
at
(
i
);
xml
.
writeEndElement
();
// cockatrice_deck
xml
.
writeEndDocument
();
return
true
;
*/
}
}
bool
DeckList
::
loadFromFile_Plain
(
QIODevice
*
device
)
{
/* initZones()
;
InnerDecklistNode
*
main
=
0
,
*
side
=
0
;
QTextStream
in
(
device
);
while
(
!
in
.
atEnd
())
{
...
...
@@ -134,12 +208,17 @@ bool DeckList::loadFromFile_Plain(QIODevice *device)
if
(
line
.
startsWith
(
"//"
))
continue
;
Decklist
Zon
e *zone;
Inner
Decklist
Nod
e
*
zone
;
if
(
line
.
startsWith
(
"SB:"
,
Qt
::
CaseInsensitive
))
{
line
=
line
.
mid
(
3
).
trimmed
();
zone = zones[1];
} else
zone = zones[0];
if
(
!
side
)
side
=
new
InnerDecklistNode
(
"side"
,
root
);
zone
=
side
;
}
else
{
if
(
!
main
)
main
=
new
InnerDecklistNode
(
"main"
,
root
);
zone
=
main
;
}
// Filter out MWS edition symbols and basic land extras
QRegExp
rx
(
"
\\
[.*
\\
]"
);
...
...
@@ -153,21 +232,24 @@ bool DeckList::loadFromFile_Plain(QIODevice *device)
int
number
=
line
.
left
(
i
).
toInt
(
&
ok
);
if
(
!
ok
)
continue
;
zone->append(new DecklistRow(number,
line.mid(i + 1)
)
);
new
DecklistCardNode
(
line
.
mid
(
i
+
1
)
,
number
,
zone
);
}
return
true
;
*/
}
}
bool
DeckList
::
saveToFile_Plain
(
QIODevice
*
device
)
{
/* QTextStream out(device);
for (int i = 0; i < zones.size(); i++)
for (int j = 0; j < zones[i]->size(); j++) {
DecklistRow *r = zones[i]->at(j);
out << QString("%1%2 %3\n").arg(zones[i]->getName() == "side" ? "SB: " : "").arg(r->getNumber()).arg(r->getCard());
// Support for this is only possible if the internal structure doesn't get more complicated.
QTextStream
out
(
device
);
for
(
int
i
=
0
;
i
<
root
->
size
();
i
++
)
{
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
root
->
at
(
i
));
for
(
int
j
=
0
;
j
<
node
->
size
();
j
++
)
{
DecklistCardNode
*
card
=
dynamic_cast
<
DecklistCardNode
*>
(
node
->
at
(
j
));
out
<<
QString
(
"%1%2 %3
\n
"
).
arg
(
node
->
getName
()
==
"side"
?
"SB: "
:
""
).
arg
(
card
->
getNumber
()).
arg
(
card
->
getName
());
}
}
return
true
;
*/
}
}
bool
DeckList
::
loadFromFile
(
const
QString
&
fileName
,
FileFormat
fmt
,
QWidget
*
parent
)
{
...
...
@@ -286,9 +368,34 @@ void DeckList::cleanList()
setComments
();
}
void
DeckList
::
initZones
()
DecklistCardNode
*
DeckList
::
addCard
(
const
QString
&
cardName
,
const
QString
&
zoneName
)
{
InnerDecklistNode
*
zoneNode
=
dynamic_cast
<
InnerDecklistNode
*>
(
root
->
findChild
(
zoneName
));
if
(
!
zoneNode
)
zoneNode
=
new
InnerDecklistNode
(
zoneName
,
root
);
return
new
DecklistCardNode
(
cardName
,
1
,
zoneNode
);
}
bool
DeckList
::
deleteNode
(
AbstractDecklistNode
*
node
,
InnerDecklistNode
*
rootNode
)
{
/* // possibly Magic specific
zones.append(new DecklistZone("main"));
zones.append(new DecklistZone("side"));
*/
}
if
(
node
==
root
)
return
true
;
if
(
!
rootNode
)
rootNode
=
root
;
int
index
=
rootNode
->
indexOf
(
node
);
if
(
index
!=
-
1
)
{
delete
rootNode
->
takeAt
(
index
);
if
(
!
rootNode
->
size
())
deleteNode
(
rootNode
,
rootNode
->
getParent
());
return
true
;
}
for
(
int
i
=
0
;
i
<
rootNode
->
size
();
i
++
)
{
InnerDecklistNode
*
inner
=
dynamic_cast
<
InnerDecklistNode
*>
(
rootNode
->
at
(
i
));
if
(
inner
)
if
(
deleteNode
(
node
,
inner
))
return
true
;
}
return
false
;
}
cockatrice/src/decklist.h
View file @
1da5c637
...
...
@@ -15,32 +15,45 @@ protected:
InnerDecklistNode
*
parent
;
public:
AbstractDecklistNode
(
InnerDecklistNode
*
_parent
=
0
);
virtual
bool
hasChildren
()
const
=
0
;
virtual
QString
getName
()
const
=
0
;
const
InnerDecklistNode
*
getParent
()
const
{
return
parent
;
}
InnerDecklistNode
*
getParent
()
const
{
return
parent
;
}
int
depth
()
const
;
virtual
bool
compare
(
AbstractDecklistNode
*
other
)
const
=
0
;
};
class
InnerDecklistNode
:
public
AbstractDecklistNode
,
public
QList
<
AbstractDecklistNode
*>
{
private:
QString
name
;
class
compareFunctor
;
public:
InnerDecklistNode
(
const
QString
&
_name
=
QString
(),
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistNode
(
_parent
),
name
(
_name
)
{
}
~
InnerDecklistNode
();
bool
hasChildren
()
const
{
return
true
;
}
QString
getName
()
const
{
return
name
;
}
void
setName
(
const
QString
&
_name
)
{
name
=
_name
;
}
virtual
QString
getVisibleName
()
const
;
void
clearTree
();
int
recursiveCount
()
const
;
AbstractDecklistNode
*
findChild
(
const
QString
&
name
);
int
recursiveCount
(
bool
countTotalCards
=
false
)
const
;
bool
compare
(
AbstractDecklistNode
*
other
)
const
;
void
sort
(
Qt
::
SortOrder
order
=
Qt
::
AscendingOrder
);
};
class
DecklistCardNode
:
public
AbstractDecklistNode
{
class
AbstractDecklistCardNode
:
public
AbstractDecklistNode
{
public:
AbstractDecklistCardNode
(
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistNode
(
_parent
)
{
}
virtual
int
getNumber
()
const
=
0
;
virtual
void
setNumber
(
int
_number
)
=
0
;
virtual
QString
getName
()
const
=
0
;
virtual
void
setName
(
const
QString
&
_name
)
=
0
;
bool
compare
(
AbstractDecklistNode
*
other
)
const
;
};
class
DecklistCardNode
:
public
AbstractDecklistCardNode
{
private:
QString
name
;
int
number
;
public:
DecklistCardNode
(
const
QString
&
_name
=
QString
(),
int
_number
=
1
,
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistNode
(
_parent
),
name
(
_name
),
number
(
_number
)
{
}
bool
hasChildren
()
const
{
return
false
;
}
DecklistCardNode
(
const
QString
&
_name
=
QString
(),
int
_number
=
1
,
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistCardNode
(
_parent
),
name
(
_name
),
number
(
_number
)
{
}
int
getNumber
()
const
{
return
number
;
}
void
setNumber
(
int
_number
)
{
number
=
_number
;
}
QString
getName
()
const
{
return
name
;
}
...
...
@@ -83,9 +96,10 @@ public:
bool
saveDialog
(
QWidget
*
parent
=
0
);
void
cleanList
();
void
initZones
();
InnerDecklistNode
*
getRoot
()
const
{
return
root
;
}
DecklistCardNode
*
addCard
(
const
QString
&
cardName
,
const
QString
&
zoneName
);
bool
deleteNode
(
AbstractDecklistNode
*
node
,
InnerDecklistNode
*
rootNode
=
0
);
};
#endif
cockatrice/src/decklistmodel.cpp
View file @
1da5c637
...
...
@@ -17,18 +17,15 @@ DeckListModel::~DeckListModel()
{
}
void
DeckListModel
::
debugIndexInfo
(
const
QString
&
func
,
const
QModelIndex
&
index
)
const
{
quint32
id
=
index
.
internalId
();
// 32 bit int, from MSB to LSB:
int
zone
=
id
>>
30
;
// 2 bits - zone
int
cardtype
=
(
id
>>
25
)
&
0x1f
;
// 5 bits - card type
int
card
=
(
id
>>
3
)
&
0x3fffff
;
// 22 bits - card
int
column
=
id
&
0x7
;
// 3 bits - column
if
(
index
.
isValid
())
qDebug
(
QString
(
"index: function = %1, zone = %2, cardtype = %3, card = %4, column = %5"
).
arg
(
func
).
arg
(
zone
).
arg
(
cardtype
).
arg
(
card
).
arg
(
column
).
toLatin1
());
else
qDebug
(
QString
(
"index: function = %1, invalid"
).
arg
(
func
).
toLatin1
());
if
(
!
index
.
isValid
())
qDebug
(
QString
(
"debugIndexInfo: %1: index invalid"
).
arg
(
func
).
toLatin1
());
else
if
(
InnerDecklistNode
*
node
=
getNode
<
InnerDecklistNode
*>
(
index
))
qDebug
(
QString
(
"debugIndexInfo: %1: INNER index '%2', row=%3, col=%4"
).
arg
(
func
).
arg
(
node
->
getName
()).
arg
(
index
.
row
()).
arg
(
index
.
column
()).
toLatin1
());
else
if
(
DecklistModelCardNode
*
node
=
getNode
<
DecklistModelCardNode
*>
(
index
))
qDebug
(
QString
(
"debugIndexInfo: %1: CARD index '%2', row=%3, col=%4"
).
arg
(
func
).
arg
(
node
->
getName
()).
arg
(
index
.
row
()).
arg
(
index
.
column
()).
toLatin1
());
}
void
DeckListModel
::
debugShowTree
(
InnerDecklistNode
*
node
,
int
depth
)
const
...
...
@@ -44,6 +41,7 @@ void DeckListModel::debugShowTree(InnerDecklistNode *node, int depth) const
}
}
void
DeckListModel
::
rebuildTree
()
{
root
->
clearTree
();
...
...
@@ -55,75 +53,25 @@ void DeckListModel::rebuildTree()
DecklistCardNode
*
currentCard
=
dynamic_cast
<
DecklistCardNode
*>
(
currentZone
->
at
(
j
));
QString
cardType
=
db
->
getCard
(
currentCard
->
getName
())
->
getMainCardType
();
InnerDecklistNode
*
cardTypeNode
=
dynamic_cast
<
InnerDecklistNode
*>
(
findNode
(
cardType
,
node
));
InnerDecklistNode
*
cardTypeNode
=
dynamic_cast
<
InnerDecklistNode
*>
(
node
->
findChild
(
cardType
));
if
(
!
cardTypeNode
)
cardTypeNode
=
new
InnerDecklistNode
(
cardType
,
node
);
DecklistModelCardNode
*
newCard
=
new
DecklistModelCardNode
(
currentCard
,
cardTypeNode
);
new
DecklistModelCardNode
(
currentCard
,
cardTypeNode
);
}
}
debugShowTree
(
root
,
0
);
reset
();
}
AbstractDecklistNode
*
DeckListModel
::
findNode
(
const
QString
&
name
,
InnerDecklistNode
*
root
)
const
{
for
(
int
i
=
0
;
i
<
root
->
size
();
i
++
)
if
(
root
->
at
(
i
)
->
getName
()
==
name
)
return
root
->
at
(
i
);
return
0
;
}
AbstractDecklistNode
*
DeckListModel
::
findNode
(
const
QModelIndex
&
index
)
const
{
// debugIndexInfo("findNode", index);
if
(
index
.
isValid
())
{
InnerDecklistNode
*
parentNode
=
dynamic_cast
<
InnerDecklistNode
*>
(
findNode
(
index
.
parent
()));
return
parentNode
->
at
(
index
.
row
());
}
else
return
root
;
}
int
DeckListModel
::
rowCount
(
const
QModelIndex
&
parent
)
const
{
// debugIndexInfo("rowCount", parent);
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
findNode
(
parent
));
if
(
node
)
{
// qDebug(QString(" rowCount: return %1").arg(node->size()).toLatin1());
InnerDecklistNode
*
node
=
getNode
<
InnerDecklistNode
*>
(
parent
);
if
(
node
)
return
node
->
size
();
}
else
{
// qDebug(" rowCount: return const 0");
else
return
0
;
}
}
bool
DeckListModel
::
hasChildren
(
const
QModelIndex
&
parent
)
const
{
// debugIndexInfo("hasChildren", parent);
if
(
!
parent
.
isValid
()
&&
root
->
size
())
return
true
;
if
(
parent
.
column
()
!=
0
)
return
false
;
/*
InnerDecklistNode *node = dynamic_cast<InnerDecklistNode *>(findNode(parent));
if (!node)
qDebug("line 109: return false");
return false;
}
qDebug(QString("line 112: return %1").arg(node->size()).toLatin1());
return node->size();
if (!parent.isValid())
return true;
qDebug(QString(" hasChildren: return %1").arg((!parent.column() && (((parent.internalId() >> 3) & 0x3fffff) == 0x3fffff))).toLatin1());
*/
// An item (possibly) has children if its column is zero and its card is -1.
return
(
!
parent
.
column
()
&&
(((
parent
.
internalId
()
>>
3
)
&
0x3fffff
)
==
0x3fffff
));
}
int
DeckListModel
::
columnCount
(
const
QModelIndex
&
/*parent*/
)
const
{
return
2
;
}
QVariant
DeckListModel
::
data
(
const
QModelIndex
&
index
,
int
role
)
const
...
...
@@ -134,11 +82,10 @@ QVariant DeckListModel::data(const QModelIndex &index, int role) const
if
(
index
.
column
()
>=
2
)
return
QVariant
();
AbstractDecklistNode
*
tempNode
=
findNode
(
index
);
if
(
tempNode
==
root
)
return
QVariant
();
if
(
tempNode
->
hasChildren
())
{
AbstractDecklistNode
*
temp
=
static_cast
<
AbstractDecklistNode
*>
(
index
.
internalPointer
());
DecklistModelCardNode
*
card
=
dynamic_cast
<
DecklistModelCardNode
*>
(
temp
);
if
(
!
card
)
{
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
temp
);
switch
(
role
)
{
case
Qt
::
FontRole
:
{
QFont
f
;
...
...
@@ -146,27 +93,25 @@ QVariant DeckListModel::data(const QModelIndex &index, int role) const
return
f
;
}
case
Qt
::
DisplayRole
:
case
Qt
::
EditRole
:
{
case
Qt
::
EditRole
:
switch
(
index
.
column
())
{
case
0
:
{
InnerDecklistNode
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
tempNode
);
return
node
->
getVisibleName
();
}
case
0
:
return
node
->
recursiveCount
(
true
);
case
1
:
return
node
->
getVisibleName
();
default:
return
QVariant
();
}
case
Qt
::
BackgroundRole
:
{
int
color
=
90
+
60
*
node
->
depth
();
return
QBrush
(
QColor
(
color
,
255
,
color
));
}
case
Qt
::
BackgroundRole
:
return
QBrush
(
QColor
(
200
,
255
,
200
));
default:
return
QVariant
();
}
}
else
{
switch
(
role
)
{
case
Qt
::
DisplayRole
:
case
Qt
::
EditRole
:
{
DecklistModelCardNode
*
node
=
dynamic_cast
<
DecklistModelCardNode
*>
(
tempNode
);
switch
(
index
.
column
())
{
case
0
:
return
node
->
getNumber
();
case
1
:
return
node
->
getName
();
case
0
:
return
card
->
getNumber
();
case
1
:
return
card
->
getName
();
default:
return
QVariant
();
}
}
...
...
@@ -181,9 +126,7 @@ QVariant DeckListModel::data(const QModelIndex &index, int role) const
QVariant
DeckListModel
::
headerData
(
int
section
,
Qt
::
Orientation
orientation
,
int
role
)
const
{
if
(
role
!=
Qt
::
DisplayRole
)
return
QVariant
();
if
(
orientation
!=
Qt
::
Horizontal
)
if
((
role
!=
Qt
::
DisplayRole
)
||
(
orientation
!=
Qt
::
Horizontal
))
return
QVariant
();
switch
(
section
)
{
case
0
:
return
QString
(
tr
(
"Number"
));
...
...
@@ -195,52 +138,31 @@ QVariant DeckListModel::headerData(int section, Qt::Orientation orientation, int
QModelIndex
DeckListModel
::
index
(
int
row
,
int
column
,
const
QModelIndex
&
parent
)
const
{
// debugIndexInfo("index", parent);
// for explanation of the bit shifting, look at parent()
int
indexZone
,
indexCardType
,
indexCard
;
if
(
!
parent
.
isValid
())
{
indexZone
=
row
;
indexCardType
=
0x1f
;
indexCard
=
0x3fffff
;
}
else
{
quint32
pid
=
parent
.
internalId
();
indexZone
=
pid
>>
30
;
int
pcardtype
=
(
pid
>>
25
)
&
0x1f
;
if
(
!
hasIndex
(
row
,
column
,
parent
))
return
QModelIndex
();
if
(
pcardtype
==
0x1f
)
{
indexCardType
=
row
;
indexCard
=
0x3fffff
;
}
else
{
indexCardType
=
pcardtype
;
indexCard
=
row
;
}
}
InnerDecklistNode
*
parentNode
=
getNode
<
InnerDecklistNode
*>
(
parent
);
if
(
row
>=
parentNode
->
size
())
return
QModelIndex
();
// qDebug(QString("index(): zone = %1, cardtype = %2, card = %3, column = %4").arg(indexZone).arg(indexCardType).arg(indexCard).arg(column).toLatin1());
return
createIndex
(
row
,
column
,
(
indexZone
<<
30
)
+
(
indexCardType
<<
25
)
+
(
indexCard
<<
3
)
+
column
);
return
createIndex
(
row
,
column
,
parentNode
->
at
(
row
));
}
QModelIndex
DeckListModel
::
parent
(
const
QModelIndex
&
ind
)
const
{
// debugIndexInfo("parent", ind);
quint32
id
=
ind
.
internalId
();
// 32 bit int, from MSB to LSB:
int
zone
=
id
>>
30
;
// 2 bits - zone
int
cardtype
=
(
id
>>
25
)
&
0x1f
;
// 5 bits - card type
int
card
=
(
id
>>
3
)
&
0x3fffff
;
// 22 bits - card
// int column = id & 0x7; // 3 bits - column
if
(
cardtype
==
0x1f
)
if
(
!
ind
.
isValid
())
return
QModelIndex
();
else
if
(
card
==
0x3fffff
)
return
index
(
zone
,
0
);
else
return
index
(
cardtype
,
0
,
index
(
zone
,
0
));
return
nodeToIndex
(
static_cast
<
AbstractDecklistNode
*>
(
ind
.
internalPointer
())
->
getParent
());
}
Qt
::
ItemFlags
DeckListModel
::
flags
(
const
QModelIndex
&
index
)
const
{
if
(
!
index
.
isValid
())
return
0
;
Qt
::
ItemFlags
result
=
Qt
::
ItemIsEnabled
;
if
(
((
index
.
internalId
()
>>
3
)
&
0x3fffff
)
!=
0x3fffff
)
{
if
(
getNode
<
DecklistModelCardNode
*>
(
index
)
)
{
result
|=
Qt
::
ItemIsSelectable
;
if
(
index
.
column
()
==
0
)
result
|=
Qt
::
ItemIsEditable
;
...
...
@@ -250,7 +172,7 @@ Qt::ItemFlags DeckListModel::flags(const QModelIndex &index) const
bool
DeckListModel
::
setData
(
const
QModelIndex
&
index
,
const
QVariant
&
value
,
int
role
)
{
DecklistModelCardNode
*
node
=
dynamic_cast
<
DecklistModelCardNode
*>
(
findNode
(
index
)
)
;
DecklistModelCardNode
*
node
=
getNode
<
DecklistModelCardNode
*>
(
index
);
if
(
!
node
||
(
role
!=
Qt
::
EditRole
))
return
false
;
...
...
@@ -265,46 +187,80 @@ bool DeckListModel::setData(const QModelIndex &index, const QVariant &value, int
bool
DeckListModel
::
removeRows
(
int
row
,
int
count
,
const
QModelIndex
&
parent
)
{
/* DecklistNode *node = findNode(parent);
debugIndexInfo
(
"removeRows"
,
parent
);
InnerDecklistNode
*
node
=
getNode
<
InnerDecklistNode
*>
(
parent
);
if
(
!
node
)
return
false
;
if
(
row
+
count
>
node
->
size
())
return
false
;
beginRemoveRows
(
parent
,
row
,
row
+
count
-
1
);
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
AbstractDecklistNode
*
toDelete
=
node
->
takeAt
(
row
);
if
(
DecklistModelCardNode
*
temp
=
dynamic_cast
<
DecklistModelCardNode
*>
(
toDelete
))
deckList
->
deleteNode
(
temp
->
getDataNode
());
delete
toDelete
;
}
endRemoveRows
();
for (int i = 0; i < count; i++
)
delete node->takeAt(row
);
if
(
!
node
->
size
()
&&
(
node
!=
root
)
)
removeRows
(
parent
.
row
(),
1
,
parent
.
parent
()
);
endRemoveRows();
return
true
;
*/
}
/*
void DeckListModel::insertCard(...)
{
}
void
DeckListModel::re
moveCard(...
)
InnerDecklistNode
*
DeckListModel
::
c
re
ateNodeIfNeeded
(
const
QString
&
name
,
InnerDecklistNode
*
parent
)
{
InnerDecklistNode
*
newNode
=
dynamic_cast
<
InnerDecklistNode
*>
(
parent
->
findChild
(
name
));
if
(
!
newNode
)
{
beginInsertRows
(
nodeToIndex
(
parent
),
parent
->
size
(),
parent
->
size
());
newNode
=
new
InnerDecklistNode
(
name
,
parent
);
endInsertRows
();
}
return
newNode
;
}
*/
bool
DeckListModel
::
insertRows
(
int
row
,
int
count
,
const
QModelIndex
&
parent
)
{
/*
// Inserting zones is not supported.
if (!parent.isValid())
return false;
beginInsertRows(parent, row, row + count - 1);
QModelIndex
DeckListModel
::
addCard
(
const
QString
&
cardName
,
const
QString
&
zoneName
)
{
InnerDecklistNode
*
zoneNode
=
createNodeIfNeeded
(
zoneName
,
root
);
for (int i = 0; i < count; i++)
deckList->getZoneByIndex(parent.row())->insert(row, new DecklistRow);
CardInfo
*
info
=
db
->
getCard
(
cardName
);
QString
cardType
=
info
->
getMainCardType
();
InnerDecklistNode
*
cardTypeNode
=
createNodeIfNeeded
(
cardType
,
zoneNode
);
DecklistModelCardNode
*
cardNode
=
dynamic_cast
<
DecklistModelCardNode
*>
(
cardTypeNode
->
findChild
(
cardName
));
if
(
!
cardNode
)
{
DecklistCardNode
*
decklistCard
=
deckList
->
addCard
(
cardName
,
zoneName
);
beginInsertRows
(
nodeToIndex
(
cardTypeNode
),
cardTypeNode
->
size
(),
cardTypeNode
->
size
());
cardNode
=
new
DecklistModelCardNode
(
decklistCard
,
cardTypeNode
);
endInsertRows
();
return true;
*/
}
sort
(
1
);
return
nodeToIndex
(
cardNode
);
}
else
{
cardNode
->
setNumber
(
cardNode
->
getNumber
()
+
1
);
QModelIndex
ind
=
nodeToIndex
(
cardNode
);
emit
dataChanged
(
ind
,
ind
);
return
ind
;
}
}
QModelIndex
DeckListModel
::
nodeToIndex
(
AbstractDecklistNode
*
node
)
const
{
if
(
node
==
root
)
return
QModelIndex
();
return
createIndex
(
node
->
getParent
()
->
indexOf
(
node
),
0
,
node
);
}
void
DeckListModel
::
sort
(
int
/*column*/
,
Qt
::
SortOrder
order
)
{
emit
layoutAboutToBeChanged
();
root
->
sort
(
order
);
emit
layoutChanged
();
}
void
DeckListModel
::
cleanList
()
{
deckList
->
cleanList
();
deckList
->
initZones
();
reset
();
}
cockatrice/src/decklistmodel.h
View file @
1da5c637
...
...
@@ -7,16 +7,16 @@
class
CardDatabase
;
class
DecklistModelCardNode
:
public
AbstractDecklistNode
{
class
DecklistModelCardNode
:
public
AbstractDecklist
Card
Node
{
private:
DecklistCardNode
*
dataNode
;
public:
DecklistModelCardNode
(
DecklistCardNode
*
_dataNode
,
InnerDecklistNode
*
_parent
)
:
AbstractDecklistNode
(
_parent
),
dataNode
(
_dataNode
)
{
}
bool
hasChildren
()
const
{
return
false
;
}
inline
int
getNumber
()
const
{
return
dataNode
->
g
etNumber
();
}
inline
void
setNumber
(
int
_number
)
{
dataNode
->
s
etN
umber
(
_number
);
}
inline
QString
g
etName
(
)
const
{
return
dataNode
->
g
etName
();
}
inline
void
setName
(
const
QString
&
_name
)
{
dataNode
->
setName
(
_name
)
;
}
DecklistModelCardNode
(
DecklistCardNode
*
_dataNode
,
InnerDecklistNode
*
_parent
)
:
AbstractDecklist
Card
Node
(
_parent
),
dataNode
(
_dataNode
)
{
}
int
getNumber
()
const
{
return
dataNode
->
getNumber
()
;
}
void
setNumber
(
int
_number
)
{
dataNode
->
s
etNumber
(
_number
);
}
QString
getName
()
const
{
return
dataNode
->
g
etN
ame
(
);
}
void
s
etName
(
const
QString
&
_name
)
{
dataNode
->
s
etName
(
_name
);
}
DecklistCardNode
*
getDataNode
()
const
{
return
dataNode
;
}
};
class
DeckListModel
:
public
QAbstractItemModel
{
...
...
@@ -27,8 +27,7 @@ public:
DeckListModel
(
CardDatabase
*
_db
,
QObject
*
parent
=
0
);
~
DeckListModel
();
int
rowCount
(
const
QModelIndex
&
parent
=
QModelIndex
())
const
;
bool
hasChildren
(
const
QModelIndex
&
parent
=
QModelIndex
())
const
;
int
columnCount
(
const
QModelIndex
&
parent
=
QModelIndex
())
const
;
int
columnCount
(
const
QModelIndex
&
/*parent*/
)
const
{
return
2
;
}
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
;
QVariant
headerData
(
int
section
,
Qt
::
Orientation
orientation
,
int
role
=
Qt
::
DisplayRole
)
const
;
QModelIndex
index
(
int
row
,
int
column
,
const
QModelIndex
&
parent
=
QModelIndex
())
const
;
...
...
@@ -36,17 +35,25 @@ public:
Qt
::
ItemFlags
flags
(
const
QModelIndex
&
index
)
const
;
bool
setData
(
const
QModelIndex
&
index
,
const
QVariant
&
value
,
int
role
);
bool
removeRows
(
int
row
,
int
count
,
const
QModelIndex
&
parent
=
QModelIndex
());
bool
insertRows
(
int
row
,
int
count
,
const
QModelIndex
&
parent
=
QModelIndex
());
QModelIndex
addCard
(
const
QString
&
cardName
,
const
QString
&
zoneName
);
void
sort
(
int
column
,
Qt
::
SortOrder
order
=
Qt
::
AscendingOrder
);
void
cleanList
();
DeckList
*
getDeckList
()
const
{
return
deckList
;
}
private:
CardDatabase
*
db
;
DeckList
*
deckList
;
InnerDecklistNode
*
root
;
Abstract
DecklistNode
*
findNo
de
(
const
QString
&
name
,
InnerDecklistNode
*
root
)
const
;
AbstractDecklistNode
*
findNode
(
const
QModelIndex
&
index
)
const
;
Inner
DecklistNode
*
createNodeIfNee
de
d
(
const
QString
&
name
,
InnerDecklistNode
*
parent
)
;
QModelIndex
nodeToIndex
(
AbstractDecklistNode
*
node
)
const
;
void
debugIndexInfo
(
const
QString
&
func
,
const
QModelIndex
&
index
)
const
;
void
debugShowTree
(
InnerDecklistNode
*
node
,
int
depth
)
const
;
template
<
typename
T
>
T
getNode
(
const
QModelIndex
&
index
)
const
{
if
(
!
index
.
isValid
())
return
dynamic_cast
<
T
>
(
root
);
return
dynamic_cast
<
T
>
(
static_cast
<
AbstractDecklistNode
*>
(
index
.
internalPointer
()));
}
};
#endif
cockatrice/src/dlg_startgame.cpp
View file @
1da5c637
...
...
@@ -7,9 +7,10 @@
DlgStartGame
::
DlgStartGame
(
CardDatabase
*
_db
,
QWidget
*
parent
)
:
QDialog
(
parent
),
db
(
_db
)
{
tableView
=
new
QTreeView
;
tableModel
=
new
DeckListModel
(
db
,
this
);
tableView
->
setModel
(
tableModel
);
deckView
=
new
QTreeView
;
deckModel
=
new
DeckListModel
(
db
,
this
);
deckView
->
setModel
(
deckModel
);
deckView
->
setUniformRowHeights
(
true
);
loadButton
=
new
QPushButton
(
tr
(
"&Load..."
));
okButton
=
new
QPushButton
(
tr
(
"&OK"
));
...
...
@@ -21,13 +22,14 @@ DlgStartGame::DlgStartGame(CardDatabase *_db, QWidget *parent)
buttonLayout
->
addWidget
(
okButton
);
QVBoxLayout
*
mainLayout
=
new
QVBoxLayout
;
mainLayout
->
addWidget
(
table
View
);
mainLayout
->
addWidget
(
deck
View
);
mainLayout
->
addLayout
(
buttonLayout
);
setLayout
(
mainLayout
);
setWindowTitle
(
tr
(
"Start game"
));
setMinimumWidth
(
sizeHint
().
width
());
resize
(
300
,
500
);
connect
(
loadButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actLoad
()));
connect
(
okButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
accept
()));
...
...
@@ -35,24 +37,28 @@ DlgStartGame::DlgStartGame(CardDatabase *_db, QWidget *parent)
void
DlgStartGame
::
actLoad
()
{
if
(
!
table
Model
->
getDeckList
()
->
loadDialog
(
this
))
if
(
!
deck
Model
->
getDeckList
()
->
loadDialog
(
this
))
return
;
tableView
->
reset
();
deckView
->
reset
();
deckModel
->
sort
(
1
);
deckView
->
expandAll
();
deckView
->
resizeColumnToContents
(
0
);
emit
newDeckLoaded
(
getDeckList
());
}
QStringList
DlgStartGame
::
getDeckList
()
const
{
QStringList
result
;
/*
DeckList *deckList =
table
Model->getDeckList();
for (int i = 0; i < deckList->
zoneCount
(); i++) {
Decklist
Zone *zone =
deckList->get
ZoneByIndex
(i);
for (int j = 0; j <
zon
e->size(); j++) {
Decklist
Row *r = zon
e->at(j);
for (int k = 0; k <
r
->getNumber(); k++)
result << QString("%1%2").arg(
zon
e->getName() == "side" ? "SB:" : "").arg(
r
->get
Card
());
DeckList
*
deckList
=
deck
Model
->
getDeckList
();
for
(
int
i
=
0
;
i
<
deckList
->
getRoot
()
->
size
();
i
++
)
{
Inner
Decklist
Node
*
node
=
dynamic_cast
<
InnerDecklistNode
*>
(
deckList
->
get
Root
()
->
at
(
i
)
)
;
for
(
int
j
=
0
;
j
<
nod
e
->
size
();
j
++
)
{
Decklist
CardNode
*
card
=
dynamic_cast
<
DecklistCardNode
*>
(
nod
e
->
at
(
j
)
)
;
for
(
int
k
=
0
;
k
<
card
->
getNumber
();
k
++
)
result
<<
QString
(
"%1%2"
).
arg
(
nod
e
->
getName
()
==
"side"
?
"SB:
"
:
""
).
arg
(
card
->
get
Name
());
}
}
*/
return
result
;
return
result
;
}
cockatrice/src/dlg_startgame.h
View file @
1da5c637
...
...
@@ -2,11 +2,11 @@
#define DLG_STARTGAME_H
#include
<QDialog>
#include
"decklistmodel.h"
class
QTreeView
;
class
QPushButton
;
class
CardDatabase
;
class
DeckListModel
;
class
DlgStartGame
:
public
QDialog
{
Q_OBJECT
...
...
@@ -19,8 +19,8 @@ private slots:
void
actLoad
();
private:
CardDatabase
*
db
;
QTreeView
*
table
View
;
DeckListModel
*
table
Model
;
QTreeView
*
deck
View
;
DeckListModel
*
deck
Model
;
QPushButton
*
loadButton
,
*
okButton
;
};
...
...
cockatrice/src/window_deckeditor.cpp
View file @
1da5c637
...
...
@@ -23,6 +23,7 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
databaseView
->
setModel
(
databaseModel
);
databaseView
->
setUniformRowHeights
(
true
);
databaseView
->
setSortingEnabled
(
true
);
databaseView
->
resizeColumnToContents
(
0
);
connect
(
databaseView
->
selectionModel
(),
SIGNAL
(
currentRowChanged
(
const
QModelIndex
&
,
const
QModelIndex
&
)),
this
,
SLOT
(
updateCardInfoLeft
(
const
QModelIndex
&
,
const
QModelIndex
&
)));
connect
(
databaseView
,
SIGNAL
(
doubleClicked
(
const
QModelIndex
&
)),
this
,
SLOT
(
actAddCard
()));
...
...
@@ -49,7 +50,6 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
deckView
=
new
QTreeView
();
deckView
->
setModel
(
deckModel
);
deckView
->
setUniformRowHeights
(
true
);
deckView
->
setRootIsDecorated
(
false
);
connect
(
deckView
->
selectionModel
(),
SIGNAL
(
currentRowChanged
(
const
QModelIndex
&
,
const
QModelIndex
&
)),
this
,
SLOT
(
updateCardInfoRight
(
const
QModelIndex
&
,
const
QModelIndex
&
)));
QLabel
*
nameLabel
=
new
QLabel
(
tr
(
"Deck &name:"
));
...
...
@@ -113,7 +113,7 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
aAddCardToSideboard
->
setShortcut
(
tr
(
"Ctrl+N"
));
aRemoveCard
=
new
QAction
(
tr
(
"&Remove row"
),
this
);
connect
(
aRemoveCard
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
actRemoveCard
()));
aRemoveCard
->
setShortcut
(
tr
(
"
Ctrl+R
"
));
aRemoveCard
->
setShortcut
(
tr
(
"
Del
"
));
aIncrement
=
new
QAction
(
tr
(
"&Increment number"
),
this
);
connect
(
aIncrement
,
SIGNAL
(
triggered
()),
this
,
SLOT
(
actIncrement
()));
aIncrement
->
setShortcut
(
tr
(
"+"
));
...
...
@@ -140,6 +140,9 @@ void WndDeckEditor::updateCardInfoLeft(const QModelIndex ¤t, const QModelI
void
WndDeckEditor
::
updateCardInfoRight
(
const
QModelIndex
&
current
,
const
QModelIndex
&
/*previous*/
)
{
if
(
!
current
.
isValid
())
return
;
if
(
!
current
.
model
()
->
hasChildren
(
current
.
sibling
(
current
.
row
(),
0
)))
cardInfo
->
setCard
(
current
.
sibling
(
current
.
row
(),
1
).
data
().
toString
());
}
...
...
@@ -195,7 +198,9 @@ void WndDeckEditor::actLoadDeck()
lastFileFormat
=
l
->
getLastFileFormat
();
nameEdit
->
setText
(
l
->
getName
());
commentsEdit
->
setText
(
l
->
getComments
());
deckModel
->
sort
(
1
);
deckView
->
expandAll
();
deckView
->
resizeColumnToContents
(
0
);
}
}
...
...
@@ -222,41 +227,40 @@ bool WndDeckEditor::actSaveDeckAs()
return
false
;
}
void
WndDeckEditor
::
addCardHelper
(
int
baseRow
)
void
WndDeckEditor
::
recursiveExpand
(
const
QModelIndex
&
index
)
{
if
(
index
.
parent
().
isValid
())
recursiveExpand
(
index
.
parent
());
deckView
->
expand
(
index
);
}
void
WndDeckEditor
::
addCardHelper
(
const
QString
&
zoneName
)
{
const
QModelIndex
currentIndex
=
databaseView
->
selectionModel
()
->
currentIndex
();
if
(
!
currentIndex
.
isValid
())
return
;
const
QString
cardName
=
databaseModel
->
index
(
currentIndex
.
row
(),
0
).
data
().
toString
();
QModelIndex
zoneRoot
=
deckModel
->
index
(
baseRow
,
0
);
deckView
->
expand
(
zoneRoot
);
QModelIndexList
matches
=
deckModel
->
match
(
deckModel
->
index
(
0
,
1
,
zoneRoot
),
Qt
::
EditRole
,
cardName
);
if
(
matches
.
isEmpty
())
{
int
row
=
deckModel
->
rowCount
(
zoneRoot
);
deckModel
->
insertRow
(
row
,
zoneRoot
);
deckModel
->
setData
(
deckModel
->
index
(
row
,
1
,
zoneRoot
),
cardName
,
Qt
::
EditRole
);
}
else
{
const
QModelIndex
numberIndex
=
deckModel
->
index
(
matches
[
0
].
row
(),
0
,
zoneRoot
);
const
int
count
=
deckModel
->
data
(
numberIndex
,
Qt
::
EditRole
).
toInt
();
deckModel
->
setData
(
numberIndex
,
count
+
1
,
Qt
::
EditRole
);
}
QModelIndex
newCardIndex
=
deckModel
->
addCard
(
cardName
,
zoneName
);
recursiveExpand
(
newCardIndex
);
setWindowModified
(
true
);
}
void
WndDeckEditor
::
actAddCard
()
{
addCardHelper
(
0
);
addCardHelper
(
"main"
);
}
void
WndDeckEditor
::
actAddCardToSideboard
()
{
addCardHelper
(
1
);
addCardHelper
(
"side"
);
}
void
WndDeckEditor
::
actRemoveCard
()
{
const
QModelIndex
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
if
(
!
currentIndex
.
isValid
())
const
QModelIndex
&
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
if
(
!
currentIndex
.
isValid
()
||
deckModel
->
hasChildren
(
currentIndex
)
)
return
;
deckModel
->
removeRow
(
currentIndex
.
row
(),
currentIndex
.
parent
());
setWindowModified
(
true
);
...
...
@@ -264,7 +268,7 @@ void WndDeckEditor::actRemoveCard()
void
WndDeckEditor
::
actIncrement
()
{
const
QModelIndex
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
const
QModelIndex
&
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
if
(
!
currentIndex
.
isValid
())
return
;
const
QModelIndex
numberIndex
=
currentIndex
.
sibling
(
currentIndex
.
row
(),
0
);
...
...
@@ -275,7 +279,7 @@ void WndDeckEditor::actIncrement()
void
WndDeckEditor
::
actDecrement
()
{
const
QModelIndex
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
const
QModelIndex
&
currentIndex
=
deckView
->
selectionModel
()
->
currentIndex
();
if
(
!
currentIndex
.
isValid
())
return
;
const
QModelIndex
numberIndex
=
currentIndex
.
sibling
(
currentIndex
.
row
(),
0
);
...
...
cockatrice/src/window_deckeditor.h
View file @
1da5c637
...
...
@@ -31,7 +31,8 @@ private slots:
void
actIncrement
();
void
actDecrement
();
private:
void
addCardHelper
(
int
baseRow
);
void
addCardHelper
(
const
QString
&
zoneName
);
void
recursiveExpand
(
const
QModelIndex
&
index
);
bool
confirmClose
();
QString
lastFileName
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment