Mercurial > dwindows
comparison dw.hpp @ 2960:1dabe9c6c67b
C++: Step 2 of the std::string transition.
Implement std::string versions of the Connect callback functions.
Add "C" to the name of the UTF8 returning functions.
Reimplement the functions as std::string by default.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 16 Feb 2023 12:04:52 +0000 |
parents | cde59690d3dd |
children | b9bd130f438a |
comparison
equal
deleted
inserted
replaced
2959:cde59690d3dd | 2960:1dabe9c6c67b |
---|---|
22 #define DW_LAMBDA | 22 #define DW_LAMBDA |
23 #include <functional> | 23 #include <functional> |
24 #endif | 24 #endif |
25 | 25 |
26 // Attempt to allow compilation on GCC older than 4.7 | 26 // Attempt to allow compilation on GCC older than 4.7 |
27 #if defined(__GNUC__) && (__GNuC__ < 5 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)) | 27 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)) |
28 #define override | 28 #define override |
29 #define final | 29 #define final |
30 #endif | 30 #endif |
31 | 31 |
32 // Attempt to allow compilation on MSVC older than 2012 | 32 // Attempt to allow compilation on MSVC older than 2012 |
35 #endif | 35 #endif |
36 | 36 |
37 namespace DW | 37 namespace DW |
38 { | 38 { |
39 | 39 |
40 #define THREAD_STACK 10000 | 40 #define _DW_THREAD_STACK 10000 |
41 | |
42 // Macro to convert an allocated C string buffer to std::string, free the buffer and return the std::string | |
43 #define _dw_string_free_return(a) std::string utf8string = a ? std::string(a) : std::string(); if(a) dw_free(a); return utf8string; | |
41 | 44 |
42 // Forward declare these so they can be referenced | 45 // Forward declare these so they can be referenced |
43 class Render; | 46 class Render; |
44 class Pixmap; | 47 class Pixmap; |
45 class MenuItem; | 48 class MenuItem; |
78 return DW_NULL; | 81 return DW_NULL; |
79 } | 82 } |
80 void GetPreferredSize(int *width, int *height) { dw_window_get_preferred_size(hwnd, width, height); } | 83 void GetPreferredSize(int *width, int *height) { dw_window_get_preferred_size(hwnd, width, height); } |
81 int SetColor(unsigned long fore, unsigned long back) { return dw_window_set_color(hwnd, fore, back); } | 84 int SetColor(unsigned long fore, unsigned long back) { return dw_window_set_color(hwnd, fore, back); } |
82 void SetData(const char *dataname, void *data) { dw_window_set_data(hwnd, dataname, data); } | 85 void SetData(const char *dataname, void *data) { dw_window_set_data(hwnd, dataname, data); } |
86 void SetData(std::string dataname, void *data) { dw_window_set_data(hwnd, dataname.c_str(), data); } | |
83 void *GetData(const char *dataname) { return dw_window_get_data(hwnd, dataname); } | 87 void *GetData(const char *dataname) { return dw_window_get_data(hwnd, dataname); } |
88 void *GetData(std::string dataname) { return dw_window_get_data(hwnd, dataname.c_str()); } | |
84 void SetPointer(int cursortype) { dw_window_set_pointer(hwnd, cursortype); } | 89 void SetPointer(int cursortype) { dw_window_set_pointer(hwnd, cursortype); } |
85 void SetStyle(unsigned long flags, unsigned long mask) { dw_window_set_style(hwnd, flags, mask); } | 90 void SetStyle(unsigned long flags, unsigned long mask) { dw_window_set_style(hwnd, flags, mask); } |
86 void SetStyle(unsigned long flags) { dw_window_set_style(hwnd, flags, flags); } | 91 void SetStyle(unsigned long flags) { dw_window_set_style(hwnd, flags, flags); } |
87 void SetTooltip(const char *bubbletext) { dw_window_set_tooltip(hwnd, bubbletext); } | 92 void SetTooltip(const char *bubbletext) { dw_window_set_tooltip(hwnd, bubbletext); } |
93 void SetTooltip(std::string bubbletext) { dw_window_set_tooltip(hwnd, bubbletext.c_str()); } | |
88 int Unpack() { return dw_box_unpack(hwnd); } | 94 int Unpack() { return dw_box_unpack(hwnd); } |
89 }; | 95 }; |
90 | 96 |
91 // Box class is a packable object | 97 // Box class is a packable object |
92 class Boxes : virtual public Widget | 98 class Boxes : virtual public Widget |
375 Window(HWND owner, std::string title, unsigned long style) { SetHWND(dw_window_new(owner, title.c_str(), style)); Setup(); } | 381 Window(HWND owner, std::string title, unsigned long style) { SetHWND(dw_window_new(owner, title.c_str(), style)); Setup(); } |
376 Window(std::string title, unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, title.c_str(), style)); Setup(); } | 382 Window(std::string title, unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, title.c_str(), style)); Setup(); } |
377 Window(unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, "", style)); Setup(); } | 383 Window(unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, "", style)); Setup(); } |
378 Window(const char *title) { SetHWND(dw_window_new(HWND_DESKTOP, title, DW_FCF_SYSMENU | DW_FCF_TITLEBAR | | 384 Window(const char *title) { SetHWND(dw_window_new(HWND_DESKTOP, title, DW_FCF_SYSMENU | DW_FCF_TITLEBAR | |
379 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } | 385 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } |
386 Window(std::string title) { SetHWND(dw_window_new(HWND_DESKTOP, title.c_str(), DW_FCF_SYSMENU | DW_FCF_TITLEBAR | | |
387 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } | |
380 Window() { SetHWND(dw_window_new(HWND_DESKTOP, "", DW_FCF_SYSMENU | DW_FCF_TITLEBAR | | 388 Window() { SetHWND(dw_window_new(HWND_DESKTOP, "", DW_FCF_SYSMENU | DW_FCF_TITLEBAR | |
381 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } | 389 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } |
382 | 390 |
383 // User functions | 391 // User functions |
384 void SetText(const char *text) { dw_window_set_text(hwnd, text); } | 392 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
385 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } | 393 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } |
386 char *GetText() { return dw_window_get_text(hwnd); } | 394 char *GetCText() { return dw_window_get_text(hwnd); } |
395 std::string GetText() { | |
396 char *retval = dw_window_get_text(hwnd); | |
397 _dw_string_free_return(retval); | |
398 } | |
387 void SetSize(unsigned long width, unsigned long height) { dw_window_set_size(hwnd, width, height); } | 399 void SetSize(unsigned long width, unsigned long height) { dw_window_set_size(hwnd, width, height); } |
388 int Show() { return dw_window_show(hwnd); } | 400 int Show() { return dw_window_show(hwnd); } |
389 int Hide() { return dw_window_hide(hwnd); } | 401 int Hide() { return dw_window_hide(hwnd); } |
390 void SetGravity(int horz, int vert) { dw_window_set_gravity(hwnd, horz, vert); } | 402 void SetGravity(int horz, int vert) { dw_window_set_gravity(hwnd, horz, vert); } |
391 int Minimize() { return dw_window_minimize(hwnd); } | 403 int Minimize() { return dw_window_minimize(hwnd); } |
510 { | 522 { |
511 public: | 523 public: |
512 // User functions | 524 // User functions |
513 void SetText(const char *text) { dw_window_set_text(hwnd, text); } | 525 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
514 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } | 526 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } |
515 char *GetText() { return dw_window_get_text(hwnd); } | 527 char *GetCText() { return dw_window_get_text(hwnd); } |
528 std::string GetText() { | |
529 char *retval = dw_window_get_text(hwnd); | |
530 _dw_string_free_return(retval); | |
531 } | |
516 }; | 532 }; |
517 | 533 |
518 class Button : public TextButton | 534 class Button : public TextButton |
519 { | 535 { |
520 public: | 536 public: |
531 { | 547 { |
532 public: | 548 public: |
533 // User functions | 549 // User functions |
534 void Set(unsigned long id) { dw_window_set_bitmap(hwnd, id, DW_NULL); } | 550 void Set(unsigned long id) { dw_window_set_bitmap(hwnd, id, DW_NULL); } |
535 void Set(const char *file) { dw_window_set_bitmap(hwnd, 0, file); } | 551 void Set(const char *file) { dw_window_set_bitmap(hwnd, 0, file); } |
552 void Set(std::string file) { dw_window_set_bitmap(hwnd, 0, file.c_str()); } | |
536 void Set(const char *data, int len) { dw_window_set_bitmap_from_data(hwnd, 0, data, len); } | 553 void Set(const char *data, int len) { dw_window_set_bitmap_from_data(hwnd, 0, data, len); } |
537 }; | 554 }; |
538 | 555 |
539 // Image based button | 556 // Image based button |
540 class BitmapButton : public Clickable, public Focusable, public BitmapWidget | 557 class BitmapButton : public Clickable, public Focusable, public BitmapWidget |
591 { | 608 { |
592 public: | 609 public: |
593 // User functions | 610 // User functions |
594 void SetText(const char *text) { dw_window_set_text(hwnd, text); } | 611 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
595 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } | 612 void SetText(std::string text) { dw_window_set_text(hwnd, text.c_str()); } |
596 char *GetText() { return dw_window_get_text(hwnd); } | 613 char *GetCText() { return dw_window_get_text(hwnd); } |
614 std::string GetText() { | |
615 char *retval = dw_window_get_text(hwnd); | |
616 _dw_string_free_return(retval); | |
617 } | |
597 int SetFont(const char *font) { return dw_window_set_font(hwnd, font); } | 618 int SetFont(const char *font) { return dw_window_set_font(hwnd, font); } |
598 char *GetFont() { return dw_window_get_font(hwnd); } | 619 char *GetCFont() { return dw_window_get_font(hwnd); } |
620 std::string GetFont() { | |
621 char *retval = dw_window_get_font(hwnd); | |
622 _dw_string_free_return(retval); | |
623 } | |
599 }; | 624 }; |
600 | 625 |
601 // Class for handling static text widget | 626 // Class for handling static text widget |
602 class Text : public TextWidget | 627 class Text : public TextWidget |
603 { | 628 { |
675 private: | 700 private: |
676 bool ExposeConnected, ConfigureConnected, KeyPressConnected, ButtonPressConnected, ButtonReleaseConnected, MotionNotifyConnected; | 701 bool ExposeConnected, ConfigureConnected, KeyPressConnected, ButtonPressConnected, ButtonReleaseConnected, MotionNotifyConnected; |
677 #ifdef DW_LAMBDA | 702 #ifdef DW_LAMBDA |
678 std::function<int(DWExpose *)> _ConnectExpose; | 703 std::function<int(DWExpose *)> _ConnectExpose; |
679 std::function<int(int, int)> _ConnectConfigure; | 704 std::function<int(int, int)> _ConnectConfigure; |
680 std::function<int(char c, int, int, char *)> _ConnectKeyPress; | 705 std::function<int(char c, int, int, char *)> _ConnectCKeyPress; |
706 std::function<int(char c, int, int, std::string)> _ConnectKeyPress; | |
681 std::function<int(int, int, int)> _ConnectButtonPress; | 707 std::function<int(int, int, int)> _ConnectButtonPress; |
682 std::function<int(int, int, int)> _ConnectButtonRelease; | 708 std::function<int(int, int, int)> _ConnectButtonRelease; |
683 std::function<int(int, int, int)> _ConnectMotionNotify; | 709 std::function<int(int, int, int)> _ConnectMotionNotify; |
684 #endif | 710 #endif |
685 int (*_ConnectExposeOld)(Render *, DWExpose *); | 711 int (*_ConnectExposeOld)(Render *, DWExpose *); |
686 int (*_ConnectConfigureOld)(Render *, int width, int height); | 712 int (*_ConnectConfigureOld)(Render *, int width, int height); |
687 int (*_ConnectKeyPressOld)(Render *, char c, int vk, int state, char *utf8); | 713 int (*_ConnectCKeyPressOld)(Render *, char c, int vk, int state, char *utf8); |
714 int (*_ConnectKeyPressOld)(Render *, char c, int vk, int state, std::string utf8); | |
688 int (*_ConnectButtonPressOld)(Render *, int x, int y, int buttonmask); | 715 int (*_ConnectButtonPressOld)(Render *, int x, int y, int buttonmask); |
689 int (*_ConnectButtonReleaseOld)(Render *, int x, int y, int buttonmask); | 716 int (*_ConnectButtonReleaseOld)(Render *, int x, int y, int buttonmask); |
690 int (*_ConnectMotionNotifyOld)(Render *, int x, int y, int buttonmask); | 717 int (*_ConnectMotionNotifyOld)(Render *, int x, int y, int buttonmask); |
691 void Setup() { | 718 void Setup() { |
692 #ifdef DW_LAMBDA | 719 #ifdef DW_LAMBDA |
693 _ConnectExpose = 0; | 720 _ConnectExpose = 0; |
694 _ConnectConfigure = 0; | 721 _ConnectConfigure = 0; |
722 _ConnectCKeyPress = 0; | |
695 _ConnectKeyPress = 0; | 723 _ConnectKeyPress = 0; |
696 _ConnectButtonPress = 0; | 724 _ConnectButtonPress = 0; |
697 _ConnectButtonRelease = 0; | 725 _ConnectButtonRelease = 0; |
698 _ConnectMotionNotify = 0; | 726 _ConnectMotionNotify = 0; |
699 #endif | 727 #endif |
700 _ConnectExposeOld = 0; | 728 _ConnectExposeOld = 0; |
701 _ConnectConfigureOld = 0; | 729 _ConnectConfigureOld = 0; |
730 _ConnectCKeyPressOld = 0; | |
702 _ConnectKeyPressOld = 0; | 731 _ConnectKeyPressOld = 0; |
703 _ConnectButtonPressOld = 0; | 732 _ConnectButtonPressOld = 0; |
704 _ConnectButtonReleaseOld = 0; | 733 _ConnectButtonReleaseOld = 0; |
705 _ConnectMotionNotifyOld = 0; | 734 _ConnectMotionNotifyOld = 0; |
706 if(IsOverridden(Render::OnExpose, this)) { | 735 if(IsOverridden(Render::OnExpose, this)) { |
759 return classptr->_ConnectConfigureOld(classptr, width, height); | 788 return classptr->_ConnectConfigureOld(classptr, width, height); |
760 return classptr->OnConfigure(width, height); } | 789 return classptr->OnConfigure(width, height); } |
761 static int _OnKeyPress(HWND window, char c, int vk, int state, void *data, char *utf8) { | 790 static int _OnKeyPress(HWND window, char c, int vk, int state, void *data, char *utf8) { |
762 Render *classptr = reinterpret_cast<Render *>(data); | 791 Render *classptr = reinterpret_cast<Render *>(data); |
763 #ifdef DW_LAMBDA | 792 #ifdef DW_LAMBDA |
764 if(classptr->_ConnectKeyPress) | 793 if(classptr->_ConnectCKeyPress) |
765 return classptr->_ConnectKeyPress(c, vk, state, utf8); | 794 return classptr->_ConnectCKeyPress(c, vk, state, utf8); |
766 #endif | 795 else if(classptr->_ConnectKeyPress) { |
767 if(classptr->_ConnectKeyPressOld) | 796 std::string utf8string = utf8 ? std::string(utf8) : std::string(); |
768 return classptr->_ConnectKeyPressOld(classptr, c, vk, state, utf8); | 797 return classptr->_ConnectKeyPress(c, vk, state, utf8string); |
798 } | |
799 #endif | |
800 if(classptr->_ConnectCKeyPressOld) | |
801 return classptr->_ConnectCKeyPressOld(classptr, c, vk, state, utf8); | |
802 else if(classptr->_ConnectKeyPressOld) { | |
803 std::string utf8string = utf8 ? std::string(utf8) : std::string(); | |
804 return classptr->_ConnectKeyPressOld(classptr, c, vk, state, utf8string); | |
805 } | |
769 return classptr->OnKeyPress(c, vk, state, utf8); } | 806 return classptr->OnKeyPress(c, vk, state, utf8); } |
770 static int _OnButtonPress(HWND window, int x, int y, int buttonmask, void *data) { | 807 static int _OnButtonPress(HWND window, int x, int y, int buttonmask, void *data) { |
771 Render *classptr = reinterpret_cast<Render *>(data); | 808 Render *classptr = reinterpret_cast<Render *>(data); |
772 #ifdef DW_LAMBDA | 809 #ifdef DW_LAMBDA |
773 if(classptr->_ConnectButtonPress) | 810 if(classptr->_ConnectButtonPress) |
817 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc); | 854 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc); |
818 int SetFont(const char *fontname) { return dw_window_set_font(hwnd, fontname); } | 855 int SetFont(const char *fontname) { return dw_window_set_font(hwnd, fontname); } |
819 int SetFont(std::string fontname) { return dw_window_set_font(hwnd, fontname.c_str()); } | 856 int SetFont(std::string fontname) { return dw_window_set_font(hwnd, fontname.c_str()); } |
820 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(hwnd, DW_NULL, text, width, height); } | 857 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(hwnd, DW_NULL, text, width, height); } |
821 void GetTextExtents(std::string text, int *width, int *height) { dw_font_text_extents_get(hwnd, DW_NULL, text.c_str(), width, height); } | 858 void GetTextExtents(std::string text, int *width, int *height) { dw_font_text_extents_get(hwnd, DW_NULL, text.c_str(), width, height); } |
822 char *GetFont() { return dw_window_get_font(hwnd); } | 859 char *GetCFont() { return dw_window_get_font(hwnd); } |
860 std::string GetFont() { | |
861 char *retval = dw_window_get_font(hwnd); | |
862 _dw_string_free_return(retval); | |
863 } | |
823 void Redraw() { dw_render_redraw(hwnd); } | 864 void Redraw() { dw_render_redraw(hwnd); } |
824 void Flush() { dw_flush(); } | 865 void Flush() { dw_flush(); } |
825 #ifdef DW_LAMBDA | 866 #ifdef DW_LAMBDA |
826 void ConnectExpose(std::function<int(DWExpose *)> userfunc) | 867 void ConnectExpose(std::function<int(DWExpose *)> userfunc) |
827 { | 868 { |
859 } | 900 } |
860 } | 901 } |
861 #ifdef DW_LAMBDA | 902 #ifdef DW_LAMBDA |
862 void ConnectKeyPress(std::function<int(char, int, int, char *)> userfunc) | 903 void ConnectKeyPress(std::function<int(char, int, int, char *)> userfunc) |
863 { | 904 { |
905 _ConnectCKeyPress = userfunc; | |
906 if(!KeyPressConnected) { | |
907 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | |
908 KeyPressConnected = true; | |
909 } | |
910 } | |
911 void ConnectKeyPress(std::function<int(char, int, int, std::string)> userfunc) | |
912 { | |
864 _ConnectKeyPress = userfunc; | 913 _ConnectKeyPress = userfunc; |
865 if(!KeyPressConnected) { | 914 if(!KeyPressConnected) { |
866 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | 915 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); |
867 KeyPressConnected = true; | 916 KeyPressConnected = true; |
868 } | 917 } |
869 } | 918 } |
870 #endif | 919 #endif |
871 void ConnectKeyPress(int (*userfunc)(Render *, char, int, int, char *)) | 920 void ConnectKeyPress(int (*userfunc)(Render *, char, int, int, char *)) |
921 { | |
922 _ConnectCKeyPressOld = userfunc; | |
923 if(!KeyPressConnected) { | |
924 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | |
925 KeyPressConnected = true; | |
926 } | |
927 } | |
928 void ConnectKeyPress(int (*userfunc)(Render *, char, int, int, std::string)) | |
872 { | 929 { |
873 _ConnectKeyPressOld = userfunc; | 930 _ConnectKeyPressOld = userfunc; |
874 if(!KeyPressConnected) { | 931 if(!KeyPressConnected) { |
875 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); | 932 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); |
876 KeyPressConnected = true; | 933 KeyPressConnected = true; |
1028 } | 1085 } |
1029 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc) { | 1086 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc) { |
1030 dw_pixmap_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc); | 1087 dw_pixmap_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc); |
1031 } | 1088 } |
1032 int SetFont(const char *fontname) { return dw_pixmap_set_font(hpixmap, fontname); } | 1089 int SetFont(const char *fontname) { return dw_pixmap_set_font(hpixmap, fontname); } |
1090 int SetFont(std::string fontname) { return dw_pixmap_set_font(hpixmap, fontname.c_str()); } | |
1033 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(DW_NOHWND, hpixmap, text, width, height); } | 1091 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(DW_NOHWND, hpixmap, text, width, height); } |
1034 void GetTextExtents(std::string text, int *width, int *height) { dw_font_text_extents_get(DW_NOHWND, hpixmap, text.c_str(), width, height); } | 1092 void GetTextExtents(std::string text, int *width, int *height) { dw_font_text_extents_get(DW_NOHWND, hpixmap, text.c_str(), width, height); } |
1035 void SetTransparentColor(unsigned long color) { dw_pixmap_set_transparent_color(hpixmap, color); } | 1093 void SetTransparentColor(unsigned long color) { dw_pixmap_set_transparent_color(hpixmap, color); } |
1036 unsigned long GetWidth() { return pwidth; } | 1094 unsigned long GetWidth() { return pwidth; } |
1037 unsigned long GetHeight() { return pheight; } | 1095 unsigned long GetHeight() { return pheight; } |
1052 class HTML : public Widget | 1110 class HTML : public Widget |
1053 { | 1111 { |
1054 private: | 1112 private: |
1055 bool ChangedConnected, ResultConnected; | 1113 bool ChangedConnected, ResultConnected; |
1056 #ifdef DW_LAMBDA | 1114 #ifdef DW_LAMBDA |
1057 std::function<int(int, char *)> _ConnectChanged; | 1115 std::function<int(int, char *)> _ConnectCChanged; |
1058 std::function<int(int, char *, void *)> _ConnectResult; | 1116 std::function<int(int, char *, void *)> _ConnectCResult; |
1059 #endif | 1117 std::function<int(int, std::string)> _ConnectChanged; |
1060 int (*_ConnectChangedOld)(HTML *, int status, char *url); | 1118 std::function<int(int, std::string, void *)> _ConnectResult; |
1061 int (*_ConnectResultOld)(HTML *, int status, char *result, void *scriptdata); | 1119 #endif |
1120 int (*_ConnectCChangedOld)(HTML *, int status, char *url); | |
1121 int (*_ConnectCResultOld)(HTML *, int status, char *result, void *scriptdata); | |
1122 int (*_ConnectChangedOld)(HTML *, int status, std::string url); | |
1123 int (*_ConnectResultOld)(HTML *, int status, std::string result, void *scriptdata); | |
1062 void Setup() { | 1124 void Setup() { |
1063 #ifdef DW_LAMBDA | 1125 #ifdef DW_LAMBDA |
1126 _ConnectCChanged = 0; | |
1127 _ConnectCResult = 0; | |
1064 _ConnectChanged = 0; | 1128 _ConnectChanged = 0; |
1065 _ConnectResult = 0; | 1129 _ConnectResult = 0; |
1066 #endif | 1130 #endif |
1131 _ConnectCChangedOld = 0; | |
1132 _ConnectCResultOld = 0; | |
1067 _ConnectChangedOld = 0; | 1133 _ConnectChangedOld = 0; |
1068 _ConnectResultOld = 0; | 1134 _ConnectResultOld = 0; |
1069 if(IsOverridden(HTML::OnChanged, this)) { | 1135 if(IsOverridden(HTML::OnChanged, this)) { |
1070 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | 1136 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
1071 ChangedConnected = true; | 1137 ChangedConnected = true; |
1080 } | 1146 } |
1081 } | 1147 } |
1082 static int _OnChanged(HWND window, int status, char *url, void *data) { | 1148 static int _OnChanged(HWND window, int status, char *url, void *data) { |
1083 HTML *classptr = reinterpret_cast<HTML *>(data); | 1149 HTML *classptr = reinterpret_cast<HTML *>(data); |
1084 #ifdef DW_LAMBDA | 1150 #ifdef DW_LAMBDA |
1085 if(classptr->_ConnectChanged) | 1151 if(classptr->_ConnectCChanged) |
1086 return classptr->_ConnectChanged(status, url); | 1152 return classptr->_ConnectCChanged(status, url); |
1087 #endif | 1153 else if(classptr->_ConnectChanged) { |
1088 if(classptr->_ConnectChangedOld) | 1154 std::string utf8string = url ? std::string(url) : std::string(); |
1089 return classptr->_ConnectChangedOld(classptr, status, url); | 1155 return classptr->_ConnectChanged(status, utf8string); |
1156 } | |
1157 #endif | |
1158 if(classptr->_ConnectCChangedOld) | |
1159 return classptr->_ConnectCChangedOld(classptr, status, url); | |
1160 else if(classptr->_ConnectChangedOld) { | |
1161 std::string utf8string = url ? std::string(url) : std::string(); | |
1162 return classptr->_ConnectChangedOld(classptr, status, utf8string); | |
1163 } | |
1090 return classptr->OnChanged(status, url); } | 1164 return classptr->OnChanged(status, url); } |
1091 static int _OnResult(HWND window, int status, char *result, void *scriptdata, void *data) { | 1165 static int _OnResult(HWND window, int status, char *result, void *scriptdata, void *data) { |
1092 HTML *classptr = reinterpret_cast<HTML *>(data); | 1166 HTML *classptr = reinterpret_cast<HTML *>(data); |
1093 #ifdef DW_LAMBDA | 1167 #ifdef DW_LAMBDA |
1094 if(classptr->_ConnectResult) | 1168 if(classptr->_ConnectCResult) |
1095 return classptr->_ConnectResult(status, result, scriptdata); | 1169 return classptr->_ConnectResult(status, result, scriptdata); |
1096 #endif | 1170 else if(classptr->_ConnectResult) { |
1097 if(classptr->_ConnectResultOld) | 1171 std::string utf8string = result ? std::string(result) : std::string(); |
1098 return classptr->_ConnectResultOld(classptr, status, result, scriptdata); | 1172 return classptr->_ConnectResult(status, utf8string, scriptdata); |
1173 } | |
1174 #endif | |
1175 if(classptr->_ConnectCResultOld) | |
1176 return classptr->_ConnectCResultOld(classptr, status, result, scriptdata); | |
1177 else if(classptr->_ConnectResultOld) { | |
1178 std::string utf8string = result ? std::string(result) : std::string(); | |
1179 return classptr->_ConnectResultOld(classptr, status, utf8string, scriptdata); | |
1180 } | |
1099 return classptr->OnResult(status, result, scriptdata); } | 1181 return classptr->OnResult(status, result, scriptdata); } |
1100 public: | 1182 public: |
1101 // Constructors | 1183 // Constructors |
1102 HTML(unsigned long id) { SetHWND(dw_html_new(id)); Setup(); } | 1184 HTML(unsigned long id) { SetHWND(dw_html_new(id)); Setup(); } |
1103 HTML() { SetHWND(dw_html_new(0)); Setup(); } | 1185 HTML() { SetHWND(dw_html_new(0)); Setup(); } |
1113 int Raw(std::string buffer) { return dw_html_raw(hwnd, buffer.c_str()); } | 1195 int Raw(std::string buffer) { return dw_html_raw(hwnd, buffer.c_str()); } |
1114 int URL(std::string url) { return dw_html_url(hwnd, url.c_str()); } | 1196 int URL(std::string url) { return dw_html_url(hwnd, url.c_str()); } |
1115 #ifdef DW_LAMBDA | 1197 #ifdef DW_LAMBDA |
1116 void ConnectChanged(std::function<int(int, char *)> userfunc) | 1198 void ConnectChanged(std::function<int(int, char *)> userfunc) |
1117 { | 1199 { |
1200 _ConnectCChanged = userfunc; | |
1201 if(!ChangedConnected) { | |
1202 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | |
1203 ChangedConnected = true; | |
1204 } | |
1205 } | |
1206 void ConnectChanged(std::function<int(int, std::string)> userfunc) | |
1207 { | |
1118 _ConnectChanged = userfunc; | 1208 _ConnectChanged = userfunc; |
1119 if(!ChangedConnected) { | 1209 if(!ChangedConnected) { |
1120 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | 1210 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
1121 ChangedConnected = true; | 1211 ChangedConnected = true; |
1122 } | 1212 } |
1123 } | 1213 } |
1124 #endif | 1214 #endif |
1125 void ConnectChanged(int (*userfunc)(HTML *, int, char *)) | 1215 void ConnectChanged(int (*userfunc)(HTML *, int, char *)) |
1216 { | |
1217 _ConnectCChangedOld = userfunc; | |
1218 if(!ChangedConnected) { | |
1219 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | |
1220 ChangedConnected = true; | |
1221 } | |
1222 } | |
1223 void ConnectChanged(int (*userfunc)(HTML *, int, std::string)) | |
1126 { | 1224 { |
1127 _ConnectChangedOld = userfunc; | 1225 _ConnectChangedOld = userfunc; |
1128 if(!ChangedConnected) { | 1226 if(!ChangedConnected) { |
1129 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); | 1227 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
1130 ChangedConnected = true; | 1228 ChangedConnected = true; |
1131 } | 1229 } |
1132 } | 1230 } |
1133 #ifdef DW_LAMBDA | 1231 #ifdef DW_LAMBDA |
1134 void ConnectResult(std::function<int(int, char *, void *)> userfunc) | 1232 void ConnectResult(std::function<int(int, char *, void *)> userfunc) |
1135 { | 1233 { |
1234 _ConnectCResult = userfunc; | |
1235 if(!ResultConnected) { | |
1236 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | |
1237 ResultConnected = true; | |
1238 } | |
1239 } | |
1240 void ConnectResult(std::function<int(int, std::string, void *)> userfunc) | |
1241 { | |
1136 _ConnectResult = userfunc; | 1242 _ConnectResult = userfunc; |
1137 if(!ResultConnected) { | 1243 if(!ResultConnected) { |
1138 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | 1244 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); |
1139 ResultConnected = true; | 1245 ResultConnected = true; |
1140 } | 1246 } |
1141 } | 1247 } |
1142 #endif | 1248 #endif |
1143 void ConnectResult(int (*userfunc)(HTML *, int, char *, void *)) | 1249 void ConnectResult(int (*userfunc)(HTML *, int, char *, void *)) |
1250 { | |
1251 _ConnectCResultOld = userfunc; | |
1252 if(!ResultConnected) { | |
1253 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | |
1254 ResultConnected = true; | |
1255 } | |
1256 } | |
1257 void ConnectResult(int (*userfunc)(HTML *, int, std::string, void *)) | |
1144 { | 1258 { |
1145 _ConnectResultOld = userfunc; | 1259 _ConnectResultOld = userfunc; |
1146 if(!ResultConnected) { | 1260 if(!ResultConnected) { |
1147 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); | 1261 dw_signal_connect(hwnd, DW_SIGNAL_HTML_RESULT, DW_SIGNAL_FUNC(_OnResult), this); |
1148 ResultConnected = true; | 1262 ResultConnected = true; |
1224 void Delete(int index) { dw_listbox_delete(hwnd, index); } | 1338 void Delete(int index) { dw_listbox_delete(hwnd, index); } |
1225 void GetListText(unsigned int index, char *buffer, unsigned int length) { dw_listbox_get_text(hwnd, index, buffer, length); } | 1339 void GetListText(unsigned int index, char *buffer, unsigned int length) { dw_listbox_get_text(hwnd, index, buffer, length); } |
1226 void SetListText(unsigned int index, char *buffer) { dw_listbox_set_text(hwnd, index, buffer); } | 1340 void SetListText(unsigned int index, char *buffer) { dw_listbox_set_text(hwnd, index, buffer); } |
1227 void SetListText(unsigned int index, std::string buffer) { dw_listbox_set_text(hwnd, index, buffer.c_str()); } | 1341 void SetListText(unsigned int index, std::string buffer) { dw_listbox_set_text(hwnd, index, buffer.c_str()); } |
1228 void Insert(const char *text, int pos) { dw_listbox_insert(hwnd, text, pos); } | 1342 void Insert(const char *text, int pos) { dw_listbox_insert(hwnd, text, pos); } |
1343 void Insert(std::string text, int pos) { dw_listbox_insert(hwnd, text.c_str(), pos); } | |
1229 void ListAppend(char **text, int count) { dw_listbox_list_append(hwnd, text, count); } | 1344 void ListAppend(char **text, int count) { dw_listbox_list_append(hwnd, text, count); } |
1230 void Select(int index, int state) { dw_listbox_select(hwnd, index, state); } | 1345 void Select(int index, int state) { dw_listbox_select(hwnd, index, state); } |
1231 int Selected() { return dw_listbox_selected(hwnd); } | 1346 int Selected() { return dw_listbox_selected(hwnd); } |
1232 int Selected(int where) { return dw_listbox_selected_multi(hwnd, where); } | 1347 int Selected(int where) { return dw_listbox_selected_multi(hwnd, where); } |
1233 void SetTop(int top) { dw_listbox_set_top(hwnd, top); } | 1348 void SetTop(int top) { dw_listbox_set_top(hwnd, top); } |
1427 void SetCursor(int point) { dw_mle_set_cursor(hwnd, point); } | 1542 void SetCursor(int point) { dw_mle_set_cursor(hwnd, point); } |
1428 void SetEditable(int state) { dw_mle_set_editable(hwnd, state); } | 1543 void SetEditable(int state) { dw_mle_set_editable(hwnd, state); } |
1429 void SetVisible(int line) { dw_mle_set_visible(hwnd, line); } | 1544 void SetVisible(int line) { dw_mle_set_visible(hwnd, line); } |
1430 void SetWordWrap(int state) { dw_mle_set_word_wrap(hwnd, state); } | 1545 void SetWordWrap(int state) { dw_mle_set_word_wrap(hwnd, state); } |
1431 int SetFont(const char *font) { return dw_window_set_font(hwnd, font); } | 1546 int SetFont(const char *font) { return dw_window_set_font(hwnd, font); } |
1432 char *GetFont() { return dw_window_get_font(hwnd); } | 1547 int SetFont(std::string font) { return dw_window_set_font(hwnd, font.c_str()); } |
1548 char *GetCFont() { return dw_window_get_font(hwnd); } | |
1549 std::string GetFont() { | |
1550 char *retval = dw_window_get_font(hwnd); | |
1551 _dw_string_free_return(retval); | |
1552 } | |
1433 }; | 1553 }; |
1434 | 1554 |
1435 class Notebook : public Widget | 1555 class Notebook : public Widget |
1436 { | 1556 { |
1437 private: | 1557 private: |
1511 class ObjectView : virtual public Widget | 1631 class ObjectView : virtual public Widget |
1512 { | 1632 { |
1513 private: | 1633 private: |
1514 bool ItemSelectConnected, ItemContextConnected; | 1634 bool ItemSelectConnected, ItemContextConnected; |
1515 #ifdef DW_LAMBDA | 1635 #ifdef DW_LAMBDA |
1516 std::function<int(HTREEITEM, char *, void *)> _ConnectItemSelect; | 1636 std::function<int(HTREEITEM, char *, void *)> _ConnectCItemSelect; |
1517 std::function<int(char *, int, int, void *)> _ConnectItemContext; | 1637 std::function<int(char *, int, int, void *)> _ConnectCItemContext; |
1518 #endif | 1638 std::function<int(HTREEITEM, std::string, void *)> _ConnectItemSelect; |
1519 int (*_ConnectItemSelectOld)(ObjectView *, HTREEITEM, char *, void *); | 1639 std::function<int(std::string, int, int, void *)> _ConnectItemContext; |
1520 int (*_ConnectItemContextOld)(ObjectView *, char *, int, int, void *); | 1640 #endif |
1641 int (*_ConnectCItemSelectOld)(ObjectView *, HTREEITEM, char *, void *); | |
1642 int (*_ConnectCItemContextOld)(ObjectView *, char *, int, int, void *); | |
1643 int (*_ConnectItemSelectOld)(ObjectView *, HTREEITEM, std::string, void *); | |
1644 int (*_ConnectItemContextOld)(ObjectView *, std::string, int, int, void *); | |
1521 static int _OnItemSelect(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { | 1645 static int _OnItemSelect(HWND window, HTREEITEM item, char *text, void *data, void *itemdata) { |
1522 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); | 1646 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); |
1523 #ifdef DW_LAMBDA | 1647 #ifdef DW_LAMBDA |
1524 if(classptr->_ConnectItemSelect) | 1648 if(classptr->_ConnectCItemSelect) |
1525 return classptr->_ConnectItemSelect(item, text, itemdata); | 1649 return classptr->_ConnectCItemSelect(item, text, itemdata); |
1650 else if(classptr->_ConnectItemSelect) { | |
1651 std::string utf8string = text ? std::string(text) : std::string(); | |
1652 return classptr->_ConnectItemSelect(item, utf8string, itemdata); | |
1653 } | |
1526 #endif | 1654 #endif |
1527 if(classptr->_ConnectItemSelectOld) | 1655 if(classptr->_ConnectItemSelectOld) |
1528 return classptr->_ConnectItemSelectOld(classptr, item, text, itemdata); | 1656 return classptr->_ConnectItemSelectOld(classptr, item, text, itemdata); |
1657 else if(classptr->_ConnectItemSelectOld) { | |
1658 std::string utf8string = text ? std::string(text) : std::string(); | |
1659 return classptr->_ConnectItemSelectOld(classptr, item, utf8string, itemdata); | |
1660 } | |
1529 return classptr->OnItemSelect(item, text, itemdata); | 1661 return classptr->OnItemSelect(item, text, itemdata); |
1530 } | 1662 } |
1531 static int _OnItemContext(HWND window, char *text, int x, int y, void *data, void *itemdata) { | 1663 static int _OnItemContext(HWND window, char *text, int x, int y, void *data, void *itemdata) { |
1532 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); | 1664 ObjectView *classptr = reinterpret_cast<ObjectView *>(data); |
1533 #ifdef DW_LAMBDA | 1665 #ifdef DW_LAMBDA |
1534 if(classptr->_ConnectItemContext) | 1666 if(classptr->_ConnectCItemContext) |
1535 return classptr->_ConnectItemContext(text, x, y, itemdata); | 1667 return classptr->_ConnectCItemContext(text, x, y, itemdata); |
1536 #endif | 1668 else if(classptr->_ConnectItemContext) { |
1537 if(classptr->_ConnectItemContextOld) | 1669 std::string utf8string = text ? std::string(text) : std::string(); |
1538 return classptr->_ConnectItemContextOld(classptr, text, x, y, itemdata); | 1670 return classptr->_ConnectItemContext(utf8string, x, y, itemdata); |
1671 } | |
1672 #endif | |
1673 if(classptr->_ConnectCItemContextOld) | |
1674 return classptr->_ConnectCItemContextOld(classptr, text, x, y, itemdata); | |
1675 else if(classptr->_ConnectItemContextOld) { | |
1676 std::string utf8string = text ? std::string(text) : std::string(); | |
1677 return classptr->_ConnectItemContextOld(classptr, utf8string, x, y, itemdata); | |
1678 } | |
1539 return classptr->OnItemContext(text, x, y, itemdata); | 1679 return classptr->OnItemContext(text, x, y, itemdata); |
1540 } | 1680 } |
1541 protected: | 1681 protected: |
1542 void SetupObjectView() { | 1682 void SetupObjectView() { |
1543 #ifdef DW_LAMBDA | 1683 #ifdef DW_LAMBDA |
1684 _ConnectCItemSelect = 0; | |
1685 _ConnectCItemContext = 0; | |
1544 _ConnectItemSelect = 0; | 1686 _ConnectItemSelect = 0; |
1545 _ConnectItemContext = 0; | 1687 _ConnectItemContext = 0; |
1546 #endif | 1688 #endif |
1689 _ConnectCItemSelectOld = 0; | |
1690 _ConnectCItemContextOld = 0; | |
1547 _ConnectItemSelectOld = 0; | 1691 _ConnectItemSelectOld = 0; |
1548 _ConnectItemContextOld = 0; | 1692 _ConnectItemContextOld = 0; |
1549 if(IsOverridden(ObjectView::OnItemSelect, this)) { | 1693 if(IsOverridden(ObjectView::OnItemSelect, this)) { |
1550 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | 1694 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
1551 ItemSelectConnected = true; | 1695 ItemSelectConnected = true; |
1573 } | 1717 } |
1574 public: | 1718 public: |
1575 #ifdef DW_LAMBDA | 1719 #ifdef DW_LAMBDA |
1576 void ConnectItemSelect(std::function<int(HTREEITEM, char *, void *)> userfunc) | 1720 void ConnectItemSelect(std::function<int(HTREEITEM, char *, void *)> userfunc) |
1577 { | 1721 { |
1722 _ConnectCItemSelect = userfunc; | |
1723 if(!ItemSelectConnected) { | |
1724 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | |
1725 ItemSelectConnected = true; | |
1726 } | |
1727 } | |
1728 void ConnectItemSelect(std::function<int(HTREEITEM, std::string, void *)> userfunc) | |
1729 { | |
1578 _ConnectItemSelect = userfunc; | 1730 _ConnectItemSelect = userfunc; |
1579 if(!ItemSelectConnected) { | 1731 if(!ItemSelectConnected) { |
1580 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | 1732 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
1581 ItemSelectConnected = true; | 1733 ItemSelectConnected = true; |
1582 } | 1734 } |
1583 } | 1735 } |
1584 #endif | 1736 #endif |
1585 void ConnectItemSelect(int (*userfunc)(ObjectView *, HTREEITEM, char *, void *)) | 1737 void ConnectItemSelect(int (*userfunc)(ObjectView *, HTREEITEM, char *, void *)) |
1586 { | 1738 { |
1739 _ConnectCItemSelectOld = userfunc; | |
1740 if(!ItemSelectConnected) { | |
1741 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | |
1742 ItemSelectConnected = true; | |
1743 } | |
1744 } | |
1745 void ConnectItemSelect(int (*userfunc)(ObjectView *, HTREEITEM, std::string, void *)) | |
1746 { | |
1587 _ConnectItemSelectOld = userfunc; | 1747 _ConnectItemSelectOld = userfunc; |
1588 if(!ItemSelectConnected) { | 1748 if(!ItemSelectConnected) { |
1589 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); | 1749 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
1590 ItemSelectConnected = true; | 1750 ItemSelectConnected = true; |
1591 } | 1751 } |
1592 } | 1752 } |
1593 #ifdef DW_LAMBDA | 1753 #ifdef DW_LAMBDA |
1594 void ConnectItemContext(std::function<int(char *, int, int, void *)> userfunc) | 1754 void ConnectItemContext(std::function<int(char *, int, int, void *)> userfunc) |
1595 { | 1755 { |
1756 _ConnectCItemContext = userfunc; | |
1757 if(!ItemContextConnected) { | |
1758 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | |
1759 ItemContextConnected = true; | |
1760 } | |
1761 } | |
1762 void ConnectItemContext(std::function<int(std::string, int, int, void *)> userfunc) | |
1763 { | |
1596 _ConnectItemContext = userfunc; | 1764 _ConnectItemContext = userfunc; |
1597 if(!ItemContextConnected) { | 1765 if(!ItemContextConnected) { |
1598 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | 1766 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); |
1599 ItemContextConnected = true; | 1767 ItemContextConnected = true; |
1600 } | 1768 } |
1601 } | 1769 } |
1602 #endif | 1770 #endif |
1603 void ConnectItemContext(int (*userfunc)(ObjectView *, char *, int, int, void *)) | 1771 void ConnectItemContext(int (*userfunc)(ObjectView *, char *, int, int, void *)) |
1604 { | 1772 { |
1773 _ConnectCItemContextOld = userfunc; | |
1774 if(!ItemContextConnected) { | |
1775 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | |
1776 ItemContextConnected = true; | |
1777 } | |
1778 } | |
1779 void ConnectItemContext(int (*userfunc)(ObjectView *, std::string, int, int, void *)) | |
1780 { | |
1605 _ConnectItemContextOld = userfunc; | 1781 _ConnectItemContextOld = userfunc; |
1606 if(!ItemContextConnected) { | 1782 if(!ItemContextConnected) { |
1607 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); | 1783 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); |
1608 ItemContextConnected = true; | 1784 ItemContextConnected = true; |
1609 } | 1785 } |
1613 class Containers : virtual public Focusable, virtual public ObjectView | 1789 class Containers : virtual public Focusable, virtual public ObjectView |
1614 { | 1790 { |
1615 private: | 1791 private: |
1616 bool ItemEnterConnected, ColumnClickConnected; | 1792 bool ItemEnterConnected, ColumnClickConnected; |
1617 #ifdef DW_LAMBDA | 1793 #ifdef DW_LAMBDA |
1618 std::function<int(char *, void *)> _ConnectItemEnter; | 1794 std::function<int(char *, void *)> _ConnectCItemEnter; |
1795 std::function<int(std::string, void *)> _ConnectItemEnter; | |
1619 std::function<int(int)> _ConnectColumnClick; | 1796 std::function<int(int)> _ConnectColumnClick; |
1620 #endif | 1797 #endif |
1621 int (*_ConnectItemEnterOld)(Containers *, char *, void *); | 1798 int (*_ConnectCItemEnterOld)(Containers *, char *, void *); |
1799 int (*_ConnectItemEnterOld)(Containers *, std::string, void *); | |
1622 int (*_ConnectColumnClickOld)(Containers *, int); | 1800 int (*_ConnectColumnClickOld)(Containers *, int); |
1623 static int _OnItemEnter(HWND window, char *text, void *data, void *itemdata) { | 1801 static int _OnItemEnter(HWND window, char *text, void *data, void *itemdata) { |
1624 Containers *classptr = reinterpret_cast<Containers *>(data); | 1802 Containers *classptr = reinterpret_cast<Containers *>(data); |
1625 #ifdef DW_LAMBDA | 1803 #ifdef DW_LAMBDA |
1626 if(classptr->_ConnectItemEnter) | 1804 if(classptr->_ConnectCItemEnter) |
1627 return classptr->_ConnectItemEnter(text, itemdata); | 1805 return classptr->_ConnectCItemEnter(text, itemdata); |
1628 #endif | 1806 else if(classptr->_ConnectItemEnter) { |
1629 if(classptr->_ConnectItemEnterOld) | 1807 std::string utf8string = text ? std::string(text) : std::string(); |
1630 return classptr->_ConnectItemEnterOld(classptr, text, itemdata); | 1808 return classptr->_ConnectItemEnter(utf8string, itemdata); |
1809 } | |
1810 #endif | |
1811 if(classptr->_ConnectCItemEnterOld) | |
1812 return classptr->_ConnectCItemEnterOld(classptr, text, itemdata); | |
1813 else if(classptr->_ConnectItemEnterOld) { | |
1814 std::string utf8string = text ? std::string(text) : std::string(); | |
1815 return classptr->_ConnectItemEnterOld(classptr, utf8string, itemdata); | |
1816 } | |
1631 return classptr->OnItemEnter(text, itemdata); | 1817 return classptr->OnItemEnter(text, itemdata); |
1632 } | 1818 } |
1633 static int _OnColumnClick(HWND window, int column, void *data) { | 1819 static int _OnColumnClick(HWND window, int column, void *data) { |
1634 Containers *classptr = reinterpret_cast<Containers *>(data); | 1820 Containers *classptr = reinterpret_cast<Containers *>(data); |
1635 #ifdef DW_LAMBDA | 1821 #ifdef DW_LAMBDA |
1643 protected: | 1829 protected: |
1644 void *allocpointer; | 1830 void *allocpointer; |
1645 int allocrowcount; | 1831 int allocrowcount; |
1646 void SetupContainer() { | 1832 void SetupContainer() { |
1647 #ifdef DW_LAMBDA | 1833 #ifdef DW_LAMBDA |
1834 _ConnectCItemEnter = 0; | |
1648 _ConnectItemEnter = 0; | 1835 _ConnectItemEnter = 0; |
1649 _ConnectColumnClick = 0; | 1836 _ConnectColumnClick = 0; |
1650 #endif | 1837 #endif |
1651 _ConnectItemEnterOld = 0; | 1838 _ConnectItemEnterOld = 0; |
1839 _ConnectCItemEnterOld = 0; | |
1652 _ConnectColumnClickOld = 0; | 1840 _ConnectColumnClickOld = 0; |
1653 if(IsOverridden(Container::OnItemEnter, this)) { | 1841 if(IsOverridden(Container::OnItemEnter, this)) { |
1654 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | 1842 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |
1655 ItemEnterConnected = true; | 1843 ItemEnterConnected = true; |
1656 } else { | 1844 } else { |
1700 void SetRowTitle(int row, const std::string title) { dw_container_set_row_title(allocpointer, row, title.c_str()); } | 1888 void SetRowTitle(int row, const std::string title) { dw_container_set_row_title(allocpointer, row, title.c_str()); } |
1701 void SetStripe(unsigned long oddcolor, unsigned long evencolor) { dw_container_set_stripe(hwnd, oddcolor, evencolor); } | 1889 void SetStripe(unsigned long oddcolor, unsigned long evencolor) { dw_container_set_stripe(hwnd, oddcolor, evencolor); } |
1702 #ifdef DW_LAMBDA | 1890 #ifdef DW_LAMBDA |
1703 void ConnectItemEnter(std::function<int(char *, void *)> userfunc) | 1891 void ConnectItemEnter(std::function<int(char *, void *)> userfunc) |
1704 { | 1892 { |
1893 _ConnectCItemEnter = userfunc; | |
1894 if(!ItemEnterConnected) { | |
1895 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | |
1896 ItemEnterConnected = true; | |
1897 } | |
1898 } | |
1899 void ConnectItemEnter(std::function<int(std::string, void *)> userfunc) | |
1900 { | |
1705 _ConnectItemEnter = userfunc; | 1901 _ConnectItemEnter = userfunc; |
1706 if(!ItemEnterConnected) { | 1902 if(!ItemEnterConnected) { |
1707 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | 1903 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |
1708 ItemEnterConnected = true; | 1904 ItemEnterConnected = true; |
1709 } | 1905 } |
1710 } | 1906 } |
1711 #endif | 1907 #endif |
1712 void ConnectItemEnter(int (*userfunc)(Containers *, char *, void *)) | 1908 void ConnectItemEnter(int (*userfunc)(Containers *, char *, void *)) |
1909 { | |
1910 _ConnectCItemEnterOld = userfunc; | |
1911 if(!ItemEnterConnected) { | |
1912 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | |
1913 ItemEnterConnected = true; | |
1914 } | |
1915 } | |
1916 void ConnectItemEnter(int (*userfunc)(Containers *, std::string, void *)) | |
1713 { | 1917 { |
1714 _ConnectItemEnterOld = userfunc; | 1918 _ConnectItemEnterOld = userfunc; |
1715 if(!ItemEnterConnected) { | 1919 if(!ItemEnterConnected) { |
1716 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); | 1920 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |
1717 ItemEnterConnected = true; | 1921 ItemEnterConnected = true; |
1769 int retval = dw_filesystem_setup(hwnd, flags, (char **)titles, count); | 1973 int retval = dw_filesystem_setup(hwnd, flags, (char **)titles, count); |
1770 SetupObjectView(); SetupContainer(); | 1974 SetupObjectView(); SetupContainer(); |
1771 return retval; | 1975 return retval; |
1772 } | 1976 } |
1773 void ChangeFile(int row, const char *filename, HICN icon) { dw_filesystem_change_file(hwnd, row, filename, icon); } | 1977 void ChangeFile(int row, const char *filename, HICN icon) { dw_filesystem_change_file(hwnd, row, filename, icon); } |
1978 void ChangeFile(int row, std::string filename, HICN icon) { dw_filesystem_change_file(hwnd, row, filename.c_str(), icon); } | |
1774 void ChangeItem(int column, int row, void *data) { dw_filesystem_change_item(hwnd, column, row, data); } | 1979 void ChangeItem(int column, int row, void *data) { dw_filesystem_change_item(hwnd, column, row, data); } |
1775 int GetColumnType(int column) { return dw_filesystem_get_column_type(hwnd, column); } | 1980 int GetColumnType(int column) { return dw_filesystem_get_column_type(hwnd, column); } |
1776 void SetColumnTitle(const char *title) { dw_filesystem_set_column_title(hwnd, title); } | 1981 void SetColumnTitle(const char *title) { dw_filesystem_set_column_title(hwnd, title); } |
1777 void SetColumnTitle(std::string title) { dw_filesystem_set_column_title(hwnd, title.c_str()); } | 1982 void SetColumnTitle(std::string title) { dw_filesystem_set_column_title(hwnd, title.c_str()); } |
1778 void SetFile(int row, const char *filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename, icon); } | 1983 void SetFile(int row, const char *filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename, icon); } |
1984 void SetFile(int row, std::string filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename.c_str(), icon); } | |
1779 void SetItem(int column, int row, void *data) { dw_filesystem_set_item(hwnd, allocpointer, column, row, data); } | 1985 void SetItem(int column, int row, void *data) { dw_filesystem_set_item(hwnd, allocpointer, column, row, data); } |
1780 }; | 1986 }; |
1781 | 1987 |
1782 class Tree : virtual public Focusable, virtual public ObjectView | 1988 class Tree : virtual public Focusable, virtual public ObjectView |
1783 { | 1989 { |
1823 Tree() { SetHWND(dw_tree_new(0)); SetupObjectView(); SetupTree(); } | 2029 Tree() { SetHWND(dw_tree_new(0)); SetupObjectView(); SetupTree(); } |
1824 | 2030 |
1825 // User functions | 2031 // User functions |
1826 void Clear() { dw_tree_clear(hwnd); } | 2032 void Clear() { dw_tree_clear(hwnd); } |
1827 HTREEITEM GetParent(HTREEITEM item) { return dw_tree_get_parent(hwnd, item); } | 2033 HTREEITEM GetParent(HTREEITEM item) { return dw_tree_get_parent(hwnd, item); } |
1828 char *GetTitle(HTREEITEM item) { return dw_tree_get_title(hwnd, item); } | 2034 char *GetCTitle(HTREEITEM item) { return dw_tree_get_title(hwnd, item); } |
2035 std::string GetTitle(HTREEITEM item) { | |
2036 char *retval = dw_tree_get_title(hwnd, item); | |
2037 _dw_string_free_return(retval); | |
2038 } | |
1829 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert(hwnd, title, icon, parent, itemdata); } | 2039 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert(hwnd, title, icon, parent, itemdata); } |
1830 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent) { return dw_tree_insert(hwnd, title, icon, parent, NULL); } | 2040 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent) { return dw_tree_insert(hwnd, title, icon, parent, NULL); } |
1831 HTREEITEM Insert(const char *title, HICN icon) { return dw_tree_insert(hwnd, title, icon, 0, NULL); } | 2041 HTREEITEM Insert(const char *title, HICN icon) { return dw_tree_insert(hwnd, title, icon, 0, NULL); } |
1832 HTREEITEM InsertAfter(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert_after(hwnd, item, title, icon, parent, itemdata); } | 2042 HTREEITEM InsertAfter(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert_after(hwnd, item, title, icon, parent, itemdata); } |
1833 HTREEITEM InsertAfter(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent) { return dw_tree_insert_after(hwnd, item, title, icon, parent, NULL); } | 2043 HTREEITEM InsertAfter(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent) { return dw_tree_insert_after(hwnd, item, title, icon, parent, NULL); } |
1927 named = dw_named_event_new(name); | 2137 named = dw_named_event_new(name); |
1928 } | 2138 } |
1929 event = 0; | 2139 event = 0; |
1930 SetHandle(reinterpret_cast<void *>(named)); | 2140 SetHandle(reinterpret_cast<void *>(named)); |
1931 } | 2141 } |
2142 Event(std::string name) { | |
2143 // Try to attach to an existing event | |
2144 named = dw_named_event_get(name.c_str()); | |
2145 if(!named) { | |
2146 // Otherwise try to create a new one | |
2147 named = dw_named_event_new(name.c_str()); | |
2148 } | |
2149 event = 0; | |
2150 SetHandle(reinterpret_cast<void *>(named)); | |
2151 } | |
1932 // Destructor | 2152 // Destructor |
1933 virtual ~Event() { if(event) { dw_event_close(&event); } if(named) { dw_named_event_close(named); } } | 2153 virtual ~Event() { if(event) { dw_event_close(&event); } if(named) { dw_named_event_close(named); } } |
1934 | 2154 |
1935 // User functions | 2155 // User functions |
1936 int Close() { | 2156 int Close() { |
2059 print = dw_print_new(jobname, flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); | 2279 print = dw_print_new(jobname, flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); |
2060 SetHandle(reinterpret_cast<void *>(print)); | 2280 SetHandle(reinterpret_cast<void *>(print)); |
2061 _ConnectDrawPage = userfunc; | 2281 _ConnectDrawPage = userfunc; |
2062 _ConnectDrawPageOld = 0; | 2282 _ConnectDrawPageOld = 0; |
2063 } | 2283 } |
2284 Print(std::string jobname, unsigned long flags, unsigned int pages, std::function<int(Pixmap *, int)> userfunc) { | |
2285 print = dw_print_new(jobname.c_str(), flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); | |
2286 SetHandle(reinterpret_cast<void *>(print)); | |
2287 _ConnectDrawPage = userfunc; | |
2288 _ConnectDrawPageOld = 0; | |
2289 } | |
2064 #endif | 2290 #endif |
2065 Print(const char *jobname, unsigned long flags, unsigned int pages, int (*userfunc)(Print *, Pixmap *, int)) { | 2291 Print(const char *jobname, unsigned long flags, unsigned int pages, int (*userfunc)(Print *, Pixmap *, int)) { |
2066 print = dw_print_new(jobname, flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); | 2292 print = dw_print_new(jobname, flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); |
2293 SetHandle(reinterpret_cast<void *>(print)); | |
2294 _ConnectDrawPageOld = userfunc; | |
2295 #ifdef DW_LAMBDA | |
2296 _ConnectDrawPage = 0; | |
2297 #endif | |
2298 } | |
2299 Print(std::string jobname, unsigned long flags, unsigned int pages, int (*userfunc)(Print *, Pixmap *, int)) { | |
2300 print = dw_print_new(jobname.c_str(), flags, pages, DW_SIGNAL_FUNC(_OnDrawPage), this); | |
2067 SetHandle(reinterpret_cast<void *>(print)); | 2301 SetHandle(reinterpret_cast<void *>(print)); |
2068 _ConnectDrawPageOld = userfunc; | 2302 _ConnectDrawPageOld = userfunc; |
2069 #ifdef DW_LAMBDA | 2303 #ifdef DW_LAMBDA |
2070 _ConnectDrawPage = 0; | 2304 _ConnectDrawPage = 0; |
2071 #endif | 2305 #endif |
2113 } | 2347 } |
2114 public: | 2348 public: |
2115 // Constructors | 2349 // Constructors |
2116 #ifdef DW_LAMBDA | 2350 #ifdef DW_LAMBDA |
2117 Thread(std::function<void(Thread *)> userfunc) { | 2351 Thread(std::function<void(Thread *)> userfunc) { |
2118 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, THREAD_STACK); | 2352 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, _DW_THREAD_STACK); |
2119 SetHandle(reinterpret_cast<void *>(tid)); | 2353 SetHandle(reinterpret_cast<void *>(tid)); |
2120 _ConnectThread = userfunc; | 2354 _ConnectThread = userfunc; |
2121 _ConnectThreadOld = 0; | 2355 _ConnectThreadOld = 0; |
2122 } | 2356 } |
2123 Thread(std::function<void(Thread *)> userfunc, int stack) { | 2357 Thread(std::function<void(Thread *)> userfunc, int stack) { |
2126 _ConnectThread = userfunc; | 2360 _ConnectThread = userfunc; |
2127 _ConnectThreadOld = 0; | 2361 _ConnectThreadOld = 0; |
2128 } | 2362 } |
2129 #endif | 2363 #endif |
2130 Thread(void (*userfunc)(Thread *)) { | 2364 Thread(void (*userfunc)(Thread *)) { |
2131 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, THREAD_STACK); | 2365 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, _DW_THREAD_STACK); |
2132 SetHandle(reinterpret_cast<void *>(tid)); | 2366 SetHandle(reinterpret_cast<void *>(tid)); |
2133 _ConnectThreadOld = userfunc; | 2367 _ConnectThreadOld = userfunc; |
2134 #ifdef DW_LAMBDA | 2368 #ifdef DW_LAMBDA |
2135 _ConnectThread = 0; | 2369 _ConnectThread = 0; |
2136 #endif | 2370 #endif |
2150 #ifdef DW_LAMBDA | 2384 #ifdef DW_LAMBDA |
2151 _ConnectThread = 0; | 2385 _ConnectThread = 0; |
2152 #endif | 2386 #endif |
2153 } | 2387 } |
2154 Thread() { | 2388 Thread() { |
2155 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, THREAD_STACK); | 2389 tid = dw_thread_new(DW_SIGNAL_FUNC(_OnThread), this, _DW_THREAD_STACK); |
2156 SetHandle(reinterpret_cast<void *>(tid)); | 2390 SetHandle(reinterpret_cast<void *>(tid)); |
2157 _ConnectThreadOld = 0; | 2391 _ConnectThreadOld = 0; |
2158 #ifdef DW_LAMBDA | 2392 #ifdef DW_LAMBDA |
2159 _ConnectThread = 0; | 2393 _ConnectThread = 0; |
2160 #endif | 2394 #endif |
2242 va_start(args, format); | 2476 va_start(args, format); |
2243 dw_vdebug(cformat, args); | 2477 dw_vdebug(cformat, args); |
2244 va_end(args); | 2478 va_end(args); |
2245 } | 2479 } |
2246 void Beep(int freq, int dur) { dw_beep(freq, dur); } | 2480 void Beep(int freq, int dur) { dw_beep(freq, dur); } |
2247 char *GetDir() { return dw_app_dir(); } | 2481 char *GetCDir() { return dw_app_dir(); } |
2482 std::string GetDir() { | |
2483 char *retval = dw_app_dir(); | |
2484 return std::string(retval); | |
2485 } | |
2248 void GetEnvironment(DWEnv *env) { dw_environment_query(env); } | 2486 void GetEnvironment(DWEnv *env) { dw_environment_query(env); } |
2249 int GetScreenWidth() { return dw_screen_width(); } | 2487 int GetScreenWidth() { return dw_screen_width(); } |
2250 int GetScreenHeight() { return dw_screen_height(); } | 2488 int GetScreenHeight() { return dw_screen_height(); } |
2251 void GetPointerPos(long *x, long *y) { dw_pointer_query_pos(x, y); } | 2489 void GetPointerPos(long *x, long *y) { dw_pointer_query_pos(x, y); } |
2252 unsigned long GetColorDepth() { return dw_color_depth_get(); } | 2490 unsigned long GetColorDepth() { return dw_color_depth_get(); } |
2253 char *GetClipboard() { return dw_clipboard_get_text(); } | 2491 char *GetCClipboard() { return dw_clipboard_get_text(); } |
2492 std::string GetClipboard() { | |
2493 char *retval = dw_clipboard_get_text(); | |
2494 _dw_string_free_return(retval); | |
2495 } | |
2254 void SetClipboard(const char *text) { if(text) dw_clipboard_set_text(text, (int)strlen(text)); } | 2496 void SetClipboard(const char *text) { if(text) dw_clipboard_set_text(text, (int)strlen(text)); } |
2255 void SetClipboard(const char *text, int len) { if(text) dw_clipboard_set_text(text, len); } | 2497 void SetClipboard(const char *text, int len) { if(text) dw_clipboard_set_text(text, len); } |
2256 void SetClipboard(std::string text) { dw_clipboard_set_text(text.c_str(), (int)strlen(text.c_str())); } | 2498 void SetClipboard(std::string text) { dw_clipboard_set_text(text.c_str(), (int)strlen(text.c_str())); } |
2257 void SetClipboard(std::string text, int len) { dw_clipboard_set_text(text.c_str(), len); } | 2499 void SetClipboard(std::string text, int len) { dw_clipboard_set_text(text.c_str(), len); } |
2258 void SetDefaultFont(const char *fontname) { dw_font_set_default(fontname); } | 2500 void SetDefaultFont(const char *fontname) { dw_font_set_default(fontname); } |