Compare commits

..

No commits in common. "e24b4a8367da876fea34783723eee4134edc9cf4" and "2a204640bddfc3c9f8b557c80c1db729e0560322" have entirely different histories.

4 changed files with 15 additions and 134 deletions

View File

@ -2,16 +2,6 @@
<!-- Generated with glade 3.22.1 --> <!-- Generated with glade 3.22.1 -->
<interface> <interface>
<requires lib="gtk+" version="3.20"/> <requires lib="gtk+" version="3.20"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-up</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
<object class="GtkWindow" id="main-window"> <object class="GtkWindow" id="main-window">
<property name="height_request">250</property> <property name="height_request">250</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
@ -142,74 +132,23 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">True</property>
<property name="orientation">vertical</property> <property name="hscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<child> <child>
<object class="GtkBox"> <object class="GtkViewport">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkButton" id="button-up-sort"> <object class="GtkListBox" id="layer-list">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image1</property>
<property name="always_show_image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button-down-sort">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image2</property>
<property name="always_show_image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <property name="selection_mode">none</property>
<object class="GtkListBox" id="layer-list">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="selection_mode">none</property>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>

View File

@ -155,30 +155,19 @@ 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. This is an internal callback * @note Do not use this function
* @return See sort function documentation of GTK+ * @return
*/ */
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;
static const enum layer_selector_sort_algo default_sort = LAYER_SELECTOR_SORT_DOWN;
const enum layer_selector_sort_algo *algo = (const enum layer_selector_sort_algo *)unused;
/* Assume downward sorting */
/* TODO: This is nasty. Find a better way */
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;
} }
@ -190,6 +179,7 @@ void generate_layer_widgets(GtkListBox *listbox, GList *libs)
global_list_box = listbox; global_list_box = listbox;
clear_list_box_widgets(listbox); clear_list_box_widgets(listbox);
gtk_list_box_set_sort_func(listbox, sort_func, NULL, NULL);
for (; libs != NULL; libs = libs->next) { for (; libs != NULL; libs = libs->next) {
lib = (struct gds_library *)libs->data; lib = (struct gds_library *)libs->data;
@ -198,8 +188,11 @@ void generate_layer_widgets(GtkListBox *listbox, GList *libs)
} /* For Cell List */ } /* For Cell List */
} /* For libs */ } /* For libs */
/* Sort the layers */ /* Force sort */
layer_selector_force_sort(LAYER_SELECTOR_SORT_DOWN); gtk_list_box_invalidate_sort(listbox);
/* Disable sort, so user can sort layers */
gtk_list_box_set_sort_func(listbox, NULL, NULL, NULL);
/* Activate Buttons */ /* Activate Buttons */
gtk_widget_set_sensitive(global_load_button, TRUE); gtk_widget_set_sensitive(global_load_button, TRUE);
@ -442,15 +435,4 @@ void setup_save_mapping_callback(GtkWidget *button, GtkWindow *main_window)
g_signal_connect(button, "clicked", G_CALLBACK(save_mapping_clicked), main_window); g_signal_connect(button, "clicked", G_CALLBACK(save_mapping_clicked), main_window);
} }
void layer_selector_force_sort(enum layer_selector_sort_algo sort_function)
{
if (!global_list_box)
return;
/* Set dorting function, sort, and disable sorting function */
gtk_list_box_set_sort_func(global_list_box, sort_func, (gpointer)&sort_function, NULL);
gtk_list_box_invalidate_sort(global_list_box);
gtk_list_box_set_sort_func(global_list_box, NULL, NULL, NULL);
}
/** @} */ /** @} */

View File

@ -30,11 +30,6 @@
#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
@ -69,14 +64,4 @@ GList *export_rendered_layer_info();
* @note The layer_info::name Element has to be freed manually * @note The layer_info::name Element has to be freed manually
*/ */
void delete_layer_info_struct(struct layer_info *info); void delete_layer_info_struct(struct layer_info *info);
/**
* @brief Force sorting of the layer selector in a specified way
*
* If the layer selector is not yet set up, this function has no effect.
*
* @param sort_function Sorting direction
*/
void layer_selector_force_sort(enum layer_selector_sort_algo sort_function);
#endif /* __LAYER_SELECTOR_H__ */ #endif /* __LAYER_SELECTOR_H__ */

View File

@ -384,22 +384,6 @@ static void cell_selection_changed(GtkTreeSelection *sel, GtkWidget *convert_but
} }
} }
static void sort_up_callback(GtkWidget *widget, gpointer user)
{
(void)widget;
(void)user;
layer_selector_force_sort(LAYER_SELECTOR_SORT_UP);
}
static void sort_down_callback(GtkWidget *widget, gpointer user)
{
(void)widget;
(void)user;
layer_selector_force_sort(LAYER_SELECTOR_SORT_DOWN);
}
GtkWindow *create_main_window() GtkWindow *create_main_window()
{ {
GtkBuilder *main_builder; GtkBuilder *main_builder;
@ -412,8 +396,6 @@ GtkWindow *create_main_window()
static struct open_button_data open_data; static struct open_button_data open_data;
static struct convert_button_data conv_data; static struct convert_button_data conv_data;
struct tree_stores *cell_selector_stores; struct tree_stores *cell_selector_stores;
GtkWidget *sort_up_button;
GtkWidget *sort_down_button;
main_builder = gtk_builder_new_from_resource("/main.glade"); main_builder = gtk_builder_new_from_resource("/main.glade");
gtk_builder_connect_signals(main_builder, NULL); gtk_builder_connect_signals(main_builder, NULL);
@ -458,13 +440,6 @@ GtkWindow *create_main_window()
header_bar = GTK_HEADER_BAR(gtk_builder_get_object(main_builder, "header-bar")); header_bar = GTK_HEADER_BAR(gtk_builder_get_object(main_builder, "header-bar"));
gtk_header_bar_set_subtitle(header_bar, _app_version_string); gtk_header_bar_set_subtitle(header_bar, _app_version_string);
/* Get layer sorting buttons and set callbacks */
sort_up_button = GTK_WIDGET(gtk_builder_get_object(main_builder, "button-up-sort"));
sort_down_button = GTK_WIDGET(gtk_builder_get_object(main_builder, "button-down-sort"));
g_signal_connect(sort_up_button, "clicked", G_CALLBACK(sort_up_callback), NULL);
g_signal_connect(sort_down_button, "clicked", G_CALLBACK(sort_down_callback), NULL);
g_object_unref(main_builder); g_object_unref(main_builder);
return conv_data.main_window; return conv_data.main_window;