OGL fixes; documentation fixes; dialog editor updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@447 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
1998-08-06 19:42:06 +00:00
parent c6cdf16c93
commit 5de76427c8
41 changed files with 911 additions and 361 deletions

View File

@@ -93,6 +93,7 @@ wxResourceManager::wxResourceManager():
m_editorResourceTree = NULL;
m_editorControlList = NULL;
m_nameCounter = 1;
m_symbolIdCounter = 99;
m_modified = FALSE;
m_currentFilename = "";
m_symbolFilename = "";
@@ -178,6 +179,8 @@ bool wxResourceManager::Initialize()
m_imageList.Add(icon4);
#endif
m_symbolTable.AddStandardSymbols();
return TRUE;
}
@@ -363,6 +366,8 @@ bool wxResourceManager::New(bool loadFromFile, const wxString& filename)
if (!Clear(TRUE, FALSE))
return FALSE;
m_symbolTable.AddStandardSymbols();
if (loadFromFile)
{
wxString str = filename;
@@ -389,46 +394,7 @@ bool wxResourceManager::New(bool loadFromFile, const wxString& filename)
// Construct include filename from this file
m_symbolFilename = m_currentFilename;
if (m_symbolFilename[0] == 'c')
{
}
wxString stringA("123456.45");
wxString stringB("");
stringB = str;
size_t i = 0;
char c = stringB[i];
#if 0
size_t len = stringB.Length();
size_t i = len-1;
while (i > 0)
{
// if (buffer.GetChar(i) == '.')
if (stringB[i] == '.')
{
stringB = stringB.Left(i);
break;
}
i --;
}
#endif
#if 0
size_t len = m_symbolFilename.Length();
size_t i = len-1;
while (i > 0)
{
// if (buffer.GetChar(i) == '.')
if (m_symbolFilename[i] == '.')
{
m_symbolFilename = m_symbolFilename.Left(i);
break;
}
i --;
}
#endif
// wxStripExtension(m_symbolFilename);
wxStripExtension(m_symbolFilename);
m_symbolFilename += ".h";
if (!m_symbolTable.ReadIncludeFile(m_symbolFilename))
@@ -436,6 +402,13 @@ bool wxResourceManager::New(bool loadFromFile, const wxString& filename)
wxString str("Could not find include file ");
str += m_symbolFilename;
wxMessageBox(str, "Dialog Editor Warning", MB_OK);
m_symbolIdCounter = 99;
}
else
{
// Set the id counter to the last known id
m_symbolIdCounter = m_symbolTable.FindHighestId();
}
}
else
@@ -919,6 +892,14 @@ bool wxResourceManager::CreateNewPanel()
resource->SetType("wxPanel");
resource->SetName(buf);
resource->SetTitle(buf);
wxString newIdName;
int id = GenerateWindowId("ID_DIALOG", newIdName);
resource->SetId(id);
// This is now guaranteed to be unique, so just add to symbol table
m_symbolTable.AddSymbol(newIdName, id);
m_resourceTable.AddResource(resource);
wxPanel *panel = new wxPanel(m_editorPanel, -1,
@@ -963,11 +944,14 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
wxControl *newItem = NULL;
res->SetSize(x, y, -1, -1);
res->SetType(iType);
wxString prefix;
wxString itemType(iType);
if (itemType == "wxButton")
{
prefix = "ID_BUTTON";
MakeUniqueName("button", buf);
res->SetName(buf);
if (isBitmap)
@@ -977,12 +961,14 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
if (itemType == "wxBitmapButton")
{
prefix = "ID_BITMAPBUTTON";
MakeUniqueName("button", buf);
res->SetName(buf);
newItem = new wxBitmapButton(panel, -1, m_bitmapImage, wxPoint(x, y), wxSize(-1, -1), 0, wxDefaultValidator, buf);
}
else if (itemType == "wxMessage" || itemType == "wxStaticText")
{
prefix = "ID_STATIC";
MakeUniqueName("message", buf);
res->SetName(buf);
if (isBitmap)
@@ -992,24 +978,28 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
else if (itemType == "wxStaticBitmap")
{
prefix = "ID_STATICBITMAP";
MakeUniqueName("message", buf);
res->SetName(buf);
newItem = new wxStaticBitmap(panel, -1, m_bitmapImage, wxPoint(x, y), wxSize(-1, -1), 0, buf);
}
else if (itemType == "wxCheckBox")
{
prefix = "ID_CHECKBOX";
MakeUniqueName("checkbox", buf);
res->SetName(buf);
newItem = new wxCheckBox(panel, -1, "Checkbox", wxPoint(x, y), wxSize(-1, -1), 0, wxDefaultValidator, buf);
}
else if (itemType == "wxListBox")
{
prefix = "ID_LISTBIX";
MakeUniqueName("listbox", buf);
res->SetName(buf);
newItem = new wxListBox(panel, -1, wxPoint(x, y), wxSize(-1, -1), 0, NULL, 0, wxDefaultValidator, buf);
}
else if (itemType == "wxRadioBox")
{
prefix = "ID_RADIOBOX";
MakeUniqueName("radiobox", buf);
res->SetName(buf);
wxString names[] = { "One", "Two" };
@@ -1019,6 +1009,7 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
else if (itemType == "wxRadioButton")
{
prefix = "ID_RADIOBUTTON";
MakeUniqueName("radiobutton", buf);
res->SetName(buf);
wxString names[] = { "One", "Two" };
@@ -1027,30 +1018,35 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
else if (itemType == "wxChoice")
{
prefix = "ID_CHOICE";
MakeUniqueName("choice", buf);
res->SetName(buf);
newItem = new wxChoice(panel, -1, wxPoint(x, y), wxSize(-1, -1), 0, NULL, 0, wxDefaultValidator, buf);
}
else if (itemType == "wxGroupBox" || itemType == "wxStaticBox")
{
prefix = "ID_STATICBOX";
MakeUniqueName("group", buf);
res->SetName(buf);
newItem = new wxStaticBox(panel, -1, "Groupbox", wxPoint(x, y), wxSize(200, 200), 0, buf);
}
else if (itemType == "wxGauge")
{
prefix = "ID_GAUGE";
MakeUniqueName("gauge", buf);
res->SetName(buf);
newItem = new wxGauge(panel, -1, 10, wxPoint(x, y), wxSize(80, 30), wxHORIZONTAL, wxDefaultValidator, buf);
}
else if (itemType == "wxSlider")
{
prefix = "ID_SLIDER";
MakeUniqueName("slider", buf);
res->SetName(buf);
newItem = new wxSlider(panel, -1, 1, 1, 10, wxPoint(x, y), wxSize(120, -1), wxHORIZONTAL, wxDefaultValidator, buf);
}
else if (itemType == "wxText" || itemType == "wxTextCtrl (single-line)")
{
prefix = "ID_TEXTCTRL";
MakeUniqueName("textctrl", buf);
res->SetName(buf);
res->SetType("wxTextCtrl");
@@ -1058,6 +1054,7 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
else if (itemType == "wxMultiText" || itemType == "wxTextCtrl (multi-line)")
{
prefix = "ID_TEXTCTRL";
MakeUniqueName("textctrl", buf);
res->SetName(buf);
res->SetType("wxTextCtrl");
@@ -1065,6 +1062,7 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
}
else if (itemType == "wxScrollBar")
{
prefix = "ID_SCROLLBAR";
MakeUniqueName("scrollbar", buf);
res->SetName(buf);
newItem = new wxScrollBar(panel, -1, wxPoint(x, y), wxSize(140, -1), wxHORIZONTAL, wxDefaultValidator, buf);
@@ -1072,6 +1070,13 @@ bool wxResourceManager::CreatePanelItem(wxItemResource *panelResource, wxPanel *
if (!newItem)
return FALSE;
wxString newIdName;
int id = GenerateWindowId(prefix, newIdName);
res->SetId(id);
// This is now guaranteed to be unique, so just add to symbol table
m_symbolTable.AddSymbol(newIdName, id);
newItem->PushEventHandler(new wxResourceEditorControlHandler(newItem, newItem));
res->SetStyle(newItem->GetWindowStyleFlag());
@@ -1350,6 +1355,12 @@ bool wxResourceManager::DeleteResource(wxItemResource *res)
PossiblyDeleteBitmapResource(res->GetValue4());
}
// Remove symbol from table if appropriate
if (!IsSymbolUsed(res, res->GetId()))
{
m_symbolTable.RemoveSymbol(res->GetId());
}
m_resourceTable.Delete(res->GetName());
delete res;
Modify(TRUE);
@@ -1499,6 +1510,78 @@ wxItemResource *wxResourceManager::FindBitmapResourceByFilename(char *filename)
return NULL;
}
// Is this window identifier symbol in use?
// Let's assume that we can't have 2 names for the same integer id.
// Therefore we can tell by the integer id whether the symbol is
// in use.
bool wxResourceManager::IsSymbolUsed(wxItemResource* thisResource, wxWindowID id)
{
m_resourceTable.BeginFind();
wxNode *node;
while (node = m_resourceTable.Next())
{
wxItemResource *res = (wxItemResource *)node->Data();
if ((res != thisResource) && (res->GetId() == id))
return TRUE;
wxString resType(res->GetType());
if (resType == "wxDialog" || resType == "wxDialogBox" || resType == "wxPanel")
{
wxNode *node1 = res->GetChildren().First();
while (node1)
{
wxItemResource *child = (wxItemResource *)node1->Data();
if ((child != thisResource) && (child->GetId() == id))
return TRUE;
node1 = node1->Next();
}
}
}
return FALSE;
}
// Is this window identifier compatible with the given name? (i.e.
// does it already exist under a different name)
bool wxResourceManager::IsIdentifierOK(const wxString& name, wxWindowID id)
{
if (m_symbolTable.SymbolExists(name))
{
int foundId = m_symbolTable.GetIdForSymbol(name);
if (foundId != id)
return FALSE;
}
return TRUE;
}
// Change all integer ids that match oldId, to newId.
// This is necessary if an id is changed for one resource - all resources
// must be changed.
void wxResourceManager::ChangeIds(int oldId, int newId)
{
m_resourceTable.BeginFind();
wxNode *node;
while (node = m_resourceTable.Next())
{
wxItemResource *res = (wxItemResource *)node->Data();
if (res->GetId() == oldId)
res->SetId(newId);
wxString resType(res->GetType());
if (resType == "wxDialog" || resType == "wxDialogBox" || resType == "wxPanel")
{
wxNode *node1 = res->GetChildren().First();
while (node1)
{
wxItemResource *child = (wxItemResource *)node1->Data();
if (child->GetId() == oldId)
child->SetId(newId);
node1 = node1->Next();
}
}
}
}
// Deletes 'win' and creates a new window from the resource that
// was associated with it. E.g. if you can't change properties on the
// fly, you'll need to delete the window and create it again.
@@ -1735,6 +1818,29 @@ void wxResourceManager::EditWindow(wxWindow *win)
}
}
// Generate a window id and a first stab at a name
int wxResourceManager::GenerateWindowId(const wxString& prefix, wxString& idName)
{
m_symbolIdCounter ++;
while (m_symbolTable.IdExists(m_symbolIdCounter))
m_symbolIdCounter ++;
int nameId = m_symbolIdCounter;
wxString str;
str.Printf("%d", nameId);
idName = prefix + str;
while (m_symbolTable.SymbolExists(idName))
{
nameId ++;
str.Printf("%d", nameId);
idName = prefix + str;
}
return m_symbolIdCounter;
}
/*
* Resource editor frame