float GetPreferredWidth(const BVariant& value, BView* targetView) const { // get the preferred width from the node's designated renderer if (value.Type() == VALUE_NODE_TYPE) { ModelNode* node = dynamic_cast<ModelNode*>(value.ToReferenceable()); if (node != NULL && node->GetValue() != NULL && node->TableCellRenderer() != NULL) { return node->TableCellRenderer()->PreferredValueWidth( node->GetValue(), targetView); } } return fColumn.BTitledColumn::GetPreferredWidth(NULL, targetView); }
void DrawValue(const BVariant& value, BRect rect, BView* targetView) { // draw the node's value with the designated renderer if (value.Type() == VALUE_NODE_TYPE) { ModelNode* node = dynamic_cast<ModelNode*>(value.ToReferenceable()); if (node != NULL && node->GetValue() != NULL && node->TableCellRenderer() != NULL) { node->TableCellRenderer()->RenderValue(node->GetValue(), rect, targetView); return; } } // fall back to drawing an empty string fField.SetString(""); fField.SetWidth(Width()); fColumn.DrawField(&fField, rect, targetView); }
void VariablesView::TreeTableCellMouseDown(TreeTable* table, const TreeTablePath& path, int32 columnIndex, BPoint screenWhere, uint32 buttons) { if ((buttons & B_SECONDARY_MOUSE_BUTTON) == 0) return; _FinishContextMenu(true); ModelNode* node = (ModelNode*)fVariableTableModel->NodeForPath(path); if (node == NULL) return; TableCellValueRenderer* cellRenderer = node->TableCellRenderer(); if (cellRenderer == NULL) return; Settings* settings = cellRenderer->GetSettings(); if (settings == NULL) return; SettingsMenu* settingsMenu; status_t error = node->GetValueHandler()->CreateTableCellValueSettingsMenu( node->GetValue(), settings, settingsMenu); BReference<SettingsMenu> settingsMenuReference(settingsMenu, true); if (error != B_OK) return; TableCellContextMenuTracker* tracker = new(std::nothrow) TableCellContextMenuTracker(node, Looper(), this); BReference<TableCellContextMenuTracker> trackerReference(tracker); if (tracker == NULL || tracker->Init(settings, settingsMenu) != B_OK) return; fTableCellContextMenuTracker = trackerReference.Detach(); fTableCellContextMenuTracker->ShowMenu(screenWhere); }