home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
Borland
/
Cplus45
/
BC45
/
APPLAUNC.PAK
/
DIALOGS.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-29
|
9KB
|
326 lines
//----------------------------------------------------------------------------
// ObjectWindows - (C) Copyright 1991, 1993 by Borland International
//----------------------------------------------------------------------------
#include <owl\owlpch.h>
#include <owl\inputdia.h>
#include <dos.h>
#include <dir.h>
#include "dialogs.h"
DEFINE_RESPONSE_TABLE1(TAppPropertiesDialog, TDialog)
EV_CHILD_NOTIFY(IDOK, BN_CLICKED, CmOk),
EV_CHILD_NOTIFY(CM_BROWSE_PROG, BN_CLICKED, CmBrowseProg),
EV_CHILD_NOTIFY(CM_BROWSE_ICON, BN_CLICKED, CmBrowseIcon),
END_RESPONSE_TABLE;
//
// Constructor. Create controls for later manipulation. Setup file open
// data. Store TAppProperties record to be filled in later.
//
TAppPropertiesDialog::TAppPropertiesDialog(TWindow* parent, int resId,
TAppPropertiesData& data)
: TDialog(parent, resId), AppProperties(data)
{
ProgramPath = new TEdit(this, ID_PROGRAM_PATH, ProgramPathLen);
ProgramArgs = new TEdit(this, ID_PROGRAM_ARGS, ProgramArgsLen);
IconPath = new TEdit(this, ID_ICON_PATH, IconPathLen);
PromptForInput = new TCheckBox(this, ID_PROMPT_FOR_INPUT);
StartupStyles = new TGroupBox(this, ID_STARTUP_GROUPBOX);
RunNormal = new TRadioButton(this, ID_RUN_NORMAL, StartupStyles);
RunMinimized = new TRadioButton(this, ID_RUN_MINIMIZED, StartupStyles);
RunMaximized = new TRadioButton(this, ID_RUN_MAXIMIZED, StartupStyles);
FileData.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_CREATEPROMPT|
OFN_OVERWRITEPROMPT;
FileData.SetFilter("AllFiles (*.*)|*.*|");
}
//
// SetupWindow(). Initialize dialog fields with given fields from
// TAppProperties record.
//
void
TAppPropertiesDialog::SetupWindow()
{
TDialog::SetupWindow();
// Initialize dialog fields with data from AppProperties record.
//
ProgramPath->Insert(AppProperties.AppRec->ProgramPath.c_str());
ProgramArgs->Insert(AppProperties.AppRec->ProgramArgs.c_str());
IconPath->Insert(AppProperties.AppRec->IconPath.c_str());
if (AppProperties.AppRec->PromptForInput)
PromptForInput->Check();
switch (AppProperties.AppRec->StartupStyle) {
case 1:
RunNormal->Check();
break;
case 2:
RunMinimized->Check();
break;
case 3:
RunMaximized->Check();
default:
break;
};
}
//
// CmOk(). Update TAppProperties record with any fields that the user changed.
// Record the following information in the TAppProperties record:
// . Does the Bitmap for the button need to be updated.
//
void
TAppPropertiesDialog::CmOk()
{
char* buf = new char[ProgramArgsLen*2];
ProgramPath->GetLine(buf, ProgramPathLen, 0);
if (AppProperties.AppRec->ProgramPath != buf)
AppProperties.ChangeBitmap = TRUE;
AppProperties.AppRec->ProgramPath = buf;
ProgramArgs->GetLine(buf, ProgramArgsLen, 0);
AppProperties.AppRec->ProgramArgs = buf;
IconPath->GetLine(buf, IconPathLen, 0);
if (AppProperties.AppRec->IconPath != buf)
AppProperties.ChangeBitmap = TRUE;
AppProperties.AppRec->IconPath = buf;
AppProperties.AppRec->PromptForInput = PromptForInput->GetCheck();
if (RunNormal->GetCheck())
AppProperties.AppRec->StartupStyle = 1;
else if (RunMinimized->GetCheck())
AppProperties.AppRec->StartupStyle = 2;
else
AppProperties.AppRec->StartupStyle = 3;
delete buf;
TDialog::CmOk();
}
//
// CmBrowseProg(). Bring up a file open dialog so the user can choose the
// program path to use for this app.
//
void
TAppPropertiesDialog::CmBrowseProg()
{
string s;
if (GetFilePath(s)) {
ProgramPath->DeleteLine(0);
ProgramPath->Insert(s.c_str());
}
}
//
// CmBrowseIcon(). Bring up a file open dialog so the user can enter the path
// to the icon file to use for this app.
//
void
TAppPropertiesDialog::CmBrowseIcon()
{
string s;
if (GetFilePath(s)) {
IconPath->DeleteLine(0);
IconPath->Insert(s.c_str());
}
}
//
// GetFilePath(). Bring up file open dialog. If 'OK' button was pressed
// set 'path' parameter to path user has entered.
//
int
TAppPropertiesDialog::GetFilePath(string& path)
{
*FileData.FileName = 0;
if (TFileOpenDialog(this, FileData).Execute() == IDOK) {
path = FileData.FileName;
return 1;
}
return 0;
}
//////////////////////////////////////////////////////////////////////
DEFINE_RESPONSE_TABLE1(TAddAppDialog, TDialog)
EV_CHILD_NOTIFY(CM_BROWSE_PROG, BN_CLICKED, CmBrowseProg),
END_RESPONSE_TABLE;
//
// Constructor. Create interface objects and initialize file open record.
//
TAddAppDialog::TAddAppDialog(TWindow* parent, int resId, string& progPathStr,
int& loc, StringList& pathStrs)
: TDialog(parent, resId), ProgPathStr(progPathStr), Loc(loc),
PathStrs(pathStrs)
{
ProgramPath = new TEdit(this, ID_PROGRAM_PATH, ProgramPathLen);
Paths = new TComboBox(this, ID_PATHS, ProgramPathLen);
FileData.Flags = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_CREATEPROMPT|
OFN_OVERWRITEPROMPT;
FileData.SetFilter("AllFiles (*.*)|*.*|");
*FileData.FileName = 0;
}
//
// CanClose().
//
BOOL
TAddAppDialog::CanClose()
{
char path[MAXPATH];
string modPath;
Loc = Paths->GetSelIndex();
ProgramPath->GetLine(path,MAXPATH,0);
modPath = path;
modPath.strip(string::Both);
if (modPath.is_null() || modPath[0] == ' ') {
MessageBox("Program Path field can't be left blank", "Error", MB_OK);
return FALSE;
}
ProgPathStr = modPath;
PathStrs.AddAt(modPath, Loc);
return TRUE;
}
//
// SetupWindow(). Setup default location for new app as -1 (append).
//
void
TAddAppDialog::SetupWindow()
{
TDialog::SetupWindow();
unsigned stop = PathStrs.Count();
for (unsigned i = 0; i < stop ;i++ )
Paths->InsertString(PathStrs[i].c_str(), -1);
Paths->InsertString("<Append>", -1);
Paths->SetSelIndex(PathStrs.Count());
}
//
// CmBrowseProg(). Bring up a file open dialog so the user can choose the
// program path to use for this app.
//
void
TAddAppDialog::CmBrowseProg()
{
*FileData.FileName = 0;
if (TFileOpenDialog(this, FileData).Execute() == IDOK) {
ProgramPath->DeleteLine(0);
ProgramPath->Insert(FileData.FileName);
}
}
//////////////////////////////////////////////////////////////////////
DEFINE_RESPONSE_TABLE1(TPickListDialog, TDialog)
EV_CHILD_NOTIFY(IDOK, BN_CLICKED, CmOk),
END_RESPONSE_TABLE;
//
// Constructor. Create interface object for listbox.
//
TPickListDialog::TPickListDialog(TWindow* parent, int resId,
StringList& strings,
NumberList& selections)
: TDialog(parent, resId), Strings(strings), Selections(selections)
{
PickList = new TListBox(this, ID_PICK_LIST);
}
//
// SetupWindow(). Load listbox with the paths of all the apps in AppLauncher.
//
void
TPickListDialog::SetupWindow()
{
TDialog::SetupWindow();
unsigned stop = Strings.Count();
for (unsigned i = 0; i < stop; i++ )
PickList->AddString(Strings[i].c_str());
}
//
// CmOk(). Record selections form pick list that user for return from dialog.
//
void
TPickListDialog::CmOk()
{
int* selectionsFromPickList = new int[Strings.Count()+1];
int nitems = PickList->GetSelIndexes(selectionsFromPickList, Strings.Count());
for (unsigned i = 0; i < nitems; i++ )
Selections.Add(selectionsFromPickList[i]);
delete selectionsFromPickList;
TDialog::CmOk();
}
//////////////////////////////////////////////////////////////////////
DEFINE_RESPONSE_TABLE1(TConfigDialog, TDialog)
EV_CHILD_NOTIFY(IDOK, BN_CLICKED, CmOk),
EV_COMMAND(CM_SAVENOW, CmSaveNow),
END_RESPONSE_TABLE;
//
// Constructor. Create interface objects for dialog fields and save
// configuration record for update later.
//
TConfigDialog::TConfigDialog(TWindow* parent, int resId, TConfigRec& rec)
: TDialog(parent, resId), ConfigRec(rec)
{
OrientationGroupBox = new TGroupBox(this, ID_ORIENTATION);
Vertical = new TRadioButton(this, ID_VERTICAL, OrientationGroupBox);
Horizontal = new TRadioButton(this, ID_HORIZONTAL, OrientationGroupBox);
SaveOnExit = new TCheckBox(this, ID_SAVE_ON_EXIT);
ConfirmOnRemove = new TCheckBox(this, ID_CONFIRM_ON_REMOVE);
}
//
// SetupWindow(). Initialize dialog fields with current AppLauncher setup.
//
void
TConfigDialog::SetupWindow()
{
TDialog::SetupWindow();
Vertical->SetCheck(ConfigRec.Orientation ? BF_UNCHECKED : BF_CHECKED);
Horizontal->SetCheck(ConfigRec.Orientation ? BF_CHECKED : BF_UNCHECKED);
SaveOnExit->SetCheck(ConfigRec.SaveOnExit ? BF_CHECKED : BF_UNCHECKED);
ConfirmOnRemove->SetCheck(ConfigRec.ConfirmOnRemove ? BF_CHECKED : BF_UNCHECKED);
}
//
// CmOk(). Record any configuration changes in configuration record.
//
void
TConfigDialog::CmOk()
{
ConfigRec.Orientation = Vertical->GetCheck() == BF_CHECKED ? 0 : 1;
ConfigRec.SaveOnExit = SaveOnExit->GetCheck() == BF_CHECKED ? 1 : 0;
ConfigRec.ConfirmOnRemove = ConfirmOnRemove->GetCheck() == BF_CHECKED ? 1 : 0;
TDialog::CmOk();
}
//
// CmSaveNow(). Send message to parent that the application settings should
// be saved to INI file now.
//
void
TConfigDialog::CmSaveNow()
{
ConfigRec.SaveNow = 1;
CmOk();
}