reverted back to original deck editor layout but including filtertree

the original layout is actually more space efficient if using CardFrame
instead of CardInfoWidget and reducing the size of the deck editor
toolbar.

this commit also removes the old search feature by removing the search
button and the clear search button. the clear search menu item is left
in place, however it now clears the filtertree.

finally, the stretch factor for the right frame in the main layout was
reduced to zero so that the card database gets priority for extra space.
this makes more sense because the deck editor does not actually need
very much horizontal space.
This commit is contained in:
sylvanbasilisk 2014-01-26 23:20:35 +00:00
parent 16d30fb9e1
commit c786e180c3
9 changed files with 80 additions and 125 deletions

View file

@ -158,10 +158,12 @@ void CardDatabaseDisplayModel::clearSearch()
cardText.clear(); cardText.clear();
cardTypes.clear(); cardTypes.clear();
cardColors.clear(); cardColors.clear();
if (filterTree != NULL)
filterTree->clear();
invalidateFilter(); invalidateFilter();
} }
void CardDatabaseDisplayModel::setFilterTree(const FilterTree *filterTree) void CardDatabaseDisplayModel::setFilterTree(FilterTree *filterTree)
{ {
if (this->filterTree != NULL) if (this->filterTree != NULL)
disconnect(this->filterTree, 0, this, 0); disconnect(this->filterTree, 0, this, 0);

View file

@ -38,10 +38,10 @@ private:
FilterBool isToken; FilterBool isToken;
QString cardNameBeginning, cardName, cardText; QString cardNameBeginning, cardName, cardText;
QSet<QString> cardNameSet, cardTypes, cardColors; QSet<QString> cardNameSet, cardTypes, cardColors;
const FilterTree *filterTree; FilterTree *filterTree;
public: public:
CardDatabaseDisplayModel(QObject *parent = 0); CardDatabaseDisplayModel(QObject *parent = 0);
void setFilterTree(const FilterTree *filterTree); void setFilterTree(FilterTree *filterTree);
void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); } void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); }
void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); } void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); }
void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); } void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); }

View file

@ -5,15 +5,12 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "main.h" #include "main.h"
CardFrame::CardFrame(const QString &cardName, QWidget *parent, Qt::WindowFlags flags) CardFrame::CardFrame(const QString &cardName, QWidget *parent)
: QLabel(parent, flags) : QLabel(parent)
, info(0) , info(0)
{ {
this->setAlignment(Qt::AlignCenter);
setFrameStyle(QFrame::Panel | QFrame::Raised); setFrameStyle(QFrame::Panel | QFrame::Raised);
setFixedWidth(250); setMaximumWidth(250);
setCard(db->getCard(cardName)); setCard(db->getCard(cardName));
} }

View file

@ -15,7 +15,7 @@ private:
CardInfo *info; CardInfo *info;
public: public:
CardFrame(const QString &cardName = QString(), QWidget *parent = 0, Qt::WindowFlags f = 0); CardFrame(const QString &cardName = QString(), QWidget *parent = 0);
QString getCardName() const; QString getCardName() const;
public slots: public slots:

View file

@ -328,3 +328,9 @@ bool FilterTree::acceptsCard(const CardInfo *info) const
return true; return true;
} }
void FilterTree::clear()
{
while(childCount() > 0)
deleteAt(0);
}

View file

@ -27,23 +27,18 @@ public:
virtual bool isLeaf() const { return false; } virtual bool isLeaf() const { return false; }
virtual const char *textCStr() const { return text().toStdString().c_str(); } virtual const char *textCStr() const { return text().toStdString().c_str(); }
virtual void nodeChanged() const { virtual void nodeChanged() const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->nodeChanged(); if (parent() != NULL) parent()->nodeChanged();
} }
virtual void preInsertChild(const FilterTreeNode *p, int i) const { virtual void preInsertChild(const FilterTreeNode *p, int i) const {
//printf("%s -> ", textCStr());
if (parent() != NULL) parent()->preInsertChild(p, i); if (parent() != NULL) parent()->preInsertChild(p, i);
} }
virtual void postInsertChild(const FilterTreeNode *p, int i) const { virtual void postInsertChild(const FilterTreeNode *p, int i) const {
//printf("%s -> ", textCStr());
if (parent() != NULL) parent()->postInsertChild(p, i); if (parent() != NULL) parent()->postInsertChild(p, i);
} }
virtual void preRemoveChild(const FilterTreeNode *p, int i) const { virtual void preRemoveChild(const FilterTreeNode *p, int i) const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->preRemoveChild(p, i); if (parent() != NULL) parent()->preRemoveChild(p, i);
} }
virtual void postRemoveChild(const FilterTreeNode *p, int i) const { virtual void postRemoveChild(const FilterTreeNode *p, int i) const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->postRemoveChild(p, i); if (parent() != NULL) parent()->postRemoveChild(p, i);
} }
}; };
@ -139,6 +134,13 @@ private:
CardFilter::Type type); CardFilter::Type type);
bool testAttr(const CardInfo *info, const LogicMap *lm) const; bool testAttr(const CardInfo *info, const LogicMap *lm) const;
void nodeChanged() const { emit changed(); }
void preInsertChild(const FilterTreeNode *p, int i) const { emit preInsertRow(p, i); }
void postInsertChild(const FilterTreeNode *p, int i) const { emit postInsertRow(p, i); }
void preRemoveChild(const FilterTreeNode *p, int i) const { emit preRemoveRow(p, i); }
void postRemoveChild(const FilterTreeNode *p, int i) const { emit postRemoveRow(p, i); }
public: public:
FilterTree(); FilterTree();
~FilterTree(); ~FilterTree();
@ -153,13 +155,8 @@ public:
QString text() const { return QString("root"); } QString text() const { return QString("root"); }
int index() const { return 0; } int index() const { return 0; }
void nodeChanged() const { printf("root\n"); emit changed(); }
void preInsertChild(const FilterTreeNode *p, int i) const { emit preInsertRow(p, i); }
void postInsertChild(const FilterTreeNode *p, int i) const { emit postInsertRow(p, i); }
void preRemoveChild(const FilterTreeNode *p, int i) const { printf("root\n"); emit preRemoveRow(p, i); }
void postRemoveChild(const FilterTreeNode *p, int i) const { printf("root\n"); emit postRemoveRow(p, i); }
bool acceptsCard(const CardInfo *info) const; bool acceptsCard(const CardInfo *info) const;
void clear();
}; };
#endif #endif

View file

@ -28,7 +28,7 @@ private:
public: public:
FilterTreeModel(QObject *parent = 0); FilterTreeModel(QObject *parent = 0);
~FilterTreeModel(); ~FilterTreeModel();
const FilterTree *filterTree() const { return fTree; } FilterTree *filterTree() const { return fTree; }
int rowCount(const QModelIndex &parent = QModelIndex()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const; int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const; QVariant data(const QModelIndex &index, int role) const;

View file

@ -21,7 +21,7 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "carddatabasemodel.h" #include "carddatabasemodel.h"
#include "decklistmodel.h" #include "decklistmodel.h"
#include "dlg_cardsearch.h" #include "cardinfowidget.h"
#include "dlg_load_deck_from_clipboard.h" #include "dlg_load_deck_from_clipboard.h"
#include "dlg_edit_tokens.h" #include "dlg_edit_tokens.h"
#include "main.h" #include "main.h"
@ -33,20 +33,9 @@
#include "pending_command.h" #include "pending_command.h"
#include "pb/response.pb.h" #include "pb/response.pb.h"
#include "pb/command_deck_upload.pb.h" #include "pb/command_deck_upload.pb.h"
#include <QGridLayout> #include "filtertreemodel.h"
#include <QLabel>
#include <QTextEdit>
#include <QPushButton>
#include <QStyle>
#include <QMouseEvent>
#include <QDesktopWidget>
#include "cardframe.h" #include "cardframe.h"
#include "filterbuilder.h" #include "filterbuilder.h"
//#include "carditem.h"
//#include "carddatabase.h"
#include "main.h"
#include "settingscache.h"
#include "filtertreemodel.h"
void SearchLineEdit::keyPressEvent(QKeyEvent *event) void SearchLineEdit::keyPressEvent(QKeyEvent *event)
{ {
@ -58,9 +47,6 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event)
TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
: Tab(_tabSupervisor, parent), modified(false) : Tab(_tabSupervisor, parent), modified(false)
{ {
aSearch = new QAction(QString(), this);
aSearch->setIcon(QIcon(":/resources/icon_search.svg"));
connect(aSearch, SIGNAL(triggered()), this, SLOT(actSearch()));
aClearSearch = new QAction(QString(), this); aClearSearch = new QAction(QString(), this);
aClearSearch->setIcon(QIcon(":/resources/icon_clearsearch.svg")); aClearSearch->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
connect(aClearSearch, SIGNAL(triggered()), this, SLOT(actClearSearch())); connect(aClearSearch, SIGNAL(triggered()), this, SLOT(actClearSearch()));
@ -70,16 +56,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
searchLabel->setBuddy(searchEdit); searchLabel->setBuddy(searchEdit);
connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &))); connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &)));
connect(searchEdit, SIGNAL(returnPressed()), this, SLOT(actAddCard())); connect(searchEdit, SIGNAL(returnPressed()), this, SLOT(actAddCard()));
QToolButton *searchButton = new QToolButton;
searchButton->setDefaultAction(aSearch); QToolBar *deckEditToolBar = new QToolBar;
QToolButton *clearSearchButton = new QToolButton; deckEditToolBar->setOrientation(Qt::Horizontal);
clearSearchButton->setDefaultAction(aClearSearch); deckEditToolBar->setIconSize(QSize(24, 24));
QHBoxLayout *searchLayout = new QHBoxLayout; QHBoxLayout *searchLayout = new QHBoxLayout;
searchLayout->addWidget(deckEditToolBar);
searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchLabel);
searchLayout->addWidget(searchEdit); searchLayout->addWidget(searchEdit);
searchLayout->addWidget(searchButton);
searchLayout->addWidget(clearSearchButton);
databaseModel = new CardDatabaseModel(db, this); databaseModel = new CardDatabaseModel(db, this);
databaseDisplayModel = new CardDatabaseDisplayModel(this); databaseDisplayModel = new CardDatabaseDisplayModel(this);
@ -98,16 +83,33 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard())); connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard()));
searchEdit->setTreeView(databaseView); searchEdit->setTreeView(databaseView);
cardInfo = new CardFrame(); QVBoxLayout *leftFrame = new QVBoxLayout;
cardInfo->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); leftFrame->addLayout(searchLayout);
leftFrame->addWidget(databaseView);
QToolBar *verticalToolBar = new QToolBar; cardInfo = new CardFrame();
verticalToolBar->setOrientation(Qt::Horizontal); filterModel = new FilterTreeModel();
verticalToolBar->setIconSize(QSize(24, 24)); databaseDisplayModel->setFilterTree(filterModel->filterTree());
QHBoxLayout *verticalToolBarLayout = new QHBoxLayout; filterView = new QTreeView;
//verticalToolBarLayout->addStretch(); filterView->setModel(filterModel);
verticalToolBarLayout->addWidget(verticalToolBar); filterView->setMaximumWidth(250);
//verticalToolBarLayout->addStretch(); 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->setMaximumWidth(250);
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QVBoxLayout *filter = new QVBoxLayout;
filter->addWidget(filterBuilder, 0, Qt::AlignTop);
filter->addWidget(filterView, 10);
QVBoxLayout *middleFrame = new QVBoxLayout;
middleFrame->addWidget(cardInfo, 0, Qt::AlignTop);
middleFrame->addLayout(filter, 10);
deckModel = new DeckListModel(this); deckModel = new DeckListModel(this);
connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash())); connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash()));
@ -133,6 +135,9 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
grid->addWidget(nameLabel, 0, 0); grid->addWidget(nameLabel, 0, 0);
grid->addWidget(nameEdit, 0, 1); grid->addWidget(nameEdit, 0, 1);
grid->addWidget(commentsLabel, 1, 0);
grid->addWidget(commentsEdit, 1, 1);
grid->addWidget(hashLabel1, 2, 0); grid->addWidget(hashLabel1, 2, 0);
grid->addWidget(hashLabel, 2, 1); grid->addWidget(hashLabel, 2, 1);
@ -153,49 +158,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
deckToolbarLayout->addWidget(deckToolBar); deckToolbarLayout->addWidget(deckToolBar);
deckToolbarLayout->addStretch(); deckToolbarLayout->addStretch();
QVBoxLayout *deckFrame = new QVBoxLayout; QVBoxLayout *rightFrame = new QVBoxLayout;
deckFrame->addLayout(grid); rightFrame->addLayout(grid);
deckFrame->addWidget(deckView, 10); rightFrame->addWidget(deckView, 10);
deckFrame->addLayout(deckToolbarLayout); rightFrame->addLayout(deckToolbarLayout);
QHBoxLayout *topFrame = new QHBoxLayout; QHBoxLayout *mainLayout = new QHBoxLayout;
topFrame->addWidget(cardInfo, 10); mainLayout->addLayout(leftFrame, 10);
topFrame->addLayout(deckFrame); mainLayout->addLayout(middleFrame);
mainLayout->addLayout(rightFrame);
QVBoxLayout *botFrame = new QVBoxLayout;
QGridLayout *searchAndButtons = new QGridLayout;
searchAndButtons->addLayout(verticalToolBarLayout, 0, 0);
searchAndButtons->addLayout(searchLayout, 0, 1);
botFrame->addLayout(searchAndButtons);
filterModel = new FilterTreeModel();
databaseDisplayModel->setFilterTree(filterModel->filterTree());
filterView = new QTreeView;
filterView->setModel(filterModel);
filterView->setMaximumWidth(250);
filterView->setUniformRowHeights(true);
filterView->setHeaderHidden(true);
filterView->setExpandsOnDoubleClick(false);
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->setMaximumWidth(250);
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QVBoxLayout *filter = new QVBoxLayout;
filter->addWidget(filterBuilder, 0, Qt::AlignTop);
filter->addWidget(filterView);
QHBoxLayout *dbFrame = new QHBoxLayout;
dbFrame->addLayout(filter);
dbFrame->addWidget(databaseView);
botFrame->addLayout(dbFrame);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topFrame, 10);
mainLayout->addLayout(botFrame, 10);
setLayout(mainLayout); setLayout(mainLayout);
aNewDeck = new QAction(QString(), this); aNewDeck = new QAction(QString(), this);
@ -249,7 +220,6 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
dbMenu->addAction(aEditSets); dbMenu->addAction(aEditSets);
dbMenu->addAction(aEditTokens); dbMenu->addAction(aEditTokens);
dbMenu->addSeparator(); dbMenu->addSeparator();
dbMenu->addAction(aSearch);
dbMenu->addAction(aClearSearch); dbMenu->addAction(aClearSearch);
addTabMenu(dbMenu); addTabMenu(dbMenu);
@ -269,14 +239,12 @@ 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()));
verticalToolBar->addAction(aAddCard); deckEditToolBar->addAction(aAddCard);
verticalToolBar->addAction(aAddCardToSideboard); deckEditToolBar->addAction(aAddCardToSideboard);
verticalToolBar->addAction(aRemoveCard); deckEditToolBar->addAction(aRemoveCard);
verticalToolBar->addAction(aIncrement); deckEditToolBar->addAction(aIncrement);
verticalToolBar->addAction(aDecrement); deckEditToolBar->addAction(aDecrement);
verticalToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
dlgCardSearch = new DlgCardSearch(this);
retranslateUi(); retranslateUi();
@ -290,7 +258,6 @@ TabDeckEditor::~TabDeckEditor()
void TabDeckEditor::retranslateUi() void TabDeckEditor::retranslateUi()
{ {
aSearch->setText(tr("&Search..."));
aClearSearch->setText(tr("&Clear search")); aClearSearch->setText(tr("&Clear search"));
searchLabel->setText(tr("&Search for:")); searchLabel->setText(tr("&Search for:"));
@ -299,11 +266,11 @@ void TabDeckEditor::retranslateUi()
hashLabel1->setText(tr("Hash:")); hashLabel1->setText(tr("Hash:"));
aUpdatePrices->setText(tr("&Update prices")); aUpdatePrices->setText(tr("&Update prices"));
aUpdatePrices->setShortcut(tr("Ctrl+U")); aUpdatePrices->setShortcut(tr("Ctrl+U"));
aNewDeck->setText(tr("&New deck")); aNewDeck->setText(tr("&New deck"));
aLoadDeck->setText(tr("&Load deck...")); aLoadDeck->setText(tr("&Load deck..."));
aSaveDeck->setText(tr("&Save deck")); aSaveDeck->setText(tr("&Save deck"));
aSaveDeckAs->setText(tr("Save deck &as...")); aSaveDeckAs->setText(tr("Save deck &as..."));
aLoadDeckFromClipboard->setText(tr("Load deck from cl&ipboard...")); aLoadDeckFromClipboard->setText(tr("Load deck from cl&ipboard..."));
aSaveDeckToClipboard->setText(tr("Save deck to clip&board")); aSaveDeckToClipboard->setText(tr("Save deck to clip&board"));
@ -532,17 +499,6 @@ void TabDeckEditor::actEditTokens()
db->saveToFile(settingsCache->getTokenDatabasePath(), true); db->saveToFile(settingsCache->getTokenDatabasePath(), true);
} }
void TabDeckEditor::actSearch()
{
if (dlgCardSearch->exec()) {
searchEdit->clear();
databaseDisplayModel->setCardName(dlgCardSearch->getCardName());
databaseDisplayModel->setCardText(dlgCardSearch->getCardText());
databaseDisplayModel->setCardTypes(dlgCardSearch->getCardTypes());
databaseDisplayModel->setCardColors(dlgCardSearch->getCardColors());
}
}
void TabDeckEditor::actClearSearch() void TabDeckEditor::actClearSearch()
{ {
databaseDisplayModel->clearSearch(); databaseDisplayModel->clearSearch();

View file

@ -12,7 +12,6 @@ class QTreeView;
class QTableView; class QTableView;
class CardFrame; class CardFrame;
class QTextEdit; class QTextEdit;
class DlgCardSearch;
class QLabel; class QLabel;
class DeckLoader; class DeckLoader;
class Response; class Response;
@ -50,7 +49,6 @@ private slots:
void actEditSets(); void actEditSets();
void actEditTokens(); void actEditTokens();
void actSearch();
void actClearSearch(); void actClearSearch();
void actAddCard(); void actAddCard();
@ -83,13 +81,12 @@ private:
QTextEdit *commentsEdit; QTextEdit *commentsEdit;
QLabel *hashLabel1; QLabel *hashLabel1;
QLabel *hashLabel; QLabel *hashLabel;
DlgCardSearch *dlgCardSearch;
FilterTreeModel *filterModel; FilterTreeModel *filterModel;
QTreeView *filterView; QTreeView *filterView;
QMenu *deckMenu, *dbMenu; QMenu *deckMenu, *dbMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose; QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose;
QAction *aEditSets, *aEditTokens, *aSearch, *aClearSearch; QAction *aEditSets, *aEditTokens, *aClearSearch;
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices; QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices;
bool modified; bool modified;