void DataTable::Receive ( JBroadcaster* sender, const Message& message ) { // Here we check to see what messages we have received. // We first check if the sender is our data array if (sender == itsData) { // Our data array sent us a message // Was data inserted? if (message.Is(JOrderedSetT::kElementsInserted)) { // cast the message to an ElementsInserted object const JOrderedSetT::ElementsInserted* info = dynamic_cast<const JOrderedSetT::ElementsInserted*>(&message); assert(info != NULL); // For each element inserted, we insert a row InsertRows(info->GetFirstIndex(), info->GetCount(), kDefRowHeight); } // Was data removed? else if (message.Is(JOrderedSetT::kElementsRemoved)) { // cast the message to an ElementsRemoved object const JOrderedSetT::ElementsRemoved* info = dynamic_cast<const JOrderedSetT::ElementsRemoved*>(&message); assert(info != NULL); // Remove the corresponding table rows. RemoveNextRows(info->GetFirstIndex(), info->GetCount()); } // Was an element changed? else if (message.Is(JOrderedSetT::kElementChanged)) { // cast the message to an ElementsRemoved object const JOrderedSetT::ElementChanged* info = dynamic_cast<const JOrderedSetT::ElementChanged*>(&message); assert(info != NULL); // The element changed, so redraw it. // (This would not be necessary if we were using a // class derived from JTableData.) TableRefreshCell(info->GetFirstIndex(), 1); } } // pass the message to our base class else { JXTable::Receive(sender, message); } }
void JXFSBindingTable::SyncWithBindingList() { CancelEditing(); const JSize dataRowCount = itsBindingList->GetElementCount(); if (GetRowCount() < dataRowCount) { AppendRows(dataRowCount - GetRowCount()); } else if (GetRowCount() > dataRowCount) { RemoveNextRows(dataRowCount+1, GetRowCount() - dataRowCount); } UpdateButtons(); Refresh(); }
void CBSymbolTable::RebuildTable() { (JXGetApplication())->DisplayBusyCursor(); const JPoint scrollPt = (GetAperture()).topLeft(); ClearSelection(); itsKeyBuffer.Clear(); itsMaxStringWidth = 0; if (itsVisibleListLockedFlag) { const JSize count = itsVisibleList->GetElementCount(); for (JIndex i=1; i<=count; i++) { const JIndex j = itsVisibleList->GetElement(i); const JString* signature; itsSymbolList->GetSignature(j, &signature); CBLanguage lang; CBSymbolList::Type type; CalcColWidths(itsSymbolList->GetSymbol(j, &lang, &type), signature); } } else if (itsNameFilter != NULL || itsNameLiteral != NULL) { itsVisibleList->RemoveAll(); const JSize symbolCount = itsSymbolList->GetElementCount(); for (JIndex i=1; i<=symbolCount; i++) { CBLanguage lang; CBSymbolList::Type type; const JString& symbolName = itsSymbolList->GetSymbol(i, &lang, &type); const JString* signature; itsSymbolList->GetSignature(i, &signature); if (/* (CBGetSymbolTypeList())->IsVisible(type) && */ ((itsNameFilter != NULL && itsNameFilter->Match(symbolName)) || (itsNameLiteral != NULL && symbolName.Contains(*itsNameLiteral))) ) { itsVisibleList->AppendElement(i); CalcColWidths(symbolName, signature); } } } else // optimize because scanning 1e5 symbols takes a while! { const JSize symbolCount = itsSymbolList->GetElementCount(); if (itsVisibleList->GetElementCount() > symbolCount) { itsVisibleList->RemoveNextElements( symbolCount+1, itsVisibleList->GetElementCount() - symbolCount); } while (itsVisibleList->GetElementCount() < symbolCount) { itsVisibleList->AppendElement(itsVisibleList->GetElementCount()+1); } } const JSize rowCount = itsVisibleList->GetElementCount(); if (GetRowCount() < rowCount) { AppendRows(rowCount - GetRowCount()); } else if (GetRowCount() > rowCount) { RemoveNextRows(rowCount+1, GetRowCount() - rowCount); } AdjustColWidths(); ScrollTo(scrollPt); Refresh(); }
void SelectionTable::Receive ( JBroadcaster* sender, const Message& message ) { // Here we check to see what messages we have received. // We first check if the sender is our data array if (sender == itsData) { // Our data array sent us a message // Was data inserted? if (message.Is(JOrderedSetT::kElementsInserted)) { // cast the message to an ElementsInserted object const JOrderedSetT::ElementsInserted* info = dynamic_cast<const JOrderedSetT::ElementsInserted*>(&message); assert(info != NULL); // For each element inserted, we insert a row InsertRows(info->GetFirstIndex(), info->GetCount(), kDefRowHeight); } // Was data removed? else if (message.Is(JOrderedSetT::kElementsRemoved)) { // cast the message to an ElementsRemoved object const JOrderedSetT::ElementsRemoved* info = dynamic_cast<const JOrderedSetT::ElementsRemoved*>(&message); assert(info != NULL); // Remove corresponding table rows. for (JSize i = info->GetLastIndex(); i >= info->GetFirstIndex() ; i--) { RemoveNextRows(info->GetFirstIndex(), info->GetCount()); } } // Was an element changed? else if (message.Is(JOrderedSetT::kElementChanged)) { // cast the message to an ElementsRemoved object const JOrderedSetT::ElementChanged* info = dynamic_cast<const JOrderedSetT::ElementChanged*>(&message); assert(info != NULL); // The element changed, so redraw it. // (This would not be necessary if we were using a // class derived from JTableData.) TableRefreshRow(info->GetFirstIndex()); } } // Did the Table menu send a message? else if (sender == itsTableMenu) { // Does the menu need an update? if (message.Is(JXMenu::kNeedsUpdate)) { UpdateTableMenu(); } // Has a menu item been selected? else if (message.Is(JXMenu::kItemSelected)) { // cast the message to an ItemSelecte object. // This will tell us which item was selected. const JXMenu::ItemSelected* info = dynamic_cast<const JXMenu::ItemSelected*>(&message); assert(info != NULL); // Pass the selected menu item to our menu handler function. HandleTableMenu(info->GetIndex()); } } // pass the message to our base class else { JXTable::Receive(sender, message); } }