Skip to content

Commit 2b5fcef

Browse files
committed
Merge branch 'release/2.2.0'
2 parents dba7ab5 + 02ad995 commit 2b5fcef

34 files changed

+432
-215
lines changed

Diff for: CHANGELOG.md

+10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## 2.2.0 - 2019-07-09
9+
10+
### Added
11+
- Created an application icon for HaloRay
12+
- Added possibility to add preset crystal populations
13+
14+
### Changed
15+
- Disabled "Add population" button when there is only one population in simulation
16+
- Added multiple crystal populations by default
17+
818
## 2.1.1 - 2019-07-08
919

1020
### Fixed

Diff for: appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '2.1.1-{build}'
1+
version: '2.2.0-{build}'
22
branches:
33
only:
44
- master

Diff for: src/CMakeLists.txt

+8-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
set(CMAKE_INCLUDE_CURRENT_DIR ON)
33
# Instruct CMake to run moc automatically when needed
44
set(CMAKE_AUTOMOC ON)
5+
# Instruct CMake to run Qt RCC for resource files
6+
set(CMAKE_AUTORCC ON)
57

68
find_package(Qt5 COMPONENTS REQUIRED Core Widgets Gui)
79

@@ -15,16 +17,20 @@ set(HALORAY_SOURCES
1517
gui/sliderSpinBox.cpp
1618
gui/renderButton.cpp
1719
gui/crystalModel.cpp
20+
gui/addCrystalPopulationButton.cpp
1821
simulation/simulationEngine.cpp
1922
simulation/camera.cpp
20-
simulation/defaults.cpp
23+
simulation/lightSource.cpp
24+
simulation/crystalPopulation.cpp
2125
simulation/crystalPopulationRepository.cpp
2226
opengl/texture.cpp
2327
opengl/textureRenderer.cpp
2428
)
2529

30+
set(RESOURCE_FILES resources/haloray.qrc resources/haloray.rc)
31+
2632
IF (WIN32)
27-
add_executable(haloray WIN32 ${HALORAY_SOURCES})
33+
add_executable(haloray WIN32 ${HALORAY_SOURCES} ${RESOURCE_FILES})
2834
ELSE()
2935
add_executable(haloray ${HALORAY_SOURCES})
3036
ENDIF()

Diff for: src/gui/addCrystalPopulationButton.cpp

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#include "addCrystalPopulationButton.h"
2+
3+
AddCrystalPopulationButton::AddCrystalPopulationButton(QWidget *parent)
4+
: QToolButton(parent)
5+
{
6+
setSizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
7+
8+
mMenu = new QMenu(this);
9+
10+
mAddRandom = new QAction("Add random", this);
11+
mAddPlate = new QAction("Add plate", this);
12+
mAddColumn = new QAction("Add column", this);
13+
mAddParry = new QAction("Add Parry", this);
14+
mAddLowitz = new QAction("Add Lowitz", this);
15+
16+
mMenu->addActions({mAddRandom,
17+
mAddPlate,
18+
mAddColumn,
19+
mAddParry,
20+
mAddLowitz});
21+
22+
setPopupMode(QToolButton::ToolButtonPopupMode::MenuButtonPopup);
23+
setText("Add population");
24+
setMenu(mMenu);
25+
26+
connect(this, &AddCrystalPopulationButton::clicked, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Random); });
27+
connect(mAddRandom, &QAction::triggered, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Random); });
28+
connect(mAddPlate, &QAction::triggered, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Plate); });
29+
connect(mAddColumn, &QAction::triggered, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Column); });
30+
connect(mAddParry, &QAction::triggered, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Parry); });
31+
connect(mAddLowitz, &QAction::triggered, [this]() { emit addPopulation(HaloSim::CrystalPopulationPreset::Lowitz); });
32+
}

Diff for: src/gui/addCrystalPopulationButton.h

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
#include <QToolButton>
3+
#include <QMenu>
4+
#include <QWidget>
5+
#include <QAction>
6+
#include "../simulation/crystalPopulation.h"
7+
8+
class AddCrystalPopulationButton : public QToolButton
9+
{
10+
Q_OBJECT
11+
public:
12+
AddCrystalPopulationButton(QWidget *parent = nullptr);
13+
14+
signals:
15+
void addPopulation(HaloSim::CrystalPopulationPreset);
16+
17+
private:
18+
QMenu *mMenu;
19+
QAction *mAddRandom;
20+
QAction *mAddPlate;
21+
QAction *mAddColumn;
22+
QAction *mAddParry;
23+
QAction *mAddLowitz;
24+
};

Diff for: src/gui/crystalModel.cpp

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "crystalModel.h"
2-
#include "../simulation/defaults.h"
32

43
CrystalModel::CrystalModel(std::shared_ptr<HaloSim::CrystalPopulationRepository> crystalRepository, QWidget *parent)
54
: QAbstractTableModel(parent),
@@ -9,7 +8,7 @@ CrystalModel::CrystalModel(std::shared_ptr<HaloSim::CrystalPopulationRepository>
98

109
int CrystalModel::rowCount(const QModelIndex &parent) const
1110
{
12-
return static_cast<int>(mCrystals->GetCount());
11+
return static_cast<int>(mCrystals->getCount());
1312
}
1413

1514
int CrystalModel::columnCount(const QModelIndex &parent) const
@@ -24,7 +23,7 @@ QVariant CrystalModel::data(const QModelIndex &index, int role) const
2423

2524
auto col = index.column();
2625
auto row = index.row();
27-
const HaloSim::CrystalPopulation &crystal = mCrystals->Get(row);
26+
const HaloSim::CrystalPopulation &crystal = mCrystals->get(row);
2827

2928
switch (col)
3029
{
@@ -45,7 +44,7 @@ QVariant CrystalModel::data(const QModelIndex &index, int role) const
4544
case 7:
4645
return crystal.rotationStd;
4746
case 8:
48-
return mCrystals->GetWeight(row);
47+
return mCrystals->getWeight(row);
4948
}
5049

5150
return QVariant();
@@ -61,7 +60,7 @@ bool CrystalModel::setData(const QModelIndex &index, const QVariant &value, int
6160

6261
auto row = index.row();
6362
auto col = index.column();
64-
HaloSim::CrystalPopulation &crystal = mCrystals->Get(row);
63+
HaloSim::CrystalPopulation &crystal = mCrystals->get(row);
6564
switch (col)
6665
{
6766
case 0:
@@ -89,7 +88,7 @@ bool CrystalModel::setData(const QModelIndex &index, const QVariant &value, int
8988
crystal.rotationStd = value.toFloat();
9089
break;
9190
case 8:
92-
mCrystals->SetWeight(row, value.toUInt());
91+
mCrystals->setWeight(row, value.toUInt());
9392
break;
9493
default:
9594
break;
@@ -105,21 +104,21 @@ Qt::ItemFlags CrystalModel::flags(const QModelIndex &index) const
105104
return Qt::ItemIsEditable | QAbstractTableModel::flags(index);
106105
}
107106

108-
void CrystalModel::addRow()
107+
void CrystalModel::addRow(HaloSim::CrystalPopulationPreset preset)
109108
{
110-
auto row = mCrystals->GetCount();
109+
auto row = mCrystals->getCount();
111110
beginInsertRows(QModelIndex(), row, row);
112-
mCrystals->AddDefault();
111+
mCrystals->add(preset);
113112
endInsertRows();
114113
}
115114

116115
bool CrystalModel::removeRow(int row)
117116
{
118-
if (mCrystals->GetCount() <= 1)
117+
if (mCrystals->getCount() <= 1)
119118
return false;
120119

121120
beginRemoveRows(QModelIndex(), row, row);
122-
mCrystals->Remove(row);
121+
mCrystals->remove(row);
123122
endRemoveRows();
124123

125124
return true;

Diff for: src/gui/crystalModel.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CrystalModel : public QAbstractTableModel
1717
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
1818
Qt::ItemFlags flags(const QModelIndex &index) const override;
1919

20-
void addRow();
20+
void addRow(HaloSim::CrystalPopulationPreset preset = HaloSim::CrystalPopulationPreset::Random);
2121
bool removeRow(int row);
2222

2323
private:

Diff for: src/gui/crystalSettingsWidget.cpp

+38-16
Original file line numberDiff line numberDiff line change
@@ -59,29 +59,47 @@ CrystalSettingsWidget::CrystalSettingsWidget(std::shared_ptr<HaloSim::CrystalPop
5959
tiltVisibilityHandler(mTiltDistributionComboBox->currentIndex());
6060
rotationVisibilityHandler(mRotationDistributionComboBox->currentIndex());
6161

62-
connect(mAddPopulationButton, &QPushButton::clicked, [this]() {
63-
mModel->addRow();
64-
mPopulationComboBox->addItem(QString("Population %1").arg(mNextPopulationId++));
62+
connect(mAddPopulationButton, &AddCrystalPopulationButton::addPopulation, [this](HaloSim::CrystalPopulationPreset preset) {
63+
mModel->addRow(preset);
64+
addPopulationComboBoxItem();
6565
mMapper->toLast();
66+
updateRemovePopulationButtonState();
6667
});
68+
6769
connect(mRemovePopulationButton, &QPushButton::clicked, [this]() {
6870
int index = mMapper->currentIndex();
69-
if (index != 0)
70-
mMapper->toPrevious();
71-
else
71+
if (index == 0)
7272
mMapper->toNext();
73+
else
74+
mMapper->toPrevious();
7375
bool success = mModel->removeRow(index);
7476
if (success)
7577
mPopulationComboBox->removeItem(index);
78+
79+
updateRemovePopulationButtonState();
7680
});
7781

7882
connect(mPopulationComboBox, &QComboBox::editTextChanged, [this](const QString &text) {
7983
mPopulationComboBox->setItemText(mPopulationComboBox->currentIndex(), text);
8084
});
81-
for (auto i = 0; i < mModel->rowCount(); ++i)
82-
{
83-
mPopulationComboBox->addItem(QString("Population %1").arg(mNextPopulationId++));
84-
}
85+
86+
fillPopulationComboBox();
87+
updateRemovePopulationButtonState();
88+
}
89+
90+
void CrystalSettingsWidget::addPopulationComboBoxItem()
91+
{
92+
mPopulationComboBox->addItem(QString("Population %1").arg(mNextPopulationId++));
93+
}
94+
95+
void CrystalSettingsWidget::fillPopulationComboBox()
96+
{
97+
mPopulationComboBox->addItems({"Columns", "Plates", "Random"});
98+
}
99+
100+
void CrystalSettingsWidget::updateRemovePopulationButtonState()
101+
{
102+
mRemovePopulationButton->setEnabled(mModel->rowCount() > 1);
85103
}
86104

87105
void CrystalSettingsWidget::setupUi()
@@ -93,8 +111,12 @@ void CrystalSettingsWidget::setupUi()
93111
mPopulationComboBox->setInsertPolicy(QComboBox::InsertPolicy::NoInsert);
94112
mPopulationComboBox->setDuplicatesEnabled(true);
95113

96-
mAddPopulationButton = new QPushButton("Add population");
114+
mAddPopulationButton = new AddCrystalPopulationButton();
115+
mAddPopulationButton->setMinimumHeight(30);
116+
97117
mRemovePopulationButton = new QPushButton("Remove population");
118+
mRemovePopulationButton->setMinimumHeight(30);
119+
mRemovePopulationButton->setStyleSheet("padding: 10px;");
98120

99121
mCaRatioSlider = new SliderSpinBox(0.0, 15.0);
100122

@@ -125,13 +147,13 @@ void CrystalSettingsWidget::setupUi()
125147
auto mainLayout = new QFormLayout(this);
126148
mainLayout->addRow("Crystal population", mPopulationComboBox);
127149

128-
auto addRemoveButtonLayout = new QHBoxLayout();
129-
addRemoveButtonLayout->addWidget(mAddPopulationButton);
130-
addRemoveButtonLayout->addWidget(mRemovePopulationButton);
131-
132-
mainLayout->addRow(addRemoveButtonLayout);
150+
auto populationButtonLayout = new QHBoxLayout();
151+
populationButtonLayout->addWidget(mAddPopulationButton);
152+
populationButtonLayout->addWidget(mRemovePopulationButton);
133153

154+
mainLayout->addRow(populationButtonLayout);
134155
mainLayout->addRow("Population weight", mWeightSpinBox);
156+
mainLayout->addItem(new QSpacerItem(0, 10));
135157
mainLayout->addRow("C/A ratio average", mCaRatioSlider);
136158
mainLayout->addRow("C/A ratio std.", mCaRatioStdSlider);
137159

Diff for: src/gui/crystalSettingsWidget.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QPushButton>
77
#include <QSpinBox>
88
#include <QDataWidgetMapper>
9+
#include "addCrystalPopulationButton.h"
910
#include "sliderSpinBox.h"
1011
#include "crystalModel.h"
1112
#include "../simulation/crystalPopulation.h"
@@ -22,11 +23,14 @@ class CrystalSettingsWidget : public QGroupBox
2223

2324
private:
2425
void setupUi();
26+
void addPopulationComboBoxItem();
27+
void fillPopulationComboBox();
28+
void updateRemovePopulationButtonState();
2529
SliderSpinBox *createAngleSlider(double min, double max);
2630
void setTiltVisibility(bool);
2731
void setRotationVisibility(bool);
2832

29-
QPushButton *mAddPopulationButton;
33+
AddCrystalPopulationButton *mAddPopulationButton;
3034
QPushButton *mRemovePopulationButton;
3135

3236
SliderSpinBox *mCaRatioSlider;

Diff for: src/gui/generalSettingsWidget.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ GeneralSettingsWidget::GeneralSettingsWidget(QWidget *parent)
2323
});
2424
}
2525

26-
void GeneralSettingsWidget::SetInitialValues(double sunDiameter,
26+
void GeneralSettingsWidget::setInitialValues(double sunDiameter,
2727
double sunAltitude,
2828
unsigned int raysPerFrame,
2929
unsigned int maxNumFrames)

Diff for: src/gui/generalSettingsWidget.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class GeneralSettingsWidget : public QGroupBox
1111
Q_OBJECT
1212
public:
1313
GeneralSettingsWidget(QWidget *parent = nullptr);
14-
void SetInitialValues(double sunDiameter,
14+
void setInitialValues(double sunDiameter,
1515
double sunAltitude,
1616
unsigned int raysPerFrame,
1717
unsigned int maxNumFrames);

0 commit comments

Comments
 (0)