Example #1
0
void BookTreeCtrl::RefreshBookList(bool ShowLanguages)
{
  using namespace sword;

  ModMap::iterator it;
  SWModule *curMod = 0;
  ModMap *Modules;

  Modules = m_SwordTools->GetModuleMap();
  wxTreeItemId rootnode,
  childnode,
  langnode,
  curNode;

  std::map < string, wxTreeItemId > treenodes;
  std::map < string, wxTreeItemId > treelangnodes;

  string group,
  grouplang;

  wxString configEntry;

  rootnode = AddRoot(wxT("books"));
  for (it = Modules->begin(); it != Modules->end(); it++)
  {
    curMod = (*it).second;

    if (curMod == 0) {
      continue;
    }

    wxLogDebug(wxT("type %s"),
               (const wxChar *) wxString(curMod->Type(), wxConvUTF8));

    configEntry = wxT("");
    configEntry = wxString(curMod->getConfigEntry("Category"), wxConvUTF8);
    if (!configEntry.CompareTo(wxT("")))
    {
      childnode = treenodes[curMod->Type()];
      if (!childnode.IsOk())
      {
        wxLogDebug(wxT("appending type"));
        childnode =
          AppendItem(rootnode, wxString(curMod->Type(), wxConvUTF8),
                     ID_CLOSEDFOLDER_ICON, ID_CLOSEDFOLDER_ICON);
        treenodes[curMod->Type()] = childnode;
      }

      group = curMod->Type();
    }
    else
    {
      childnode = treenodes[(const char *) configEntry.mb_str()];
      if (!childnode.IsOk())
      {
        childnode =
          AppendItem(rootnode, configEntry, ID_CLOSEDFOLDER_ICON,
                     ID_CLOSEDFOLDER_ICON);
        treenodes[(const char *) configEntry.mb_str()] = childnode;
      }

      curMod->Type((const char *) configEntry.mb_str());
      group = (const char *) configEntry.mb_str();
    }

    grouplang = group;
    wxLogDebug(wxT("language %s"),
               (const wxChar *) wxString(curMod->Lang(), wxConvUTF8));
    grouplang.append(curMod->Lang());

    if (ShowLanguages)
    {
      langnode = treelangnodes[grouplang];
      if (!langnode.IsOk())
      {
        wxString language;

        wxLogDebug(wxT("appending language"));

        language =
          m_Languages.GetLanguage(wxString(curMod->Lang(), wxConvUTF8));

        langnode =
          AppendItem(childnode, language, ID_CLOSEDFOLDER_ICON,
                     ID_CLOSEDFOLDER_ICON);

        treelangnodes[grouplang] = langnode;
      }
    }
    else
    {
      langnode = childnode;
    }

    wxString modname = wxString(curMod->Name(), wxConvUTF8);

    modname += wxT(" - ");
    modname += wxString(curMod->Description(), wxConvUTF8);
    wxLogDebug(wxT("appending module %s"), (const wxChar *) modname);

    /** SET ICON **/
    if (!strcmp(curMod->Type(), "Biblical Texts"))
    {
      curNode =
        AppendItem(langnode,
                   wxString(curMod->Name(),
                            wxConvUTF8) + wxT(" - ") +
                   wxString(curMod->Description(), wxConvUTF8),
                   ID_BIBLICAL_TEXT_ICON, ID_BIBLICAL_TEXT_ICON);
    }
    else if (!strcmp(curMod->Type(), "Lexicons / Dictionaries")
             || !strcmp(curMod->Type(), "Glossaries"))
    {
      curNode =
        AppendItem(langnode,
                   wxString(curMod->Name(),
                            wxConvUTF8) + wxT(" - ") +
                   wxString(curMod->Description(), wxConvUTF8), ID_LEXICON_ICON,
                   ID_LEXICON_ICON);
    }
    else if (!strcmp(curMod->Type(), "Commentaries"))
    {
      curNode =
        AppendItem(langnode,
                   wxString(curMod->Name(),
                            wxConvUTF8) + wxT(" - ") +
                   wxString(curMod->Description(), wxConvUTF8),
                   ID_COMMENTARY_ICON, ID_COMMENTARY_ICON);
    }
    else if (!strcmp(curMod->Type(), "Daily Devotional"))
    {
      curNode =
        AppendItem(langnode,
                   wxString(curMod->Name(),
                            wxConvUTF8) + wxT(" - ") +
                   wxString(curMod->Description(), wxConvUTF8),
                   ID_DEVOTIONAL_ICON, ID_DEVOTIONAL_ICON);
    }
    else
    {
      curNode =
        AppendItem(langnode,
                   wxString(curMod->Name(),
                            wxConvUTF8) + wxT(" - ") +
                   wxString(curMod->Description(), wxConvUTF8), ID_BOOK_ICON,
                   ID_BOOK_ICON);
    }

    /** END SET ICON **/

    SetItemData(curNode, new BookTreeItemData(curMod));
    SortChildren(childnode);
    SortChildren(langnode);
  }

  SortChildren(rootnode);
}