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
e48a815d
"git@gitlab.completext.com:quzar/Cockatrice.git" did not exist on "9f0b383036b7a96b078ec36c72be88af3946ce06"
Commit
e48a815d
authored
Nov 30, 2014
by
Fabio Bas
Browse files
Add move buttons, misc improvements
parent
9e1f8a08
Changes
4
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/setsmodel.cpp
View file @
e48a815d
#include
"setsmodel.h"
#include
<QDebug>
SetsModel
::
SetsModel
(
CardDatabase
*
_db
,
QObject
*
parent
)
:
QAbstractTableModel
(
parent
),
sets
(
_db
->
getSetList
())
...
...
@@ -78,13 +79,22 @@ bool SetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
row
=
parent
.
row
();
}
int
oldRow
=
qobject_cast
<
const
SetsMimeData
*>
(
data
)
->
getOldRow
();
if
(
oldRow
<
row
)
row
--
;
swapRows
(
oldRow
,
row
);
return
true
;
}
void
SetsModel
::
swapRows
(
int
oldRow
,
int
newRow
)
{
beginRemoveRows
(
QModelIndex
(),
oldRow
,
oldRow
);
CardSet
*
temp
=
sets
.
takeAt
(
oldRow
);
endRemoveRows
();
if
(
oldRow
<
row
)
row
--
;
beginInsertRows
(
QModelIndex
(),
row
,
row
);
sets
.
insert
(
row
,
temp
);
beginInsertRows
(
QModelIndex
(),
newRow
,
newRow
);
sets
.
insert
(
newRow
,
temp
);
endInsertRows
();
for
(
int
i
=
0
;
i
<
sets
.
size
();
i
++
)
...
...
@@ -93,32 +103,27 @@ bool SetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r
sets
.
sortByKey
();
emit
dataChanged
(
index
(
0
,
0
),
index
(
rowCount
()
-
1
,
columnCount
()
-
1
));
return
true
;
}
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
;
SetsProxyModel
::
SetsProxyModel
(
QObject
*
parent
)
:
QSortFilterProxyModel
(
parent
)
{
setDynamicSortFilter
(
true
);
for
(
row
=
0
;
row
<
numRows
;
++
row
)
setMap
.
insertMulti
(
index
(
row
,
column
).
data
().
toString
(),
sets
.
at
(
row
));
row
=
(
order
==
Qt
::
AscendingOrder
)
?
0
:
numRows
-
1
;
foreach
(
CardSet
*
set
,
setMap
)
set
->
setSortKey
((
order
==
Qt
::
AscendingOrder
)
?
row
++
:
row
--
);
sets
.
sortByKey
();
emit
dataChanged
(
index
(
0
,
0
),
index
(
numRows
-
1
,
columnCount
()
-
1
));
}
void
SetsProxyModel
::
saveOrder
()
QStringList
SetsModel
::
mimeTypes
()
const
{
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
();
emit
model
->
dataChanged
(
model
->
index
(
0
,
0
),
model
->
index
(
model
->
rowCount
()
-
1
,
model
->
columnCount
()
-
1
));
return
QStringList
()
<<
"application/x-cockatricecardset"
;
}
cockatrice/src/setsmodel.h
View file @
e48a815d
...
...
@@ -2,7 +2,6 @@
#define SETSMODEL_H
#include
<QAbstractTableModel>
#include
<QSortFilterProxyModel>
#include
<QMimeData>
#include
"carddatabase.h"
...
...
@@ -39,12 +38,8 @@ 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
);
};
class
SetsProxyModel
:
public
QSortFilterProxyModel
{
Q_OBJECT
public:
SetsProxyModel
(
QObject
*
parent
=
0
);
void
saveOrder
();
};
#endif
cockatrice/src/window_sets.cpp
View file @
e48a815d
...
...
@@ -5,41 +5,62 @@
#include
<QGridLayout>
#include
<QHeaderView>
#include
<QPushButton>
#include
<QItemSelection>
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
->
sortByColumn
(
SetsModel
::
SortKeyCol
,
Qt
::
AscendingOrder
);
view
->
setColumnHidden
(
SetsModel
::
SortKeyCol
,
true
);
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
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
);
QWidget
*
centralWidget
=
new
QWidget
;
centralWidget
->
setLayout
(
mainLayout
);
...
...
@@ -53,12 +74,82 @@ WndSets::~WndSets()
{
}
void
WndSets
::
act
Save
(
)
void
WndSets
::
act
ToggleButtons
(
const
QItemSelection
&
selected
,
const
QItemSelection
&
)
{
proxyModel
->
saveOrder
();
bool
disabled
=
selected
.
empty
();
upButton
->
setDisabled
(
disabled
);
downButton
->
setDisabled
(
disabled
);
topButton
->
setDisabled
(
disabled
);
bottomButton
->
setDisabled
(
disabled
);
}
void
WndSets
::
actRestore
(
)
void
WndSets
::
selectRow
(
int
row
)
{
view
->
sortByColumn
(
SetsModel
::
SortKeyCol
,
Qt
::
AscendingOrder
);
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 @
e48a815d
...
...
@@ -5,23 +5,28 @@
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
*
save
Button
,
*
restore
Button
;
QPushButton
*
up
Button
,
*
downButton
,
*
bottomButton
,
*
top
Button
;
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
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