Merge pull request #1342 from marcofernandezheras/CardInfoLayout

Deck Editor layout
This commit is contained in:
woogerboy21 2015-08-08 08:28:12 -04:00
commit 62dc3a7ca3
11 changed files with 485 additions and 123 deletions

View file

@ -7,39 +7,52 @@
#include "cardinfotext.h" #include "cardinfotext.h"
#include "settingscache.h" #include "settingscache.h"
#include <QSplitter>
#include <QVBoxLayout> #include <QVBoxLayout>
CardFrame::CardFrame(int width, int height, const QString &cardName, QWidget *parent) CardFrame::CardFrame(const QString &cardName, QWidget *parent)
: QTabWidget(parent), info(0), cardTextOnly(false) : QTabWidget(parent), info(0), cardTextOnly(false)
{ {
setFixedWidth(width);
setMinimumHeight(height);
setContentsMargins(3, 3, 3, 3); setContentsMargins(3, 3, 3, 3);
pic = new CardInfoPicture(width - 6); pic = new CardInfoPicture();
pic->setObjectName("pic");
text = new CardInfoText(); text = new CardInfoText();
text->setObjectName("text");
tab1 = new QWidget(this); tab1 = new QWidget(this);
tab2 = new QWidget(this); tab2 = new QWidget(this);
tab3 = new QWidget(this); tab3 = new QWidget(this);
tab1->setObjectName("tab1");
tab2->setObjectName("tab2");
tab3->setObjectName("tab3");
insertTab(ImageOnlyView, tab1, QString()); insertTab(ImageOnlyView, tab1, QString());
insertTab(TextOnlyView, tab2, QString()); insertTab(TextOnlyView, tab2, QString());
insertTab(ImageAndTextView, tab3, QString()); insertTab(ImageAndTextView, tab3, QString());
connect(this, SIGNAL(currentChanged(int)), this, SLOT(setViewMode(int))); connect(this, SIGNAL(currentChanged(int)), this, SLOT(setViewMode(int)));
tab1Layout = new QVBoxLayout(); tab1Layout = new QVBoxLayout();
tab1Layout->setObjectName("tab1Layout");
tab1Layout->setContentsMargins(0, 0, 0, 0); tab1Layout->setContentsMargins(0, 0, 0, 0);
tab1Layout->setSpacing(0); tab1Layout->setSpacing(0);
tab1->setLayout(tab1Layout); tab1->setLayout(tab1Layout);
tab2Layout = new QVBoxLayout(); tab2Layout = new QVBoxLayout();
tab2Layout->setObjectName("tab2Layout");
tab2Layout->setContentsMargins(0, 0, 0, 0); tab2Layout->setContentsMargins(0, 0, 0, 0);
tab2Layout->setSpacing(0); tab2Layout->setSpacing(0);
tab2->setLayout(tab2Layout); tab2->setLayout(tab2Layout);
splitter = new QSplitter();
splitter->setObjectName("splitter");
splitter->setOrientation(Qt::Vertical);
tab3Layout = new QVBoxLayout(); tab3Layout = new QVBoxLayout();
tab3Layout->setObjectName("tab3Layout");
tab3Layout->setContentsMargins(0, 0, 0, 0); tab3Layout->setContentsMargins(0, 0, 0, 0);
tab3Layout->setSpacing(0); tab3Layout->setSpacing(0);
tab3Layout->addWidget(splitter);
tab3->setLayout(tab3Layout); tab3->setLayout(tab3Layout);
setViewMode(settingsCache->getCardInfoViewMode()); setViewMode(settingsCache->getCardInfoViewMode());
@ -67,8 +80,8 @@ void CardFrame::setViewMode(int mode)
tab2Layout->addWidget(text); tab2Layout->addWidget(text);
break; break;
case ImageAndTextView: case ImageAndTextView:
tab3Layout->addWidget(pic); splitter->addWidget(pic);
tab3Layout->addWidget(text); splitter->addWidget(text);
break; break;
} }

View file

@ -8,6 +8,7 @@ class CardInfo;
class CardInfoPicture; class CardInfoPicture;
class CardInfoText; class CardInfoText;
class QVBoxLayout; class QVBoxLayout;
class QSplitter;
class CardFrame : public QTabWidget { class CardFrame : public QTabWidget {
Q_OBJECT Q_OBJECT
@ -19,11 +20,11 @@ private:
bool cardTextOnly; bool cardTextOnly;
QWidget *tab1, *tab2, *tab3; QWidget *tab1, *tab2, *tab3;
QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout; QVBoxLayout *tab1Layout, *tab2Layout, *tab3Layout;
QSplitter *splitter;
public: public:
enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView }; enum ViewMode { ImageOnlyView, TextOnlyView, ImageAndTextView };
CardFrame(int width, int height, const QString &cardName = QString(), CardFrame(const QString &cardName = QString(),
QWidget *parent = 0); QWidget *parent = 0);
void retranslateUi(); void retranslateUi();
public slots: public slots:

View file

@ -8,14 +8,12 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "main.h" #include "main.h"
CardInfoPicture::CardInfoPicture(int width, QWidget *parent) CardInfoPicture::CardInfoPicture(QWidget *parent)
: QWidget(parent), : QWidget(parent),
info(0), info(0),
pixmapDirty(true) pixmapDirty(true)
{ {
setFixedWidth(width);
setMinimumHeight(100); setMinimumHeight(100);
setMaximumHeight(width / (qreal) CARD_WIDTH * (qreal) CARD_HEIGHT);
} }
void CardInfoPicture::setCard(CardInfo *card) void CardInfoPicture::setCard(CardInfo *card)

View file

@ -15,7 +15,7 @@ private:
bool pixmapDirty; bool pixmapDirty;
public: public:
CardInfoPicture(int width, QWidget *parent = 0); CardInfoPicture(QWidget *parent = 0);
protected: protected:
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
void paintEvent(QPaintEvent *); void paintEvent(QPaintEvent *);

View file

@ -11,6 +11,7 @@ FilterBuilder::FilterBuilder(QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {
filterCombo = new QComboBox; filterCombo = new QComboBox;
filterCombo->setObjectName("filterCombo");
for (int i = 0; i < CardFilter::AttrEnd; i++) for (int i = 0; i < CardFilter::AttrEnd; i++)
filterCombo->addItem( filterCombo->addItem(
tr(CardFilter::attrName(static_cast<CardFilter::Attr>(i))), tr(CardFilter::attrName(static_cast<CardFilter::Attr>(i))),
@ -18,6 +19,7 @@ FilterBuilder::FilterBuilder(QWidget *parent)
); );
typeCombo = new QComboBox; typeCombo = new QComboBox;
typeCombo->setObjectName("typeCombo");
for (int i = 0; i < CardFilter::TypeEnd; i++) for (int i = 0; i < CardFilter::TypeEnd; i++)
typeCombo->addItem( typeCombo->addItem(
tr(CardFilter::typeName(static_cast<CardFilter::Type>(i))), tr(CardFilter::typeName(static_cast<CardFilter::Type>(i))),
@ -25,12 +27,15 @@ FilterBuilder::FilterBuilder(QWidget *parent)
); );
QPushButton *ok = new QPushButton(QIcon(":/resources/increment.svg"), QString()); QPushButton *ok = new QPushButton(QIcon(":/resources/increment.svg"), QString());
ok->setObjectName("ok");
ok->setMaximumSize(20, 20); ok->setMaximumSize(20, 20);
edit = new QLineEdit; edit = new QLineEdit;
edit->setObjectName("edit");
edit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); edit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
QGridLayout *layout = new QGridLayout; QGridLayout *layout = new QGridLayout;
layout->setObjectName("layout");
layout->setContentsMargins(0, 0, 0, 0); layout->setContentsMargins(0, 0, 0, 0);
layout->addWidget(typeCombo, 0, 0, 1, 2); layout->addWidget(typeCombo, 0, 0, 1, 2);

View file

@ -223,8 +223,8 @@ int main(int argc, char *argv[])
generateClientID(); //generate the users client id generateClientID(); //generate the users client id
qDebug() << "ClientID In Cache: " << settingsCache->getClientID(); qDebug() << "ClientID In Cache: " << settingsCache->getClientID();
ui.show(); ui.showMaximized();
qDebug("main(): ui.show() finished"); qDebug("main(): ui.showMaximized() finished");
app.exec(); app.exec();
} }

View file

@ -1,5 +1,26 @@
#include "settingscache.h" #include "settingscache.h"
#include <QSettings> #include <QSettings>
#if QT_VERSION >= 0x050000
#include <QStandardPaths>
#else
#include <QDesktopServices>
#endif
QString SettingsCache::getLayoutsSettingsPath()
{
QString file = "";
#ifndef PORTABLE_BUILD
#if QT_VERSION >= 0x050000
file = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
#else
file = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
#endif
file.append("/settings/layouts/");
#endif
return file;
}
SettingsCache::SettingsCache() SettingsCache::SettingsCache()
{ {
@ -97,6 +118,16 @@ SettingsCache::SettingsCache()
spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool(); spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool();
clientID = settings->value("personal/clientid", "notset").toString(); clientID = settings->value("personal/clientid", "notset").toString();
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
deckEditorLayoutState = layout_settings.value("layouts/deckEditor_state").toByteArray();
deckEditorGeometry = layout_settings.value("layouts/deckEditor_geometry").toByteArray();
deckEditorCardSize = layout_settings.value("layouts/deckEditor_CardSize", QSize(250,500)).toSize();
deckEditorFilterSize = layout_settings.value("layouts/deckEditor_FilterSize", QSize(250,250)).toSize();
deckEditorDeckSize = layout_settings.value("layouts/deckEditor_DeckSize", QSize(250,360)).toSize();
} }
void SettingsCache::setCardInfoViewMode(const int _viewMode) { void SettingsCache::setCardInfoViewMode(const int _viewMode) {
@ -462,6 +493,56 @@ QStringList SettingsCache::getCountries() const
return countries; return countries;
} }
void SettingsCache::setDeckEditorLayoutState(const QByteArray &value)
{
deckEditorLayoutState = value;
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_state",value);
}
void SettingsCache::setDeckEditorGeometry(const QByteArray &value)
{
deckEditorGeometry = value;
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_geometry",value);
}
void SettingsCache::setDeckEditorCardSize(const QSize &value)
{
deckEditorCardSize = value;
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_CardSize",value);
}
void SettingsCache::setDeckEditorDeckSize(const QSize &value)
{
deckEditorDeckSize = value;
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_DeckSize",value);
}
void SettingsCache::setDeckEditorFilterSize(const QSize &value)
{
deckEditorFilterSize = value;
QString file = getLayoutsSettingsPath();
file.append("deckLayout.ini");
QSettings layout_settings(file , QSettings::IniFormat);
layout_settings.setValue("layouts/deckEditor_FilterSize",value);
}
void SettingsCache::setGameDescription(const QString _gameDescription) void SettingsCache::setGameDescription(const QString _gameDescription)
{ {
gameDescription = _gameDescription; gameDescription = _gameDescription;

View file

@ -2,6 +2,7 @@
#define SETTINGSCACHE_H #define SETTINGSCACHE_H
#include <QObject> #include <QObject>
#include <QSize>
#include <QStringList> #include <QStringList>
// the falbacks are used for cards without a muid // the falbacks are used for cards without a muid
@ -99,6 +100,10 @@ private:
bool spectatorsCanTalk; bool spectatorsCanTalk;
bool spectatorsCanSeeEverything; bool spectatorsCanSeeEverything;
int keepalive; int keepalive;
QByteArray deckEditorLayoutState, deckEditorGeometry;
QSize deckEditorFilterSize, deckEditorDeckSize, deckEditorCardSize;
QString getLayoutsSettingsPath();
public: public:
SettingsCache(); SettingsCache();
const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; } const QByteArray &getMainWindowGeometry() const { return mainWindowGeometry; }
@ -172,6 +177,17 @@ public:
int getKeepAlive() const { return keepalive; } int getKeepAlive() const { return keepalive; }
void setClientID(QString clientID); void setClientID(QString clientID);
QString getClientID() { return clientID; } QString getClientID() { return clientID; }
QByteArray getDeckEditorLayoutState() const { return deckEditorLayoutState; }
void setDeckEditorLayoutState(const QByteArray &value);
QByteArray getDeckEditorGeometry() const { return deckEditorGeometry; }
void setDeckEditorGeometry(const QByteArray &value);
QSize getDeckEditorCardSize() const { return deckEditorCardSize; }
void setDeckEditorCardSize(const QSize &value);
QSize getDeckEditorDeckSize() const { return deckEditorDeckSize; }
void setDeckEditorDeckSize(const QSize &value);
QSize getDeckEditorFilterSize() const { return deckEditorFilterSize; }
void setDeckEditorFilterSize(const QSize &value);
public slots: public slots:
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry); void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
void setLang(const QString &_lang); void setLang(const QString &_lang);

View file

@ -19,6 +19,8 @@
#include <QTextStream> #include <QTextStream>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QTimer> #include <QTimer>
#include <QDockWidget>
#include <QPushButton>
#include "tab_deck_editor.h" #include "tab_deck_editor.h"
#include "window_sets.h" #include "window_sets.h"
#include "carddatabase.h" #include "carddatabase.h"
@ -47,108 +49,37 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event)
QLineEdit::keyPressEvent(event); QLineEdit::keyPressEvent(event);
} }
TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) void TabDeckEditor::createShowHideDocksButtons()
: Tab(_tabSupervisor, parent), modified(false)
{ {
aClearFilterAll = new QAction(QString(), this); btnFilter = new QPushButton(QIcon("://resources/icon_view.svg"),QString());
aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg")); btnFilter->setObjectName("btnFilter");
connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll())); btnFilter->setCheckable(true);
btnFilter->setChecked(true);
btnFilter->setMaximumWidth(30);
searchLayout->addWidget(btnFilter);
aClearFilterOne = new QAction(QString(), this); btnDeck = new QPushButton(QIcon("://resources/hand.svg"),QString());
aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg")); btnDeck->setObjectName("btnDeck");
connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne())); btnDeck->setCheckable(true);
btnDeck->setChecked(true);
btnDeck->setMaximumWidth(30);
searchLayout->addWidget(btnDeck);
searchEdit = new SearchLineEdit; btnCard = new QPushButton(QIcon("://back.svg"),QString());
#if QT_VERSION >= 0x050300 btnCard->setObjectName("btnCard");
searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition); btnCard->setCheckable(true);
#endif btnCard->setChecked(true);
searchEdit->setObjectName("searchEdit"); btnCard->setMaximumWidth(30);
searchLayout->addWidget(btnCard);
setFocusProxy(searchEdit); }
setFocusPolicy(Qt::ClickFocus);
searchEdit->installEventFilter(&searchKeySignals);
connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &)));
connect(&searchKeySignals, SIGNAL(onEnter()), this, SLOT(actAddCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actAddCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltRBracket()), this, SLOT(actAddCardToSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrementCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltLBracket()), this, SLOT(actDecrementCardFromSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltEnter()), this, SLOT(actAddCardToSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlEnter()), this, SLOT(actAddCardToSideboard()));
QToolBar *deckEditToolBar = new QToolBar;
deckEditToolBar->setOrientation(Qt::Horizontal);
deckEditToolBar->setIconSize(QSize(24, 24));
QHBoxLayout *searchLayout = new QHBoxLayout;
searchLayout->addWidget(deckEditToolBar);
searchLayout->addWidget(searchEdit);
databaseModel = new CardDatabaseModel(db, this);
databaseDisplayModel = new CardDatabaseDisplayModel(this);
databaseDisplayModel->setSourceModel(databaseModel);
databaseDisplayModel->setFilterKeyColumn(0);
databaseDisplayModel->sort(0, Qt::AscendingOrder);
databaseView = new QTreeView();
databaseView->setFocusProxy(searchEdit);
databaseView->setModel(databaseDisplayModel);
databaseView->setUniformRowHeights(true);
databaseView->setRootIsDecorated(false);
databaseView->setAlternatingRowColors(true);
databaseView->setSortingEnabled(true);
databaseView->sortByColumn(0, Qt::AscendingOrder);
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()));
searchEdit->setTreeView(databaseView);
QVBoxLayout *leftFrame = new QVBoxLayout;
leftFrame->addLayout(searchLayout);
leftFrame->addWidget(databaseView);
cardInfo = new CardFrame(250, 372);
filterModel = new FilterTreeModel();
databaseDisplayModel->setFilterTree(filterModel->filterTree());
filterView = new QTreeView;
filterView->setModel(filterModel);
filterView->setMaximumWidth(250);
filterView->setUniformRowHeights(true);
filterView->setHeaderHidden(true);
filterView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(filterModel, SIGNAL(layoutChanged()), filterView, SLOT(expandAll()));
connect(filterView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(filterViewCustomContextMenu(const QPoint &)));
FilterBuilder *filterBuilder = new FilterBuilder;
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QToolButton *filterDelOne = new QToolButton();
filterDelOne->setDefaultAction(aClearFilterOne);
filterDelOne->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QToolButton *filterDelAll = new QToolButton();
filterDelAll->setDefaultAction(aClearFilterAll);
filterDelAll->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QGridLayout *filterLayout = new QGridLayout;
filterLayout->addWidget(filterBuilder, 0, 0, 1, 2);
filterLayout->addWidget(filterView, 1, 0, 1, 2);
filterLayout->addWidget(filterDelOne, 2, 0);
filterLayout->addWidget(filterDelAll, 2, 1);
filterBox = new QGroupBox();
filterBox->setMaximumWidth(250);
filterBox->setLayout(filterLayout);
QVBoxLayout *middleFrame = new QVBoxLayout;
middleFrame->addWidget(cardInfo, 1, Qt::AlignTop);
middleFrame->addWidget(filterBox, 0);
void TabDeckEditor::createDeckDock()
{
deckModel = new DeckListModel(this); deckModel = new DeckListModel(this);
deckModel->setObjectName("deckModel");
connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash())); connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash()));
deckView = new QTreeView(); deckView = new QTreeView();
deckView->setObjectName("deckView");
deckView->setModel(deckModel); deckView->setModel(deckModel);
deckView->setUniformRowHeights(true); deckView->setUniformRowHeights(true);
deckView->setSortingEnabled(true); deckView->setSortingEnabled(true);
@ -170,18 +101,26 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
connect(&deckViewKeySignals, SIGNAL(onDelete()), this, SLOT(actRemoveCard())); connect(&deckViewKeySignals, SIGNAL(onDelete()), this, SLOT(actRemoveCard()));
nameLabel = new QLabel(); nameLabel = new QLabel();
nameLabel->setObjectName("nameLabel");
nameEdit = new QLineEdit; nameEdit = new QLineEdit;
nameEdit->setObjectName("nameEdit");
nameLabel->setBuddy(nameEdit); nameLabel->setBuddy(nameEdit);
connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateName(const QString &))); connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateName(const QString &)));
commentsLabel = new QLabel(); commentsLabel = new QLabel();
commentsLabel->setObjectName("commentsLabel");
commentsEdit = new QTextEdit; commentsEdit = new QTextEdit;
commentsEdit->setObjectName("commentsEdit");
commentsEdit->setMaximumHeight(70); commentsEdit->setMaximumHeight(70);
commentsLabel->setBuddy(commentsEdit); commentsLabel->setBuddy(commentsEdit);
connect(commentsEdit, SIGNAL(textChanged()), this, SLOT(updateComments())); connect(commentsEdit, SIGNAL(textChanged()), this, SLOT(updateComments()));
hashLabel1 = new QLabel(); hashLabel1 = new QLabel();
hashLabel1->setObjectName("hashLabel1");
hashLabel = new QLabel; hashLabel = new QLabel;
hashLabel->setObjectName("hashLabel");
QGridLayout *grid = new QGridLayout; QGridLayout *grid = new QGridLayout;
grid->setObjectName("grid");
grid->addWidget(nameLabel, 0, 0); grid->addWidget(nameLabel, 0, 0);
grid->addWidget(nameEdit, 0, 1); grid->addWidget(nameEdit, 0, 1);
@ -201,26 +140,119 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
*/ */
QToolBar *deckToolBar = new QToolBar; QToolBar *deckToolBar = new QToolBar;
deckToolBar->setObjectName("deckToolBar");
deckToolBar->setOrientation(Qt::Vertical); deckToolBar->setOrientation(Qt::Vertical);
deckToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); deckToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
deckToolBar->setIconSize(QSize(24, 24)); deckToolBar->setIconSize(QSize(24, 24));
//deckToolBar->addAction(aUpdatePrices); //deckToolBar->addAction(aUpdatePrices);
QHBoxLayout *deckToolbarLayout = new QHBoxLayout; QHBoxLayout *deckToolbarLayout = new QHBoxLayout;
deckToolbarLayout->setObjectName("deckToolbarLayout");
deckToolbarLayout->addStretch(); deckToolbarLayout->addStretch();
deckToolbarLayout->addWidget(deckToolBar); deckToolbarLayout->addWidget(deckToolBar);
deckToolbarLayout->addStretch(); deckToolbarLayout->addStretch();
QVBoxLayout *rightFrame = new QVBoxLayout; QVBoxLayout *rightFrame = new QVBoxLayout;
rightFrame->setObjectName("rightFrame");
rightFrame->addLayout(grid); rightFrame->addLayout(grid);
rightFrame->addWidget(deckView, 10); rightFrame->addWidget(deckView, 10);
rightFrame->addLayout(deckToolbarLayout); rightFrame->addLayout(deckToolbarLayout);
QHBoxLayout *mainLayout = new QHBoxLayout; deckDock = new QDockWidget(MainWindow);
mainLayout->addLayout(leftFrame, 10); deckDock->setObjectName("deckDock");
mainLayout->addLayout(middleFrame);
mainLayout->addLayout(rightFrame);
setLayout(mainLayout);
deckDock->setMinimumSize(QSize(200, 41));
deckDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
deckDock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable);
QWidget *deckDockContents = new QWidget();
deckDockContents->setObjectName("deckDockContents");
deckDockContents->setLayout(rightFrame);
deckDock->setWidget(deckDockContents);
connect(btnDeck,SIGNAL(toggled(bool)),deckDock,SLOT(setVisible(bool)));
deckDock->installEventFilter(this);
}
void TabDeckEditor::createCardInfoDock()
{
cardInfo = new CardFrame();
cardInfo->setObjectName("cardInfo");
QVBoxLayout *cardInfoFrame = new QVBoxLayout;
cardInfoFrame->setObjectName("cardInfoFrame");
cardInfoFrame->addWidget(cardInfo);
cardInfoDock = new QDockWidget(MainWindow);
cardInfoDock->setObjectName("cardInfoDock");
cardInfoDock->setMinimumSize(QSize(200, 41));
cardInfoDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
cardInfoDock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable);
QWidget *cardInfoDockContents = new QWidget();
cardInfoDockContents->setObjectName("cardInfoDockContents");
cardInfoDockContents->setLayout(cardInfoFrame);
cardInfoDock->setWidget(cardInfoDockContents);
connect(btnCard,SIGNAL(toggled(bool)),cardInfoDock,SLOT(setVisible(bool)));
cardInfoDock->installEventFilter(this);
}
void TabDeckEditor::createFiltersDock()
{
filterModel = new FilterTreeModel();
filterModel->setObjectName("filterModel");
databaseDisplayModel->setFilterTree(filterModel->filterTree());
databaseDisplayModel->setObjectName("databaseDisplayModel");
filterView = new QTreeView;
filterView->setObjectName("filterView");
filterView->setModel(filterModel);
filterView->setUniformRowHeights(true);
filterView->setHeaderHidden(true);
filterView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(filterModel, SIGNAL(layoutChanged()), filterView, SLOT(expandAll()));
connect(filterView, SIGNAL(customContextMenuRequested(const QPoint &)),this, SLOT(filterViewCustomContextMenu(const QPoint &)));
FilterBuilder *filterBuilder = new FilterBuilder;
filterBuilder->setObjectName("filterBuilder");
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QToolButton *filterDelOne = new QToolButton();
filterDelOne->setObjectName("filterDelOne");
filterDelOne->setDefaultAction(aClearFilterOne);
filterDelOne->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QToolButton *filterDelAll = new QToolButton();
filterDelAll->setObjectName("filterDelAll");
filterDelAll->setDefaultAction(aClearFilterAll);
filterDelAll->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QGridLayout *filterLayout = new QGridLayout;
filterLayout->setObjectName("filterLayout");
filterLayout->setContentsMargins(0,0,0,0);
filterLayout->addWidget(filterBuilder, 0, 0, 1, 2);
filterLayout->addWidget(filterView, 1, 0, 1, 2);
filterBox = new QWidget();
filterBox->setObjectName("filterBox");
filterBox->setLayout(filterLayout);
QVBoxLayout *filterFrame = new QVBoxLayout;
filterFrame->setObjectName("filterFrame");
filterFrame->addWidget(filterBox);
filterDock = new QDockWidget(MainWindow);
filterDock->setObjectName("filterDock");
filterDock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable);
QWidget *filterDockContents = new QWidget(MainWindow);
filterDockContents->setObjectName("filterDockContents");
filterDockContents->setLayout(filterFrame);
filterDock->setWidget(filterDockContents);
connect(btnFilter,SIGNAL(toggled(bool)),filterDock,SLOT(setVisible(bool)));
filterDock->installEventFilter(this);
}
void TabDeckEditor::createMenus()
{
aNewDeck = new QAction(QString(), this); aNewDeck = new QAction(QString(), this);
aNewDeck->setShortcuts(QKeySequence::New); aNewDeck->setShortcuts(QKeySequence::New);
connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck())); connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck()));
@ -254,6 +286,9 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
aEditTokens = new QAction(QString(), this); aEditTokens = new QAction(QString(), this);
connect(aEditTokens, SIGNAL(triggered()), this, SLOT(actEditTokens())); connect(aEditTokens, SIGNAL(triggered()), this, SLOT(actEditTokens()));
aResetLayout = new QAction(QString(), this);
connect(aResetLayout,SIGNAL(triggered()),this,SLOT(restartLayout()));
deckMenu = new QMenu(this); deckMenu = new QMenu(this);
deckMenu->addAction(aNewDeck); deckMenu->addAction(aNewDeck);
deckMenu->addAction(aLoadDeck); deckMenu->addAction(aLoadDeck);
@ -267,19 +302,74 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
deckMenu->addSeparator(); deckMenu->addSeparator();
deckMenu->addAction(aAnalyzeDeck); deckMenu->addAction(aAnalyzeDeck);
deckMenu->addSeparator(); deckMenu->addSeparator();
deckMenu->addAction(aResetLayout);
deckMenu->addSeparator();
deckMenu->addAction(aClose); deckMenu->addAction(aClose);
addTabMenu(deckMenu); addTabMenu(deckMenu);
aClearFilterAll = new QAction(QString(), this);
aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll()));
aClearFilterOne = new QAction(QString(), this);
aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg"));
connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne()));
dbMenu = new QMenu(this); dbMenu = new QMenu(this);
dbMenu->addAction(aEditSets); dbMenu->addAction(aEditSets);
dbMenu->addAction(aEditTokens); dbMenu->addAction(aEditTokens);
dbMenu->addSeparator(); dbMenu->addSeparator();
dbMenu->addAction(aClearFilterOne);
dbMenu->addAction(aClearFilterAll); dbMenu->addAction(aClearFilterAll);
#if defined(Q_OS_WIN) || defined(Q_OS_MAC) #if defined(Q_OS_WIN) || defined(Q_OS_MAC)
dbMenu->addSeparator(); dbMenu->addSeparator();
dbMenu->addAction(aOpenCustomFolder); dbMenu->addAction(aOpenCustomFolder);
#endif #endif
addTabMenu(dbMenu); addTabMenu(dbMenu);
}
void TabDeckEditor::createCentralFrame()
{
searchEdit = new SearchLineEdit;
searchEdit->setObjectName("searchEdit");
#if QT_VERSION >= 0x050300
searchEdit->addAction(QIcon(":/resources/icon_search_black.svg"), QLineEdit::LeadingPosition);
#endif
setFocusProxy(searchEdit);
setFocusPolicy(Qt::ClickFocus);
searchEdit->installEventFilter(&searchKeySignals);
searchKeySignals.setObjectName("searchKeySignals");
connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &)));
connect(&searchKeySignals, SIGNAL(onEnter()), this, SLOT(actAddCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltEqual()), this, SLOT(actAddCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltRBracket()), this, SLOT(actAddCardToSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltMinus()), this, SLOT(actDecrementCard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltLBracket()), this, SLOT(actDecrementCardFromSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlAltEnter()), this, SLOT(actAddCardToSideboard()));
connect(&searchKeySignals, SIGNAL(onCtrlEnter()), this, SLOT(actAddCardToSideboard()));
databaseModel = new CardDatabaseModel(db, this);
databaseModel->setObjectName("databaseModel");
databaseDisplayModel = new CardDatabaseDisplayModel(this);
databaseDisplayModel->setSourceModel(databaseModel);
databaseDisplayModel->setFilterKeyColumn(0);
databaseDisplayModel->sort(0, Qt::AscendingOrder);
databaseView = new QTreeView();
databaseView->setObjectName("databaseView");
databaseView->setFocusProxy(searchEdit);
databaseView->setModel(databaseDisplayModel);
databaseView->setUniformRowHeights(true);
databaseView->setRootIsDecorated(false);
databaseView->setAlternatingRowColors(true);
databaseView->setSortingEnabled(true);
databaseView->sortByColumn(0, Qt::AscendingOrder);
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()));
searchEdit->setTreeView(databaseView);
aAddCard = new QAction(QString(), this); aAddCard = new QAction(QString(), this);
aAddCard->setIcon(QIcon(":/resources/arrow_right_green.svg")); aAddCard->setIcon(QIcon(":/resources/arrow_right_green.svg"));
@ -297,6 +387,11 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
aDecrement->setIcon(QIcon(":/resources/decrement.svg")); aDecrement->setIcon(QIcon(":/resources/decrement.svg"));
connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement())); connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement()));
QToolBar *deckEditToolBar = new QToolBar;
deckEditToolBar->setObjectName("deckEditToolBar");
deckEditToolBar->setOrientation(Qt::Horizontal);
deckEditToolBar->setIconSize(QSize(24, 24));
deckEditToolBar->addAction(aAddCard); deckEditToolBar->addAction(aAddCard);
deckEditToolBar->addAction(aAddCardToSideboard); deckEditToolBar->addAction(aAddCardToSideboard);
deckEditToolBar->addAction(aRemoveCard); deckEditToolBar->addAction(aRemoveCard);
@ -304,11 +399,108 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
deckEditToolBar->addAction(aIncrement); deckEditToolBar->addAction(aIncrement);
deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
searchLayout = new QHBoxLayout;
searchLayout->setObjectName("searchLayout");
searchLayout->addWidget(deckEditToolBar);
searchLayout->addWidget(searchEdit);
createShowHideDocksButtons();
centralFrame = new QVBoxLayout;
centralFrame->setObjectName("centralFrame");
centralFrame->addLayout(searchLayout);
centralFrame->addWidget(databaseView);
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName("centralWidget");
centralWidget->setLayout(centralFrame);
MainWindow->setCentralWidget(centralWidget);
MainWindow->setDockOptions(QMainWindow::AnimatedDocks|QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->setObjectName("mainLayout");
mainLayout->addWidget(MainWindow);
setLayout(mainLayout);
}
void TabDeckEditor::restartLayout()
{
btnDeck->setChecked(true);
btnFilter->setChecked(true);
btnCard->setChecked(true);
deckDock->setFloating(false);
cardInfoDock->setFloating(false);
filterDock->setFloating(false);
MainWindow->addDockWidget(static_cast<Qt::DockWidgetArea>(2), deckDock);
MainWindow->addDockWidget(static_cast<Qt::DockWidgetArea>(2), cardInfoDock);
MainWindow->addDockWidget(static_cast<Qt::DockWidgetArea>(2), filterDock);
MainWindow->splitDockWidget(cardInfoDock, deckDock, Qt::Horizontal);
MainWindow->splitDockWidget(cardInfoDock, filterDock, Qt::Vertical);
deckDock->setMinimumWidth(360);
deckDock->setMaximumWidth(360);
cardInfoDock->setMinimumSize(250, 360);
cardInfoDock->setMaximumSize(250, 360);
QTimer::singleShot(100, this, SLOT(freeDocksSize()));
}
void TabDeckEditor::freeDocksSize()
{
deckDock->setMinimumSize(100, 100);
deckDock->setMaximumSize(5000, 5000);
cardInfoDock->setMinimumSize(100, 100);
cardInfoDock->setMaximumSize(5000, 5000);
filterDock->setMinimumSize(100,100);
filterDock->setMaximumSize(5000,5000);
}
void TabDeckEditor::loadLayout()
{
MainWindow->restoreState(settingsCache->getDeckEditorLayoutState());
MainWindow->restoreGeometry(settingsCache->getDeckEditorGeometry());
btnCard->setChecked(!cardInfoDock->isHidden());
btnFilter->setChecked(!filterDock->isHidden());
btnDeck->setChecked(!deckDock->isHidden());
cardInfoDock->setMinimumSize(settingsCache->getDeckEditorCardSize());
cardInfoDock->setMaximumSize(settingsCache->getDeckEditorCardSize());
filterDock->setMinimumSize(settingsCache->getDeckEditorFilterSize());
filterDock->setMaximumSize(settingsCache->getDeckEditorFilterSize());
deckDock->setMinimumSize(settingsCache->getDeckEditorDeckSize());
deckDock->setMaximumSize(settingsCache->getDeckEditorDeckSize());
QTimer::singleShot(100, this, SLOT(freeDocksSize()));
}
TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
: Tab(_tabSupervisor, parent), modified(false)
{
MainWindow = new QMainWindow;
MainWindow->setObjectName("MainWindow");
createMenus();
createCentralFrame();
createDeckDock();
createCardInfoDock();
createFiltersDock();
restartLayout();
this->installEventFilter(this);
retranslateUi(); retranslateUi();
resize(950, 700);
QTimer::singleShot(0, this, SLOT(checkFirstRunDetected())); QTimer::singleShot(0, this, SLOT(checkFirstRunDetected()));
QTimer::singleShot(0, this, SLOT(loadLayout()));
} }
TabDeckEditor::~TabDeckEditor() TabDeckEditor::~TabDeckEditor()
@ -320,7 +512,6 @@ void TabDeckEditor::retranslateUi()
{ {
cardInfo->retranslateUi(); cardInfo->retranslateUi();
filterBox->setTitle(tr("Filters"));
aClearFilterAll->setText(tr("&Clear all filters")); aClearFilterAll->setText(tr("&Clear all filters"));
aClearFilterOne->setText(tr("Delete selected")); aClearFilterOne->setText(tr("Delete selected"));
aClearFilterOne->setShortcut(QKeySequence("Backspace")); aClearFilterOne->setShortcut(QKeySequence("Backspace"));
@ -359,6 +550,14 @@ void TabDeckEditor::retranslateUi()
aEditSets->setText(tr("&Edit sets...")); aEditSets->setText(tr("&Edit sets..."));
aEditTokens->setText(tr("Edit &tokens...")); aEditTokens->setText(tr("Edit &tokens..."));
btnCard->setToolTip(tr("Show/Hide card information"));
btnDeck->setToolTip(tr("Show/Hide deck"));
btnFilter->setToolTip(tr("Show/Hide filters"));
aResetLayout->setText(tr("Reset layout"));
cardInfoDock->setWindowTitle(tr("Card Info"));
deckDock->setWindowTitle(tr("Deck"));
filterDock->setWindowTitle(tr("Filters"));
} }
QString TabDeckEditor::getTabText() const QString TabDeckEditor::getTabText() const
@ -737,6 +936,27 @@ void TabDeckEditor::setPriceTagFeatureEnabled(int /* enabled */)
deckModel->pricesUpdated(); deckModel->pricesUpdated();
} }
bool TabDeckEditor::eventFilter(QObject * o, QEvent * e)
{
if(e->type() == QEvent::Close)
{
if(o == cardInfoDock)
btnCard->setChecked(false);
else if(o == deckDock)
btnDeck->setChecked(false);
else if(o == filterDock)
btnFilter->setChecked(false);
}
if( o == this && e->type() == QEvent::Hide){
settingsCache->setDeckEditorLayoutState(MainWindow->saveState());
settingsCache->setDeckEditorGeometry(MainWindow->saveGeometry());
settingsCache->setDeckEditorCardSize(cardInfoDock->size());
settingsCache->setDeckEditorFilterSize(filterDock->size());
settingsCache->setDeckEditorDeckSize(deckDock->size());
}
return false;
}
/* /*
void TabDeckEditor::actUpdatePrices() void TabDeckEditor::actUpdatePrices()

View file

@ -20,6 +20,10 @@ class FilterTreeModel;
class FilterBuilder; class FilterBuilder;
class CardInfo; class CardInfo;
class QGroupBox; class QGroupBox;
class QHBoxLayout;
class QPushButton;
class QMainWindow;
class QDockWidget;
class SearchLineEdit : public QLineEdit { class SearchLineEdit : public QLineEdit {
private: private:
@ -73,6 +77,12 @@ class TabDeckEditor : public Tab {
void filterViewCustomContextMenu(const QPoint &point); void filterViewCustomContextMenu(const QPoint &point);
void filterRemove(QAction *action); void filterRemove(QAction *action);
void setPriceTagFeatureEnabled(int enabled); void setPriceTagFeatureEnabled(int enabled);
bool eventFilter(QObject *o, QEvent *e);
void loadLayout();
void restartLayout();
void freeDocksSize();
private: private:
CardInfo *currentCardInfo() const; CardInfo *currentCardInfo() const;
void addCardHelper(QString zoneName); void addCardHelper(QString zoneName);
@ -99,14 +109,25 @@ private:
QLabel *hashLabel; QLabel *hashLabel;
FilterTreeModel *filterModel; FilterTreeModel *filterModel;
QTreeView *filterView; QTreeView *filterView;
QGroupBox *filterBox; QWidget *filterBox;
QMenu *deckMenu, *dbMenu; QMenu *deckMenu, *dbMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose, *aOpenCustomFolder; QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose, *aOpenCustomFolder;
QAction *aEditSets, *aEditTokens, *aClearFilterAll, *aClearFilterOne; QAction *aEditSets, *aEditTokens, *aClearFilterAll, *aClearFilterOne;
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement;// *aUpdatePrices; QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement;// *aUpdatePrices;
QAction *aResetLayout;
bool modified; bool modified;
QMainWindow *MainWindow;
QVBoxLayout *centralFrame;
QHBoxLayout *searchLayout;
QPushButton *btnFilter;
QPushButton *btnDeck;
QPushButton *btnCard;
QDockWidget *cardInfoDock;
QDockWidget *deckDock;
QDockWidget *filterDock;
QWidget *centralWidget;
public: public:
TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent = 0); TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent = 0);
~TabDeckEditor(); ~TabDeckEditor();
@ -115,6 +136,13 @@ public:
void setDeck(DeckLoader *_deckLoader); void setDeck(DeckLoader *_deckLoader);
void setModified(bool _windowModified); void setModified(bool _windowModified);
bool confirmClose(); bool confirmClose();
void createShowHideDocksButtons();
void createDeckDock();
void createCardInfoDock();
void createFiltersDock();
void createMenus();
void createCentralFrame();
public slots: public slots:
void closeRequest(); void closeRequest();
void checkFirstRunDetected(); void checkFirstRunDetected();

View file

@ -282,7 +282,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
gameView = new GameView(scene); gameView = new GameView(scene);
gameView->hide(); gameView->hide();
cardInfo = new CardFrame(250, 372); cardInfo = new CardFrame();
playerListWidget = new PlayerListWidget(0, 0, this); playerListWidget = new PlayerListWidget(0, 0, this);
playerListWidget->setFocusPolicy(Qt::NoFocus); playerListWidget->setFocusPolicy(Qt::NoFocus);
@ -396,7 +396,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList<AbstractClient *> &_client
gameView = new GameView(scene); gameView = new GameView(scene);
gameView->hide(); gameView->hide();
cardInfo = new CardFrame(250, 372); cardInfo = new CardFrame();
playerListWidget = new PlayerListWidget(tabSupervisor, clients.first(), this); playerListWidget = new PlayerListWidget(tabSupervisor, clients.first(), this);
playerListWidget->setFocusPolicy(Qt::NoFocus); playerListWidget->setFocusPolicy(Qt::NoFocus);
connect(playerListWidget, SIGNAL(openMessageDialog(QString, bool)), this, SIGNAL(openMessageDialog(QString, bool))); connect(playerListWidget, SIGNAL(openMessageDialog(QString, bool)), this, SIGNAL(openMessageDialog(QString, bool)));