]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/dialoged/src/symbtabl.cpp
no message
[wxWidgets.git] / utils / dialoged / src / symbtabl.cpp
index a2f42f5a93834745a2be45845571d5d8af8c7cc0..b82e0ccb3742aa742f7b8ecefd573e3ca7350e51 100644 (file)
@@ -46,6 +46,9 @@ wxResourceSymbolTable::~wxResourceSymbolTable()
 bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename)
 {
     wxFile file;
 bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename)
 {
     wxFile file;
+    if (!wxFileExists(filename))
+        return FALSE;
+
     if (!file.Open(filename, wxFile::read))
         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;
 
     if (len == -1)
         return FALSE;
 
+    Clear();
+    AddStandardSymbols();
+
     wxString str;
     char* p = str.GetWriteBuf(len + 1);
 
     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;
     {
         str.UngetWriteBuf();
         return FALSE;
@@ -64,7 +70,7 @@ bool wxResourceSymbolTable::ReadIncludeFile(const wxString& filename)
     str.UngetWriteBuf();
 
     // Look for #define occurrences
     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();
     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)));
 
 
         wxString numStr(str.Mid(startNum, (endNum - startNum + 1)));
 
-        long id = atol(numStr);
+        int id = atol(numStr);
 
         AddSymbol(symbol, id);
 
 
         AddSymbol(symbol, id);
 
@@ -115,18 +121,28 @@ bool wxResourceSymbolTable::WriteIncludeFile(const wxString& filename)
     if (!file.Open(filename, wxFile::write))
         return FALSE;
 
     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;
     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();
     }
 
         node = m_hashTable.Next();
     }
@@ -138,14 +154,27 @@ void wxResourceSymbolTable::Clear()
     m_hashTable.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;
 }
 
 {
     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
 // Accessors
-wxString wxResourceSymbolTable::GetSymbolForId(long id)
+wxString wxResourceSymbolTable::GetSymbolForId(int id)
 {
     m_hashTable.BeginFind();
 
 {
     m_hashTable.BeginFind();
 
@@ -153,7 +182,7 @@ wxString wxResourceSymbolTable::GetSymbolForId(long id)
     while (node)
     {
         char* str = node->key.string;
     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();
             return wxString(str);
 
         node = m_hashTable.Next();
@@ -161,9 +190,9 @@ wxString wxResourceSymbolTable::GetSymbolForId(long id)
     return wxString("");
 }
 
     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
 }
 
 bool wxResourceSymbolTable::SymbolExists(const wxString& symbol) const
@@ -171,3 +200,134 @@ bool wxResourceSymbolTable::SymbolExists(const wxString& symbol) const
     return (m_hashTable.Get(symbol) != NULL);
 }
 
     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;
+}
+