summaryrefslogtreecommitdiff
path: root/setedit/settvuti/fileopen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'setedit/settvuti/fileopen.cc')
-rw-r--r--setedit/settvuti/fileopen.cc378
1 files changed, 0 insertions, 378 deletions
diff --git a/setedit/settvuti/fileopen.cc b/setedit/settvuti/fileopen.cc
deleted file mode 100644
index ae896fd..0000000
--- a/setedit/settvuti/fileopen.cc
+++ /dev/null
@@ -1,378 +0,0 @@
-/* Copyright (C) 1996-2004 by Salvador E. Tropea (SET),
- see copyrigh file for details */
-/**[txh]********************************************************************
-
- Description:
- That's an interesting way to make an Open dialog. The routine takes as
-parameter the title of the window ("Select a file", etc) and a char * with
-enough space for the filename containing the file mask.
- The interesting thing is function remembers the directory where the
-user opened the last file and changes the curdir to it before showing the
-list. After the user selected the file the routines changes back the curdir
-to the one used by the program. It avoids saving files in other directories,
-that's a very annoying feature of the RHIDE 1.4 methode.
- But to complet the thing it supports a history ID and a flag to set a mode
-where the dialog doesn't end when the user selects a file, instead the
-dialog sends a broadcast and if the message was received by someebody moves
-the selection to the next position. That's the same behavior used in the
-project window of the IDE and the editor but solved in a generic way (hey
-man! I'm loving these f*king messages ;-)
-
- Return:
- The button choosed by the user. cmCancel if aborted.
-
-***************************************************************************/
-#define Uses_unistd
-#define Uses_string
-#define Uses_getcwd
-#define Uses_chdir
-
-#define Uses_TFileDialog
-#define Uses_TFileList
-#define Uses_TProgram
-#define Uses_TDeskTop
-#define Uses_TEvent
-#define Uses_TButton
-#define Uses_TInputLine
-#define Uses_TChDirDialog
-#include <tv.h>
-
-#include <fileopen.h>
-
-class TFileDialogHome : public TFileDialog
-{
-public:
- TFileDialogHome(const char *aWildCard, const char *aTitle,
- const char *inputName, ushort aOptions, uchar histId,
- const char *aHomeDir, unsigned aFlags, char *aSelDir,
- TRect &dialogSize);
- virtual void handleEvent(TEvent& event);
- const char *homeDirectory;
-
- TInputLine *link;
- unsigned flags;
- char letHistoryPass;
- char *selDir;
- TRect *returnSize;
- static int (*ConfDiag)();
-};
-
-int (*TFileDialogHome::ConfDiag)()=0;
-
-static
-TButton *AddButton(TRect &r, const char *label, unsigned command)
-{
- TButton *bt=new TButton(r,label,command,bfNormal);
- bt->growMode=gfGrowLoX | gfGrowHiX;
- r.a.y+=2; r.b.y+=2;
- return bt;
-}
-
-TFileDialogHome::TFileDialogHome(const char *aWildCard, const char *aTitle,
- const char *inputName, ushort aOptions,
- uchar histId, const char *aHomeDir,
- unsigned aFlags, char *aSelDir,
- TRect &dialogSize) :
- TWindowInit(&TFileDialogHome::initFrame),
- TFileDialog(aWildCard,aTitle,inputName,aOptions,histId)
-{
- // ugly:
- TRect r(35,3,46,5);
-
- #define shift(flag) if (aOptions & flag) { r.a.y+=2; r.b.y+=2; }
- shift(fdOpenButton)
- shift(fdOKButton)
- shift(fdAddButton)
- shift(fdReplaceButton)
- shift(fdClearButton)
- shift(fdHelpButton)
- shift(fdSelectButton)
- r.a.y+=2; r.b.y+=2;
- #undef shift
-
- insert(AddButton(r,__("Ho~m~e"),cmHomeDir));
- insert(AddButton(r,__("~T~ree"),cmChangeDir));
- if (ConfDiag)
- insert(AddButton(r,__("O~p~tions"),cmFileOpenOptions));
- selectNext(False);
- link=(TInputLine *)current;
-
- homeDirectory=aHomeDir;
- flags=aFlags;
- letHistoryPass=0;
- selDir=aSelDir;
-
- if (dialogSize.a.x || dialogSize.b.x)
- {
- if (dialogSize.b.x-dialogSize.a.x<49 || dialogSize.b.y-dialogSize.a.y<20)
- // Avoid using a size smaller than 49x20
- dialogSize=getBounds();
- else
- {
- changeBounds(dialogSize);
- options&=~ofCentered;
- }
- }
- else
- dialogSize=getBounds();
- returnSize=&dialogSize;
-}
-
-
-char *ChooseDir(const char *startDir)
-{
- char buf[PATH_MAX],buf2[PATH_MAX];
-
- if (!getcwd(buf,PATH_MAX) || (startDir && !chdir(startDir)))
- return NULL;
-
- TChDirDialog *d=new TChDirDialog(cdNormal | cdHelpButton,0);
- d->helpCtx=hcGenChDir;
- unsigned ret=0;
- TView *p=TProgram::application->validView(d);
- if (p)
- {
- ret=TProgram::deskTop->execView(p);
- TObject::CLY_destroy(p);
- }
- char *retVal=NULL;
- if (ret==cmOK && getcwd(buf2,PATH_MAX))
- {
- if (strcmp(buf,buf2)!=0)
- {
- int l=strlen(buf2);
- if (buf2[l-1]!='/' && l<PATH_MAX-2)
- {
- buf2[l]='/';
- buf2[l+1]=0;
- }
- retVal=newStr(buf2);
- }
- }
- chdir(buf);
- return retVal;
-}
-
-void TFileDialogHome::handleEvent(TEvent& event)
-{
- char buf[PATH_MAX],buf2[PATH_MAX];
- char endIt=0,cancelIt=0,advance=1;
- char *newDir;
-
- if (event.what==evBroadcast)
- {
- if ((event.message.command==cmReleasedFocus && event.message.infoPtr==link)
- || (event.message.command==cmRecordHistory && !letHistoryPass))
- {
- clearEvent(event);
- return;
- }
- if (event.message.command==cmFileDoubleClicked)
- {
- event.what=evCommand;
- event.message.command=cmFileOpen;
- advance=0;
- }
- }
- if (event.what==evCommand)
- switch(event.message.command)
- {
- case cmHomeDir:
- DeleteArray(directory);
- directory=newStr(homeDirectory);
- fileList->readDirectory(homeDirectory,wildCard);
- clearEvent(event);
- return;
- case cmChangeDir:
- newDir=ChooseDir(directory);
- if (newDir)
- {
- DeleteArray(directory);
- directory=newDir;
- fileList->readDirectory(newDir,wildCard);
- }
- clearEvent(event);
- return;
- case cmFileOpen:
- case cmFileReplace:
- case cmFileClear:
- case cmFileSelect:
- if (valid(event.message.command))
- { // Valid checks the name and change the directory if that's the case
- if (flags & fdMultipleSel)
- {// Copy the directory to remmember it
- strcpy(selDir,directory);
- getFileName(buf);
- if (message(TProgram::deskTop,evBroadcast,
- cmFileDialogFileSelected,buf))
- {
- if (advance)
- {
- int foc=fileList->focused+1;
- if (foc<fileList->range)
- fileList->focusItemNum(foc);
- }
- }
- else
- endIt=1;
- }
- else
- endIt=1;
- }
- if (endIt)
- {// Copy the directory to remmember it
- strcpy(selDir,directory);
- endModal(event.message.command);
- link->getData(buf);
- getFileName(buf2);
- link->setData(buf2);
- letHistoryPass=1;
- message(this,evBroadcast,cmRecordHistory,0);
- letHistoryPass=0;
- if (strchr(buf,'/')==0)
- {// If the user entered something that isn't here
- // don't add this point
- strcpy(buf2,directory);
- strcat(buf2,wildCard);
- link->setData(buf2);
- event.what=evBroadcast;
- event.message.command=cmRecordHistory;
- }
- else
- {
- clearEvent(event);
- return;
- }
- }
- else
- {
- clearEvent(event);
- return;
- }
- break;
- // If the user aborts also add it to the history, just in case s/he wants to
- // reuse it.
- case cmCancel:
- endModal(event.message.command);
- link->getData(buf);
- strcpy(buf2,directory);
- strcat(buf2,wildCard);
- link->setData(buf2);
- event.what=evBroadcast;
- event.message.command=cmRecordHistory;
- cancelIt=1;
- break;
- // Configuration dialog
- case cmFileOpenOptions:
- if (ConfDiag())
- fileList->readDirectory(directory,wildCard);
- clearEvent(event);
- return;
- /*case cmeZoom:
- event.message.command=cmZoom;
- TDialog::handleEvent(event);
- break;*/
- }
- TDialog::handleEvent(event);
- if (endIt)
- link->setData(buf);
- // Store the current size in the rectangle provided by the caller
- if (endIt || cancelIt)
- *returnSize=getBounds();
-}
-
-static char *LastMaskUsed=0;
-
-int GenericFileDialog(const char *title, char *file, char *mask, int histID, int buttons,
- char *dir, unsigned flags, int ctx, TRect &dialogSize)
-{
- char curDir[PATH_MAX];
- char dirChanged=0;
-
- getcwd(curDir,PATH_MAX);
- strcat(curDir,"/");
- if (dir[0])
- {
- chdir(dir);
- dirChanged=1;
- }
- int fgButtons=buttons | fdHelpButton;
- // If that's a wildcard the directory will be scanned by setdata, so avoid reading
- // 2 directories.
- if ((!mask || !mask[0]) && CLY_IsWild(file))
- fgButtons|=fdNoLoadDir;
- TFileDialogHome *d=new TFileDialogHome(mask,title,__("~N~ame"),fgButtons,histID,curDir,
- flags,dir,dialogSize);
- d->helpCtx=ctx;
-
- int result=cmCancel;
- TView *p=TProgram::application->validView(d);
- if (p)
- {
- if (!mask || !mask[0])
- p->setData(file);
-
- result=TProgram::deskTop->execView(p);
- if (result!=cmCancel)
- p->getData(file);
- delete[] LastMaskUsed;
- LastMaskUsed=newStr(d->wildCard);
-
- TObject::CLY_destroy(p);
- }
-
- if (dirChanged)
- chdir(curDir);
- return result;
-}
-
-char *GetLastMaskUsed()
-{
- char *ret=LastMaskUsed;
- LastMaskUsed=0;
- return ret;
-}
-
-void SetConfigDialogFunc(int (*func)())
-{
- TFileDialogHome::ConfDiag=func;
-}
-/*
-static char *dirForOpen=0;
-static char *dirForSave=0;
-
-int FileOpenDialog(char *title, char *file, int historyID, unsigned flags)
-{
- if (!dirForOpen)
- {
- dirForOpen=new char[PATH_MAX];
- getcwd(dirForOpen,PATH_MAX);
- }
- return GenericFileDialog(title,file,file,historyID,fdOpenButton,dirForOpen,flags,hcGenOpenFile);
-}
-
-int FileSaveDialog(char *title, char *file, int historyID, unsigned flags)
-{
- if (!dirForSave)
- {
- dirForSave=new char[PATH_MAX];
- getcwd(dirForSave,PATH_MAX);
- }
- return GenericFileDialog(title,file,file,historyID,fdOKButton,dirForSave,flags,hcGenOpenFile);
-}
-
-void SetDirForOpen(char *s)
-{
- if (dirForOpen)
- delete dirForOpen;
- dirForOpen=s;
-}
-
-void SetDirForSave(char *s)
-{
- if (dirForSave)
- delete dirForSave;
- dirForSave=s;
-}
-*/
-