mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
desktop: unglobalize ComboBox-models
The combo-boxes (cylinder type, weightsystem, etc.) were controlled by global models. Keeping these models up-to-date was very combersome and buggy. Create a new model everytime a combobox is opened. Ultimately it might even be better to create a copy of the strings and switch to simple QStringListModel. Set data in the core directly and don't do this via the models. The result is much simpler and easier to handle. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
de313bd01a
commit
0d011231e6
16 changed files with 130 additions and 215 deletions
|
@ -108,6 +108,45 @@ void add_tank_info_imperial(struct tank_info_table *table, const char *name, int
|
|||
add_to_tank_info_table(table, table->nr, info);
|
||||
}
|
||||
|
||||
extern struct tank_info *get_tank_info(struct tank_info_table *table, const char *name)
|
||||
{
|
||||
for (int i = 0; i < table->nr; ++i) {
|
||||
if (same_string(table->infos[i].name, name))
|
||||
return &table->infos[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern void set_tank_info_size(struct tank_info_table *table, const char *name, volume_t size)
|
||||
{
|
||||
struct tank_info *info = get_tank_info(table, name);
|
||||
if (info) {
|
||||
// Try to be smart about metric vs. imperial
|
||||
if (info->cuft == 0 && info->psi == 0)
|
||||
info->ml = size.mliter;
|
||||
else
|
||||
info->cuft = lrint(ml_to_cuft(size.mliter));
|
||||
} else {
|
||||
// By default add metric...?
|
||||
add_tank_info_metric(table, name, size.mliter, 0);
|
||||
}
|
||||
}
|
||||
|
||||
extern void set_tank_info_workingpressure(struct tank_info_table *table, const char *name, pressure_t working_pressure)
|
||||
{
|
||||
struct tank_info *info = get_tank_info(table, name);
|
||||
if (info) {
|
||||
// Try to be smart about metric vs. imperial
|
||||
if (info->cuft == 0 && info->psi == 0)
|
||||
info->bar = working_pressure.mbar / 1000;
|
||||
else
|
||||
info->psi = lrint(mbar_to_PSI(working_pressure.mbar));
|
||||
} else {
|
||||
// By default add metric...?
|
||||
add_tank_info_metric(table, name, 0, working_pressure.mbar / 1000);
|
||||
}
|
||||
}
|
||||
|
||||
/* placeholders for a few functions that we need to redesign for the Qt UI */
|
||||
void add_cylinder_description(const cylinder_type_t *type)
|
||||
{
|
||||
|
@ -131,7 +170,7 @@ void add_weightsystem_description(const weightsystem_t *weightsystem)
|
|||
if (!desc)
|
||||
return;
|
||||
for (i = 0; i < MAX_WS_INFO && ws_info[i].name != NULL; i++) {
|
||||
if (strcmp(ws_info[i].name, desc) == 0) {
|
||||
if (same_string(ws_info[i].name, desc)) {
|
||||
ws_info[i].grams = weightsystem->weight.grams;
|
||||
return;
|
||||
}
|
||||
|
@ -143,6 +182,17 @@ void add_weightsystem_description(const weightsystem_t *weightsystem)
|
|||
}
|
||||
}
|
||||
|
||||
struct ws_info_t *get_weightsystem_description(const char *name)
|
||||
{
|
||||
for (int i = 0; i < MAX_WS_INFO && ws_info[i].name != NULL; i++) {
|
||||
// Also finds translated names (TODO: should only consider non-user items).
|
||||
if (same_string(ws_info[i].name, name) ||
|
||||
same_string(translate("gettextFromC", ws_info[i].name), name))
|
||||
return &ws_info[i];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
weightsystem_t clone_weightsystem(weightsystem_t ws)
|
||||
{
|
||||
weightsystem_t res = { ws.weight, copy_string(ws.description), ws.auto_filled };
|
||||
|
|
|
@ -125,12 +125,16 @@ extern void reset_tank_info_table(struct tank_info_table *table);
|
|||
extern void clear_tank_info_table(struct tank_info_table *table);
|
||||
extern void add_tank_info_metric(struct tank_info_table *table, const char *name, int ml, int bar);
|
||||
extern void add_tank_info_imperial(struct tank_info_table *table, const char *name, int cuft, int psi);
|
||||
extern void set_tank_info_size(struct tank_info_table *table, const char *name, volume_t size);
|
||||
extern void set_tank_info_workingpressure(struct tank_info_table *table, const char *name, pressure_t working_pressure);
|
||||
extern struct tank_info *get_tank_info(struct tank_info_table *table, const char *name);
|
||||
|
||||
struct ws_info_t {
|
||||
const char *name;
|
||||
int grams;
|
||||
};
|
||||
extern struct ws_info_t ws_info[MAX_WS_INFO];
|
||||
extern struct ws_info_t *get_weightsystem_description(const char *name);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue