📄 xdispstr.pro
字号:
;+; NAME: ; XDISPSTR;; PURPOSE: ; Display a string array in a text widget with a simple search capability.;; EXPLANATION:; Similar to the IDL XDISPLAYFILE procedure but includes a search capbility.; CALLING SEQUENCE: ; ; xdispstr, array, [/BLOCK, WIDTH= , HEIGHT=, TITLE=, GROUP_LEADER=, FONT=; TOP_LINE = ];; INPUT PARAMETER:;; array - String array (.e.g. FITS header) to be displayed;; OPTIONAL INPUT KEYWORD PARAMETERS:;; block - Set to 1 to make widget blocking. Default = block=0; ; width, height - Scalars giving number of characters per line, number; of lines. Default = 80x24;; title - Scalar Title for outermost base widget.;; group_leader - Group leader for top level base.;; top_line - first line in the string array to display (default is 0);; font - Display font for text.;; MODIFICATION HISTORY:; Written by R. S. Hill, RITSS, 17 Nov 2000; Use cumulative keyword to TOTAL W. Landsman May 2006;-PRO XDISPSTR_EVENT, Eventwidget_control, event.top, get_uvalue=infosearch = 0bdestroy = 0bCASE event.id OF(*info).done_button: destroy=1b(*info).search_button: search=1b(*info).search_text: search=1bELSE:ENDCASEIF search THEN BEGIN widget_control, (*info).search_text, get_value=seastr seastr = seastr[0] sp = strpos(strupcase(*(*info).arrayptr), strupcase(seastr)) w = where(sp GE 0, c) IF c GT 0 THEN BEGIN tptr = sp[w] + (*(*info).clenptr)[w] tlen = strlen(seastr) ts = widget_info((*info).array_text, /text_select) this_line = max(where(ts[0] GE *(*info).clenptr, c3)) line_frag = $ strmid(strupcase((*(*info).arrayptr)[this_line]), $ ts[0] - (*(*info).clenptr)[this_line] + tlen) again = strpos(line_frag, strupcase(seastr)) IF again GE 0 THEN BEGIN newtptr = again + tlen + ts[0] ENDIF ELSE BEGIN next = min(where(tptr GT ts[0], c2)) IF c2 GT 0 THEN newtptr = tptr[next] ELSE newtptr = tptr[0] ENDELSE widget_control, (*info).array_text, set_text_select=[newtptr,tlen] new_line = max(where(newtptr GE *(*info).clenptr)) middle = (*info).height/2 nl = n_elements(*(*info).arrayptr) tl = ((new_line-middle)>0)<(nl-(*info).height) widget_control, (*info).array_text, set_text_top_line=tl widget_control, (*info).msg_text, set_value='Line '+strn(new_line) ENDIF ELSE BEGIN widget_control, (*info).msg_text, set_value='String not found' ENDELSEENDIFIF destroy THEN widget_control, event.top, /destroyRETURNENDPRO XDISPSTR_CLEANUP, Idwidget_control, id, get_uvalue=infoIF ptr_valid(info) THEN BEGIN IF ptr_valid((*info).clenptr) THEN ptr_free, (*info).clenptr IF ptr_valid((*info).arrayptr) THEN ptr_free, (*info).arrayptr ptr_free, infoENDIFRETURNENDPRO XDISPSTR, Array, BLOCK=block, WIDTH=width, HEIGHT=height, TITLE=title, $ GROUP_LEADER=group_leader, FONT=font,top_line=top_lineon_error, 2IF n_params(0) LT 1 THEN BEGIN print, 'CALLING SEQUENCE: XDISPSTR, Array' print, 'KEYWORD PARAMETERS: BLOCK, WIDTH, HEIGHT, TITLE, ' $ + 'GROUP_LEADER, FONT' RETURNENDIFIF n_elements(block) LT 1 THEN block=0IF n_elements(width) LT 1 THEN width=80IF n_elements(height) LT 1 THEN height=24IF n_elements(title) LT 1 THEN title='XDISPSTR'tlb = widget_base(title=title,col=1,group_leader=group_leader)controls = widget_base(tlb, frame=1, row=1)done_button = widget_button(controls, value='Done', /no_release)search_button = widget_button(controls, value='Search:', /no_release)search_text = widget_text(controls, xsize=30, ysize=1, /editable, font=font)msg_label = widget_label(controls, value='Message: ')msg_text = widget_text(controls, xsize=20, ysize=1, font=font)array_text = widget_text(tlb, value=array, $ xsize=width, ysize=height, /scroll, edit=0, font=font)if not keyword_set(top_line) then top_line = 0widget_control, array_text, set_text_top_line=top_linewidget_control, array_text, set_text_select=[0,0]widget_control, tlb, /realize linelen1 = strlen(array) + 1cumul_len = [0, total(linelen1,/cumulative,/integer)]info = ptr_new({done_button:done_button, $ search_button:search_button, search_text:search_text, $ array_text:array_text, arrayptr:ptr_new(array), $ clenptr:ptr_new(cumul_len,/no_copy), $ msg_text:msg_text, width:width, height:height})widget_control, tlb, set_uvalue=infoxmanager, 'xdispstr', tlb, cleanup='xdispstr_cleanup', $ event_handler='xdispstr_event', no_block=1b-block, $ group_leader=group_leaderRETURNEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -