Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 147 additions & 2 deletions plugins/SkyCultureMaker/src/gui/ScmSkyCultureDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,27 @@
#include "ScmSkyCultureDialog.hpp"
#include "ui_scmSkyCultureDialog.h"
#include <cassert>
#include <QStyledItemDelegate>
#include <QDebug>

namespace
{

class NoEditDelegate : public QStyledItemDelegate
{
public:
NoEditDelegate(QObject* parent = nullptr)
: QStyledItemDelegate(parent)
{
}
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
return nullptr;
}
};

}

ScmSkyCultureDialog::ScmSkyCultureDialog(SkyCultureMaker *maker)
: StelDialogSeparate("ScmSkyCultureDialog")
, maker(maker)
Expand Down Expand Up @@ -169,6 +188,14 @@ void ScmSkyCultureDialog::createDialogContent()
ui->classificationCB->setCurrentIndex(index);
}
}

resetReferences();
ui->referencesList->setItemDelegateForColumn(0, new NoEditDelegate(ui->referencesList));
connect(ui->addRefBtn, &QPushButton::clicked, this, &ScmSkyCultureDialog::addNewReference);
connect(ui->removeRefBtn, &QPushButton::clicked, this, &ScmSkyCultureDialog::removeReference);
connect(ui->moveRefUpBtn, &QPushButton::clicked, this, &ScmSkyCultureDialog::moveCurrentReferenceUp);
connect(ui->moveRefDownBtn, &QPushButton::clicked, this, &ScmSkyCultureDialog::moveCurrentReferenceDown);
connect(ui->referencesList, &QTreeWidget::currentItemChanged, this, &ScmSkyCultureDialog::updateReferencesButtons);
}

void ScmSkyCultureDialog::handleFontChanged()
Expand Down Expand Up @@ -340,6 +367,111 @@ QString ScmSkyCultureDialog::getDisplayNameFromConstellation(const scm::ScmConst
return constellation.getEnglishName() + " (" + constellation.getId() + ")";
}

void ScmSkyCultureDialog::resetReferences()
{
if (ui && dialog)
{
ui->referencesList->clear();
ui->moveRefUpBtn->setEnabled(false);
ui->moveRefDownBtn->setEnabled(false);
ui->removeRefBtn->setEnabled(false);
}
}

void ScmSkyCultureDialog::updateReferencesButtons()
{
const auto count = ui->referencesList->topLevelItemCount();
const auto currentItem = ui->referencesList->currentItem();

ui->removeRefBtn->setDisabled(count == 0 || !currentItem);

if (count <= 1 || !currentItem)
{
ui->moveRefUpBtn->setDisabled(true);
ui->moveRefDownBtn->setDisabled(true);
return;
}
const auto rootItem = ui->referencesList->invisibleRootItem();
Q_ASSERT(rootItem);
const auto row = rootItem->indexOfChild(currentItem);
ui->moveRefUpBtn->setDisabled(row == 0);
ui->moveRefDownBtn->setDisabled(row == count - 1);
}

void ScmSkyCultureDialog::updateReferencesNumeration()
{
for (int row = 0; row < ui->referencesList->topLevelItemCount(); ++row)
{
ui->referencesList->topLevelItem(row)->setText(0, QString("#%1").arg(row + 1));
}
}

void ScmSkyCultureDialog::addNewReference()
{
const auto num = ui->referencesList->topLevelItemCount() + 1;
const QStringList labels{QString("#%1").arg(num), ""};
const auto item = new QTreeWidgetItem(labels);
item->setFlags(item->flags() | Qt::ItemIsEditable);
ui->referencesList->addTopLevelItem(item);
ui->referencesList->setCurrentItem(item, 1);
ui->referencesList->resizeColumnToContents(0);
ui->referencesList->editItem(item, 1);

updateReferencesButtons();
}

void ScmSkyCultureDialog::removeReference()
{
const auto currentItem = ui->referencesList->currentItem();
if (!currentItem) return;
const auto rootItem = ui->referencesList->invisibleRootItem();
Q_ASSERT(rootItem);
const auto row = rootItem->indexOfChild(currentItem);
const auto itemToRemove = ui->referencesList->takeTopLevelItem(row);
Q_ASSERT(itemToRemove == currentItem); Q_UNUSED(itemToRemove);
updateReferencesNumeration();
updateReferencesButtons();
}

void ScmSkyCultureDialog::moveCurrentReferenceUp()
{
const auto currentItem = ui->referencesList->currentItem();
if (!currentItem) return;

const auto rootItem = ui->referencesList->invisibleRootItem();
Q_ASSERT(rootItem);
const auto row = rootItem->indexOfChild(currentItem);
if (row == 0) return;

const auto itemToMove = ui->referencesList->takeTopLevelItem(row);
Q_ASSERT(itemToMove == currentItem);
ui->referencesList->insertTopLevelItem(row-1, itemToMove);
ui->referencesList->setCurrentItem(itemToMove, 1);

updateReferencesNumeration();
updateReferencesButtons();
}

void ScmSkyCultureDialog::moveCurrentReferenceDown()
{
const auto currentItem = ui->referencesList->currentItem();
if (!currentItem) return;

const auto rootItem = ui->referencesList->invisibleRootItem();
Q_ASSERT(rootItem);
const auto row = rootItem->indexOfChild(currentItem);
const auto count = ui->referencesList->topLevelItemCount();
if (row == count - 1) return;

const auto itemToMove = ui->referencesList->takeTopLevelItem(row);
Q_ASSERT(itemToMove == currentItem);
ui->referencesList->insertTopLevelItem(row+1, itemToMove);
ui->referencesList->setCurrentItem(itemToMove, 1);

updateReferencesNumeration();
updateReferencesButtons();
}

QString ScmSkyCultureDialog::makeConstellationsSection() const
{
if (!constellations) return {};
Expand All @@ -359,6 +491,19 @@ QString ScmSkyCultureDialog::makeConstellationsSection() const
return text.trimmed();
}

QString ScmSkyCultureDialog::makeReferencesSection() const
{
QString refs;
for (int row = 0; row < ui->referencesList->topLevelItemCount(); ++row)
{
const auto text = ui->referencesList->topLevelItem(row)->text(1);
refs += QString(" - [#%1]: %2\n").arg(row + 1).arg(text.trimmed());
}
if (!refs.isEmpty())
refs.chop(1); // remove the final newline char
return refs;
}

scm::Description ScmSkyCultureDialog::getDescriptionFromTextEdit() const
{
scm::Description desc;
Expand All @@ -375,7 +520,7 @@ scm::Description ScmSkyCultureDialog::getDescriptionFromTextEdit() const

desc.constellations = makeConstellationsSection();

desc.references = ui->referencesTE->toPlainText();
desc.references = makeReferencesSection();

desc.authors = ui->authorsTE->toPlainText();
desc.about = ui->aboutTE->toPlainText();
Expand All @@ -401,7 +546,7 @@ void ScmSkyCultureDialog::resetDialog()
ui->zodiacTE->clear();
ui->milkyWayTE->clear();
ui->otherObjectsTE->clear();
ui->referencesTE->clear();
resetReferences();
ui->acknowledgementsTE->clear();

ui->licenseCB->setCurrentIndex(0);
Expand Down
40 changes: 40 additions & 0 deletions plugins/SkyCultureMaker/src/gui/ScmSkyCultureDialog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,53 @@ private slots:
*/
QString makeConstellationsSection() const;

/**
* @brief Clears the references list and resets the helper buttons.
*/
void resetReferences();

/**
* @brief Adds a new reference to the list and initiates editing it.
*/
void addNewReference();

/**
* @brief Removes selected reference from the list.
*/
void removeReference();

/**
* @brief Updates states of the buttons controlling the references list.
*/
void updateReferencesButtons();

/**
* @brief Moves the selected reference above the previous reference, renumerating all references.
*/
void moveCurrentReferenceUp();

/**
* @brief Moves the selected reference below the next reference, renumerating all references.
*/
void moveCurrentReferenceDown();

/**
* @brief Updates reference numbers as shown in the list.
*/
void updateReferencesNumeration();

/**
* @brief Gets the description from the text edit.
*
* @return The description from the text edit.
*/
scm::Description getDescriptionFromTextEdit() const;

/**
* @brief Compiles the References section from all the references in the list.
*/
QString makeReferencesSection() const;

/**
* @brief Opens the constellation dialog with data for a given constellation.
* @param constellationId The ID of the constellation to open the dialog for.
Expand Down
82 changes: 68 additions & 14 deletions plugins/SkyCultureMaker/src/gui/scmSkyCultureDialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-1317</y>
<y>-1481</y>
<width>800</width>
<height>2235</height>
<height>2342</height>
</rect>
</property>
<layout class="QVBoxLayout" name="descriptionLayout">
Expand Down Expand Up @@ -526,17 +526,69 @@
</widget>
</item>
<item>
<widget class="QTextEdit" name="referencesTE">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="acceptRichText">
<bool>false</bool>
</property>
<property name="placeholderText">
<string notr="true"> - [#1]: Author: Title, (Journal, ...), Publisher, Location, Year</string>
</property>
</widget>
<layout class="QGridLayout" name="referencesLayout">
<item row="2" column="0">
<widget class="QPushButton" name="addRefBtn">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="moveRefUpBtn">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../../data/gui/guiRes.qrc">
<normaloff>:/graphicGui/uibtUp.png</normaloff>
<disabledoff>:/graphicGui/uibtUp-disabled.png</disabledoff>:/graphicGui/uibtUp.png</iconset>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="moveRefDownBtn">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../../../../data/gui/guiRes.qrc">
<normaloff>:/graphicGui/uibtDown.png</normaloff>
<disabledoff>:/graphicGui/uibtDown-disabled.png</disabledoff>:/graphicGui/uibtDown.png</iconset>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="removeRefBtn">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QTreeWidget" name="referencesList">
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="uniformRowHeights">
<bool>true</bool>
</property>
<property name="headerHidden">
<bool>true</bool>
</property>
<column>
<property name="text">
<string/>
</property>
</column>
<column>
<property name="text">
<string/>
</property>
</column>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="authorsLbl">
Expand Down Expand Up @@ -635,6 +687,8 @@
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<resources>
<include location="../../../../data/gui/guiRes.qrc"/>
</resources>
<connections/>
</ui>
Loading