2
* @OPENGROUP_COPYRIGHT@
4
* Copyright (c) 1990, 1991, 1992, 1993 Open Software Foundation, Inc.
5
* Copyright (c) 1996, 1997, 1998, 1999, 2000 The Open Group
6
* ALL RIGHTS RESERVED (MOTIF). See the file named COPYRIGHT.MOTIF for
7
* the full copyright text.
9
* This software is subject to an open license. It may only be
10
* used on, with or for operating systems which are themselves open
11
* source systems. You must contact The Open Group for a license
12
* allowing distribution and sublicensing of this software on, with,
13
* or for operating systems which are not Open Source programs.
15
* See http://www.opengroup.org/openmotif/license for full
16
* details of the license agreement. Any use, reproduction, or
17
* distribution of the program constitutes recipient's acceptance of
20
* EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
21
* PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
22
* KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
23
* WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
24
* OR FITNESS FOR A PARTICULAR PURPOSE
26
* EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
27
* NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
28
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
* DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
30
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
* ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
33
* EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
34
* POSSIBILITY OF SUCH DAMAGES.
42
static char *rcsid = "$XConsortium: todo.c /main/6 1995/07/14 09:46:43 drk $";
50
#include <X11/Intrinsic.h>
51
#include <X11/StringDefs.h>
52
#include <X11/Xatom.h>
53
/* Motif include files */
55
#include <Xm/CascadeBG.h>
56
#include <Xm/FileSB.h>
59
#include <Xm/Notebook.h>
60
#include <Xm/PushBG.h>
61
#include <Xm/RowColumn.h>
62
#include <Xm/ScrolledW.h>
63
#include <Xm/Separator.h>
65
/* Demo include files */
67
#include <Xmd/Menus.h>
68
#include <Xmd/Print.h>
72
#define APP_CLASS "XmdTodo"
74
#define MAX(x,y) ((x) > (y) ? (x) : (y))
75
#define MIN(x,y) ((x) > (y) ? (y) : (x))
77
char * fallback_resources[] = {
80
"*print_manager.printerList: lp,./todo.txt",
81
"*help_manager.helpFile: todo",
82
"*notebook.frameShadowThickness: 2",
83
"*notebook.bindingType: XmSPIRAL",
90
#define Offset(field) XtOffsetOf(OptionsRec, field)
92
XtResource resources[] = {
93
{"todoFile", "TodoFile", XtRString, sizeof(String),
94
Offset(todoFile), XtRImmediate, NULL}
99
XrmOptionDescRec optionDesc[] = {
100
{"-todoFile", "*todoFile", XrmoptionSepArg, (XtPointer) NULL}
103
static void QuitAppl(Widget, char *, XmPushButtonCallbackStruct *);
104
static void TextChanged(Widget, XtPointer, XtPointer);
106
void manageCB(Widget, Widget, XtPointer);
107
void PresentFDialog(Widget, XtPointer, XmPushButtonCallbackStruct*);
108
void New(Widget, char*, XmPushButtonCallbackStruct *);
109
void Save(Widget, char*, XmFileSelectionBoxCallbackStruct *);
110
void Open(Widget, char*, XmFileSelectionBoxCallbackStruct *);
111
void Print(Widget, char*, XmdPrintCallbackStruct *);
112
void SaveIt(Widget, char*, XmPushButtonCallbackStruct *);
113
void PageChange(Widget, XtPointer, XmNotebookCallbackStruct *);
114
void NewPage(Widget, XtPointer, XmPushButtonCallbackStruct *);
115
void DeletePage(Widget, XtPointer, XmPushButtonCallbackStruct *);
116
void EditPage(Widget, XtPointer, XmPushButtonCallbackStruct *);
118
void help_cb(Widget, XtPointer, XmAnyCallbackStruct *);
120
extern void ReadDB(char*);
121
extern void SaveDB(char*);
125
Widget shell, notebook, textw, labelw;
126
Widget help_widget, file_dialog;
133
main(int argc, char* argv[])
135
Widget mainw, menubar;
136
Widget *file_menu, *edit_menu, *selected_menu, *help_menu, temp;
139
XtAppContext context;
145
if (argc == 2 && strcmp(argv[1], "-help") == 0) {
146
printf("Usage: todo [-todoFile pathname]\n");
150
shell = XtVaAppInitialize(&context, APP_CLASS,
151
optionDesc, XtNumber(optionDesc),
153
fallback_resources, 0);
155
XtGetApplicationResources(shell, (XtPointer) &options,
156
resources, XtNumber(resources), (Arg *) NULL, 0);
158
mainw = XmCreateMainWindow(shell, "mainw", NULL, 0);
159
XtManageChild(mainw);
161
menubar = XmCreateMenuBar(mainw, "menub", NULL, 0);
162
XtManageChild(menubar);
165
XtSetArg(args[n], XmNcurrentPageNumber, 1); n++;
166
XtSetArg(args[n], XmNlastPageNumber, 100); n++;
167
notebook = XmCreateNotebook(mainw, "notebook", args, n);
168
XtManageChild(notebook);
169
XtAddCallback(notebook, XmNpageChangedCallback,
170
(XtCallbackProc) PageChange, NULL);
173
XtSetArg(args[n], XmNmenuBar, menubar); n++;
174
XtSetValues(mainw, args, n);
177
XtSetArg(args[n], XmNpageNumber, 1); n++;
178
XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
179
textw = XmCreateScrolledText(notebook, "text", args, n);
180
XtManageChild(textw);
181
XtAddCallback(textw, XmNvalueChangedCallback, TextChanged, NULL);
184
XtSetArg(args[n], XmNnotebookChildType, XmSTATUS_AREA); n++;
185
XtSetArg(args[n], XmNpageNumber, 1); n++;
186
labelw = XmCreateLabel(notebook, "label", args, n);
187
XtManageChild(labelw);
189
XmdCreateMenu(FILE_MENU, menubar, &file_menu, &size);
190
XtAddCallback(file_menu[FILE_NEW], XmNactivateCallback,
191
(XtCallbackProc) New, NULL);
192
XtAddCallback(file_menu[FILE_OPEN], XmNactivateCallback,
193
(XtCallbackProc) PresentFDialog, (XtPointer) Open);
194
XtAddCallback(file_menu[FILE_EXIT], XmNactivateCallback,
195
(XtCallbackProc) QuitAppl, NULL);
196
XtAddCallback(file_menu[FILE_SAVE_AS], XmNactivateCallback,
197
(XtCallbackProc) PresentFDialog, (XtPointer) Save);
198
XtAddCallback(file_menu[FILE_SAVE], XmNactivateCallback,
199
(XtCallbackProc) SaveIt, NULL);
201
XmdCreateMenu(SELECTED_MENU, menubar, &selected_menu, &size);
202
XtUnmanageChildren(selected_menu, size);
203
XtManageChild(selected_menu[SELECTED_PROPERTIES]);
204
XtAddCallback(selected_menu[SELECTED_PROPERTIES],
205
XmNactivateCallback, (XtCallbackProc) EditPage, NULL);
206
XtManageChild(selected_menu[SELECTED_NEW]);
207
XtAddCallback(selected_menu[SELECTED_NEW],
208
XmNactivateCallback, (XtCallbackProc) NewPage, NULL);
209
XtManageChild(selected_menu[SELECTED_DELETE]);
210
XtAddCallback(selected_menu[SELECTED_DELETE],
211
XmNactivateCallback, (XtCallbackProc) DeletePage, NULL);
213
XmdCreateMenu(HELP_MENU, menubar, &help_menu, &size);
214
XtUnmanageChildren(help_menu, size);
215
XtManageChild(help_menu[HELP_OVERVIEW]);
217
print_widget = XmdCreatePrintDialog(shell, "print_manager", NULL, 0);
218
XtAddCallback(print_widget, XmdNprintCallback, (XtCallbackProc) Print, NULL);
219
tmp = XmStringCreateLocalized("About Printing");
221
XtAddCallback(file_menu[FILE_PRINT], XmNactivateCallback,
222
(XtCallbackProc) manageCB, (XtPointer) print_widget);
224
help_widget = XmdCreateHelpDialog(shell, "help_manager", NULL, 0);
225
XtAddCallback(help_menu[HELP_OVERVIEW], XmNactivateCallback,
226
(XtCallbackProc) help_cb, (XtPointer) 0);
227
XtAddCallback(print_widget, XmNhelpCallback,
228
(XtCallbackProc) help_cb, (XtPointer) 1);
231
XtSetArg(args[n], XmNautoUnmanage, True); n++;
232
file_dialog = XmCreateFileSelectionDialog(shell, "file_dialog", args, n);
234
user = getpwuid(getuid());
235
for (i = 0; i < MAXPAGES; i++) {
239
if (options.todoFile == NULL) {
240
strcpy(temppath, user -> pw_dir);
241
strcat(temppath, "/.todo");
242
options.todoFile = XtNewString(temppath);
244
/* Copy the string for consistency */
245
options.todoFile = XtNewString(options.todoFile);
248
XtVaSetValues(shell, XmNtitle, options.todoFile,
249
XmNtitleEncoding, XA_STRING, NULL, NULL);
250
ReadDB(options.todoFile);
253
XtRealizeWidget(shell);
255
XtAppMainLoop(context);
257
return 0; /* make compiler happy */
261
QuitAppl(Widget w, char *i, XmPushButtonCallbackStruct *e)
267
TextChanged(Widget w, XtPointer i, XtPointer i2)
272
void manageCB( widget, w_to_manage, callback_data)
275
XtPointer callback_data;
277
if (w_to_manage != (Widget) NULL)
278
XtManageChild(w_to_manage);
282
PresentFDialog(Widget w, XtPointer cb, XmPushButtonCallbackStruct *cs)
284
XtRemoveAllCallbacks(file_dialog, XmNokCallback);
285
XtAddCallback(file_dialog, XmNokCallback, (XtCallbackProc) cb, NULL);
286
XtManageChild(file_dialog);
290
New(Widget w, char* ignore, XmPushButtonCallbackStruct *cs)
294
Boolean found = False;
298
sprintf(buf, "untitled%d.todo", i++);
299
found = access(buf, F_OK) != 0;
302
str = XtNewString(buf);
304
XtFree(options.todoFile);
305
options.todoFile = str;
306
XtVaSetValues(shell, XmNtitle, str, XmNtitleEncoding,
307
XA_STRING, NULL, NULL);
312
Save(Widget w, char *i, XmFileSelectionBoxCallbackStruct *i2)
315
if ((str = XmStringUnparse(i2->value, NULL, XmCHARSET_TEXT,
316
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL))) {
318
XtFree(options.todoFile);
319
options.todoFile = str;
320
XtVaSetValues(shell, XmNtitle, str, XmNtitleEncoding,
321
XA_STRING, NULL, NULL);
326
Open(Widget w, char *i, XmFileSelectionBoxCallbackStruct *i2)
329
if ((str = XmStringUnparse(i2->value, NULL, XmCHARSET_TEXT,
330
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL))) {
332
XtFree(options.todoFile);
333
options.todoFile = str;
334
XtVaSetValues(shell, XmNtitle, str, XmNtitleEncoding,
335
XA_STRING, NULL, NULL);
340
help_cb(Widget w, XtPointer item, XmAnyCallbackStruct *cb)
342
XtManageChild(help_widget);
343
XmdGotoHelpItem(w, (int) item, help_widget);
347
Print(Widget w, char *ignore, XmdPrintCallbackStruct *cb)
353
temp = fopen("/tmp/.todoout", "w");
355
if (cb -> first == cb -> last &&
360
from = MAX(0, cb -> first - 1);
361
to = MIN(maxpages, cb -> last - 1);
364
for (i = from; i <= to; i++) {
365
if (pages[i] -> label != NULL) {
366
fprintf(temp, "Subject: %s\n", pages[i] -> label);
367
fprintf(temp, "---------------------------\n\n\n");
369
fprintf(temp, "%s", pages[i] -> page);
370
if (i != (maxpages - 1)) fprintf(temp, "\f");
374
XmdPrintDocument("/tmp/.todoout", cb);