void PaletteSubDialog::ToContainer(BaseContainer &bc) { Int32 i=0; bc.SetBool(++i, m_showLabel); bc.SetInt32(++i, m_rows); bc.SetInt32(++i, m_layout); bc.SetString(++i, m_searchString); bc.SetInt32(++i, m_paletteID); }
/*********************************************************************\ Function name : CCustomElementSettings::Init Description : Created at : 27.03.02, @ 10:35:40 Created by : Thomas Kunert Modified by : \*********************************************************************/ void CCustomElementSettings::Init() { m_wndListView.AttachListView(m_pSettingsDialog, IDC_CUSTOM_GUI_LIST); BaseContainer bc; bc.SetInt32('name', LV_COLUMN_TEXT); bc.SetInt32('resy', LV_COLUMN_TEXT); bc.SetInt32('ceid', LV_COLUMN_TEXT); m_wndListView.SetLayout(3, bc); }
void PickObjectTool::InitDefaultSettings(BaseDocument* doc, BaseContainer& data) { _lastBaseDraw = nullptr; _mouseX = -1; _mouseY = -1; data.SetInt32(MDATA_PICKOBJECT_MODE, MDATA_PICKOBJECT_MODE_CIRCLE); data.SetInt32(MDATA_PICKOBJECT_CIRCLE_RAD, 40); data.SetInt32(MDATA_PICKOBJECT_RECT_W, 50); data.SetInt32(MDATA_PICKOBJECT_RECT_H, 30); DescriptionToolData::InitDefaultSettings(doc, data); }
void ApplinkImporter::InsertTextureTag(PolygonObject* pObj, String mat, String& name) { TextureTag* txttag = TextureTag::Alloc(); txttag->SetMaterial(doc->SearchMaterial(mat)); BaseContainer bc = txttag->GetData(); bc.SetInt32(TEXTURETAG_PROJECTION, TEXTURETAG_PROJECTION_UVW); bc.SetInt32(TEXTURETAG_SIDE, TEXTURETAG_SIDE_FRONT); bc.SetString(TEXTURETAG_RESTRICTION, name); bc.SetInt32(TEXTURETAG_TILE, 1); txttag->SetData(bc); pObj->InsertTag(txttag, this->GetLastTag(pObj)); txttag->Message(MSG_UPDATE); }
virtual Bool InitValues(void) { SetInt32(1006, Int32(0), 0, 10); BaseContainer shortcut; shortcut.SetInt32(0, 0); // qual shortcut.SetInt32(1, KEY_F1); // key BaseContainer m(BFM_VALUECHNG); m.SetContainer(BFM_ACTION_VALUE, shortcut); SendMessage(1004, m); return true; }
/*********************************************************************\ Function name : TreeView::CreateTreeView Description : Creates a tree view window and attaches it to the parent window Created at : 26.09.01, @ 11:02:27 Created by : Thomas Kunert Modified by : \*********************************************************************/ Bool TreeView::CreateTreeView(Int32 lTreeID, GeDialog* pParent, Int32 lElementType, DeleteTreeViewItemCallback pDeleteCallbackFunc, Int32 lTreeViewFlags, Int32 lFlags) { m_pParent = pParent; SetDeleteCallback(pDeleteCallbackFunc); BaseContainer treedata; treedata.SetBool(TREEVIEW_CTRL_DRAG, true); treedata.SetBool(TREEVIEW_NO_MULTISELECT, true); treedata.SetBool(TREEVIEW_CURSORKEYS, true); treedata.SetBool(TREEVIEW_ALTERNATE_BG, true); treedata.SetBool(TREEVIEW_FIXED_LAYOUT, true); //treedata.SetBool(TREEVIEW_HAS_HEADER, true); //treedata.SetBool(TREEVIEW_BORDER, true); pParent->AddCustomGui(lTreeID, CUSTOMGUI_TREEVIEW, String(), BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, treedata); m_pTree = (TreeViewCustomGui*)pParent->FindCustomGui(lTreeID, CUSTOMGUI_TREEVIEW); if (!m_pTree) return false; BaseContainer layout; layout.SetInt32('icon', LV_USER); layout.SetInt32('tree', LV_TREE); m_pTree->SetLayout(2,layout); m_pTree->SetRoot(&m_RootItem, &functable, this); m_lTreeID = lTreeID; m_lElementType = lElementType; m_lFlags = lTreeViewFlags; return true; }
/*********************************************************************\ Function name : TreeView::AddItem Description : Created at : 15.08.01, @ 09:39:49 Created by : Thomas Kunert Modified by : \*********************************************************************/ TreeViewItem* TreeView::AddItem(String strName, Int32 lType, TreeViewItem* pParent) { BaseContainer bc; bc.SetString(TREEVIEW_TEXT, strName); bc.SetInt32(TREEVIEW_ICON, lType); return AddItem(bc, pParent); }
virtual void InsertObject(void *root,void *userdata,void *obj,Int32 dragtype,void *dragobject,Int32 insertmode, Bool bCopy) { TreeView* pTree = (TreeView*)userdata; if (dragtype == DRAGTYPE_FILES) { Filename* fn = (Filename*)dragobject; if (!fn) return; ((CTreeDialog*)pTree->m_pParent)->OpenDialog(*fn); } if (dragtype == pTree->m_lElementType) { TreeViewItem* pDragItem = (TreeViewItem*)dragobject; TreeViewItem* pDestItem = (TreeViewItem*)obj; if (bCopy) { if (!pDragItem || !pDestItem) return; CTreeDialog* pDlg = (CTreeDialog*)pTree->m_pParent; if (!pDlg) return; CDialogDoc* pDoc = pDlg->GetDocument(); if (!pDoc) return; CDialogItem* pDlgItemDrag = (CDialogItem*)pDragItem->GetData()->GetVoid(TREEVIEW_DATA); CDialogItem* pDlgItemDrop = (CDialogItem*)pDestItem->GetData()->GetVoid(TREEVIEW_DATA); if (!pDlgItemDrag || !pDlgItemDrop) return; pDoc->ExportMacro(GeGetPluginPath() + String("DragDrop.dmf"), pDlgItemDrag); CDialogItem* pNewItem = pDoc->ImportMacro(GeGetPluginPath() + String("DragDrop.dmf"), pDlgItemDrop); GeFKill(GeGetPluginPath() + String("DragDrop.dmf")); if (pNewItem) { TreeViewItem* pNewTreeItem = pNewItem->m_pTreeViewItem; switch (insertmode) { case INSERT_BEFORE: pNewTreeItem->ChangeParent(pDestItem->GetParent(), pDestItem, nullptr); break; case INSERT_UNDER: pNewTreeItem->ChangeParent(pDestItem, nullptr, nullptr); Open(root, userdata, obj, true); break; default: pNewTreeItem->ChangeParent(pDestItem->GetParent(), nullptr, pDestItem); break; } Select(root, userdata, pNewTreeItem, SELECTION_NEW); } } else { switch (insertmode) { case INSERT_BEFORE: pDragItem->ChangeParent(pDestItem->GetParent(), pDestItem, nullptr); break; case INSERT_UNDER: pDragItem->ChangeParent(pDestItem, nullptr, nullptr); Open(root, userdata, obj, true); break; default: pDragItem->ChangeParent(pDestItem->GetParent(), nullptr, pDestItem); break; } } BaseContainer bc; bc.SetInt32(TREEVIEW_MESSAGE_TYPE, TREEVIEW_STRUCTURE_CHANGE); pTree->m_pParent->Command(pTree->m_lTreeID, bc); pTree->m_pTree->Refresh(); } }
Bool LiquidToolData::GetCursorInfo(BaseDocument* doc, BaseContainer& data, BaseDraw* bd, Float x, Float y, BaseContainer& bc) { if (bc.GetId() == BFM_CURSORINFO_REMOVE) return true; bc.SetString(RESULT_BUBBLEHELP, GeLoadString(IDS_PRIMITIVETOOL)); bc.SetInt32(RESULT_CURSOR, MOUSE_POINT_HAND); return true; }
virtual Bool DoubleClick(void *root,void *userdata,void *obj,Int32 col,MouseInfo *mouseinfo) { TreeView* pTree = (TreeView*)userdata; BaseContainer bc; bc.SetInt32(TREEVIEW_MESSAGE_TYPE, TREEVIEW_DOUBLECLICK); bc.SetVoid(TREEVIEW_MESSAGE_ITEM, obj); return pTree->m_pParent->Command(pTree->m_lTreeID, bc); //return false; }
virtual Bool CreateLayout(void) { GroupBegin(999, BFH_SCALEFIT | BFV_SCALEFIT, 3, 0, "", BFV_GRIDGROUP_ALLOW_WEIGHTS); AddStaticText(1000, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1001, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1001, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1002, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1003, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1003, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1004, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1005, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddStaticText(1005, BFH_SCALEFIT | BFV_SCALEFIT, 0, 0, "SubDialog2", BORDER_THIN_IN); AddEditNumberArrows(1006, BFH_SCALEFIT); if (!weights_saved) { // set the columns weights.SetInt32(GROUPWEIGHTS_PERCENT_W_CNT, 3); // number of rows - has to be equal to the given layout weights.SetFloat(GROUPWEIGHTS_PERCENT_W_VAL + 0, 1); // weight for col 1 weights.SetFloat(GROUPWEIGHTS_PERCENT_W_VAL + 1, -250); // FIXED weight for col 2 weights.SetFloat(GROUPWEIGHTS_PERCENT_W_VAL + 2, 1); // weight for col 1 // set the rows weights.SetInt32(GROUPWEIGHTS_PERCENT_H_CNT, 4); // number of rows - has to be equal to the given layout weights.SetFloat(GROUPWEIGHTS_PERCENT_H_VAL + 0, -1.0); // weight for row 1 weights.SetFloat(GROUPWEIGHTS_PERCENT_H_VAL + 1, -150.0); // FIXED weight for row 2 weights.SetFloat(GROUPWEIGHTS_PERCENT_H_VAL + 2, 60.0); // weight for row 3 weights.SetFloat(GROUPWEIGHTS_PERCENT_H_VAL + 3, 0.0); // weight for row 4 weights_saved = true; } GroupWeightsLoad(999, weights); GroupEnd(); return true; }
Bool HairGeneratorObject::Init(GeListNode* node) { BaseContainer* bc = ((BaseList2D*)node)->GetDataInstance(); bc->SetInt32(HAIR_GEN_COUNT, 5000); bc->SetInt32(HAIR_GEN_SEGMENTS, 6); bc->SetFloat(HAIR_GEN_LENGTH, 15); bc->SetFloat(HAIR_GEN_LENGTH_VAR, 5); bc->SetFloat(HAIR_GEN_NOISE, 0.2); bc->SetBool(HAIR_GEN_GENERATE, false); return true; }
Bool PickObjectTool::GetDDescription(BaseDocument* doc, BaseContainer& data, Description* description, DESCFLAGS_DESC& flags) { Bool res = DescriptionToolData::GetDDescription(doc, data, description, flags); if (flags & DESCFLAGS_DESC_LOADED) { BaseContainer* bc; Int32 mode = data.GetInt32(MDATA_PICKOBJECT_MODE); bc = description->GetParameterI(DescLevel(MDATA_PICKOBJECT_CIRCLE_RAD), nullptr); if (bc) bc->SetInt32(DESC_HIDE, mode != MDATA_PICKOBJECT_MODE_CIRCLE); bc = description->GetParameterI(DescLevel(MDATA_PICKOBJECT_RECT_W), nullptr); if (bc) bc->SetInt32(DESC_HIDE, mode == MDATA_PICKOBJECT_MODE_CIRCLE); bc = description->GetParameterI(DescLevel(MDATA_PICKOBJECT_RECT_H), nullptr); if (bc) bc->SetInt32(DESC_HIDE, mode == MDATA_PICKOBJECT_MODE_CIRCLE); } return res; }
virtual void Select(void *root,void *userdata,void *obj,Int32 mode) { TreeView* pTree = (TreeView*)userdata; pTree->m_pCurrentItem = (TreeViewItem*)obj; BaseContainer bc; bc.SetInt32(TREEVIEW_MESSAGE_TYPE, TREEVIEW_SELCHANGE); if (mode == SELECTION_SUB) return; //bc.SetInt32(TREEVIEW_MESSAGE_ITEM, nullptr); //else bc.SetVoid(TREEVIEW_MESSAGE_ITEM, obj); pTree->m_pParent->Command(pTree->m_lTreeID, bc); }
Bool HairRenderingTag::Init(GeListNode* node) { BaseContainer* bc = ((BaseList2D*)node)->GetDataInstance(); m_FnTable.init_render = _InitRenderFn; m_FnTable.free_render = _HrFreeRenderFn; m_FnTable.calc_shad = _ModifyHairShadowTransparencyFn; m_FnTable.calc_col = _GenerateColorFn; bc->SetFloat(HAIR_RENDERING_SHADOW, 1.0); bc->SetFloat(HAIR_RENDERING_TRANSPARENCY, 1.0); bc->SetInt32(HAIR_RENDERING_DEPTH, 1); return true; }
/*********************************************************************\ Function name : TreeView::ExpandItem Description : Created at : 14.08.01, @ 19:28:34 Created by : Thomas Kunert Modified by : \*********************************************************************/ void TreeView::ExpandItem(TreeViewItem* pItem, Bool bExpand) { pItem->m_bIsExpanded = bExpand; if (!bExpand && m_pCurrentItem->IsChildOf(pItem)) { m_pCurrentItem = pItem; if (m_pParent) { BaseContainer bc; bc.SetInt32(TREEVIEW_MESSAGE_TYPE, TREEVIEW_SELCHANGE); bc.SetVoid(TREEVIEW_MESSAGE_ITEM, m_pCurrentItem); m_pParent->Command(m_lTreeID, bc); } } Redraw(); }
Bool DiffDistriDialog::CreateLayout(void) { if (!GeDialog::CreateLayout()) return false; if (!LoadDialogResource(IDD_DIFF_DISTRI_DLG, nullptr, 0)) return false; m_pTreeView = (TreeViewCustomGui*)FindCustomGui(IDC_DIFF_DISTRI_FILES_TREE, CUSTOMGUI_TREEVIEW); m_pNewZipEdit = (FilenameCustomGui*)FindCustomGui(IDC_DIFF_DISTRI_NEWZIP_EDIT, CUSTOMGUI_FILENAME); m_pDestPathEdit = (FilenameCustomGui*)FindCustomGui(IDC_DIFF_DISTRI_DESTPATH_EDIT, CUSTOMGUI_FILENAME); if (!m_pTreeView || !m_pNewZipEdit || !m_pDestPathEdit) return false; BaseContainer bcLayout; bcLayout.SetInt32(0, LV_TREE); m_pTreeView->SetLayout(1, bcLayout); m_pTreeView->SetRoot(&g_pResEditPrefs->arOldFiles, &funcs, this); return true; }
Bool MemStatDialog::InitValues(void) { // first call the parent instance if (!GeDialog::InitValues()) return false; BaseContainer stat; // since this function is slow we have to tell Cinema that we need this information by setting 1 stat.SetInt32(C4D_MEMORY_STAT_OPENGL_TOTAL, 1); GeGetMemoryStat(stat); SetString(IDC_MEMORY_STAT_MEMORY_INUSE, String::MemoryToString(stat.GetInt64(C4D_MEMORY_STAT_MEMORY_INUSE))); SetString(IDC_MEMORY_STAT_MEMORY_PEAK, String::MemoryToString(stat.GetInt64(C4D_MEMORY_STAT_MEMORY_PEAK))); SetString(IDC_MEMORY_STAT_NO_OF_ALLOCATIONS_TOTAL, GetNoOfAllocationsString(stat.GetInt64(C4D_MEMORY_STAT_NO_OF_ALLOCATIONS_TOTAL))); SetString(IDC_MEMORY_STAT_NO_OF_ALLOCATIONS_CURRENT, GetNoOfAllocationsString(stat.GetInt64(C4D_MEMORY_STAT_NO_OF_ALLOCATIONS_CURRENT))); SetString(IDC_MEMORY_STAT_OGL_MEMORY, GetOGLMemoryString(stat.GetInt32(C4D_MEMORY_STAT_OPENGL_TOTAL)) + " / " + GetOGLMemoryString(stat.GetInt32(C4D_MEMORY_STAT_OPENGL_FREE))); SetString(IDC_MEMORY_STAT_EOGL_TEXBUFFER, String::MemoryToString(stat.GetInt64(C4D_MEMORY_STAT_EOGL_TEXBUFFER)) + String(" (") + String::IntToString(stat.GetInt32(C4D_MEMORY_STAT_EOGL_TEXTUREBUFFER_CNT)) + String(")")); SetString(IDC_MEMORY_STAT_EOGL_VERTEXBUFFER, String::MemoryToString(stat.GetInt64(C4D_MEMORY_STAT_EOGL_VERTEXBUFFER)) + String(" (") + String::IntToString(stat.GetInt32(C4D_MEMORY_STAT_EOGL_VERTEXBUFFER_CNT)) + String(")")); return true; }
Bool PaletteSubDialog::Command(Int32 id,const BaseContainer &msg) { GeDynamicArray<Palette> pals; Palette pal; Filename fn; switch (id) { case 3: switch(msg.GetInt32(BFM_ACTION_VALUE)){ case ACTION_NEW: pal.SetColor(0, Color(0.f, 0.f, 0.f).SetSource(COLOR_SOURCE_DISPLAY)); id = Palette::AddPalette(pal); m_controlsShown = FALSE; LoadPalette(id); SaveSettings(); Palette::UpdateAll(); return TRUE; case ACTION_LOAD: if(fn.FileSelect(FILESELECTTYPE_ANYTHING, FILESELECT_LOAD, "Load")){ String s = fn.GetString(); if(Palette::LoadASEFile(s, pal)){ id = Palette::AddPalette(pal); m_controlsShown = FALSE; LoadPalette(id); SaveSettings(); Palette::UpdateAll(); } } return TRUE; case ACTION_SAVE: if(fn.FileSelect(FILESELECTTYPE_ANYTHING, FILESELECT_SAVE, "Save", "ase")){ String s = fn.GetString(); Palette::SaveASEFile(s, m_palette); } return TRUE; case ACTION_LABEL: ShowControls(!m_showControls); return TRUE; } if(msg.GetInt32(BFM_ACTION_VALUE) >= ACTION_COUNT){ m_controlsShown = FALSE; LoadPalette(msg.GetInt32(BFM_ACTION_VALUE)-ACTION_COUNT); SaveSettings(); } return TRUE; case IDC_LAYOUT_DIRECTION: m_controlsShown = FALSE; LoadPalette(m_paletteID); SaveSettings(); break; case IDC_ROWS: PaletteLayout(); SaveSettings(); break; case IDC_LABELCHECKBOX: GetBool(m_labelCheckArea, m_showLabel); LoadPalette(m_paletteID); SaveSettings(); break; case IDC_NAME: if(m_nameArea != NULL){ GetString(m_nameArea, m_palette.m_name); Palette::SetPaletteName(m_paletteID, m_palette.m_name); LoadPalette(m_paletteID); } break; case IDC_HIDE: ShowControls(FALSE); break; case IDC_SEARCHTEXT: PaletteLayout(); SaveSettings(); break; case IDC_CREATEMATERIAL: { Bool linkColors; GetBool(m_linkColor,linkColors); for(Int32 i=m_palette.m_colors.GetCount()-1;i>=0;--i){ BaseMaterial *mat = BaseMaterial::Alloc(Mmaterial); String name = "PaletteMaterial"; if(m_palette[i].m_name != ""){ name = m_palette[i].m_name; } mat->SetName(name); if(mat != nullptr){ BaseChannel *chan = mat->GetChannel(CHANNEL_COLOR); if(chan != nullptr){ BaseContainer bc; if(linkColors){ bc.SetInt32(BASECHANNEL_SHADERID, PALETTE_SHADER_ID); chan->SetData(bc); BaseShader *bs = chan->GetShader(); BaseContainer* data = bs->GetDataInstance(); data->SetInt32(PALETTESHADER_PALETTE_ID, 1+m_paletteID); data->SetInt32(PALETTESHADER_COLOR_ID, 1+i); } else { // Color Shader ID: 5832 bc.SetInt32(BASECHANNEL_SHADERID, 5832); chan->SetData(bc); BaseShader *bs = chan->GetShader(); BaseContainer* data = bs->GetDataInstance(); data->SetVector(COLORSHADER_COLOR , m_palette.m_colors[i].AsVector()); } GetActiveDocument()->InsertMaterial(mat); EventAdd(); } } } } break; default: break; } return GeDialog::Command(id,msg); }
//Set our custom values. See the toolsculptgrabbrush.res and toolsculptgrabbrush.h files for where this value is defined. void ExampleSculptGrabBrush::PostInitDefaultSettings(BaseDocument* doc, BaseContainer& data) { data.SetInt32(MDATA_TOOLSCULPTGRABBRUSH_DIRMODE, MDATA_TOOLSCULPTGRABBRUSH_DIRMODE_MOUSEDIR); }
/*********************************************************************\ Function name : CCompareTableDialog::InitValues Description : Created at : 09.10.01, @ 21:07:22 Created by : Thomas Kunert Modified by : \*********************************************************************/ Bool CCompareTableDialog::InitValues(void) { BaseContainer bcLayout; Int32 a, b; bcLayout.SetInt32(COMPARE_LIST_NAME, LV_COLUMN_TEXT); bcLayout.SetInt32(COMPARE_LIST_DATA, LV_COLUMN_TEXT); m_wndOutputList.SetLayout(2, bcLayout); // the tbles are loaded, so write some important information Int32 lItemCount = 0; BaseContainer data; CStringTable* pTable; StringTableType stt; for (b = 0; b < 2; b++) { if (b == 0) { data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_ORIGINAL_FILE)); data.SetString(COMPARE_LIST_DATA, m_fnOriginal.GetString()); m_wndOutputList.SetItem(lItemCount++, data); pTable = m_pOriginalTable; stt = m_OriginalDoc.m_StringTableType; } else { data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_NEW_FILE)); data.SetString(COMPARE_LIST_DATA, m_fnNew.GetString()); m_wndOutputList.SetItem(lItemCount++, data); pTable = m_pNewTable; stt = m_NewDoc.m_StringTableType; } data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_STT)); if (stt == typeDialogStrings) data.SetString(COMPARE_LIST_DATA, GeLoadString(IDS_COMPARE_TYPE_DLG)); else if (stt == typeStringTable) data.SetString(COMPARE_LIST_DATA, GeLoadString(IDS_COMPARE_TYPE_STT)); else if (stt == typeCommandStrings) data.SetString(COMPARE_LIST_DATA, GeLoadString(IDS_COMPARE_TYE_COMMAND)); m_wndOutputList.SetItem(lItemCount++, data); data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_NUM_LANG)); data.SetString(COMPARE_LIST_DATA, String::IntToString(pTable->GetUsedLanguages())); m_wndOutputList.SetItem(lItemCount++, data); for (a = 0; a < pTable->GetUsedLanguages(); a++) { if (a == 0) { data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_LANGUAGES)); } else { data.SetString(COMPARE_LIST_NAME, ""); } String strSuffix = pTable->GetSuffix(a); data.SetString(COMPARE_LIST_DATA, String("") + g_LanguageList.GetName(strSuffix) + String("(") + strSuffix + String(")")); m_wndOutputList.SetItem(lItemCount++, data); } data.SetString(COMPARE_LIST_DATA, String("")); data.SetString(COMPARE_LIST_NAME, String("")); m_wndOutputList.SetItem(lItemCount++, data); } // search all strings that are in the original table, but not in the new table data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_REMOVED_ITEMS)); data.SetString(COMPARE_LIST_DATA, String("")); m_wndOutputList.SetItem(lItemCount++, data); data.SetString(COMPARE_LIST_NAME, String("")); for (a = 0; a < m_pOriginalTable->GetNumElements(); a++) { String strID = m_pOriginalTable->GetElementID(a); if (!m_pNewTable->ContainsElement(strID)) { data.SetString(COMPARE_LIST_DATA, strID); m_wndOutputList.SetItem(lItemCount++, data); } } // now, find all items that were added in the new table data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_ADDED_ITEMS)); data.SetString(COMPARE_LIST_DATA, String("")); m_wndOutputList.SetItem(lItemCount++, data); data.SetString(COMPARE_LIST_NAME, String("")); for (a = 0; a < m_pNewTable->GetNumElements(); a++) { String strID = m_pNewTable->GetElementID(a); if (!m_pOriginalTable->ContainsElement(strID)) { data.SetString(COMPARE_LIST_DATA, strID); m_wndOutputList.SetItem(lItemCount++, data); } } // search for all modified languages data.SetString(COMPARE_LIST_NAME, GeLoadString(IDS_COMPARE_MODIFIED_ITEMS)); data.SetString(COMPARE_LIST_DATA, String("")); m_wndOutputList.SetItem(lItemCount++, data); data.SetString(COMPARE_LIST_NAME, String("")); Int32 lLanguages = m_pOriginalTable->GetUsedLanguages(); Int32 lBothLang = 0; Int32 *plLangIDO = bNewDeprecatedUseArraysInstead<Int32>(lLanguages); Int32 *plLangIDN = bNewDeprecatedUseArraysInstead<Int32>(lLanguages); Bool *pbChanged = bNewDeprecatedUseArraysInstead<Bool>(lLanguages); // check for all languages that are available in both tables for (a = 0; a < lLanguages; a++) { String strLangID = m_pOriginalTable->GetSuffix(a); Int32 lLangID = m_pNewTable->GetLanguageID(strLangID); if (lLangID < 0) continue; plLangIDO[lBothLang] = a; plLangIDN[lBothLang] = lLangID; lBothLang++; } for (a = 0; a < m_pOriginalTable->GetNumElements(); a++) { String strID = m_pOriginalTable->GetElementID(a); if (m_pNewTable->ContainsElement(strID)) { Bool bChanged = false; ClearMemType(pbChanged, lLanguages); for (b = 0; b < lBothLang; b++) { if (m_bIsCommandTable) { String str1, str2, strCommand1, strCommand2; Bool bFound; str1 = m_pOriginalTable->GetString(a, plLangIDO[b], &strCommand1); str2 = m_pNewTable->GetString(m_pOriginalTable->GetElementID(a), plLangIDN[b], bFound, &strCommand2); if ((str1 != str2) || (strCommand1 != strCommand2)) { pbChanged[b] = true; bChanged = true; } } else { String str = m_pOriginalTable->GetString(a, plLangIDO[b]); Bool bFound; if (str != m_pNewTable->GetString(m_pOriginalTable->GetElementID(a), plLangIDN[b], bFound)) { pbChanged[b] = true; bChanged = true; } } } if (bChanged) { String str = m_pOriginalTable->GetElementID(a); for (b = 0; b < lBothLang; b++) { if (pbChanged[b]) str += String(" ") + m_pOriginalTable->GetSuffix(plLangIDO[b]); } data.SetString(COMPARE_LIST_DATA, str); m_wndOutputList.SetItem(lItemCount++, data); } } } bDelete(plLangIDO); bDelete(plLangIDN); bDelete(pbChanged); m_wndOutputList.DataChanged(); return true; }