Mercurial > dwindows
comparison dw.hpp @ 2962:e6072eb914ce
C++: Step 4 of the std::string transition.
Remove C style string lambda support due to limitations of std::function.
std::function due to its template definition cannot differentiate parameters.
This causes std::function parameters to be indistiguishable despite different signatures.
Use the C style function pointer instead if you want C style strings, not lambdas.
Convert KeyPress lambda to use std::string, this was missed in the last commit.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sat, 25 Feb 2023 04:25:21 +0000 |
parents | b9bd130f438a |
children | 2d9521396112 |
comparison
equal
deleted
inserted
replaced
2961:b9bd130f438a | 2962:e6072eb914ce |
---|---|
701 private: | 701 private: |
702 bool ExposeConnected, ConfigureConnected, KeyPressConnected, ButtonPressConnected, ButtonReleaseConnected, MotionNotifyConnected; | 702 bool ExposeConnected, ConfigureConnected, KeyPressConnected, ButtonPressConnected, ButtonReleaseConnected, MotionNotifyConnected; |
703 #ifdef DW_LAMBDA | 703 #ifdef DW_LAMBDA |
704 std::function<int(DWExpose *)> _ConnectExpose; | 704 std::function<int(DWExpose *)> _ConnectExpose; |
705 std::function<int(int, int)> _ConnectConfigure; | 705 std::function<int(int, int)> _ConnectConfigure; |
706 std::function<int(char c, int, int, char *)> _ConnectCKeyPress; | |
707 std::function<int(char c, int, int, std::string)> _ConnectKeyPress; | 706 std::function<int(char c, int, int, std::string)> _ConnectKeyPress; |
708 std::function<int(int, int, int)> _ConnectButtonPress; | 707 std::function<int(int, int, int)> _ConnectButtonPress; |
709 std::function<int(int, int, int)> _ConnectButtonRelease; | 708 std::function<int(int, int, int)> _ConnectButtonRelease; |
710 std::function<int(int, int, int)> _ConnectMotionNotify; | 709 std::function<int(int, int, int)> _ConnectMotionNotify; |
711 #endif | 710 #endif |
718 int (*_ConnectMotionNotifyOld)(Render *, int x, int y, int buttonmask); | 717 int (*_ConnectMotionNotifyOld)(Render *, int x, int y, int buttonmask); |
719 void Setup() { | 718 void Setup() { |
720 #ifdef DW_LAMBDA | 719 #ifdef DW_LAMBDA |
721 _ConnectExpose = 0; | 720 _ConnectExpose = 0; |
722 _ConnectConfigure = 0; | 721 _ConnectConfigure = 0; |
723 _ConnectCKeyPress = 0; | |
724 _ConnectKeyPress = 0; | 722 _ConnectKeyPress = 0; |
725 _ConnectButtonPress = 0; | 723 _ConnectButtonPress = 0; |
726 _ConnectButtonRelease = 0; | 724 _ConnectButtonRelease = 0; |
727 _ConnectMotionNotify = 0; | 725 _ConnectMotionNotify = 0; |
728 #endif | 726 #endif |
790 return classptr->OnConfigure(width, height); } | 788 return classptr->OnConfigure(width, height); } |
791 static int _OnKeyPress(HWND window, char c, int vk, int state, void *data, char *utf8) { | 789 static int _OnKeyPress(HWND window, char c, int vk, int state, void *data, char *utf8) { |
792 Render *classptr = reinterpret_cast<Render *>(data); | 790 Render *classptr = reinterpret_cast<Render *>(data); |
793 std::string utf8string = utf8 ? std::string(utf8) : std::string(); | 791 std::string utf8string = utf8 ? std::string(utf8) : std::string(); |
794 #ifdef DW_LAMBDA | 792 #ifdef DW_LAMBDA |
795 if(classptr->_ConnectCKeyPress) | 793 if(classptr->_ConnectKeyPress) |
796 return classptr->_ConnectCKeyPress(c, vk, state, utf8); | |
797 else if(classptr->_ConnectKeyPress) | |
798 return classptr->_ConnectKeyPress(c, vk, state, utf8string); | 794 return classptr->_ConnectKeyPress(c, vk, state, utf8string); |
799 #endif | 795 #endif |
800 if(classptr->_ConnectCKeyPressOld) | 796 if(classptr->_ConnectCKeyPressOld) |
801 return classptr->_ConnectCKeyPressOld(classptr, c, vk, state, utf8); | 797 return classptr->_ConnectCKeyPressOld(classptr, c, vk, state, utf8); |
802 else if(classptr->_ConnectKeyPressOld) | 798 else if(classptr->_ConnectKeyPressOld) |
896 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); | 892 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); |
897 ConfigureConnected = true; | 893 ConfigureConnected = true; |
898 } | 894 } |
899 } | 895 } |
900 #ifdef DW_LAMBDA | 896 #ifdef DW_LAMBDA |
901 void ConnectKeyPress(std::function<int(char, int, int, char *)> userfunc) | |
902 { | |
903 _ConnectCKeyPress = userfunc; | |
904 if(!KeyPressConnected) { | |
905 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | |
906 KeyPressConnected = true; | |
907 } | |
908 } | |
909 void ConnectKeyPress(std::function<int(char, int, int, std::string)> userfunc) | 897 void ConnectKeyPress(std::function<int(char, int, int, std::string)> userfunc) |
910 { | 898 { |
911 _ConnectKeyPress = userfunc; | 899 _ConnectKeyPress = userfunc; |
912 if(!KeyPressConnected) { | 900 if(!KeyPressConnected) { |
913 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | 901 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); |
1108 class HTML : public Widget | 1096 class HTML : public Widget |
1109 { | 1097 { |
1110 private: | 1098 private: |
1111 bool ChangedConnected, ResultConnected; | 1099 bool ChangedConnected, ResultConnected; |
1112 #ifdef DW_LAMBDA | 1100 #ifdef DW_LAMBDA |
1113 std::function<int(int, char *)> _ConnectCChanged; | |
1114 std::function<int(int, char *, void *)> _ConnectCResult; | |
1115 std::function<int(int, std::string)> _ConnectChanged; | 1101 std::function<int(int, std::string)> _ConnectChanged; |
1116 std::function<int(int, std::string, void *)> _ConnectResult; | 1102 std::function<int(int, std::string, void *)> _ConnectResult; |
1117 #endif | 1103 #endif |
1118 int (*_ConnectCChangedOld)(HTML *, int status, char *url); | 1104 int (*_ConnectCChangedOld)(HTML *, int status, char *url); |
1119 int (*_ConnectCResultOld)(HTML *, int status, char *result, void *scriptdata); | 1105 int (*_ConnectCResultOld)(HTML *, int status, char *result, void *scriptdata); |
1120 int (*_ConnectChangedOld)(HTML *, int status, std::string url); | 1106 int (*_ConnectChangedOld)(HTML *, int status, std::string url); |
1121 int (*_ConnectResultOld)(HTML *, int status, std::string result, void *scriptdata); | 1107 int (*_ConnectResultOld)(HTML *, int status, std::string result, void *scriptdata); |
1122 void Setup() { | 1108 void Setup() { |
1123 #ifdef DW_LAMBDA | 1109 #ifdef DW_LAMBDA |
1124 _ConnectCChanged = 0; | |
1125 _ConnectCResult = 0; | |
1126 _ConnectChanged = 0; | 1110 _ConnectChanged = 0; |
1127 _ConnectResult = 0; | 1111 _ConnectResult = 0; |
1128 #endif | 1112 #endif |
1129 _ConnectCChangedOld = 0; | 1113 _ConnectCChangedOld = 0; |
1130 _ConnectCResultOld = 0; | 1114 _ConnectCResultOld = 0; |
1145 } | 1129 } |
1146 static int _OnChanged(HWND window, int status, char *url, void *data) { | 1130 static int _OnChanged(HWND window, int status, char *url, void *data) { |
1147 HTML *classptr = reinterpret_cast<HTML *>(data); | 1131 HTML *classptr = reinterpret_cast<HTML *>(data); |
1148 std::string utf8string = url ? std::string(url) : std::string(); | 1132 std::string utf8string = url ? std::string(url) : std::string(); |
1149 #ifdef DW_LAMBDA | 1133 #ifdef DW_LAMBDA |
1150 if(classptr->_ConnectCChanged) | 1134 if(classptr->_ConnectChanged) |
1151 return classptr->_ConnectCChanged(status, url); | |
1152 else if(classptr->_ConnectChanged) | |
1153 return classptr->_ConnectChanged(status, utf8string); | 1135 return classptr->_ConnectChanged(status, utf8string); |
1154 #endif | 1136 #endif |
1155 if(classptr->_ConnectCChangedOld) | 1137 if(classptr->_ConnectCChangedOld) |
1156 return classptr->_ConnectCChangedOld(classptr, status, url); | 1138 return classptr->_ConnectCChangedOld(classptr, status, url); |
1157 else if(classptr->_ConnectChangedOld) | 1139 else if(classptr->_ConnectChangedOld) |
1159 return classptr->OnChanged(status, utf8string); } | 1141 return classptr->OnChanged(status, utf8string); } |
1160 static int _OnResult(HWND window, int status, char *result, void *scriptdata, void *data) { | 1142 static int _OnResult(HWND window, int status, char *result, void *scriptdata, void *data) { |
1161 HTML *classptr = reinterpret_cast<HTML *>(data); | 1143 HTML *classptr = reinterpret_cast<HTML *>(data); |
1162 std::string utf8string = result ? std::string(result) : std::string(); | 1144 std::string utf8string = result ? std::string(result) : std::string(); |
1163 #ifdef DW_LAMBDA | 1145 #ifdef DW_LAMBDA |
1164 if(classptr->_ConnectCResult) | 1146 if(classptr->_ConnectResult) |
1165 return classptr->_ConnectResult(status, result, scriptdata); | |
1166 else if(classptr->_ConnectResult) | |
1167 return classptr->_ConnectResult(status, utf8string, scriptdata); | 1147 return classptr->_ConnectResult(status, utf8string, scriptdata); |
1168 #endif | 1148 #endif |
1169 if(classptr->_ConnectCResultOld) | 1149 if(classptr->_ConnectCResultOld) |
1170 return classptr->_ConnectCResultOld(classptr, status, result, scriptdata); | 1150 return classptr->_ConnectCResultOld(classptr, status, result, scriptdata); |
1171 else if(classptr->_ConnectResultOld) | 1151 else if(classptr->_ConnectResultOld) |
1185 int JavascriptRun(std::string script, void *scriptdata) { return dw_html_javascript_run(hwnd, script.c_str(), scriptdata); } | 1165 int JavascriptRun(std::string script, void *scriptdata) { return dw_html_javascript_run(hwnd, script.c_str(), scriptdata); } |
1186 int JavascriptRun(std::string script) { return dw_html_javascript_run(hwnd, script.c_str(), NULL); } | 1166 int JavascriptRun(std::string script) { return dw_html_javascript_run(hwnd, script.c_str(), NULL); } |
1187 int Raw(std::string buffer) { return dw_html_raw(hwnd, buffer.c_str()); } | 1167 int Raw(std::string buffer) { return dw_html_raw(hwnd, buffer.c_str()); } |
1188 int URL(std::string url) { return dw_html_url(hwnd, url.c_str()); } | 1168 int URL(std::string url) { return dw_html_url(hwnd, url.c_str()); } |
1189 #ifdef DW_LAMBDA | 1169 #ifdef DW_LAMBDA |
1190 void ConnectChangedC(std::function<int(int, char *)> userfunc) | |
1191 { | |
1192 _ConnectCChanged = userfunc; | |
1193 if(!ChangedConnected) { | |
1194 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | |
1195 ChangedConnected = true; | |
1196 } | |
1197 } | |
1198 void ConnectChanged(std::function<int(int, std::string)> userfunc) | 1170 void ConnectChanged(std::function<int(int, std::string)> userfunc) |
1199 { | 1171 { |
1200 _ConnectChanged = userfunc; | 1172 _ConnectChanged = userfunc; |
1201 if(!ChangedConnected) { | 1173 if(!ChangedConnected) { |
1202 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | 1174 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
1219 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | 1191 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
1220 ChangedConnected = true; | 1192 ChangedConnected = true; |
1221 } | 1193 } |
1222 } | 1194 } |
1223 #ifdef DW_LAMBDA | 1195 #ifdef DW_LAMBDA |
1224 void ConnectResultC(std::function<int(int, char *, void *)> userfunc) | |
1225 { | |
1226 _ConnectCResult = userfunc; | |
1227 if(!ResultConnected) { | |
1228 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | |
1229 ResultConnected = true; | |
1230 } | |
1231 } | |
1232 void ConnectResult(std::function<int(int, std::string, void *)> userfunc) | 1196 void ConnectResult(std::function<int(int, std::string, void *)> userfunc) |
1233 { | 1197 { |
1234 _ConnectResult = userfunc; | 1198 _ConnectResult = userfunc; |
1235 if(!ResultConnected) { | 1199 if(!ResultConnected) { |
1236 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | 1200 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); |
1655 class ObjectView : virtual public Widget | 1619 class ObjectView : virtual public Widget |
1656 { | 1620 { |
1657 private: | 1621 private: |
1658 bool ItemSelectConnected, ItemContextConnected; | 1622 bool ItemSelectConnected, ItemContextConnected; |
1659 #ifdef DW_LAMBDA | 1623 #ifdef DW_LAMBDA |
1660 std::function<int(HTREEITEM, char *, void *)> _ConnectCItemSelect; | |
1661 std::function<int(char *, int, int, void *)> _ConnectCItemContext; | |
1662 std::function<int(HTREEITEM, std::string, void *)> _ConnectItemSelect; | 1624 std::function<int(HTREEITEM, std::string, void *)> _ConnectItemSelect; |
1663 std::function<int(std::string, int, int, void *)> _ConnectItemContext; | 1625 std::function<int(std::string, int, int, void *)> _ConnectItemContext; |
1664 #endif | 1626 #endif |
1665 int (*_ConnectCItemSelectOld)(ObjectView *, HTREEITEM, char *, void *); | 1627 int (*_ConnectCItemSelectOld)(ObjectView *, HTREEITEM, char *, void *); |
1666 int (*_ConnectCItemContextOld)(ObjectView *, char *, int, int, void *); | 1628 int (*_ConnectCItemContextOld)(ObjectView *, char *, int, int, void *); |
1668 int (*_ConnectItemContextOld)(ObjectView *, std::string, int, int, void *); | 1630 int (*_ConnectItemContextOld)(ObjectView *, std::string, int, int, void *); |
1669 static int _OnItemSelect(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { | 1631 static int _OnItemSelect(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { |
1670 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); | 1632 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); |
1671 std::string utf8string = text ? std::string(text) : std::string(); | 1633 std::string utf8string = text ? std::string(text) : std::string(); |
1672 #ifdef DW_LAMBDA | 1634 #ifdef DW_LAMBDA |
1673 if(classptr->_ConnectCItemSelect) | 1635 if(classptr->_ConnectItemSelect) |
1674 return classptr->_ConnectCItemSelect(item, text, itemdata); | |
1675 else if(classptr->_ConnectItemSelect) | |
1676 return classptr->_ConnectItemSelect(item, utf8string, itemdata); | 1636 return classptr->_ConnectItemSelect(item, utf8string, itemdata); |
1677 #endif | 1637 #endif |
1678 if(classptr->_ConnectItemSelectOld) | 1638 if(classptr->_ConnectItemSelectOld) |
1679 return classptr->_ConnectItemSelectOld(classptr, item, text, itemdata); | 1639 return classptr->_ConnectItemSelectOld(classptr, item, text, itemdata); |
1680 else if(classptr->_ConnectItemSelectOld) | 1640 else if(classptr->_ConnectItemSelectOld) |
1683 } | 1643 } |
1684 static int _OnItemContext(HWND window, char *text, int x, int y, void *data, void *itemdata) { | 1644 static int _OnItemContext(HWND window, char *text, int x, int y, void *data, void *itemdata) { |
1685 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); | 1645 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); |
1686 std::string utf8string = text ? std::string(text) : std::string(); | 1646 std::string utf8string = text ? std::string(text) : std::string(); |
1687 #ifdef DW_LAMBDA | 1647 #ifdef DW_LAMBDA |
1688 if(classptr->_ConnectCItemContext) | 1648 if(classptr->_ConnectItemContext) |
1689 return classptr->_ConnectCItemContext(text, x, y, itemdata); | |
1690 else if(classptr->_ConnectItemContext) | |
1691 return classptr->_ConnectItemContext(utf8string, x, y, itemdata); | 1649 return classptr->_ConnectItemContext(utf8string, x, y, itemdata); |
1692 #endif | 1650 #endif |
1693 if(classptr->_ConnectCItemContextOld) | 1651 if(classptr->_ConnectCItemContextOld) |
1694 return classptr->_ConnectCItemContextOld(classptr, text, x, y, itemdata); | 1652 return classptr->_ConnectCItemContextOld(classptr, text, x, y, itemdata); |
1695 else if(classptr->_ConnectItemContextOld) | 1653 else if(classptr->_ConnectItemContextOld) |
1697 return classptr->OnItemContext(utf8string, x, y, itemdata); | 1655 return classptr->OnItemContext(utf8string, x, y, itemdata); |
1698 } | 1656 } |
1699 protected: | 1657 protected: |
1700 void SetupObjectView() { | 1658 void SetupObjectView() { |
1701 #ifdef DW_LAMBDA | 1659 #ifdef DW_LAMBDA |
1702 _ConnectCItemSelect = 0; | |
1703 _ConnectCItemContext = 0; | |
1704 _ConnectItemSelect = 0; | 1660 _ConnectItemSelect = 0; |
1705 _ConnectItemContext = 0; | 1661 _ConnectItemContext = 0; |
1706 #endif | 1662 #endif |
1707 _ConnectCItemSelectOld = 0; | 1663 _ConnectCItemSelectOld = 0; |
1708 _ConnectCItemContextOld = 0; | 1664 _ConnectCItemContextOld = 0; |
1733 ItemContextConnected = false; | 1689 ItemContextConnected = false; |
1734 return FALSE; | 1690 return FALSE; |
1735 } | 1691 } |
1736 public: | 1692 public: |
1737 #ifdef DW_LAMBDA | 1693 #ifdef DW_LAMBDA |
1738 void ConnectItemSelectC(std::function<int(HTREEITEM, char *, void *)> userfunc) | |
1739 { | |
1740 _ConnectCItemSelect = userfunc; | |
1741 if(!ItemSelectConnected) { | |
1742 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | |
1743 ItemSelectConnected = true; | |
1744 } | |
1745 } | |
1746 void ConnectItemSelect(std::function<int(HTREEITEM, std::string, void *)> userfunc) | 1694 void ConnectItemSelect(std::function<int(HTREEITEM, std::string, void *)> userfunc) |
1747 { | 1695 { |
1748 _ConnectItemSelect = userfunc; | 1696 _ConnectItemSelect = userfunc; |
1749 if(!ItemSelectConnected) { | 1697 if(!ItemSelectConnected) { |
1750 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | 1698 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
1767 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | 1715 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
1768 ItemSelectConnected = true; | 1716 ItemSelectConnected = true; |
1769 } | 1717 } |
1770 } | 1718 } |
1771 #ifdef DW_LAMBDA | 1719 #ifdef DW_LAMBDA |
1772 void ConnectItemContextC(std::function<int(char *, int, int, void *)> userfunc) | |
1773 { | |
1774 _ConnectCItemContext = userfunc; | |
1775 if(!ItemContextConnected) { | |
1776 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | |
1777 ItemContextConnected = true; | |
1778 } | |
1779 } | |
1780 void ConnectItemContext(std::function<int(std::string, int, int, void *)> userfunc) | 1720 void ConnectItemContext(std::function<int(std::string, int, int, void *)> userfunc) |
1781 { | 1721 { |
1782 _ConnectItemContext = userfunc; | 1722 _ConnectItemContext = userfunc; |
1783 if(!ItemContextConnected) { | 1723 if(!ItemContextConnected) { |
1784 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | 1724 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); |
1807 class Containers : virtual public Focusable, virtual public ObjectView | 1747 class Containers : virtual public Focusable, virtual public ObjectView |
1808 { | 1748 { |
1809 private: | 1749 private: |
1810 bool ItemEnterConnected, ColumnClickConnected; | 1750 bool ItemEnterConnected, ColumnClickConnected; |
1811 #ifdef DW_LAMBDA | 1751 #ifdef DW_LAMBDA |
1812 std::function<int(char *, void *)> _ConnectCItemEnter; | |
1813 std::function<int(std::string, void *)> _ConnectItemEnter; | 1752 std::function<int(std::string, void *)> _ConnectItemEnter; |
1814 std::function<int(int)> _ConnectColumnClick; | 1753 std::function<int(int)> _ConnectColumnClick; |
1815 #endif | 1754 #endif |
1816 int (*_ConnectCItemEnterOld)(Containers *, char *, void *); | 1755 int (*_ConnectCItemEnterOld)(Containers *, char *, void *); |
1817 int (*_ConnectItemEnterOld)(Containers *, std::string, void *); | 1756 int (*_ConnectItemEnterOld)(Containers *, std::string, void *); |
1818 int (*_ConnectColumnClickOld)(Containers *, int); | 1757 int (*_ConnectColumnClickOld)(Containers *, int); |
1819 static int _OnItemEnter(HWND window, char *text, void *data, void *itemdata) { | 1758 static int _OnItemEnter(HWND window, char *text, void *data, void *itemdata) { |
1820 Containers *classptr = reinterpret_cast<Containers *>(data); | 1759 Containers *classptr = reinterpret_cast<Containers *>(data); |
1821 std::string utf8string = text ? std::string(text) : std::string(); | 1760 std::string utf8string = text ? std::string(text) : std::string(); |
1822 #ifdef DW_LAMBDA | 1761 #ifdef DW_LAMBDA |
1823 if(classptr->_ConnectCItemEnter) | 1762 if(classptr->_ConnectItemEnter) |
1824 return classptr->_ConnectCItemEnter(text, itemdata); | |
1825 else if(classptr->_ConnectItemEnter) | |
1826 return classptr->_ConnectItemEnter(utf8string, itemdata); | 1763 return classptr->_ConnectItemEnter(utf8string, itemdata); |
1827 #endif | 1764 #endif |
1828 if(classptr->_ConnectCItemEnterOld) | 1765 if(classptr->_ConnectCItemEnterOld) |
1829 return classptr->_ConnectCItemEnterOld(classptr, text, itemdata); | 1766 return classptr->_ConnectCItemEnterOld(classptr, text, itemdata); |
1830 else if(classptr->_ConnectItemEnterOld) | 1767 else if(classptr->_ConnectItemEnterOld) |
1844 protected: | 1781 protected: |
1845 void *allocpointer; | 1782 void *allocpointer; |
1846 int allocrowcount; | 1783 int allocrowcount; |
1847 void SetupContainer() { | 1784 void SetupContainer() { |
1848 #ifdef DW_LAMBDA | 1785 #ifdef DW_LAMBDA |
1849 _ConnectCItemEnter = 0; | |
1850 _ConnectItemEnter = 0; | 1786 _ConnectItemEnter = 0; |
1851 _ConnectColumnClick = 0; | 1787 _ConnectColumnClick = 0; |
1852 #endif | 1788 #endif |
1853 _ConnectItemEnterOld = 0; | 1789 _ConnectItemEnterOld = 0; |
1854 _ConnectCItemEnterOld = 0; | 1790 _ConnectCItemEnterOld = 0; |
1909 void SetRowData(int row, void *data) { dw_container_set_row_data(allocpointer, row, data); } | 1845 void SetRowData(int row, void *data) { dw_container_set_row_data(allocpointer, row, data); } |
1910 void SetRowTitle(int row, const char *title) { dw_container_set_row_title(allocpointer, row, title); } | 1846 void SetRowTitle(int row, const char *title) { dw_container_set_row_title(allocpointer, row, title); } |
1911 void SetRowTitle(int row, const std::string title) { dw_container_set_row_title(allocpointer, row, title.c_str()); } | 1847 void SetRowTitle(int row, const std::string title) { dw_container_set_row_title(allocpointer, row, title.c_str()); } |
1912 void SetStripe(unsigned long oddcolor, unsigned long evencolor) { dw_container_set_stripe(hwnd, oddcolor, evencolor); } | 1848 void SetStripe(unsigned long oddcolor, unsigned long evencolor) { dw_container_set_stripe(hwnd, oddcolor, evencolor); } |
1913 #ifdef DW_LAMBDA | 1849 #ifdef DW_LAMBDA |
1914 void ConnectItemEnterC(std::function<int(char *, void *)> userfunc) | |
1915 { | |
1916 _ConnectCItemEnter = userfunc; | |
1917 if(!ItemEnterConnected) { | |
1918 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | |
1919 ItemEnterConnected = true; | |
1920 } | |
1921 } | |
1922 void ConnectItemEnter(std::function<int(std::string, void *)> userfunc) | 1850 void ConnectItemEnter(std::function<int(std::string, void *)> userfunc) |
1923 { | 1851 { |
1924 _ConnectItemEnter = userfunc; | 1852 _ConnectItemEnter = userfunc; |
1925 if(!ItemEnterConnected) { | 1853 if(!ItemEnterConnected) { |
1926 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | 1854 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |