|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char *rcsid = "$TOG: actions.c /main/7 1997/05/02 10:01:40 dbl $";
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdlib.h>
|
|
Packit |
b099d7 |
#include <ctype.h>
|
|
Packit |
b099d7 |
#include <X11/Intrinsic.h>
|
|
Packit |
b099d7 |
#include <X11/StringDefs.h>
|
|
Packit |
b099d7 |
#include <Xm/Xm.h>
|
|
Packit |
b099d7 |
#include <Xm/SelectioB.h>
|
|
Packit |
b099d7 |
#include <Xm/Notebook.h>
|
|
Packit |
b099d7 |
#include <Xm/Form.h>
|
|
Packit |
b099d7 |
#include <Xm/LabelG.h>
|
|
Packit |
b099d7 |
#include <Xm/PushBG.h>
|
|
Packit |
b099d7 |
#include <Xm/PushB.h>
|
|
Packit |
b099d7 |
#include <Xm/BulletinB.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumn.h>
|
|
Packit |
b099d7 |
#include <Xm/MessageB.h>
|
|
Packit |
b099d7 |
#include <Xm/TextF.h>
|
|
Packit |
b099d7 |
#include <Xm/Text.h>
|
|
Packit |
b099d7 |
#include <Exm/TabB.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "page.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extern Page pages[];
|
|
Packit |
b099d7 |
Widget editDialog = 0, deleteDialog = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void SetPage(int);
|
|
Packit |
b099d7 |
void AdjustPages(int, int);
|
|
Packit |
b099d7 |
void FixPages();
|
|
Packit |
b099d7 |
void PageChange(Widget w, XtPointer i, XmNotebookCallbackStruct *cs);
|
|
Packit |
b099d7 |
Page AllocPage();
|
|
Packit |
b099d7 |
char* Trim(char*);
|
|
Packit |
b099d7 |
extern void SaveDB(char*);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extern Widget shell, textw, labelw, notebook;
|
|
Packit |
b099d7 |
extern int maxpages, currentPage, modified;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
NewPage(Widget w, XtPointer i, XmPushButtonCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (modified && pages[currentPage] != NULL) {
|
|
Packit |
b099d7 |
if (pages[currentPage] -> page != NULL)
|
|
Packit |
b099d7 |
XtFree(pages[currentPage] -> page);
|
|
Packit |
b099d7 |
pages[currentPage] -> page = XmTextGetString(textw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
AdjustPages(currentPage, 1);
|
|
Packit |
b099d7 |
pages[currentPage] = AllocPage();
|
|
Packit |
b099d7 |
FixPages();
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNcurrentPageNumber, (currentPage + 1));
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlastPageNumber, (maxpages + 1));
|
|
Packit |
b099d7 |
XtSetValues(notebook, args, 2);
|
|
Packit |
b099d7 |
SetPage(currentPage);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
DoDeletePage(Widget w, XtPointer i, XmPushButtonCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] != NULL) {
|
|
Packit |
b099d7 |
if (pages[currentPage] -> page != NULL) XtFree(pages[currentPage] -> page);
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorPB != (Widget) 0)
|
|
Packit |
b099d7 |
XtDestroyWidget(pages[currentPage] -> minorPB);
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorPB != (Widget) 0)
|
|
Packit |
b099d7 |
XtDestroyWidget(pages[currentPage] -> majorPB);
|
|
Packit |
b099d7 |
XtFree((XtPointer) pages[currentPage]);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
pages[currentPage] = NULL;
|
|
Packit |
b099d7 |
AdjustPages(currentPage, -1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If there are no more pages left, then create a blank one */
|
|
Packit |
b099d7 |
if (maxpages < 0) {
|
|
Packit |
b099d7 |
pages[0] = AllocPage();
|
|
Packit |
b099d7 |
pages[0] -> page = XtMalloc(2);
|
|
Packit |
b099d7 |
pages[0] -> page[0] = 0;
|
|
Packit |
b099d7 |
maxpages = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
FixPages();
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNcurrentPageNumber, (currentPage + 1));
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlastPageNumber, (maxpages + 1));
|
|
Packit |
b099d7 |
XtSetValues(notebook, args, 2);
|
|
Packit |
b099d7 |
SetPage(currentPage);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
DeletePage(Widget w, XtPointer i, XmPushButtonCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (deleteDialog == 0) {
|
|
Packit |
b099d7 |
Arg args[10];
|
|
Packit |
b099d7 |
XmString okLabel, promptText, dialogTitle;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
dialogTitle = XmStringCreateLocalized("Page Delete Dialog");
|
|
Packit |
b099d7 |
okLabel = XmStringCreateLocalized("Delete");
|
|
Packit |
b099d7 |
promptText = XmStringCreateLocalized("Really delete this page?");
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNokLabelString, okLabel);
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNmessageString, promptText);
|
|
Packit |
b099d7 |
XtSetArg(args[2], XmNdialogTitle, dialogTitle);
|
|
Packit |
b099d7 |
XtSetArg(args[3], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL);
|
|
Packit |
b099d7 |
deleteDialog = XmCreateMessageDialog(shell, "DeletePage",
|
|
Packit |
b099d7 |
args, 4);
|
|
Packit |
b099d7 |
XtAddCallback(deleteDialog, XmNokCallback,
|
|
Packit |
b099d7 |
(XtCallbackProc) DoDeletePage, NULL);
|
|
Packit |
b099d7 |
XmStringFree(dialogTitle);
|
|
Packit |
b099d7 |
XmStringFree(okLabel);
|
|
Packit |
b099d7 |
XmStringFree(promptText);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(deleteDialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget labelEditW, majorTabW, minorTabW;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
DoEditPage(Widget w, XtPointer ig, XmPushButtonCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *temp;
|
|
Packit |
b099d7 |
XmString tstr;
|
|
Packit |
b099d7 |
Arg args[5];
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
pages[currentPage] -> label = XmTextFieldGetString(labelEditW);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorTab != NULL)
|
|
Packit |
b099d7 |
XtFree(pages[currentPage] -> minorTab);
|
|
Packit |
b099d7 |
temp = XmTextGetString(minorTabW);
|
|
Packit |
b099d7 |
temp = Trim(temp);
|
|
Packit |
b099d7 |
if (strlen(temp) > 0)
|
|
Packit |
b099d7 |
pages[currentPage] -> minorTab = temp;
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtFree(temp);
|
|
Packit |
b099d7 |
pages[currentPage] -> minorTab = NULL;
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorPB)
|
|
Packit |
b099d7 |
XtUnmanageChild(pages[currentPage] -> minorPB);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorTab != NULL)
|
|
Packit |
b099d7 |
XtFree(pages[currentPage] -> majorTab);
|
|
Packit |
b099d7 |
temp = XmTextGetString(majorTabW);
|
|
Packit |
b099d7 |
temp = Trim(temp);
|
|
Packit |
b099d7 |
if (strlen(temp) > 0)
|
|
Packit |
b099d7 |
pages[currentPage] -> majorTab = temp;
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtFree(temp);
|
|
Packit |
b099d7 |
pages[currentPage] -> majorTab = NULL;
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorPB)
|
|
Packit |
b099d7 |
XtUnmanageChild(pages[currentPage] -> majorPB);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorTab != NULL) {
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorPB == (Widget) 0) {
|
|
Packit |
b099d7 |
i = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNpageNumber, currentPage + 1); i++;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNnotebookChildType, XmMAJOR_TAB); i++;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNshadowThickness, 1); i++;
|
|
Packit |
b099d7 |
pages[currentPage] -> majorPB =
|
|
Packit |
b099d7 |
ExmCreateTabButton(notebook, "atab", args, i);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
tstr = XmStringGenerate(pages[currentPage] -> majorTab, NULL,
|
|
Packit |
b099d7 |
XmCHARSET_TEXT, NULL);
|
|
Packit |
b099d7 |
XtSetArg(args[0], ExmNcompoundString, tstr);
|
|
Packit |
b099d7 |
XtSetValues(pages[currentPage] -> majorPB, args, 1);
|
|
Packit |
b099d7 |
XtManageChild(pages[currentPage] -> majorPB);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorTab != NULL) {
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorPB == (Widget) 0) {
|
|
Packit |
b099d7 |
i = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNpageNumber, currentPage + 1); i++;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNnotebookChildType, XmMINOR_TAB); i++;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNshadowThickness, 1); i++;
|
|
Packit |
b099d7 |
pages[currentPage] -> minorPB =
|
|
Packit |
b099d7 |
ExmCreateTabButton(notebook, "atab", args, i);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
tstr = XmStringGenerate(pages[currentPage] -> minorTab, NULL,
|
|
Packit |
b099d7 |
XmCHARSET_TEXT, NULL);
|
|
Packit |
b099d7 |
XtSetArg(args[0], ExmNcompoundString, tstr);
|
|
Packit |
b099d7 |
XtSetValues(pages[currentPage] -> minorPB, args, 1);
|
|
Packit |
b099d7 |
XtManageChild(pages[currentPage] -> minorPB);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Get contents before update */
|
|
Packit |
b099d7 |
XtFree(pages[currentPage] -> page);
|
|
Packit |
b099d7 |
pages[currentPage] -> page = XmTextGetString(textw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetPage(currentPage);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
EditPage(Widget w, XtPointer i, XmPushButtonCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (pages[currentPage] == NULL) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (editDialog == 0) {
|
|
Packit |
b099d7 |
Arg args[10];
|
|
Packit |
b099d7 |
XmString promptText, dialogTitle, temp;
|
|
Packit |
b099d7 |
XmString okLabel, cancelLabel;
|
|
Packit |
b099d7 |
Widget label, rc1, rc2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
dialogTitle = XmStringCreateLocalized("Page Edit Dialog");
|
|
Packit |
b099d7 |
promptText = XmStringCreateLocalized("Really edit this page?");
|
|
Packit |
b099d7 |
okLabel = XmStringCreateLocalized("OK");
|
|
Packit |
b099d7 |
cancelLabel = XmStringCreateLocalized("Cancel");
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNselectionLabelString, promptText);
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNdialogTitle, dialogTitle);
|
|
Packit |
b099d7 |
XtSetArg(args[2], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL);
|
|
Packit |
b099d7 |
XtSetArg(args[3], XmNokLabelString, okLabel);
|
|
Packit |
b099d7 |
XtSetArg(args[4], XmNcancelLabelString, cancelLabel);
|
|
Packit |
b099d7 |
editDialog = XmCreateTemplateDialog(shell, "EditPage",
|
|
Packit |
b099d7 |
args, 5);
|
|
Packit |
b099d7 |
XtAddCallback(editDialog, XmNokCallback,
|
|
Packit |
b099d7 |
(XtCallbackProc) DoEditPage, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmStringFree(dialogTitle);
|
|
Packit |
b099d7 |
XmStringFree(promptText);
|
|
Packit |
b099d7 |
XmStringFree(okLabel);
|
|
Packit |
b099d7 |
XmStringFree(cancelLabel);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNorientation, XmVERTICAL);
|
|
Packit |
b099d7 |
rc1 = XmCreateRowColumn(editDialog, "rc", args, 1);
|
|
Packit |
b099d7 |
XtManageChild(rc1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNorientation, XmHORIZONTAL);
|
|
Packit |
b099d7 |
rc2 = XmCreateRowColumn(rc1, "rc2", args, 1);
|
|
Packit |
b099d7 |
temp = XmStringCreateLocalized("Label:");
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNwidth, 100);
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlabelString, temp);
|
|
Packit |
b099d7 |
label = XmCreateLabelGadget(rc2, "label", args, 2);
|
|
Packit |
b099d7 |
XtManageChild(label);
|
|
Packit |
b099d7 |
XmStringFree(temp);
|
|
Packit |
b099d7 |
XtManageChild(rc2);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
labelEditW = XmCreateTextField(rc2, "editTF", NULL, 0);
|
|
Packit |
b099d7 |
XtManageChild(labelEditW);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNorientation, XmHORIZONTAL);
|
|
Packit |
b099d7 |
rc2 = XmCreateRowColumn(rc1, "rc2", args, 1);
|
|
Packit |
b099d7 |
temp = XmStringCreateLocalized("Major Tab:");
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNwidth, 100);
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlabelString, temp);
|
|
Packit |
b099d7 |
label = XmCreateLabelGadget(rc2, "label", args, 2);
|
|
Packit |
b099d7 |
XtManageChild(label);
|
|
Packit |
b099d7 |
XmStringFree(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
majorTabW = XmCreateTextField(rc2, "majorTF", NULL, 0);
|
|
Packit |
b099d7 |
XtManageChild(majorTabW);
|
|
Packit |
b099d7 |
XtManageChild(rc2);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNorientation, XmHORIZONTAL);
|
|
Packit |
b099d7 |
rc2 = XmCreateRowColumn(rc1, "rc2", args, 1);
|
|
Packit |
b099d7 |
temp = XmStringCreateLocalized("Minor Tab:");
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNwidth, 100);
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlabelString, temp);
|
|
Packit |
b099d7 |
label = XmCreateLabelGadget(rc2, "label", args, 2);
|
|
Packit |
b099d7 |
XtManageChild(label);
|
|
Packit |
b099d7 |
XmStringFree(temp);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
minorTabW = XmCreateTextField(rc2, "minorTF", NULL, 0);
|
|
Packit |
b099d7 |
XtManageChild(minorTabW);
|
|
Packit |
b099d7 |
XtManageChild(rc2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> label != NULL)
|
|
Packit |
b099d7 |
XmTextFieldSetString(labelEditW, pages[currentPage] -> label);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XmTextFieldSetString(labelEditW, "");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> majorTab != NULL)
|
|
Packit |
b099d7 |
XmTextSetString(majorTabW, pages[currentPage] -> majorTab);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XmTextSetString(majorTabW, "");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[currentPage] -> minorTab != NULL)
|
|
Packit |
b099d7 |
XmTextSetString(minorTabW, pages[currentPage] -> minorTab);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XmTextSetString(minorTabW, "");
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(editDialog);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
SaveIt(Widget w, char *i, XmPushButtonCallbackStruct *e)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
SaveDB(options.todoFile);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
SetPage(int pageNumber)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmString tmp;
|
|
Packit |
b099d7 |
char buf[80];
|
|
Packit |
b099d7 |
Arg args[5];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
currentPage = pageNumber;
|
|
Packit |
b099d7 |
if (pageNumber <= maxpages) {
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNpageNumber, (pageNumber + 1));
|
|
Packit |
b099d7 |
XtSetValues(XtParent(textw), args, 1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (pages[pageNumber] != NULL) {
|
|
Packit |
b099d7 |
if (pages[pageNumber] -> page != NULL)
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNvalue, pages[pageNumber] -> page);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNvalue, "");
|
|
Packit |
b099d7 |
XtSetValues(textw, args, 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (pages[pageNumber] -> label != NULL)
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(pages[pageNumber] -> label);
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
sprintf(buf, "Page %d", pageNumber + 1);
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(buf);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNvalue, "");
|
|
Packit |
b099d7 |
XtSetValues(textw, args, 1);
|
|
Packit |
b099d7 |
sprintf(buf, "Page %d (Bad Page)", pageNumber + 1);
|
|
Packit |
b099d7 |
tmp = XmStringCreateLocalized(buf);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmTextSetTopCharacter(textw, pages[pageNumber] -> lasttoppos);
|
|
Packit |
b099d7 |
XmTextSetInsertionPosition(textw, pages[pageNumber] -> lastcursorpos);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNpageNumber, (pageNumber + 1));
|
|
Packit |
b099d7 |
XtSetArg(args[1], XmNlabelString, tmp);
|
|
Packit |
b099d7 |
XtSetValues(labelw, args, 2);
|
|
Packit |
b099d7 |
XmStringFree(tmp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
PageChange(Widget w, XtPointer i, XmNotebookCallbackStruct *cs)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (modified && pages[currentPage] != NULL) {
|
|
Packit |
b099d7 |
if (pages[currentPage] -> page != NULL)
|
|
Packit |
b099d7 |
XtFree(pages[currentPage] -> page);
|
|
Packit |
b099d7 |
pages[currentPage] -> page = XmTextGetString(textw);
|
|
Packit |
b099d7 |
pages[currentPage] -> lasttoppos = XmTextGetTopCharacter(textw);
|
|
Packit |
b099d7 |
pages[currentPage] -> lastcursorpos = XmTextGetInsertionPosition(textw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetPage(cs -> page_number - 1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
AdjustPages(int startpage, int ins)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ins is either +1 or -1 for insert or delete a page */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ins > 0) {
|
|
Packit |
b099d7 |
for(i = maxpages; i >= startpage; i--)
|
|
Packit |
b099d7 |
pages[i + 1] = pages[i];
|
|
Packit |
b099d7 |
maxpages += 1;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
for(i = startpage; i <= maxpages; i++)
|
|
Packit |
b099d7 |
pages[i] = pages[i + 1];
|
|
Packit |
b099d7 |
maxpages -= 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void FixPages() {
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Now scan the pages and fix the tabs */
|
|
Packit |
b099d7 |
for (i = 0; i <= maxpages; i++) {
|
|
Packit |
b099d7 |
XtSetArg(args[0], XmNpageNumber, (i + 1));
|
|
Packit |
b099d7 |
if (pages[i] -> majorPB != (Widget) 0)
|
|
Packit |
b099d7 |
XtSetValues(pages[i] -> majorPB, args, 1);
|
|
Packit |
b099d7 |
if (pages[i] -> minorPB != (Widget) 0)
|
|
Packit |
b099d7 |
XtSetValues(pages[i] -> minorPB, args, 1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* This function removes leading and trailing whitespace. It
|
|
Packit |
b099d7 |
deallocates the original string and returns a brand new string */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char*
|
|
Packit |
b099d7 |
Trim(char* str)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char *new;
|
|
Packit |
b099d7 |
int first, last;
|
|
Packit |
b099d7 |
int length;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (str == NULL) return(XtNewString(""));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
length = strlen(str);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for(first = 0; first < length && isspace(str[first]); first++);
|
|
Packit |
b099d7 |
for(last = length - 1; last > first && isspace(str[last]); last--);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (! isspace(str[last])) last++; /* Last needs to be adjusted */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (first == last) /* Empty */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
free(str);
|
|
Packit |
b099d7 |
return(strdup(""));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
new = XtMalloc(last - first + 1); /* Don't forget last 0 */
|
|
Packit |
b099d7 |
strncpy(new, &str[first], last - first);
|
|
Packit |
b099d7 |
new[last - first] = 0;
|
|
Packit |
b099d7 |
free(str);
|
|
Packit |
b099d7 |
return(new);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|