Implemented "sort attribute options"

SVN revision: 2251
This commit is contained in:
Stefan Ritt 2009-08-10 15:11:52 +00:00
parent c9e4edcd9b
commit a7bcf0015e
2 changed files with 25 additions and 5 deletions

View File

@ -2567,6 +2567,12 @@ Options Location = Main Building{a}, New Building{b}, Old Building{c}
entry. If this flag is 1, then the last entry of each thread is shown, entry. If this flag is 1, then the last entry of each thread is shown,
otherwise the first thread is displayed. Default for this setting is <b>1</b>. otherwise the first thread is displayed. Default for this setting is <b>1</b>.
</li> </li>
<li>
<b><code>Sort Attribute Options = 0|1</code></b><br>
If this opeion is 1, all attribute options are sorted alphanumerically. This
can be handy when locating options from long lists in drop-down boxes in
quick filters for example. Default for this setting is <b>0</b>.
</li>
</ul> </ul>
<p> <p>
<a name="themes" id="themes"></a> <a name="themes" id="themes"></a>

View File

@ -434,6 +434,7 @@ time_t convert_datetime(char *date_string);
int get_thumb_name(const char *file_name, char *thumb_name, int size, int index); int get_thumb_name(const char *file_name, char *thumb_name, int size, int index);
int create_thumbnail(LOGBOOK * lbs, char *file_name); int create_thumbnail(LOGBOOK * lbs, char *file_name);
int ascii_compare(const void *s1, const void *s2); int ascii_compare(const void *s1, const void *s2);
int ascii_compare2(const void *s1, const void *s2);
/*---- Funcions from the MIDAS library -----------------------------*/ /*---- Funcions from the MIDAS library -----------------------------*/
@ -7105,7 +7106,7 @@ int scan_attributes(char *logbook)
and attr_flags arrays */ and attr_flags arrays */
{ {
char list[10000], str[NAME_LENGTH], type[NAME_LENGTH], tmp_list[MAX_N_ATTR][NAME_LENGTH]; char list[10000], str[NAME_LENGTH], type[NAME_LENGTH], tmp_list[MAX_N_ATTR][NAME_LENGTH];
int i, j, n, m; int i, j, n, m, n_options;
if (getcfg(logbook, "Attributes", list, sizeof(list))) { if (getcfg(logbook, "Attributes", list, sizeof(list))) {
/* reset attribute flags */ /* reset attribute flags */
@ -7133,27 +7134,33 @@ int scan_attributes(char *logbook)
/* get options lists for attributes */ /* get options lists for attributes */
memset(attr_options, 0, sizeof(attr_options)); memset(attr_options, 0, sizeof(attr_options));
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
n_options = 0;
sprintf(str, "Options %s", attr_list[i]); sprintf(str, "Options %s", attr_list[i]);
if (getcfg(logbook, str, list, sizeof(list))) if (getcfg(logbook, str, list, sizeof(list)))
strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); n_options = strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE);
sprintf(str, "MOptions %s", attr_list[i]); sprintf(str, "MOptions %s", attr_list[i]);
if (getcfg(logbook, str, list, sizeof(list))) { if (getcfg(logbook, str, list, sizeof(list))) {
strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); n_options = strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE);
attr_flags[i] |= AF_MULTI; attr_flags[i] |= AF_MULTI;
} }
sprintf(str, "ROptions %s", attr_list[i]); sprintf(str, "ROptions %s", attr_list[i]);
if (getcfg(logbook, str, list, sizeof(list))) { if (getcfg(logbook, str, list, sizeof(list))) {
strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); n_options = strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE);
attr_flags[i] |= AF_RADIO; attr_flags[i] |= AF_RADIO;
} }
sprintf(str, "IOptions %s", attr_list[i]); sprintf(str, "IOptions %s", attr_list[i]);
if (getcfg(logbook, str, list, sizeof(list))) { if (getcfg(logbook, str, list, sizeof(list))) {
strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); n_options = strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE);
attr_flags[i] |= AF_ICON; attr_flags[i] |= AF_ICON;
} }
if (n_options && getcfg(logbook, "Sort Attribute Options", str, sizeof(str)) && atoi(str) == 1) {
qsort(attr_options[i], n_options, NAME_LENGTH, ascii_compare2);
}
} }
/* check if attribute required */ /* check if attribute required */
@ -13030,6 +13037,13 @@ int ascii_compare(const void *s1, const void *s2)
/*------------------------------------------------------------------*/ /*------------------------------------------------------------------*/
int ascii_compare2(const void *s1, const void *s2)
{
return stricmp((char *) s1, (char *) s2);
}
/*------------------------------------------------------------------*/
void show_config_page(LOGBOOK * lbs) void show_config_page(LOGBOOK * lbs)
{ {
char str[256], user[80], password[80], full_name[80], user_email[80], logbook[256]; char str[256], user[80], password[80], full_name[80], user_email[80], logbook[256];