digitalmars.D - D GUI class library
- Andrew Fedoniouk (21/21) Jan 27 2005 Hi, gentlemen,
- Thomas Kuehne (3/5) Jan 28 2005 http://www.prowiki.org/wiki4d/wiki.cgi?AvailableGuiLibraries
- Andrew Fedoniouk (32/35) Jan 28 2005 Thanks, Thomas, I've already seen this list. Is this a full one?
- Ben Hinkle (8/14) Jan 28 2005 You are right but I expect D will get an API to pin (or lock or whatever...
- Andrew Fedoniouk (9/16) Jan 28 2005 Thanks, Ben,
- Thomas Kuehne (8/36) Jan 28 2005 As far as I'm aware: yes. The best one is - in my opinion - DUI, fairly ...
- huang yicheng (27/62) Jan 30 2005 I do the samilar job by c++. I use api 'CreateWindowEx' and set 'this' t...
Hi, gentlemen, While ago I've created JavaVM and system of Java classes better suitable for GUI programming than standard one. Project was named J-SMILE and I would like to port/redesign it in D. J-SMILE project url and Java sources of GUI framework is here: http://terrainformatica.com/org/j-smile/index.htm Main principles of GUI are: 1) "windowless" widgets allowing to build lightweight feauture reach UI with exactly same look-n-feel on different platforms. 2) event capturing/bubbling propagation schema. Very flexible and inspires compact event handlers and interaction. Similar to what is used in DHTML: http://catcode.com/domcontent/events/capture.html 3) Themed UI. CSS alike facilities. I would like also to write wrappers for our HTML rendering and WYSIWYG editing engines : http://terrainformatica.com/htmlayout and http://terrainformatica.com/htmengine using such GUI library. Probably I am inventing the wheel and you know some existing GUI libraries for D? I will appreciate a lot for links then. Any comments, requirements and wishes are also highly useful. Andrew Fedoniouk. http://terrainformatica.com
Jan 27 2005
Andrew Fedoniouk schrieb in news:ctc52d$n90$2 digitaldaemon.com :Probably I am inventing the wheel and you know some existing GUI libraries for D? I will appreciate a lot for links then.http://www.prowiki.org/wiki4d/wiki.cgi?AvailableGuiLibraries Thomas
Jan 28 2005
Thomas Kuehne wrote:http://www.prowiki.org/wiki4d/wiki.cgi?AvailableGuiLibrariesThanks, Thomas, I've already seen this list. Is this a full one? And I have a question: Suppose I have in D class window { HWND hwnd; } I need to store inside Win32::HWND structure (using either SetProp or SetWindowLong) reference to the instance of this class for callbacks. What is the most correct way to do this? My initial design is to use associated array for this like: class window { HWND hwnd; static window[HWND] all_instances; extern(C) static win_proc(HWND hwnd,UINT msg, ....) { window self = window[hwnd]; self.dispatch(msg,....); } } As far as I understand I cannot store reference to window instance directly inside HWND. Reference to the window is GC thing and its value could be changed by GC. I mean constantness of this reference value depends on GC implementation - e.g. generational/copying GC can move objects in memory. So in general I cannot rely on constantness of object references. Am I right? Thanks in advance, Andrew Fedoniouk. http://terrainformatica.com
Jan 28 2005
[snip]As far as I understand I cannot store reference to window instance directly inside HWND. Reference to the window is GC thing and its value could be changed by GC. I mean constantness of this reference value depends on GC implementation - e.g. generational/copying GC can move objects in memory. So in general I cannot rely on constantness of object references. Am I right?You are right but I expect D will get an API to pin (or lock or whatever you want to call it) objects so that they don't get moved. Personally I wouldn't worry about moving data but I would worry about keeping a reference the GC can find so that it doesn't collect something prematurely. So that static array of window references will still be necessary (at least for the toplevel window references). -Ben
Jan 28 2005
Thanks, Ben, Ben Hinkle wrote: [snip]You are right but I expect D will get an API to pin (or lock or whatever you want to call it) objects so that they don't get moved. Personally I wouldn't worry about moving data but I would worry about keeping a reference the GC can find so that it doesn't collect something prematurely. So that static array of window references will still be necessary (at least for the toplevel window references).I understand that to protect object from GCollecting it should be accessible from GC/VM roots somehow. This is why I am using static associative array to map HWND value to the window instance - it serves also as a root for created windows. Andrew Fedoniouk. http://terrainformatica.com
Jan 28 2005
Andrew Fedoniouk schrieb in news:41FA988A.9080101 terrainformatica.com :Thomas Kuehne wrote:As far as I'm aware: yes. The best one is - in my opinion - DUI, fairly stable and supports Linux and Windows.http://www.prowiki.org/wiki4d/wiki.cgi?AvailableGuiLibrariesThanks, Thomas, I've already seen this list. Is this a full one?And I have a question: Suppose I have in D class window { HWND hwnd; } I need to store inside Win32::HWND structure (using either SetProp or SetWindowLong) reference to the instance of this class for callbacks. What is the most correct way to do this? My initial design is to use associated array for this like: class window { HWND hwnd; static window[HWND] all_instances; extern(C) static win_proc(HWND hwnd,UINT msg, ....) { window self = window[hwnd]; self.dispatch(msg,....); } }Your design seems to be sane. Minor problem:window* self = hwnd in all_instances; if( self !== null) self.dispatch(msg,....);Please capitalize the first letter of the class type ("Window"). This greatly improves readeability as one can instantly see if you are using the type "Window" or the instance "window". Thomas
Jan 28 2005
"Andrew Fedoniouk" <news terrainformatica.com> wrote in message news:41FA988A.9080101 terrainformatica.com...Thomas Kuehne wrote:I do the samilar job by c++. I use api 'CreateWindowEx' and set 'this' to the last parameter : MDICREATESTRUCT mdic; memset(& mdic, 0, sizeof(mdic)); mdic.lParam = (LPARAM) this; m_hWnd = CreateWindowEx(dwExStyle, lpszClass, lpszName, dwStyle, x, y, nWidth, nHeight, hParent, hMenu, hInst, & mdic); Then in static winproc function, I can get 'this' from the last parameter for later dispatching: ZWinBase * pWindow; if ( uMsg==WM_NCCREATE ) { assert( ! IsBadReadPtr((void *) lParam, sizeof(CREATESTRUCT)) ); MDICREATESTRUCT * pMDIC = (MDICREATESTRUCT *) ((LPCREATESTRUCT) lParam)->lpCreateParams; pWindow = (ZWinBase *) (pMDIC->lParam); assert( ! IsBadReadPtr(pWindow, sizeof(ZWinBase)) ); SetWindowLong(hWnd, GWL_USERDATA, (LONG) pWindow); } else pWindow=(ZWinBase *)GetWindowLong(hWnd, GWL_USERDATA); if ( pWindow ) return pWindow->WndProc(hWnd, uMsg, wParam, lParam); else return DefWindowProc(hWnd, uMsg, wParam, lParam);http://www.prowiki.org/wiki4d/wiki.cgi?AvailableGuiLibrariesThanks, Thomas, I've already seen this list. Is this a full one? And I have a question: Suppose I have in D class window { HWND hwnd; } I need to store inside Win32::HWND structure (using either SetProp or SetWindowLong) reference to the instance of this class for callbacks. What is the most correct way to do this? My initial design is to use associated array for this like: class window { HWND hwnd; static window[HWND] all_instances; extern(C) static win_proc(HWND hwnd,UINT msg, ....) { window self = window[hwnd]; self.dispatch(msg,....); } }As far as I understand I cannot store reference to window instance directly inside HWND. Reference to the window is GC thing and its value could be changed by GC. I mean constantness of this reference value depends on GC implementation - e.g. generational/copying GC can move objects in memory. So in general I cannot rely on constantness of object references. Am I right? Thanks in advance, Andrew Fedoniouk. http://terrainformatica.com
Jan 30 2005