IceDesign GUI designer

Applications, Games, Tools, User libs and useful stuff coded in PureBasic
williamvanhoecke
User
User
Posts: 66
Joined: Wed Jun 07, 2017 10:13 pm

Re: IceDesign GUI designer

Post by williamvanhoecke »

Chris,
It is fixed, thanks for the quick action. :D
User avatar
le_magn
Enthusiast
Enthusiast
Posts: 289
Joined: Wed Aug 24, 2005 12:11 pm
Location: Italia

Re: IceDesign GUI designer

Post by le_magn »

Thank's Chris!!!
Image
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

IceDesign has been updated in version 2.3.6
  • Rename elements for ComboBox and ListView, if control name is changed, so that new name is displayed in Design
  • ObjectTheme correct protoype for DwmSetWindowAttribute (Windows 11), used for constants DWMWA_USE_IMMERSIVE_DARK_MODE, DWMWA_BORDER_COLOR, DWMWA_CAPTION_COLOR and #DWMWA_TEXT_COLOR
  • And a few optimizations in the internal code
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

A small update to fix a bug that was reported, thanks :)

Containers must not be disabled In IceDesign, otherwise I don't receive any events for the canvas inside (the drawing area)
The "Disabled" property is hidden for containers, it's good here but it was possible to disable them if done on another Gadget in a multiple selection.
It's fixed and updated
wro
User
User
Posts: 14
Joined: Tue Mar 23, 2021 1:19 pm

Re: IceDesign GUI designer

Post by wro »

Hello Chris,

regarding the "pure PureBasic" modification:

Three programs with over 7000 lines started at Linux Mint Cinnamon, went to Linux Mint Debian, then over to Windows 10 and finally ended up at a Raspberry Pi 4B 64Bit Version. Every step just required the specific project settings and everything was done.
The project includes precise vector graphics resulting in DIN A4 pdf reports "Proof of working hours" including calculation of holidays for each federal state in Germany plus the required math, signature. The entire year as a csv file. Also including the required tools to generate secure signatures and transferring existing forms into vector coordinates. Everything works fine under all used systems and did not require a single line modification due to the operating system.
So it is a really portable design. OK- the forbidden fruit is missing, because I am still living in paradise and do not use them.

May be of interest to the community and a proof of PureBasic and IceDesign and the "Stay pure" switch.

Thank you again for your magnificent work.
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

Thanks :)
Glad to see that you were able to build your project on different platforms and without too many modifications.
But here, it's mainly PureBasic that deserves special thanks for its compatibility between the different platforms.
Good continuation in your development
tua
User
User
Posts: 68
Joined: Sun Jul 23, 2023 8:49 pm
Location: BC, Canada

Re: IceDesign GUI designer

Post by tua »

Hi Chris,

there is a glitch with Window titles. I made my own date requester and its window is 200 pixels wide. The window title is 'Select a date'. The window title does NOT display in design mode, but it does show as expected when I run the window in the designer. There is ample space in the caption bar to show the title.

When I increase the window width to 204, the title appears.
User avatar
bembulak
Enthusiast
Enthusiast
Posts: 576
Joined: Mon Mar 06, 2006 3:53 pm
Location: Austria

Re: IceDesign GUI designer

Post by bembulak »

Hi Chris,

finally bought IceDesign. Currently I'm digging into it, but I already love it. Thanks!
cheers,

bembulak
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

Thank you, enjoy using it!
@tua
I had read your message, but with my move, I hadn't looked at it yet.
It's in progress now, even though I still have some painting to do, shelves to build, and quite a few boxes to unpack...
It's good for the text length now, truncate to the right size with "..." if it is too long.
I am on the title bar color, if the accent color (in Windows settings) is enabled for the title bar.
It should be done soon.
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

IceDesign has been updated in version 2.3.7
  • Redraw the Designer window title bar to be as close as possible to the real window, the preview
    . Reduce the title length with "..." if it is too long to fit in the available space
    . Change the background and text color of the title bar using the accent color, if the option is enabled in Windows settings
User avatar
le_magn
Enthusiast
Enthusiast
Posts: 289
Joined: Wed Aug 24, 2005 12:11 pm
Location: Italia

Re: IceDesign GUI designer

Post by le_magn »

Hi Chris, I don't remember if I've asked you this before, but if I use objecttheme and want to change the background color of a textgadget while the program is running, how can I do this without having to run SetObjectTheme combined with setgadgetcolor, because doing so redraws the entire window and creates a really ugly effect. If this isn't possible, could you add an option for individual gadgets to be excluded from objectTheme management? Thanks.
Image
User avatar
ChrisR
Addict
Addict
Posts: 1477
Joined: Sun Jan 08, 2017 10:27 pm
Location: France

Re: IceDesign GUI designer

Post by ChrisR »

I would need time and additional testing ! I won't be available for the next two weeks.

Is the entire window redrawn if you use ?

Code: Select all

SetGadgetColor(#Txt_1, #PB_Gadget_BackColor, #Blue) : InvalidateRect_(GadgetID(#Txt_1), #Null, #True)

Otherwise, I tried to exclude individual gadgets from objectTheme. You can try with:
After Declare IsObjectTheme(Gadget), add:

Code: Select all

  Declare DelGadgetObjectTheme(Gadget)
And after Procedure IsObjectTheme(Gadget), add:

Code: Select all

  Procedure DelGadgetObjectTheme(Gadget)
    Protected ReturnValue
    If Not IsGadget(Gadget) : ProcedureReturn ReturnValue : EndIf
     
    With ObjectTheme()
      If FindMapElement(ObjectTheme(), Str(GadgetID(Gadget)))
        Select \PBGadgetType
          Case #PB_GadgetType_CheckBox, #PB_GadgetType_Frame, #PB_GadgetType_Option, #PB_GadgetType_Text, #PB_GadgetType_TrackBar, #PB_GadgetType_ScrollBar
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf          
            SetWindowTheme_(\IDGadget, 0, 0)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Editor, #PB_GadgetType_Spin, #PB_GadgetType_String, #PB_GadgetType_HyperLink
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_BackColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_FrontColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Container, #PB_GadgetType_ProgressBar, #PB_GadgetType_ScrollArea
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_BackColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Tree
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_FrontColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Calendar, #PB_GadgetType_Date
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_BackColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_FrontColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_TitleBackColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_ExplorerList, #PB_GadgetType_ExplorerTree, #PB_GadgetType_ListIcon
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_BackColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_FrontColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_LineColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Panel  
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            SetWindowLongPtr_(\IDGadget, #GWL_STYLE, GetWindowLongPtr_(\IDGadget, #GWL_STYLE) &~ #TCS_OWNERDRAWFIXED)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_ComboBox
            If Not (GetWindowLongPtr_(\IDGadget, #GWL_STYLE) & #CBS_OWNERDRAWFIXED = #CBS_OWNERDRAWFIXED)
              If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
              SetWindowTheme_(\IDGadget, "", "")
              FreeMemory(\ObjectInfo)
              DeleteMapElement(ObjectTheme())
              ReturnValue = #True
            EndIf
            
          Case #PB_GadgetType_ListView
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            SetWindowLongPtr_(\IDGadget, #GWL_STYLE, GetWindowLongPtr_(\IDGadget, #GWL_STYLE) &~ #WS_BORDER)
            SetWindowLongPtr_(\IDGadget, #GWL_EXSTYLE, GetWindowLongPtr_(\IDGadget, #GWL_EXSTYLE) | #WS_EX_CLIENTEDGE)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_BackColor, #PB_Default)
            _PB(SetGadgetColor)(\PBGadget, #PB_Gadget_FrontColor, #PB_Default)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Splitter
            If \OldProc : SetWindowLongPtr_(\IDGadget, #GWLP_WNDPROC, \OldProc) : EndIf
            SetWindowTheme_(\IDGadget, 0, 0)
            If \ObjectInfo\hObjSplitterGripper : DeleteObject_(\ObjectInfo\hObjSplitterGripper) : EndIf
            SetClassLongPtr_(\IDGadget, #GCL_STYLE, GetClassLongPtr_(\IDGadget, #GCL_STYLE) &~ #CS_DBLCLKS)
            SetWindowLongPtr_(\IDGadget, #GWL_STYLE, GetWindowLongPtr_(\IDGadget, #GWL_STYLE) &~ #WS_CLIPCHILDREN)
            FreeMemory(\ObjectInfo)
            DeleteMapElement(ObjectTheme())
            ReturnValue = #True
            
          Case #PB_GadgetType_Button, #PB_GadgetType_ButtonImage
            FreeButtonTheme(\IDGadget)
            ReturnValue = #True
        EndSelect
      EndIf
    EndWith
    ProcedureReturn ReturnValue
  EndProcedure 
User avatar
le_magn
Enthusiast
Enthusiast
Posts: 289
Joined: Wed Aug 24, 2005 12:11 pm
Location: Italia

Re: IceDesign GUI designer

Post by le_magn »

Thanks for your reply, Chris. I'll try your suggestions as soon as I get back (I'm away for a few days).

Update: I tested this and work ok, thank you very much..

Code: Select all

SetGadgetColor(#Txt_1, #PB_Gadget_BackColor, #Blue) : InvalidateRect_(GadgetID(#Txt_1), #Null, #True)
Image
Post Reply