[Gui Builder] Logic Gui Version 4.0 is released

BlitzMax Forums/BlitzMax GUI Programming/[Gui Builder] Logic Gui Version 4.0 is released

Logic Gui Version 4.0 is released

Those who don't know Logic Gui yet, it's an easy to use, feature rich visual Gui Designer and source code creator. There is a free and a full version available. Checkout details at: http://jsp.LogicZone.de

Did you ever spent too much time in trying to find the right size and position of your gadgets?
What was the correct parent connection or how could you implement a second language...
All this and a lot more can be done with Logic Gui and it is just fun instead of a boring job.

The Logic Gui software has grown to a powerful package for your design needs. While a lot of options are available, it's still easy and simple to use.

Updates:

Version 4.1

Proxy Gadgets – HyperLink & Splitter, new button styles, window icon support, improved parser,
improved user interface and color handling, better visual feedback, updated user manual ...


What's new in version 4?

MaxGui source code parser!
- Version 4 is now able to scan and parse MaxGui commands and build a Logic Gui form out of it! All gui relevant commands are parsed (including menus) and recreated. Now it's easy to drop some source code from the help or your IDE to build or update an existing form.

Unlimited Undo / Redo for the Event Editor
- Undo or redo all your changes

Changes for the new MaxGuiEx
- SetGadgetSensitivity
- PixmapFromIconStrip

Shuffle tabber tabs or itemlists
- Connected gadgets and code will automatically follow

and a lot more...

There are some video tutorials added since the last release, if you didn't saw them yet in an older post, here you go:
http://jsp.logiczone.de/Videos/Calculator.htm
http://jsp.logiczone.de/Videos/Layer.htm
http://jsp.logiczone.de/Videos/TabSplitScroll.htm
http://jsp.logiczone.de/Videos/MultiLanguage.htm

SmartButtons 1.2 (flexible Imagebuttons and more...)
(Module and source code included in Logic Gui)
http://jsp.logiczone.de/downloads/SmartButtonDemo1.2.zip
http://jsp.logiczone.de/downloads/SmartButton1.2.pdf

LogicXML1.2.1 (XML data as Gui input)
(Module and source code included in Logic Gui)
http://jsp.logiczone.de/LogicXML.html

User Manual (Printable)
http://jsp.logiczone.de/downloads/UserManual.pdf

Looking very impressive jsp! :-p

Still haven't compiled the actual LogicGUI EXE with the latest MaxGUI.Win32MaxGUIEx module, though? Is it because of any outstanding bugs?

Thanks.

Yes and no. The last time i checked out MaxGuiEx there were still some bugs and i decided to wait a bit longer to have a more stable version. When BMax 1.30 came out, the time to check all parts against the new version was too short before release. I did a compile and had some issues with treeviews, which i didn't had the last time i tried, so something has changed there and i need a closer look what's going on and some other small things. I hope i find now the time after this release...

I really appreciate all your work done for MaxGuiEx, but my problem is that i can't check every option/combination in Logic Gui with every SVN version, that would just kill my time. If i could, i would always stick with one development environment for one program until it is finished unless there is a very good point for a change. Here i have a good reason, but i can only switch at certain stages. So obviously now after this release is a better time than somewhere in between.

Great work as always jsp, thanks :-)

JSP, I tried to purchase your editor but I've one big issue.
I'm in the USA and at the begining it is written $29.90 on Shareit
Then I enter my credit card info and I get 29.90 EUR!!!
Not the same thing.
Plus my account is in USD so I'll have to pay change fees and so on.
Do you have a paypal account or can you fix Shareit so it will display $29.90 for US customers?

I will check it this evening when i'm back home, but it has worked before and i didn't change something since then. Maybe a sharit issue? I come back to you.

I had that happen to me too but I thought I had just read it wrong on your site and bought it anyway.

Can't simulate the problem with a test order - works fine - and send now a mail to shareit. It may happens only when done from US as i got an order in USD from another country, or the problem disappeared in the meantime. I hope shareit can sort it out.

Orders in USD are working again!

A Logic Gui User Manual is out now. It should replace all previous help files.

Download it here:
http://jsp.logiczone.de/downloads/UserManual.pdf

It's designed to be printable (if you have enough paper;).

Together with the available demo videos and examples there is now a good range of information accessible.

If you still miss something, let me know.

I've seen the demo vids and I'm convinced. I just placed my order :-).

Thanks! Your order has been processed. Enjoy the program.

Thanks. It's really a intuitive program. I really disliked making my windows with just typing it all by hand. As well as the event handling.

Now I need to figure out how I can combine it with my BLIde solutions :-)

Awesome, just watched the movie showing the splitters. Really impressive stuff, if /when I have to do some gui stuff I will be using logic.!

Thanks. I'm glad you like it.

From the videos, this looks like the perfect tool to repackage an old game editor of mine - just ordered, looking forward to getting to grips with it!

Welcome! And I hope you found already some time to play with it.

While I get more and more mails asking for the next version, here are the latest news:

Version 4.1 will be distributed at the end of this month, using the free days between Christmas and New Year...
It will reflect the latest MaxGuiEx development in Logic Gui, to be upto date (and some more...).

Some changes are:
Drag and drop bmx files onto Logic Gui to open automatically the MaxGui parser.
Support for WINDOW_CENTER, FONT_STRIKETHROUGH.
Radio and checkbox style for push buttons.
Colored push buttons.
Checkbox button state "CHECK_INDETERMINATE".
Proxy Gadgets -> Hyperlink and Splitter are added.
Multiselection Listboxes (MaxGui Status from Seb: experimental!).

The new version now uses MaxGuiEx (good job Seb, and thanks again for the quick fixes - the treeview made me crazy for some time:).

@Ghost Dancer
I am creating the list for version 4.2 already and the multicolumn listbox is on there, is the latest code in the code archive now stable to use, I didn't play with it again.

Interested in Logic Gui and looking for some discount at Christmas? Check out this:
http://www.blitzbasic.com/Community/posts.php?topic=81970

Version 4.1 is released!

Some last minute changes are window icon and splitter behavior support.
The user manual is updated as well!
The website will be over-worked soon.

Well done!

Glad to see that I'm not the only hardcoding one... :)

Received the update in mail earlier today. Thanks!

I just want to say that LogicGUI is awesome and you're nuts if you don't use it to build your more complicated MaxGUI interfaces. I've been using LogicGUI since pretty early in its life, and it has grown to be an amazing tool. Over time, Jsp has implemented nearly everything I suggested, and I suggested a LOT.

SpaceAce

Thanks!


Over time, Jsp has implemented nearly everything I suggested


Reminds me that I still have a long to do list ;)
But please (everybody), don't stop sending suggestions for improvements...



The website will be over-worked soon.


I uploaded now the release notes to the website. Those who are interested may have a look.

I just wanted to say that I love this tool. I bought it a few days ago and there's a whole lotta features in it that makes creating GUIs easier than ever.

It's even better than a lot of professional GUI builders I have played with.

One thing though: I can't login to the forums with password generated and sent to my e-mail. I don't know what's wrong though.

And jsp, keep up the good work.

Regards,

Andre

Glad you like it.
The password sent to you is for the registered user area only. I checked your login and it works from here. Follow the link given in the mail if you didn't do that yet.

If you like to register to the forum as well you can do so with whatever name and password you like. Everyone interested in Logic Gui can create an account. Just click on register...
There is also a sticky note in the General topic “How to register to the forum”

Thank you. :)

I'm going to do that soon.

Being a MaxGUI expert as you are, do you think you can make options for disabling or hiding individual items (tabs) of a TabberGadget? If that is possible, of course.

Hiding a tab is not really possible. The tabpage needs to be removed from the tabcontrol, at least under windows. DisableGadgetItem() does unfortunately not work on tabber, maybe because it's not cross platform. Could be a useful feature request for Seb though?

Nevertheless you could use a good workaround, which should also work cross platform.
First you could add a tab only when needed:

SuperStrict
Import MaxGui.Drivers

Global	Window1:TGadget
Global	Tabber2:TGadget
Global	Button2:TGadget

Window1:TGadget = CreateWindow:TGadget("Window1",218,112,396,189,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS )
	Tabber2:TGadget = CreateTabber:TGadget(5,14,381,168,Window1:TGadget,Null)
		AddGadgetItem( Tabber2:TGadget,"Tab1",GADGETITEM_DEFAULT )
		Local Tabber2_Tab1:TGadget = CreatePanel( 0,0,ClientWidth(Tabber2:TGadget),ClientHeight(Tabber2:TGadget),Tabber2:TGadget )
			Tabber2.items[0].extra = Tabber2_Tab1:TGadget
			SetGadgetLayout( Tabber2_Tab1,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
			Local Button1:TGadget = CreateButton:TGadget("Next Tab Nr.2",260,113,107,23,Tabber2_Tab1:TGadget,BUTTON_PUSH)
		Tabber2_GA( Tabber2:TGadget , 0 )

Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			Select EventSource()
				Case Window1	Window1_WC( Window1:TGadget )
			End Select

		Case EVENT_GADGETACTION
			Select EventSource()
				Case Tabber2	Tabber2_GA( Tabber2:TGadget , EventData() )
				Case Button1	Button1_GA( Button1:TGadget )
				Case Button2	Button2_GA( Button2:TGadget )
			End Select

	End Select
Forever

Function Window1_WC( Window:TGadget )
	DebugLog "Window Window1 wants to be closed"
'	HideGadget( Window:TGadget )

	End
End Function

Function Tabber2_GA( Tabber:TGadget , Number:Int )
	DebugLog "Tabber Tabber2 selected Tab " + Number
	For Local i:Int = 0 To Tabber.items.length -1
		HideGadget( TGadget( Tabber.items[i].extra ) )
	Next
	ShowGadget( TGadget( Tabber.items[Number].extra ) )
	
End Function

Function Button1_GA( Button:TGadget )
	DebugLog "Button Button1 was pressed"
	AddGadgetItem( Tabber2:TGadget,"Tab2",GADGETITEM_NORMAL )
	Local Tabber2_Tab2:TGadget = CreatePanel( 0,0,ClientWidth(Tabber2:TGadget),ClientHeight(Tabber2:TGadget),Tabber2:TGadget )
		Tabber2.items[1].extra = Tabber2_Tab2:TGadget
		SetGadgetLayout( Tabber2_Tab2,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
		Button2:TGadget = CreateButton:TGadget("Next Tab Nr.3",260,113,107,23,Tabber2_Tab2:TGadget,BUTTON_PUSH)
	HideGadget(Button)
End Function

Function Button2_GA( Button:TGadget )
	DebugLog "Button Button2 was pressed"
	AddGadgetItem( Tabber2:TGadget,"Tab3",GADGETITEM_NORMAL )
	Local Tabber2_Tab3:TGadget = CreatePanel( 0,0,ClientWidth(Tabber2:TGadget),ClientHeight(Tabber2:TGadget),Tabber2:TGadget )
		Tabber2.items[2].extra = Tabber2_Tab3:TGadget
		SetGadgetLayout( Tabber2_Tab3,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
	HideGadget(Button)
End Function




Second you could disable a tab by acting on the tab events as you want:
SuperStrict
Import MaxGui.Drivers
Local Window1:TGadget = CreateWindow:TGadget("Window1",252,133,314,151,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE |WINDOW_STATUS |WINDOW_CLIENTCOORDS )
	Local Tabber1:TGadget = CreateTabber:TGadget(9,12,295,130,Window1:TGadget,Null)
		AddGadgetItem( Tabber1:TGadget,"Tab1",GADGETITEM_DEFAULT )
		Local Tabber1_Tab1:TGadget = CreatePanel( 0,0,ClientWidth(Tabber1:TGadget),ClientHeight(Tabber1:TGadget),Tabber1:TGadget )
			Tabber1.items[0].extra = Tabber1_Tab1:TGadget
			SetGadgetLayout( Tabber1_Tab1,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
		AddGadgetItem( Tabber1:TGadget,"DisabledTab",GADGETITEM_NORMAL )
		Local Tabber1_Tab2:TGadget = CreatePanel( 0,0,ClientWidth(Tabber1:TGadget),ClientHeight(Tabber1:TGadget),Tabber1:TGadget )
			Tabber1.items[1].extra = Tabber1_Tab2:TGadget
			SetGadgetLayout( Tabber1_Tab2,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
		AddGadgetItem( Tabber1:TGadget,"OtherTab",GADGETITEM_NORMAL )
		Local Tabber1_Tab3:TGadget = CreatePanel( 0,0,ClientWidth(Tabber1:TGadget),ClientHeight(Tabber1:TGadget),Tabber1:TGadget )
			Tabber1.items[2].extra = Tabber1_Tab3:TGadget
			SetGadgetLayout( Tabber1_Tab3,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
		AddGadgetItem( Tabber1:TGadget,"NotifyTab",GADGETITEM_NORMAL )
		Local Tabber1_Tab4:TGadget = CreatePanel( 0,0,ClientWidth(Tabber1:TGadget),ClientHeight(Tabber1:TGadget),Tabber1:TGadget )
			Tabber1.items[3].extra = Tabber1_Tab4:TGadget
			SetGadgetLayout( Tabber1_Tab4,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED )
		Tabber1_GA( Tabber1:TGadget , 0 )

Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE
			Select EventSource()
				Case Window1	Window1_WC( Window1:TGadget )
			End Select

		Case EVENT_GADGETACTION
			Select EventSource()
				Case Tabber1	Tabber1_GA( Tabber1:TGadget , EventData() )
			End Select

	End Select
Forever

Function Window1_WC( Window:TGadget )
	DebugLog "Window Window1 wants to be closed"

	End
End Function

Function Tabber1_GA( Tabber:TGadget , Number:Int )
	DebugLog "Tabber Tabber1 selected Tab " + Number
	Global LastTab:Int,NoNo:Int
	If Number = 1 Then Number = LastTab;SelectGadgetItem(Tabber,LastTab)
	If Number = 3 Then Number = LastTab;SelectGadgetItem(Tabber,LastTab);NoNo=True
	For Local i:Int = 0 To Tabber.items.length -1
		HideGadget( TGadget( Tabber.items[i].extra ) )
	Next
	ShowGadget( TGadget( Tabber.items[Number].extra ) )
	LastTab=Number
	If NoNo Notify("Access Denied!");NoNo=False
End Function




Thanks a lot for the two workarounds. They work great. The second example I must use Global instead of Local for the tabber because I will access it within other functions.

One last question: is it possible to include some events between the variable declarations and the main loop? I have some initialization code before the loop and that would be great.

Thanks again for all your help.

Initialization code should go into the GadgetIni file.
Own events in the RawEvents file.
Checkout Properties/Application/Files and switch on those files you need and to edit them directly.
In the Tutorial section of the forum you will find also “Structure of Logic Gui Source Code”, which may help and have a look in the User Manual chapter 10.3 :)

I appreciate all the help. Keep up the good work. :)

Hi, jsp.

I'm trying to register to the forum but this message is showing:


Sorry, but this e-mail address has been banned.



my e-mail is:
byondi13
at
gmail
dot
com

:/

Actually the message is a bit misleading, because it's not your address which is banned, but all gmail addresses. I had to do this, as there were just too much spam and I don't need all that viagra (not yet:).
There are a few more freemail domains/addresses which needed to be filtered...
I have created an account for you manually and will sent it to your address.

I understand. Damn those forum spammers. They spoil it for everyone. Even Share-It doesn't accept Gmail addresses anymore.

And thanks for the manual account. :)

Hi, jsp.

I'd like to make a little request if possible. When I move a panel, every child gadget will move with it and that's nice. But if you move a panel over another panel or over other objects and release the mouse the child gadgets of each one will mix with each other. So the next time I move the same panel it will drag gadgets that are not its child gadgets.

I'd appreciate a lot if there was a way to "lock" the gadgets inside a container and not changing anything while moving it . :)

Regards.

Andre Guerreiro (byo)

Hi,
what you are looking for can be done with layers. Open the layer window and create a layer for your panel and a sublayer for your child gadgets as needed. Parallel layer don't interact, while sublayer look to their parent, thus you can have tons of different gadgets on top of each other without any problems. So you lock your child gadget to a specific parent by putting it in the same or a sublayer of that panel.

A sublayer can even have again a panel (or whatever) with other sublayers and all layers will be merged during source creation.

To control the mess of a huge form, you can switch layers on and off (visually) and work on one at a time if you like. Or switch off the source creation of a layer if it's contains only a test ...

Hmm... layers. I should have tried that. *hits himself on the forehead*
That will solve my problem as I'm working in a huge form with lots of components that hide and show depending on the action.
Thanks again, jsp.