-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathXfile.cc
More file actions
98 lines (70 loc) · 2.6 KB
/
Xfile.cc
File metadata and controls
98 lines (70 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
-------------------------------------------------------------------------
OBJECT NAME: Xfile.c
FULL NAME: FileSelectionBox
DESCRIPTION: This pops up a Fileselection box for choosing a file name
Call CreateFile where you init X stuff. Then just call
QueryFile(Prompt, Default Directory, OK_callBack); Then your
OKcallBack procedure calls ExtractFileName()
INPUT: String to Display.
OUTPUT: Error message in its own tidy little window.
-------------------------------------------------------------------------
*/
#include "define.h"
#include <Xm/Xm.h>
#include <Xm/FileSB.h>
#include <Xm/TextF.h>
static Widget fileBox;
/* -------------------------------------------------------------------- */
void QueryFile(const char *prompt, const char *directory, XtCallbackProc callBack)
{
XmString xmdir, xmprompt;
Arg args[4];
int n = 0;
if (prompt)
{
xmprompt = XmStringCreate(const_cast<char *>(prompt), XmSTRING_DEFAULT_CHARSET);
XtSetArg(args[n], XmNselectionLabelString, xmprompt); ++n;
XtSetValues(fileBox, args, n);
XmStringFree(xmprompt);
}
if (directory)
{
xmdir = XmStringCreate(const_cast<char *>(directory), XmSTRING_DEFAULT_CHARSET);
XmFileSelectionDoSearch(fileBox, xmdir);
XmStringFree(xmdir);
}
else
XmFileSelectionDoSearch(fileBox, NULL);
XtRemoveAllCallbacks(fileBox, XmNokCallback);
XtAddCallback(fileBox, XmNokCallback, (XtCallbackProc)callBack, NULL);
XtAddGrab(fileBox, True, False);
XtManageChild(fileBox);
} /* END QUERYFILE */
/* -------------------------------------------------------------------- */
void FileCancel(Widget w, XtPointer clientData, XtPointer callData)
{
XtUnmanageChild(fileBox);
XtRemoveGrab(fileBox);
} /* END FILECANCEL */
/* -------------------------------------------------------------------- */
void CreateFileSelectionBox(Widget parent)
{
fileBox = XmCreateFileSelectionDialog(parent, (char *)"fileBox", NULL, 0);
XtSetSensitive(XmFileSelectionBoxGetChild(fileBox, XmDIALOG_HELP_BUTTON), False);
XtAddCallback(fileBox, XmNcancelCallback, FileCancel, (XtPointer)False);
} /* END CREATEFILESELECTIONBOX */
/* -------------------------------------------------------------------- */
char *ExtractFileDialogFilter()
{
Widget fltr = XmFileSelectionBoxGetChild(fileBox, XmDIALOG_FILTER_TEXT);
if (fltr)
return XmTextFieldGetString(fltr);
return(0);
} /* END EXTRACTFILTER */
/* -------------------------------------------------------------------- */
void ExtractFileName(XmString str, char **text)
{
XmStringGetLtoR(str, XmSTRING_DEFAULT_CHARSET, text);
} /* END EXTRACTFILENAME */
/* END XFILE.C */