Fixed nasty bug wxFont
Removed wxDirDialog from /src/gtk git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1234 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,152 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: dirdlg.h
|
|
||||||
// Purpose: wxDirDialog
|
|
||||||
// Author: Harm van der Heijden and Robert Roebling
|
|
||||||
// Modified by:
|
|
||||||
// Created: 12/12/98
|
|
||||||
// Copyright: (c) Harm van der Heijden and Robert Roebling
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
//
|
|
||||||
// Notes: wxDirDialog class written by Harm van der Heijden,
|
|
||||||
// uses wxDirCtrl class written by Robert Roebling for the
|
|
||||||
// wxFile application, modified by Harm van der Heijden
|
|
||||||
//
|
|
||||||
// Description: This generic dirdialog implementation defines three classes:
|
|
||||||
// 1) wxDirItemData(public wxTreeItemData) stores pathname and
|
|
||||||
// displayed name for each item in the directory tree
|
|
||||||
// 2) wxDirCtrl(public wxTreeCtrl) is a tree widget that
|
|
||||||
// displays a directory tree. It is possible to define sections
|
|
||||||
// for fast access to parts of the file system (such as the
|
|
||||||
// user's homedir, /usr/local, /tmp ...etc), similar to
|
|
||||||
// Win95 Explorer's shortcuts to 'My Computer', 'Desktop', etc.
|
|
||||||
// 3) wxDirDialog is the dialog box itself. The user can choose
|
|
||||||
// a directory by navigating the tree, or by typing a dir
|
|
||||||
// in an inputbox. The inputbox displays paths selected in the
|
|
||||||
// tree. It is possible to create new directories. The user
|
|
||||||
// will automatically be prompted for dir creation if he
|
|
||||||
// enters a non-existing dir.
|
|
||||||
//
|
|
||||||
// TODO/BUGS: - standard sections only have reasonable defaults for Unix
|
|
||||||
// (but others are easily added in wxDirCtrl::SetupSections)
|
|
||||||
// - No direct support for "show hidden" toggle. Partly due
|
|
||||||
// to laziness on my part and partly because
|
|
||||||
// wxFindFirst/NextFile never seems to find hidden dirs
|
|
||||||
// anyway.
|
|
||||||
// - No automatic update of the tree (branch) after directory
|
|
||||||
// creation.
|
|
||||||
// - I call wxBeginBusyCursor while expanding items (creating
|
|
||||||
// a new branch might take a few seconds, especially if a
|
|
||||||
// CDROM drive or something is involved) but that doesn't
|
|
||||||
// seem to do anything. Need to look into that.
|
|
||||||
// - Am still looking for an efficient way to delete wxTreeCtrl
|
|
||||||
// branches. DeleteChildren has disappeared and
|
|
||||||
// CollapseAndReset( parent ) deletes the parent as well.
|
|
||||||
// - The dialog window layout is done using wxConstraints. It
|
|
||||||
// works, but it's not as simple as I'd like it to be (see
|
|
||||||
// comments in wxDirDialog::doSize)
|
|
||||||
//
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef __GTKDIRDLGH__
|
|
||||||
#define __GTKDIRDLGH__
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma interface "dirdlg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/dialog.h"
|
|
||||||
//#include "wx/checkbox.h"
|
|
||||||
#include "wx/treectrl.h"
|
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirItemData
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxDirItemData : public wxTreeItemData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxDirItemData(wxString& path, wxString& name);
|
|
||||||
~wxDirItemData();
|
|
||||||
bool HasSubDirs();
|
|
||||||
wxString *m_path, *m_name;
|
|
||||||
bool m_isHidden;
|
|
||||||
bool m_hasSubDirs;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxDirCtrl: public wxTreeCtrl
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxDirCtrl)
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool m_showHidden;
|
|
||||||
wxTreeItemId m_rootId;
|
|
||||||
|
|
||||||
wxDirCtrl(void);
|
|
||||||
wxDirCtrl(wxWindow *parent, const wxWindowID id = -1,
|
|
||||||
const wxString &dir = "/",
|
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
|
||||||
const wxSize& size = wxDefaultSize,
|
|
||||||
const long style = wxTR_HAS_BUTTONS,
|
|
||||||
const wxString& name = "wxTreeCtrl" );
|
|
||||||
void OnExpandItem( const wxTreeEvent &event );
|
|
||||||
void OnCollapseItem( const wxTreeEvent &event );
|
|
||||||
void ShowHidden( const bool yesno );
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
protected:
|
|
||||||
void CreateItems(const wxTreeItemId &parent);
|
|
||||||
void SetupSections(void);
|
|
||||||
wxArrayString m_paths, m_names;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirDialog
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class WXDLLEXPORT wxDirDialog: public wxDialog
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxDirDialog)
|
|
||||||
public:
|
|
||||||
wxDirDialog(wxWindow *parent,
|
|
||||||
const wxString& message = wxFileSelectorPromptStr,
|
|
||||||
const wxString& defaultPath = "",
|
|
||||||
long style = 0, const wxPoint& pos = wxDefaultPosition);
|
|
||||||
inline void SetMessage(const wxString& message) { m_message = message; }
|
|
||||||
inline void SetPath(const wxString& path) { m_path = path; }
|
|
||||||
inline void SetStyle(long style) { m_dialogStyle = style; }
|
|
||||||
|
|
||||||
inline wxString GetMessage() const { return m_message; }
|
|
||||||
inline wxString GetPath() const { return m_path; }
|
|
||||||
inline long GetStyle() const { return m_dialogStyle; }
|
|
||||||
|
|
||||||
int ShowModal();
|
|
||||||
|
|
||||||
void OnTreeSelected( wxTreeEvent &event );
|
|
||||||
void OnTreeKeyDown( wxKeyEvent &event );
|
|
||||||
void OnSize(wxSizeEvent& event);
|
|
||||||
void OnOK(wxCommandEvent& event);
|
|
||||||
void OnCancel(wxCommandEvent& event);
|
|
||||||
void OnNew(wxCommandEvent& event);
|
|
||||||
// void OnCheck(wxCommandEvent& event);
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// implementation
|
|
||||||
wxString m_message;
|
|
||||||
long m_dialogStyle;
|
|
||||||
wxWindow * m_parent;
|
|
||||||
wxString m_path;
|
|
||||||
wxDirCtrl *m_dir;
|
|
||||||
wxTextCtrl *m_input;
|
|
||||||
// wxCheckBox *m_check;
|
|
||||||
wxButton *m_ok, *m_cancel, *m_new;
|
|
||||||
void doSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// __GTKDIRDLGH__
|
|
@@ -36,7 +36,8 @@ class wxFontNameDirectory;
|
|||||||
// global variables
|
// global variables
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
//extern wxFontNameDirectory *wxTheFontNameDirectory; // defined below
|
extern wxFontNameDirectory *wxTheFontNameDirectory;
|
||||||
|
extern const char* wxEmptyString;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
@@ -46,12 +47,10 @@ class wxFont: public wxGDIObject
|
|||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxFont)
|
DECLARE_DYNAMIC_CLASS(wxFont)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
wxFont();
|
wxFont();
|
||||||
wxFont( int PointSize, int FontIdOrFamily, int Style, int Weight,
|
wxFont( int pointSize, int family, int style, int weight, bool underlined = FALSE,
|
||||||
bool underlined = FALSE, const char *Face = ( const char *) NULL );
|
const wxString& face = wxEmptyString );
|
||||||
wxFont( int PointSize, const char *Face, int Family,
|
|
||||||
int Style, int Weight, bool underlined = FALSE );
|
|
||||||
wxFont( const wxFont& font );
|
wxFont( const wxFont& font );
|
||||||
~wxFont();
|
~wxFont();
|
||||||
wxFont& operator = ( const wxFont& font );
|
wxFont& operator = ( const wxFont& font );
|
||||||
@@ -60,21 +59,29 @@ class wxFont: public wxGDIObject
|
|||||||
bool Ok() const;
|
bool Ok() const;
|
||||||
|
|
||||||
int GetPointSize() const;
|
int GetPointSize() const;
|
||||||
wxString GetFaceName() const;
|
|
||||||
int GetFamily() const;
|
int GetFamily() const;
|
||||||
wxString GetFamilyString() const;
|
|
||||||
int GetFontId() const;
|
int GetFontId() const;
|
||||||
wxString GetFaceString() const;
|
|
||||||
int GetStyle() const;
|
int GetStyle() const;
|
||||||
wxString GetStyleString() const;
|
|
||||||
int GetWeight() const;
|
int GetWeight() const;
|
||||||
wxString GetWeightString() const;
|
|
||||||
bool GetUnderlined() const;
|
bool GetUnderlined() const;
|
||||||
|
|
||||||
wxFont( char *xFontName );
|
void SetPointSize( int pointSize );
|
||||||
|
void SetFamily( int family );
|
||||||
|
void SetStyle( int style );
|
||||||
|
void SetWeight( int weight );
|
||||||
|
void SetFaceName( const wxString& faceName );
|
||||||
|
void SetUnderlined( bool underlined );
|
||||||
|
|
||||||
|
wxString GetFaceName() const;
|
||||||
|
wxString GetFamilyString() const;
|
||||||
|
wxString GetStyleString() const;
|
||||||
|
wxString GetWeightString() const;
|
||||||
|
|
||||||
// implementation
|
// implementation
|
||||||
|
|
||||||
|
wxFont( char *xFontName );
|
||||||
|
void Unshare();
|
||||||
|
|
||||||
GdkFont* GetInternalFont(float scale = 1.0) const;
|
GdkFont* GetInternalFont(float scale = 1.0) const;
|
||||||
|
|
||||||
// no data :-)
|
// no data :-)
|
||||||
@@ -108,6 +115,4 @@ class wxFontNameDirectory: public wxObject
|
|||||||
int nextFontId;
|
int nextFontId;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern wxFontNameDirectory *wxTheFontNameDirectory;
|
|
||||||
|
|
||||||
#endif // __GTKFONTH__
|
#endif // __GTKFONTH__
|
||||||
|
@@ -1,152 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: dirdlg.h
|
|
||||||
// Purpose: wxDirDialog
|
|
||||||
// Author: Harm van der Heijden and Robert Roebling
|
|
||||||
// Modified by:
|
|
||||||
// Created: 12/12/98
|
|
||||||
// Copyright: (c) Harm van der Heijden and Robert Roebling
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
//
|
|
||||||
// Notes: wxDirDialog class written by Harm van der Heijden,
|
|
||||||
// uses wxDirCtrl class written by Robert Roebling for the
|
|
||||||
// wxFile application, modified by Harm van der Heijden
|
|
||||||
//
|
|
||||||
// Description: This generic dirdialog implementation defines three classes:
|
|
||||||
// 1) wxDirItemData(public wxTreeItemData) stores pathname and
|
|
||||||
// displayed name for each item in the directory tree
|
|
||||||
// 2) wxDirCtrl(public wxTreeCtrl) is a tree widget that
|
|
||||||
// displays a directory tree. It is possible to define sections
|
|
||||||
// for fast access to parts of the file system (such as the
|
|
||||||
// user's homedir, /usr/local, /tmp ...etc), similar to
|
|
||||||
// Win95 Explorer's shortcuts to 'My Computer', 'Desktop', etc.
|
|
||||||
// 3) wxDirDialog is the dialog box itself. The user can choose
|
|
||||||
// a directory by navigating the tree, or by typing a dir
|
|
||||||
// in an inputbox. The inputbox displays paths selected in the
|
|
||||||
// tree. It is possible to create new directories. The user
|
|
||||||
// will automatically be prompted for dir creation if he
|
|
||||||
// enters a non-existing dir.
|
|
||||||
//
|
|
||||||
// TODO/BUGS: - standard sections only have reasonable defaults for Unix
|
|
||||||
// (but others are easily added in wxDirCtrl::SetupSections)
|
|
||||||
// - No direct support for "show hidden" toggle. Partly due
|
|
||||||
// to laziness on my part and partly because
|
|
||||||
// wxFindFirst/NextFile never seems to find hidden dirs
|
|
||||||
// anyway.
|
|
||||||
// - No automatic update of the tree (branch) after directory
|
|
||||||
// creation.
|
|
||||||
// - I call wxBeginBusyCursor while expanding items (creating
|
|
||||||
// a new branch might take a few seconds, especially if a
|
|
||||||
// CDROM drive or something is involved) but that doesn't
|
|
||||||
// seem to do anything. Need to look into that.
|
|
||||||
// - Am still looking for an efficient way to delete wxTreeCtrl
|
|
||||||
// branches. DeleteChildren has disappeared and
|
|
||||||
// CollapseAndReset( parent ) deletes the parent as well.
|
|
||||||
// - The dialog window layout is done using wxConstraints. It
|
|
||||||
// works, but it's not as simple as I'd like it to be (see
|
|
||||||
// comments in wxDirDialog::doSize)
|
|
||||||
//
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef __GTKDIRDLGH__
|
|
||||||
#define __GTKDIRDLGH__
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma interface "dirdlg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/dialog.h"
|
|
||||||
//#include "wx/checkbox.h"
|
|
||||||
#include "wx/treectrl.h"
|
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirItemData
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxDirItemData : public wxTreeItemData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
wxDirItemData(wxString& path, wxString& name);
|
|
||||||
~wxDirItemData();
|
|
||||||
bool HasSubDirs();
|
|
||||||
wxString *m_path, *m_name;
|
|
||||||
bool m_isHidden;
|
|
||||||
bool m_hasSubDirs;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class wxDirCtrl: public wxTreeCtrl
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxDirCtrl)
|
|
||||||
|
|
||||||
public:
|
|
||||||
bool m_showHidden;
|
|
||||||
wxTreeItemId m_rootId;
|
|
||||||
|
|
||||||
wxDirCtrl(void);
|
|
||||||
wxDirCtrl(wxWindow *parent, const wxWindowID id = -1,
|
|
||||||
const wxString &dir = "/",
|
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
|
||||||
const wxSize& size = wxDefaultSize,
|
|
||||||
const long style = wxTR_HAS_BUTTONS,
|
|
||||||
const wxString& name = "wxTreeCtrl" );
|
|
||||||
void OnExpandItem( const wxTreeEvent &event );
|
|
||||||
void OnCollapseItem( const wxTreeEvent &event );
|
|
||||||
void ShowHidden( const bool yesno );
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
protected:
|
|
||||||
void CreateItems(const wxTreeItemId &parent);
|
|
||||||
void SetupSections(void);
|
|
||||||
wxArrayString m_paths, m_names;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirDialog
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class WXDLLEXPORT wxDirDialog: public wxDialog
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxDirDialog)
|
|
||||||
public:
|
|
||||||
wxDirDialog(wxWindow *parent,
|
|
||||||
const wxString& message = wxFileSelectorPromptStr,
|
|
||||||
const wxString& defaultPath = "",
|
|
||||||
long style = 0, const wxPoint& pos = wxDefaultPosition);
|
|
||||||
inline void SetMessage(const wxString& message) { m_message = message; }
|
|
||||||
inline void SetPath(const wxString& path) { m_path = path; }
|
|
||||||
inline void SetStyle(long style) { m_dialogStyle = style; }
|
|
||||||
|
|
||||||
inline wxString GetMessage() const { return m_message; }
|
|
||||||
inline wxString GetPath() const { return m_path; }
|
|
||||||
inline long GetStyle() const { return m_dialogStyle; }
|
|
||||||
|
|
||||||
int ShowModal();
|
|
||||||
|
|
||||||
void OnTreeSelected( wxTreeEvent &event );
|
|
||||||
void OnTreeKeyDown( wxKeyEvent &event );
|
|
||||||
void OnSize(wxSizeEvent& event);
|
|
||||||
void OnOK(wxCommandEvent& event);
|
|
||||||
void OnCancel(wxCommandEvent& event);
|
|
||||||
void OnNew(wxCommandEvent& event);
|
|
||||||
// void OnCheck(wxCommandEvent& event);
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// implementation
|
|
||||||
wxString m_message;
|
|
||||||
long m_dialogStyle;
|
|
||||||
wxWindow * m_parent;
|
|
||||||
wxString m_path;
|
|
||||||
wxDirCtrl *m_dir;
|
|
||||||
wxTextCtrl *m_input;
|
|
||||||
// wxCheckBox *m_check;
|
|
||||||
wxButton *m_ok, *m_cancel, *m_new;
|
|
||||||
void doSize();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
// __GTKDIRDLGH__
|
|
@@ -36,7 +36,8 @@ class wxFontNameDirectory;
|
|||||||
// global variables
|
// global variables
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
//extern wxFontNameDirectory *wxTheFontNameDirectory; // defined below
|
extern wxFontNameDirectory *wxTheFontNameDirectory;
|
||||||
|
extern const char* wxEmptyString;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
@@ -46,12 +47,10 @@ class wxFont: public wxGDIObject
|
|||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxFont)
|
DECLARE_DYNAMIC_CLASS(wxFont)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
wxFont();
|
wxFont();
|
||||||
wxFont( int PointSize, int FontIdOrFamily, int Style, int Weight,
|
wxFont( int pointSize, int family, int style, int weight, bool underlined = FALSE,
|
||||||
bool underlined = FALSE, const char *Face = ( const char *) NULL );
|
const wxString& face = wxEmptyString );
|
||||||
wxFont( int PointSize, const char *Face, int Family,
|
|
||||||
int Style, int Weight, bool underlined = FALSE );
|
|
||||||
wxFont( const wxFont& font );
|
wxFont( const wxFont& font );
|
||||||
~wxFont();
|
~wxFont();
|
||||||
wxFont& operator = ( const wxFont& font );
|
wxFont& operator = ( const wxFont& font );
|
||||||
@@ -60,21 +59,29 @@ class wxFont: public wxGDIObject
|
|||||||
bool Ok() const;
|
bool Ok() const;
|
||||||
|
|
||||||
int GetPointSize() const;
|
int GetPointSize() const;
|
||||||
wxString GetFaceName() const;
|
|
||||||
int GetFamily() const;
|
int GetFamily() const;
|
||||||
wxString GetFamilyString() const;
|
|
||||||
int GetFontId() const;
|
int GetFontId() const;
|
||||||
wxString GetFaceString() const;
|
|
||||||
int GetStyle() const;
|
int GetStyle() const;
|
||||||
wxString GetStyleString() const;
|
|
||||||
int GetWeight() const;
|
int GetWeight() const;
|
||||||
wxString GetWeightString() const;
|
|
||||||
bool GetUnderlined() const;
|
bool GetUnderlined() const;
|
||||||
|
|
||||||
wxFont( char *xFontName );
|
void SetPointSize( int pointSize );
|
||||||
|
void SetFamily( int family );
|
||||||
|
void SetStyle( int style );
|
||||||
|
void SetWeight( int weight );
|
||||||
|
void SetFaceName( const wxString& faceName );
|
||||||
|
void SetUnderlined( bool underlined );
|
||||||
|
|
||||||
|
wxString GetFaceName() const;
|
||||||
|
wxString GetFamilyString() const;
|
||||||
|
wxString GetStyleString() const;
|
||||||
|
wxString GetWeightString() const;
|
||||||
|
|
||||||
// implementation
|
// implementation
|
||||||
|
|
||||||
|
wxFont( char *xFontName );
|
||||||
|
void Unshare();
|
||||||
|
|
||||||
GdkFont* GetInternalFont(float scale = 1.0) const;
|
GdkFont* GetInternalFont(float scale = 1.0) const;
|
||||||
|
|
||||||
// no data :-)
|
// no data :-)
|
||||||
@@ -108,6 +115,4 @@ class wxFontNameDirectory: public wxObject
|
|||||||
int nextFontId;
|
int nextFontId;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern wxFontNameDirectory *wxTheFontNameDirectory;
|
|
||||||
|
|
||||||
#endif // __GTKFONTH__
|
#endif // __GTKFONTH__
|
||||||
|
@@ -1,415 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: dirdlg.cpp
|
|
||||||
// Purpose: wxDirDialog
|
|
||||||
// Author: Harm van der Heijden and Robert Roebling
|
|
||||||
// Modified by:
|
|
||||||
// Created: 12/12/98
|
|
||||||
// Copyright: (c) Harm van der Heijden and Robert Roebling
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation "dirdlg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/defs.h"
|
|
||||||
#include "wx/utils.h"
|
|
||||||
#include "wx/dialog.h"
|
|
||||||
#include "wx/button.h"
|
|
||||||
#include "wx/layout.h"
|
|
||||||
#include "wx/msgdlg.h"
|
|
||||||
#include "wx/textdlg.h"
|
|
||||||
#include "wx/filefn.h"
|
|
||||||
#include "wx/cmndata.h"
|
|
||||||
#include "wx/gdicmn.h"
|
|
||||||
#include "wx/dirdlg.h"
|
|
||||||
#include "wx/intl.h"
|
|
||||||
#include "wx/imaglist.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* XPM */
|
|
||||||
static char * icon1_xpm[] = {
|
|
||||||
/* width height ncolors chars_per_pixel */
|
|
||||||
"16 16 6 1",
|
|
||||||
/* colors */
|
|
||||||
" s None c None",
|
|
||||||
". c #000000",
|
|
||||||
"+ c #c0c0c0",
|
|
||||||
"@ c #808080",
|
|
||||||
"# c #ffff00",
|
|
||||||
"$ c #ffffff",
|
|
||||||
/* pixels */
|
|
||||||
" ",
|
|
||||||
" @@@@@ ",
|
|
||||||
" @#+#+#@ ",
|
|
||||||
" @#+#+#+#@@@@@@ ",
|
|
||||||
" @$$$$$$$$$$$$@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @@@@@@@@@@@@@@.",
|
|
||||||
" ..............",
|
|
||||||
" ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
|
|
||||||
static const int ID_DIRCTRL = 1000;
|
|
||||||
static const int ID_TEXTCTRL = 1001;
|
|
||||||
static const int ID_OK = 1002;
|
|
||||||
static const int ID_CANCEL = 1003;
|
|
||||||
static const int ID_NEW = 1004;
|
|
||||||
//static const int ID_CHECK = 1005;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirItemData
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
wxDirItemData::wxDirItemData(wxString& path, wxString& name)
|
|
||||||
{
|
|
||||||
m_path = new wxString(path);
|
|
||||||
m_name = new wxString(name);
|
|
||||||
/* Insert logic to detect hidden files here
|
|
||||||
* In UnixLand we just check whether the first char is a dot
|
|
||||||
* For FileNameFromPath read LastDirNameInThisPath ;-) */
|
|
||||||
// m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
|
|
||||||
m_isHidden = FALSE;
|
|
||||||
m_hasSubDirs = HasSubDirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxDirItemData:: ~wxDirItemData()
|
|
||||||
{
|
|
||||||
delete m_path;
|
|
||||||
delete m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxDirItemData::HasSubDirs()
|
|
||||||
{
|
|
||||||
wxString search = *m_path + "/*";
|
|
||||||
wxString path = wxFindFirstFile( search, wxDIR );
|
|
||||||
return (bool)(!path.IsNull());
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxDirCtrl,wxTreeCtrl)
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxDirCtrl,wxTreeCtrl)
|
|
||||||
EVT_TREE_ITEM_EXPANDING (-1, wxDirCtrl::OnExpandItem)
|
|
||||||
EVT_TREE_ITEM_COLLAPSED (-1, wxDirCtrl::OnCollapseItem)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
wxDirCtrl::wxDirCtrl(void)
|
|
||||||
{
|
|
||||||
m_showHidden = FALSE;
|
|
||||||
};
|
|
||||||
|
|
||||||
wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir),
|
|
||||||
const wxPoint& pos, const wxSize& size,
|
|
||||||
const long style, const wxString& name )
|
|
||||||
:
|
|
||||||
wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
|
|
||||||
{
|
|
||||||
m_imageListNormal = new wxImageList(16, 16, TRUE);
|
|
||||||
m_imageListNormal->Add(wxICON(icon1));
|
|
||||||
SetImageList(m_imageListNormal);
|
|
||||||
|
|
||||||
m_showHidden = FALSE;
|
|
||||||
m_rootId = AddRoot("Sections");
|
|
||||||
SetItemHasChildren(m_rootId);
|
|
||||||
Expand(m_rootId); // automatically expand first level
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Quick macro. Don't worry, I'll #undef it later */
|
|
||||||
#define ADD_SECTION(a,b) \
|
|
||||||
if (wxPathExists((a))) { m_paths.Add( (a) ); m_names.Add( (b) ); };
|
|
||||||
|
|
||||||
void wxDirCtrl::SetupSections()
|
|
||||||
{
|
|
||||||
wxString home;
|
|
||||||
|
|
||||||
m_paths.Clear();
|
|
||||||
m_names.Clear();
|
|
||||||
ADD_SECTION("/", _("The Computer") )
|
|
||||||
wxGetHomeDir(&home);
|
|
||||||
ADD_SECTION(home, _("My Home") )
|
|
||||||
ADD_SECTION("/mnt", _("Mounted Devices") )
|
|
||||||
ADD_SECTION("/usr", _("User") )
|
|
||||||
ADD_SECTION("/usr/local", _("User Local") )
|
|
||||||
ADD_SECTION("/var", _("Variables") )
|
|
||||||
ADD_SECTION("/etc", _("Etcetera") )
|
|
||||||
ADD_SECTION("/tmp", _("Temporary") )
|
|
||||||
}
|
|
||||||
#undef ADD_SECTION
|
|
||||||
|
|
||||||
void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
|
|
||||||
{
|
|
||||||
wxTreeItemId id;
|
|
||||||
wxDirItemData *dir_item;
|
|
||||||
|
|
||||||
// wxASSERT(m_paths.Count() == m_names.Count()); ?
|
|
||||||
|
|
||||||
for (unsigned int i=0; i<m_paths.Count(); i++)
|
|
||||||
{
|
|
||||||
dir_item = new wxDirItemData(m_paths[i],m_names[i]);
|
|
||||||
id = AppendItem( parent, m_names[i], 0, -1, dir_item);
|
|
||||||
if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirCtrl::OnExpandItem( const wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
if (event.GetItem() == m_rootId)
|
|
||||||
{
|
|
||||||
SetupSections();
|
|
||||||
CreateItems(m_rootId);
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
// This may take a longish time. Go to busy cursor
|
|
||||||
wxBeginBusyCursor();
|
|
||||||
|
|
||||||
wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem());
|
|
||||||
wxASSERT(data);
|
|
||||||
|
|
||||||
wxString search,path,filename;
|
|
||||||
|
|
||||||
m_paths.Clear();
|
|
||||||
m_names.Clear();
|
|
||||||
search = *(data->m_path) + "/*";
|
|
||||||
for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull();
|
|
||||||
path=wxFindNextFile() ) {
|
|
||||||
filename = wxFileNameFromPath( path );
|
|
||||||
/* Don't add "." and ".." to the tree. I think wxFindNextFile
|
|
||||||
* also checks this, but I don't quite understand what happens
|
|
||||||
* there. Also wxFindNextFile seems to swallow hidden dirs */
|
|
||||||
if ((filename != ".") && (filename != "..")) {
|
|
||||||
m_paths.Add(path);
|
|
||||||
m_names.Add(filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CreateItems(event.GetItem());
|
|
||||||
wxEndBusyCursor();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void wxDirCtrl::OnCollapseItem( const wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
wxTreeItemId child, parent = event.GetItem();
|
|
||||||
long cookie;
|
|
||||||
/* Workaround because DeleteChildren has disapeared (why?) and
|
|
||||||
* CollapseAndReset doesn't work as advertised (deletes parent too) */
|
|
||||||
child = GetFirstChild(parent, cookie);
|
|
||||||
while (child.IsOk()) {
|
|
||||||
Delete(child);
|
|
||||||
/* Not GetNextChild below, because the cookie mechanism can't
|
|
||||||
* handle disappearing children! */
|
|
||||||
child = GetFirstChild(parent, cookie);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirDialog
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
|
||||||
IMPLEMENT_CLASS(wxDirDialog, wxDialog)
|
|
||||||
#else
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS( wxDirDialog, wxDialog )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
|
|
||||||
EVT_TREE_KEY_DOWN (ID_DIRCTRL, wxDirDialog::OnTreeKeyDown)
|
|
||||||
EVT_TREE_SEL_CHANGED (ID_DIRCTRL, wxDirDialog::OnTreeSelected)
|
|
||||||
EVT_SIZE ( wxDirDialog::OnSize)
|
|
||||||
EVT_BUTTON (ID_OK, wxDirDialog::OnOK)
|
|
||||||
EVT_BUTTON (ID_CANCEL, wxDirDialog::OnCancel)
|
|
||||||
EVT_BUTTON (ID_NEW, wxDirDialog::OnNew)
|
|
||||||
EVT_TEXT_ENTER (ID_TEXTCTRL, wxDirDialog::OnOK)
|
|
||||||
// EVT_CHECKBOX (ID_CHECK, wxDirDialog::OnCheck)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
|
|
||||||
const wxString& defaultPath, long style,
|
|
||||||
const wxPoint& pos) :
|
|
||||||
wxDialog(parent, -1, message, pos, wxSize(300,300),
|
|
||||||
wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL)
|
|
||||||
{
|
|
||||||
m_message = message;
|
|
||||||
m_dialogStyle = style;
|
|
||||||
m_parent = parent;
|
|
||||||
|
|
||||||
m_path = defaultPath;
|
|
||||||
|
|
||||||
m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSUNKEN_BORDER );
|
|
||||||
m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition );
|
|
||||||
// m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") );
|
|
||||||
m_ok = new wxButton( this, ID_OK, _("OK") );
|
|
||||||
m_cancel = new wxButton( this, ID_CANCEL, _("Cancel") );
|
|
||||||
m_new = new wxButton( this, ID_NEW, _("New...") );
|
|
||||||
|
|
||||||
// m_check->SetValue(TRUE);
|
|
||||||
m_ok->SetDefault();
|
|
||||||
m_dir->SetFocus();
|
|
||||||
|
|
||||||
doSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnSize(wxSizeEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
doSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::doSize()
|
|
||||||
{
|
|
||||||
/* Figure out height of DirCtrl, which is what is left over by
|
|
||||||
* the textctrl and the buttons. Manually, because I can't seem
|
|
||||||
* to get the constraints stuff to do this */
|
|
||||||
int w,h,h2;
|
|
||||||
|
|
||||||
GetClientSize(&w, &h);
|
|
||||||
m_input->GetSize(&w,&h2); h -= h2;
|
|
||||||
m_ok->GetSize(&w, &h2); h -= h2;
|
|
||||||
//m_check->GetSize(&w, &h2); h -= h2;
|
|
||||||
h -= 20;
|
|
||||||
|
|
||||||
wxLayoutConstraints *c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.Absolute (h);
|
|
||||||
c->top.SameAs (this, wxTop,5);
|
|
||||||
m_dir->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_dir,5);
|
|
||||||
m_input->SetConstraints(c);
|
|
||||||
|
|
||||||
/* c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
m_check->SetConstraints(c); */
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.SameAs (m_cancel, wxWidth);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 25);
|
|
||||||
m_ok->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.SameAs (m_cancel, wxWidth);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->bottom.SameAs (this, wxBottom, 5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 50);
|
|
||||||
m_new->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.AsIs ();
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 75);
|
|
||||||
m_cancel->SetConstraints(c);
|
|
||||||
|
|
||||||
Layout();
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxDirDialog::ShowModal()
|
|
||||||
{
|
|
||||||
m_input->SetValue( m_path );
|
|
||||||
return wxDialog::ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnTreeSelected( wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
wxDirItemData *data =
|
|
||||||
(wxDirItemData*)m_dir->GetItemData(event.GetItem());
|
|
||||||
if (data)
|
|
||||||
m_input->SetValue( *(data->m_path) );
|
|
||||||
};
|
|
||||||
|
|
||||||
void wxDirDialog::OnTreeKeyDown( wxKeyEvent &WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
wxDirItemData *data =
|
|
||||||
(wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
|
|
||||||
if (data)
|
|
||||||
m_input->SetValue( *(data->m_path) );
|
|
||||||
};
|
|
||||||
|
|
||||||
void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
m_path = m_input->GetValue();
|
|
||||||
// Does the path exist? (User may have typed anything in m_input)
|
|
||||||
if (wxPathExists(m_path)) {
|
|
||||||
// OK, path exists, we're done.
|
|
||||||
EndModal(wxID_OK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Interact with user, find out if the dir is a typo or to be created
|
|
||||||
wxString msg( _("The directory ") );
|
|
||||||
msg = msg + m_path;
|
|
||||||
msg = msg + _("\ndoes not exist\nCreate it now?") ;
|
|
||||||
wxMessageDialog dialog(this, msg, _("Directory does not exist"), wxYES_NO);
|
|
||||||
if ( dialog.ShowModal() == wxID_YES ) {
|
|
||||||
// Okay, let's make it
|
|
||||||
if (wxMkdir(m_path)) {
|
|
||||||
// The new dir was created okay.
|
|
||||||
EndModal(wxID_OK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Trouble...
|
|
||||||
msg = _("Failed to create directory ")+m_path+
|
|
||||||
_("\n(Do you have the required permissions?)");
|
|
||||||
wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
|
|
||||||
errmsg.ShowModal();
|
|
||||||
// We still don't have a valid dir. Back to the main dialog.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// User has answered NO to create dir.
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
EndModal(wxID_CANCEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
wxTextEntryDialog dialog(this, _("Enter the name of the directory to create"),
|
|
||||||
_("Create New Directory"), m_input->GetValue(), wxOK|wxCANCEL);
|
|
||||||
|
|
||||||
while (dialog.ShowModal() == wxID_OK)
|
|
||||||
{
|
|
||||||
// Okay, let's make it
|
|
||||||
if (wxMkdir(dialog.GetValue())) {
|
|
||||||
// The new dir was created okay.
|
|
||||||
m_path = dialog.GetValue();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
wxString msg = _("Failed to create directory ")+dialog.GetValue()+
|
|
||||||
_("\n(Do you have the required permissions?)") ;
|
|
||||||
wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
|
|
||||||
errmsg.ShowModal();
|
|
||||||
// Show the create dialog again, until user clicks cancel or enters
|
|
||||||
// a valid dir.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void wxDirDialog::OnCheck( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
printf("Checkbox clicked: %s\n", ( m_check->GetValue() ? "on" : "off" ) );
|
|
||||||
}
|
|
||||||
*/
|
|
153
src/gtk/font.cpp
153
src/gtk/font.cpp
@@ -30,6 +30,7 @@ class wxFontRefData: public wxObjectRefData
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
wxFontRefData();
|
wxFontRefData();
|
||||||
|
wxFontRefData( const wxFontRefData& data );
|
||||||
~wxFontRefData();
|
~wxFontRefData();
|
||||||
|
|
||||||
wxList m_scaled_xfonts;
|
wxList m_scaled_xfonts;
|
||||||
@@ -37,7 +38,7 @@ public:
|
|||||||
int m_family, m_style, m_weight;
|
int m_family, m_style, m_weight;
|
||||||
bool m_underlined;
|
bool m_underlined;
|
||||||
int m_fontId;
|
int m_fontId;
|
||||||
char* m_faceName;
|
wxString m_faceName;
|
||||||
|
|
||||||
bool m_byXFontName;
|
bool m_byXFontName;
|
||||||
GdkFont *m_font;
|
GdkFont *m_font;
|
||||||
@@ -54,10 +55,23 @@ wxFontRefData::wxFontRefData() : m_scaled_xfonts(wxKEY_INTEGER)
|
|||||||
m_weight = wxNORMAL;
|
m_weight = wxNORMAL;
|
||||||
m_underlined = FALSE;
|
m_underlined = FALSE;
|
||||||
m_fontId = 0;
|
m_fontId = 0;
|
||||||
m_faceName = (char *) NULL;
|
|
||||||
m_font = (GdkFont *) NULL;
|
m_font = (GdkFont *) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxFontRefData::wxFontRefData( const wxFontRefData& data ) : m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
|
{
|
||||||
|
m_byXFontName = FALSE;
|
||||||
|
m_pointSize = data.m_pointSize;
|
||||||
|
m_family = data.m_family;
|
||||||
|
m_style = data.m_style;
|
||||||
|
m_weight = data.m_weight;
|
||||||
|
m_underlined = data.m_underlined;
|
||||||
|
m_fontId = data.m_fontId;
|
||||||
|
m_faceName = data.m_faceName;
|
||||||
|
m_font = (GdkFont *) NULL;
|
||||||
|
if (data.m_font) m_font = gdk_font_ref( data.m_font );
|
||||||
|
}
|
||||||
|
|
||||||
wxFontRefData::~wxFontRefData()
|
wxFontRefData::~wxFontRefData()
|
||||||
{
|
{
|
||||||
wxNode *node = m_scaled_xfonts.First();
|
wxNode *node = m_scaled_xfonts.First();
|
||||||
@@ -68,11 +82,6 @@ wxFontRefData::~wxFontRefData()
|
|||||||
gdk_font_unref( font );
|
gdk_font_unref( font );
|
||||||
node = next;
|
node = next;
|
||||||
}
|
}
|
||||||
if (m_faceName)
|
|
||||||
{
|
|
||||||
delete m_faceName;
|
|
||||||
m_faceName = (char *) NULL;
|
|
||||||
}
|
|
||||||
if (m_font) gdk_font_unref( m_font );
|
if (m_font) gdk_font_unref( m_font );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,50 +106,36 @@ wxFont::wxFont( char *xFontName )
|
|||||||
M_FONTDATA->m_font = gdk_font_load( xFontName );
|
M_FONTDATA->m_font = gdk_font_load( xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont(int PointSize, int FontIdOrFamily, int Style, int Weight,
|
wxFont::wxFont( int pointSize, int family, int style, int weight, bool underlined = FALSE,
|
||||||
bool Underlined, const char* Face)
|
const wxString& face = wxEmptyString )
|
||||||
{
|
{
|
||||||
m_refData = new wxFontRefData();
|
m_refData = new wxFontRefData();
|
||||||
|
|
||||||
if (FontIdOrFamily == wxDEFAULT) FontIdOrFamily = wxSWISS;
|
if (family == wxDEFAULT) family = wxSWISS;
|
||||||
M_FONTDATA->m_family = FontIdOrFamily;
|
M_FONTDATA->m_family = family;
|
||||||
|
|
||||||
if ((M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL) )
|
if (!face.IsEmpty())
|
||||||
{
|
{
|
||||||
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, FontIdOrFamily );
|
M_FONTDATA->m_faceName = face;
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
|
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( face, family );
|
||||||
|
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
M_FONTDATA->m_fontId = FontIdOrFamily;
|
M_FONTDATA->m_fontId = family;
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
|
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Style == wxDEFAULT) Style = wxNORMAL;
|
if (style == wxDEFAULT) style = wxNORMAL;
|
||||||
M_FONTDATA->m_style = Style;
|
M_FONTDATA->m_style = style;
|
||||||
if (Weight == wxDEFAULT) Weight = wxNORMAL;
|
if (weight == wxDEFAULT) weight = wxNORMAL;
|
||||||
M_FONTDATA->m_weight = Weight;
|
M_FONTDATA->m_weight = weight;
|
||||||
if (PointSize == wxDEFAULT) PointSize = 12;
|
if (pointSize == wxDEFAULT) pointSize = 12;
|
||||||
M_FONTDATA->m_pointSize = PointSize;
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
M_FONTDATA->m_underlined = Underlined;
|
M_FONTDATA->m_underlined = underlined;
|
||||||
|
|
||||||
if (wxTheFontList) wxTheFontList->Append( this );
|
if (wxTheFontList) wxTheFontList->Append( this );
|
||||||
}
|
|
||||||
|
|
||||||
wxFont::wxFont(int PointSize, const char *Face, int Family, int Style,
|
|
||||||
int Weight, bool Underlined)
|
|
||||||
{
|
|
||||||
m_refData = new wxFontRefData();
|
|
||||||
|
|
||||||
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, Family );
|
|
||||||
M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL;
|
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( M_FONTDATA->m_fontId );
|
|
||||||
M_FONTDATA->m_style = Style;
|
|
||||||
M_FONTDATA->m_weight = Weight;
|
|
||||||
M_FONTDATA->m_pointSize = PointSize;
|
|
||||||
M_FONTDATA->m_underlined = Underlined;
|
|
||||||
|
|
||||||
if (wxTheFontList) wxTheFontList->Append( this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont( const wxFont& font )
|
wxFont::wxFont( const wxFont& font )
|
||||||
@@ -184,14 +179,6 @@ int wxFont::GetPointSize() const
|
|||||||
return M_FONTDATA->m_pointSize;
|
return M_FONTDATA->m_pointSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxFont::GetFaceString() const
|
|
||||||
{
|
|
||||||
wxCHECK_MSG( Ok(), "", "invalid font" );
|
|
||||||
|
|
||||||
wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxFont::GetFaceName() const
|
wxString wxFont::GetFaceName() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( Ok(), "", "invalid font" );
|
wxCHECK_MSG( Ok(), "", "invalid font" );
|
||||||
@@ -283,6 +270,62 @@ bool wxFont::GetUnderlined() const
|
|||||||
return M_FONTDATA->m_underlined;
|
return M_FONTDATA->m_underlined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxFont::Unshare()
|
||||||
|
{
|
||||||
|
if (!m_refData)
|
||||||
|
{
|
||||||
|
m_refData = new wxFontRefData();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);
|
||||||
|
UnRef();
|
||||||
|
m_refData = ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetPointSize(int pointSize)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetFamily(int family)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_family = family;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetStyle(int style)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_style = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetWeight(int weight)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetFaceName(const wxString& faceName)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_faceName = faceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetUnderlined(bool underlined)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_underlined = underlined;
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// get internal representation of font
|
// get internal representation of font
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -699,7 +742,8 @@ found:
|
|||||||
// wxFontNameItem
|
// wxFontNameItem
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxFontNameItem : public wxObject {
|
class wxFontNameItem : public wxObject
|
||||||
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxFontNameItem)
|
DECLARE_DYNAMIC_CLASS(wxFontNameItem)
|
||||||
public:
|
public:
|
||||||
wxFontNameItem(const char *name, int id, int family);
|
wxFontNameItem(const char *name, int id, int family);
|
||||||
@@ -767,7 +811,8 @@ wxFontNameDirectory::~wxFontNameDirectory()
|
|||||||
// Cleanup wxFontNameItems allocated
|
// Cleanup wxFontNameItems allocated
|
||||||
table->BeginFind();
|
table->BeginFind();
|
||||||
wxNode *node = table->Next();
|
wxNode *node = table->Next();
|
||||||
while (node) {
|
while (node)
|
||||||
|
{
|
||||||
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
||||||
delete item;
|
delete item;
|
||||||
node = table->Next();
|
node = table->Next();
|
||||||
@@ -797,7 +842,8 @@ void wxFontNameDirectory::Initialize(int fontid, int family, const char *resname
|
|||||||
|
|
||||||
sprintf(resource, "Family%s", resname);
|
sprintf(resource, "Family%s", resname);
|
||||||
SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
|
SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
|
||||||
if (fam) {
|
if (fam)
|
||||||
|
{
|
||||||
if (!strcmp(fam, "Default")) family = wxDEFAULT;
|
if (!strcmp(fam, "Default")) family = wxDEFAULT;
|
||||||
else if (!strcmp(fam, "Roman")) family = wxROMAN;
|
else if (!strcmp(fam, "Roman")) family = wxROMAN;
|
||||||
else if (!strcmp(fam, "Decorative")) family = wxDECORATIVE;
|
else if (!strcmp(fam, "Decorative")) family = wxDECORATIVE;
|
||||||
@@ -816,6 +862,7 @@ int wxFontNameDirectory::FindOrCreateFontId(const char *name, int family)
|
|||||||
|
|
||||||
// font exists -> return id
|
// font exists -> return id
|
||||||
if ( (id = GetFontId(name)) ) return id;
|
if ( (id = GetFontId(name)) ) return id;
|
||||||
|
|
||||||
// create new font
|
// create new font
|
||||||
Initialize(id=GetNewFontId(), family, name);
|
Initialize(id=GetNewFontId(), family, name);
|
||||||
return id;
|
return id;
|
||||||
@@ -826,6 +873,7 @@ char *wxFontNameDirectory::GetScreenName(int fontid, int weight, int style)
|
|||||||
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetScreenName(weight, style);
|
return item->GetScreenName(weight, style);
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -835,6 +883,7 @@ char *wxFontNameDirectory::GetPostScriptName(int fontid, int weight, int style)
|
|||||||
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetPostScriptName(weight, style);
|
return item->GetPostScriptName(weight, style);
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -853,6 +902,7 @@ char *wxFontNameDirectory::GetFontName(int fontid)
|
|||||||
wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetName();
|
return item->GetName();
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -863,11 +913,13 @@ int wxFontNameDirectory::GetFontId(const char *name)
|
|||||||
|
|
||||||
table->BeginFind();
|
table->BeginFind();
|
||||||
|
|
||||||
while ( (node = table->Next()) ) {
|
while ( (node = table->Next()) )
|
||||||
|
{
|
||||||
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
||||||
if (!strcmp(name, item->name))
|
if (!strcmp(name, item->name))
|
||||||
return item->id;
|
return item->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -878,6 +930,7 @@ int wxFontNameDirectory::GetFamily(int fontid)
|
|||||||
|
|
||||||
if (item)
|
if (item)
|
||||||
return item->family;
|
return item->family;
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return wxDEFAULT;
|
return wxDEFAULT;
|
||||||
}
|
}
|
||||||
|
@@ -1,415 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: dirdlg.cpp
|
|
||||||
// Purpose: wxDirDialog
|
|
||||||
// Author: Harm van der Heijden and Robert Roebling
|
|
||||||
// Modified by:
|
|
||||||
// Created: 12/12/98
|
|
||||||
// Copyright: (c) Harm van der Heijden and Robert Roebling
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation "dirdlg.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/defs.h"
|
|
||||||
#include "wx/utils.h"
|
|
||||||
#include "wx/dialog.h"
|
|
||||||
#include "wx/button.h"
|
|
||||||
#include "wx/layout.h"
|
|
||||||
#include "wx/msgdlg.h"
|
|
||||||
#include "wx/textdlg.h"
|
|
||||||
#include "wx/filefn.h"
|
|
||||||
#include "wx/cmndata.h"
|
|
||||||
#include "wx/gdicmn.h"
|
|
||||||
#include "wx/dirdlg.h"
|
|
||||||
#include "wx/intl.h"
|
|
||||||
#include "wx/imaglist.h"
|
|
||||||
|
|
||||||
|
|
||||||
/* XPM */
|
|
||||||
static char * icon1_xpm[] = {
|
|
||||||
/* width height ncolors chars_per_pixel */
|
|
||||||
"16 16 6 1",
|
|
||||||
/* colors */
|
|
||||||
" s None c None",
|
|
||||||
". c #000000",
|
|
||||||
"+ c #c0c0c0",
|
|
||||||
"@ c #808080",
|
|
||||||
"# c #ffff00",
|
|
||||||
"$ c #ffffff",
|
|
||||||
/* pixels */
|
|
||||||
" ",
|
|
||||||
" @@@@@ ",
|
|
||||||
" @#+#+#@ ",
|
|
||||||
" @#+#+#+#@@@@@@ ",
|
|
||||||
" @$$$$$$$$$$$$@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @$+#+#+#+#+#+@.",
|
|
||||||
" @$#+#+#+#+#+#@.",
|
|
||||||
" @@@@@@@@@@@@@@.",
|
|
||||||
" ..............",
|
|
||||||
" ",
|
|
||||||
" "};
|
|
||||||
|
|
||||||
|
|
||||||
static const int ID_DIRCTRL = 1000;
|
|
||||||
static const int ID_TEXTCTRL = 1001;
|
|
||||||
static const int ID_OK = 1002;
|
|
||||||
static const int ID_CANCEL = 1003;
|
|
||||||
static const int ID_NEW = 1004;
|
|
||||||
//static const int ID_CHECK = 1005;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirItemData
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
wxDirItemData::wxDirItemData(wxString& path, wxString& name)
|
|
||||||
{
|
|
||||||
m_path = new wxString(path);
|
|
||||||
m_name = new wxString(name);
|
|
||||||
/* Insert logic to detect hidden files here
|
|
||||||
* In UnixLand we just check whether the first char is a dot
|
|
||||||
* For FileNameFromPath read LastDirNameInThisPath ;-) */
|
|
||||||
// m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
|
|
||||||
m_isHidden = FALSE;
|
|
||||||
m_hasSubDirs = HasSubDirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
wxDirItemData:: ~wxDirItemData()
|
|
||||||
{
|
|
||||||
delete m_path;
|
|
||||||
delete m_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxDirItemData::HasSubDirs()
|
|
||||||
{
|
|
||||||
wxString search = *m_path + "/*";
|
|
||||||
wxString path = wxFindFirstFile( search, wxDIR );
|
|
||||||
return (bool)(!path.IsNull());
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxDirCtrl,wxTreeCtrl)
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxDirCtrl,wxTreeCtrl)
|
|
||||||
EVT_TREE_ITEM_EXPANDING (-1, wxDirCtrl::OnExpandItem)
|
|
||||||
EVT_TREE_ITEM_COLLAPSED (-1, wxDirCtrl::OnCollapseItem)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
wxDirCtrl::wxDirCtrl(void)
|
|
||||||
{
|
|
||||||
m_showHidden = FALSE;
|
|
||||||
};
|
|
||||||
|
|
||||||
wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir),
|
|
||||||
const wxPoint& pos, const wxSize& size,
|
|
||||||
const long style, const wxString& name )
|
|
||||||
:
|
|
||||||
wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
|
|
||||||
{
|
|
||||||
m_imageListNormal = new wxImageList(16, 16, TRUE);
|
|
||||||
m_imageListNormal->Add(wxICON(icon1));
|
|
||||||
SetImageList(m_imageListNormal);
|
|
||||||
|
|
||||||
m_showHidden = FALSE;
|
|
||||||
m_rootId = AddRoot("Sections");
|
|
||||||
SetItemHasChildren(m_rootId);
|
|
||||||
Expand(m_rootId); // automatically expand first level
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Quick macro. Don't worry, I'll #undef it later */
|
|
||||||
#define ADD_SECTION(a,b) \
|
|
||||||
if (wxPathExists((a))) { m_paths.Add( (a) ); m_names.Add( (b) ); };
|
|
||||||
|
|
||||||
void wxDirCtrl::SetupSections()
|
|
||||||
{
|
|
||||||
wxString home;
|
|
||||||
|
|
||||||
m_paths.Clear();
|
|
||||||
m_names.Clear();
|
|
||||||
ADD_SECTION("/", _("The Computer") )
|
|
||||||
wxGetHomeDir(&home);
|
|
||||||
ADD_SECTION(home, _("My Home") )
|
|
||||||
ADD_SECTION("/mnt", _("Mounted Devices") )
|
|
||||||
ADD_SECTION("/usr", _("User") )
|
|
||||||
ADD_SECTION("/usr/local", _("User Local") )
|
|
||||||
ADD_SECTION("/var", _("Variables") )
|
|
||||||
ADD_SECTION("/etc", _("Etcetera") )
|
|
||||||
ADD_SECTION("/tmp", _("Temporary") )
|
|
||||||
}
|
|
||||||
#undef ADD_SECTION
|
|
||||||
|
|
||||||
void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
|
|
||||||
{
|
|
||||||
wxTreeItemId id;
|
|
||||||
wxDirItemData *dir_item;
|
|
||||||
|
|
||||||
// wxASSERT(m_paths.Count() == m_names.Count()); ?
|
|
||||||
|
|
||||||
for (unsigned int i=0; i<m_paths.Count(); i++)
|
|
||||||
{
|
|
||||||
dir_item = new wxDirItemData(m_paths[i],m_names[i]);
|
|
||||||
id = AppendItem( parent, m_names[i], 0, -1, dir_item);
|
|
||||||
if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirCtrl::OnExpandItem( const wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
if (event.GetItem() == m_rootId)
|
|
||||||
{
|
|
||||||
SetupSections();
|
|
||||||
CreateItems(m_rootId);
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
// This may take a longish time. Go to busy cursor
|
|
||||||
wxBeginBusyCursor();
|
|
||||||
|
|
||||||
wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem());
|
|
||||||
wxASSERT(data);
|
|
||||||
|
|
||||||
wxString search,path,filename;
|
|
||||||
|
|
||||||
m_paths.Clear();
|
|
||||||
m_names.Clear();
|
|
||||||
search = *(data->m_path) + "/*";
|
|
||||||
for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull();
|
|
||||||
path=wxFindNextFile() ) {
|
|
||||||
filename = wxFileNameFromPath( path );
|
|
||||||
/* Don't add "." and ".." to the tree. I think wxFindNextFile
|
|
||||||
* also checks this, but I don't quite understand what happens
|
|
||||||
* there. Also wxFindNextFile seems to swallow hidden dirs */
|
|
||||||
if ((filename != ".") && (filename != "..")) {
|
|
||||||
m_paths.Add(path);
|
|
||||||
m_names.Add(filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CreateItems(event.GetItem());
|
|
||||||
wxEndBusyCursor();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void wxDirCtrl::OnCollapseItem( const wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
wxTreeItemId child, parent = event.GetItem();
|
|
||||||
long cookie;
|
|
||||||
/* Workaround because DeleteChildren has disapeared (why?) and
|
|
||||||
* CollapseAndReset doesn't work as advertised (deletes parent too) */
|
|
||||||
child = GetFirstChild(parent, cookie);
|
|
||||||
while (child.IsOk()) {
|
|
||||||
Delete(child);
|
|
||||||
/* Not GetNextChild below, because the cookie mechanism can't
|
|
||||||
* handle disappearing children! */
|
|
||||||
child = GetFirstChild(parent, cookie);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxDirDialog
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
|
||||||
IMPLEMENT_CLASS(wxDirDialog, wxDialog)
|
|
||||||
#else
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS( wxDirDialog, wxDialog )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
|
|
||||||
EVT_TREE_KEY_DOWN (ID_DIRCTRL, wxDirDialog::OnTreeKeyDown)
|
|
||||||
EVT_TREE_SEL_CHANGED (ID_DIRCTRL, wxDirDialog::OnTreeSelected)
|
|
||||||
EVT_SIZE ( wxDirDialog::OnSize)
|
|
||||||
EVT_BUTTON (ID_OK, wxDirDialog::OnOK)
|
|
||||||
EVT_BUTTON (ID_CANCEL, wxDirDialog::OnCancel)
|
|
||||||
EVT_BUTTON (ID_NEW, wxDirDialog::OnNew)
|
|
||||||
EVT_TEXT_ENTER (ID_TEXTCTRL, wxDirDialog::OnOK)
|
|
||||||
// EVT_CHECKBOX (ID_CHECK, wxDirDialog::OnCheck)
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
|
|
||||||
const wxString& defaultPath, long style,
|
|
||||||
const wxPoint& pos) :
|
|
||||||
wxDialog(parent, -1, message, pos, wxSize(300,300),
|
|
||||||
wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL)
|
|
||||||
{
|
|
||||||
m_message = message;
|
|
||||||
m_dialogStyle = style;
|
|
||||||
m_parent = parent;
|
|
||||||
|
|
||||||
m_path = defaultPath;
|
|
||||||
|
|
||||||
m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSUNKEN_BORDER );
|
|
||||||
m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition );
|
|
||||||
// m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") );
|
|
||||||
m_ok = new wxButton( this, ID_OK, _("OK") );
|
|
||||||
m_cancel = new wxButton( this, ID_CANCEL, _("Cancel") );
|
|
||||||
m_new = new wxButton( this, ID_NEW, _("New...") );
|
|
||||||
|
|
||||||
// m_check->SetValue(TRUE);
|
|
||||||
m_ok->SetDefault();
|
|
||||||
m_dir->SetFocus();
|
|
||||||
|
|
||||||
doSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnSize(wxSizeEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
doSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::doSize()
|
|
||||||
{
|
|
||||||
/* Figure out height of DirCtrl, which is what is left over by
|
|
||||||
* the textctrl and the buttons. Manually, because I can't seem
|
|
||||||
* to get the constraints stuff to do this */
|
|
||||||
int w,h,h2;
|
|
||||||
|
|
||||||
GetClientSize(&w, &h);
|
|
||||||
m_input->GetSize(&w,&h2); h -= h2;
|
|
||||||
m_ok->GetSize(&w, &h2); h -= h2;
|
|
||||||
//m_check->GetSize(&w, &h2); h -= h2;
|
|
||||||
h -= 20;
|
|
||||||
|
|
||||||
wxLayoutConstraints *c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.Absolute (h);
|
|
||||||
c->top.SameAs (this, wxTop,5);
|
|
||||||
m_dir->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_dir,5);
|
|
||||||
m_input->SetConstraints(c);
|
|
||||||
|
|
||||||
/* c = new wxLayoutConstraints;
|
|
||||||
c->left.SameAs (this, wxLeft,5);
|
|
||||||
c->right.SameAs (this, wxRight,5);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
m_check->SetConstraints(c); */
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.SameAs (m_cancel, wxWidth);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 25);
|
|
||||||
m_ok->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.SameAs (m_cancel, wxWidth);
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->bottom.SameAs (this, wxBottom, 5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 50);
|
|
||||||
m_new->SetConstraints(c);
|
|
||||||
|
|
||||||
c = new wxLayoutConstraints;
|
|
||||||
c->width.AsIs ();
|
|
||||||
c->height.AsIs ();
|
|
||||||
c->top.Below (m_input,5);
|
|
||||||
c->centreX.PercentOf (this, wxWidth, 75);
|
|
||||||
m_cancel->SetConstraints(c);
|
|
||||||
|
|
||||||
Layout();
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxDirDialog::ShowModal()
|
|
||||||
{
|
|
||||||
m_input->SetValue( m_path );
|
|
||||||
return wxDialog::ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnTreeSelected( wxTreeEvent &event )
|
|
||||||
{
|
|
||||||
wxDirItemData *data =
|
|
||||||
(wxDirItemData*)m_dir->GetItemData(event.GetItem());
|
|
||||||
if (data)
|
|
||||||
m_input->SetValue( *(data->m_path) );
|
|
||||||
};
|
|
||||||
|
|
||||||
void wxDirDialog::OnTreeKeyDown( wxKeyEvent &WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
wxDirItemData *data =
|
|
||||||
(wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
|
|
||||||
if (data)
|
|
||||||
m_input->SetValue( *(data->m_path) );
|
|
||||||
};
|
|
||||||
|
|
||||||
void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
m_path = m_input->GetValue();
|
|
||||||
// Does the path exist? (User may have typed anything in m_input)
|
|
||||||
if (wxPathExists(m_path)) {
|
|
||||||
// OK, path exists, we're done.
|
|
||||||
EndModal(wxID_OK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Interact with user, find out if the dir is a typo or to be created
|
|
||||||
wxString msg( _("The directory ") );
|
|
||||||
msg = msg + m_path;
|
|
||||||
msg = msg + _("\ndoes not exist\nCreate it now?") ;
|
|
||||||
wxMessageDialog dialog(this, msg, _("Directory does not exist"), wxYES_NO);
|
|
||||||
if ( dialog.ShowModal() == wxID_YES ) {
|
|
||||||
// Okay, let's make it
|
|
||||||
if (wxMkdir(m_path)) {
|
|
||||||
// The new dir was created okay.
|
|
||||||
EndModal(wxID_OK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Trouble...
|
|
||||||
msg = _("Failed to create directory ")+m_path+
|
|
||||||
_("\n(Do you have the required permissions?)");
|
|
||||||
wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
|
|
||||||
errmsg.ShowModal();
|
|
||||||
// We still don't have a valid dir. Back to the main dialog.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// User has answered NO to create dir.
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
EndModal(wxID_CANCEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
wxTextEntryDialog dialog(this, _("Enter the name of the directory to create"),
|
|
||||||
_("Create New Directory"), m_input->GetValue(), wxOK|wxCANCEL);
|
|
||||||
|
|
||||||
while (dialog.ShowModal() == wxID_OK)
|
|
||||||
{
|
|
||||||
// Okay, let's make it
|
|
||||||
if (wxMkdir(dialog.GetValue())) {
|
|
||||||
// The new dir was created okay.
|
|
||||||
m_path = dialog.GetValue();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
wxString msg = _("Failed to create directory ")+dialog.GetValue()+
|
|
||||||
_("\n(Do you have the required permissions?)") ;
|
|
||||||
wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
|
|
||||||
errmsg.ShowModal();
|
|
||||||
// Show the create dialog again, until user clicks cancel or enters
|
|
||||||
// a valid dir.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void wxDirDialog::OnCheck( wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
printf("Checkbox clicked: %s\n", ( m_check->GetValue() ? "on" : "off" ) );
|
|
||||||
}
|
|
||||||
*/
|
|
@@ -30,6 +30,7 @@ class wxFontRefData: public wxObjectRefData
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
wxFontRefData();
|
wxFontRefData();
|
||||||
|
wxFontRefData( const wxFontRefData& data );
|
||||||
~wxFontRefData();
|
~wxFontRefData();
|
||||||
|
|
||||||
wxList m_scaled_xfonts;
|
wxList m_scaled_xfonts;
|
||||||
@@ -37,7 +38,7 @@ public:
|
|||||||
int m_family, m_style, m_weight;
|
int m_family, m_style, m_weight;
|
||||||
bool m_underlined;
|
bool m_underlined;
|
||||||
int m_fontId;
|
int m_fontId;
|
||||||
char* m_faceName;
|
wxString m_faceName;
|
||||||
|
|
||||||
bool m_byXFontName;
|
bool m_byXFontName;
|
||||||
GdkFont *m_font;
|
GdkFont *m_font;
|
||||||
@@ -54,10 +55,23 @@ wxFontRefData::wxFontRefData() : m_scaled_xfonts(wxKEY_INTEGER)
|
|||||||
m_weight = wxNORMAL;
|
m_weight = wxNORMAL;
|
||||||
m_underlined = FALSE;
|
m_underlined = FALSE;
|
||||||
m_fontId = 0;
|
m_fontId = 0;
|
||||||
m_faceName = (char *) NULL;
|
|
||||||
m_font = (GdkFont *) NULL;
|
m_font = (GdkFont *) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxFontRefData::wxFontRefData( const wxFontRefData& data ) : m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
|
{
|
||||||
|
m_byXFontName = FALSE;
|
||||||
|
m_pointSize = data.m_pointSize;
|
||||||
|
m_family = data.m_family;
|
||||||
|
m_style = data.m_style;
|
||||||
|
m_weight = data.m_weight;
|
||||||
|
m_underlined = data.m_underlined;
|
||||||
|
m_fontId = data.m_fontId;
|
||||||
|
m_faceName = data.m_faceName;
|
||||||
|
m_font = (GdkFont *) NULL;
|
||||||
|
if (data.m_font) m_font = gdk_font_ref( data.m_font );
|
||||||
|
}
|
||||||
|
|
||||||
wxFontRefData::~wxFontRefData()
|
wxFontRefData::~wxFontRefData()
|
||||||
{
|
{
|
||||||
wxNode *node = m_scaled_xfonts.First();
|
wxNode *node = m_scaled_xfonts.First();
|
||||||
@@ -68,11 +82,6 @@ wxFontRefData::~wxFontRefData()
|
|||||||
gdk_font_unref( font );
|
gdk_font_unref( font );
|
||||||
node = next;
|
node = next;
|
||||||
}
|
}
|
||||||
if (m_faceName)
|
|
||||||
{
|
|
||||||
delete m_faceName;
|
|
||||||
m_faceName = (char *) NULL;
|
|
||||||
}
|
|
||||||
if (m_font) gdk_font_unref( m_font );
|
if (m_font) gdk_font_unref( m_font );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,50 +106,36 @@ wxFont::wxFont( char *xFontName )
|
|||||||
M_FONTDATA->m_font = gdk_font_load( xFontName );
|
M_FONTDATA->m_font = gdk_font_load( xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont(int PointSize, int FontIdOrFamily, int Style, int Weight,
|
wxFont::wxFont( int pointSize, int family, int style, int weight, bool underlined = FALSE,
|
||||||
bool Underlined, const char* Face)
|
const wxString& face = wxEmptyString )
|
||||||
{
|
{
|
||||||
m_refData = new wxFontRefData();
|
m_refData = new wxFontRefData();
|
||||||
|
|
||||||
if (FontIdOrFamily == wxDEFAULT) FontIdOrFamily = wxSWISS;
|
if (family == wxDEFAULT) family = wxSWISS;
|
||||||
M_FONTDATA->m_family = FontIdOrFamily;
|
M_FONTDATA->m_family = family;
|
||||||
|
|
||||||
if ((M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL) )
|
if (!face.IsEmpty())
|
||||||
{
|
{
|
||||||
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, FontIdOrFamily );
|
M_FONTDATA->m_faceName = face;
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
|
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( face, family );
|
||||||
|
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
M_FONTDATA->m_fontId = FontIdOrFamily;
|
M_FONTDATA->m_fontId = family;
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( FontIdOrFamily );
|
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( family );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Style == wxDEFAULT) Style = wxNORMAL;
|
if (style == wxDEFAULT) style = wxNORMAL;
|
||||||
M_FONTDATA->m_style = Style;
|
M_FONTDATA->m_style = style;
|
||||||
if (Weight == wxDEFAULT) Weight = wxNORMAL;
|
if (weight == wxDEFAULT) weight = wxNORMAL;
|
||||||
M_FONTDATA->m_weight = Weight;
|
M_FONTDATA->m_weight = weight;
|
||||||
if (PointSize == wxDEFAULT) PointSize = 12;
|
if (pointSize == wxDEFAULT) pointSize = 12;
|
||||||
M_FONTDATA->m_pointSize = PointSize;
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
M_FONTDATA->m_underlined = Underlined;
|
M_FONTDATA->m_underlined = underlined;
|
||||||
|
|
||||||
if (wxTheFontList) wxTheFontList->Append( this );
|
if (wxTheFontList) wxTheFontList->Append( this );
|
||||||
}
|
|
||||||
|
|
||||||
wxFont::wxFont(int PointSize, const char *Face, int Family, int Style,
|
|
||||||
int Weight, bool Underlined)
|
|
||||||
{
|
|
||||||
m_refData = new wxFontRefData();
|
|
||||||
|
|
||||||
M_FONTDATA->m_fontId = wxTheFontNameDirectory->FindOrCreateFontId( Face, Family );
|
|
||||||
M_FONTDATA->m_faceName = (Face) ? copystring(Face) : (char*)NULL;
|
|
||||||
M_FONTDATA->m_family = wxTheFontNameDirectory->GetFamily( M_FONTDATA->m_fontId );
|
|
||||||
M_FONTDATA->m_style = Style;
|
|
||||||
M_FONTDATA->m_weight = Weight;
|
|
||||||
M_FONTDATA->m_pointSize = PointSize;
|
|
||||||
M_FONTDATA->m_underlined = Underlined;
|
|
||||||
|
|
||||||
if (wxTheFontList) wxTheFontList->Append( this );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont( const wxFont& font )
|
wxFont::wxFont( const wxFont& font )
|
||||||
@@ -184,14 +179,6 @@ int wxFont::GetPointSize() const
|
|||||||
return M_FONTDATA->m_pointSize;
|
return M_FONTDATA->m_pointSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString wxFont::GetFaceString() const
|
|
||||||
{
|
|
||||||
wxCHECK_MSG( Ok(), "", "invalid font" );
|
|
||||||
|
|
||||||
wxString s = wxTheFontNameDirectory->GetFontName( M_FONTDATA->m_fontId );
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxFont::GetFaceName() const
|
wxString wxFont::GetFaceName() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( Ok(), "", "invalid font" );
|
wxCHECK_MSG( Ok(), "", "invalid font" );
|
||||||
@@ -283,6 +270,62 @@ bool wxFont::GetUnderlined() const
|
|||||||
return M_FONTDATA->m_underlined;
|
return M_FONTDATA->m_underlined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxFont::Unshare()
|
||||||
|
{
|
||||||
|
if (!m_refData)
|
||||||
|
{
|
||||||
|
m_refData = new wxFontRefData();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);
|
||||||
|
UnRef();
|
||||||
|
m_refData = ref;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetPointSize(int pointSize)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetFamily(int family)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_family = family;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetStyle(int style)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_style = style;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetWeight(int weight)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetFaceName(const wxString& faceName)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_faceName = faceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetUnderlined(bool underlined)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_underlined = underlined;
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// get internal representation of font
|
// get internal representation of font
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -699,7 +742,8 @@ found:
|
|||||||
// wxFontNameItem
|
// wxFontNameItem
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxFontNameItem : public wxObject {
|
class wxFontNameItem : public wxObject
|
||||||
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxFontNameItem)
|
DECLARE_DYNAMIC_CLASS(wxFontNameItem)
|
||||||
public:
|
public:
|
||||||
wxFontNameItem(const char *name, int id, int family);
|
wxFontNameItem(const char *name, int id, int family);
|
||||||
@@ -767,7 +811,8 @@ wxFontNameDirectory::~wxFontNameDirectory()
|
|||||||
// Cleanup wxFontNameItems allocated
|
// Cleanup wxFontNameItems allocated
|
||||||
table->BeginFind();
|
table->BeginFind();
|
||||||
wxNode *node = table->Next();
|
wxNode *node = table->Next();
|
||||||
while (node) {
|
while (node)
|
||||||
|
{
|
||||||
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
||||||
delete item;
|
delete item;
|
||||||
node = table->Next();
|
node = table->Next();
|
||||||
@@ -797,7 +842,8 @@ void wxFontNameDirectory::Initialize(int fontid, int family, const char *resname
|
|||||||
|
|
||||||
sprintf(resource, "Family%s", resname);
|
sprintf(resource, "Family%s", resname);
|
||||||
SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
|
SearchResource((const char *)resource, (const char **) NULL, 0, (char **)&fam);
|
||||||
if (fam) {
|
if (fam)
|
||||||
|
{
|
||||||
if (!strcmp(fam, "Default")) family = wxDEFAULT;
|
if (!strcmp(fam, "Default")) family = wxDEFAULT;
|
||||||
else if (!strcmp(fam, "Roman")) family = wxROMAN;
|
else if (!strcmp(fam, "Roman")) family = wxROMAN;
|
||||||
else if (!strcmp(fam, "Decorative")) family = wxDECORATIVE;
|
else if (!strcmp(fam, "Decorative")) family = wxDECORATIVE;
|
||||||
@@ -816,6 +862,7 @@ int wxFontNameDirectory::FindOrCreateFontId(const char *name, int family)
|
|||||||
|
|
||||||
// font exists -> return id
|
// font exists -> return id
|
||||||
if ( (id = GetFontId(name)) ) return id;
|
if ( (id = GetFontId(name)) ) return id;
|
||||||
|
|
||||||
// create new font
|
// create new font
|
||||||
Initialize(id=GetNewFontId(), family, name);
|
Initialize(id=GetNewFontId(), family, name);
|
||||||
return id;
|
return id;
|
||||||
@@ -826,6 +873,7 @@ char *wxFontNameDirectory::GetScreenName(int fontid, int weight, int style)
|
|||||||
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetScreenName(weight, style);
|
return item->GetScreenName(weight, style);
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -835,6 +883,7 @@ char *wxFontNameDirectory::GetPostScriptName(int fontid, int weight, int style)
|
|||||||
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem*)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetPostScriptName(weight, style);
|
return item->GetPostScriptName(weight, style);
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -853,6 +902,7 @@ char *wxFontNameDirectory::GetFontName(int fontid)
|
|||||||
wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
|
wxFontNameItem *item = (wxFontNameItem *)table->Get(fontid); // find font
|
||||||
if (item)
|
if (item)
|
||||||
return item->GetName();
|
return item->GetName();
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@@ -863,11 +913,13 @@ int wxFontNameDirectory::GetFontId(const char *name)
|
|||||||
|
|
||||||
table->BeginFind();
|
table->BeginFind();
|
||||||
|
|
||||||
while ( (node = table->Next()) ) {
|
while ( (node = table->Next()) )
|
||||||
|
{
|
||||||
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
wxFontNameItem *item = (wxFontNameItem*)node->Data();
|
||||||
if (!strcmp(name, item->name))
|
if (!strcmp(name, item->name))
|
||||||
return item->id;
|
return item->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -878,6 +930,7 @@ int wxFontNameDirectory::GetFamily(int fontid)
|
|||||||
|
|
||||||
if (item)
|
if (item)
|
||||||
return item->family;
|
return item->family;
|
||||||
|
|
||||||
// font does not exist
|
// font does not exist
|
||||||
return wxDEFAULT;
|
return wxDEFAULT;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user