ui: Added plain text editing dialog to list boxes in project setup UI

* Added class QtTextEditDialog for displaying text content
* Added edit button to QtDirectoryListBox
* Replaced show files button dialog using QtProjectWizzardContentSourceList with QtTextEditDialog
This commit is contained in:
Eberhard Graether
2016-08-20 00:46:09 +02:00
parent e508741c9a
commit c43e074c9e
21 changed files with 253 additions and 222 deletions
+54 -1
View File
@@ -9,8 +9,10 @@
#include <QTreeView>
#include "utility/ResourcePaths.h"
#include "utility/utilityString.h"
#include "qt/utility/utilityQt.h"
#include "qt/window/QtTextEditDialog.h"
QtListItemWidget::QtListItemWidget(QtDirectoryListBox* list, QListWidgetItem* item, QWidget *parent)
: QWidget(parent)
@@ -102,8 +104,9 @@ void QtListItemWidget::handleFocus()
}
QtDirectoryListBox::QtDirectoryListBox(QWidget *parent, bool forStrings)
QtDirectoryListBox::QtDirectoryListBox(QWidget *parent, const QString& listName, bool forStrings)
: QFrame(parent)
, m_listName(listName)
, m_forStrings(forStrings)
{
QBoxLayout* layout = new QVBoxLayout();
@@ -147,6 +150,12 @@ QtDirectoryListBox::QtDirectoryListBox(QWidget *parent, bool forStrings)
dropInfoText->setAlignment(Qt::AlignRight);
innerLayout->addWidget(dropInfoText);
QPushButton* editButton = new QPushButton("", this);
editButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
editButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
editButton->setObjectName("editButton");
innerLayout->addWidget(editButton);
if (isForStrings())
{
dropInfoText->hide();
@@ -160,6 +169,7 @@ QtDirectoryListBox::QtDirectoryListBox(QWidget *parent, bool forStrings)
connect(m_addButton, SIGNAL(clicked()), this, SLOT(addListBoxItem()));
connect(m_removeButton, SIGNAL(clicked()), this, SLOT(removeListBoxItem()));
connect(editButton, SIGNAL(clicked()), this, SLOT(showEditDialog()));
setAcceptDrops(true);
setSizePolicy(sizePolicy().horizontalPolicy(), QSizePolicy::Minimum);
@@ -330,3 +340,46 @@ void QtDirectoryListBox::dragEnterEvent(QDragEnterEvent *event)
{
event->accept();
}
void QtDirectoryListBox::showEditDialog()
{
if (!m_editDialog)
{
m_editDialog = std::make_shared<QtTextEditDialog>(m_listName, "Edit the list in plain text. Each line is one item.");
m_editDialog->setup();
m_editDialog->setText(utility::join(getStringList(), "\n"));
connect(m_editDialog.get(), SIGNAL(canceled()), this, SLOT(canceledEditDialog()));
connect(m_editDialog.get(), SIGNAL(finished()), this, SLOT(savedEditDialog()));
}
m_editDialog->showWindow();
m_editDialog->raise();
}
void QtDirectoryListBox::canceledEditDialog()
{
m_editDialog->hide();
m_editDialog.reset();
window()->raise();
}
void QtDirectoryListBox::savedEditDialog()
{
std::vector<std::string> lines = utility::splitToVector(m_editDialog->getText(), "\n");
for (size_t i = 0; i < lines.size(); i++)
{
lines[i] = utility::trim(lines[i]);
if (!lines[i].size())
{
lines.erase(lines.begin() + i);
i--;
}
}
setStringList(lines);
canceledEditDialog();
}