[Gambas-devel] Preview gb.form.md[ia]

Ron Onstenk ronstk at ...124...
Sat Aug 5 20:05:25 CEST 2006


On Saturday 05 August 2006 19:15, Benoit Minisini wrote:
> On Saturday 05 August 2006 18:57, Ron Onstenk wrote:
> > On Saturday 05 August 2006 18:40, Benoit Minisini wrote:
> > > On Saturday 05 August 2006 18:30, Ron Onstenk wrote:
> > > > This is a preview the current working .mdi/.mda
> > > > It is based on the .mdi made by Benoit and the
> > > > .mda made by Fabien and a windows manager by myself.
> >
> > ---8<---
> >
> > > > All buttons are programmable on/off or the complete Head can switch
> > > > off. The area below with the text or form are resizeable.
> > > >
> > > > The best thing is it is the .mdi and .mda together
> > > > The way I do it now is by a flag in the source code.
> > > > The result is if the flag is not set it works 99.9999999% the same
> > > > If set it should work still the same way.
> > > > In fact the API has not changed for Workspace but there is a .Options
> > > > property add.
> >
> > ---8<---
> >
> > > > Rename my old variable/control names to more correct ones.
> > > > Names now are based on old controls replaced by totally different.
> > > > Create a  project as demo for (new) Workspace.
> > > >
> > > > Remember, it is just a preview to get a impression.
> > > >
> > > >
> > > > Ron
> > >
> > > Looks cool.
> > >
> > > Is it possible to merge gb.form.mdi and gb.form.mda, i.e. being able to
> > > switch between the gb.form.mdi tab view where all windows are maximized
> > > with a TabStrip, and gb.form.mda where all windows can be freely resized,
> > > without the need for a TabStrip?
> > >
> > > Regards,
> >
> > 1)
> > It is already merged together. :)
> >
> > 2)
> > The switch is basic already done but hardcoded.
> > I think dynamic switching can give problems, but with New WorkSpace(x, y,
> > USEMDA) it could work. Not in progress ATM.
> 
> You can only make 'NEW Workspace(Parent)'. If you want more parameters, they 
> all must be optional, otherwise the Workspace cannot be used by the IDE form 
> editor.
This was the way I had in mind, as optional to stay compatible.

> 
> So the switching must be dynamic - This is always the problem when you make 
> controls.
you are/will be allowed to FirstWSPmdi = New Workspace(parent, false) for .mdi
and are/will be allowed to SecondWSPmda = New Workspace(parent, true) for .mda
but not to change SecondWSPmda on the fly to mdi type.
This is because I rework the FWorkspace with reparent for .mda style.
Not impossible but more for future expansion.
A working .mda or .mdi is priority.

> 
> >
> > 3)
> > The Tabstip stays always alive ATM.
> 
> Not necessarily a problem. As you may have noticed, it stays behind the parent 
> panel of MDI child windows, so it could be easily hidden.
just changed next code in Form_Resize to test and works OK

PUBLIC SUB Form_Resize()
  DIM showtab AS Boolean
  showtab = FALSE
  IF showtab = FALSE THEN tabWorkspace.height = 0
  IF tabWorkspace.Visible AND showtab THEN

> 
> > The child Windows Titlebar can switched complete off. The taskbar must do
> > it. If they are switched of only resize is possible, no buttons anymore.
> > Here one of the problems with the close button I must pay attention to.
> >
> > I will look a way to hide it if it is possible in special case.
> >
> >
> > Ron
> 
> To make your title bar and your resize borders, I think you have to reparent 
> the MDI child window inside some other container that manages them. One can 
> imagine that, in the gb.form.mdi mode, this container keeps being there, but 
> displays only the MDI child window entirely. But this needs some 
> modifications in the gb.form.mdi code, as at the moment all MDI child windows 
> are direct child of the same panel.
> 
> Regards,
> 

If you ask from the Workspace the child windows you do get 
exactly the same in mda as in mdi
i.e. GetActiveWindow()  returns exact for both the same Window

------------------
CWindow is changed to:
' Gambas class file

PUBLIC Window AS Window
PUBLIC Watcher AS Watcher
PUBLIC Resizable AS Boolean
PUBLIC Grid AS Integer

'====== add by ron =======
PUBLIC wsfra AS Object ' frame  ' panel '
PUBLIC wslbl AS Label
PUBLIC wsico AS PictureBox
PUBLIC wsbtn AS Button
PUBLIC wsrol AS ToggleButton
PUBLIC wsmin AS Button
PUBLIC wstbl AS Object

------------------

FWorkspace changes but important part:
PUBLIC SUB _new()
  
  IF NOT $hTile THEN $hTile = Picture["img/hash.png"]
  
IF USEMDA THEN 
  tabWorkspace.Orientation = TabStrip.Top

  svwWorkspace.Reparent(ME)
'  panWorkspace.Reparent(svwWorkspace)
'  dwgBorder.Reparent(svwWorkspace)
  
  panWorkspace.Visible = FALSE 'mdi
  dwgBorder.Visible = FALSE 'mdi
' wstbl is one of frame/panel/drawingarea  'mda

  panRightDown.Visible = FALSE 'group
  panDown.Visible = FALSE
  panRight.Visible = FALSE
ENDIF 'USEMDA

END
------------------
Note wstbl has a long story:
  listbox -> listview  in my old project
  -> frame	for the first startup making .mda
  -> panel  as replace for panWorkspace
  -> drawingarea as replace for dwgBorder

Every client window is dynamic created with sub routine 
inside FWorkspace instead of CWindow.
--------------------------
MakeWindow(bResize as boolean)
  hWin.wsfra = NEW  DrawingArea(svwWorkspace) AS "WSfra"
  hWin.wslbl = NEW        Label(hWin.wsfra) AS "WSlbl"
  hWin.wsico = NEW   PictureBox(hWin.wsfra) AS "WSico"
  hWin.wsbtn = NEW       Button(hWin.wsfra) AS "WSbtn"
  hWin.wsRol = NEW ToggleButton(hWin.wsfra) AS "WSrol"
  hWin.wsMin = NEW       Button(hWin.wsfra) AS "WSmin"
  IF bResize THEN     
   hWin.wstbl = NEW DrawingArea(hWin.wsfra) AS "WStbl"
  ELSE 
   hWin.wstbl = NEW       Panel(hWin.wsfra) AS "WStbl"
  ENDIF 

  Object.Attach(hWin.wsfra, ME, "WSfra")
  object.Attach(hwin.wsico, ME, "WSico")
  Object.Attach(hWin.wslbl, ME, "WSlbl")
  ....
  and more
--------------------------
FWorkspace_New()
  ....
IF USEMDI THEN
  IF bResize THEN  
    hWin.Reparent(dwgBorder)
  ELSE
    hWin.Reparent(panWorkspace)
  ENDIF
  
  hWin.Hide
  
  hWindow = NEW CWindow
ENDIF 'USEMDI

IF USEMDA THEN 
  ' hWin is the Window to embed, hWindow is Cwindow
  hWindow = WSnewwindow(bResize) ' returns a CWindow
  'wstbl is dwgBorder/panWorkspace replacement
  hWin.Reparent(hWindow.wstbl) 
ENDIF 'USEMDA
  ....
---------------------

This are the essential things of changes .mdi/.mda

Ron

-- 
The only bug free software from MickySoft is 
still shrink-wrapped in their warehouse...




More information about the Devel mailing list