minor changes a bit everywhere + a small wxLog change (Enable()/IsEnabled()

added) + wxTimer member vars are made protected again (but a friend decl
added for the callback)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@831 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1998-10-14 23:53:24 +00:00
parent 2d0a075d90
commit c085e33398
22 changed files with 457 additions and 543 deletions

View File

@@ -75,12 +75,19 @@ public:
// ctor
wxLog();
// these functions allow to completely disable all log messages
// is logging disabled now?
static bool IsEnabled() { return ms_doLog; }
// change the flag state, return the previous one
static bool EnableLogging(bool doIt = TRUE)
{ bool doLogOld = ms_doLog; ms_doLog = doIt; return doLogOld; }
// sink function
static void OnLog(wxLogLevel level, const char *szString)
{
if ( IsEnabled() ) {
wxLog *pLogger = GetActiveTarget();
if ( pLogger )
{
pLogger->DoLog(level, szString);
}
}
@@ -99,10 +106,8 @@ public:
// get current log target, will call wxApp::CreateLogTarget() to create one
// if none exists
static wxLog *GetActiveTarget();
// change log target, pLogger = NULL disables logging. if bNoFlashOld is true,
// the old log target isn't flashed which might lead to loss of messages!
// returns the previous log target
static wxLog *SetActiveTarget(wxLog *pLogger, bool bNoFlashOld = FALSE);
// change log target, pLogger may be NULL
static wxLog *SetActiveTarget(wxLog *pLogger);
// functions controlling the default wxLog behaviour
// verbose mode is activated by standard command-line '-verbose' option
@@ -151,6 +156,7 @@ private:
// static variables
// ----------------
static wxLog *ms_pLogger; // currently active log sink
static bool ms_doLog; // FALSE => all logging disabled
static bool ms_bAutoCreate; // automatically create new log targets?
static wxTraceMask ms_ulTraceMask; // controls wxLogTrace behaviour
};
@@ -293,12 +299,11 @@ void Foo() {
class WXDLLEXPORT wxLogNull
{
public:
// ctor saves old log target, dtor restores it
wxLogNull() { m_pPrevLogger = wxLog::SetActiveTarget((wxLog *)NULL, TRUE); }
~wxLogNull() { (void)wxLog::SetActiveTarget(m_pPrevLogger); }
wxLogNull() { m_flagOld = wxLog::EnableLogging(FALSE); }
~wxLogNull() { (void)wxLog::EnableLogging(m_flagOld); }
private:
wxLog *m_pPrevLogger; // old log target
bool m_flagOld; // the previous value of the wxLog::ms_doLog
};
// ============================================================================

View File

@@ -57,7 +57,7 @@ class WXDLLEXPORT wxApp: public wxEvtHandler
void OnEndSession(wxCloseEvent& event);
void OnQueryEndSession(wxCloseEvent& event);
// Generic
// Generic
virtual bool OnInit() { return FALSE; };
// No specific tasks to do here.
@@ -67,6 +67,10 @@ class WXDLLEXPORT wxApp: public wxEvtHandler
virtual int OnRun() { return MainLoop(); };
virtual int OnExit() { return 0; }
// called when a fatal exception occurs, this function should take care not
// to do anything which might provoke a nested exception!
virtual void OnFatalException() { }
inline void SetPrintMode(int mode) { m_printMode = mode; }
inline int GetPrintMode() const { return m_printMode; }

View File

@@ -151,8 +151,15 @@ void WXDLLEXPORT wxAddControlHandle(WXHWND hWnd, wxWindow *item);
// Safely get the window text (i.e. without using fixed size buffer)
extern wxString WXDLLEXPORT wxGetWindowText(WXHWND hWnd);
// Does this window style specify any border?
inline bool WXDLLEXPORT wxStyleHasBorder(long style)
{
return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER |
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
#if !defined(__WIN32__) && !defined(WS_EX_CLIENTEDGE)
#define WS_EX_CLIENTEDGE 0
#define WS_EX_CLIENTEDGE 0
#endif
#endif

View File

@@ -210,33 +210,5 @@ private:
MUTABLE long m_dwLastError; // last error (0 if none)
};
// ----------------------------------------------------------------------------
// high level functions working with the registry
// ----------------------------------------------------------------------------
// file extensions and MIME types
// ------------------------------
// Look for and return the extension (with leading '.') which corresponds to
// MIME type strMimeType in pExt.
//
// Return value: true if MIME type was found, false otherwise
bool GetExtensionFromMimeType(wxString *pExt, const wxString& strMimeType);
// Look for MIME type of the given extension, return TRUE if found.
bool GetMimeTypeFromExtension(wxString *pMimeType, const wxString& strExt);
// Get file type from extension (it's not the same thing: for example, for
// the extension .txt the default file type is txtfile), return FALSE if not
// found.
bool GetFileTypeFromExtension(wxString *pFileType, const wxString& strExt);
// Get the default icon from file type
class wxIcon;
bool GetFileTypeIcon(wxIcon *pIcon, const wxString& strFileType);
// Get the description of files of this type
bool GetFileTypeDescription(wxString *pDesc, const wxString& strFileType);
#endif //_REGISTRY_H

View File

@@ -79,7 +79,7 @@
#define wxUSE_SCROLLBAR 1
// Define 1 to compile contributed wxScrollBar class
#define wxUSE_XPM_IN_X 1
#define wxUSE_XPM_IN_MSW 0
#define wxUSE_XPM_IN_MSW 1
// Define 1 to support the XPM package in wxBitmap,
// separated by platform. If 1, you must link in
// the XPM library to your applications.
@@ -90,7 +90,7 @@
#define wxUSE_IMAGE_LOADING_IN_MSW 1
// Use dynamic DIB loading/saving code in utils/dib under MSW.
#define wxUSE_RESOURCE_LOADING_IN_MSW 0
#define wxUSE_RESOURCE_LOADING_IN_MSW 1
// Use dynamic icon/cursor loading/saving code
// under MSW.
#define wxUSE_WX_RESOURCES 1
@@ -114,12 +114,12 @@
#define wxUSE_DYNAMIC_CLASSES 1
// If 1, enables provision of run-time type information.
// NOW MANDATORY: don't change.
#define wxUSE_MEMORY_TRACING 1
#define wxUSE_MEMORY_TRACING 0
// If 1, enables debugging versions of wxObject::new and
// wxObject::delete *IF* WXDEBUG is also defined.
// WARNING: this code may not work with all architectures, especially
// if alignment is an issue.
#define wxUSE_DEBUG_CONTEXT 1
#define wxUSE_DEBUG_CONTEXT 0
// If 1, enables wxDebugContext, for
// writing error messages to file, etc.
// If WXDEBUG is not defined, will still use
@@ -128,7 +128,7 @@
// since you may well need to output
// an error log in a production
// version (or non-debugging beta)
#define wxUSE_GLOBAL_MEMORY_OPERATORS 1
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
// In debug mode, cause new and delete to be redefined globally.
// If this causes problems (e.g. link errors), set this to 0.
@@ -139,7 +139,7 @@
#define wxUSE_C_MAIN 0
// Set to 1 to use main.c instead of main.cpp (UNIX only)
#define wxUSE_ODBC 1
#define wxUSE_ODBC 0
// Define 1 to use ODBC classes
#define wxUSE_IOSTREAMH 1
@@ -199,7 +199,7 @@
#define wxUSE_PENWINDOWS 0
// Set to 1 to use PenWindows
#define wxUSE_OWNER_DRAWN 0
#define wxUSE_OWNER_DRAWN 1
// Owner-drawn menus and listboxes
#define wxUSE_NATIVE_STATUSBAR 1

View File

@@ -20,6 +20,8 @@
class WXDLLEXPORT wxTimer : public wxObject
{
friend void wxProcessTimer(wxTimer& timer);
public:
wxTimer();
~wxTimer();
@@ -34,7 +36,7 @@ public:
int Interval() const { return milli; };
bool OneShot() const { return oneShot; }
public:
protected:
bool oneShot ;
int milli ;
int lastMilli ;

View File

@@ -96,9 +96,9 @@ WXCURSOR_BLANK CURSOR DISCARDABLE "wx/msw/blank.cur"
// Default Icons
//
wxDEFAULT_FRAME ICON "wx/msw/std.ico"
wxDEFAULT_MDIPARENTFRAME ICON "wx/msw/mdi.ico"
wxDEFAULT_MDICHILDFRAME ICON "wx/msw/child.ico"
//wxDEFAULT_FRAME ICON "wx/msw/std.ico"
//wxDEFAULT_MDIPARENTFRAME ICON "wx/msw/mdi.ico"
//wxDEFAULT_MDICHILDFRAME ICON "wx/msw/child.ico"
//////////////////////////////////////////////////////////////////////////////
//

View File

@@ -258,6 +258,8 @@ wxLog *wxLog::GetActiveTarget()
ms_pLogger = wxTheApp->CreateLogTarget();
#endif
s_bInGetActiveTarget = FALSE;
// do nothing if it fails - what can we do?
}
}
@@ -265,15 +267,17 @@ wxLog *wxLog::GetActiveTarget()
return ms_pLogger;
}
wxLog *wxLog::SetActiveTarget(wxLog *pLogger, bool bNoFlashOld)
wxLog *wxLog::SetActiveTarget(wxLog *pLogger)
{
// flush the old messages before changing
if ( (ms_pLogger != NULL) && !bNoFlashOld ) {
if ( ms_pLogger != NULL ) {
// flush the old messages before changing because otherwise they might
// get lost later if this target is not restored
ms_pLogger->Flush();
}
wxLog *pOldLogger = ms_pLogger;
ms_pLogger = pLogger;
return pOldLogger;
}
@@ -779,8 +783,7 @@ void wxLogWindow::DoLogString(const char *szString)
pText->WriteText(szString);
pText->WriteText("\n"); // "\n" ok here (_not_ "\r\n")
// ensure that the line can be seen
// @@@ TODO
// TODO ensure that the line can be seen
}
wxFrame *wxLogWindow::GetFrame() const
@@ -794,11 +797,13 @@ void wxLogWindow::OnFrameCreate(wxFrame *WXUNUSED(frame))
void wxLogWindow::OnFrameDelete(wxFrame *WXUNUSED(frame))
{
m_pLogFrame = (wxLogFrame *) NULL;
m_pLogFrame = (wxLogFrame *)NULL;
}
wxLogWindow::~wxLogWindow()
{
delete m_pOldLog;
// may be NULL if log frame already auto destroyed itself
delete m_pLogFrame;
}
@@ -813,6 +818,7 @@ wxLogWindow::~wxLogWindow()
// static variables
// ----------------------------------------------------------------------------
wxLog *wxLog::ms_pLogger = (wxLog *) NULL;
bool wxLog::ms_doLog = TRUE;
bool wxLog::ms_bAutoCreate = TRUE;
wxTraceMask wxLog::ms_ulTraceMask = (wxTraceMask)0;
@@ -941,6 +947,8 @@ void wxOnAssert(const char *szFile, int nLine, const char *szMsg)
if ( s_bInAssert ) {
// He-e-e-e-elp!! we're trapped in endless loop
Trap();
return;
}
s_bInAssert = TRUE;

View File

@@ -51,7 +51,6 @@
#endif
// use debug CRT functions for memory leak detections in VC++
/* This still doesn't work for me, Vadim.
#if defined(__WXDEBUG__) && defined(_MSC_VER)
// VC++ uses this macro as debug/release mode indicator
#ifndef _DEBUG
@@ -60,7 +59,6 @@
#include <crtdbg.h>
#endif
*/
extern char *wxBuffer;
extern char *wxOsVersion;
@@ -114,14 +112,12 @@ bool wxApp::Initialize()
{
wxBuffer = new char[1500];
/*
#if defined(__WXDEBUG__) && defined(_MSC_VER)
// do check for memory leaks on program exit
// (another useful flag is _CRTDBG_DELAY_FREE_MEM_DF which doesn't free
// deallocated memory which may be used to simulate low-memory condition)
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
#endif // debug build under MS VC++
*/
#if (WXDEBUG && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
#if defined(_WINDLL)
@@ -352,7 +348,7 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine)
int count = 0;
// Get application name
char name[500];
char name[260]; // 260 is MAX_PATH value from windef.h
::GetModuleFileName(wxhInstance, name, WXSIZEOF(name));
// GNUWIN32 already fills in the first arg with the application name.

View File

@@ -83,8 +83,7 @@ bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D && ((m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER)))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
m_hWnd = (WXHWND)CreateWindowEx(exStyle, "BUTTON", Label,

View File

@@ -82,14 +82,16 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D || (m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
HWND wx_combo = CreateWindowEx(exStyle, "COMBOBOX", NULL,
m_hWnd = (WXHWND)::CreateWindowEx(exStyle, "COMBOBOX", NULL,
msStyle,
0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId,
wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create combobox" );
/*
#if CTL3D
if (want3D)
@@ -100,17 +102,17 @@ bool wxChoice::Create(wxWindow *parent, wxWindowID id,
#endif
*/
m_hWnd = (WXHWND) wx_combo;
// Subclass again for purposes of dialog editing mode
SubclassWin((WXHWND) wx_combo);
SubclassWin(m_hWnd);
SetFont(* parent->GetFont());
int i;
for (i = 0; i < n; i++)
SendMessage(wx_combo, CB_INSERTSTRING, i, (LONG)(const char *)choices[i]);
SendMessage(wx_combo, CB_SETCURSEL, i, 0);
{
Append(choices[i]);
}
SetSelection(n);
SetSize(x, y, width, height);

View File

@@ -86,12 +86,13 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
int width = size.x;
int height = size.y;
long msStyle = WS_CHILD | WS_HSCROLL | WS_VSCROLL
| WS_TABSTOP | WS_VISIBLE | CBS_NOINTEGRALHEIGHT;
long msStyle = WS_CHILD | WS_HSCROLL | WS_VSCROLL |
WS_TABSTOP | WS_VISIBLE | CBS_NOINTEGRALHEIGHT;
if (m_windowStyle & wxCB_READONLY)
msStyle |= CBS_DROPDOWNLIST;
else if (m_windowStyle & wxCB_SIMPLE) // A list (shown always) and edit control
msStyle |= CBS_SIMPLE;
else if (m_windowStyle & wxCB_SIMPLE)
msStyle |= CBS_SIMPLE; // A list (shown always) and edit control
else
msStyle |= CBS_DROPDOWN;
@@ -103,14 +104,16 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D || (m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
HWND wx_combo = CreateWindowEx(exStyle, "COMBOBOX", NULL,
m_hWnd = (WXHWND)::CreateWindowEx(exStyle, "COMBOBOX", NULL,
msStyle,
0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId,
wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create combobox" );
/*
#if CTL3D
if (want3D)
@@ -121,20 +124,23 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
#endif
*/
m_hWnd = (WXHWND)wx_combo;
// Subclass again for purposes of dialog editing mode
SubclassWin((WXHWND)wx_combo);
SubclassWin(m_hWnd);
SetFont(* parent->GetFont());
int i;
for (i = 0; i < n; i++)
SendMessage(wx_combo, CB_INSERTSTRING, i, (LONG)(const char *)choices[i]);
SendMessage(wx_combo, CB_SETCURSEL, i, 0);
{
Append(choices[i]);
}
SetSelection(i);
SetSize(x, y, width, height);
if ( value != "" )
SetWindowText(wx_combo, (const char *)value);
if ( !value.IsEmpty() )
{
SetValue(value);
}
return TRUE;
}

View File

@@ -132,7 +132,7 @@ wxPaintDC::~wxPaintDC()
m_hDC = NULL;
ms_PaintHDC = NULL;
}
//else: ms_PaintHDC still in use
else { }//: ms_PaintHDC still in use
}
}

View File

@@ -198,35 +198,33 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if ( want3D || (m_windowStyle & wxSIMPLE_BORDER)
|| (m_windowStyle & wxRAISED_BORDER)
|| (m_windowStyle & wxSUNKEN_BORDER)
|| (m_windowStyle & wxDOUBLE_BORDER) ) {
if ( want3D || wxStyleHasBorder(m_windowStyle) )
{
wstyle |= WS_BORDER;
}
HWND wx_list = CreateWindowEx(exStyle, "LISTBOX", NULL,
m_hWnd = (WXHWND)::CreateWindowEx(exStyle, "LISTBOX", NULL,
wstyle | WS_CHILD,
0, 0, 0, 0,
(HWND)parent->GetHWND(), (HMENU)m_windowId,
wxGetInstance(), NULL);
m_hWnd = (WXHWND)wx_list;
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create listbox" );
#if CTL3D
if (want3D)
{
Ctl3dSubclassCtl(wx_list);
Ctl3dSubclassCtl(hwnd);
m_useCtl3D = TRUE;
}
#endif
// Subclass again to catch messages
SubclassWin((WXHWND)wx_list);
SubclassWin(m_hWnd);
size_t ui;
for (ui = 0; ui < (size_t)n; ui++) {
SendMessage(wx_list, LB_ADDSTRING, 0, (LPARAM)(const char *)choices[ui]);
Append(choices[ui]);
}
#if wxUSE_OWNER_DRAWN
@@ -236,19 +234,19 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
wxOwnerDrawn *pNewItem = CreateItem(ui);
pNewItem->SetName(choices[ui]);
m_aItems.Add(pNewItem);
ListBox_SetItemData(wx_list, ui, pNewItem);
ListBox_SetItemData(hwnd, ui, pNewItem);
}
}
#endif
if ((m_windowStyle & wxLB_MULTIPLE) == 0)
SendMessage(wx_list, LB_SETCURSEL, 0, 0);
if ( (m_windowStyle & wxLB_MULTIPLE) == 0 )
SendMessage(hwnd, LB_SETCURSEL, 0, 0);
SetFont(* parent->GetFont());
SetSize(x, y, width, height);
ShowWindow(wx_list, SW_SHOW);
Show(TRUE);
return TRUE;
}

View File

@@ -97,8 +97,7 @@ bool wxListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, con
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D || (m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
wstyle |= WS_BORDER;
wstyle |= LVS_SHAREIMAGELISTS;

View File

@@ -125,22 +125,29 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
WXDWORD exStyle = Determine3DEffects(0, &want3D) ;
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D && ((m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER)))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
m_hWnd = (WXHWND) CreateWindowEx((DWORD) exStyle, GROUP_CLASS, (title == "" ? NULL : (const char *)title),
msStyle,
0,0,0,0,
(HWND) parent->GetHWND(), (HMENU) m_windowId, wxGetInstance(), NULL) ;
HWND the_handle = (HWND) parent->GetHWND() ;
m_hWnd = (WXHWND)::CreateWindowEx
(
(DWORD)exStyle,
GROUP_CLASS,
title,
msStyle,
0, 0, 0, 0,
the_handle,
(HMENU)m_windowId,
wxGetInstance(),
NULL
);
#if CTL3D
if (want3D)
{
Ctl3dSubclassCtl((HWND) m_hWnd);
Ctl3dSubclassCtl((HWND)m_hWnd);
m_useCtl3D = TRUE;
}
#endif
@@ -235,8 +242,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
WXDWORD exStyle = Determine3DEffects(0, &want3D) ;
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D && ((m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER)))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
m_hWnd = (WXHWND) CreateWindowEx((DWORD) exStyle, GROUP_CLASS, (title == "" ? NULL : (const char *)title),

View File

@@ -72,13 +72,15 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D && ((m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER)))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
m_hWnd = (WXHWND) CreateWindowEx(exStyle, RADIO_CLASS, (const char *)label,
msStyle,0,0,0,0,
(HWND) parent->GetHWND(), (HMENU)m_windowId, wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create radiobutton" );
#if CTL3D
if (want3D)
{
@@ -211,6 +213,9 @@ bool wxBitmapRadioButton::Create(wxWindow *parent, wxWindowID id,
m_hWnd = (WXHWND) CreateWindowEx(MakeExtendedStyle(m_windowStyle), RADIO_CLASS, "toggle",
msStyle,0,0,0,0,
(HWND) parent->GetHWND(), (HMENU)m_windowId, wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, "Failed to create radio button", FALSE );
#if CTL3D
if (!(GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS))
{

View File

@@ -801,142 +801,3 @@ void RemoveTrailingSeparator(wxString& str)
if ( !str.IsEmpty() && str.Last() == REG_SEPARATOR )
str.Truncate(str.Len() - 1);
}
// ============================================================================
// global public functions
// ============================================================================
bool GetExtensionFromMimeType(wxString *pExt, const wxString& strMimeType)
{
// @@@ VZ: I don't know of any official documentation which mentions this
// location, but as a matter of fact IE uses it, so why not we?
static const char *szMimeDbase = "MIME\\Database\\Content Type\\";
wxString strKey = szMimeDbase;
strKey << strMimeType;
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, strKey);
if ( key.Open() ) {
if ( key.QueryValue("Extension", *pExt) )
return TRUE;
}
// no such MIME type or no extension for it
return FALSE;
}
bool GetMimeTypeFromExtension(wxString *pMimeType, const wxString& strExt)
{
wxCHECK( !strExt.IsEmpty(), FALSE );
// add the leading point if necessary
wxString str;
if ( strExt[0] != '.' ) {
str = '.';
}
str << strExt;
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, str);
if ( key.Open() ) {
if ( key.QueryValue("Content Type", *pMimeType) )
return TRUE;
}
// no such extension or no content-type
return FALSE;
}
bool GetFileTypeFromExtension(wxString *pFileType, const wxString& strExt)
{
wxCHECK( !strExt.IsEmpty(), FALSE );
// add the leading point if necessary
wxString str;
if ( strExt[0] != '.' ) {
str = '.';
}
str << strExt;
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, str);
if ( key.Open() ) {
if ( key.QueryValue("", *pFileType) ) // it's the default value of the key
return TRUE;
}
// no such extension or no value
return FALSE;
}
bool GetFileTypeIcon(wxIcon *pIcon, const wxString& strFileType)
{
wxCHECK( !strFileType.IsEmpty(), FALSE );
wxString strIconKey;
strIconKey << strFileType << REG_SEPARATOR << "DefaultIcon";
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, strIconKey);
if ( key.Open() ) {
wxString strIcon;
if ( key.QueryValue("", strIcon) ) { // it's the default value of the key
// the format is the following: <full path to file>, <icon index>
// NB: icon index may be negative as well as positive and the full path
// may contain the environment variables inside '%'
wxString strFullPath = strIcon.Before(','),
strIndex = strIcon.Right(',');
// index may be omitted, in which case Before(',') is empty and
// Right(',') is the whole string
if ( strFullPath.IsEmpty() ) {
strFullPath = strIndex;
strIndex = "0";
}
wxString strExpPath = wxExpandEnvVars(strFullPath);
int nIndex = atoi(strIndex);
HICON hIcon = ExtractIcon(GetModuleHandle(NULL), strExpPath, nIndex);
switch ( (int)hIcon ) {
case 0: // means no icons were found
case 1: // means no such file or it wasn't a DLL/EXE/OCX/ICO/...
wxLogDebug("incorrect registry entry '%s': no such icon.",
GetFullName(&key));
break;
default:
pIcon->SetHICON((WXHICON)hIcon);
return TRUE;
}
}
}
// no such file type or no value or incorrect icon entry
return FALSE;
}
bool GetFileTypeDescription(wxString *pDesc, const wxString& strFileType)
{
wxCHECK( !strFileType.IsEmpty(), FALSE );
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, strFileType);
if ( key.Open() ) {
if ( key.QueryValue("", *pDesc) ) // it's the default value of the key
return TRUE;
}
// no such file type or no value
return FALSE;
}

View File

@@ -67,15 +67,16 @@ bool wxStaticText::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if ((m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
if ( wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
HWND static_item = CreateWindowEx(MakeExtendedStyle(m_windowStyle), "STATIC", (const char *)label,
m_hWnd = (WXHWND)::CreateWindowEx(MakeExtendedStyle(m_windowStyle), "STATIC", (const char *)label,
msStyle,
0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId,
wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create static ctrl" );
#if CTL3D
/*
if (!(GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS))
@@ -83,12 +84,11 @@ bool wxStaticText::Create(wxWindow *parent, wxWindowID id,
*/
#endif
m_hWnd = (WXHWND)static_item;
SubclassWin((WXHWND)static_item);
SubclassWin(m_hWnd);
SetFont(* parent->GetFont());
SetSize(x, y, width, height);
return TRUE;
}

View File

@@ -129,6 +129,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
// m_globalHandle = (WXHGLOBAL) GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT,
// 256L);
#endif
long msStyle = ES_LEFT | WS_VISIBLE | WS_CHILD | WS_TABSTOP;
if (m_windowStyle & wxTE_MULTILINE)
msStyle |= ES_MULTILINE | ES_WANTRETURN | WS_VSCROLL ; // WS_BORDER
@@ -146,15 +147,13 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
char *windowClass = "EDIT";
#if defined(__WIN95__)
if ( m_windowStyle & wxTE_MULTILINE )
#else
if ( FALSE )
#endif
{
msStyle |= ES_AUTOVSCROLL;
m_isRich = TRUE;
windowClass = "RichEdit" ;
}
else
#endif
m_isRich = FALSE;
bool want3D;
@@ -172,30 +171,30 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
// Even with extended styles, need to combine with WS_BORDER
// for them to look right.
if (want3D || (m_windowStyle & wxSIMPLE_BORDER) || (m_windowStyle & wxRAISED_BORDER) ||
(m_windowStyle & wxSUNKEN_BORDER) || (m_windowStyle & wxDOUBLE_BORDER))
if ( want3D || wxStyleHasBorder(m_windowStyle) )
msStyle |= WS_BORDER;
HWND edit = CreateWindowEx(exStyle, windowClass, NULL,
m_hWnd = (WXHWND)::CreateWindowEx(exStyle, windowClass, NULL,
msStyle,
0, 0, 0, 0, (HWND) ((wxWindow*)parent)->GetHWND(), (HMENU)m_windowId,
m_globalHandle ? (HINSTANCE) m_globalHandle : wxGetInstance(), NULL);
wxCHECK_MSG( m_hWnd, FALSE, "Failed to create text ctrl" );
#if CTL3D
if ( want3D )
{
Ctl3dSubclassCtl(edit);
Ctl3dSubclassCtl((HWND)m_hWnd);
m_useCtl3D = TRUE;
}
#endif
m_hWnd = (WXHWND)edit;
#if defined(__WIN95__)
if (m_isRich)
{
// Have to enable events
::SendMessage(edit, EM_SETEVENTMASK, 0, ENM_CHANGE | ENM_DROPFILES | ENM_SELCHANGE | ENM_UPDATE);
::SendMessage((HWND)m_hWnd, EM_SETEVENTMASK, 0,
ENM_CHANGE | ENM_DROPFILES | ENM_SELCHANGE | ENM_UPDATE);
}
#endif
@@ -214,8 +213,10 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
// Causes a crash for Symantec C++ and WIN32 for some reason
#if !(defined(__SC__) && defined(__WIN32__))
if (value != "")
SetWindowText(edit, (const char *)value);
if ( !value.IsEmpty() )
{
SetValue(value);
}
#endif
return TRUE;

View File

@@ -9,23 +9,34 @@
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "timer.h"
#pragma implementation "timer.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/setup.h"
#include "wx/list.h"
#include "wx/app.h"
#include "wx/setup.h"
#include "wx/list.h"
#include "wx/app.h"
#endif
#include "wx/intl.h"
#include "wx/log.h"
#include "wx/timer.h"
#include "wx/msw/private.h"
@@ -33,21 +44,37 @@
#include <sys/types.h>
#if !defined(__SC__) && !defined(__GNUWIN32__)
#include <sys/timeb.h>
#endif
#ifdef __WIN32__
#define _EXPORT /**/
#else
#define _EXPORT _export
#include <sys/timeb.h>
#endif
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
wxList wxTimerList(wxKEY_INTEGER);
UINT WINAPI _EXPORT wxTimerProc(HWND hwnd, WORD, int idTimer, DWORD);
#if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
// ----------------------------------------------------------------------------
// macros
// ----------------------------------------------------------------------------
#ifdef __WIN32__
#define _EXPORT /**/
#else
#define _EXPORT _export
#endif
#if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
#endif
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxTimer class
// ----------------------------------------------------------------------------
wxTimer::wxTimer(void)
{
milli = 0 ;
@@ -62,28 +89,34 @@ wxTimer::~wxTimer(void)
wxTimerList.DeleteObject(this);
}
bool wxTimer::Start(int milliseconds,bool mode)
bool wxTimer::Start(int milliseconds, bool mode)
{
oneShot = mode ;
if (milliseconds < 0)
milliseconds = lastMilli;
if (milliseconds <= 0)
return FALSE;
wxCHECK_MSG( milliseconds > 0, FALSE, "invalid value for timer timeour" );
lastMilli = milli = milliseconds;
wxTimerList.DeleteObject(this);
TIMERPROC wxTimerProcInst = (TIMERPROC) MakeProcInstance((FARPROC)wxTimerProc,
wxGetInstance());
TIMERPROC wxTimerProcInst = (TIMERPROC)
MakeProcInstance((FARPROC)wxTimerProc, wxGetInstance());
id = SetTimer(NULL, (UINT)(id ? id : 1), (UINT)milliseconds, wxTimerProcInst);
id = SetTimer(NULL, (UINT)(id ? id : 1),
(UINT)milliseconds, wxTimerProcInst);
if (id > 0)
{
wxTimerList.Append(id, this);
return TRUE;
}
else return FALSE;
else
{
wxLogSysError(_("Couldn't create a timer"));
return FALSE;
}
}
void wxTimer::Stop(void)
@@ -96,18 +129,28 @@ void wxTimer::Stop(void)
milli = 0 ;
}
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
static void wxProcessTimer(wxTimer& timer)
{
// Avoid to process spurious timer events
if ( timer.id == 0)
return;
if ( timer.oneShot )
timer.Stop();
timer.Notify();
}
UINT WINAPI _EXPORT wxTimerProc(HWND WXUNUSED(hwnd), WORD, int idTimer, DWORD)
{
wxNode *node = wxTimerList.Find((long)idTimer);
if (node)
{
wxTimer *timer = (wxTimer *)node->Data();
if (timer->id==0)
return(0) ; // Avoid to process spurious timer events
if (timer->oneShot)
timer->Stop() ;
timer->Notify();
}
wxCHECK_MSG( node, 0, "bogus timer id in wxTimerProc" );
wxProcessTimer(*(wxTimer *)node->Data());
return 0;
}