Skip to content
Open
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
66 changes: 34 additions & 32 deletions qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "ShipAltShipClassModel.h"

#include "ship/ship.h"

namespace fso::fred::dialogs {

ShipAltShipClassModel::ShipAltShipClassModel(QObject* parent, EditorViewport* viewport)
: AbstractDialogModel(parent, viewport)
{
Expand All @@ -11,7 +13,7 @@ ShipAltShipClassModel::ShipAltShipClassModel(QObject* parent, EditorViewport* vi
bool ShipAltShipClassModel::apply()
{
// TODO: Add extra validation here
for (auto& pool_class : alt_class_pool) {
for (auto& pool_class : _altClassPool) {
if (pool_class.ship_class == -1 && pool_class.variable_index == -1) {
_viewport->dialogProvider->showButtonDialog(DialogType::Warning,
"Warning",
Expand All @@ -20,48 +22,48 @@ bool ShipAltShipClassModel::apply()
return false;
}
}
for (int i = 0; i < _num_selected_ships; i++) {
Ships[_m_selected_ships[i]].s_alt_classes = alt_class_pool;
for (int i = 0; i < _numSelectedShips; i++) {
Ships[_selectedShips[i]].s_alt_classes = _altClassPool;
}
return true;
}

void ShipAltShipClassModel::reject() {}

SCP_vector<alt_class> ShipAltShipClassModel::get_pool() const
SCP_vector<alt_class> ShipAltShipClassModel::getPool() const
{
return alt_class_pool;
return _altClassPool;
}

SCP_vector<std::pair<SCP_string, int>> ShipAltShipClassModel::get_classes()
SCP_vector<std::pair<SCP_string, int>> ShipAltShipClassModel::getClasses()
{
// Fill the ship classes combo box
SCP_vector<std::pair<SCP_string, int>> _m_set_from_ship_class;
SCP_vector<std::pair<SCP_string, int>> classPool;
std::pair<SCP_string, int> classData;
// Add the default entry if we need one followed by all the ship classes
classData.first = "Set From Variable";
classData.second = -1;
_m_set_from_ship_class.push_back(classData);
classData.first = "Set From Variable";
classData.second = -1;
classPool.push_back(classData);
for (auto it = Ship_info.cbegin(); it != Ship_info.cend(); ++it) {
if (!(it->flags[Ship::Info_Flags::Player_ship])) {
if (!(it->flags[Ship::Info_Flags::Player_ship])) {
continue;
}
classData.first = it->name;
classData.second = std::distance(Ship_info.cbegin(), it);
_m_set_from_ship_class.push_back(classData);
classPool.push_back(classData);
}

return _m_set_from_ship_class;
return classPool;
}

SCP_vector<std::pair<SCP_string, int>> ShipAltShipClassModel::get_variables()
SCP_vector<std::pair<SCP_string, int>> ShipAltShipClassModel::getVariables()
{
// Fill the variable combo box
SCP_vector<std::pair<SCP_string, int>> _m_set_from_variables;
SCP_vector<std::pair<SCP_string, int>> variablePool;
std::pair<SCP_string, int> variableData;
variableData.first = "Set From Ship Class";
variableData.second = -1;
_m_set_from_variables.push_back(variableData);
variablePool.push_back(variableData);
for (int i = 0; i < MAX_SEXP_VARIABLES; i++) {
if (Sexp_variables[i].type & SEXP_VARIABLE_STRING) {
std::ostringstream oss;
Expand All @@ -70,46 +72,46 @@ SCP_vector<std::pair<SCP_string, int>> ShipAltShipClassModel::get_variables()
buff = oss.str();
variableData.first = buff;
variableData.second = i;
_m_set_from_variables.push_back(variableData);
//_string_variables.push_back(variable);
// _string_variables[0].get().type = 1234;
variablePool.push_back(variableData);
}
}
return _m_set_from_variables;
return variablePool;
}
void ShipAltShipClassModel::sync_data(const SCP_vector<alt_class>& new_pool) {
if (new_pool == alt_class_pool) {

void ShipAltShipClassModel::syncData(const SCP_vector<alt_class>& newPool)
{
if (newPool == _altClassPool) {
return;
} else {
alt_class_pool = new_pool;
_altClassPool = newPool;
set_modified();
}
}

void ShipAltShipClassModel::initializeData()
{
_num_selected_ships = 0;
_m_selected_ships.clear();
_numSelectedShips = 0;
_selectedShips.clear();
// have we got multiple selected ships?
object* objp = GET_FIRST(&obj_used_list);
while (objp != END_OF_LIST(&obj_used_list)) {
if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) {
if (objp->flags[Object::Object_Flags::Marked]) {
_m_selected_ships.push_back(objp->instance);
_num_selected_ships++;
_selectedShips.push_back(objp->instance);
_numSelectedShips++;
}
}
objp = GET_NEXT(objp);
}

Assertion(_num_selected_ships > 0, "No Ships Selected");
// Assert(Objects[cur_object_index].flags[Object::Object_Flags::Marked]);
Assertion(_numSelectedShips > 0, "No Ships Selected");

alt_class_pool.clear();
_altClassPool.clear();
objp = GET_FIRST(&obj_used_list);
while (objp != END_OF_LIST(&obj_used_list)) {
if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) {
if (objp->flags[Object::Object_Flags::Marked]) {
alt_class_pool = Ships[objp->instance].s_alt_classes;
_altClassPool = Ships[objp->instance].s_alt_classes;
break;
}
}
Expand All @@ -118,4 +120,4 @@ void ShipAltShipClassModel::initializeData()
_modified = false;
}

} // namespace fso::fred::dialogs
} // namespace fso::fred::dialogs
45 changes: 18 additions & 27 deletions qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.h
Original file line number Diff line number Diff line change
@@ -1,38 +1,29 @@
#pragma once
#include "../AbstractDialogModel.h"
namespace fso::fred::dialogs {
/**
* @brief Model for QtFRED's Alt Ship Class dialog
*/
class ShipAltShipClassModel : public AbstractDialogModel {
private:
/**
* @brief Initialises data for the model
*/
void initializeData();

SCP_vector<alt_class> alt_class_pool;

int _num_selected_ships = 0;

SCP_vector<int> _m_selected_ships;
#include "../AbstractDialogModel.h"

SCP_vector<int> _m_alt_class_list;
namespace fso::fred::dialogs {

class ShipAltShipClassModel : public AbstractDialogModel {
Q_OBJECT
public:
/**
* @brief Constructor
* @param [in] parent The parent dialog.
* @param [in] viewport The viewport this dialog is attacted to.
*/
ShipAltShipClassModel(QObject* parent, EditorViewport* viewport);
bool apply() override;
void reject() override;

SCP_vector<alt_class> get_pool() const;
SCP_vector<alt_class> getPool() const;

static SCP_vector<std::pair<SCP_string, int>> getClasses();
static SCP_vector<std::pair<SCP_string, int>> getVariables();
void syncData(const SCP_vector<alt_class>& newPool);

static SCP_vector<std::pair<SCP_string, int>> get_classes();
static SCP_vector<std::pair<SCP_string, int>> get_variables();
void sync_data(const SCP_vector<alt_class>&);
private: // NOLINT(readability-redundant-access-specifiers)
void initializeData();

SCP_vector<alt_class> _altClassPool;
int _numSelectedShips = 0;
SCP_vector<int> _selectedShips;
SCP_vector<int> _altClassList;
};
} // namespace fso::fred::dialogs

} // namespace fso::fred::dialogs
Loading
Loading