41 if (
auto* tableModel =
owner.getModel())
45 auto& headerComp =
owner.getHeader();
46 auto numColumns = headerComp.getNumColumns (
true);
47 auto clipBounds =
g.getClipBounds();
49 for (
int i = 0;
i < numColumns; ++
i)
53 auto columnRect = headerComp.getColumnPosition (
i).withHeight (
getHeight());
55 if (columnRect.getX() >= clipBounds.getRight())
58 if (columnRect.getRight() > clipBounds.getX())
62 if (
g.reduceClipRegion (columnRect))
64 g.setOrigin (columnRect.getX(), 0);
65 tableModel->paintCell (
g,
row, headerComp.getColumnIdOfIndex (
i,
true),
66 columnRect.getWidth(), columnRect.getHeight(),
isSelected);
74 void update (
int newRow,
bool isNowSelected)
85 auto* tableModel =
owner.getModel();
87 if (tableModel !=
nullptr &&
row <
owner.getNumRows())
89 const Identifier columnProperty (
"_tableColumnId");
90 auto numColumns =
owner.getHeader().getNumColumns (
true);
92 for (
int i = 0;
i < numColumns; ++
i)
94 auto columnId =
owner.getHeader().getColumnIdOfIndex (
i,
true);
97 if (
comp !=
nullptr && columnId !=
static_cast<int> (
comp->getProperties() [columnProperty]))
108 comp->getProperties().set (columnProperty, columnId);
132 c->setBounds (
owner.getHeader().getColumnPosition (index)
145 owner.selectRowsBasedOnModifierKeys (
row,
e.mods,
false);
147 auto columnId =
owner.getHeader().getColumnIdAtX (
e.x);
150 if (
auto*
m =
owner.getModel())
151 m->cellClicked (
row, columnId,
e);
163 &&
owner.getModel() !=
nullptr
164 &&
e.mouseWasDraggedSinceMouseDown()
170 rowsToDrag =
owner.getSelectedRows();
174 if (rowsToDrag.
size() > 0)
176 auto dragDescription =
owner.getModel()->getDragSourceDescription (rowsToDrag);
178 if (! (dragDescription.isVoid() || (dragDescription.isString() && dragDescription.toString().isEmpty())))
181 owner.startDragAndDrop (
e, rowsToDrag, dragDescription,
true);
191 owner.selectRowsBasedOnModifierKeys (
row,
e.mods,
true);
193 auto columnId =
owner.getHeader().getColumnIdAtX (
e.x);
197 m->cellClicked (
row, columnId,
e);
203 auto columnId =
owner.getHeader().getColumnIdAtX (
e.x);
206 if (
auto*
m =
owner.getModel())
207 m->cellDoubleClicked (
row, columnId,
e);
215 if (
auto*
m =
owner.getModel())
216 return m->getCellTooltip (
row, columnId);
228 return std::make_unique<RowAccessibilityHandler> (*
this);
239 { std::make_unique<RowComponentCellInterface> (*
this) }),
240 rowComponent (rowComp)
263 state = state.withMultiSelectable();
265 state = state.withSelectable();
268 return state.withSelected();
317 if (
owner.isAutoSizeMenuOptionShown())
329 switch (menuReturnId)
351 setHeader (std::make_unique<Header> (*
this));
360 if (
model != newModel)
369 if (newHeader ==
nullptr)
378 newBounds =
header->getBounds();
381 header->setBounds (newBounds);
385 header->addListener (
this);
390 return header->getHeight();
401 auto width =
model !=
nullptr ?
model->getColumnAutoSizeWidth (columnId) : 0;
409 for (
int i = 0;
i <
header->getNumColumns (
true); ++
i)
420 auto headerCell =
header->getColumnPosition (
header->getIndexOfColumnId (columnId,
true));
422 if (relativeToComponentTopLeft)
423 headerCell.translate (
header->getX(), 0);
426 .withX (headerCell.getX())
427 .withWidth (headerCell.getWidth());
433 return rowComp->findChildComponentForColumn (columnId);
441 auto pos =
header->getColumnPosition (
header->getIndexOfColumnId (columnId,
true));
443 auto x = scrollbar.getCurrentRangeStart();
444 auto w = scrollbar.getCurrentRangeSize();
448 else if (pos.getRight() >
x +
w)
449 x +=
jmax (0.0, pos.getRight() - (
x +
w));
451 scrollbar.setCurrentRangeStart (
x);
456 return model !=
nullptr ?
model->getNumRows() : 0;
465 if (existingComponentToUpdate ==
nullptr)
466 existingComponentToUpdate =
new RowComp (*
this);
468 static_cast<RowComp*
> (existingComponentToUpdate)->update (rowNumber, rowSelected);
470 return existingComponentToUpdate;
475 if (
model !=
nullptr)
481 if (
model !=
nullptr)
487 if (
model !=
nullptr)
493 if (
model !=
nullptr)
494 model->backgroundClicked (
e);
499 if (
model !=
nullptr)
500 model->listWasScrolled();
519 if (
model !=
nullptr)
520 model->sortOrderChanged (
header->getSortColumnId(),
521 header->isSortedForwards());
552 explicit TableInterface (
TableListBox& tableListBoxToWrap)
553 : tableListBox (tableListBoxToWrap)
559 if (
auto* tableModel = tableListBox.getModel())
560 return tableModel->getNumRows();
565 int getNumColumns()
const override
567 return tableListBox.getHeader().getNumColumns (
false);
575 if (
auto* cellComponent = tableListBox.getCellComponent (tableListBox.getHeader().getColumnIdOfIndex (
column,
false),
row))
576 return cellComponent->getAccessibilityHandler();
578 if (
auto* rowComp = tableListBox.getComponentForRowNumber (
row))
579 return rowComp->getAccessibilityHandler();
591 return std::make_unique<AccessibilityHandler> (*
this,
614 jassert (existingComponentToUpdate ==
nullptr);
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
Definition juce_AccessibilityActions.h:73
Definition juce_AccessibilityCellInterface.h:37
Definition juce_AccessibilityHandler.h:41
virtual AccessibleState getCurrentState() const
Definition juce_AccessibilityHandler.cpp:75
AccessibilityHandler(Component &componentToWrap, AccessibilityRole accessibilityRole, AccessibilityActions actions={}, Interfaces interfaces={})
Definition juce_AccessibilityHandler.cpp:55
Definition juce_AccessibilityTableInterface.h:37
Definition juce_AccessibilityState.h:39
JUCE_NODISCARD AccessibleState withIgnored() const noexcept
Definition juce_AccessibilityState.h:95
Definition juce_Component.h:36
void setFocusContainerType(FocusContainerType containerType) noexcept
Definition juce_Component.cpp:2862
int getHeight() const noexcept
Definition juce_Component.h:274
int getX() const noexcept
Definition juce_Component.h:259
void addAndMakeVisible(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1554
void repaint()
Definition juce_Component.cpp:1917
Component() noexcept
Definition juce_Component.cpp:517
@ focusContainer
Definition juce_Component.h:1295
Point< int > getMouseXYRelative() const
Definition juce_Component.cpp:3210
int getWidth() const noexcept
Definition juce_Component.h:271
bool isEnabled() const noexcept
Definition juce_Component.cpp:3104
Definition juce_GraphicsContext.h:660
Definition juce_GraphicsContext.h:45
Definition juce_Identifier.h:39
int getRowContainingPosition(int x, int y) const noexcept
Definition juce_ListBox.cpp:824
void setMinimumContentWidth(int newMinimumWidth)
Definition juce_ListBox.cpp:1024
Component * getComponentForRowNumber(int rowNumber) const noexcept
Definition juce_ListBox.cpp:845
int getVisibleContentWidth() const noexcept
Definition juce_ListBox.cpp:1030
ScrollBar & getHorizontalScrollBar() const noexcept
Definition juce_ListBox.cpp:1033
Rectangle< int > getRowPosition(int rowNumber, bool relativeToComponentTopLeft) const noexcept
Definition juce_ListBox.cpp:858
int getNumRowsOnScreen() const noexcept
Definition juce_ListBox.cpp:1019
void updateContent()
Definition juce_ListBox.cpp:622
void setHeaderComponent(std::unique_ptr< Component > newHeaderComponent)
Definition juce_ListBox.cpp:1053
void assignModelPtr(ListBoxModel *)
Definition juce_ListBox.cpp:547
void resized() override
Definition juce_ListBox.cpp:601
friend class ListBox
Definition juce_ListBox.h:169
Definition juce_MouseEvent.h:39
Definition juce_OwnedArray.h:51
static JUCE_NODISCARD Range withStartAndLength(const ValueType startValue, const ValueType length) noexcept
Definition juce_Range.h:66
Definition juce_Rectangle.h:67
Definition juce_SparseSet.h:41
Type size() const noexcept
Definition juce_SparseSet.h:67
void addRange(Range< Type > range)
Definition juce_SparseSet.h:143
Definition juce_String.h:53
int getRowIndex() const override
Definition juce_TableListBox.cpp:284
RowAccessibilityHandler & owner
Definition juce_TableListBox.cpp:292
int getColumnIndex() const override
Definition juce_TableListBox.cpp:281
int getColumnSpan() const override
Definition juce_TableListBox.cpp:282
RowComponentCellInterface(RowAccessibilityHandler &handler)
Definition juce_TableListBox.cpp:276
int getDisclosureLevel() const override
Definition juce_TableListBox.cpp:287
const AccessibilityHandler * getTableHandler() const override
Definition juce_TableListBox.cpp:289
int getRowSpan() const override
Definition juce_TableListBox.cpp:285
RowAccessibilityHandler(RowComp &rowComp)
Definition juce_TableListBox.cpp:235
AccessibleState getCurrentState() const override
Definition juce_TableListBox.cpp:254
String getTitle() const override
Definition juce_TableListBox.cpp:244
String getHelp() const override
Definition juce_TableListBox.cpp:252
RowComp & rowComponent
Definition juce_TableListBox.cpp:296
Definition juce_TableListBox.cpp:31
void resized() override
Definition juce_TableListBox.cpp:123
String getTooltip() override
Definition juce_TableListBox.cpp:210
void mouseDrag(const MouseEvent &e) override
Definition juce_TableListBox.cpp:160
int row
Definition juce_TableListBox.cpp:302
bool selectRowOnMouseUp
Definition juce_TableListBox.cpp:303
void update(int newRow, bool isNowSelected)
Definition juce_TableListBox.cpp:74
TableListBox & owner
Definition juce_TableListBox.cpp:300
void mouseUp(const MouseEvent &e) override
Definition juce_TableListBox.cpp:187
void mouseDoubleClick(const MouseEvent &e) override
Definition juce_TableListBox.cpp:201
OwnedArray< Component > columnComponents
Definition juce_TableListBox.cpp:301
void mouseDown(const MouseEvent &e) override
Definition juce_TableListBox.cpp:136
void resizeCustomComp(int index)
Definition juce_TableListBox.cpp:129
Component * findChildComponentForColumn(int columnId) const
Definition juce_TableListBox.cpp:221
void paint(Graphics &g) override
Definition juce_TableListBox.cpp:39
bool isDragging
Definition juce_TableListBox.cpp:303
bool isSelected
Definition juce_TableListBox.cpp:303
RowComp(TableListBox &tlb) noexcept
Definition juce_TableListBox.cpp:33
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_TableListBox.cpp:226
void tableColumnsChanged(TableHeaderComponent *) override
Definition juce_TableListBox.cpp:503
void autoSizeAllColumns()
Definition juce_TableListBox.cpp:407
int columnIdNowBeingDragged
Definition juce_TableListBox.h:337
void setModel(TableListBoxModel *newModel)
Definition juce_TableListBox.cpp:358
int getHeaderHeight() const noexcept
Definition juce_TableListBox.cpp:388
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_TableListBox.cpp:547
TableListBoxModel * model
Definition juce_TableListBox.h:336
void scrollToEnsureColumnIsOnscreen(int columnId)
Definition juce_TableListBox.cpp:438
void paintListBoxItem(int, Graphics &, int, int, bool) override
Definition juce_TableListBox.cpp:459
TableHeaderComponent * header
Definition juce_TableListBox.h:335
void setHeaderHeight(int newHeight)
Definition juce_TableListBox.cpp:393
TableListBox(const String &componentName=String(), TableListBoxModel *model=nullptr)
Definition juce_TableListBox.cpp:346
void autoSizeColumn(int columnId)
Definition juce_TableListBox.cpp:399
Component * getCellComponent(int columnId, int rowNumber) const
Definition juce_TableListBox.cpp:430
bool autoSizeOptionsShown
Definition juce_TableListBox.h:338
void deleteKeyPressed(int currentSelectedRow) override
Definition juce_TableListBox.cpp:479
void setHeader(std::unique_ptr< TableHeaderComponent > newHeader)
Definition juce_TableListBox.cpp:367
void tableColumnsResized(TableHeaderComponent *) override
Definition juce_TableListBox.cpp:510
void setAutoSizeMenuOptionShown(bool shouldBeShown) noexcept
Definition juce_TableListBox.cpp:413
Component * refreshComponentForRow(int rowNumber, bool isRowSelected, Component *existingComponentToUpdate) override
Definition juce_TableListBox.cpp:463
void updateColumnComponents() const
Definition juce_TableListBox.cpp:538
void listWasScrolled() override
Definition juce_TableListBox.cpp:497
void resized() override
Definition juce_TableListBox.cpp:530
int getNumRows() override
Definition juce_TableListBox.cpp:454
void selectedRowsChanged(int row) override
Definition juce_TableListBox.cpp:473
~TableListBox() override
Definition juce_TableListBox.cpp:354
Rectangle< int > getCellPosition(int columnId, int rowNumber, bool relativeToComponentTopLeft) const
Definition juce_TableListBox.cpp:418
void returnKeyPressed(int currentSelectedRow) override
Definition juce_TableListBox.cpp:485
void tableSortOrderChanged(TableHeaderComponent *) override
Definition juce_TableListBox.cpp:517
void tableColumnDraggingChanged(TableHeaderComponent *, int) override
Definition juce_TableListBox.cpp:524
void backgroundClicked(const MouseEvent &) override
Definition juce_TableListBox.cpp:491
Definition juce_TableListBox.h:41
virtual String getCellTooltip(int rowNumber, int columnId)
Definition juce_TableListBox.cpp:608
virtual int getColumnAutoSizeWidth(int columnId)
Definition juce_TableListBox.cpp:602
virtual var getDragSourceDescription(const SparseSet< int > ¤tlySelectedRows)
Definition juce_TableListBox.cpp:609
virtual void cellClicked(int rowNumber, int columnId, const MouseEvent &)
Definition juce_TableListBox.cpp:598
virtual void sortOrderChanged(int newSortColumnId, bool isForwards)
Definition juce_TableListBox.cpp:601
virtual void cellDoubleClicked(int rowNumber, int columnId, const MouseEvent &)
Definition juce_TableListBox.cpp:599
virtual void selectedRowsChanged(int lastRowSelected)
Definition juce_TableListBox.cpp:603
virtual void returnKeyPressed(int lastRowSelected)
Definition juce_TableListBox.cpp:605
virtual void backgroundClicked(const MouseEvent &)
Definition juce_TableListBox.cpp:600
virtual void listWasScrolled()
Definition juce_TableListBox.cpp:606
virtual Component * refreshComponentForCell(int rowNumber, int columnId, bool isRowSelected, Component *existingComponentToUpdate)
Definition juce_TableListBox.cpp:611
virtual void deleteKeyPressed(int lastRowSelected)
Definition juce_TableListBox.cpp:604
Definition juce_Variant.h:42
* e
Definition inflate.c:1404
UINT_D64 w
Definition inflate.c:942
unsigned * m
Definition inflate.c:1559
int g
Definition inflate.c:1573
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
static const char * name
Definition pugl.h:1582
static int width
Definition pugl.h:1593
#define TRANS(stringLiteral)
Definition juce_LocalisedStrings.h:208
static int JUCE_CDECL comp(const void *a, const void *b)
Definition lsp.c:298
Definition carla_juce.cpp:31
void ignoreUnused(Types &&...) noexcept
Definition juce_MathsFunctions.h:333
static AccessibilityActions getListRowAccessibilityActions(RowComponentType &rowComponent)
Definition juce_ListBox.cpp:30
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
AccessibilityRole
Definition juce_AccessibilityRole.h:37
@ list
Definition juce_AccessibilityRole.h:56
@ column
Definition juce_AccessibilityRole.h:52
@ row
Definition juce_AccessibilityRole.h:53
Definition juce_AccessibilityHandler.h:49
return c
Definition crypt.c:175
void handler(int signal)
Definition fileio.c:1632
ss
Definition zipinfo.c:2292
#define const
Definition zconf.h:137