Line data Source code
1 : /* File: gui_search_request.c; Copyright and License: see below */ 2 : 3 : #include "gui_search_request.h" 4 : #include "set/data_full_id.h" 5 : #include "entity/data_id.h" 6 : #include "utf8stringbuf/utf8string.h" 7 : #include "u8/u8_trace.h" 8 : #include "u8/u8_log.h" 9 : #include <assert.h> 10 : 11 0 : void gui_search_request_init ( gui_search_request_t *this_, 12 : GtkWidget *search_label, 13 : GtkWidget *search_entry, 14 : GtkWidget *search_button, 15 : gui_marked_set_t *marked_set, 16 : gui_search_runner_t *search_runner ) 17 : { 18 0 : U8_TRACE_BEGIN(); 19 0 : assert ( search_label != NULL ); 20 0 : assert ( search_entry != NULL ); 21 0 : assert ( search_button != NULL ); 22 0 : assert ( marked_set != NULL ); 23 0 : assert ( search_runner != NULL ); 24 : 25 0 : (*this_).search_label = search_label; 26 0 : (*this_).search_entry = search_entry; 27 0 : (*this_).search_button = search_button; 28 0 : (*this_).marked_set = marked_set; 29 0 : (*this_).search_runner = search_runner; 30 : 31 0 : U8_TRACE_END(); 32 0 : } 33 : 34 0 : void gui_search_request_destroy ( gui_search_request_t *this_ ) 35 : { 36 0 : U8_TRACE_BEGIN(); 37 : 38 0 : (*this_).search_label = NULL; 39 0 : (*this_).search_entry = NULL; 40 0 : (*this_).search_button = NULL; 41 0 : (*this_).marked_set = NULL; 42 0 : (*this_).search_runner = NULL; 43 : 44 0 : U8_TRACE_END(); 45 0 : } 46 : 47 0 : void gui_search_request_show ( gui_search_request_t *this_ ) 48 : { 49 0 : U8_TRACE_BEGIN(); 50 : 51 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_label ), TRUE ); 52 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_entry ), TRUE ); 53 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_button ), TRUE ); 54 : 55 0 : U8_TRACE_END(); 56 0 : } 57 : 58 0 : void gui_search_request_hide ( gui_search_request_t *this_ ) 59 : { 60 0 : U8_TRACE_BEGIN(); 61 : 62 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_label ), FALSE ); 63 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_entry ), FALSE ); 64 0 : gtk_widget_set_visible( GTK_WIDGET ( (*this_).search_button ), FALSE ); 65 : 66 0 : U8_TRACE_END(); 67 0 : } 68 : 69 0 : void gui_search_request_tool_changed_callback( GtkWidget *widget, gui_tool_t tool, gpointer data ) 70 : { 71 0 : U8_TRACE_BEGIN(); 72 0 : gui_search_request_t *this_ = data; 73 0 : assert( NULL != this_ ); 74 : 75 : /* info: This function is called once for activating a tool and once for deactiaving it! */ 76 : 77 0 : switch ( tool ) 78 : { 79 0 : case GUI_TOOL_NAVIGATE: 80 : { 81 0 : U8_TRACE_INFO("GUI_TOOL_NAVIGATE"); 82 0 : gui_search_request_hide( this_ ); 83 : } 84 0 : break; 85 : 86 0 : case GUI_TOOL_EDIT: 87 : { 88 0 : U8_TRACE_INFO("GUI_TOOL_EDIT"); 89 0 : gui_search_request_hide( this_ ); 90 : } 91 0 : break; 92 : 93 0 : case GUI_TOOL_SEARCH: 94 : { 95 0 : U8_TRACE_INFO("GUI_TOOL_SEARCH"); 96 0 : gui_search_request_show( this_ ); 97 : } 98 0 : break; 99 : 100 0 : case GUI_TOOL_CREATE: 101 : { 102 0 : U8_TRACE_INFO("GUI_TOOL_CREATE"); 103 0 : gui_search_request_hide( this_ ); 104 : } 105 0 : break; 106 : 107 0 : default: 108 : { 109 0 : U8_LOG_ERROR("selected_tool is out of range"); 110 : } 111 0 : break; 112 : } 113 : 114 0 : U8_TRACE_END(); 115 0 : } 116 : 117 0 : void gui_search_request_search_start_callback( GtkWidget* trigger_widget, gpointer data ) 118 : { 119 0 : U8_TRACE_BEGIN(); 120 0 : gui_search_request_t *this_ = data; 121 0 : assert( NULL != this_ ); 122 : /* note: button may bei either the text entry widget or the search button widget */ 123 : 124 : const char* text; 125 0 : GtkEntryBuffer *const search_buf = gtk_entry_get_buffer( GTK_ENTRY( (*this_).search_entry ) ); 126 0 : text = gtk_entry_buffer_get_text( search_buf ); 127 : 128 0 : if ( text != NULL ) 129 : { 130 0 : gui_search_runner_run( (*this_).search_runner, text, pos_scroll_page_new( 0, false /*backwards*/ ) ); 131 : } 132 : else 133 : { 134 0 : assert(false); 135 : } 136 : 137 0 : U8_TRACE_END(); 138 0 : } 139 : 140 0 : void gui_search_request_id_search_callback ( GtkWidget *widget, gpointer user_data ) 141 : { 142 0 : U8_TRACE_BEGIN(); 143 : gui_search_request_t *this_; 144 0 : this_ = (gui_search_request_t*) user_data; 145 0 : assert ( NULL != this_ ); 146 : 147 0 : data_full_id_t focused_id = gui_marked_set_get_focused ( (*this_).marked_set ); 148 0 : if ( data_full_id_is_valid( &focused_id ) ) 149 : { 150 : /* get the primary id unless it is a DIAGRAMELEMENT, then take the secondary id */ 151 0 : const data_id_t *const vis_id = data_full_id_get_primary_id_const( &focused_id ); 152 0 : const data_id_t *const model_id 153 0 : = (DATA_TABLE_DIAGRAMELEMENT == data_id_get_table( vis_id )) 154 0 : ? data_full_id_get_secondary_id_const( &focused_id ) 155 0 : : vis_id; 156 : 157 0 : char focused_id_buf[DATA_ID_MAX_UTF8STRING_LENGTH] = ""; 158 0 : utf8stringbuf_t focused_id_str = UTF8STRINGBUF(focused_id_buf); 159 0 : const utf8error_t id_err = data_id_to_utf8stringbuf( model_id, focused_id_str ); 160 0 : if ( id_err == UTF8ERROR_SUCCESS ) 161 : { 162 0 : GtkEntryBuffer *const name_buf = gtk_entry_get_buffer( GTK_ENTRY( (*this_).search_entry ) ); 163 0 : gtk_entry_buffer_set_text( name_buf, utf8stringbuf_get_string( &focused_id_str ), -1 /* = n_chars */ ); 164 0 : gui_search_runner_run( (*this_).search_runner, 165 0 : utf8stringbuf_get_string( &focused_id_str ), 166 : pos_scroll_page_new( 0, false /*backwards*/ ) 167 : ); 168 : } 169 : } 170 : 171 0 : U8_TRACE_TIMESTAMP(); 172 0 : U8_TRACE_END(); 173 0 : } 174 : 175 0 : void gui_search_request_data_changed_callback( GtkWidget *widget, data_change_message_t *msg, gpointer user_data ) 176 : { 177 0 : U8_TRACE_BEGIN(); 178 0 : assert( NULL != msg ); 179 0 : gui_search_request_t *this_ = user_data; 180 0 : assert( NULL != this_ ); 181 0 : assert ( NULL != widget ); 182 : 183 : data_change_event_type_t evt_type; 184 0 : evt_type = data_change_message_get_event ( msg ); 185 : 186 0 : if ( evt_type == DATA_CHANGE_EVENT_TYPE_DB_OPENED ) 187 : { 188 0 : GtkEntryBuffer *const search_buf = gtk_entry_get_buffer( GTK_ENTRY( (*this_).search_entry ) ); 189 0 : gtk_entry_buffer_set_text ( search_buf, "", 0 /* = n_chars */ ); 190 : } 191 : 192 0 : U8_TRACE_END(); 193 0 : } 194 : 195 : 196 : /* 197 : Copyright 2019-2025 Andreas Warnke 198 : 199 : Licensed under the Apache License, Version 2.0 (the "License"); 200 : you may not use this file except in compliance with the License. 201 : You may obtain a copy of the License at 202 : 203 : http://www.apache.org/licenses/LICENSE-2.0 204 : 205 : Unless required by applicable law or agreed to in writing, software 206 : distributed under the License is distributed on an "AS IS" BASIS, 207 : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 208 : See the License for the specific language governing permissions and 209 : limitations under the License. 210 : */