1 /*---------------------------------------------------------------------------- 2 -- 3 -- Module: xtmDbFilter 4 -- 5 -- Project: XDiary 6 -- System: xtm - X Desktop Calendar 7 -- Subsystem: <> 8 -- Function block: <> 9 -- 10 -- Description: 11 -- Selection window with filter to use for database entries. 12 -- 13 -- Filename: xtmDbFilter.c 14 -- 15 -- Authors: Roger Larsson, Ulrika Bornetun 16 -- Creation date: 1992-01-26 17 -- 18 -- 19 -- (C) Copyright Ulrika Bornetun, Roger Larsson (1995) 20 -- All rights reserved 21 -- 22 -- Permission to use, copy, modify, and distribute this software and its 23 -- documentation for any purpose and without fee is hereby granted, 24 -- provided that the above copyright notice appear in all copies. Ulrika 25 -- Bornetun and Roger Larsson make no representations about the usability 26 -- of this software for any purpose. It is provided "as is" without express 27 -- or implied warranty. 28 ----------------------------------------------------------------------------*/ 29 30 /* SCCS module identifier. */ 31 static char SCCSID[] = "@(#) Module: xtmDbFilter.c, Version: 1.1, Date: 95/02/18 15:52:07"; 32 33 34 /*---------------------------------------------------------------------------- 35 -- Include files 36 ----------------------------------------------------------------------------*/ 37 38 #include <stdio.h> 39 #include <stdlib.h> 40 #include <string.h> 41 #include <ctype.h> 42 43 #include <X11/Intrinsic.h> 44 45 #include <Xm/Xm.h> 46 #include <Xm/RowColumn.h> 47 #include <Xm/SeparatoG.h> 48 #include <Xm/ToggleB.h> 49 #include <Xm/Text.h> 50 51 #include "System.h" 52 #include "Message.h" 53 54 #include "msgXdiary.h" 55 #include "xtmGlobal.h" 56 #include "xtmDbMisc.h" 57 #include "xtmFields.h" 58 #include "xtmHelp.h" 59 #include "xitError.h" 60 #include "xitFieldSel.h" 61 #include "xitTools.h" 62 #include "xtmDbFilter.h" 63 64 65 /*---------------------------------------------------------------------------- 66 -- Macro definitions 67 ----------------------------------------------------------------------------*/ 68 69 /* Local widgets in the include window. */ 70 #define ho1Sp dataLocalW[ 0 ] 71 #define ho2Sp dataLocalW[ 1 ] 72 #define introLa dataLocalW[ 2 ] 73 #define pickSpecLa dataLocalW[ 3 ] 74 #define pickSpecRc dataLocalW[ 4 ] 75 #define pickTypeLa dataLocalW[ 5 ] 76 #define pickTypeRc dataLocalW[ 6 ] 77 #define searchStrCaseTb dataLocalW[ 7 ] 78 #define searchStrLa dataLocalW[ 8 ] 79 #define searchStrTx dataLocalW[ 9 ] 80 #define tagStrCaseTb dataLocalW[ 10 ] 81 #define tagStrFs dataLocalW[ 11 ] 82 #define tagStrLa dataLocalW[ 12 ] 83 84 85 /*---------------------------------------------------------------------------- 86 -- Type declarations 87 ----------------------------------------------------------------------------*/ 88 89 /* Filter record. */ 90 typedef struct { 91 92 /* The filter window. */ 93 Widget filterW; 94 95 /* Application wide data. */ 96 XTM_GL_BASE_DATA_REF appl_data_ref; 97 98 /* Callback to inform our creator of specific actions. */ 99 void *user_data; 100 XTM_FI_ACTION_CB actionCB; 101 102 } FILTER_REC, *FILTER_REC_REF; 103 104 105 /*---------------------------------------------------------------------------- 106 -- Global definitions 107 ----------------------------------------------------------------------------*/ 108 109 /* Name of module. */ 110 static char *module_name = "xtmDbFilter"; 111 112 /* IDs for the help windows. */ 113 static char *filter_window_id = "CalFilter"; 114 115 116 /*---------------------------------------------------------------------------- 117 -- Function prototypes 118 ----------------------------------------------------------------------------*/ 119 120 static void 121 applyCB( Widget widget, 122 FILTER_REC_REF filter_ref, 123 XtPointer call_data ); 124 125 static void 126 cancelCB( Widget widget, 127 FILTER_REC_REF filter_ref, 128 XtPointer call_data ); 129 130 static Widget 131 createFilterWindow( FILTER_REC_REF filter_ref, 132 Widget parent, 133 char *tags_menu, 134 Boolean app_modal ); 135 136 static void 137 destroyCB( Widget widget, 138 FILTER_REC_REF filter_ref, 139 XtPointer call_data ); 140 141 static void 142 fetchWindowData( FILTER_REC_REF filter_ref, 143 XTM_DM_FILTER_REC *use_filter_ref ); 144 145 static void 146 helpCB( Widget widget, 147 FILTER_REC_REF filter_ref, 148 XtPointer call_data ); 149 150 static void 151 okCB( Widget widget, 152 FILTER_REC_REF filter_ref, 153 XtPointer call_data ); 154 155 static void 156 setFilterValues( FILTER_REC_REF filter_ref, 157 XTM_DM_FILTER_REC *use_filter_ref ); 158 159 160 161 /*---------------------------------------------------------------------------- 162 -- Functions 163 ----------------------------------------------------------------------------*/ 164 165 XTM_FI_HANDLE xtmFiInitialize(XTM_GL_BASE_DATA_REF appl_data_ref,Widget parent,char * tags_menu,Boolean app_modal,XTM_FI_ACTION_CB actionCB,void * user_data)166 xtmFiInitialize( XTM_GL_BASE_DATA_REF appl_data_ref, 167 Widget parent, 168 char *tags_menu, 169 Boolean app_modal, 170 XTM_FI_ACTION_CB actionCB, 171 void *user_data ) 172 { 173 174 /* Variables. */ 175 FILTER_REC_REF filter_ref; 176 XTM_DM_FILTER_REC filter_rec; 177 178 179 /* Code. */ 180 181 /* Create and initialize our private data. */ 182 filter_ref = SysNew( FILTER_REC ); 183 if( filter_ref == NULL ) 184 return( NULL ); 185 186 filter_ref -> appl_data_ref = appl_data_ref; 187 filter_ref -> actionCB = actionCB; 188 filter_ref -> user_data = user_data; 189 190 191 /* Create the filter window. */ 192 filter_ref -> filterW = createFilterWindow( filter_ref, parent, 193 tags_menu, app_modal ); 194 if( filter_ref -> filterW == NULL ) { 195 SysFree( filter_ref ); 196 197 return( NULL ); 198 } 199 200 201 /* Set default values. */ 202 filter_rec.flags = 0; 203 flagSet( filter_rec.flags, XTM_DM_FLAG_ALL ); 204 205 filter_rec.text_string[ 0 ] = '\0'; 206 filter_rec.tag_string[ 0 ] = '\0'; 207 208 setFilterValues( filter_ref, &filter_rec ); 209 210 211 return( (XTM_FI_HANDLE) filter_ref ); 212 213 } /* xtmFiInitialize */ 214 215 216 /*----------------------------------------------------------------------*/ 217 218 void xtmFiDestroy(XTM_FI_HANDLE filter_handle)219 xtmFiDestroy( XTM_FI_HANDLE filter_handle ) 220 { 221 222 /* Variables. */ 223 FILTER_REC_REF filter_ref; 224 225 226 /* Code. */ 227 228 if( filter_handle == NULL ) 229 return; 230 231 /* Our private data. */ 232 filter_ref = (FILTER_REC_REF) filter_handle; 233 234 235 /* Destroy the window. */ 236 XtDestroyWidget( filter_ref -> filterW ); 237 238 239 return; 240 241 } /* xtmFiDestroy */ 242 243 244 /*----------------------------------------------------------------------*/ 245 246 void xtmFiDisplayFilterWindow(XTM_FI_HANDLE filter_handle,XTM_DM_FILTER_REC * use_filter_ref)247 xtmFiDisplayFilterWindow( XTM_FI_HANDLE filter_handle, 248 XTM_DM_FILTER_REC *use_filter_ref ) 249 { 250 251 /* Variables. */ 252 FILTER_REC_REF filter_ref; 253 254 255 /* Code. */ 256 257 if( filter_handle == NULL ) 258 return; 259 260 /* Our private data. */ 261 filter_ref = (FILTER_REC_REF) filter_handle; 262 263 264 /* Set filter data? */ 265 if( use_filter_ref != NULL ) 266 setFilterValues( filter_ref, use_filter_ref ); 267 268 269 /* Make sure the window is displayed. */ 270 XtManageChild( filter_ref -> filterW ); 271 272 273 return; 274 275 } /* xtmFiDisplayFilterWindow */ 276 277 278 /*----------------------------------------------------------------------*/ 279 280 static Widget createFilterWindow(FILTER_REC_REF filter_ref,Widget parent,char * tags_menu,Boolean app_modal)281 createFilterWindow( FILTER_REC_REF filter_ref, 282 Widget parent, 283 char *tags_menu, 284 Boolean app_modal ) 285 { 286 287 /* Variables. */ 288 int index; 289 char buffer[ 100 ]; 290 char *pick_labels[ 9 ]; 291 Arg args[ 10 ]; 292 Cardinal n; 293 Widget dataLocalW[ 13 ]; 294 Widget filtFd; 295 Widget pickTb[ 9 ]; 296 Widget tempW; 297 Widget workFo; 298 299 static XIT_TEXT_STRUCT text_buffer[] = { 300 { "SearchStrTx", NULL, 1, True }, 301 }; 302 303 static XIT_ACTION_AREA_ITEM action_buttons[] = { 304 { "", okCB, NULL }, 305 { "", applyCB, NULL }, 306 { "", cancelCB, NULL }, 307 { "", helpCB, NULL }, 308 }; 309 310 311 /* Code. */ 312 313 /* Set message strings. */ 314 action_buttons[ 0 ].label = msgGetText( MXDI_OK_BUTTON ); 315 action_buttons[ 0 ].data = filter_ref; 316 action_buttons[ 1 ].label = msgGetText( MXDI_APPLY_BUTTON ); 317 action_buttons[ 1 ].data = filter_ref; 318 action_buttons[ 2 ].label = msgGetText( MXDI_CANCEL_BUTTON ); 319 action_buttons[ 2 ].data = filter_ref; 320 action_buttons[ 3 ].label = msgGetText( MXDI_HELP_BUTTON ); 321 action_buttons[ 3 ].data = filter_ref; 322 323 pick_labels[ 0 ] = msgGetText( MXDI_FILTER_APPOINTMENTS_LABEL ); 324 pick_labels[ 1 ] = msgGetText( MXDI_FILTER_NOTES_LABEL ); 325 pick_labels[ 2 ] = msgGetText( MXDI_FILTER_ALARMS_LABEL ); 326 pick_labels[ 3 ] = msgGetText( MXDI_FILTER_IMPORTANT_LABEL ); 327 pick_labels[ 4 ] = msgGetText( MXDI_FILTER_PRIVATE_LABEL ); 328 pick_labels[ 5 ] = msgGetText( MXDI_FILTER_DONE_LABEL ); 329 pick_labels[ 6 ] = msgGetText( MXDI_FILTER_NOT_DONE_LABEL ); 330 pick_labels[ 7 ] = msgGetText( MXDI_FILTER_REPEATED_LABEL ); 331 pick_labels[ 8 ] = msgGetText( MXDI_FILTER_STICKY_LABEL ); 332 333 334 /* Create a form dialog with buttons. */ 335 filtFd = xitCreateFormDialog( parent, "FiltFd", 336 1, 0, 337 action_buttons, 338 XtNumber( action_buttons ) ); 339 340 XtAddCallback( filtFd, XmNdestroyCallback, 341 (XtCallbackProc) destroyCB, (XtPointer) filter_ref ); 342 343 344 n = 0; 345 XtSetArg( args[ n ], XmNtitle, msgGetText( MXDI_FILTER_DB_TITLE ) ); n++; 346 XtSetValues( XtParent( filtFd ), args, n ); 347 348 n = 0; 349 XtSetArg( args[ n ], XmNdeleteResponse, XmUNMAP ); n++; 350 XtSetValues( filtFd, args, n ); 351 352 if( app_modal ) { 353 n = 0; 354 XtSetArg( args[ n ], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL ); n++; 355 XtSetValues( filtFd, args, n ); 356 } 357 358 359 /* Create a container for the contents of the window. */ 360 workFo = XtNameToWidget( filtFd, "FiltFdFo" ); 361 362 introLa = xitCreateLabel( workFo, "IntroLa", 363 msgGetText( MXDI_FILTER_INTRO_LABEL ), -1 ); 364 365 366 /* The type of entry to select. */ 367 pickTypeLa = xitCreateLabel( workFo, "PickTypeLa", 368 msgGetText( MXDI_FILTER_PICK_TYPE_LABEL ), -1 ); 369 370 n = 0; 371 XtSetArg( args[ n ], XmNorientation, XmVERTICAL ); n++; 372 XtSetArg( args[ n ], XmNpacking, XmPACK_COLUMN ); n++; 373 XtSetArg( args[ n ], XmNnumColumns, 2 ); n++; 374 pickTypeRc = XmCreateRowColumn( workFo, "PickTypeRc", args, n ); 375 376 for( index = 0; index < 2; index++ ) { 377 sprintf( buffer, "Pick%dTb", index + 1 ); 378 379 pickTb[ index ] = xitCreateToggleButton( pickTypeRc, buffer, 380 pick_labels[ index ], False ); 381 } 382 383 384 /* The specific entries to select. */ 385 pickSpecLa = xitCreateLabel( workFo, "PickSpecLa", 386 msgGetText( MXDI_FILTER_PICK_SPEC_LABEL ), -1 ); 387 388 n = 0; 389 XtSetArg( args[ n ], XmNorientation, XmVERTICAL ); n++; 390 XtSetArg( args[ n ], XmNpacking, XmPACK_COLUMN ); n++; 391 XtSetArg( args[ n ], XmNnumColumns, 2 ); n++; 392 pickSpecRc = XmCreateRowColumn( workFo, "PickSpecRc", args, n ); 393 394 for( index = 2; index < 9; index++ ) { 395 sprintf( buffer, "Pick%dTb", index + 1 ); 396 397 pickTb[ index ] = xitCreateToggleButton( pickSpecRc, buffer, 398 pick_labels[ index ], False ); 399 } 400 401 402 /* Separator. */ 403 n = 0; 404 XtSetArg( args[ n ], XmNorientation, XmHORIZONTAL ); n++; 405 ho1Sp = XmCreateSeparatorGadget( workFo, "Ho1Sp", args, n ); 406 407 408 /* Search text. */ 409 searchStrLa = xitCreateLabel( workFo, "SearchStrLa", 410 msgGetText( MXDI_SEARCH_STRING_LABEL ), -1 ); 411 412 searchStrTx = xitCreateTextCols( workFo, &text_buffer[ 0 ], 40 ); 413 414 n = 0; 415 XtSetArg( args[ n ], XmNmaxLength, XTM_DM_MAX_TEXT_SEARCH ); n++; 416 XtSetValues( searchStrTx, args, n ); 417 418 searchStrCaseTb = xitCreateToggleButton( 419 workFo, "SearchStrCaseTb", 420 msgGetText( MXDI_CASE_SENSITIVE_LABEL ), 421 False ); 422 423 /* Separator. */ 424 n = 0; 425 XtSetArg( args[ n ], XmNorientation, XmHORIZONTAL ); n++; 426 ho2Sp = XmCreateSeparatorGadget( workFo, "Ho2Sp", args, n ); 427 428 429 /* Search tag. */ 430 tagStrLa = xitCreateLabel( workFo, "TagStrLa", 431 msgGetText( MXDI_SEARCH_TAG_LABEL ), -1 ); 432 433 tagStrFs = xtmFlCreateSelField( workFo, "TagStrFs", 434 XTM_DM_MAX_TAG_SEARCH, tags_menu, 435 ' ', True, 436 NULL, NULL ); 437 438 tempW = xitFieldSelectGetChild( tagStrFs, xitFIELD_SELECT_TEXT_FIELD ); 439 440 xitFieldSelectSetAppend( tagStrFs, True ); 441 442 tagStrCaseTb = xitCreateToggleButton( 443 workFo, "TagStrCaseTb", 444 msgGetText( MXDI_CASE_SENSITIVE_LABEL ), 445 False ); 446 447 448 /* Put the Parts together. */ 449 xitAttachWidget( introLa, 450 XmATTACH_FORM, NULL, XmATTACH_FORM, NULL, 451 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 452 xitAttachWidget( pickTypeLa, 453 XmATTACH_WIDGET, introLa, XmATTACH_FORM, NULL, 454 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 455 xitAttachWidget( pickTypeRc, 456 XmATTACH_WIDGET, pickTypeLa, XmATTACH_FORM, NULL, 457 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 458 xitAttachWidget( pickSpecLa, 459 XmATTACH_WIDGET, pickTypeRc, XmATTACH_FORM, NULL, 460 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 461 xitAttachWidget( pickSpecRc, 462 XmATTACH_WIDGET, pickSpecLa, XmATTACH_FORM, NULL, 463 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 464 xitAttachWidget( ho1Sp, 465 XmATTACH_WIDGET, pickSpecRc, XmATTACH_FORM, NULL, 466 XmATTACH_FORM, NULL, XmATTACH_NONE, NULL ); 467 xitAttachWidget( searchStrLa, 468 XmATTACH_WIDGET, ho1Sp, XmATTACH_FORM, NULL, 469 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 470 xitAttachWidget( searchStrTx, 471 XmATTACH_WIDGET, searchStrLa, XmATTACH_FORM, NULL, 472 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 473 xitAttachWidget( searchStrCaseTb, 474 XmATTACH_WIDGET, searchStrTx, XmATTACH_FORM, NULL, 475 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 476 xitAttachWidget( ho2Sp, 477 XmATTACH_WIDGET, searchStrCaseTb, XmATTACH_FORM, NULL, 478 XmATTACH_FORM, NULL, XmATTACH_NONE, NULL ); 479 xitAttachWidget( tagStrLa, 480 XmATTACH_WIDGET, ho2Sp, XmATTACH_FORM, NULL, 481 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 482 xitAttachWidget( tagStrFs, 483 XmATTACH_WIDGET, tagStrLa, XmATTACH_FORM, NULL, 484 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 485 xitAttachWidget( tagStrCaseTb, 486 XmATTACH_WIDGET, tagStrFs, XmATTACH_FORM, NULL, 487 XmATTACH_NONE, NULL, XmATTACH_NONE, NULL ); 488 489 490 /* Make sure there is enough space between the children. */ 491 n = 0; 492 XtSetArg( args[ n ], XmNtopOffset, 5 ); n++; 493 XtSetArg( args[ n ], XmNleftOffset, 5 ); n++; 494 XtSetArg( args[ n ], XmNrightOffset, 5 ); n++; 495 XtSetArg( args[ n ], XmNbottomOffset, 5 ); n++; 496 XtSetValues( introLa, args, n ); 497 XtSetValues( pickTypeLa, args, n ); 498 XtSetValues( pickTypeRc, args, n ); 499 XtSetValues( pickSpecLa, args, n ); 500 XtSetValues( pickSpecRc, args, n ); 501 XtSetValues( searchStrLa, args, n ); 502 XtSetValues( searchStrTx, args, n ); 503 XtSetValues( searchStrCaseTb, args, n ); 504 XtSetValues( tagStrLa, args, n ); 505 XtSetValues( tagStrFs, args, n ); 506 XtSetValues( tagStrCaseTb, args, n ); 507 508 n = 0; 509 XtSetArg( args[ n ], XmNtopOffset, 5 ); n++; 510 XtSetArg( args[ n ], XmNbottomOffset, 5 ); n++; 511 XtSetValues( ho1Sp, args, n ); 512 XtSetValues( ho2Sp, args, n ); 513 514 515 /* Manage the children. */ 516 xitManageChildren( pickTb, XtNumber( pickTb ) ); 517 518 xitManageChildren( dataLocalW, XtNumber( dataLocalW ) ); 519 520 521 /* Set the initial sizes. */ 522 xitSetSizeFormDialog( filtFd, True ); 523 524 525 return( filtFd ); 526 527 } /* createFilterWindow */ 528 529 530 /*----------------------------------------------------------------------*/ 531 532 static void fetchWindowData(FILTER_REC_REF filter_ref,XTM_DM_FILTER_REC * use_filter_ref)533 fetchWindowData( FILTER_REC_REF filter_ref, 534 XTM_DM_FILTER_REC *use_filter_ref ) 535 { 536 537 /* Variables. */ 538 char *char_ref; 539 char *text_ref; 540 Widget mainW; 541 Widget tempW; 542 543 544 /* Code. */ 545 546 mainW = XtNameToWidget( filter_ref -> filterW, "FiltFdFo" ); 547 548 use_filter_ref -> flags = 0; 549 use_filter_ref -> text_string[ 0 ] = '\0'; 550 use_filter_ref -> tag_string[ 0 ] = '\0'; 551 552 553 /* Type of entries. */ 554 tempW = XtNameToWidget( mainW, "PickTypeRc.Pick1Tb" ); 555 if( XmToggleButtonGetState( tempW ) ) 556 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_APPOINTMENTS ); 557 558 559 tempW = XtNameToWidget( mainW, "PickTypeRc.Pick2Tb" ); 560 if( XmToggleButtonGetState( tempW ) ) 561 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_NOTES ); 562 563 if( flagIsSet( use_filter_ref -> flags, XTM_DM_FLAG_APPOINTMENTS ) && 564 flagIsSet( use_filter_ref -> flags, XTM_DM_FLAG_NOTES ) ) 565 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_ALL ); 566 567 568 /* Specific entries. */ 569 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick3Tb" ); 570 if( XmToggleButtonGetState( tempW ) ) 571 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_ALARMS ); 572 573 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick4Tb" ); 574 if( XmToggleButtonGetState( tempW ) ) 575 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_IMPORTANT ); 576 577 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick5Tb" ); 578 if( XmToggleButtonGetState( tempW ) ) 579 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_PRIVATE ); 580 581 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick6Tb" ); 582 if( XmToggleButtonGetState( tempW ) ) 583 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_DONE ); 584 585 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick7Tb" ); 586 if( XmToggleButtonGetState( tempW ) ) 587 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_NOT_DONE ); 588 589 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick8Tb" ); 590 if( XmToggleButtonGetState( tempW ) ) 591 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_REPEATED ); 592 593 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick9Tb" ); 594 if( XmToggleButtonGetState( tempW ) ) 595 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_STICKY ); 596 597 598 /* Case sensitive search. */ 599 tempW = XtNameToWidget( mainW, "SearchStrCaseTb" ); 600 if( XmToggleButtonGetState( tempW ) ) 601 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_TEXT_CASE_SENS ); 602 603 604 tempW = XtNameToWidget( mainW, "TagStrCaseTb" ); 605 if( XmToggleButtonGetState( tempW ) ) 606 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_TAG_CASE_SENS ); 607 608 609 /* Text search string. */ 610 tempW = XtNameToWidget( mainW, "SearchStrTx" ); 611 text_ref = xitStringGetText( tempW ); 612 613 char_ref = text_ref; 614 while( isspace( *char_ref ) ) 615 char_ref++; 616 617 if( strlen( char_ref ) > 0 ) { 618 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_SEARCH_TEXT ); 619 strcpy( use_filter_ref -> text_string, char_ref ); 620 } 621 622 SysFree( text_ref ); 623 624 625 /* Tag search string. */ 626 tempW = XtNameToWidget( mainW, "TagStrFs" ); 627 xitFieldSelectGetCurrent( tempW, &text_ref ); 628 629 char_ref = text_ref; 630 while( isspace( *char_ref ) ) 631 char_ref++; 632 633 if( strlen( char_ref ) > 0 ) { 634 flagSet( use_filter_ref -> flags, XTM_DM_FLAG_SEARCH_TAG ); 635 strcpy( use_filter_ref -> tag_string, char_ref ); 636 } 637 638 SysFree( text_ref ); 639 640 641 return; 642 643 } /* fetchWindowData */ 644 645 646 /*----------------------------------------------------------------------*/ 647 648 static void setFilterValues(FILTER_REC_REF filter_ref,XTM_DM_FILTER_REC * use_filter_ref)649 setFilterValues( FILTER_REC_REF filter_ref, 650 XTM_DM_FILTER_REC *use_filter_ref ) 651 { 652 653 /* Variables. */ 654 Boolean set; 655 UINT32 filter; 656 Widget mainW; 657 Widget tempW; 658 659 660 /* Code. */ 661 662 mainW = XtNameToWidget( filter_ref -> filterW, "FiltFdFo" ); 663 664 665 /* Set filter buttons. */ 666 filter = use_filter_ref -> flags; 667 668 669 /* Type of filter. */ 670 set = (flagIsSet( filter, (XTM_DM_FLAG_ALL | XTM_DM_FLAG_APPOINTMENTS) )) ? 671 True : False; 672 tempW = XtNameToWidget( mainW, "PickTypeRc.Pick1Tb" ); 673 XmToggleButtonSetState( tempW, set, False ); 674 675 set = (flagIsSet( filter, (XTM_DM_FLAG_ALL | XTM_DM_FLAG_NOTES) )) ? 676 True : False; 677 tempW = XtNameToWidget( mainW, "PickTypeRc.Pick2Tb" ); 678 XmToggleButtonSetState( tempW, set, False ); 679 680 681 /* Specific filter. */ 682 set = (flagIsSet( filter, XTM_DM_FLAG_ALARMS )) ? True : False; 683 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick3Tb" ); 684 XmToggleButtonSetState( tempW, set, False ); 685 686 set = (flagIsSet( filter, XTM_DM_FLAG_IMPORTANT )) ? True : False; 687 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick4Tb" ); 688 XmToggleButtonSetState( tempW, set, False ); 689 690 set = (flagIsSet( filter, XTM_DM_FLAG_PRIVATE )) ? True : False; 691 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick5Tb" ); 692 XmToggleButtonSetState( tempW, set, False ); 693 694 set = (flagIsSet( filter, XTM_DM_FLAG_DONE )) ? True : False; 695 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick6Tb" ); 696 XmToggleButtonSetState( tempW, set, False ); 697 698 set = (flagIsSet( filter, XTM_DM_FLAG_NOT_DONE )) ? True : False; 699 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick7Tb" ); 700 XmToggleButtonSetState( tempW, set, False ); 701 702 set = (flagIsSet( filter, XTM_DM_FLAG_REPEATED )) ? True : False; 703 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick8Tb" ); 704 XmToggleButtonSetState( tempW, set, False ); 705 706 set = (flagIsSet( filter, XTM_DM_FLAG_STICKY )) ? True : False; 707 tempW = XtNameToWidget( mainW, "PickSpecRc.Pick9Tb" ); 708 XmToggleButtonSetState( tempW, set, False ); 709 710 711 /* Set case sensitive buttons. */ 712 filter = use_filter_ref -> flags; 713 714 set = (flagIsSet( filter, XTM_DM_FLAG_TEXT_CASE_SENS )) ? True : False; 715 tempW = XtNameToWidget( mainW, "SearchStrCaseTb" ); 716 XmToggleButtonSetState( tempW, set, False ); 717 718 set = (flagIsSet( filter, XTM_DM_FLAG_TAG_CASE_SENS )) ? True : False; 719 tempW = XtNameToWidget( mainW, "TagStrCaseTb" ); 720 XmToggleButtonSetState( tempW, set, False ); 721 722 723 /* Set search string. */ 724 tempW = XtNameToWidget( mainW, "SearchStrTx" ); 725 XmTextSetString( tempW, use_filter_ref -> text_string ); 726 727 728 /* Tag seach string. */ 729 tempW = XtNameToWidget( mainW, "TagStrFs" ); 730 xitFieldSelectSetCurrent( tempW, use_filter_ref -> tag_string, False ); 731 732 733 return; 734 735 } /* setFilterValues */ 736 737 738 /*----------------------------------------------------------------------*/ 739 740 static void applyCB(Widget widget,FILTER_REC_REF filter_ref,XtPointer call_data)741 applyCB( Widget widget, 742 FILTER_REC_REF filter_ref, 743 XtPointer call_data ) 744 { 745 746 /* Variables. */ 747 XTM_DM_FILTER_REC filter_rec; 748 749 750 /* Code. */ 751 752 /* Fetch the window data. */ 753 fetchWindowData( filter_ref, &filter_rec ); 754 755 756 /* Call callback function? */ 757 if( filter_ref -> actionCB != NULL ) 758 (* filter_ref -> actionCB)( XTM_FI_REASON_APPLY, 759 &filter_rec, 760 filter_ref -> user_data ); 761 762 763 return; 764 765 } /* applyCB */ 766 767 768 /*----------------------------------------------------------------------*/ 769 770 static void cancelCB(Widget widget,FILTER_REC_REF filter_ref,XtPointer call_data)771 cancelCB( Widget widget, 772 FILTER_REC_REF filter_ref, 773 XtPointer call_data ) 774 { 775 776 /* Code. */ 777 778 /* Call callback function? */ 779 if( filter_ref -> actionCB != NULL ) 780 (* filter_ref -> actionCB)( XTM_FI_REASON_CANCEL, 781 NULL, filter_ref -> user_data ); 782 783 /* Hide the window. */ 784 XtUnmanageChild( filter_ref -> filterW ); 785 786 787 return; 788 789 } /* cancelCB */ 790 791 792 /*----------------------------------------------------------------------*/ 793 794 static void destroyCB(Widget widget,FILTER_REC_REF filter_ref,XtPointer call_data)795 destroyCB( Widget widget, 796 FILTER_REC_REF filter_ref, 797 XtPointer call_data ) 798 { 799 800 /* Code. */ 801 802 SysFree( filter_ref ); 803 804 805 return; 806 807 } /* destroyCB */ 808 809 810 /*----------------------------------------------------------------------*/ 811 812 static void helpCB(Widget widget,FILTER_REC_REF filter_ref,XtPointer call_data)813 helpCB( Widget widget, 814 FILTER_REC_REF filter_ref, 815 XtPointer call_data ) 816 { 817 818 /* Code. */ 819 820 xtmHlDisplayHelp( filter_ref -> appl_data_ref -> info_handle, 821 XTM_HL_WINDOW_INDEX, 822 filter_window_id, "" ); 823 824 return; 825 826 } /* helpCB */ 827 828 829 /*----------------------------------------------------------------------*/ 830 831 static void okCB(Widget widget,FILTER_REC_REF filter_ref,XtPointer call_data)832 okCB( Widget widget, 833 FILTER_REC_REF filter_ref, 834 XtPointer call_data ) 835 { 836 837 /* Variables. */ 838 XTM_DM_FILTER_REC filter_rec; 839 840 841 /* Code. */ 842 843 /* Fetch the window data. */ 844 fetchWindowData( filter_ref, &filter_rec ); 845 846 847 /* Call callback function? */ 848 if( filter_ref -> actionCB != NULL ) 849 (* filter_ref -> actionCB)( XTM_FI_REASON_OK, 850 &filter_rec, 851 filter_ref -> user_data ); 852 853 /* Hide the window. */ 854 XtUnmanageChild( filter_ref -> filterW ); 855 856 857 return; 858 859 } /* okCB */ 860