Window maker

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Window maker

Message par blendman »

Salut

Il y a 3 ans, j'avais commencé un petit éditeur pour concevoir des fenêtres avec gadgets, etc...
Je n'ai jamais eu vraiment le temps de le retravailler. Il est donc très loin d'être terminé. Mais bon, je poste le code ici, au cas où ça servirait à quelqu'un (il reste des bugs, il manque plein de fonctions (pas de sauvegarde par exemple), etc...), donc, je le poste en l'état, car je n'ai pas le temps de bosser dessus, trop de trucs à faire ^^.

Code :

Code : Tout sélectionner

;{ infos

; Nom : WindowMaker
; Date : 22/09/2013
; Dev : blendman
; PB Version : 5.20 LTS, 5.42+
; OS : tous / All 

; A revoir : 
; - utiliser un canvas pour dessiner, modifier, etc... les gadgets
; - pour tester la fenêtre il faudrait faire : menu\tester la fenêtre

; Modification : 
; [14/04/2016] (0.10)
; - On peut désormais redimensionner la fenêtre dynamiquement
; - ajout des gadgets (propriétés du gadget ajouté dans la nouvelle fenêtre) dans le panel gadget
; - on peut ajouter des gadgets, ça s'actualise dans la fenêtre
; - on peut modifier le gadget sélectionné
; - on peut Supprimer le gadget sélectionné

; [02/10/2013] (0.05)
; - ajout d'un canvas pour tester la création de fenêtre avec le canvas


; [24/09/2013] (0.02)
; - file new project : crée la nouvelle fenêtre


; [22/09/2013] (0.01)
; - interface général
; - ajout menu



;}

;{ Constantes

Enumeration 
    
    ; windows
    #Win_Main=0
    #Win_New
    
    ;{ menu
    
    ; Files
    #PGC_MenuNew = 0
    #PGC_MenuOpen
    #PGC_MenuSave
    #PGC_MenuExit
    
    ; Edit
    #PGC_Menu
    #WM_TestWindow
    
    ; View
    #PGC_MenuViewCode
    
    ; models
    #PGC_MenuOpenModels
    
    ; help
    #PGC_MenuAbout
    ;}
    
    ;{ gadgets
    #Container_Gadget=0
    #canvas
    
    ; Gadgets
    #Panel_Gadget
    
    #G_GadgetTyp
    #G_AddGadget
    #G_DelGadget
    #G_GadgetX
    #G_GadgetY
    #G_GadgetW
    #G_GadgetH    
    #G_GadgetName
    #G_GadgetTip
    #G_GadgetText
    #G_GadgetMin
    #G_GadgetMax
    #G_GadgetOption1
    #G_GadgetImg
    
    
    
    
    ; Models
    #Bt_SimpleMenu
    #Bt_Simple
    
    
    ; Properties
    #Panel_Properties
    
    ; Window properties
    #Spin_WinW
    #Spin_WinH 
    #SG_WinName
    
    #CB_WinMaxGadget
    #CB_WinMinGadget
    #CB_WinMaximise
    #CB_WinSizeGadget
    #CB_WinScreenCentered
    ;}
    
    ;{ Type de gadgets
    #Gad_Btn    =0
    #Gad_BtnImg
    #Gad_Canvas
    #Gad_Chkbox
    #Gad_Cbbox
    #Gad_FrameG
    #Gad_ListV
    #Gad_ListIcon
    #Gad_Spin    
    #Gad_String    
    #Gad_Text
    #Gad_Panel
    ;}
    
EndEnumeration

;}

;{ structures

Structure sGadget
    
    x.w
    y.w
    w.w
    h.w
    typ.a
    Nom$
    
    Id.i
    Pb_any.a
    
    Txt$
    ToolTip$
    Value.i
    
    Img.i
    ; spin
    Min.i
    Max.i
    
EndStructure

; the window we create
Structure WM_Window_s
    
    Name$
    Width.w
    Height.w
    X.w
    Y.w
    
    ; Flags
    SizeGadget.a
    Maximize.a
    MaximizeGadget.a
    MinimizeGadget.a
    Screencentered.a
    SystemMenu.a
    
    ; gadgets in the window
    Array Gadget.sGadget(0)
    
EndStructure
Global WM_Window.WM_Window_s

; Options
Structure WM_Options_s
    
    PanelGadgetW.w
    
EndStructure
Global WM_Options.WM_Options_s


Global GadgetId.i
GadgetId = -1
;}

;{ Procédures

Macro DeleteArrayElement(ar, el)
    
    For a=el To ArraySize(ar())-1
        ar(a) = ar(a+1)
    Next
    
    a = 0
    If ArraySize(ar())-1>=0
        a = ArraySize(ar())-1    
    EndIf
    ReDim ar(a)
    
EndMacro


;{ UI

Procedure AddGadget(id,typ,x,y,w,h,txt$="",min=0,max=0,tip$="",val=-65257)
    
    ; pour ajouter plus facilement un gadget
    
    If txt$ <> "" 
        Select typ 
            Case #Gad_String, #Gad_Spin  
                w1 = 35
                If TextGadget(#PB_Any,x,y+2,w1,h,txt$) : EndIf    
                ;w1
        EndSelect
    EndIf
    
    Select typ
        Case #Gad_spin
            id1= SpinGadget(id, x+w1,y,w,h,min,max,#PB_Spin_Numeric) 
            
            
        Case #Gad_String
            If min = 1
                id1 = StringGadget(id, x+w1,y,w,h,txt$,#PB_String_Numeric) 
            Else
                id1 = StringGadget(id, x+w1,y,w,h,txt$)                 
            EndIf
            
        Case #Gad_Btn
            If min = 1
                id1= ButtonGadget(id,x+w1,y,w,h,txt$,#PB_Button_Toggle)      
            Else
                id1= ButtonGadget(id,x+w1,y,w,h,txt$)    
            EndIf
            
        Case #Gad_Panel
            id1= PanelGadget(id,x+w1,y,w,h)
            If id1 
                CloseGadgetList()
            EndIf
            
            
        Case #Gad_BtnImg
            If min = 1
                id1= ButtonImageGadget(id,x+w1,y,w,h,ImageID(max),#PB_Button_Toggle)  
            Else
                id1= ButtonImageGadget(id,x+w1,y,w,h,ImageID(max))      
            EndIf
            
        Case #Gad_Chkbox
            id1= CheckBoxGadget(id,x+w1,y,w,h,txt$)     
            
        Case #Gad_Cbbox
            id1= ComboBoxGadget(id,x+w1,y,w,h)     
                 
        Case #Gad_ListV
            id1= ListViewGadget(id,x+w1,y,w,h)     
            
            
    EndSelect
    
    If id = #PB_Any
        id = id1
    EndIf
    
    If tip$ <> ""        
        If IsGadget(id)
            GadgetToolTip(id,tip$)
        EndIf
    EndIf
    
    If val <> -65257
        SetGadgetState(id,val)
    EndIf
    
    ProcedureReturn id1
EndProcedure


Procedure WM_Reset()
    
    ; reset the program with default parameters
    
    SetWindowColor(0,RGB(120,120,120))
    
    With WM_Options
        
        \PanelGadgetW = 210
        
    EndWith
    
    With WM_Window
        
        \Width      = 600
        \Height     = 400
        \SystemMenu = 1
        
    EndWith
    
EndProcedure
;}


Procedure WM_CreateWindow(F=0)
    
    Flag = F
    
    If OpenWindow(#Win_New,WindowX(#Win_Main) + 220,WindowY(#Win_Main) + 80, WM_Window\Width, WM_Window\Height,  WM_Window\Name$, Flag,WindowID(#Win_Main))           
        ; DisableWindow(#Win_New, 1)
        SetGadgetState(#Spin_WinW, WM_Window\Width)
        SetGadgetState(#Spin_WinH, WM_Window\Height)
        ; SetActiveWindow(#Win_Main)
        
        If ArraySize(WM_Window\Gadget())>0
            For i = 0 To ArraySize(WM_Window\Gadget())-1
                With WM_Window\Gadget(i)
                    gadgetId = i
                    \Id =AddGadget(#PB_Any,\typ,\x,\y,\w,\h,\txt$,\min,\max,\ToolTip$)  
                EndWith                
            Next
        EndIf
        
    EndIf
    
EndProcedure

Procedure WM_SizeWindow()
    
    If IsWindow(#Win_New) And EventWindow() = #win_new       
        SetGadgetState(#Spin_WinW,WindowWidth(#Win_New))    
        SetGadgetState(#Spin_WinH,WindowHeight(#Win_New))
        With  WM_Window
            \Width = WindowWidth(#Win_New)
            \height = WindowHeight(#Win_New)
            \X = WindowX(#Win_New)
            \Y = WindowY(#Win_New)
        EndWith
    EndIf                    
                
EndProcedure


Procedure WM_EventMenu()
    
    If EventWindow() = #Win_Main
        
        Select EventMenu()
                
            Case #PGC_MenuNew               
                WM_CreateWindow(#PB_Window_SystemMenu)

           Case #PGC_MenuExit
                End

        EndSelect
        
    EndIf

EndProcedure



Procedure WM_CreateGadget()
     
    ; first, we get the info
    x = GetGadgetState(#G_GadgetX)
    y = GetGadgetState(#G_GadgetY)
    h = GetGadgetState(#G_GadgetH)    
    w = GetGadgetState(#G_GadgetW)
    min = GetGadgetState(#G_GadgetMin)
    max = GetGadgetState(#G_GadgetMax)
    name$ = GetGadgetText(#G_GadgetName)
    typ = GetGadgetState(#G_GadgetTyp)
    tip$ = GetGadgetText(#G_GadgetTip)
    txt$ = GetGadgetText(#G_GadgetText)
    ;val = GetGadgetState(#G_GadgetOption1)
    
    ; create the gadget
    n =ArraySize(WM_Window\Gadget())
    
    With WM_Window\Gadget(n)
        \x = x
        \y = y
        \h = h
        \w = w
        \Min = min
        \Max = max
        \typ = typ
        \ToolTip$   = tip$
        \Nom$       = name$
        \Txt$       = txt$        
    EndWith
        
    SetActiveWindow(#Win_New)
    WM_Window\Gadget(n)\Id =AddGadget(#PB_Any,typ,x,y,w,h,txt$,min,max,tip$)  
    
    GadgetId = n
    
    ReDim WM_Window\Gadget(n+1)
    
EndProcedure

Procedure WM_UpdateGadget()
    
    If GadgetId > -1
        ; Debug "on met à jour le gadget"
        x = GetGadgetState(#G_GadgetX)
        y = GetGadgetState(#G_GadgetY)
        h = GetGadgetState(#G_GadgetH)    
        w = GetGadgetState(#G_GadgetW)
        min = GetGadgetState(#G_GadgetMin)
        max = GetGadgetState(#G_GadgetMax)
        name$ = GetGadgetText(#G_GadgetName)
        typ = GetGadgetState(#G_GadgetTyp)
        tip$ = GetGadgetText(#G_GadgetTip)
        txt$ = GetGadgetText(#G_GadgetText)
        ;val = GetGadgetState(#G_GadgetOption1)
        
        n = GadgetId
        
        With WM_Window\Gadget(n)
            \x = x
            \y = y
            \h = h
            \w = w
            \Min = min
            \Max = max
            \typ = typ
            \ToolTip$   = tip$
            \Nom$       = name$
            \Txt$       = txt$        
        EndWith
                
        id = WM_Window\Gadget(n)\Id
        
        ResizeGadget(id,x,y,w,h)
        SetGadgetText(id,txt$)
        GadgetToolTip(id,tip$)
        
    EndIf
EndProcedure

Procedure WM_GetGadgetProperties()
    
    ; create the gadget
    For i=0 To ArraySize(WM_Window\Gadget())        
        If WM_Window\Gadget(i)\id = EventGadget()  
            GadgetId = i
            With WM_Window\Gadget(i)                
                SetGadgetState(#G_GadgetX,\x)
                SetGadgetState(#G_GadgetY,\y)
                SetGadgetState(#G_GadgetH,\h)    
                SetGadgetState(#G_GadgetW,\w)
                SetGadgetState(#G_GadgetMin,\Min)
                SetGadgetState(#G_GadgetMax,\Max)
                SetGadgetText(#G_GadgetName,\Nom$)
                SetGadgetState(#G_GadgetTyp,\typ)
                SetGadgetText(#G_GadgetTip,\ToolTip$)
                SetGadgetText(#G_GadgetText,\Txt$)
                ;val = GetGadgetState(#G_GadgetOption1)
            EndWith    
            Break
        EndIf        
    Next 
EndProcedure

Procedure WM_SetGadgetProperties()
   
    WM_UpdateGadget()     
     
EndProcedure

;}

;{ Openwindow

If OpenWindow(#Win_Main, 0, 0, 640, 480, "WindowMaker", 
              #PB_Window_SystemMenu | #PB_Window_ScreenCentered |#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_Maximize)
        
    WM_Reset()
    
    ;{ Menu
    If CreateMenu(0, WindowID(#Win_Main))
        
        MenuTitle("File")    
        MenuItem(#PGC_MenuNew,"New Project")
        MenuItem(#PGC_MenuOpen,"Open Project")
        MenuBar()
        MenuItem(#PGC_MenuSave,"Save Project")
        MenuItem(#PGC_MenuSave,"Save Project as...")
        MenuBar()
        MenuItem(#PGC_MenuExit,"Exit")
                
        MenuTitle("Editions")
        MenuItem(#WM_TestWindow,"Test the Window")
        
        MenuTitle("View")
        MenuItem(#PGC_MenuViewCode,"View Code")
                
        MenuTitle("Models")
        MenuItem(#PGC_MenuOpenModels,"Open Models")
                
        MenuTitle("Help")
        MenuItem(#PGC_MenuAbout,"About")
        
    EndIf
    ;}
    
    ;{ Status bar
    CreateStatusBar(0, WindowID(#Win_Main))
    ;}
    
    ;{ Gadgets
    
    If ContainerGadget(#Container_Gadget, 0, 0, WM_Options\PanelGadgetW, WindowHeight(0) - MenuHeight() - StatusBarHeight(0), #PB_Container_Single)
        
        If PanelGadget(#Panel_Gadget,0,5,200,300)
            
            AddGadgetItem(#Panel_Gadget,-1,"Gadgets")
                        
            x1 = 10 : y1 = 10
            a = 3 : b = 5 : c = 2
            w1 = 100 : w2 = 30 : w3 = 50 : w4 = 60 : w5 = 20 : w6 = 80 : w7=45 : w8=40 :w9 = 120
            h1 = 20 : h2 = 25

            AddGadget(#G_GadgetTyp,#Gad_Cbbox,x1,y1,w9-5,h1) : x1+w9
            ; be careful, the order is the same as the #Gad_ type :
            T$ = "Button,Button Image,Canvas,Checkbox,Combobox,Frame,List view,List icon, Spin, String,Text"
            For i=0 To CountString(t$,",")
                AddGadgetItem(#G_GadgetTyp,i,StringField(t$,i+1,",") )
            Next
                        
            AddGadget(#G_AddGadget,#Gad_Btn,x1,y1,w5,h1,"+",0,0,"Add Gadget") :  x1+w5+a
            AddGadget(#G_DelGadget,#Gad_Btn,x1,y1,w5,h1,"-",0,0,"delete current Gadget") : y1 + h1 +a : x1 = 10
                        
            AddGadget(#G_GadgetName,#Gad_String,x1,y1,w6,h1,"Name",0,0,"Gadget Name") : y1 + h1 +a
            SetGadgetText(#G_GadgetName,"")
            AddGadget(#G_GadgetX,#Gad_Spin,x1,y1,w6,h1,"X",-100000,100000,"Gadget X",0) : y1 + h1 +a
            AddGadget(#G_GadgetY,#Gad_Spin,x1,y1,w6,h1,"Y",-100000,100000,"Gadget Y",0) : y1 + h1 +a
            AddGadget(#G_GadgetW,#Gad_Spin,x1,y1,w6,h1,"Width",1,50000,"Gadget Width",60) : y1 + h1 +a
            AddGadget(#G_GadgetH,#Gad_Spin,x1,y1,w6,h1,"Height",1,50000,"Gadget height",20) : y1 + h1 +a
            AddGadget(#G_GadgetMin,#Gad_Spin,x1,y1,w6,h1,"Min",-1000000,1000000,"Min Value for the gadget",0) : y1 + h1 +a
            AddGadget(#G_GadgetMax,#Gad_Spin,x1,y1,w6,h1,"Max",-1000000,1000000,"Max Value for the gadget",0) : y1 + h1 +a
            
            AddGadget(#G_GadgetText,#Gad_String,x1,y1,w6,h1,"Text",0,0,"The text of the gadget") : y1 + h1 +a
            SetGadgetText(#G_GadgetText,"")
            
            AddGadget(#G_GadgetTip,#Gad_String,x1,y1,w6,h1,"Tips",0,0,"The tooltip of the gadget") : y1 + h1 +a
            SetGadgetText(#G_GadgetTip,"")            
            ;   Il manque :#G_GadgetOption1, #G_GadgetImg
                  
                        
            
            AddGadgetItem(#Panel_Gadget,-1,"Menu")
            
            AddGadgetItem(#Panel_Gadget,-1,"Models")
            
            CloseGadgetList()
            
        EndIf
        
        If PanelGadget(#Panel_Properties,0,310,200,WindowHeight(0)-MenuHeight() - 315 - StatusBarHeight(0))
            
            AddGadgetItem(#Panel_Properties,-1,"Window")
            
            yy = 5
            xx =5
            
            SpinGadget(#Spin_WinW, xx, yy, 60, 20, 1, 2000, #PB_Spin_Numeric)
            SpinGadget(#Spin_WinH, 70, yy, 60, 20, 1, 2000, #PB_Spin_Numeric)
            yy + 25
            
            TextGadget(#PB_Any, xx, yy, 40, 20, "Name : ")      
            StringGadget(#SG_WinName, xx+45, yy, 100, 20, "")                        
            yy + 25
            CheckBoxGadget(#CB_WinMaxGadget, xx, yy, 120, 20,   "Maximise Gadget")            
            yy +25
            CheckBoxGadget(#CB_WinMinGadget, xx, yy, 120, 20,   "Minimise Gadget")            
            yy +25
            CheckBoxGadget(#CB_WinMaximise, xx, yy, 120, 20,    "Maximise Window")            
            yy +25
            CheckBoxGadget(#CB_WinSizeGadget, xx, yy, 120, 20,  "Size Gadget")            
            yy +25
            CheckBoxGadget(#CB_WinScreenCentered, xx, yy, 120, 20,  "Screen Centered")
            
            AddGadgetItem(#Panel_Properties,-1,"Properties")
                        
            CloseGadgetList()
            
        EndIf
        
        CloseGadgetList()
        
    EndIf
    
    xx = GadgetX(#Container_Gadget) + GadgetWidth(#Container_Gadget) + 5
    yy = 5
    
    ;If CanvasGadget(#canvas, xx, yy, WM_Window\Width, WM_Window\Height) :   EndIf
    
    BindEvent(#PB_Event_SizeWindow,@WM_SizeWindow())
    BindEvent(#PB_Event_Menu,@WM_EventMenu())
    
    ;}
    
    Repeat
        
        Event           = WaitWindowEvent()       
        EventWindow = EventWindow()
        EventGadget  = EventGadget()
        EventType     = EventType()
        
        Select Event
                                
            Case #PB_Event_Gadget
                If EventWindow =#Win_New
                    WM_GetGadgetProperties()
                Else
                    WM_SetGadgetProperties()
                EndIf
                                
                Select EventGadget
                        
                    Case #G_DelGadget
                        If gadgetId >-1
                            FreeGadget(WM_Window\Gadget(gadgetId)\Id)
                            DeleteArrayElement(WM_Window\Gadget, gadgetId)
                            gadgetId = 0
                        EndIf
                        
                    Case #G_AddGadget
                        WM_CreateGadget()
                        
                    Case #Spin_WinW, #Spin_WinH
                        If IsWindow(#Win_New)
                            ResizeWindow(#Win_New, #PB_Ignore, #PB_Ignore, GetGadgetState(#Spin_WinW), GetGadgetState(#Spin_WinH))
                        EndIf
                        
                    Case  #CB_WinMaxGadget To #CB_WinScreenCentered  
                        If IsWindow(#Win_New)                             
                            ;CloseWindow(#Win_New)
                            Flag = 0
                            
                            If GetGadgetState(#CB_WinMaxGadget) = 1
                                Flag | #PB_Window_MaximizeGadget                    
                            EndIf
                            
                            If GetGadgetState(#CB_WinMinGadget) = 1
                                Flag | #PB_Window_MinimizeGadget                    
                            EndIf
                            
                            If GetGadgetState(#CB_WinSizeGadget) = 1
                                Flag | #PB_Window_SizeGadget                    
                            EndIf
                            
                            If GetGadgetState(#CB_WinScreenCentered) = 1
                                Flag | #PB_Window_ScreenCentered                    
                            EndIf
                            
                            WM_CreateWindow(#PB_Window_SystemMenu|Flag)
                            
                        EndIf
                                                
                    Case #SG_WinName 
                        If IsWindow(#Win_New)  
                            If EventType =  #PB_EventType_Change                
                                WM_Window\Name$ = GetGadgetText(#SG_WinName)                
                                SetWindowTitle(#Win_New,  WM_Window\Name$)
                                SetActiveGadget(EventGadget)
                            EndIf
                        EndIf
                        
                EndSelect
                
            Case #PB_Event_CloseWindow 
                If EventWindow = #Win_main
                    Quit = 1
                Else 
                    CloseWindow(EventWindow)
                EndIf
                  
        EndSelect
        
    Until Quit = 1
    
EndIf
;}

Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Window maker

Message par Patrick88 »

un bien bon début....

si j'arrive à me motiver, j'en ferai surement quelque chose....

Merci pour le partage

Patrick
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Window maker

Message par Kwai chang caine »

Oui merci 8)

On est je sais pas combien à s'être lancé dans cette aventure
Mais c'est incroyable ce que cela peut etre long 8O

En fin de compte des IDE complets et fonctionnels, y'en a tout le tour du ventre, mais des VD, autant que de cheveux sur la tête d'un chauve, et en open source alors la !!! y'a quedal
Pas mal d'ébauches, de commencements...mais faut un mental de malade pour terminer un VD tout seul 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: Window maker

Message par Patrick88 »

Kwai chang caine a écrit :...mais faut un mental de malade pour terminer un VD tout seul 8)
faut surtout se fixer des "objectifs réalistes"... vouloir ce refaire "visual studio" ou "call of duty"... :roll:
comme tu dis, faut avoir encore des cheveux à s'arracher...

pour moi se sera un petit truc tout simple, mise en place à la souris je pense, à voir suivant complexité.
avec quelques gadgets (bouton, bouton image, zone texte, zone d’édition, bouton radio, checkbox, frame3d)
et une génération de code. pas d'édition du code ni de colorisation.

pat
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Window maker

Message par Kwai chang caine »

Oui tu as raison, mais même si on veut faire le minimum, on doit se taper tous les gadgets.
Et y'en a une palanquée, on dirait pas quant on a pas à les fabriquer, mais quant on se les tapes un à un "à la mano", bah c'est la que ça décourage.

Disons que y'a deux styles de codages de VD, ceux qui utilisent la methode "Rapide ou facile" c'est de demander à "vine d'eau" de se taper le boulot pour soi.
C'est le cas du premier VD de PB, j'avais demandé à son créateur bericko
La le boulot est bien plus vite fait, mais tu te cogne les problemes de colision de gadgets, qui n'aiment pas être empilés les uns sur les autres et d'autres blemes inhérents aux evenement des fenetres qui créent des bugs surprenants

Ou la methode jésus, tu créé tout de A à Z avec un canvas, et la tu es libre, mais faut te cogner chaque gadget pixel par pixel et là...c'est long

Perso, j'avais commencé par les plus simples, alors tu commences à avoir une petite erection en voyant ton premier gadget créé de tes mains s'animer devant toi 8O 8)
Tu crois que tu va pouvoir désormais marcher sur l'eau, et au fil du temps, tu commences à la sentir molle, car tu vois le bout du tunnel reculer au fur et à mesure que tu attaques les gadgets les plus compliqués graphiquement :cry:

Et on dirait pas, mais y'a noir de trucs qui sont pas de la fioriture, et qu'il faut coder et penser afin d'avoir un VD digne de ce nom, sans pour cela en faire un arbre de noel, je suis tout à fait d'accord avec toi :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Window maker

Message par falsam »

Patrick88 a écrit :pour moi se sera un petit truc tout simple, mise en place à la souris je pense, à voir suivant complexité.
avec quelques gadgets (bouton, bouton image, zone texte, zone d’édition, bouton radio, checkbox, frame3d)
et une génération de code. pas d'édition du code ni de colorisation.
Bonjour Pat. Je pense que tu te rappelles de Tiny Visual Designer. :wink:
:arrow: http://www.purebasic.fr/french/viewtopi ... 12#p128312
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Window maker

Message par Kwai chang caine »

Tiny Visual Designer etait cool, c'est vrai 8)

Image
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Window maker

Message par Marc56 »

Kwai chang caine a écrit :Oui tu as raison, mais même si on veut faire le minimum, on doit se taper tous les gadgets.
Et y'en a une palanquée, on dirait pas quand on a pas à les fabriquer, mais quand on se les tapes un à un "à la mano", bah c'est la que ça décourage.
Oui je suis d'accord. (j'ai 135 objets à gérer sur ma fenêtre principale :lol: )
Je suis passé au tout FD, le jour où ayant fait une fenêtre avec pas mal de gadgets, j'ai eut à ajouter une simple boite à cocher: presque tout à déplacer, recalculer etc et comme la fenêtre était redimensionnable, certains gadgets devaient être ancrés à droite, en bas, et d'autres devaient s’agrandir, ça devenait pas possible, à moins d'y passer un temps fou ou d'être très organisé :roll:
Une fois domestiqué les petits bugs du FD, que du bonheur, il se charge de la procédure Resize et même des images en includebinary.
Il y a des astuces à connaitre, par exemple si on utilise plusieurs .pbf ne jamais laisser les noms par défaut proposés car il seront identique pour chaque form, il n'y aura pas de message d'erreur mais des réaffectation d'Id qui font disparaitre des objets etc.
Beaucoup de gens critiquent le FD mais rare sont les alternatives qui font tout ce qu'il fait. :wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Window maker

Message par Kwai chang caine »

C'est vrai, je pense que le FD dont tu parles, c'est celui qui est inclus dans l'actuel PB ?
Je suis admiratif du travail effectué, mais c'est de ma faute, j'arrive pas à m'y faire, des fois je me mettrais nu au milieu d'une place et je me flagelerais tellement j'suis nul :oops:

Je reste avec l'ancien, c'est comme pour ma femme :mrgreen:
Dommage que FRED ne lache pas son code source, ou même le vende pas trop cher, c'est vrai que y'a des voleurs, comme ça s'est passé il parait avec le premier code source de l'IDE :twisted:
Mais pour les amoureux du premier VD, dont je fait partie, il aurait pu faire un petit effort et confiance, puisqu'il ne servira plus jamais à rien. (Bon maintenant il viens de faire un sourire sur le GIF, alors je ne vais pas nous le vexer...une chose à la fois ... c'est qu'il a le caractere qui va avec le cerveau notre FREDO :mrgreen: )
Même une burne comme moi, aurait pu au moins corriger des bugs ou manquements tout cons, ne serait ce que la minimisation dans la barre des taches qui n'a pas été prévue 8O :?

En fait, quand je parlais de les faire les uns apres les autres, je parlais graphiquement dans un canvas :wink:
Mais une idée viens de me venir (si si..ça m'arrive des fois :mrgreen: ) avec la nouvelle lib vector on peut peut etre prendre une image qu'on pourrait resizer à volonté tout en restant réaliste....ça eviterait de se taper chaque gadget pixel par pixel comme j'ai commencé à le faire et abandonné :?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Window maker

Message par Marc56 »

Oui, c'est bien celui qui est inclus actuellement dans PB. (On devrait l’appeler PBFD pour ne pas confondre avec les multiples FD)

Je crois d'ailleurs qu'il n'a pas été écris par Fred, mais par Polo (voir la section The PureBasic Form Designer du forum us). Fred ajoute aussi des correctifs.

Dixit Polo (mars 2016)
For those who are wondering, I haven't stopped working on the Form Designer. I have just been quite busy with work lately - it does not mean I won't spend some time when I have some to fix what needs to be fixed! In the meantime, Fred did a great job working on the major problems that users encountered.

:wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Window maker

Message par Kwai chang caine »

Oui oui, c'est Polo qui l'a fait
Au début il a commencé par présenter son code comme on le ferait nous même.
Puis son code a évolué petit à petit
Fred a annoncé que ce serait le prochain VD
Alors là. ...sourprailleze 8O
Il a donc été mis je crois, à l'extérieur de l'ide au début.
Puis second effet kiss cool, Fred a décidé de l'inclure carrément dans l'ide...re-sourprailleze 8O 80

Du coup POLO est devenu tellement célebre qu'il a du fuir aux USA sous un autre pseudo :mrgreen:

Et oui mesdames et mesdames, c'est comme ça qu'il est arrivé le nouveau VD:

Saaaaaans se presseeeeer héé héé...
Le boooooo VD,
Le graaaaand VD,
Avec son chevaaaaaal et son grand chapoooooooo...

Ah non !!!! ça c'est zorro !!!! Des fois j'les confonds :oops:
https://m.youtube.com/watch?v=WDTIjOWKG-4
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre