377 lines
12 KiB
C
377 lines
12 KiB
C
/* --------------------------------------------------------------------- *
|
|
* preferences.c *
|
|
* --------------------------------------------------------------------- *
|
|
* This file is part of the nebula irc client *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <Xm/Xm.h>
|
|
#include <Xm/Form.h>
|
|
#include <Xm/PushB.h>
|
|
#include <Xm/Label.h>
|
|
#include <Xm/TextF.h>
|
|
#include <Xm/Text.h>
|
|
#include <Xm/SelectioB.h>
|
|
#include <Xm/MessageB.h>
|
|
|
|
#include "main.h"
|
|
#include "preferences.h"
|
|
#include "network.h"
|
|
|
|
#ifndef XmFONTLIST_DEFAULT_TAG
|
|
#define XmFONTLIST_DEFAULT_TAG ""
|
|
#endif
|
|
|
|
#define FILE_BUFF_SIZE 1024
|
|
|
|
extern systemStatusRecord sysState;
|
|
extern XtAppContext nebulaIrcAppContext;
|
|
|
|
Widget startPref;
|
|
Widget startPrefDiag;
|
|
|
|
void okButtStartupCbk();
|
|
void helpButtStartupCbk();
|
|
void okButtPrefCbk();
|
|
void helpButtPrefCbk();
|
|
|
|
Widget nickTextForm;
|
|
Widget nameTextForm;
|
|
Widget serverTextForm;
|
|
Widget portTextForm;
|
|
|
|
void okButtStartupCbk()
|
|
{
|
|
char *nick;
|
|
char *name;
|
|
char *server;
|
|
char *port;
|
|
char theServer[MAX_SERVERNAME_LEN];
|
|
|
|
nick = XmTextGetString(nickTextForm);
|
|
name = XmTextGetString(nameTextForm);
|
|
server = XmTextGetString(serverTextForm);
|
|
port = XmTextGetString(portTextForm);
|
|
if (strlen(nick) > 0 && strlen(nick) <= MAX_NICK_LEN)
|
|
strcpy(sysState.myNick, nick);
|
|
else
|
|
strcpy(sysState.myNick, "");
|
|
if (strlen(name) > 0 && strlen(name) <= MAX_NAME_LEN)
|
|
strcpy(sysState.myName, name);
|
|
else
|
|
strcpy(sysState.myName, "noname");
|
|
if (strlen(server) > 0 &&strlen(server) <= MAX_SERVERNAME_LEN)
|
|
strcpy(theServer, server);
|
|
else
|
|
strcpy(theServer, "");
|
|
printf("port: %s, %d\n", port, atoi(port));
|
|
if (strlen(port) > 0 && strlen(port) <= 5)
|
|
{
|
|
sysState.port = atoi(port);
|
|
if (sysState.port <= 0)
|
|
sysState.port = 6666;
|
|
} else
|
|
sysState.port = 6666;
|
|
|
|
connectToServer(theServer, sysState.port);
|
|
}
|
|
|
|
void helpButtStartupCbk()
|
|
{
|
|
XmString theXmString, theXmString2;
|
|
Arg args[8];
|
|
int argcount;
|
|
Widget remove;
|
|
Widget startupPrefsHelpDlgBox;
|
|
|
|
argcount = 0;
|
|
theXmString = XmStringCreateLocalized("Help");
|
|
XtSetArg(args[argcount], XmNdialogTitle, theXmString); argcount++;
|
|
theXmString2 = XM_STRING_GEN_COMP("Set nickname and name you want to use.\n\nEnter the server you want to connect to.");
|
|
XtSetArg(args[argcount], XmNmessageString, theXmString2); argcount++;
|
|
XtSetArg(args[argcount], XmNautoUnmanage, True); argcount++;
|
|
startupPrefsHelpDlgBox = XmCreateInformationDialog(startPrefDiag, "help", args, argcount);
|
|
XmStringFree(theXmString);
|
|
XmStringFree(theXmString2);
|
|
|
|
/* Now get rid of the things we don't want */
|
|
remove = XmMessageBoxGetChild(startupPrefsHelpDlgBox, XmDIALOG_HELP_BUTTON);
|
|
XtUnmanageChild(remove);
|
|
remove = XmMessageBoxGetChild(startupPrefsHelpDlgBox, XmDIALOG_CANCEL_BUTTON);
|
|
XtUnmanageChild(remove);
|
|
XtManageChild(startupPrefsHelpDlgBox);
|
|
}
|
|
|
|
|
|
/* ---- set preferences ----- */
|
|
|
|
void setPreferences(Widget mainWin)
|
|
{
|
|
Widget prefForm;
|
|
Widget portLabel;
|
|
Widget child;
|
|
XmString labelString;
|
|
Arg args[4];
|
|
int argcount;
|
|
FILE *confFile;
|
|
char serverPortNum[6];
|
|
char *confFilePath;
|
|
char serverName[MAX_SERVERNAME_LEN];
|
|
char myNick[MAX_NICK_LEN];
|
|
char myName[MAX_NAME_LEN];
|
|
|
|
argcount = 0;
|
|
labelString = XmStringCreateLocalized("Startup Prefs");
|
|
XtSetArg(args[argcount], XmNdialogTitle, labelString); argcount++;
|
|
XtSetArg(args[argcount], XmNautoUnmanage, True); argcount++;
|
|
startPrefDiag = XmCreatePromptDialog(mainWin, "startup_prefs", args, argcount);
|
|
XmStringFree(labelString);
|
|
|
|
/* Now get rid of the things we don't want */
|
|
child = XmSelectionBoxGetChild(startPrefDiag, XmDIALOG_SELECTION_LABEL);
|
|
XtUnmanageChild(child);
|
|
child = XmSelectionBoxGetChild(startPrefDiag, XmDIALOG_TEXT);
|
|
XtUnmanageChild(child);
|
|
|
|
prefForm = XtVaCreateWidget("form", xmFormWidgetClass, startPrefDiag,
|
|
XmNfractionBase, 18, NULL);
|
|
|
|
labelString = XmStringCreateLocalized("Name:");
|
|
XtVaCreateManagedWidget("name_label",
|
|
xmLabelWidgetClass, prefForm,
|
|
XmNlabelString, labelString,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0,
|
|
NULL);
|
|
XmStringFree(labelString);
|
|
|
|
labelString = XmStringCreateLocalized("Nick:");
|
|
XtVaCreateManagedWidget("nick_label",
|
|
xmLabelWidgetClass, prefForm,
|
|
XmNlabelString, labelString,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0,
|
|
NULL);
|
|
XmStringFree(labelString);
|
|
|
|
labelString = XmStringCreateLocalized("Server:");
|
|
XtVaCreateManagedWidget("server_label",
|
|
xmLabelWidgetClass, prefForm,
|
|
XmNlabelString, labelString,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 0,
|
|
NULL);
|
|
XmStringFree(labelString);
|
|
|
|
|
|
nameTextForm = XtVaCreateManagedWidget("name_form",
|
|
xmTextFieldWidgetClass, prefForm,
|
|
XmNmaxLength, MAX_NAME_LEN,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 0,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 4,
|
|
XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 18,
|
|
NULL);
|
|
|
|
nickTextForm = XtVaCreateManagedWidget("nick_form",
|
|
xmTextFieldWidgetClass, prefForm,
|
|
XmNmaxLength, MAX_NICK_LEN,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 6,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 4,
|
|
XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 18,
|
|
NULL);
|
|
|
|
portTextForm = XtVaCreateManagedWidget("port_form",
|
|
xmTextFieldWidgetClass, prefForm,
|
|
XmNmaxLength, 5,
|
|
XmNcolumns, 5,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12,
|
|
XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 18,
|
|
NULL);
|
|
|
|
labelString = XmStringCreateLocalized("Port: ");
|
|
portLabel = XtVaCreateManagedWidget("port_label",
|
|
xmLabelWidgetClass, prefForm,
|
|
XmNlabelString, labelString,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12,
|
|
XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, portTextForm,
|
|
NULL);
|
|
XmStringFree(labelString);
|
|
|
|
serverTextForm = XtVaCreateManagedWidget("server_form",
|
|
xmTextFieldWidgetClass, prefForm,
|
|
XmNmaxLength, MAX_SERVERNAME_LEN,
|
|
XmNtopAttachment, XmATTACH_POSITION, XmNtopPosition, 12,
|
|
XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 4,
|
|
XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, portLabel,
|
|
NULL);
|
|
|
|
|
|
XtAddCallback(startPrefDiag, XmNokCallback, okButtPrefCbk, NULL);
|
|
XtAddCallback(startPrefDiag, XmNhelpCallback, helpButtPrefCbk, NULL);
|
|
|
|
XtManageChild(prefForm);
|
|
|
|
XtManageChild(startPrefDiag);
|
|
|
|
/* read configuration file */
|
|
if ((confFilePath = getPreferencesFilePath()))
|
|
{
|
|
confFile = fopen (confFilePath, "r");
|
|
if (confFile)
|
|
{
|
|
char buff[FILE_BUFF_SIZE];
|
|
char *pos;
|
|
|
|
fgets(buff, FILE_BUFF_SIZE, confFile);
|
|
if (buff[strlen(buff)-1] == '\n')
|
|
buff[strlen(buff)-1] = '\0';
|
|
if(!strncmp(buff, "DefaultNick", strlen("DefaultNick")))
|
|
if ((pos = strchr(buff, ' ')))
|
|
strcpy(myNick, pos+1);
|
|
fgets(buff, FILE_BUFF_SIZE, confFile);
|
|
if (buff[strlen(buff)-1] == '\n')
|
|
buff[strlen(buff)-1] = '\0';
|
|
if(!strncmp(buff, "DefaultName", strlen("DefaultName")))
|
|
if ((pos = strchr(buff, ' ')))
|
|
strcpy(myName, pos+1);
|
|
fgets(buff, FILE_BUFF_SIZE, confFile);
|
|
if (buff[strlen(buff)-1] == '\n')
|
|
buff[strlen(buff)-1] = '\0';
|
|
if(!strncmp(buff, "DefaultServer", strlen("DefaultServer")))
|
|
if ((pos = strchr(buff, ' ')))
|
|
strcpy(serverName, pos+1);
|
|
fgets(buff, FILE_BUFF_SIZE, confFile);
|
|
if (buff[strlen(buff)-1] == '\n')
|
|
buff[strlen(buff)-1] = '\0';
|
|
if(!strncmp(buff, "DefaultPortNum", strlen("DefaultPortNum")))
|
|
if ((pos = strchr(buff, ' ')))
|
|
strcpy(serverPortNum, pos+1);
|
|
fclose(confFile);
|
|
} else
|
|
{
|
|
printf("config file not found.\n");
|
|
strcpy(myNick, "");
|
|
strcpy(myName, "");
|
|
strcpy(serverName, "");
|
|
strcpy(serverPortNum, "");
|
|
}
|
|
free(confFilePath);
|
|
}
|
|
XmTextSetString(nickTextForm, myNick);
|
|
XmTextSetString(nameTextForm, myName);
|
|
XmTextSetString(serverTextForm, serverName);
|
|
XmTextSetString(portTextForm, serverPortNum);
|
|
}
|
|
|
|
void okButtPrefCbk()
|
|
{
|
|
char *nick;
|
|
char *name;
|
|
char *server;
|
|
char *port;
|
|
char theServer[MAX_SERVERNAME_LEN];
|
|
char myNick[MAX_NICK_LEN];
|
|
char myName[MAX_NAME_LEN];
|
|
char serverPort[6];
|
|
FILE *confFile;
|
|
char *confFilePath;
|
|
|
|
nick = XmTextGetString(nickTextForm);
|
|
name = XmTextGetString(nameTextForm);
|
|
server = XmTextGetString(serverTextForm);
|
|
port = XmTextGetString(portTextForm);
|
|
if (strlen(nick) > 0 && strlen(nick) <= MAX_NICK_LEN)
|
|
strcpy(myNick, nick);
|
|
else
|
|
strcpy(myNick, "");
|
|
if (strlen(name) > 0 && strlen(name) <= MAX_NAME_LEN)
|
|
strcpy(myName, name);
|
|
else
|
|
strcpy(myName, "noname");
|
|
if (strlen(server) > 0 &&strlen(server) <= MAX_SERVERNAME_LEN)
|
|
strcpy(theServer, server);
|
|
else
|
|
strcpy(theServer, "");
|
|
if (strlen(port) > 0 && strlen(port) <= 5)
|
|
strcpy(serverPort, port);
|
|
else
|
|
strcpy(serverPort, "");
|
|
|
|
/* write out configuration file */
|
|
if((confFilePath = getPreferencesFilePath()))
|
|
{
|
|
confFile = fopen (confFilePath, "w");
|
|
if (confFile)
|
|
{
|
|
fprintf(confFile, "DefaultNick: %s\n", myNick);
|
|
fprintf(confFile, "DefaultName: %s\n", myName);
|
|
fprintf(confFile, "DefaultServer: %s\n", theServer);
|
|
fprintf(confFile, "DefaultPortNum: %s\n", port);
|
|
fclose(confFile);
|
|
}
|
|
free(confFilePath);
|
|
}
|
|
}
|
|
|
|
void helpButtPrefCbk()
|
|
{
|
|
XmString theXmString, theXmString2;
|
|
Arg args[8];
|
|
int argcount;
|
|
Widget remove;
|
|
Widget startupPrefsHelpDlgBox;
|
|
|
|
argcount = 0;
|
|
theXmString = XmStringCreateLocalized("Help");
|
|
XtSetArg(args[argcount], XmNdialogTitle, theXmString); argcount++;
|
|
theXmString2 = XM_STRING_GEN_COMP("This panel sets the startup preferences.\n\
|
|
Ok will save them to the user\'s defaults.\n\n\
|
|
Set nickname and name you want to use.\nEnter the server you want to connect to.");
|
|
XtSetArg(args[argcount], XmNmessageString, theXmString2); argcount++;
|
|
XtSetArg(args[argcount], XmNautoUnmanage, True); argcount++;
|
|
startupPrefsHelpDlgBox = XmCreateInformationDialog(startPrefDiag, "help", args, argcount);
|
|
XmStringFree(theXmString);
|
|
XmStringFree(theXmString2);
|
|
|
|
/* Now get rid of the things we don't want */
|
|
remove = XmMessageBoxGetChild(startupPrefsHelpDlgBox, XmDIALOG_HELP_BUTTON);
|
|
XtUnmanageChild(remove);
|
|
remove = XmMessageBoxGetChild(startupPrefsHelpDlgBox, XmDIALOG_CANCEL_BUTTON);
|
|
XtUnmanageChild(remove);
|
|
XtManageChild(startupPrefsHelpDlgBox);
|
|
}
|
|
|
|
/*
|
|
* Return the full path to the user preferences file
|
|
* the caller is responsible of freeing the string if the call was successful
|
|
* failure will return a NULL pointer
|
|
*/
|
|
char* getPreferencesFilePath()
|
|
{
|
|
char *homeDirPath;
|
|
char *filePath;
|
|
|
|
filePath = NULL;
|
|
homeDirPath = getenv("HOME");
|
|
if (homeDirPath)
|
|
{
|
|
filePath = malloc ((strlen(homeDirPath) + strlen(PREF_FILE_NAME) + 1) * sizeof(char)); /* 1 is for the slash */
|
|
if (filePath == NULL)
|
|
{
|
|
perror("Could not allocate string buffer for config file Path");
|
|
} else
|
|
{
|
|
strcpy(filePath, homeDirPath);
|
|
strcat(filePath, "/");
|
|
strcat(filePath, PREF_FILE_NAME);
|
|
}
|
|
} else
|
|
{
|
|
perror("Could not determine home path of the user.");
|
|
}
|
|
return filePath;
|
|
}
|
|
#include "copyright.h"
|