]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/configtool/src/configtooldoc.cpp
renamed netutils.bkl to net.bkl, to simplify bakefile_gen use
[wxWidgets.git] / utils / configtool / src / configtooldoc.cpp
index 5dd41d2461976c1876122658d04ee373ff890ac5..bd5af0ba9aa578d3e5a84bc812b1f4a0348deaa2 100644 (file)
@@ -575,6 +575,7 @@ void ctConfigToolDoc::RefreshDependencies(ctConfigItem* item)
     wxString precludes = item->GetPropertyString(wxT("precludes"));
     wxString enabledIf = item->GetPropertyString(wxT("enabled-if"));
     wxString enabledIfNot = item->GetPropertyString(wxT("enabled-if-not"));
+    wxString indeterminateIf = item->GetPropertyString(wxT("indeterminate-if"));
     wxString context = item->GetPropertyString(wxT("context"));
 
     if (!requires.IsEmpty())
@@ -589,6 +590,9 @@ void ctConfigToolDoc::RefreshDependencies(ctConfigItem* item)
     if (!enabledIf.IsEmpty())
         item->StringToArray(enabledIf, requiresArr);
 
+    if (!indeterminateIf.IsEmpty())
+        item->StringToArray(indeterminateIf, requiresArr);
+
     // Add the parent to the list of dependencies, if the
     // parent is a check or radio group.
     ctConfigItem* parent = item->GetParent();
@@ -639,7 +643,7 @@ void ctConfigToolDoc::GenerateSetup(ctConfigItem* item, wxString& str)
     wxString name = item->GetName();
 
     // We don't process the platform choice
-    if (item->GetName() == wxT("Platform"))
+    if (item->GetName() == wxT("Target"))
         return;
 
     if (item->IsInActiveContext() &&
@@ -689,8 +693,8 @@ wxString ctConfigToolDoc::GenerateConfigureCommand()
 
     str << path << wxT("configure");
 
-    // Find the platform option to use
-    ctConfigItem* platformsFolder = GetTopItem()->FindItem(wxT("Platform"));
+    // Find the target to use
+    ctConfigItem* platformsFolder = GetTopItem()->FindItem(wxT("Target"));
     if (platformsFolder)
     {
         for ( wxNode* node = platformsFolder->GetChildren().GetFirst(); node; node = node->GetNext() )
@@ -714,7 +718,7 @@ void ctConfigToolDoc::GenerateConfigureCommand(ctConfigItem* item, wxString& str
 {
     // We don't process the platform group, since we've
     // already done so.
-    if (item->GetName() == wxT("Platform"))
+    if (item->GetName() == wxT("Target"))
         return;
 
     if (item->IsInActiveContext() &&
@@ -791,6 +795,51 @@ wxString ctConfigToolDoc::GetFrameworkDir(bool makeUnix)
     return path;
 }
 
+/// Finds the next item in the tree
+ctConfigItem* ctConfigToolDoc::FindNextItem(ctConfigItem* item, bool wrap)
+{
+    if (!item)
+        return GetTopItem();
+
+    // First, try to find the first child
+    if (item->GetChildCount() > 0)
+    {
+        return item->GetChild(0);
+    }
+    else
+    {
+        ctConfigItem* p = item;
+        while (p)
+        {
+            ctConfigItem* toFind = FindNextSibling(p);
+            if (toFind)
+                return toFind;
+            p = p->GetParent();
+        }
+    }
+
+    // Finally, wrap around to the root.
+    if (wrap)
+        return GetTopItem();
+    else
+        return NULL;
+}
+
+/// Finds the next sibling in the tree
+ctConfigItem* ctConfigToolDoc::FindNextSibling(ctConfigItem* item)
+{
+    if (item->GetParent())
+    {
+        wxNode* node = item->GetParent()->GetChildren().Member(item);
+        if (node && node->GetNext())
+        {
+            ctConfigItem* nextItem = (ctConfigItem*) node->GetNext()->GetData();
+            return nextItem;
+        }
+    }
+    return NULL;
+}
+
 
 /*
  * Implements a document editing command.
@@ -990,3 +1039,210 @@ bool ctConfigCommand::DoAndUndo(bool doCmd)
     return TRUE;
 }
 
+IMPLEMENT_CLASS(ctConfiguration, wxObject)
+
+ctConfiguration::ctConfiguration()
+{
+    m_treeItemId = wxTreeItemId();
+    m_parent = NULL;
+    m_topItem = NULL;
+}
+
+ctConfiguration::ctConfiguration(ctConfiguration* parent, const wxString& name)
+{
+    m_treeItemId = wxTreeItemId();
+    SetName(name);
+    m_parent = parent;
+    if (parent)
+        parent->AddChild(this);
+}
+
+ctConfiguration::~ctConfiguration()
+{
+/*
+    ctConfigTreeCtrl* treeCtrl = wxGetApp().GetMainFrame()->GetConfigTreeCtrl();
+    if (m_treeItemId.IsOk() && treeCtrl)
+    {
+        ctTreeItemData* data = (ctTreeItemData*) treeCtrl->GetItemData(m_treeItemId);
+        if (data)
+            data->SetConfigItem(NULL);
+    }
+    if (GetParent())
+        GetParent()->RemoveChild(this);
+    else
+    {
+        if (wxGetApp().GetMainFrame()->GetDocument() &&
+            wxGetApp().GetMainFrame()->GetDocument()->GetTopItem() == this)
+            wxGetApp().GetMainFrame()->GetDocument()->SetTopItem(NULL);
+    }
+*/
+    
+    Clear();
+}
+
+/// Assignment operator.
+void ctConfiguration::operator= (const ctConfiguration& configuration)
+{
+    m_name = configuration.m_name;
+    m_description = configuration.m_description;
+}
+
+/// Clear children
+void ctConfiguration::Clear()
+{
+    wxNode* node = m_children.GetFirst();
+    while (node)
+    {
+        wxNode* next = node->GetNext();
+        ctConfiguration* child = (ctConfiguration*) node->GetData();
+
+        // This should delete 'node' too, assuming
+        // child's m_parent points to 'this'. If not,
+        // it'll be cleaned up by m_children.Clear().
+        delete child;
+
+        node = next;
+    }
+    m_children.Clear();
+}
+
+// Get the nth child
+ctConfiguration* ctConfiguration::GetChild(int n) const
+{
+    wxASSERT ( n < GetChildCount() && n > -1 );
+
+    if ( n < GetChildCount() && n > -1 )
+    {
+        ctConfiguration* child = wxDynamicCast(m_children.Item(n)->GetData(), ctConfiguration);
+        return child;
+    }
+    else
+        return NULL;
+}
+
+// Get the child count
+int ctConfiguration::GetChildCount() const
+{
+    return m_children.GetCount();
+}
+
+/// Add a child
+void ctConfiguration::AddChild(ctConfiguration* configuration)
+{
+    m_children.Append(configuration);
+    configuration->SetParent(this);
+}
+
+/// Remove (but don't delete) a child
+void ctConfiguration::RemoveChild(ctConfiguration* configuration)
+{
+    m_children.DeleteObject(configuration);
+    configuration->SetParent(NULL);
+}
+
+/// Get the associated document (currently, assumes
+/// there's only ever one document active)
+ctConfigToolDoc* ctConfiguration::GetDocument()
+{
+    ctConfigToolDoc* doc = wxGetApp().GetMainFrame()->GetDocument();
+    return doc;
+}
+
+/// Find an item in this hierarchy
+// TODO: ensure that names are unique, somehow.
+ctConfiguration* ctConfiguration::FindConfiguration(const wxString& name)
+{
+    if (GetName() == name)
+        return this;
+
+    for ( wxNode* node = GetChildren().GetFirst(); node; node = node->GetNext() )
+    {
+        ctConfiguration* child = (ctConfiguration*) node->GetData();
+        ctConfiguration* found = child->FindConfiguration(name);
+        if (found)
+            return found;
+    }
+    return NULL;
+}
+
+/// Find the next sibling
+ctConfiguration* ctConfiguration::FindNextSibling()
+{
+    if (!GetParent())
+        return NULL;
+    wxNode* node = GetParent()->GetChildren().Member(this);
+    if (node && node->GetNext())
+    {
+        return (ctConfiguration*) node->GetNext()->GetData();
+    }
+    return NULL;
+}
+
+/// Find the previous sibling
+ctConfiguration* ctConfiguration::FindPreviousSibling()
+{
+    if (!GetParent())
+        return NULL;
+    wxNode* node = GetParent()->GetChildren().Member(this);
+    if (node && node->GetPrevious())
+    {
+        return (ctConfiguration*) node->GetPrevious()->GetData();
+    }
+    return NULL;
+}
+
+/// Create a clone of this and children
+ctConfiguration* ctConfiguration::DeepClone()
+{
+    ctConfiguration* newItem = Clone();
+
+    for ( wxNode* node = GetChildren().GetFirst(); node; node = node->GetNext() )
+    {
+        ctConfiguration* child = (ctConfiguration*) node->GetData();
+        ctConfiguration* newChild = child->DeepClone();
+        newItem->AddChild(newChild);
+    }
+    return newItem;
+}
+
+/// Detach: remove from parent, and remove tree items
+void ctConfiguration::Detach()
+{
+    // TODO
+    if (GetParent())
+        GetParent()->RemoveChild(this);
+    else
+        GetDocument()->SetTopItem(NULL);
+    SetParent(NULL);
+
+/*
+    wxTreeItemId treeItem = GetTreeItemId();
+
+    DetachFromTree();
+
+    // Will delete the branch, but not the config items.
+    wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->Delete(treeItem);
+*/
+}
+
+/// Hide from tree: make sure tree deletions won't delete
+/// the config items
+void ctConfiguration::DetachFromTree()
+{
+    wxTreeItemId item = GetTreeItemId();
+
+    // TODO
+/*
+    ctTreeItemData* data = (ctTreeItemData*) wxGetApp().GetMainFrame()->GetConfigTreeCtrl()->GetItemData(item);
+    data->SetConfigItem(NULL);
+    m_treeItemId = wxTreeItemId();
+
+    for ( wxNode* node = GetChildren().GetFirst(); node; node = node->GetNext() )
+    {
+        ctConfiguration* child = (ctConfiguration*) node->GetData();
+        child->DetachFromTree();
+    }
+*/
+}
+
+