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
8670bc67
Commit
8670bc67
authored
Dec 08, 2014
by
Gavin Bisesi
Browse files
Merge pull request #471 from ctrlaltca/set_extinfo
More sets handling improvements
parents
745a7f19
9cc8d8b8
Changes
5
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/setsmodel.cpp
View file @
8670bc67
...
...
@@ -25,11 +25,11 @@ QVariant SetsModel::data(const QModelIndex &index, int role) const
CardSet
*
set
=
sets
[
index
.
row
()];
switch
(
index
.
column
())
{
case
SortKeyCol
:
return
set
->
getSortKey
(
);
case
SortKeyCol
:
return
QString
(
"%1"
).
arg
(
set
->
getSortKey
(),
4
,
10
,
QChar
(
'0'
)
);
case
SetTypeCol
:
return
set
->
getSetType
();
case
ShortNameCol
:
return
set
->
getShortName
();
case
LongNameCol
:
return
set
->
getLongName
();
case
ReleaseDateCol
:
return
set
->
getReleaseDate
();
case
ReleaseDateCol
:
return
set
->
getReleaseDate
()
.
toString
(
Qt
::
ISODate
)
;
default:
return
QVariant
();
}
}
...
...
@@ -41,7 +41,7 @@ QVariant SetsModel::headerData(int section, Qt::Orientation orientation, int rol
switch
(
section
)
{
case
SortKeyCol
:
return
tr
(
"Key"
);
case
SetTypeCol
:
return
tr
(
"Set type"
);
case
ShortNameCol
:
return
tr
(
"S
hort nam
e"
);
case
ShortNameCol
:
return
tr
(
"S
et cod
e"
);
case
LongNameCol
:
return
tr
(
"Long name"
);
case
ReleaseDateCol
:
return
tr
(
"Release date"
);
default:
return
QVariant
();
...
...
@@ -78,47 +78,69 @@ bool SetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
row
=
parent
.
row
();
}
int
oldRow
=
qobject_cast
<
const
SetsMimeData
*>
(
data
)
->
getOldRow
();
beginRemoveRows
(
QModelIndex
(),
oldRow
,
oldRow
);
CardSet
*
temp
=
sets
.
takeAt
(
oldRow
);
endRemoveRows
();
if
(
oldRow
<
row
)
row
--
;
beginInsertRows
(
QModelIndex
(),
row
,
row
);
sets
.
insert
(
row
,
temp
);
endInsertRows
();
for
(
int
i
=
0
;
i
<
sets
.
size
();
i
++
)
sets
[
i
]
->
setSortKey
(
i
);
swapRows
(
oldRow
,
row
);
sets
.
sortByKey
();
return
true
;
}
emit
dataChanged
(
index
(
0
,
0
),
index
(
rowCount
()
-
1
,
columnCount
()
-
1
));
void
SetsModel
::
swapRows
(
int
oldRow
,
int
newRow
)
{
beginRemoveRows
(
QModelIndex
(),
oldRow
,
oldRow
);
CardSet
*
temp
=
sets
.
takeAt
(
oldRow
);
endRemoveRows
();
return
true
;
beginInsertRows
(
QModelIndex
(),
newRow
,
newRow
);
sets
.
insert
(
newRow
,
temp
);
endInsertRows
();
emit
dataChanged
(
index
(
0
,
0
),
index
(
rowCount
()
-
1
,
columnCount
()
-
1
));
}
QStringList
SetsModel
::
mimeTypes
()
const
void
SetsModel
::
sort
(
int
column
,
Qt
::
SortOrder
order
)
{
return
QStringList
()
<<
"application/x-cockatricecardset"
;
QMap
<
QString
,
CardSet
*>
setMap
;
int
numRows
=
rowCount
();
int
row
;
for
(
row
=
0
;
row
<
numRows
;
++
row
)
setMap
.
insertMulti
(
index
(
row
,
column
).
data
().
toString
(),
sets
.
at
(
row
));
QList
<
CardSet
*>
tmp
=
setMap
.
values
();
sets
.
clear
();
if
(
order
==
Qt
::
AscendingOrder
)
{
for
(
row
=
0
;
row
<
tmp
.
size
();
row
++
)
{
sets
.
append
(
tmp
.
at
(
row
));
}
}
else
{
for
(
row
=
tmp
.
size
()
-
1
;
row
>=
0
;
row
--
)
{
sets
.
append
(
tmp
.
at
(
row
));
}
}
emit
dataChanged
(
index
(
0
,
0
),
index
(
numRows
-
1
,
columnCount
()
-
1
));
}
SetsProxyModel
::
SetsProxyModel
(
QObject
*
parent
)
:
QSortFilterProxyModel
(
parent
)
void
SetsModel
::
save
()
{
setDynamicSortFilter
(
true
);
for
(
int
i
=
0
;
i
<
sets
.
size
();
i
++
)
sets
[
i
]
->
setSortKey
(
i
);
sets
.
sortByKey
();
}
void
Sets
Proxy
Model
::
saveOrder
(
)
void
SetsModel
::
restore
(
CardDatabase
*
db
)
{
int
numRows
=
rowCount
();
SetsModel
*
model
=
(
SetsModel
*
)
sourceModel
();
for
(
int
row
=
0
;
row
<
numRows
;
++
row
)
{
QModelIndex
idx
=
index
(
row
,
0
);
int
oldRow
=
data
(
idx
,
Qt
::
DisplayRole
).
toInt
();
CardSet
*
temp
=
model
->
sets
.
at
(
oldRow
);
temp
->
setSortKey
(
row
);
}
model
->
sets
.
sortByKey
();
sets
=
db
->
getSetList
();
sets
.
sortByKey
();
emit
model
->
dataChanged
(
model
->
index
(
0
,
0
),
model
->
index
(
model
->
rowCount
()
-
1
,
model
->
columnCount
()
-
1
));
emit
dataChanged
(
index
(
0
,
0
),
index
(
rowCount
()
-
1
,
columnCount
()
-
1
));
}
QStringList
SetsModel
::
mimeTypes
()
const
{
return
QStringList
()
<<
"application/x-cockatricecardset"
;
}
cockatrice/src/setsmodel.h
View file @
8670bc67
...
...
@@ -2,7 +2,6 @@
#define SETSMODEL_H
#include
<QAbstractTableModel>
#include
<QSortFilterProxyModel>
#include
<QMimeData>
#include
"carddatabase.h"
...
...
@@ -25,7 +24,7 @@ private:
static
const
int
NUM_COLS
=
5
;
SetList
sets
;
public:
enum
SetsColumns
{
SortKeyCol
,
SetTyp
eCol
,
ShortNameCol
,
LongNam
eCol
,
ReleaseDateCol
};
enum
SetsColumns
{
SortKeyCol
,
LongNam
eCol
,
ShortNameCol
,
SetTyp
eCol
,
ReleaseDateCol
};
SetsModel
(
CardDatabase
*
_db
,
QObject
*
parent
=
0
);
~
SetsModel
();
...
...
@@ -39,12 +38,10 @@ public:
QMimeData
*
mimeData
(
const
QModelIndexList
&
indexes
)
const
;
bool
dropMimeData
(
const
QMimeData
*
data
,
Qt
::
DropAction
action
,
int
row
,
int
column
,
const
QModelIndex
&
parent
);
QStringList
mimeTypes
()
const
;
void
swapRows
(
int
oldRow
,
int
newRow
);
void
sort
(
int
column
,
Qt
::
SortOrder
order
=
Qt
::
AscendingOrder
);
void
save
();
void
restore
(
CardDatabase
*
db
);
};
class
SetsProxyModel
:
public
QSortFilterProxyModel
{
Q_OBJECT
public:
SetsProxyModel
(
QObject
*
parent
=
0
);
void
saveOrder
();
};
#endif
cockatrice/src/window_sets.cpp
View file @
8670bc67
...
...
@@ -5,41 +5,71 @@
#include
<QGridLayout>
#include
<QHeaderView>
#include
<QPushButton>
#include
<QItemSelection>
#include
<QMessageBox>
WndSets
::
WndSets
(
QWidget
*
parent
)
:
QMainWindow
(
parent
)
{
model
=
new
SetsModel
(
db
,
this
);
proxyModel
=
new
SetsProxyModel
(
this
);
proxyModel
->
setSourceModel
(
model
);
proxyModel
->
setSortCaseSensitivity
(
Qt
::
CaseInsensitive
);
view
=
new
QTreeView
;
view
->
setModel
(
proxyModel
);
view
->
setModel
(
model
);
view
->
setAlternatingRowColors
(
true
);
view
->
setUniformRowHeights
(
true
);
view
->
setAllColumnsShowFocus
(
true
);
view
->
setSortingEnabled
(
true
);
view
->
sortByColumn
(
SetsModel
::
SortKeyCol
,
Qt
::
AscendingOrder
);
view
->
setSelectionMode
(
QAbstractItemView
::
SingleSelection
);
view
->
setSelectionBehavior
(
QAbstractItemView
::
SelectRows
);
view
->
setDragEnabled
(
true
);
view
->
setAcceptDrops
(
true
);
view
->
setDropIndicatorShown
(
true
);
view
->
setDragDropMode
(
QAbstractItemView
::
InternalMove
);
#if QT_VERSION < 0x050000
view
->
header
()
->
setResizeMode
(
QHeaderView
::
Stretch
);
view
->
header
()
->
setResizeMode
(
SetsModel
::
LongNameCol
,
QHeaderView
::
ResizeToContents
);
#else
view
->
header
()
->
setSectionResizeMode
(
QHeaderView
::
Stretch
);
view
->
header
()
->
setSectionResizeMode
(
SetsModel
::
LongNameCol
,
QHeaderView
::
ResizeToContents
);
#endif
view
->
sortByColumn
(
SetsModel
::
SortKeyCol
,
Qt
::
AscendingOrder
);
view
->
setColumnHidden
(
SetsModel
::
SortKeyCol
,
true
);
saveButton
=
new
QPushButton
(
tr
(
"Save set ordering"
));
connect
(
saveButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actSave
()));
restoreButton
=
new
QPushButton
(
tr
(
"Restore saved set ordering"
));
connect
(
restoreButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actRestore
()));
upButton
=
new
QPushButton
(
tr
(
"Move selected set up"
));
connect
(
upButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actUp
()));
downButton
=
new
QPushButton
(
tr
(
"Move selected set down"
));
connect
(
downButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actDown
()));
topButton
=
new
QPushButton
(
tr
(
"Move selected set to top"
));
connect
(
topButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actTop
()));
bottomButton
=
new
QPushButton
(
tr
(
"Move selected set to bottom"
));
connect
(
bottomButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
actBottom
()));
upButton
->
setDisabled
(
true
);
downButton
->
setDisabled
(
true
);
topButton
->
setDisabled
(
true
);
bottomButton
->
setDisabled
(
true
);
connect
(
view
->
selectionModel
(),
SIGNAL
(
selectionChanged
(
const
QItemSelection
&
,
const
QItemSelection
&
)),
this
,
SLOT
(
actToggleButtons
(
const
QItemSelection
&
,
const
QItemSelection
&
)));
QGridLayout
*
mainLayout
=
new
QGridLayout
;
mainLayout
->
addWidget
(
view
,
0
,
0
,
1
,
2
);
mainLayout
->
addWidget
(
saveButton
,
1
,
0
,
1
,
1
);
mainLayout
->
addWidget
(
restoreButton
,
1
,
1
,
1
,
1
);
mainLayout
->
addWidget
(
upButton
,
1
,
0
,
1
,
1
);
mainLayout
->
addWidget
(
downButton
,
2
,
0
,
1
,
1
);
mainLayout
->
addWidget
(
topButton
,
1
,
1
,
1
,
1
);
mainLayout
->
addWidget
(
bottomButton
,
2
,
1
,
1
,
1
);
mainLayout
->
addWidget
(
saveButton
,
3
,
0
,
1
,
1
);
mainLayout
->
addWidget
(
restoreButton
,
3
,
1
,
1
,
1
);
QWidget
*
centralWidget
=
new
QWidget
;
centralWidget
->
setLayout
(
mainLayout
);
...
...
@@ -55,10 +85,91 @@ WndSets::~WndSets()
void
WndSets
::
actSave
()
{
proxyModel
->
saveOrder
();
model
->
save
();
QMessageBox
::
information
(
this
,
tr
(
"Success"
),
tr
(
"The sets database has been saved successfully."
));
}
void
WndSets
::
actRestore
()
{
view
->
sortByColumn
(
SetsModel
::
SortKeyCol
,
Qt
::
AscendingOrder
);
model
->
restore
(
db
);
}
void
WndSets
::
actToggleButtons
(
const
QItemSelection
&
selected
,
const
QItemSelection
&
)
{
bool
disabled
=
selected
.
empty
();
upButton
->
setDisabled
(
disabled
);
downButton
->
setDisabled
(
disabled
);
topButton
->
setDisabled
(
disabled
);
bottomButton
->
setDisabled
(
disabled
);
}
void
WndSets
::
selectRow
(
int
row
)
{
QModelIndex
idx
=
model
->
index
(
row
,
0
);
view
->
selectionModel
()
->
select
(
idx
,
QItemSelectionModel
::
ClearAndSelect
|
QItemSelectionModel
::
Rows
);
view
->
scrollTo
(
idx
,
QAbstractItemView
::
EnsureVisible
);
}
void
WndSets
::
actUp
()
{
QModelIndexList
rows
=
view
->
selectionModel
()
->
selectedRows
();
if
(
rows
.
empty
())
return
;
QModelIndex
selectedRow
=
rows
.
first
();
int
oldRow
=
selectedRow
.
row
();
int
newRow
=
oldRow
-
1
;
if
(
oldRow
<=
0
)
return
;
model
->
swapRows
(
oldRow
,
newRow
);
selectRow
(
newRow
);
}
void
WndSets
::
actDown
()
{
QModelIndexList
rows
=
view
->
selectionModel
()
->
selectedRows
();
if
(
rows
.
empty
())
return
;
QModelIndex
selectedRow
=
rows
.
first
();
int
oldRow
=
selectedRow
.
row
();
int
newRow
=
oldRow
+
1
;
if
(
oldRow
>=
model
->
rowCount
()
-
1
)
return
;
model
->
swapRows
(
oldRow
,
newRow
);
selectRow
(
newRow
);
}
void
WndSets
::
actTop
()
{
QModelIndexList
rows
=
view
->
selectionModel
()
->
selectedRows
();
if
(
rows
.
empty
())
return
;
QModelIndex
selectedRow
=
rows
.
first
();
int
oldRow
=
selectedRow
.
row
();
int
newRow
=
0
;
if
(
oldRow
<=
0
)
return
;
model
->
swapRows
(
oldRow
,
newRow
);
selectRow
(
newRow
);
}
void
WndSets
::
actBottom
()
{
QModelIndexList
rows
=
view
->
selectionModel
()
->
selectedRows
();
if
(
rows
.
empty
())
return
;
QModelIndex
selectedRow
=
rows
.
first
();
int
oldRow
=
selectedRow
.
row
();
int
newRow
=
model
->
rowCount
()
-
1
;
if
(
oldRow
>=
newRow
)
return
;
model
->
swapRows
(
oldRow
,
newRow
);
selectRow
(
newRow
);
}
cockatrice/src/window_sets.h
View file @
8670bc67
...
...
@@ -5,23 +5,30 @@
class
SetsModel
;
class
SetsProxyModel
;
class
QTreeView
;
class
QPushButton
;
class
CardDatabase
;
class
QItemSelection
;
class
QTreeView
;
class
WndSets
:
public
QMainWindow
{
Q_OBJECT
private:
SetsModel
*
model
;
SetsProxyModel
*
proxyModel
;
QTreeView
*
view
;
QPushButton
*
saveButton
,
*
restoreButton
;
QPushButton
*
saveButton
,
*
restoreButton
,
*
upButton
,
*
downButton
,
*
bottomButton
,
*
topButton
;
public:
WndSets
(
QWidget
*
parent
=
0
);
~
WndSets
();
protected:
void
selectRow
(
int
row
);
private
slots
:
void
actSave
();
void
actRestore
();
void
actUp
();
void
actDown
();
void
actTop
();
void
actBottom
();
void
actToggleButtons
(
const
QItemSelection
&
selected
,
const
QItemSelection
&
deselected
);
};
#endif
oracle/src/oracleimporter.cpp
View file @
8670bc67
...
...
@@ -40,6 +40,9 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
editionLong
=
map
.
value
(
"name"
).
toString
();
editionCards
=
map
.
value
(
"cards"
);
setType
=
map
.
value
(
"type"
).
toString
();
// capitalize set type
if
(
setType
.
length
()
>
0
)
setType
[
0
]
=
setType
[
0
].
toUpper
();
releaseDate
=
map
.
value
(
"releaseDate"
).
toDate
();
// core and expansion sets are marked to be imported by default
...
...
@@ -236,7 +239,7 @@ int OracleImporter::startImport()
const
SetToDownload
*
curSet
;
// add an empty set for tokens
CardSet
*
tokenSet
=
new
CardSet
(
TOKENS_SETNAME
,
tr
(
"Dummy set containing tokens"
),
"
t
okens"
);
CardSet
*
tokenSet
=
new
CardSet
(
TOKENS_SETNAME
,
tr
(
"Dummy set containing tokens"
),
"
T
okens"
);
sets
.
insert
(
TOKENS_SETNAME
,
tokenSet
);
while
(
it
.
hasNext
())
...
...
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