X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03f68f123bc79f23ff77821cfe80bfa76b0e68c4..d47631c8f54fdd78c51de318d4128461a841cf57:/utils/dialoged/src/symbtabl.cpp diff --git a/utils/dialoged/src/symbtabl.cpp b/utils/dialoged/src/symbtabl.cpp index a2f42f5a93..b82e0ccb37 100644 --- a/utils/dialoged/src/symbtabl.cpp +++ b/utils/dialoged/src/symbtabl.cpp @@ -46,6 +46,9 @@ wxResourceSymbolTable::~wxResourceSymbolTable() bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename) { wxFile file; + if (!wxFileExists(filename)) + return FALSE; + if (!file.Open(filename, wxFile::read)) return FALSE; @@ -53,10 +56,13 @@ bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename) if (len == -1) return FALSE; + Clear(); + AddStandardSymbols(); + wxString str; char* p = str.GetWriteBuf(len + 1); - if (file.Read(p, len) == ofsInvalid) + if (file.Read(p, len) == wxFile::fd_invalid) { str.UngetWriteBuf(); return FALSE; @@ -64,7 +70,7 @@ bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename) str.UngetWriteBuf(); // Look for #define occurrences - size_t pos = str.Find("#define"); + int pos = str.Find("#define"); while (pos != -1) { size_t len = str.Length(); @@ -98,7 +104,7 @@ bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename) wxString numStr(str.Mid(startNum, (endNum - startNum + 1))); - long id = atol(numStr); + int id = atol(numStr); AddSymbol(symbol, id); @@ -115,18 +121,28 @@ bool wxResourceSymbolTable::WriteIncludeFile(const wxString& filename) if (!file.Open(filename, wxFile::write)) return FALSE; + wxString fileOnly(wxFileNameFromPath(filename)); + wxString line; + line.Printf("/*\n * %s\n * Window identifiers file written by Dialog Editor\n */\n\n", + (const char*) fileOnly); + + file.Write(line, line.Length()); + m_hashTable.BeginFind(); wxNode* node = m_hashTable.Next(); while (node) { char* str = node->key.string; - long id = (long) node->Data() ; + int id = (int) node->Data() ; - wxString line; - line.Printf("#define %s %ld\n", str, id); + if (!IsStandardSymbol(str)) + { + wxString line; + line.Printf("#define %s %ld\n", str, id); - file.Write(line, line.Length()); + file.Write(line, line.Length()); + } node = m_hashTable.Next(); } @@ -138,14 +154,27 @@ void wxResourceSymbolTable::Clear() m_hashTable.Clear(); } -bool wxResourceSymbolTable::AddSymbol(const wxString& symbol, long id) +bool wxResourceSymbolTable::AddSymbol(const wxString& symbol, int id) { m_hashTable.Put(symbol, (wxObject*) id); return TRUE; } +bool wxResourceSymbolTable::RemoveSymbol(const wxString& symbol) +{ + m_hashTable.Delete(symbol); + return TRUE; +} + +bool wxResourceSymbolTable::RemoveSymbol(int id) +{ + wxString symbol(GetSymbolForId(id)); + m_hashTable.Delete(symbol); + return TRUE; +} + // Accessors -wxString wxResourceSymbolTable::GetSymbolForId(long id) +wxString wxResourceSymbolTable::GetSymbolForId(int id) { m_hashTable.BeginFind(); @@ -153,7 +182,7 @@ wxString wxResourceSymbolTable::GetSymbolForId(long id) while (node) { char* str = node->key.string; - if (str && ( ((long) node->Data()) == id) ) + if (str && ( ((int) node->Data()) == id) ) return wxString(str); node = m_hashTable.Next(); @@ -161,9 +190,9 @@ wxString wxResourceSymbolTable::GetSymbolForId(long id) return wxString(""); } -long wxResourceSymbolTable::GetIdForSymbol(const wxString& symbol) +int wxResourceSymbolTable::GetIdForSymbol(const wxString& symbol) { - return (long) m_hashTable.Get(symbol); + return (int) m_hashTable.Get(symbol); } bool wxResourceSymbolTable::SymbolExists(const wxString& symbol) const @@ -171,3 +200,134 @@ bool wxResourceSymbolTable::SymbolExists(const wxString& symbol) const return (m_hashTable.Get(symbol) != NULL); } +bool wxResourceSymbolTable::IdExists(int id) +{ + m_hashTable.BeginFind(); + + wxNode* node = m_hashTable.Next(); + while (node) + { + if ( (((int) node->Data()) == id) ) + return TRUE; + + node = m_hashTable.Next(); + } + return FALSE; +} + +int wxResourceSymbolTable::FindHighestId() +{ + int highest = 0; + + m_hashTable.BeginFind(); + + wxNode* node = m_hashTable.Next(); + while (node) + { + int id = ((int) node->Data()); + if (id > highest) + highest = id; + + node = m_hashTable.Next(); + } + + // Make sure we don't clash with future standard wxWindows ids + if (highest <= wxID_HIGHEST) + highest = wxID_HIGHEST + 1; + return highest; +} + +/* + * A table of the standard identifiers + */ + +struct wxStandardSymbolStruct +{ + char* m_name; + int m_id; +}; + +static wxStandardSymbolStruct sg_StandardSymbols[] = +{ + { "wxID_OK", wxID_OK }, + { "wxID_CANCEL", wxID_CANCEL }, + { "wxID_APPLY", wxID_APPLY }, + { "wxID_HELP", wxID_HELP }, + { "wxID_STATIC", wxID_STATIC }, + { "wxID_YES", wxID_YES }, + { "wxID_NO", wxID_NO }, + + { "wxID_OPEN", wxID_OPEN }, + { "wxID_CLOSE", wxID_CLOSE }, + { "wxID_NEW", wxID_NEW }, + { "wxID_SAVE", wxID_SAVE }, + { "wxID_SAVEAS", wxID_SAVEAS }, + { "wxID_REVERT", wxID_REVERT }, + { "wxID_EXIT", wxID_EXIT }, + { "wxID_UNDO", wxID_UNDO }, + { "wxID_REDO", wxID_REDO }, + { "wxID_PRINT", wxID_PRINT }, + { "wxID_PRINT_SETUP", wxID_PRINT_SETUP }, + { "wxID_PREVIEW", wxID_PREVIEW }, + { "wxID_ABOUT", wxID_ABOUT }, + { "wxID_HELP_CONTENTS", wxID_HELP_CONTENTS }, + { "wxID_HELP_COMMANDS", wxID_HELP_COMMANDS }, + { "wxID_HELP_PROCEDURES", wxID_HELP_PROCEDURES }, + { "wxID_HELP_CONTEXT", wxID_HELP_CONTEXT }, + + { "wxID_CUT", wxID_CUT }, + { "wxID_COPY", wxID_COPY }, + { "wxID_PASTE", wxID_PASTE }, + { "wxID_CLEAR", wxID_CLEAR }, + { "wxID_FIND", wxID_FIND }, + { "wxID_DUPLICATE", wxID_DUPLICATE }, + + { "wxID_FILE1", wxID_FILE1 }, + { "wxID_FILE2", wxID_FILE2 }, + { "wxID_FILE3", wxID_FILE3 }, + { "wxID_FILE4", wxID_FILE4 }, + { "wxID_FILE5", wxID_FILE5 }, + { "wxID_FILE6", wxID_FILE6 }, + { "wxID_FILE7", wxID_FILE7 }, + { "wxID_FILE8", wxID_FILE8 }, + { "wxID_FILE9", wxID_FILE9 } + +}; + +static int sg_StandardSymbolSize = (sizeof(sg_StandardSymbols)/sizeof(wxStandardSymbolStruct)); + +void wxResourceSymbolTable::AddStandardSymbols() +{ + int i; + for (i = 0; i < sg_StandardSymbolSize; i++) + { + AddSymbol(sg_StandardSymbols[i].m_name, sg_StandardSymbols[i].m_id); + } +} + +bool wxResourceSymbolTable::IsStandardSymbol(const wxString& symbol) const +{ + int i; + for (i = 0; i < sg_StandardSymbolSize; i++) + { + if (symbol == sg_StandardSymbols[i].m_name) + return TRUE; + } + return FALSE; +} + +bool wxResourceSymbolTable::FillComboBox(wxComboBox* comboBox) +{ + m_hashTable.BeginFind(); + + wxNode* node = m_hashTable.Next(); + while (node) + { + char* str = node->key.string; + + comboBox->Append(str); + node = m_hashTable.Next(); + } + return TRUE; +} +