Attribute query selection
MotifUtilities.h
// Copyright 2011 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 

 

// MotifUtilities.h
// 
// This file contains declarations of general Motif utility functions
// and associated structures, macros, etc.

#ifndef _DEV_CPP_MOTIF_UTILITIES_H_
#define _DEV_CPP_MOTIF_UTILITIES_H_

// Motif headers
#define String         esriXString
#define Time           esriXTime
#define Cursor         esriXCursor
#define Object         esriXObject
#define ObjectClass    esriXObjectClass
#include <Xm/Xm.h>
#include <Xm/ComboBox.h>
#include <Xm/DialogS.h>
#include <Xm/SelectioB.h>
#include <Xm/FileSB.h>
#include <Xm/RowColumn.h>
#include <Xm/MessageB.h>
#include <Xm/PushB.h>
#include <Xm/Text.h>
#include <Xm/CascadeB.h>
#include <Xm/PushBG.h>
#undef String
#undef Time
#undef Cursor
#undef Object
#undef ObjectClass

// Standard C/C++ headers
#include <iostream>
using std::cerr;
using std::endl;

// Macros
#define BUTTON1 1
#define BUTTON2 2
#define OK 1
#define CANCEL 2

// Structures
typedef struct _ModalTextPromptCallDataStruct {
  int answer;
  char strResp[256];
} ModalTextPromptCallDataStruct;

typedef struct _MenuItem {
  const char*text;
  const char*accelText;
  const char*accel;
  XtPointer callbackData;
  void (*callback)(Widget menu_item, XtPointer client_data, XtPointer call_data);
} MenuItem;

// Modal dialog function prototypes

// ModalPrompt
// 
// Routine to display a modal prompt to a user with 2 choices.  The
// function initializes an int (the answer) to 0 and passes this as
// call_data to the callback.  While this int is 0 your application
// essentially does nothing and blocks in a loop.  The callback
// changes the value of this int according to which button the user
// pressed, causing the loop to exit.  
//
// RETURNS: either BUTTON1 or BUTTON2
// IN: XtAppContext app - your application's XtAppContext
// IN: Widget parent - the dialog's parent
// IN: const char*question - the dialog's question (e.g. "Save document?")
// IN: const char*ans1 - text for button 1 (e.g. "Yes" or "Ok")
// IN: const char*ans2 - text for button 2 (e.g. "No" or "Cancel")
// IN: int default_ans - either BUTTON1 or BUTTON2
//
// example usage:
//
// if (ModalPrompt(app, parent, "Overwrite existing file?", "Yes", "No", BUTTON2) == BUTTON1)
// /* Overwrite the file because the user clicked Yes */
int ModalPrompt (
  XtAppContext app,
  Widget parent,
  const char*question,
  const char*ans1,
  const char*ans2,
  int default_ans);

// ModalTextPrompt
// 
// Routine to display a modal prompt to a user and return a text
// value.  The function initializes the values of a static callback
// structure and passes this as call_data to its callback.  The
// callback structure contains an int (the button which the user
// clicked) and a character array to hold the response.  While the int
// is 0 your application essentially does nothing and blocks in a
// loop.  The callback changes the value of this int according to
// which button the user pressed, causing the loop to exit, and also
// copies the text of the response into the callback structure's char
// array. The function then uses the callback structure's character
// array as its return value.

// RETURNS: const char* string of the text the user types
// IN: XtAppContext app - your application's XtAppContext
// IN: Widget parent - the dialog's parent
// IN: const char*inPrompt - the dialog's question (e.g. "Enter file name:")
// OUT: outClickedCancel - this is set to either OK or CANCEL
//      depending on what the user clicked
//
// example usage:
//
// int button = CANCEL; 
// char *newValue = ModalTextPrompt(app, parent,"New value:", &button);
// if (button == OK)
//   value = newValue;
char *ModalTextPrompt (
  XtAppContext app,
  Widget parent,
  const char*inPrompt,
  int *outClickedCancel);

// ModalSelectionDialog
// 
// Routine to display a modal SelectionDialog to a user and return a
// text value representing the user's selection.  The function
// initializes the values of a static callback structure and passes
// this as call_data to its callback.  The callback structure contains
// an int (the button which the user clicked) and a character array to
// hold the response.  While the int is 0 your application essentially
// does nothing and blocks in a loop.  The callback changes the value
// of this int according to which button the user pressed, causing the
// loop to exit, and also copies the text of the response into the
// callback structure's char array. The function then uses the
// callback structure's character array as its return value.

//  RETURNS: char * string of the text the user types
//  IN: XtAppContext app - your application's XtAppContext
//  IN: Widget parent - the dialog's parent
//  IN: const char*prompt - the dialog's question (e.g. "Enter file name:")
//  XmString *inItems - an XmStringTable containing the items for the dialog
//  int inItemCount - count of inItems items
//  OUT: outClickedCancel - this is set to either OK or CANCEL
//       depending on what the user clicked
//
// example usage:
//
// int button = CANCEL;
// char *selectedItem = ModalSelectionDialog(
//    app,
//    parent,
//    "Select an item:",
//    str,               /* an XmStringTable */
//    strCount,          /* count of items in str */
//    &button);
// if (button == OK)
//   DoSomething (selectedItem);
char *ModalSelectionDialog (
  XtAppContext app,
  Widget parent,
  const char*inPrompt,
  XmString *inItems,
  int inItemCount,
  int *outClickedCancel);

// ModalFileSelectionDialog
// 
// Routine to display a modal FileSelectionDialog to a user and return
// a text value representing the user's selection.  The function
// initializes the values of a static callback structure and passes
// this as call_data to its callback.  The callback structure contains
// an int (the button which the user clicked) and a character array to
// hold the response.  While the int is 0 your application essentially
// does nothing and blocks in a loop.  The callback changes the value
// of this int according to which button the user pressed, causing the
// loop to exit, and also copies the text of the response into the
// callback structure's char array. The function then uses the
// callback structure's character array as its return value.

//  RETURNS: char * string representing the file name 
//  IN: XtAppContext app - your application's XtAppContext
//  IN: Widget parent - the dialog's parent
//  IN: const char*inPrompt - the dialog's question (e.g. "Enter file name:")
//  IN: const char*inMask - which types of files to show (e.g. "*.lyr")
//  OUT: outClickedCancel - this is set to either OK or CANCEL
//       depending on what the user clicked
//
// example usage:
//
// int button = CANCEL;
// char *selectedItem = ModalSelectionDialog(
//    app,
//    parent,
//    "Select an item:",
//    str,               /* an XmStringTable */
//    strCount,          /* count of items in str */
//    &button);
// if (button == OK)
//   DoSomething (selectedItem);
char *ModalFileSelectionDialog (
  XtAppContext app,
  Widget parent,
  const char*inPrompt,
  const char*inMask,
  int *outClickedCancel);

// Modal dialog callback function prototypes
void ModalPromptCallback (
  Widget widget,
  XtPointer client_data,
  XtPointer call_data);
void ModalTextPromptCallback (
  Widget widget,
  XtPointer client_data,
  XtPointer call_data);
void ModalSelectionDialogCallback (
  Widget widget,
  XtPointer client_data,
  XtPointer call_data);
void ModalFileSelectionDialogCallback (
  Widget widget,
  XtPointer client_data,
  XtPointer call_data);
    
// Utility function to dispay a MessageDialog
void ShowMessage (
  Widget parent,
  const char *dialogtitle,
  const char *text,
  bool asError);

// Remove all items from a combobox widget
void ClearCombo(Widget w);

// Removes the item w/ value inItem from the inCombobox and resets its
// textfield. 
void RemovePosition(Widget inCombobox, char *inItem);

// Method to set the contents of a combobox
void SetComboboxItems (Widget inCombobox, XmString *inItems, int inItemCount);

// Create a menu containing the items specified in items.  Uses the
// variable mainmenu as the menubar.  mnem can be NULL,
// everything else cannot be (except for items when number == 0).
void CreateMenu (
  Widget menubar,
  Widget menu,
  const char* menuname,
  char mnem,
  MenuItem *items,
  int number,
  Widget widgetIDs []);

void CenterDialog (Widget centerOver, Widget toCenter);

#endif //_DEV_CPP_MOTIF_UTILITIES_H_