diff --git a/src/dearpygui_commands.h b/src/dearpygui_commands.h index 0528ba34f..0e521270b 100644 --- a/src/dearpygui_commands.h +++ b/src/dearpygui_commands.h @@ -233,10 +233,16 @@ set_x_scroll(PyObject* self, PyObject* args, PyObject* kwargs) pChild->configData.scrollX = value; pChild->configData._scrollXSet = true; } + else if (window->type == mvAppItemType::mvTable) + { + auto pChild = static_cast(window); + pChild->_scrollX = value; + pChild->_scrollXSet = true; + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "set_x_scroll", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); @@ -279,10 +285,16 @@ set_y_scroll(PyObject* self, PyObject* args, PyObject* kwargs) pChild->configData.scrollY = value; pChild->configData._scrollYSet = true; } + else if (window->type == mvAppItemType::mvTable) + { + auto pChild = static_cast(window); + pChild->_scrollY = value; + pChild->_scrollYSet = true; + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "set_y_scroll", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); @@ -323,10 +335,16 @@ get_x_scroll(PyObject* self, PyObject* args, PyObject* kwargs) return ToPyFloat(pChild->configData.scrollX); } + else if (window->type == mvAppItemType::mvTable) + { + auto pTable = static_cast(window); + + return ToPyFloat(pTable->_scrollX); + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "get_x_scroll", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); @@ -367,10 +385,16 @@ get_y_scroll(PyObject* self, PyObject* args, PyObject* kwargs) return ToPyFloat(pChild->configData.scrollY); } + else if (window->type == mvAppItemType::mvTable) + { + auto pTable = static_cast(window); + + return ToPyFloat(pTable->_scrollY); + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "get_y_scroll", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); @@ -411,10 +435,16 @@ get_x_scroll_max(PyObject* self, PyObject* args, PyObject* kwargs) return ToPyFloat(pChild->configData.scrollMaxX); } + else if (window->type == mvAppItemType::mvTable) + { + auto pTable = static_cast(window); + + return ToPyFloat(pTable->_scrollMaxX); + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "get_x_scroll_max", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); @@ -455,10 +485,16 @@ get_y_scroll_max(PyObject* self, PyObject* args, PyObject* kwargs) return ToPyFloat(pChild->configData.scrollMaxY); } + else if (window->type == mvAppItemType::mvTable) + { + auto pTable = static_cast(window); + + return ToPyFloat(pTable->_scrollMaxY); + } else { mvThrowPythonError(mvErrorCode::mvIncompatibleType, "set_y_scroll_max", - "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow", window); + "Incompatible type. Expected types include: mvWindowAppItem, mvChildWindow, mvTable", window); } return GetPyNone(); diff --git a/src/mvTables.cpp b/src/mvTables.cpp index 6eb7ec381..342bee7ac 100644 --- a/src/mvTables.cpp +++ b/src/mvTables.cpp @@ -327,6 +327,28 @@ void mvTable::draw(ImDrawList* drawlist, float x, float y) columnnum++; } + if (_scrollXSet) + { + if (_scrollX < 0.0f) + ImGui::SetScrollHereX(1.0f); + else + ImGui::SetScrollX(_scrollX); + _scrollXSet = false; + } + if (_scrollYSet) + { + if (_scrollY < 0.0f) + ImGui::SetScrollHereY(1.0f); + else + ImGui::SetScrollY(_scrollY); + _scrollYSet = false; + } + + _scrollX = ImGui::GetScrollX(); + _scrollMaxX = ImGui::GetScrollMaxX(); + _scrollY = ImGui::GetScrollY(); + _scrollMaxY = ImGui::GetScrollMaxY(); + ImGui::EndTable(); } } diff --git a/src/mvTables.h b/src/mvTables.h index 6bf137060..c2d7b19e6 100644 --- a/src/mvTables.h +++ b/src/mvTables.h @@ -76,6 +76,13 @@ class mvTable : public mvAppItem bool _tableHeader = true; bool _useClipper = false; + float _scrollX = 0.0f; + float _scrollY = 0.0f; + float _scrollMaxX = 0.0f; + float _scrollMaxY = 0.0f; + bool _scrollXSet = false; + bool _scrollYSet = false; + std::vector _columnColorsSet; std::vector _rowColorsSet; std::vector _rowSelectionColorsSet;