merged 2.2 branch

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Bryan Petty
2000-07-15 19:51:35 +00:00
parent 8a693e6e04
commit f6bcfd974e
1835 changed files with 237729 additions and 67990 deletions

View File

@@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////////
// Name: filedlg.cpp
// Name: src/msw/filedlg.cpp
// Purpose: wxFileDialog
// Author: Julian Smart
// Modified by:
@@ -9,13 +9,20 @@
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "filedlg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#include "wx/msw/private.h"
#ifdef __BORLANDC__
#pragma hdrstop
@@ -28,10 +35,11 @@
#include "wx/filedlg.h"
#include "wx/intl.h"
#include "wx/log.h"
// #include "wx/msw/private.h"
#include "wx/app.h"
#endif
#include "wx/msw/private.h"
#if !defined(__WIN32__) || defined(__SALFORDC__) || defined(__WXWINE__)
#include <commdlg.h>
#endif
@@ -42,8 +50,34 @@
#include "wx/tokenzr.h"
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
#ifdef __WIN32__
# define wxMAXPATH 4096
#else
# define wxMAXPATH 1024
#endif
# define wxMAXFILE 1024
# define wxMAXEXT 5
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
IMPLEMENT_CLASS(wxFileDialog, wxDialog)
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
wxString wxFileSelector(const wxChar *title,
const wxChar *defaultDir,
const wxChar *defaultFileName,
@@ -126,26 +160,6 @@ wxString wxFileSelector(const wxChar *title,
return wxGetEmptyString();
}
# if __BORLANDC__
# include <dir.h> // for MAXPATH etc. ( Borland 3.1 )
# endif
# ifndef MAXPATH
# define MAXPATH 400
# endif
# ifndef MAXDRIVE
# define MAXDRIVE 3
# endif
# ifndef MAXFILE
# define MAXFILE 9
# endif
# ifndef MAXEXT
# define MAXEXT 5
# endif
wxString wxFileSelectorEx(const wxChar *title,
const wxChar *defaultDir,
@@ -206,9 +220,11 @@ int wxFileDialog::ShowModal()
{
HWND hWnd = 0;
if (m_parent) hWnd = (HWND) m_parent->GetHWND();
if (!hWnd && wxTheApp->GetTopWindow())
hWnd = (HWND) wxTheApp->GetTopWindow()->GetHWND();
static wxChar fileNameBuffer [ MAXPATH ]; // the file-name
wxChar titleBuffer [ MAXFILE+1+MAXEXT ]; // the file-name, without path
static wxChar fileNameBuffer [ wxMAXPATH ]; // the file-name
wxChar titleBuffer [ wxMAXFILE+1+wxMAXEXT ]; // the file-name, without path
*fileNameBuffer = wxT('\0');
*titleBuffer = wxT('\0');
@@ -226,22 +242,23 @@ int wxFileDialog::ShowModal()
OFN_ALLOWMULTISELECT;
OPENFILENAME of;
memset(&of, 0, sizeof(OPENFILENAME));
of.lpstrCustomFilter = NULL; // system should not save custom filter
of.nMaxCustFilter = 0L;
of.nFileOffset = 0; // 0-based pointer to filname in lpstFile
of.nFileExtension = 0; // 0-based pointer to extension in lpstrFile
of.lpstrDefExt = NULL; // no default extension
wxZeroMemory(of);
// the OPENFILENAME struct has been extended in newer version of
// comcdlg32.dll, but as we don't use the extended fields anyhow, set
// the struct size to the old value - otherwise, the programs compiled
// with new headers will not work with the old libraries
#if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
of.lStructSize = sizeof(OPENFILENAME) -
(sizeof(void *) + 2*sizeof(DWORD));
#else // old headers
of.lStructSize = sizeof(OPENFILENAME);
#endif
of.hwndOwner = hWnd;
of.lpstrTitle = WXSTRINGCAST m_message;
of.lpstrFileTitle = titleBuffer;
of.nMaxFileTitle = MAXFILE + 1 + MAXEXT; // Windows 3.0 and 3.1
of.nMaxFileTitle = wxMAXFILE + 1 + wxMAXEXT; // Windows 3.0 and 3.1
// Convert forward slashes to backslashes (file selector doesn't like
// forward slashes)
@@ -298,17 +315,39 @@ int wxFileDialog::ShowModal()
//=== Setting defaultFileName >>=========================================
wxStrncpy( fileNameBuffer, (const wxChar *)m_fileName, MAXPATH-1 );
fileNameBuffer[ MAXPATH-1 ] = wxT('\0');
wxStrncpy( fileNameBuffer, (const wxChar *)m_fileName, wxMAXPATH-1 );
fileNameBuffer[ wxMAXPATH-1 ] = wxT('\0');
of.lpstrFile = fileNameBuffer; // holds returned filename
of.nMaxFile = MAXPATH;
of.nMaxFile = wxMAXPATH;
//== Execute FileDialog >>=================================================
bool success = (m_dialogStyle & wxSAVE) ? (GetSaveFileName(&of) != 0)
: (GetOpenFileName(&of) != 0);
DWORD errCode = CommDlgExtendedError();
#ifdef __WIN32__
if (!success && (errCode == CDERR_STRUCTSIZE))
{
// The struct size has changed so try a smaller or bigger size
int oldStructSize = of.lStructSize;
of.lStructSize = oldStructSize - (sizeof(void *) + 2*sizeof(DWORD));
success = (m_dialogStyle & wxSAVE) ? (GetSaveFileName(&of) != 0)
: (GetOpenFileName(&of) != 0);
errCode = CommDlgExtendedError();
if (!success && (errCode == CDERR_STRUCTSIZE))
{
of.lStructSize = oldStructSize + (sizeof(void *) + 2*sizeof(DWORD));
success = (m_dialogStyle & wxSAVE) ? (GetSaveFileName(&of) != 0)
: (GetOpenFileName(&of) != 0);
}
}
#endif
if ( success )
{
m_fileNames.Empty();
@@ -379,8 +418,8 @@ int wxFileDialog::ShowModal()
m_fileName = wxString(fileNameBuffer) + extension;
int len = wxStrlen( fileNameBuffer );
wxStrncpy( fileNameBuffer + len, extension, MAXPATH - len );
fileNameBuffer[ MAXPATH -1 ] = wxT('\0');
wxStrncpy( fileNameBuffer + len, extension, wxMAXPATH - len );
fileNameBuffer[ wxMAXPATH -1 ] = wxT('\0');
}
}