Change sorting function in order to add capability to sort both ways

This commit is contained in:
Mario Hüttel 2019-03-12 19:26:31 +01:00
parent 3f198f870a
commit 72d5352b09
2 changed files with 17 additions and 2 deletions

View File

@ -155,19 +155,29 @@ static void analyze_cell_layers(GtkListBox *listbox, struct gds_cell *cell)
* @param row1 * @param row1
* @param row2 * @param row2
* @param unused * @param unused
* @note Do not use this function * @note Do not use this function. This is an internal callback
* @return * @return See sort function documentation of GTK+
*/ */
static gint sort_func(GtkListBoxRow *row1, GtkListBoxRow *row2, gpointer unused) static gint sort_func(GtkListBoxRow *row1, GtkListBoxRow *row2, gpointer unused)
{ {
LayerElement *le1, *le2; LayerElement *le1, *le2;
gint ret; gint ret;
enum layer_selector_sort_algo default_sort = LAYER_SELECTOR_SORT_DOWN;
enum layer_selector_sort_algo *algo = (enum layer_selector_sort_algo *)unused;
/* Assume downward sorting */
if (!algo)
algo = &default_sort;
le1 = LAYER_ELEMENT(row1); le1 = LAYER_ELEMENT(row1);
le2 = LAYER_ELEMENT(row2); le2 = LAYER_ELEMENT(row2);
/* Determine sort fow downward sort */
ret = layer_element_get_layer(le1) - layer_element_get_layer(le2); ret = layer_element_get_layer(le1) - layer_element_get_layer(le2);
/* Change order if upward sort is requested */
ret *= (*algo == LAYER_SELECTOR_SORT_DOWN ? 1 : -1);
return ret; return ret;
} }

View File

@ -30,6 +30,11 @@
#include <glib.h> #include <glib.h>
#include "mapping-parser.h" #include "mapping-parser.h"
/**
* @brief Defines how to sort the layer selector list box.
*/
enum layer_selector_sort_algo {LAYER_SELECTOR_SORT_DOWN = 0, LAYER_SELECTOR_SORT_UP};
/** /**
* @brief Generate layer widgets in \p listbox * @brief Generate layer widgets in \p listbox
* @note This clears all previously inserted elements * @note This clears all previously inserted elements