Make the wxART_* constants const wxStrings with static storage duration

The pre-3.1.4 definitions of the constants were just string literals,
while the type were wxString typedefs. To avoid implicit conversion
these were converted to actual wxStrings.

While the interface now matched the implementation, this has several
drawbacks:
- every use of the "constant" now is a string construction at runtime
- the constant now is an rvalue, i.e. it is impossible to take its
  address.

The latter breaks its use from wxPython.

The IDs are moved to a separate file which can be included multiple
times, once from the header to have the declarations in place, and once
to instantiate the wxStrings. Using a common file avoids the declaration
and definition going out of sync.
This commit is contained in:
Stefan Brüns 2020-07-26 08:04:23 +02:00
parent 2256dac384
commit 128e3ff123
7 changed files with 176 additions and 147 deletions

View File

@ -3820,6 +3820,7 @@ COND_USE_GUI_1_ALL_GUI_HEADERS = \
wx/anidecod.h \
wx/animdecod.h \
wx/appprogress.h \
wx/artids.h \
wx/artprov.h \
wx/bitmap.h \
wx/bookctrl.h \

View File

@ -1131,6 +1131,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/anidecod.h
wx/animdecod.h
wx/appprogress.h
wx/artids.h
wx/artprov.h
wx/bitmap.h
wx/bookctrl.h

View File

@ -1039,6 +1039,7 @@ set(GUI_CMN_HDR
wx/anidecod.h
wx/animdecod.h
wx/appprogress.h
wx/artids.h
wx/artprov.h
wx/bitmap.h
wx/bookctrl.h

96
include/wx/artids.h Normal file
View File

@ -0,0 +1,96 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/artids.h
// Purpose: wxArtProvider client and art IDs
// Author: Stefan Brüns
// Modified by:
// Created: 2020-07-31 (extracted from artprov.h)
// Copyright: (c) Stefan Brüns
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// This file deliberately omits include guards so it can
// be included and processed multiple times
// ----------------------------------------------------------------------------
// Art clients
// ----------------------------------------------------------------------------
wxART_MAKE_CLIENT_ID(wxART_TOOLBAR)
wxART_MAKE_CLIENT_ID(wxART_MENU)
wxART_MAKE_CLIENT_ID(wxART_FRAME_ICON)
wxART_MAKE_CLIENT_ID(wxART_CMN_DIALOG)
wxART_MAKE_CLIENT_ID(wxART_HELP_BROWSER)
wxART_MAKE_CLIENT_ID(wxART_MESSAGE_BOX)
wxART_MAKE_CLIENT_ID(wxART_BUTTON)
wxART_MAKE_CLIENT_ID(wxART_LIST)
wxART_MAKE_CLIENT_ID(wxART_OTHER)
// ----------------------------------------------------------------------------
// Art IDs
// ----------------------------------------------------------------------------
wxART_MAKE_ART_ID(wxART_ADD_BOOKMARK)
wxART_MAKE_ART_ID(wxART_DEL_BOOKMARK)
wxART_MAKE_ART_ID(wxART_HELP_SIDE_PANEL)
wxART_MAKE_ART_ID(wxART_HELP_SETTINGS)
wxART_MAKE_ART_ID(wxART_HELP_BOOK)
wxART_MAKE_ART_ID(wxART_HELP_FOLDER)
wxART_MAKE_ART_ID(wxART_HELP_PAGE)
wxART_MAKE_ART_ID(wxART_GO_BACK)
wxART_MAKE_ART_ID(wxART_GO_FORWARD)
wxART_MAKE_ART_ID(wxART_GO_UP)
wxART_MAKE_ART_ID(wxART_GO_DOWN)
wxART_MAKE_ART_ID(wxART_GO_TO_PARENT)
wxART_MAKE_ART_ID(wxART_GO_HOME)
wxART_MAKE_ART_ID(wxART_GOTO_FIRST)
wxART_MAKE_ART_ID(wxART_GOTO_LAST)
wxART_MAKE_ART_ID(wxART_FILE_OPEN)
wxART_MAKE_ART_ID(wxART_FILE_SAVE)
wxART_MAKE_ART_ID(wxART_FILE_SAVE_AS)
wxART_MAKE_ART_ID(wxART_PRINT)
wxART_MAKE_ART_ID(wxART_HELP)
wxART_MAKE_ART_ID(wxART_TIP)
wxART_MAKE_ART_ID(wxART_REPORT_VIEW)
wxART_MAKE_ART_ID(wxART_LIST_VIEW)
wxART_MAKE_ART_ID(wxART_NEW_DIR)
wxART_MAKE_ART_ID(wxART_HARDDISK)
wxART_MAKE_ART_ID(wxART_FLOPPY)
wxART_MAKE_ART_ID(wxART_CDROM)
wxART_MAKE_ART_ID(wxART_REMOVABLE)
wxART_MAKE_ART_ID(wxART_FOLDER)
wxART_MAKE_ART_ID(wxART_FOLDER_OPEN)
wxART_MAKE_ART_ID(wxART_GO_DIR_UP)
wxART_MAKE_ART_ID(wxART_EXECUTABLE_FILE)
wxART_MAKE_ART_ID(wxART_NORMAL_FILE)
wxART_MAKE_ART_ID(wxART_TICK_MARK)
wxART_MAKE_ART_ID(wxART_CROSS_MARK)
wxART_MAKE_ART_ID(wxART_ERROR)
wxART_MAKE_ART_ID(wxART_QUESTION)
wxART_MAKE_ART_ID(wxART_WARNING)
wxART_MAKE_ART_ID(wxART_INFORMATION)
wxART_MAKE_ART_ID(wxART_MISSING_IMAGE)
wxART_MAKE_ART_ID(wxART_COPY)
wxART_MAKE_ART_ID(wxART_CUT)
wxART_MAKE_ART_ID(wxART_PASTE)
wxART_MAKE_ART_ID(wxART_DELETE)
wxART_MAKE_ART_ID(wxART_NEW)
wxART_MAKE_ART_ID(wxART_UNDO)
wxART_MAKE_ART_ID(wxART_REDO)
wxART_MAKE_ART_ID(wxART_PLUS)
wxART_MAKE_ART_ID(wxART_MINUS)
wxART_MAKE_ART_ID(wxART_CLOSE)
wxART_MAKE_ART_ID(wxART_QUIT)
wxART_MAKE_ART_ID(wxART_FIND)
wxART_MAKE_ART_ID(wxART_FIND_AND_REPLACE)
wxART_MAKE_ART_ID(wxART_FULL_SCREEN)
wxART_MAKE_ART_ID(wxART_EDIT)

View File

@ -28,92 +28,16 @@ typedef wxString wxArtClient;
typedef wxString wxArtID;
#define wxART_MAKE_CLIENT_ID_FROM_STR(id) ((id) + wxASCII_STR("_C"))
#define wxART_MAKE_CLIENT_ID(id) wxASCII_STR(#id "_C")
#define wxART_MAKE_ART_ID_FROM_STR(id) (id)
#define wxART_MAKE_ART_ID(id) wxASCII_STR(#id)
// ----------------------------------------------------------------------------
// Art clients
// ----------------------------------------------------------------------------
#define wxART_MAKE_CLIENT_ID(id) \
extern WXDLLIMPEXP_DATA_CORE(const wxArtClient) id;
#define wxART_MAKE_ART_ID(id) \
extern WXDLLIMPEXP_DATA_CORE(const wxArtID) id;
#define wxART_TOOLBAR wxART_MAKE_CLIENT_ID(wxART_TOOLBAR)
#define wxART_MENU wxART_MAKE_CLIENT_ID(wxART_MENU)
#define wxART_FRAME_ICON wxART_MAKE_CLIENT_ID(wxART_FRAME_ICON)
#define wxART_CMN_DIALOG wxART_MAKE_CLIENT_ID(wxART_CMN_DIALOG)
#define wxART_HELP_BROWSER wxART_MAKE_CLIENT_ID(wxART_HELP_BROWSER)
#define wxART_MESSAGE_BOX wxART_MAKE_CLIENT_ID(wxART_MESSAGE_BOX)
#define wxART_BUTTON wxART_MAKE_CLIENT_ID(wxART_BUTTON)
#define wxART_LIST wxART_MAKE_CLIENT_ID(wxART_LIST)
#define wxART_OTHER wxART_MAKE_CLIENT_ID(wxART_OTHER)
// ----------------------------------------------------------------------------
// Art IDs
// ----------------------------------------------------------------------------
#define wxART_ADD_BOOKMARK wxART_MAKE_ART_ID(wxART_ADD_BOOKMARK)
#define wxART_DEL_BOOKMARK wxART_MAKE_ART_ID(wxART_DEL_BOOKMARK)
#define wxART_HELP_SIDE_PANEL wxART_MAKE_ART_ID(wxART_HELP_SIDE_PANEL)
#define wxART_HELP_SETTINGS wxART_MAKE_ART_ID(wxART_HELP_SETTINGS)
#define wxART_HELP_BOOK wxART_MAKE_ART_ID(wxART_HELP_BOOK)
#define wxART_HELP_FOLDER wxART_MAKE_ART_ID(wxART_HELP_FOLDER)
#define wxART_HELP_PAGE wxART_MAKE_ART_ID(wxART_HELP_PAGE)
#define wxART_GO_BACK wxART_MAKE_ART_ID(wxART_GO_BACK)
#define wxART_GO_FORWARD wxART_MAKE_ART_ID(wxART_GO_FORWARD)
#define wxART_GO_UP wxART_MAKE_ART_ID(wxART_GO_UP)
#define wxART_GO_DOWN wxART_MAKE_ART_ID(wxART_GO_DOWN)
#define wxART_GO_TO_PARENT wxART_MAKE_ART_ID(wxART_GO_TO_PARENT)
#define wxART_GO_HOME wxART_MAKE_ART_ID(wxART_GO_HOME)
#define wxART_GOTO_FIRST wxART_MAKE_ART_ID(wxART_GOTO_FIRST)
#define wxART_GOTO_LAST wxART_MAKE_ART_ID(wxART_GOTO_LAST)
#define wxART_FILE_OPEN wxART_MAKE_ART_ID(wxART_FILE_OPEN)
#define wxART_FILE_SAVE wxART_MAKE_ART_ID(wxART_FILE_SAVE)
#define wxART_FILE_SAVE_AS wxART_MAKE_ART_ID(wxART_FILE_SAVE_AS)
#define wxART_PRINT wxART_MAKE_ART_ID(wxART_PRINT)
#define wxART_HELP wxART_MAKE_ART_ID(wxART_HELP)
#define wxART_TIP wxART_MAKE_ART_ID(wxART_TIP)
#define wxART_REPORT_VIEW wxART_MAKE_ART_ID(wxART_REPORT_VIEW)
#define wxART_LIST_VIEW wxART_MAKE_ART_ID(wxART_LIST_VIEW)
#define wxART_NEW_DIR wxART_MAKE_ART_ID(wxART_NEW_DIR)
#define wxART_HARDDISK wxART_MAKE_ART_ID(wxART_HARDDISK)
#define wxART_FLOPPY wxART_MAKE_ART_ID(wxART_FLOPPY)
#define wxART_CDROM wxART_MAKE_ART_ID(wxART_CDROM)
#define wxART_REMOVABLE wxART_MAKE_ART_ID(wxART_REMOVABLE)
#define wxART_FOLDER wxART_MAKE_ART_ID(wxART_FOLDER)
#define wxART_FOLDER_OPEN wxART_MAKE_ART_ID(wxART_FOLDER_OPEN)
#define wxART_GO_DIR_UP wxART_MAKE_ART_ID(wxART_GO_DIR_UP)
#define wxART_EXECUTABLE_FILE wxART_MAKE_ART_ID(wxART_EXECUTABLE_FILE)
#define wxART_NORMAL_FILE wxART_MAKE_ART_ID(wxART_NORMAL_FILE)
#define wxART_TICK_MARK wxART_MAKE_ART_ID(wxART_TICK_MARK)
#define wxART_CROSS_MARK wxART_MAKE_ART_ID(wxART_CROSS_MARK)
#define wxART_ERROR wxART_MAKE_ART_ID(wxART_ERROR)
#define wxART_QUESTION wxART_MAKE_ART_ID(wxART_QUESTION)
#define wxART_WARNING wxART_MAKE_ART_ID(wxART_WARNING)
#define wxART_INFORMATION wxART_MAKE_ART_ID(wxART_INFORMATION)
#define wxART_MISSING_IMAGE wxART_MAKE_ART_ID(wxART_MISSING_IMAGE)
#define wxART_COPY wxART_MAKE_ART_ID(wxART_COPY)
#define wxART_CUT wxART_MAKE_ART_ID(wxART_CUT)
#define wxART_PASTE wxART_MAKE_ART_ID(wxART_PASTE)
#define wxART_DELETE wxART_MAKE_ART_ID(wxART_DELETE)
#define wxART_NEW wxART_MAKE_ART_ID(wxART_NEW)
#define wxART_UNDO wxART_MAKE_ART_ID(wxART_UNDO)
#define wxART_REDO wxART_MAKE_ART_ID(wxART_REDO)
#define wxART_PLUS wxART_MAKE_ART_ID(wxART_PLUS)
#define wxART_MINUS wxART_MAKE_ART_ID(wxART_MINUS)
#define wxART_CLOSE wxART_MAKE_ART_ID(wxART_CLOSE)
#define wxART_QUIT wxART_MAKE_ART_ID(wxART_QUIT)
#define wxART_FIND wxART_MAKE_ART_ID(wxART_FIND)
#define wxART_FIND_AND_REPLACE wxART_MAKE_ART_ID(wxART_FIND_AND_REPLACE)
#define wxART_FULL_SCREEN wxART_MAKE_ART_ID(wxART_FULL_SCREEN)
#define wxART_EDIT wxART_MAKE_ART_ID(wxART_EDIT)
#include "wx/artids.h"
#undef wxART_MAKE_ART_ID
#undef wxART_MAKE_CLIENT_ID
// ----------------------------------------------------------------------------
// wxArtProvider class

View File

@ -16,80 +16,80 @@ typedef wxString wxArtClient;
typedef wxString wxArtID;
wxArtClient wxART_TOOLBAR;
wxArtClient wxART_MENU;
wxArtClient wxART_FRAME_ICON;
const wxArtClient wxART_TOOLBAR;
const wxArtClient wxART_MENU;
const wxArtClient wxART_FRAME_ICON;
wxArtClient wxART_CMN_DIALOG;
wxArtClient wxART_HELP_BROWSER;
wxArtClient wxART_MESSAGE_BOX;
wxArtClient wxART_BUTTON;
wxArtClient wxART_LIST;
const wxArtClient wxART_CMN_DIALOG;
const wxArtClient wxART_HELP_BROWSER;
const wxArtClient wxART_MESSAGE_BOX;
const wxArtClient wxART_BUTTON;
const wxArtClient wxART_LIST;
wxArtClient wxART_OTHER;
const wxArtClient wxART_OTHER;
wxArtID wxART_ADD_BOOKMARK;
wxArtID wxART_DEL_BOOKMARK;
wxArtID wxART_HELP_SIDE_PANEL;
wxArtID wxART_HELP_SETTINGS;
wxArtID wxART_HELP_BOOK;
wxArtID wxART_HELP_FOLDER;
wxArtID wxART_HELP_PAGE;
wxArtID wxART_GO_BACK;
wxArtID wxART_GO_FORWARD;
wxArtID wxART_GO_UP;
wxArtID wxART_GO_DOWN;
wxArtID wxART_GO_TO_PARENT;
wxArtID wxART_GO_HOME;
wxArtID wxART_GOTO_FIRST;
wxArtID wxART_GOTO_LAST;
wxArtID wxART_FILE_OPEN;
wxArtID wxART_FILE_SAVE;
wxArtID wxART_FILE_SAVE_AS;
wxArtID wxART_PRINT;
wxArtID wxART_HELP;
wxArtID wxART_TIP;
wxArtID wxART_REPORT_VIEW;
wxArtID wxART_LIST_VIEW;
wxArtID wxART_NEW_DIR;
wxArtID wxART_HARDDISK;
wxArtID wxART_FLOPPY;
wxArtID wxART_CDROM;
wxArtID wxART_REMOVABLE;
wxArtID wxART_FOLDER;
wxArtID wxART_FOLDER_OPEN;
wxArtID wxART_GO_DIR_UP;
wxArtID wxART_EXECUTABLE_FILE;
wxArtID wxART_NORMAL_FILE;
wxArtID wxART_TICK_MARK;
wxArtID wxART_CROSS_MARK;
wxArtID wxART_ERROR;
wxArtID wxART_QUESTION;
wxArtID wxART_WARNING;
wxArtID wxART_INFORMATION;
wxArtID wxART_MISSING_IMAGE;
const wxArtID wxART_ADD_BOOKMARK;
const wxArtID wxART_DEL_BOOKMARK;
const wxArtID wxART_HELP_SIDE_PANEL;
const wxArtID wxART_HELP_SETTINGS;
const wxArtID wxART_HELP_BOOK;
const wxArtID wxART_HELP_FOLDER;
const wxArtID wxART_HELP_PAGE;
const wxArtID wxART_GO_BACK;
const wxArtID wxART_GO_FORWARD;
const wxArtID wxART_GO_UP;
const wxArtID wxART_GO_DOWN;
const wxArtID wxART_GO_TO_PARENT;
const wxArtID wxART_GO_HOME;
const wxArtID wxART_GOTO_FIRST;
const wxArtID wxART_GOTO_LAST;
const wxArtID wxART_FILE_OPEN;
const wxArtID wxART_FILE_SAVE;
const wxArtID wxART_FILE_SAVE_AS;
const wxArtID wxART_PRINT;
const wxArtID wxART_HELP;
const wxArtID wxART_TIP;
const wxArtID wxART_REPORT_VIEW;
const wxArtID wxART_LIST_VIEW;
const wxArtID wxART_NEW_DIR;
const wxArtID wxART_HARDDISK;
const wxArtID wxART_FLOPPY;
const wxArtID wxART_CDROM;
const wxArtID wxART_REMOVABLE;
const wxArtID wxART_FOLDER;
const wxArtID wxART_FOLDER_OPEN;
const wxArtID wxART_GO_DIR_UP;
const wxArtID wxART_EXECUTABLE_FILE;
const wxArtID wxART_NORMAL_FILE;
const wxArtID wxART_TICK_MARK;
const wxArtID wxART_CROSS_MARK;
const wxArtID wxART_ERROR;
const wxArtID wxART_QUESTION;
const wxArtID wxART_WARNING;
const wxArtID wxART_INFORMATION;
const wxArtID wxART_MISSING_IMAGE;
wxArtID wxART_COPY;
wxArtID wxART_CUT;
wxArtID wxART_PASTE;
wxArtID wxART_DELETE;
wxArtID wxART_NEW;
const wxArtID wxART_COPY;
const wxArtID wxART_CUT;
const wxArtID wxART_PASTE;
const wxArtID wxART_DELETE;
const wxArtID wxART_NEW;
wxArtID wxART_UNDO;
wxArtID wxART_REDO;
const wxArtID wxART_UNDO;
const wxArtID wxART_REDO;
wxArtID wxART_PLUS;
wxArtID wxART_MINUS;
const wxArtID wxART_PLUS;
const wxArtID wxART_MINUS;
wxArtID wxART_CLOSE;
wxArtID wxART_QUIT;
const wxArtID wxART_CLOSE;
const wxArtID wxART_QUIT;
wxArtID wxART_FIND;
wxArtID wxART_FIND_AND_REPLACE;
const wxArtID wxART_FIND;
const wxArtID wxART_FIND_AND_REPLACE;
wxArtID wxART_FULL_SCREEN;
wxArtID wxART_EDIT;
const wxArtID wxART_FULL_SCREEN;
const wxArtID wxART_EDIT;
/**

View File

@ -21,6 +21,12 @@
#include "wx/artprov.h"
#define wxART_MAKE_CLIENT_ID(id) \
extern WXDLLIMPEXP_DATA_CORE(const wxArtClient) id = wxASCII_STR(#id "_C");
#define wxART_MAKE_ART_ID(id) \
extern WXDLLIMPEXP_DATA_CORE(const wxArtID) id = wxASCII_STR(#id);
#include "wx/artids.h"
#ifndef WX_PRECOMP
#include "wx/list.h"
#include "wx/log.h"