[codenameone-discussions] question regarding Display.callSerially()

2019-09-13 Thread Thomas
Is there any advantage of splitting a Display.callSerially() task into 
smaller subtasks or would all the queued serial runnable be executed into 
the next EDT frame anyway. 

For example if I have 

Display.callSerially(()->{A; B; C;});

would
  
Display.callSerially(()->{A;});

Display.callSerially(()->{B;});

Display.callSerially(()->{C;});

potentially be less heavy for the EDT (that could potentially differ the 
execution of B and C to next frames if A took too long)?


Also, when calling multiple Display.callSerially() can I be sure they would 
run in their call order (so A then B then C in my second example) or would 
it be random?

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/4414f5a9-464e-4a80-b6cd-9f4292f0739c%40googlegroups.com.


Re: [codenameone-discussions] How to return an array from a native call?

2019-09-13 Thread Thomas
TY Steve.

On Friday, September 13, 2019 at 11:06:52 PM UTC+2, Steve Hannah wrote:
>
> byte[] was the only one that worked out of the primitive arrays.
>
> They’ll all work in the next server update though.
>
> On Fri, Sep 13, 2019 at 1:44 PM Dave Dyer  > wrote:
>
>> I've passed byte[] as parameters, but not as return values.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/72c9507a-480e-462a-8bce-d746f92b22ee%40googlegroups.com
>>  
>> 
>> .
>>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/c1e7542b-50c8-407f-ad65-10d4ab10be76%40googlegroups.com.


Re: [codenameone-discussions] How to return an array from a native call?

2019-09-12 Thread Thomas
well it is not really convenient when you are modifying an already existing 
cn1 lib and can't override the native files you already wrote.
Also, the generated native interface do not give you any hint on how to 
convert you native object to the expected interface binding object when 
these differ. 
For example in objective C, if I have an  NSArray or an NSMutableArray 
holding my primitives how must I convert it to NSData* before returning it 
(there is different methods using NSKeyedArchiver or 
NSPropertyListSerialization 
and I don't which one to use since I have no information on the 
deserialisation method CN1 is using to bind it back to java arrays of 
primitives..). 
In any case you should fix the documentation on native interfaces types 
mapping and rules
On Thursday, September 12, 2019 at 2:23:27 AM UTC+2, Steve Hannah wrote:
>
> The easiest way to see is just to create a native interface and then 
> generate the native implementations using the IDEs “generate native 
> interfaces” option.
>
> On Wed, Sep 11, 2019 at 5:01 PM Thomas > 
> wrote:
>
>> I need to return an array of primitives ( a double[] ) as the result of a 
>> native call in a NativeInterface. However, even if I guess it is possible, 
>> I could not find any example of this in the documentation or the various 
>> cn1libs I already looked at. And I don't know what would be the correct 
>> mapping for this in the diiferent native languages (the mapping table given 
>> into 
>> https://www.codenameone.com/manual/advanced-topics.html#_native_interfaces 
>> is 
>> a complete mess with column headers that do not match the types in the rows 
>> (since when do Java have a NSData* type or Android a BOOL one for 
>> example?) and a "byte" column that isn't a language and do not make any 
>> sense (at least without any additional explanation, it is completely 
>> incomprehensible). You really shoud fix this part of the documentation!)
>>
>> So, if, in my NativeInterface I define a function like this:
>>
>>   public double[] myfunction();
>>
>> what woud be its mapping in the various languages (c# for ioS, 
>> javascript...)?
>>
>> for example for iOS would it be 
>>
>> (double[]) myfunction {}
>>
>> or
>>
>> (NSData*) myfunction {}
>>
>> or something else...?
>>
>>
>> same question if I would like to return a byte[] array instead of a 
>> double[] one
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/dfa74779-54c4-46ff-b55a-a923111225b6%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/codenameone-discussions/dfa74779-54c4-46ff-b55a-a923111225b6%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/918c7fb9-2325-4b8b-9601-8f281f547244%40googlegroups.com.


[codenameone-discussions] How to return an array from a native call?

2019-09-11 Thread Thomas
I need to return an array of primitives ( a double[] ) as the result of a 
native call in a NativeInterface. However, even if I guess it is possible, 
I could not find any example of this in the documentation or the various 
cn1libs I already looked at. And I don't know what would be the correct 
mapping for this in the diiferent native languages (the mapping table given 
into 
https://www.codenameone.com/manual/advanced-topics.html#_native_interfaces is 
a complete mess with column headers that do not match the types in the rows 
(since when do Java have a NSData* type or Android a BOOL one for example?) 
and a "byte" column that isn't a language and do not make any sense (at 
least without any additional explanation, it is completely 
incomprehensible). You really shoud fix this part of the documentation!)

So, if, in my NativeInterface I define a function like this:

  public double[] myfunction();

what woud be its mapping in the various languages (c# for ioS, 
javascript...)?

for example for iOS would it be 

(double[]) myfunction {}

or

(NSData*) myfunction {}

or something else...?


same question if I would like to return a byte[] array instead of a 
double[] one

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/dfa74779-54c4-46ff-b55a-a923111225b6%40googlegroups.com.


Re: [codenameone-discussions] Re: NoSuchMethodError No Direct Method

2019-08-29 Thread Thomas
you probably forgot to click on "Refresh CN1 libs" after replacing the old 
.cn1lib file in your project with your modified one.


On Thursday, August 29, 2019 at 5:08:32 PM UTC+2, Gareth Murfin wrote:
>
> That's confusing. Weirdly I was trying to make a change to the bluetooth 
> lib but then when I try to use it I get the same error. about missing 
> method etc...once i compile it. hair tearing madness.
>
> On Thursday, August 29, 2019 at 3:36:12 AM UTC+1, Shai Almog wrote:
>>
>> Notice that there is more than one json lib...
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/d71faa9b-a21c-44ca-b8dc-e9edadc49b0f%40googlegroups.com.


[codenameone-discussions] Re: Use a google native map inside a scrollable container

2019-08-29 Thread Thomas
scrolling wil not mix with panning as the drag event is consumed by the map 
when occuring on the map so scrolling would only occur when the drag event 
is outside the map. This king of UI is used in many apps.
Anyway bad UX or not, this doen't answer the question of how to have a 
native component that is part of a scrollable container (it can be a native 
map that is purely static (all controls disabled) or just clickable but not 
pannable or event just any browserwebview displaying some html content). 
And setting the parent component scrollable or using a layout different 
from LayeredLayout for the parent shouldn't affect the way the 
peercomponent is displayed (see the ticket oppened on github for details).
As for the preffered size, I don't apply it to the peercomponet directly 
but to a wrapping CN1 Container. So I might as well have used a table 
layout with a screen size percentage, the issue would have been the same 
(the dimensions of this wrapping component is OK in any cases, this is only 
the peercomponent it contains that has wrong dimensions and sometimes 
exceed it and is cropped to its boundaries)



On Thursday, August 29, 2019 at 4:41:47 AM UTC+2, Shai Almog wrote:
>
> This will be terrible UX as scrolling will mix with panning.
> Preferred size is generally problematic for peer components, you should 
> never rely on it. I suggest using something like table layout to explicitly 
> determine the size of the component based on screen size percentages. 
>
> The native OS has preferred size methods but for things like maps they 
> don't mean much. Furthermore, they run on the native thread so by the time 
> we get them back we no longer need them. There isn't much we can do about 
> it.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/f1af0d55-2e7f-4e0f-be75-e80028bf6538%40googlegroups.com.


[codenameone-discussions] Use a google native map inside a scrollable container

2019-08-28 Thread Thomas
I tried to use a native google map inside a Form with a scrollable (in Y 
direction) body. The goal is to have an interactive map that take part of 
the screen and other components below that can exceed the screen height 
(hence the necessity to be able to scroll) 
Unfortunately I couldn't succed as doing so, the map display is bugged. I 
think it is a bug related to peercomponent getPreferredSize not beeing 
correctly computed in some cases so I oppened a subject on github (
https://github.com/codenameone/CodenameOne/issues/2896. NB: I opened it on 
the main CN1 github repository as I think it is not strictly related to the 
native google map CN1lib. Indeed it appears on the simulator where the map 
is rendered inside a browserwebview (it uses the js google map api) so it 
potentialy affect any peercomponent) but if this is not a bug, please 
explain how this layout can be achieved (a native map of fixed size inside 
a scrollable parent container)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/faa202d1-f45b-4db1-a3c7-76dd73492a63%40googlegroups.com.


[codenameone-discussions] Re: TextArea bugs

2019-08-27 Thread Thomas
On Tuesday, August 27, 2019 at 4:41:23 AM UTC+2, Shai Almog wrote:
>
> These probably aren't bugs, I explained more in the issue you posted: 
> https://github.com/codenameone/CodenameOne/issues/2894
>

Exept for the TextArea prefered width, they are all bugs actually.

On Tuesday, August 27, 2019 at 8:34:51 AM UTC+2, Dave Dyer wrote:
>
>
> In fairness, consider that the layout has a lot of moving parts, and 
> getting the exact result
> you want from generic tools is problematic at best.   Have you tried to 
> get the same effect
> using standard java/swing tools?  I bet you find it's every bit  as 
> frustrating.
>
> My solution, which I do recommend you try, is to define your own layout 
> manager
> and layout the components the way you want them to.  When you only have to 
> serve yourself, making a layout is not hard at all.
>

The bugs aren't related to layout here actually. They are linked to the 
TextArea default styling and behaviour when passing from an edition state 
to a non-edditing one and most can't really be fixed at the developper 
level. 
I agree Swing is far from beeing the most convenient and pleasant UI 
framework to use but, in my opinion, CN1 have succeded into making their UI 
5 times worse...
Each time I have to switch from Flutter to CN1 (I still have one of my 
projects using CN1, I switched all others to Flutter) I am afflicted by how 
difficult it is to get a decent UI with CN1. Yet I am not a big fan of the 
"everything is a widget" and responsive design of Flutter. I still prefer 
the old fashion way with components, layouts and listeners. But the CN1 UI 
engine is so wrongly designed (For example, it lacks modularity, with many 
components beeing huge monolitic classes actually merging multiple 
components and actions that should be distinct, like `Form` wich contains 
Toolbar and animations betweens Forms in its own code rather than having 
clear separated (and thus easier to debug and maintain) classes and 
factories for example) and buggy that everytime I work on my CN1 project I 
think of switching it to Flutter (unfortunately I invested a lot of time 
developping custom components and porting some libs into java and native 
interfaces for this one so switching to flutter/dart would requiere a lot 
of work, which is why I am still asking myself if the switch would be worth 
it for this project). I completely understand that the CN1 team and 
community is an order of magnitude smaller than the Flutter one and thus, 
that the developpment and bug fixing in CN1 requiere more time but I think 
that, as a consequence, they should really focus their efforts on critical 
parts like the base UI (rather than developping some fancy stuff like 
UIfragments and CSS like syntax that might be cool but are completely 
unecessary to develop a good looking app). Don't get me wrong, I still 
think CN1 has a great potential but I am afraid that, if they don't quickly 
revise their priorities and define a clear development timeline for the 
next 2 years (they should suggest a public timeline that the community 
could vote for and discuss, like what they are doing for clone applications 
and courses) many developpers would pragmatically definitively switch to 
others more convincing and robust frameworks. 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/7277a783-0c49-429a-be61-5d334252d44e%40googlegroups.com.


[codenameone-discussions] TextArea bugs

2019-08-26 Thread Thomas
Today I tried to achieve some simple (at least I thought so) UI with CN1 
looking like this:

[image: expected_form.png]
but multiple bugs in TextArea (I opened a ticket on github for them) turned 
this into a nearly impossible task
Honestlly, all these bugs on CN1 components (including components that are 
used in pretty much every UI and are included into CN1 since a long time so 
they should be quite tested and clean now) is tiring. I yet have to find a 
CN1 component with no bugs... 
I really hope this year you would put most efforts into fixing and 
improving the CN1 UI part...

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a118a1f4-f827-4730-8e0b-10fb44ac7894%40googlegroups.com.


Re: [codenameone-discussions] Browsercomponent crash in simulator

2019-08-23 Thread Thomas
I was able to solve this issue by setting my projects (CN1 core, CN1-JavaSE 
and my CN1 app) compiler compliance level to 10 and then back  to 1.8 
(which forced a rebuild of all classes). I don't really know what appened 
(probably a class file that was corrupted). I hope this is now solved for 
good and that it won't appear again (as the last time, I manually performed 
a rebuild of CN1-JavaSE and it solved the issue but only temporarily as I 
was only able to run my app once in the simulator after that...) else I 
would fill an issue on github

On Friday, August 23, 2019 at 4:32:24 AM UTC+2, Shai Almog wrote:
>
> From this it looks like a problem with the Eclipse plugin: 
> https://stackoverflow.com/questions/21607971/javafx-upcall-cannot-cast-jsobject
> That's odd since this shouldn't be impacted by eclipse in any way... I'll 
> have to look into it. Please file an issue.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a5e605c8-1e17-484d-8a54-9b11d580d993%40googlegroups.com.


Re: [codenameone-discussions] Browsercomponent crash in simulator

2019-08-22 Thread Thomas
Sorry I deleted this post since as I thought the issue was solved (I 
manually rebuild the JavaSE jar of CN1 for the simulator as it appears my 
IDE did not automatically do it (as it is usually the case) after the merge 
and was able to run my app in the simulator correctly after that but I just 
retried to run my app in the simulator another time and the bug reappeared 
:( )
I am using JDK 10+46 64b version and running the simulator from eclipse on 
Windows 10 pro


On Thursday, August 22, 2019 at 7:58:57 PM UTC+2, Steve Hannah wrote:
>
> This is more likely a change in the JRE.   The relevant classes haven't 
> been modified since 2018.  What JDK are you running on?  What OS/version?
>
> On Thu, Aug 22, 2019 at 10:27 AM Thomas > 
> wrote:
>
>> I just updated my fork with the latest dev version of CN1 and I have this 
>> error thrown when launching an app containing a BrowserComponent in the 
>> simulator:
>>
>> [JavaFX Application Thread] 0:0:6,797 - Exception: 
>> java.lang.ClassCastException - com.sun.webkit.dom.JSObject cannot be cast 
>> to netscape.javascript.JSObject
>> java.lang.ClassCastException: com.sun.webkit.dom.JSObject cannot be cast 
>> to netscape.javascript.JSObject
>> at 
>> com.codename1.impl.javase.SEBrowserComponent$6.changed(SEBrowserComponent.java:307)
>> at 
>> com.codename1.impl.javase.SEBrowserComponent$6.changed(SEBrowserComponent.java:1)
>> at 
>> com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
>> at 
>> com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
>> at 
>> javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
>> at 
>> javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
>> at 
>> javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
>> at 
>> javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
>> at javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:1287)
>> at 
>> javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1388)
>> at javafx.scene.web.WebEngine$LoadWorker.access$1200(WebEngine.java:1280)
>> at 
>> javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1267)
>> at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2499)
>> at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2343)
>> at com.sun.webkit.WebPage.twkOpen(Native Method)
>> at com.sun.webkit.WebPage.open(WebPage.java:1231)
>> at javafx.scene.web.WebEngine.load(WebEngine.java:932)
>> at 
>> com.codename1.impl.javase.SEBrowserComponent.setURL(SEBrowserComponent.java:768)
>> at com.codename1.impl.javase.JavaSEPort$83.run(JavaSEPort.java:11136)
>> at 
>> com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
>> at java.security.AccessController.doPrivileged(Native Method)
>> at 
>> com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
>> at 
>> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
>> at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
>> at 
>> com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
>> at java.lang.Thread.run(Thread.java:748)
>>
>> this problem was introduced in on of the commits of these last 3 days (as 
>> the latest sync of my fork with CN1 was in Aug 19 and the same app was 
>> running OK in the simulator at that time and I didn't change anything in my 
>> local computer configuration till then) 
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/bc99c585-9a33-43e7-b732-d7d918606b8e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/codenameone-discussions/bc99c585-9a33-43e7-b732-d7d918606b8e%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/da79a120-0212-4eaa-9188-03a676bb52eb%40googlegroups.com.


[codenameone-discussions] Browsercomponent crash in simulator

2019-08-22 Thread Thomas
I just updated my fork with the latest dev version of CN1 and I have this 
error thrown when launching an app containing a BrowserComponent in the 
simulator:

[JavaFX Application Thread] 0:0:6,797 - Exception: 
java.lang.ClassCastException - com.sun.webkit.dom.JSObject cannot be cast 
to netscape.javascript.JSObject
java.lang.ClassCastException: com.sun.webkit.dom.JSObject cannot be cast to 
netscape.javascript.JSObject
at 
com.codename1.impl.javase.SEBrowserComponent$6.changed(SEBrowserComponent.java:307)
at 
com.codename1.impl.javase.SEBrowserComponent$6.changed(SEBrowserComponent.java:1)
at 
com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at 
com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at 
javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
at 
javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
at 
javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.scene.web.WebEngine$LoadWorker.updateState(WebEngine.java:1287)
at 
javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1388)
at javafx.scene.web.WebEngine$LoadWorker.access$1200(WebEngine.java:1280)
at 
javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1267)
at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2499)
at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2343)
at com.sun.webkit.WebPage.twkOpen(Native Method)
at com.sun.webkit.WebPage.open(WebPage.java:1231)
at javafx.scene.web.WebEngine.load(WebEngine.java:932)
at 
com.codename1.impl.javase.SEBrowserComponent.setURL(SEBrowserComponent.java:768)
at com.codename1.impl.javase.JavaSEPort$83.run(JavaSEPort.java:11136)
at 
com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at 
com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at 
com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at 
com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)

this problem was introduced in on of the commits of these last 3 days (as 
the latest sync of my fork with CN1 was in Aug 19 and the same app was 
running OK in the simulator at that time and I didn't change anything in my 
local computer configuration till then) 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/bc99c585-9a33-43e7-b732-d7d918606b8e%40googlegroups.com.


[codenameone-discussions] Re: Commented out location manager map

2019-07-18 Thread Thomas
Indeed, I don't know if you can have quotas for a specific key but you can 
for a specific API and a specific project (wich is pretty much the same):  
https://console.cloud.google.com/quotas?project=_&_ga=2.1801017.-925146160.1563354749.
 
So you can have restrictions for the google map javascript API of the CN1 
simulator project without impacting the rest of the google services you are 
using (see the "manage your cost of use" section: 
https://developers.google.com/maps/documentation/javascript/usage-and-billing
).



On Thursday, July 18, 2019 at 5:18:00 AM UTC+2, Shai Almog wrote:
>
> I don't see a way to restrict billing for a specific key. Only for the 
> entire account which unfortunately we can't do as we made the mistake of 
> using google services. 
> If you can generate a key for that you can easily submit a PR to replace 
> the commented out code.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/0d7b19b8-b447-4359-a10e-539f7e7ffa90%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Commented out location manager map

2019-07-17 Thread Thomas
I have seen you commented out the google map api key for the location 
manager because google changed its policy regarding api key usage without 
billing information.
Just wanted to say than rather than doing this, you should probably just 
have capped the google map api associated to this key on your google 
account so that you can't exceed the free quota (this way, the risk of 
theft remains the same as previously as, even if someone stole and use your 
api key, he won't be able to exceed the free quota and induce a billing)
This is probably an easier solution than having to rewrite the manager to 
use OSM.

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/67519915-bb7a-49b9-bd66-55074a95408a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Android API 28

2019-06-28 Thread Thomas
time to switch to a common redering engine like skia for all platforms  ;)

On Saturday, June 29, 2019 at 5:51:45 AM UTC+2, Shai Almog wrote:
>
> Hi,
> I see the problem. It's a bit tricky. It seems Android killed support for 
> enlarging the clipping area which is a bit insane... 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/0aca6327-2ed0-47b2-a730-0602cc70f388%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: rendering bug in the latest dev version of CN1

2019-06-24 Thread Thomas
OK just did 

On Tuesday, June 25, 2019 at 6:28:42 AM UTC+2, Shai Almog wrote:
>
> I suggest filing an issue about this too. It looks like a misplaced 
> optimization or translation issue.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/91ee014f-8ae6-47b3-b0ce-413af095756c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] rendering bug in the latest dev version of CN1

2019-06-24 Thread Thomas
I recently updated my CN1 fork and the latest development version has a 
rendering bug with some components.
I made a small video to show you the issue with a date picker:
https://streamable.com/w3wpm
At the right, this is the app runing with the latest CN1 dev version and at 
the left, with the latest official CN1 release. 
When spinning on the dev version, you can see that spinner labels dissapear 
whereas this is not the case (normal behaviour) with the latest official 
CN1 version. So this bug was introduced in one of the latest commits 
(steeve recently made changes into the EDT, it is probably that).

The source of the form used in the test video is simply:
package org.mycompany.test;


import com.codename1.ui.Display;
import com.codename1.ui.Form;
import com.codename1.ui.layouts.BoxLayout;
import com.codename1.ui.spinner.Picker;


public class TestForm2 extends Form {


 public TestForm2() {
 
 setTitle("Test");
 setLayout(BoxLayout.y());
 
 Picker gui_birthdatePicker = new Picker();
 gui_birthdatePicker.setName("birthdatePicker");
 gui_birthdatePicker.setType(Display.PICKER_TYPE_DATE);
 gui_birthdatePicker.setDate(null);
 
 addComponent(gui_birthdatePicker);
 }
}


Also, I found 2 other rendering bugs in CN1 (that affect both the latest 
dev and the latest official CN1 release) but I openned a topic on github 
for these. 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/407789d2-d368-483a-8104-44fbf456d274%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] UnsupportedClassVersionError: javafx/scene/media/MediaException, how can I resolve this?

2019-06-07 Thread thomas
Exception in thread "AWT-EventQueue-0" 
java.lang.UnsupportedClassVersionError: javafx/scene/media/MediaException 
has been compiled by a more recent version of the Java Runtime (class file 
version 54.0), this version of the Java Runtime only recognizes class file 
versions up to 52.0

This problem shows up when I start the simulator and keeps it of from 
running the app.
The problem came a few days ago. I am not aware that I downloaded some new 
versions or changed the runtime / development environment

If you are experiencing an issue please mention the full platform your 
issue applies to:
IDE: NetBeans
Desktop OS: MacOS
Simulator : YES
Device: iPhone 7

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/998a8080-0bf4-4beb-8941-d7875880860d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] AutoCompleteTextField and potentially long filtering?

2019-04-17 Thread Thomas
The update of the suggestions popup of an AutoCompleteTextField is said to 
be completely asynchronous. 
However, looking at the code of the AutoCompleteTextField class, it looks 
like the filtering and creation of the model for the popup is called on the 
EDT thread directly. 
The only thing I see is a call to  Display.getInstance().callSerially(new 
Runnable() { but as far as I  understand it, this do not create a thread in 
parallel to the EDT but only postpone the operations in this runnable to 
the next EDT cycle
So my question is: if I have a filtering process to create the popup that 
might be long (because the server takes some time to answer or the 
post-filtering of the server answer is complex), should I encapsulate that 
filtering into an invokeAndBlock call?
For example if I have:

final DefaultListModel options = new DefaultListModel<>();
AutoCompleteTextField atf = new AutoCompleteTextField(options) {
@Override
protected boolean filter(String text) {
if(text.length() == 0) {
return false;
}
String[] l = getSuggestions(text); 
if(l == null || l.length == 0) {
return false;
}

options.removeAll();
for(String s : l) {
options.addItem(s);
}
return true;
}
};


and getSuggestions(text) can potentially take a while, should I wrote:

final DefaultListModel options = new DefaultListModel<>();
AutoCompleteTextField atf = new AutoCompleteTextField(options) {
@Override
protected boolean filter(String text) {
if(text.length() == 0) {
return false;
}

Display.getInstance().invokeAndBlock(new Runnable() {
public void run() { 
String[] l = getSuggestions(text); 

options.removeAll();
if(l != null && l.length > 0) {
for(String s : l) {
options.addItem(s);
}
}
} 
});

if(options.getSize()==0){
return false;
}
return true;
}
};

 
to be sure not to block the EDT?

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a6c06f05-b26b-4dbe-9c7b-fd2725d6c0b2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: SQLite and BLOB type

2019-04-03 Thread Thomas

>
> We'd need to detect the various types of arguments that are submitted and 
>> convert them to native calls for iOS. Passing arrays and other arbitrary 
>> objects to the C layer in the iOS port is painful so no one got around to 
>> do it for years. As I said, the demand for this was low and our resources 
>> are low as well.
>>
>>
It can be handled really easily. I posted an RFE on github that explains 
it. It shouldn't take more than 1h to implement the objC part and test it 
(unfortunatelly I can't test iOS native code locally else I would have done 
it and submited a pull request. There is also some mentions of the 
NEW_CODENAME_ONE_VM 
in the current code and I don't really know what it is (what is this new VM 
and what is the old one?) reason why I prefered to let you write that part 
of the code. But I would write it in my fork of CN1 if I have to...)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/69485650-4cb3-4803-b15e-2275f74579ec%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: SQLite and BLOB type

2019-04-03 Thread Thomas
I never assumed that I am reading all the data nor that I have only one 
table. I only said that if you have 100 match for a query (you can have 
thousands of rows in your table. That is the point of having a DB, handling 
multiple objects not just one or two) then you would have to read 100 
files. Disk fragmentation on an SSD, on the contrary to HDD, is not an 
issue and actually do not really exist (the SSD can acess each cell with 
the same access speed, it do not depend on the physical distance of the 
previously accessed cell) especially since all SSD now use Trim. So you are 
wrong again here. As for the DB indexes they are put into memory but the 
amount it takes into memory do not depend on the size of the records but 
only on their number (and the number of indexed columns) so here again you 
have no penality at inserting large objects into a DB if this data 
(=column) is not indexed  
 

On Thursday, April 4, 2019 at 6:28:59 AM UTC+2, Shai Almog wrote:
>
> Several things here aren't true. 
> First this assumes you are always reading all the data, if that was the 
> case then why have an SQL database in the first place. It also assumes only 
> one table and other tables aren't impacted.
>
> The second mistake is that randomly seeking through a large file is free 
> if you have an index. This isn't true. It's true that it's MUCH faster than 
> it was in the days of spinning platters but it's far from free and very 
> costly on a mobile device. A memory mapped file would need caching both in 
> RAM and in CPU caches. Both of these are limited resources that would cause 
> thrashing to flash storage when depleted. Every time you change something 
> in that large file you trigger disk fragmentation which has a lot of impact 
> on an SSD in terms of performance. Yes modern filesystems are better at 
> handling this but writing to a single large file is still way more 
> expensive. 
> The problem is that these will impact all your queries for the other 
> tables as well. RAM and CPU cache utilization is far more noticeable on 
> devices than on the desktop where the differences might not be noticeable. 
>
> We'd need to detect the various types of arguments that are submitted and 
> convert them to native calls for iOS. Passing arrays and other arbitrary 
> objects to the C layer in the iOS port is painful so no one got around to 
> do it for years. As I said, the demand for this was low and our resources 
> are low as well.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/414b172c-80b4-4c1b-a4e7-439430f608f4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: About the Chinese characters in the URL request

2019-04-03 Thread Thomas
This is because it isn't the request content but URL get parametters
So you should probably do something like:

String nickName="网名";
String utf8nickName = new String(nickName.getBytes(), "UTF-8"); 
String url =“http://localhost:8080/updateUser/+userID+
"/"+utf8nickName +"/"+email+”/“; 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/e861afe7-3f5f-4186-9fb4-cc5a039ecfa8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: SQLite and BLOB type

2019-04-02 Thread Thomas
On Wednesday, April 3, 2019 at 6:20:53 AM UTC+2, Shai Almog wrote:
>
> No.
> We don't support byte buffers. Even if we did I'm talking about just using 
> a binary file which will always be faster than any sqlite implementation. 
> This will also allow reducing the database size which will make all queries 
> *much* faster. You are talking about JSON/XML which isn't what I'm saying.
> I'm saying the SQL's blob column should just be a text column pointing at 
> a binary file on the device.
>

A binary file with an index in the database would never be faster than 
storing the data directly into the database. Because for retreiving your 
data you would have first to request the database for the files indexes 
(=binary files names) and then to open the matching binary files to fetch 
the data (if you have 100 results, it means you would have to open and 
close 100 binary files...). And the size of the database does actually have 
no impact on the time of the queries. Only the number of stored objects 
does, not their size. An SQLite database is just an indexed binary file so 
requesting it is just as looking at the indexes (wich do not depend on the 
size of the objects stored) and then fetch the matching data from this 
file.  
Furthermore by keeping all the data in your database you reduce the risk of 
inconsistency in your data (with binary files and indexes into the DB the 
two might be out of sync) so as the number of files in your filesystem 
(because if I have thousands of objects to store it means I would have to 
keep thousands of different binary files...)
As for supporting BLOB with iOS on CN1 you don't need to support byte 
buffers. You just have to pass all your arguments as a concatenated byte[] 
array to the native interface along with an int[2*number of args] array 
that describe the length and type (which can only be of two types: String 
or byte[]) of each argument in this concatenated data byte[] array. And on 
the native side, you deserialize this data by converting parts of this 
byte[] array that are String args to Strings and keep part that are byte[] 
args (= BLOB args) to byte[]. 

 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/02eb1b84-440b-4b9b-98c3-1c10ad07d395%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: SQLite and BLOB type

2019-04-02 Thread Thomas
Blob provide a clear benefit on devices too. It allows to reduce the size 
of the database when you have large objects to store (not necessarily 
pictures. It can be geographic shapes like in spatialite for example or any 
other large object) and these objects can also be deserialised more quickly 
than if beeing stored as plain text objects (like json or xml)
Nowadays, most developpers actually use byte buffers to handle objects 
communication and storage (see protobuf, thrift, avro, messagepack...) on 
the server AND on the device.
Competitors frameworks like flutter support BLOB SQLite type just well 
bytheway


On Wednesday, April 3, 2019 at 5:49:33 AM UTC+2, Shai Almog wrote:
>
> It's a bit problematic to implement that API on iOS and most developers 
> used workarounds since blobs aren't as necessary on devices.
> Unlike servers where the DB is distributed/clustered. On a device a blob 
> provides no benefit and can impact performance. You are better off storing 
> a file URI.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/1e1a1ad9-fbd8-4a22-b393-64e570d4e25d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: SQLite and BLOB type

2019-04-02 Thread Thomas

On Wednesday, April 3, 2019 at 2:54:04 AM UTC+2, Thomas wrote:
>
> I need to store some byte encoded serialized objects (like protobuf 
> encoded objects and similar) into an SQLite table. But I have seen in the 
> forum that there was some issues with the support of BLOB type in SQLite by 
> CN1. However, these posts are quite old and since then, some plugins like 
> https://github.com/shannah/cn1-spatialite have appeared that seems to 
> work with BLOB type with no issue (spatilite encode each Geography object 
> as a wkb BLOB object in the SQLite database and, as this plugin is working 
> with both Android and iOS, I assume the support of BLOB type on iOS is no 
> longer problematic, exept if this plugin is shipping with its own SQLite 
> engine...). 
> So can I use BLOB type in SQLite with CN1 without issue now (I am 
> targeting Android and iOS only) or is it still problematic? If so, how can 
> I write and read a byte array into an SQLite table (do I just have to pass 
> the object as a byte[] object for it to be writen into my BLOB table column 
> ?)
> If the support of BLOB type is still problematic, the alternative would be 
> to encode my bytes buffer objects as String before storing them into the 
> database (with base64 encoding or someting similar) but I would really 
> avoid the unecessary bytes<->String encoding/decoding and storage overhead 
> if I can... 
>

After looking at the code of the DatabaseImpl from iOS it seems like BLOB 
won't work on iOS as arguments are all converted to String before beeing 
passed to the native interface. Indeed the code of the execute() function 
in this class is:

 @Override
public void execute(String sql, Object... params) throws IOException{
// temporary workaround, this will probably fail with blobs
String[] val = new String[params.length];
for(int iter = 0 ; iter < val.length ; iter++) {
if(params[iter] == null) {
val[iter] = null;
} else {
val[iter] = "" + params[iter];
}
}
execute(sql, val);
} 

So it seems like it is still using a "temporary" workaround that is 
incompatible with byte[] arguments for BLOB data. Kind of sucks that this 
workaround as not been fixed by the time...

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/8c9820eb-3c35-41a7-bb70-2567c2dfd2b0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] SQLite and BLOB type

2019-04-02 Thread Thomas
I need to store some byte encoded serialized objects (like protobuf encoded 
objects and similar) into an SQLite table. But I have seen in the forum 
that there was some issues with the support of BLOB type in SQLite by CN1. 
However, these posts are quite old and since then, some plugins like 
https://github.com/shannah/cn1-spatialite have appeared that seems to work 
with BLOB type with no issue (spatilite encode each Geography object as a 
wkb BLOB object in the SQLite database and, as this plugin is working with 
both Android and iOS, I assume the support of BLOB type on iOS is no longer 
problematic, exept if this plugin is shipping with its own SQLite 
engine...). 
So can I use BLOB type in SQLite with CN1 without issue now (I am targeting 
Android and iOS only) or is it still problematic? If so, how can I write 
and read a byte array into an SQLite table (do I just have to pass the 
object as a byte[] object for it to be writen into my BLOB table column ?)
If the support of BLOB type is still problematic, the alternative would be 
to encode my bytes buffer objects as String before storing them into the 
database (with base64 encoding or someting similar) but I would really 
avoid the unecessary bytes<->String encoding/decoding and storage overhead 
if I can... 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/0b3fe39f-966a-4dce-b56b-ce3076464493%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: status of sqlite DB and threads?

2019-03-31 Thread Thomas
On Saturday, March 30, 2019 at 6:28:45 AM UTC+1, Shai Almog wrote:
>
> Because the constructor happens on a separate thread.
>

Sorry but I am afraid I don't get you here. What do you mean by "the 
constructor happens on a separate thread"? Are you talking about the 
Wrapper (=ThreadSafeDatabase) constructor or the Database one?
The ThreadSafeDatabase class is just a wrapper that declare an easythread 
and the targeted database in its constructor so it looks like it is 
performing exactly as you suggested to do (it is a wrapper class that does 
the SQL operations on the db by passing them to it's easythread). 
Is the issue the fact that the "Database" object should also be created 
through the easythread thread? (so the call to the Display.getInstance().
openOrCreate() should be called from a runnable passed to the easythread 
wrapper instead of beeing directly passed as an already created "Database" 
object passed as argument of the ThreadSafeDatabase constructor). If so, 
why not modify the ThreadSafeDatabase class to be created with an empty 
private constructor that only create the easythread and then have a 
ThreadSafeDatabase.openOrCreate(String dbfile) static constructor function 
that return a working ThreadSafeDatabase object by creating a 
ThreadSafeDatabase and calling the  Display.getInstance().openOrCreate(
dbfile) through its easythread to create the database? It would be better 
than having a ThreadSafeDatabase class that is tagged as deprecated because 
not working properly (meaning it is useless and pollute the API for nothing)
In any case, could you give a simple example of how the wrapper you suggest 
should be created (an example with the database creation and 2 SQLite calls 
(possibly comming from 2 different threads), so we can easilly see in which 
thread exactly each of these operations are supposed to happen)?
Thanks

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/e21ccc1e-e06e-4f5b-99dd-fe6a7f9c3ac4%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: status of sqlite DB and threads?

2019-03-28 Thread Thomas
On Friday, March 29, 2019 at 4:31:27 AM UTC+1, Shai Almog wrote:
>
> We made some improvements to that but still strongly recommend writing to 
> the database from a single thread. EasyThread is a relatively simple 
> solution for that and it can be implemented in the level of the data access 
> class. E.g. instead of calling SQL directly just call a wrapper class that 
> does the SQL operation for you. That class can use EasyThread to make sure 
> it's on the right thread and do the operation there.
>


Isn't it exactly what the ThreadSafeDatabase class is doing (wrapping all 
SQL operations calls into an EasyThread queue)? If so, why has it been 
tagged as deprecated then?
 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/8984a22b-9b6a-41fd-af3c-dd1d7b62720b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] status of sqlite DB and threads?

2019-03-28 Thread Thomas
I have an sqlite database that might be accessed by multiple concurrent 
threads. I saw this blog post: 
https://www.codenameone.com/blog/threadsafe-sqlite.html but the 
ThreadSafeDatabase 
class is deprecated 
https://www.codenameone.com/javadoc/com/codename1/db/ThreadSafeDatabase.html
 . 
So what is the current recommanded way to create a Database object that may 
be accessed through multiple threads? 
Also does the warning found into the CN1 documentation regarding the usage 
of SQLite with iOS notifying that "The biggest issue with SQLite 
portability is in iOS. The SQLite version for most platforms is threadsafe 
and as a result very stable. However, the iOS version is not! This might 
not seem like a big deal normally, however if you forget to close a 
connection the GC might close it for you thus producing a crash. This is 
such a common occurrence that Codename One logs a warning when the GC 
collects a database resource on the simulator" still hold or is the iOS 
version threadsafe now, like with other platforms?

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/2d809312-a741-4217-8f07-3803c4ef287a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] support of the full java.util.concurrent API?

2019-03-28 Thread Thomas
Hi
  I am trying to implement some complex multi-threading process in my app 
(with complex objects that can be partially and parallely fetched from a 
server and that are populated (with some computation from the fetched data 
and local data) as soon as each part is received) but the lack of the 
java.util.concurrent.lock API is making it really difficult to do it right. 
So I am wondering. Is there any plans to port this API to CN1? 
Support of an efficient real multi-threading (with allowed shared memory 
between threads and a full control of the design) is one of the advantages 
of java against javascript or even dart (i.e flutter) frameworks 
(especially since devices are now all multi-cores). So it's a pity that it 
is actually quite basic in CN1 and do not include the full 
java.util.concurrent API.

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/c87a159a-d857-49ae-a167-f7dafbb90651%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Is apple 2 factor authentication supported?

2019-03-04 Thread thomas
I assume that tis was the case. After updating to Version 6.0 it worked 
fine.

Am Montag, 4. März 2019 04:19:37 UTC+1 schrieb Shai Almog:
>
> Is it possible you have an old version of Codename One Settings?
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/b28122f6-33cb-4b3a-a39e-d10b3d23a509%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Is apple 2 factor authentication supported?

2019-03-03 Thread thomas
I open the codename One Setting -> iOS Certificate. I am propted to enter mail 
and password. After entering both correctly I see the error messgae that the 
login is not possible. Rhere is chance to enter the PIN

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/2f09fab9-525a-4d3c-ac81-f59f708141bd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Is apple 2 factor authentication supported?

2019-03-02 Thread thomas
apple requires now 2 factor authentication, after enabling it, I cant login 
to the iOS Certificate Wizard any more
IDE: NetBeans
Desktop iOS
Device: iPhone

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/270feda3-7422-4d69-9cf6-a49e3e7cd349%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: Passing a reference of a NativeInterface instance as parametter of another NativeInterface method?

2018-10-19 Thread Thomas
Thanks Steeve. I already use a lookup static map as a solution to my 
problem. This is just that the possibility to pass a NativeInterface 
instance as a NativeInterface parameter (and forth, as a callback result) 
would have been cleaner as I wouldn't have to maintain this static map in 
parallel and have to worry about cleaning it when one of its elements is no 
longer used in my code (so that the GC can collect it)

On Friday, October 19, 2018 at 2:27:34 PM UTC+2, Steve Hannah wrote:
>
> If you can provide more information about your use case, I may be able to 
> suggest a way to achieve it.  While you can't just pass a NativeInterface 
> instance as a NativeInterface parameters, there are a few crafty techniques 
> that you can use to pass "native" objects back and forth.  E.g., on iOS, 
> "native" objects are just pointers, which can be cast to and from longs and 
> passed back and forth.  On java-native platforms (e.g. simulator and 
> Android), I generally use a static lookup table, then pass ids of this 
> lookup table back and forth.
>
> Steve
>
> On Thu, Oct 18, 2018 at 10:20 PM Thomas > 
> wrote:
>
>> OK Thanks.
>> As for the ByteBuffer I completely agree yes ;) (It is the basis of the 
>> binary messages solution chosen by Flutter to communicate between flutter 
>> dart code and native one and it is SO convenient and powerfull to work with 
>> that I also regret not having such an easy solution in CN1 too)
>>
>> On Friday, October 19, 2018 at 7:07:52 AM UTC+2, Shai Almog wrote:
>>>
>>> It hasn't been implemented, it would have been nice but it's a lot of 
>>> work since every change in this part of the code needs to be done for every 
>>> port. It also needs to be replicated in the code generation and the backend 
>>> generation logic. There are multiple points of failure and pain so we try 
>>> to avoid changing those things. The only thing I really miss in native 
>>> interfaces is a proper ByteBuffer to provide high performance shared memory 
>>> although it isn't crucial as we don't have the JNI overhead and can use 
>>> callbacks to map data directly.
>>>
>>> In other words, it's technically possible but such a pain to implement 
>>> we probably won't do it.
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> Visit this group at 
>> https://groups.google.com/group/codenameone-discussions.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/04ecf3a6-ad0d-4ebe-b14b-07b187ead623%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/codenameone-discussions/04ecf3a6-ad0d-4ebe-b14b-07b187ead623%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/6afbb278-ea75-4b11-8714-ce8859eb6b78%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Passing a reference of a NativeInterface instance as parametter of another NativeInterface method?

2018-10-18 Thread Thomas
OK Thanks.
As for the ByteBuffer I completely agree yes ;) (It is the basis of the 
binary messages solution chosen by Flutter to communicate between flutter 
dart code and native one and it is SO convenient and powerfull to work with 
that I also regret not having such an easy solution in CN1 too)

On Friday, October 19, 2018 at 7:07:52 AM UTC+2, Shai Almog wrote:
>
> It hasn't been implemented, it would have been nice but it's a lot of work 
> since every change in this part of the code needs to be done for every 
> port. It also needs to be replicated in the code generation and the backend 
> generation logic. There are multiple points of failure and pain so we try 
> to avoid changing those things. The only thing I really miss in native 
> interfaces is a proper ByteBuffer to provide high performance shared memory 
> although it isn't crucial as we don't have the JNI overhead and can use 
> callbacks to map data directly.
>
> In other words, it's technically possible but such a pain to implement we 
> probably won't do it.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/04ecf3a6-ad0d-4ebe-b14b-07b187ead623%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Passing a reference of a NativeInterface instance as parametter of another NativeInterface method?

2018-10-18 Thread Thomas
I wonder if there is a way to pass a NativeInterface object instance as 
parametter of the method of another NativeInterface.
I mean when I create two objects that extends NativeInterface like this: 
NativeObjectType1 o1 = (NativeObjectType1 ) NativeLookup.create(
NativeObjectType1 .class);
NativeObjectType1 o2 = (NativeObjectType1 ) NativeLookup.create(
NativeObjectType1 .class);
CN1 is necessarilly keeping a mapping between this CN1 java o1 object and 
the native one so that if I call o1.somemethod(), it would make a native 
call to the somemethod() method of the native o1 object (and not of the o2 
one).
Now, if I have onother NativeInterface object of a the type 
NativeInterfacType2:
NativeObjectType2 o3 = (NativeObjectType2) NativeLookup.create(
NativeObjectType2 .class);
I would like to be able to pass to some method of this object o3 an 
instance of a NativeObjectType1 object (so to do something like 
o3.amethod(o1)) as this method would depends on multiple parametters stored 
nativelly in NativeObjectType1 objects.
It should be feasible in theory as CN1 keep a mapping between a CN1 java 
object and its matching native object (to bind the calls of a 
NativeInterface) so if I pass a CN1 object that extends NativeInterface, it 
should be able to use this mapping to retrieve the matching native object 
and pass the pointer to it when transforming the java call into a native 
one...
But I don't know if this has been implemented


-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/b8705a13-7637-4534-95d5-afd6ed16f2dd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: style change not taken into account

2018-10-11 Thread Thomas
OK. I found the issue. I was using the same border object for my two 
styles. And it looks like this cause a silent bug in CN1 
I will create a simple example and post a bug request tomorrow.

On Friday, October 12, 2018 at 5:56:57 AM UTC+2, Shai Almog wrote:

> Did you try using a toggle button? It uses pressed and unselected to 
> represent the two states. That's how we use Tab selection. 
>
> We just use setUIID() in these cases when toggle button doesn't fit.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/86582713-f823-490b-ba1e-415809b15b3d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] resize / resolution for js port

2018-10-11 Thread Thomas
The DPI information provided by modern browsers is not reliable. They have 
this information dirrectly from the OS but the OS usually have a default 
value for PPI that can be milles away from the real one. On Windows, for 
example the default PPI value is 96 I think. The user can change this value 
manually but the OS can't compute it automatically as desktop monitors are 
not forced to communicate their physical dimensions to the OS.

On Thursday, October 11, 2018 at 6:15:50 PM UTC+2, Steve Hannah wrote:
>
> Most modern browsers do provide us with information about the DPI, and we 
> use this information for our rendering.  You should be able to rely on this 
> for the most part.  I.e. If you use DIPS/mm for your units, it should 
> produce generally good results on all DPIs.
>
> On Thu, Oct 11, 2018 at 9:11 AM Thomas > 
> wrote:
>
>> I guess this is just that you can't relly on DPI on desktop platforms as 
>> desktop platforms usually have no clue of the physical dimensions of your 
>> screen. They just know its resolution and, on desktop, you can have really 
>> different screen physical dimensions for the same resolution (for example a 
>> 13" retina iMac can have the same resolution as a 27" desktop monitor). So 
>> if you are targetting desktops, you can't use DPI (as there is no simple 
>> way to know it exactly or even have a close enaugh approximation based on 
>> resolution like for mobiles devices), you need to use % like you would do 
>> on a web UI if you need an UI that would keep the same proportions whatever 
>> the screen resolution.
>>
>>
>>
>> On Thursday, October 11, 2018 at 1:35:08 PM UTC+2, Steve Hannah wrote:
>>
>>> I would avoid using browser zoom .  There are some aspects of the ui 
>>> that require a refresh after changing the zoom in order to work properly.
>>>
>>> What DPI logic doesn’t apply to JS?  All the same cn1 techniques should 
>>> work.  E.g. use mm (DIPS) units.
>>>
>>> On Wed, Oct 10, 2018 at 5:06 PM  wrote:
>>>
>>>> We have an app that runs in JS port and is used primarily on 1024x768 
>>>> roughbooks and then newer much higher 3840x2160 laptops.  I am trying to 
>>>> figure out how to best handle the resolution differences.  right now we 
>>>> set 
>>>> the browser zoom to 50%.  I have attached some images.  It seems the DPI 
>>>> logic doesn't apply to the JS port.
>>>> Files: 1024-100 is 1024x768 at 100% zoom.  1024-50 is 1024x768 50% zoom 
>>>> and 3840-100 is qHD at 100% zoom.
>>>>
>>>> As a 2nd question is there a way to programatically change the browser 
>>>> zoom from with CN1?
>>>>
>>>> Peter
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "CodenameOne Discussions" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to codenameone-discussions+unsubscr...@googlegroups.com.
>>>> Visit this group at 
>>>> https://groups.google.com/group/codenameone-discussions.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/codenameone-discussions/e1ee1b39-b3bb-4e64-b924-834e3f834491%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/codenameone-discussions/e1ee1b39-b3bb-4e64-b924-834e3f834491%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>> -- 
>>> Steve Hannah
>>> Software Developer
>>> Codename One
>>> http://www.codenameone.com
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> Visit this group at 
>> https://groups.google.com/group/codenameone-discussions.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/37fe0030-4b19-4fa4-aa8d-d028396e2f08%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/codenameone-discussions/37fe0030-4b19-4fa4-aa8d-d028396e2f08%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/0973a5a4-34f6-48e5-a43a-815eabf37c3b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] resize / resolution for js port

2018-10-11 Thread Thomas
I guess this is just that you can't relly on DPI on desktop platforms as 
desktop platforms usually have no clue of the physical dimensions of your 
screen. They just know its resolution and, on desktop, you can have really 
different screen physical dimensions for the same resolution (for example a 
13" retina iMac can have the same resolution as a 27" desktop monitor). So 
if you are targetting desktops, you can't use DPI (as there is no simple 
way to know it exactly or even have a close enaugh approximation based on 
resolution like for mobiles devices), you need to use % like you would do 
on a web UI if you need an UI that would keep the same proportions whatever 
the screen resolution.



On Thursday, October 11, 2018 at 1:35:08 PM UTC+2, Steve Hannah wrote:

> I would avoid using browser zoom .  There are some aspects of the ui that 
> require a refresh after changing the zoom in order to work properly.
>
> What DPI logic doesn’t apply to JS?  All the same cn1 techniques should 
> work.  E.g. use mm (DIPS) units.
>
> On Wed, Oct 10, 2018 at 5:06 PM > wrote:
>
>> We have an app that runs in JS port and is used primarily on 1024x768 
>> roughbooks and then newer much higher 3840x2160 laptops.  I am trying to 
>> figure out how to best handle the resolution differences.  right now we set 
>> the browser zoom to 50%.  I have attached some images.  It seems the DPI 
>> logic doesn't apply to the JS port.
>> Files: 1024-100 is 1024x768 at 100% zoom.  1024-50 is 1024x768 50% zoom 
>> and 3840-100 is qHD at 100% zoom.
>>
>> As a 2nd question is there a way to programatically change the browser 
>> zoom from with CN1?
>>
>> Peter
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> Visit this group at 
>> https://groups.google.com/group/codenameone-discussions.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/e1ee1b39-b3bb-4e64-b924-834e3f834491%40googlegroups.com
>>  
>> 
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/37fe0030-4b19-4fa4-aa8d-d028396e2f08%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: style change not taken into account

2018-10-10 Thread Thomas
I am just trying to have a custom component that can have two states with 
two different styles: a selected state with a selected style and an 
unselected state with an unselected style.
the setSelected() method I posted has nothing to do with the setSelected() 
method of the Button class. It is just a method I added to a custom 
component that has a private _selected boolean and that return a different 
style based on the value of this boolean (by overriding the Component 
getStyle() 
function). I just don't understand why this do not work as after changing 
the _selected value, I call a repaint() (that should trigger a new paint of 
the component, that would call getStyle() to know the style to apply...)



On Thursday, October 11, 2018 at 6:33:13 AM UTC+2, Shai Almog wrote:

> Selected only applies when you physically touch the screen in touch 
> devices. Otherwise it's ignored and you will see the unselected state. 
>
> Notice that setSelected() is a method of button for CheckBox/RadioButton 
> that checks the button and unrelated to style changes. If you'll explain 
> the UI you are trying to achieve I'll guide you more precisely on how to do 
> that. We often just use separate UIID's and just use setUIID.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/2b5f3c2e-e6c9-47f2-a644-f84f7bab6715%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Scrollable Y container

2018-10-10 Thread Thomas
Automatic reflow isn't a performance killer when correctly done (see 
Flutter and React), but it is another discussion ;)
As for the usage of FlowLayout, it is the default layout used when you 
create a Container without providing a specific layout. I used it as my 
parent container contains only one child and I just wanted a parent 
container that defined some specific margin and padding for its provided 
child component content (so I didn't bother speciying a Layout as with only 
one child, every layout pretty much have the same behaviour). 
Anyway, that doesn't explain why the scroll is bugged when the parent has a 
FlowLayout (if components can be defined as scrollable only when all 
parents components use a BorderLayout, this is a serious drawback. The 
scrollability of a component should not depend on the layout used by some 
of its parents)

On Thursday, October 11, 2018 at 6:28:50 AM UTC+2, Shai Almog wrote:

> We strongly recommend avoiding the nesting of flow layouts. You should use 
> BoxLayout.X or any other alternative.
> The problem is that we don't reflow. Reflow is a performance killer and 
> source of even worse odd, bugs. 
>
> FlowLayout provides a preferred size which is a wild guess because it 
> can't tell the final width at that stage so it doesn't know the height. If 
> you nest them it becomes even worse because of the line break 
> functionality. FlowLayout works OK for relatively simple base components 
> but nesting into it is a recipe for trouble.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/985bef61-b530-4663-bb66-ba4064ab9899%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] style change not taken into account

2018-10-10 Thread Thomas
I have a weird bug. 
If I have two different styles for the selected and unselected state of a 
component, when I change the state of this component after its 
initialisation, the style do not change (even if I call a repaint on this 
component). 
If in the inititlisation of this component I set it to selected or 
unselected, I can see the style différences though (so the two different 
styles are correctly defined).
I tested with a custom component that extends Component and where I put 
these methods:

public void setSelected(boolean selected) {
  if (selected != _selected) {
   _selected = selected;
   //setFocus(_selected);
   repaint();
  }
 }

public Style getStyle() {
  if (_selected) {return getSelectedStyle();}
  else {return getUnselectedStyle();}
 }

and still the same issue... (when I switch from setSelected(true) to 
setSelected(false) or the reverse, the component keep the Style of the 
selected state it had at init)

The problem also seems to appear in the old CodenameOne Designer. For 
example, if I change the Button Selected background color in a theme, in 
the edit preview I have the correct preview but in the global theme preview 
(that list all the select styles of my theme), the preview remain 
unchanged

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/10fb1490-e08e-49b0-a761-f5998c09f0ba%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Scrollable Y container

2018-10-10 Thread Thomas
I found the origin of the issue. My scollable container was inside another 
container using the default Flowlayout . And it appears that, in that case, 
the scrolling is bugged (even if I did set setscrollable(false) to the 
parent container using a Flowlayout). As soon as I use a BorderLayout for 
the parent container, the scrolling works fine.
Here is a new video that shows the issue:

https://streamable.com/jk6r8

and the source code of this example:

https://github.com/ramsestom/CN1TestBugs


On Wednesday, October 10, 2018 at 6:23:23 AM UTC+2, Shai Almog wrote:

> This happens because of nested scrollables. The form's content pane is 
> scrollable by default, this is implicitly disabled by border layout but if 
> you used a different layout you have two scrolls within one another. Our 
> logic gets confused about which one to use.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/3537a859-49dc-47b1-a7e6-e4a5fbba1f69%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Scrollable Y container

2018-10-09 Thread Thomas
OK. My form isactually using a LayeredLayout but I have 
set setScrollableY(false) at the form level so it is supposed to not be 
scrollable...
Also if a form has two scrollable child conponents where one is masking the 
other (one is in the contentpane and the other in the layerepane), is it 
considered as nested scrollables? 

On Wednesday, October 10, 2018 at 6:23:23 AM UTC+2, Shai Almog wrote:

> This happens because of nested scrollables. The form's content pane is 
> scrollable by default, this is implicitly disabled by border layout but if 
> you used a different layout you have two scrolls within one another. Our 
> logic gets confused about which one to use.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/6d7a484d-27ab-4fd1-86cb-a6d033c3a83a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Scrollable Y container

2018-10-09 Thread Thomas
A small video to show the issue:

https://streamable.com/78era

The scrollable container is rendered into the layeredPane of a Form (I 
don't know if it matters)

On Wednesday, October 10, 2018 at 5:13:15 AM UTC+2, Thomas wrote:

> I have a container that contains some multibuttons and that I declared 
> scrollable like this:
>
> picker = new Container(BoxLayout.y()); 
> picker.setScrollableY(true);
>
> but on the simulator (not tested on real devices yet), when I drag my 
> mouse vertically, the container correctly scrolls its content but it 
> returns to the position Y=0 (the first child component aligned at the top 
> of this scrollable container) as soon as I release the mouse button. 
> How can I make this container to remain at the scrolled Y position when I 
> release the mouse button after a scroll drag?
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/f82fcc55-8db0-4bae-a1e9-c3f163fb0b25%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Scrollable Y container

2018-10-09 Thread Thomas
I have a container that contains some multibuttons and that I declared 
scrollable like this:

picker = new Container(BoxLayout.y()); 
picker.setScrollableY(true);

but on the simulator (not tested on real devices yet), when I drag my mouse 
vertically, the container correctly scrolls its content but it returns to 
the position Y=0 (the first child component aligned at the top of this 
scrollable container) as soon as I release the mouse button. 
How can I make this container to remain at the scrolled Y position when I 
release the mouse button after a scroll drag?

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a0e264b0-bdee-4ea4-bbf2-bf5d849f3f9d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: problem with capture video

2018-10-04 Thread Thomas
Please, post the code as text because it is impossible to read it from your 
screenshot...

On Thursday, October 4, 2018 at 6:06:37 PM UTC+2, Fuad Nassar wrote:
>
> hi, 
> I try to use this code to capture and show video 
>
>
> [image: Capture.PNG]
>
>
>
> and then when running it under ( 4.4.4 Android Version ) I get something 
> like this message "the camera was stopped" (in finally  process failed)
> but when I use (6.1 Version) I get this message "Allow appname to access 
> photo, media, and files on your device?"(in finally process done) 
> my question: why this difference of result and what I can do to solve and 
> dispose of these messages.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/fd7db876-101e-45d2-8d18-1b7626462d58%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: animateUnlayout explanation?

2018-10-03 Thread Thomas
OK. I see. Thanks for the clear explanation.


On Thursday, October 4, 2018 at 5:58:39 AM UTC+2, Shai Almog wrote:

> Invalid state means requires layout. Deinitialize means no longer visible 
> to the user.
> Say you want to delete a component and want it to fly out of the screen. 
> Maybe even fade out while doing it.
>
> myComponent.setX(getDisplayWidth());
> myContainer.animateUnlayoutAndWait(400);
> myComponent.remove();
> myContainer.animateLayout(200);
>
> I set the X of the component out of bounds. Then I call animate unlayout 
> which returns the X to the original position in the layout, then animates 
> the component out of the screen to the invalid position. This effectively 
> gives the visual effect of a component "flying out". Now the component is 
> no longer visible but there is a gap where it was. If I left it at that the 
> component would return in the next layout operation...
> I then remove the component as it's no longer necessary and run an 
> animateLayout (which is the equivalent of revalidate) to layout the code. 
> It will let the other components fill the gap left by the removed component 
> with a nice animation.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/b8500c55-b184-4931-8a45-668d8c5e826a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] animateUnlayout explanation?

2018-10-03 Thread Thomas
could you provide a detailed example on how to use 
the animateUnlayout(final int duration, int opacity, Runnable callback) 
method of Container? 
Because, if I look at the code I don't really understand. It takes a 
pending layout and animate a morphing from the pending layout to the 
current one. But what is the point of this? if the container is displayed 
it will switch from its current layout to the pending one and then comme 
back to its current layout during the animation time. I don't see any 
situation where I would want an animation to do that. Usually an animation 
is supposed to take place from a current layout and have a pending layout 
as a final goal (what is exactly what animateLayout does). and this even 
when I want to remove a component (what is what the animateUnlayout method 
is labeled to be usefull for but I don't understand how), in which case I 
want my animation to go from this current component layout to a pending 
disposed component layout (and at the end of the animation I can remove 
this component from its parent or hide it) 
Also it is supposed to leave the container in an "invalid state" but I see 
nothing in the code that would deinitialise the container at the end 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/af4855b9-ffa8-4136-9456-0d40e95187c1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Async / Await

2018-09-27 Thread Thomas
you don't need to manipulate bytecode in runtime. Like I said, this lib 
also offers you the possibility to manipulate the bytecode at compilation 
time (Option 4, the recommanded one, that makes this lib a transitive 
dependency). 

On Friday, September 28, 2018 at 6:47:14 AM UTC+2, Shai Almog wrote:
>
> You need a JVM agent to manipulate bytecode in runtime for this AFAIK. 
> Probably not something we can integrate. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/c8d0d063-3140-43b1-941c-1b8e023ddeba%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: considered improvment: custom border shape and border shadow

2018-09-27 Thread Thomas
OK. just FYI I think Skia already fully support MoltenGL 
(https://moltengl.com/moltenvk/) that allows to bing Vulkan API to Metal. 
So it seems like it is already pôssible to use Skia with Metal (by using 
the MoltenGL intermediate). But it sure would be better to have Metal 
directly supported by Skia ;)
If you choose the Skia path for iOS, I think it would make most sense to 
allow it as a renderer for Android too (and also javascript even if support 
of WebGL by Skia is also a WIP here too) as you would have many benefits to 
use a unique renderer for multiple platforms like I already said. But yes, 
it would be good to discuss this with the community via an RFE

On Friday, September 28, 2018 at 6:43:41 AM UTC+2, Shai Almog wrote:

> I saw the Metal issue when we discussed metal support but didn't follow 
> it. Now that it's accepted and has a timeline a migration to SKIA as the 
> backend might be more practical than a Metal rewrite of the iOS backend. 
> I'm not sure if it makes the same sense for the Android port. It would 
> require shipping a native library, increase the distribution size etc. I'm 
> not sure if there is a tangible benefit there.
>
> I added an RFE to track this 
> https://github.com/codenameone/CodenameOne/issues/2565
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/56421330-b18c-4c23-b8bf-812ad6e00a39%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Async / Await

2018-09-27 Thread Thomas
Just discovered this awsome library that I wanted to share with you: 
https://github.com/electronicarts/ea-async
When devlopping with react-native or Flutter I frequently use async/await 
when my app needs to communicate whith a distant server or a local database 
for example. Actually, promises and assync/await are such a powerfull 
concept that it is at the base of reactive programming, popularized by 
react.
So, I always regreted that java do not offer this type of concept as 
promises are so much convenient than having to deal with callbacks for 
complex asynchroneous workflows.
Actually, java made a first move in this direction with Java 8 that 
introduced CompletableFuture but it is so complex to use (seriously this 
API is a mess) that it was totally eclipsed by others Java 8 cool features 
(Lambdas, Streams, JSR 310, ...) and is barely used.
But this library, developped by Electronic Arts, abstract all the 
complexity of the CompletableFuture API and allows you to write async await 
code seamlessly. This way, you no longer have to handle two versions (a 
synchroneaous and an asynchroneous) of your network or native requests 
methods for example.
And where it is quite cool is that this lib is able to re-writte your 
async/await calls at runtime or build time, as you prefer. That means that 
it could very well be integrated into the CN1 build gradle process (so it 
would be directly packed with the CN1 IDE plugins) and we could use 
async/await in CN1 (it would requiere the CompletableFuture API to be 
ported to CN1 first though) !
Wouldn't it be cool?
That is clearly something I will try to do when I find some time ;)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/e7518d00-a835-4438-b9d1-cbcace9b0143%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: OnOffSwitch Problems

2018-09-27 Thread Thomas
As I am not sure you saw it, just wanted to inform you that I attached the 
code to the Github issue 2 days ago.

On Tuesday, September 25, 2018 at 7:40:31 AM UTC+2, Shai Almog wrote:
>
> Thanks! 
> You can attach it to the issue or submit a PR so we have the log of where 
> the code came from. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/af95ad4d-8129-4585-823e-b6714d3a7d79%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: considered improvment: custom border shape and border shadow

2018-09-27 Thread Thomas
Skia evolved a lot these last years (mainly because Google (and others like 
Mozilla or Microsoft) decided to use it as the common rendering engine for 
all its top products, and specifically Chrome and Flutter that are 
cross-platforms)
So yes Skia is now capable to run on top of GPU hardware rendering libs 
like OpenGL or Vulkan (or others) and to make call to these when relevant
Concerning the support of Metal by Skia, this is WIP and is expected to be 
achieved for summer 2019 
(https://bugs.chromium.org/p/skia/issues/detail?id=8050)
I don't think replacing only the currend AndroidImplementation rendering by 
Skia would be worth it though. It would be a lot of work for only a few 
degrees of control gained (the Android API already expose most of the Skia 
capabilities. Actually, when you make a graphic Android API call, that is 
Skia that is called under the hood and that then call OpenGL when relevant)
Furthermore, as Android do not directly expose the Skia API (saddly), you 
have to embed Skia in your app apk, which increase your minimal apk size by 
1 or 2 Mb.
On the other hand, using Skia (or any other cross-platform 2D graphic lib, 
but I don't know if there are some that compete with Skia in terms of 
efficiency and range of supported platforms) for many targets is a whole 
different story as, doing so, only one renderer needs to be written and 
debugged for all these targets at once (and can then be run on any 
platform, where Skia works)
and you are delegating the hard work of keeping your rendering engine up to 
date with these platforms to the Skia developpers. This is a significant 
advantage as it allows you to move faster to new targets (when Skia support 
a new target, your Skia renderer would immediately work to it. Else you 
still have the solution to writte a specific renderer for this target as 
this is actually the case)
Furthermore, you partially free yourself from the rule of the "least 
capable" that usually prevails when writting cross-platforms API. For 
example, if the Android java API do not allows you to access some specific 
graphic capabilities, like shape shadowing that could exist on the API of 
another platform like iOS (I don't know if it is the case, it is just an 
example), as long as Skia others you this possibility and run on both 
platforms, you can expose this capacity in your API
This is probably one of the reasons why Flutter was able to be develloped 
so quickly and why other Frameworks, like Xamarin, are moving in the same 
direction and now offer the possibility to use Skia (via SkiaSharp) as a 
rendering engine on most of its targeted platforms.   
 

On Thursday, September 27, 2018 at 6:47:30 AM UTC+2, Shai Almog wrote:
>
> Skia on iOS would be a lateral move as they don't work on top of metal. It 
> won't be an improvement. When we initially evaluated SKIA a few years ago 
> it was only a software renderer on Android and so it wasn't practical in 
> terms of performance. Adding the complexity of native component integration 
> would have made it even less desirable.
>
> FYI Apple deprecated OpenGL on iOS & Mac OS so the migration path is Metal.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/5a56b902-ed48-481f-b962-fb27d6414fa3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Multiple Form LayeredPanes and Layout animation issue

2018-09-27 Thread Thomas
Here is a video showing the issue:

https://streamable.com/lbd1b

and the source of this standalone test case:

https://github.com/ramsestom/CN1TestBugs


On Thursday, September 27, 2018 at 6:21:32 AM UTC+2, Shai Almog wrote:

> There are some edge cases in the paint order of overlays. If you can 
> isolate this into a standalone test case we can debug it.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/1b2d5ce8-6e72-4c07-82cb-e8656f65f924%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Multiple Form LayeredPanes and Layout animation issue

2018-09-26 Thread Thomas
I will try to create a standalone test case tomorrow. I tracked the issue 
down to the thisContainer.repaint(); call into 
the MorphAnimation updateState() function (If I commant this repaint, I do 
not see the component animation occur, of course, but the underlying 
layeredPane do not dissapear during the laps time of the animation) so I 
guess it has something to do with layeredPanes actually beeing on different 
branches of the components hierarchy (when a container is repainted, there 
is a recursive repaint call on its parents but has layered panes are not 
directly parents of one another, this might be the issue.) I'm too tired to 
analyze this correctly now though so I will have a look tomorrow ;)


On Thursday, September 27, 2018 at 6:21:32 AM UTC+2, Shai Almog wrote:

> There are some edge cases in the paint order of overlays. If you can 
> isolate this into a standalone test case we can debug it.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/7df02e00-8c1b-41dc-bd5c-fe85f62cb5e3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: considered improvment: custom border shape and border shadow

2018-09-26 Thread Thomas
In fact, the iOSImplementation could also be ported to SKIA as SKIA work 
well on iOS (Flutter is using SKIA on iOS for example). SKIA actually work 
on many platforms (it can also be used for desktop platforms)
As for the native component integration it would be a bit tricky I guess. 
It is possible though as Flutter now support Android native components into 
the Flutter rendering tree (that is handled by a SKIA rtree) but it is 
still WIP and the support of iOS native components into the Flutter 
rendering tree is expected in the next weeks (it would probably be ready 
for the official launch of Flutter out of the beta phase with Flutter 1.0 
before the end of the year I guess).
But using SKIA as an alternative rendering engine to native canvas APIs 
(currently used into varios CN1 platforms implémentations) is probably a 
lot of work even if it could be a nice option yes ;)


On Thursday, September 27, 2018 at 6:19:04 AM UTC+2, Shai Almog wrote:

> Correction, there weren't the last time I checked ;-)
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a194735c-ab5f-4e0e-aab5-00e5e05848de%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Multiple Form LayeredPanes and Layout animation issue

2018-09-26 Thread Thomas
I have an overlay component (actually a container) that is painted into the 
Form layeredPane (it is added to the LayeredPane returned by 
form.getFormLayeredPane(MyOverlay.class, true) where MyOverlay is the name 
of my class) and I have an interactionDialog (in formMode = true) that can 
be created by some action on my form and that will be rendered in front of 
my form and my overlay component.
The problem I have is that, when the interactionDialog is shown or disposed 
(when it grow or shrink), the overlay component disappear from the screen 
and reappear at the end of the animation.
If I set the interactionDialog to setAnimateShow(false), I don't have this 
issue (the overlay component do not seem to temporarilly disappear as I do 
not see any "blink" effect that may indicate it was removed for one frame)
So why is the animateUnlayoutAndWait() function of the Container class 
blocking the rendering of the form LayeredPanes (other than the one beeing 
animated) during the duration of the animation? This seems like a bug

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/01854c61-b366-42e4-aee1-96c9d45c063b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: considered improvment: custom border shape and border shadow

2018-09-26 Thread Thomas
I am interested in the possibility of doing anti-aliased (AA) shape 
clipping so I investigated a bit more and yes, some graphics libraries are 
able to perform AA shape clipping "efficiently" (it probably affect 
performances a bit compared to aliased shape clipping). For example SKIA, 
that serves as the graphic engine for Android and Flutter, has an AA 
argument for each of its clip methods 
(https://docs.microsoft.com/en-us/dotnet/api/skiasharp.skcanvas.clippath?view=skiasharp-1.60.3),
 
reason why Android and Flutter 
(https://docs.flutter.io/flutter/dart-ui/Canvas/clipPath.html) 
are both able to support AA clipping.
I just posted this FYI, to fill the gap in your familiarity, as supporting 
AA shape cliping on targets that do not support it nativelly (like JavaSE) 
is probably not possible at the CN1 level considering that CN1 relly on the 
graphic engine used by each platform and do not use its own like some other 
cross platforms frameworks do (like Skia for Flutter or Cairo for OpenFL). 



On Saturday, September 15, 2018 at 6:56:15 AM UTC+2, Shai Almog wrote:

> Shaped clipping is slow so the assumption is that it's used for a very 
> specific task and discarded back to regular rectangular clipping. So we 
> don't want code that would pass a shape clipped buffer around, unaware.
>
> We only support aliased shaped clipping at this time. Swing doesn't 
> support anti-aliased shaped clipping as far as I know as a clip is a binary 
> operation there. We use OpenGL for the rendering on iOS not the builtin 
> drawing primitives. I'm unfamiliar with an efficient anti-aliased shaped 
> clip although that might be a gap in my familiarity.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/3d6a19af-d207-4f5a-9ded-7829ebf5cca3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: dash effect

2018-09-25 Thread Thomas
Unfortunatly the CN1 Stroke do not support dash patterns. 
So unless your path is really basic (like a rectangle or a few straight 
lines), in which case you can probably paint the dash effect "by hand", 
(this is the approach used to render dashed components borders in CN1), it 
would be quite difficult.


On Tuesday, September 25, 2018 at 7:35:22 PM UTC+2, mygu...@gmail.com wrote:

> I would like to know if I can make an effect similar to what the 
> DashPathEffect object does in Android.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/de4b7acb-9dec-47c9-9845-89a0c0515879%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: device rotation

2018-09-25 Thread Thomas
What I am saying is that a good support of low level graphic is usually 
necessary to be able to build high level stuff (=components) that are 
appealing. 
For instance, if I take the example of an OnOffSwitch component, even if it 
is quite a simple component in its composition (it is just two elements: a 
track and a thumb), if you want to apply some transparency to the global 
component, you need to support porter-duff alpha composing operations. 
Indeed, if you draw a semi-transparent thumb on top of a semi-transparent 
track, with the default "src-over" operation, you will see the track under 
the thumb. So you need to support the "src" operation so that, when 
painting the tumb, the track behind would be erased by the pixels of the 
thumb covering it. This is just an example and the support of porter-duff 
operations can be really usefull when you start to compose components a bit 
complex.
So, OK, spending time improving the low level graphics may not seem a 
priority for the default CN1 user/client but I think it is worth it. The 
time you would have spent developping support of low level graphics would 
be rewarded a 100 times when you will developp higner level stuff (by 
easing the devlopement of complex components or alowing you to implement 
subtle graphic rendering that makes all the difference). The support of low 
level graphics can even have direct benefit to the standard CN1 user like 
the case of color transforms that I mentionned previously (beeing able to 
have all the icons of your app as greyscale image assets and to color them 
on the fly to match your theme is really convenient and much more poverfull 
than the support of fontimages that users already took as a great step 
forward I think)
As for the impact of low level stuff on the CN1 traction, I think you are 
underestimating it. Experienced developpers that might be attracted to try 
CN1 probably don't take the plunge because they saw UI capabilities of CN1 
are quite limited compared to the alternatives for the moment. As for 
default users, they are probably mostly convinced by the showcase section 
of a Framework. They mostly base their choice on the "Wow" effect of the 
few apps they may have seen developped with this Framework (even if they 
don't necessarily need to achieve the same UI level in their app). So you 
just need a few developpers using the full capabilities of your Framework 
to create beautifull apps to gain a lot of traction. But like I already 
said, it is really difficult if the set of Tools at their disposal is 
limited ;)
Bytheway, apps are using more and more graphical effects that where 
previously only used in games (2.5D for components with light effects and 
shape/color transform animations, 3D for augmented reality, non rectangular 
components with custom shape clipping and so on...) so closing the gap 
beetwin game developpement frameworks and app oriented frameworks in terms 
of low level graphics support make a lot of sense in my opinion
In what concerns porter-duff most speciffically, fully supporting it might 
not even be that complicated. Most targeted platforms already support it 
natively (Android, IOS, HTML/javascript: 
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
 
(even if I didn't implemented it yet personally as I don't target 
javascript)) and the most problematic target is actually JavaSE wich has a 
limited support with AlphaComposite on awt graphics (but that requiere the 
graphics to use ARGB color encoding which isn't the encoding used by 
default). But libGDX (yes I know it is a gaming Framework ;) ), which 
target the same platforms as CN1 has a full support for it so it must be 
possible.



 



On Tuesday, September 25, 2018 at 7:30:14 AM UTC+2, Shai Almog wrote:

> What I'm saying is that this doesn't get tested because these features are 
> used mostly for things like transitions in "non-gaming" cases. If you don't 
> use the component model you are walking a path that most of the existing 
> users don't tread so you'll run into bugs.
>
> When I said UI I meant good design by default. Mostly high level stuff 
> such as the Picker component, on-off-switch and default native themes. 
> While I agree it's nice to have good low level graphics I don't agree that 
> this is a high priority. If I'd invest time in low level graphics I'd 
> invest it in a Metal rewrite of the OpenGL iOS code, not in additional 
> features. Either way none of this is something that's actively keeping 
> users away. The look & feel of the default applications/builtin widgets is 
> something that impacts our traction far more than low level stuff.
>
> I think porter duff would be nice, but we need to run on iOS, Android, 
> JavaSE, UWP & JavaScript. And still be performant... Since modern UI's are 
> mostly flat and "simple" I'm not sure how important that would be for the 
> typical developer using the system. Something far more important would be

[codenameone-discussions] Re: OnOffSwitch Problems

2018-09-24 Thread Thomas
I have the code for an OnOffSwitch component with a material design style 
by default. It is not polished yet (It is part of a larger components 
collection that I still regularly modify when I need a new functionnality 
or find a bug) but I can share the code as a starting point for your 
rewrite if you want to.

On Saturday, September 22, 2018 at 6:09:58 AM UTC+2, Shai Almog wrote:
>
> Yes it's on our top list of components to rewrite. Feel free to file an 
> issue as I don't think we have an open issue on that.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/8592c4bd-c14d-4bd4-86a2-7d13b324c6a1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Question regarding the order of events in the EDT

2018-09-24 Thread Thomas
I took a closer look at how CN1 is handeling pointer events and I must say 
it is kind of a mess. 
Most of this is explained by the fact that the pointer events logic is 
directly merged into the Form, Container and Component classes (rather than 
having a dedicated general pointer events controller, with all the logic on 
a single point, wich is good coding practice and avoid logic 
inconsistencies that seems to occur in the current implementation, as 
component in the background beeing returned instead of the frontmost one 
when the frontmost focusable component is a container inside an other 
container alowing layout overlay or the getComponentAt() method beeing 
unecessarilly called twice, in the case of a pointerPressed call on a 
container...). 
Also, it appears that the pointer listeners of a Form would always be 
called in the case of a pointer event as the call of these listeners appear 
before dispatching the pointer event to the front most focusable component. 
So, in fact, in the CN1 logic, if seems that, if you have a form F 
containing a focusable container Cc, containing a focusable component Co, a 
touch on Co would first trigger a PointerPressed event on 
the PointerPressedLiteners of F and then a PointerPressed event on the 
PointerPressedLiteners 
of Co (and PointerPressedLiteners of Cc would never be called). And theses 
two events would be distinct meaning that consuming the event triggered by 
the Form would not affect the event triggered by the component Co
In my point of view, this is not how pointer events should be handled and a 
real events bubbling approach would be preferable (or, even better, an 
hybrid approach). And unlike you may say, this do not specifically affect 
performances. After all, Android, iOS and Flutter are all examples of 
lightweighted frameworks implementing events bubbling (and web frameworks, 
that I cited as example of hybrid approaches, may be "slow", but it is 
unrealated to the way they handle touch events). 
In a correctly implemented bubbling approach, the event propagation phase 
is distinct from the event reaction phase (where the event would be passed 
to event listeners). And, by default, the event reaction phase usually 
stops after the first component that notifies beeing interested into this 
event (so events are not sent to every parent of the hierarchy, like you 
say, thus performances are kept intact.) BUT it can also continue to 
dispatch the event to the parent if the developper decided to implement a 
component that shouldn't block dispatching the event to its parent after 
reacting to it. For example, this is how it is implemented in Android: 
 http://codetheory.in/understanding-android-input-touch-events/ 
This alows to easily implement some UI like blocking (where a touch the 
parent would have no effect) or non-blocking (where the parent would remain 
interactive) modals, drawers, user inactivity tracker...
And no, I am not implementing a game but I am implementing some generic UI 
components (like a drawer (~= side-menu) that I can add to any component 
(not just a Form)) and the lack of possibility to dispatch pointer events 
to more than one layer of the components hierarchy in some cases, 
complicates the creation of such components when it should be (and would be 
with a native lightweighted framework) straightforward ...


On Saturday, September 22, 2018 at 6:18:59 AM UTC+2, Shai Almog wrote:

> I was talking about events being handled at the top since they arrive from 
> the canvas so I'm not wrong about that as that's literally the definition 
> of lightweight implementation. Every implementation needs to go from root 
> to child to find the child. 
>
> Sending events to every parent in the hierarchy has no valuable use case 
> and can impact performance on large layouts. If you want to listen to an 
> event or broadcast it you can do so easily. However, if we implemented 
> something like that people will always pay the performance penalty whether 
> they want to or not. 
>
> Web isn't a lightweight framework. It's a great example of SLOW because of 
> various decisions e.g. automatic reflow and generic events. This makes a 
> lot of sense for a high level scripting language but not for performance.
>
> You wrote a lot but didn't mention a single programmer visible benefit for 
> slowing everything considerably...
>
> Events go to the top most focusable component. You can disable 
> focusability and use features such as lead component to implement typical 
> use cases. If you are building a game where you need to handle complex 
> event logic overriding the event handling at the form level makes the most 
> sense anyway.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/

[codenameone-discussions] Re: device rotation

2018-09-24 Thread Thomas
Too be fair, a good support of graphics transforms and operations are keys 
to allow the creation of beautifull GUI. This is not restricted to gaming 
platforms. If you want to implement the material design specifications for 
example, you need a good graphic transform support for animations, blending 
mode support for correct components overlay and so on. That is why I 
started implementing blending modes (= porter-duff) support in my fork 
(https://github.com/ramsestom/CodenameOne) and I also intend to support 
color transforms soon (as it is a really powerfull way to handle colored 
icons and images, that can automatically adapt to a theme, without having 
to transform them into fonts or to create multiple colored version of the 
same image...)
You said improving the CN1 UI part is on your top priority list. Then, I 
really think you should start with a strong support of "basic" graphics 
operations as they are the basis of any UI. As, I would say, as talented as 
you can be, it is easier to build a beautifull furniture when you have the 
correct set of tools than with only a knife and a hammer... ;)


On Monday, September 24, 2018 at 6:28:52 AM UTC+2, Shai Almog wrote:

> How many transforms would we need for a tool for app development?
> As I said to you multiple times before we didn't design this as a gaming 
> platform.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/f2107c10-d09c-4a7e-b140-d4d82a85fb80%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Question regarding the order of events in the EDT

2018-09-21 Thread Thomas
You are wrong. All recents major ligthweighted frameworks support "events 
bubbling" (where events are passed from child to parent, as opposed to 
"events capturing" or "trickling", where event is passed from parent to 
child).  Flutter for example takes this approch (events are dispached by 
bubbling). The reason for that is that you may pay a really small 
performance price and events handling may be a bit more complicated 
internally, but the advantages for the developper are worth it. Indeed, 
when a user interact with your app, he naturally expects to interact with 
the element that is closest to him (= with the highest z-order). So if, in 
your app, you have a button over a lightweighted interactive map where you 
can add a marker on tap for example, the user naturally expect a tap on the 
button to trigger that button action and not to add a marker below that 
button on the map... With events bubbling, handeling this type of common 
use cases is straightforward.
As for having "one point where you can override the pointer behavior for 
everyone", with the bubbling approch, you just have to add a transparent 
component over all the others you want to override the pointer behavior 
for. As this transparent component covers all your other components (or 
just a specific zone of your screen if you want to), it would be called 
first durring the bubbling events dispatch phase so you can override the 
pointer behaviour from here...
But in some edge cases, it is true that events capturing might be a lighter 
approach (if you have a really complex components structure, events 
bubbling might affect your performances on low-end devices, even if I doubt 
it would be perceptible...). For this reason, most frameworks actually 
chose to use an hybrid approach. This is the case for example for flash AS3 
(https://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html) 
or HTML/javascript since the WC3 spécifications 
(http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-flow-basic)
 
(old versions of internet explorer (<9) only supported events bubbling). 
This is the approach that I prefer and that I intend to implement into my 
CN1 Fork (and that you should probably implement into CN1). In this 
approach, there is first a Capturing phase followed by a Bubbling phase. So 
each component actually receive the event twice.
How I see it implemented into CN1:
 - during the capturing phase, the event object stores the components it 
pass through and call them in reverse order during the bubbling phase
 -  an event can have two states that are passed as arguments to the events 
listeners (or that can be called as event object methods isCapturing() or 
isBubbling()) so that a component event listener knows if it has to treat 
this event or to ignore it (as, by default, it might receive it twice, once 
on each phase)
- events can be consumed (in wich case they immediatly stop capturing and 
bubbling), stopCapturing (they would still go down (from parent to child) 
the components list to be able to perform the bubbling phase but won't call 
components event listeners during this capturing phase) or stopBubbling 
(they would stop the bubbling phase) and every of these methods (with their 
startCapturing() and startBubbling() counterpart) can be called at any 
point during the event propagation (for example if you call stopBubbling() 
from inside an event listener during the capturing phase, the capturing 
phase would continue and the event propagation would stop when it reach the 
start of the bubbling phase (unless startBubbling() has been called in the 
meantime)). 

Bytheway, you didn't answer my question on the first post on how to 
prevent, with the current CN1 implementation, a pointer event on a screen 
zone where a button B1 covers another larger button B2 to trigger B2 action 
for example...?


On Friday, September 21, 2018 at 6:52:52 AM UTC+2, Shai Almog wrote:

> No. All lightweight frameworks start from the root frame or parent.
>
> This is the most efficient and most sensible way to do this in a 
> lightweight framework. You might be thinking of a heavyweight framework 
> where the components are outside of the control of the framework and thus 
> they are responsible for handling their own events. But if you look at the 
> OS implementation and other lightweight frameworks you'll see that our 
> implementation is how things actually work because it's the one that makes 
> sense.
>
> Here's why:
>
> - You have one point where you can override the pointer behavior for 
> everyone - the form this is very useful
> - You don't pay the cost of going through all the components to process 
> the event logic if you do this
>
> Notice that the OS doesn't know about our components it just sends a 
> pointer event. "Someone" needs to find the component to process, that code 
> is in Form. If you override pointer handling there you effectively save us 
> the cost of walking the compo

[codenameone-discussions] Re: Question regarding the order of events in the EDT

2018-09-20 Thread Thomas
I see. So events are dispatched in the direction parent -> child rather 
than beeing child -> parent. 
That seems pretty illogic and useless to be able to consume an event in 
that case. Usually you consume an event so it isn't passed from a child 
component to its parent because the child, which is closest to the screen 
(in z dimension), already has reacted to the user interaction... 
This is how every other Framework that I have tested and used so far works 
(they dispatch events from the innermost compenent in the component's 
hierarchy up to the root (=the last ancestor, that would be the Form in 
CN1)).
So, in CN1, how do I prevent an event from beeing used by an interactive 
component when the interaction was supposed to be on one of its childs? 
(for example if I have a button B over a larger component P that can also 
react to clicks, how do I prevent P to react to a click that would happen 
in the zone of B ?)


On Thursday, September 20, 2018 at 9:01:49 AM UTC+2, Shai Almog wrote:

> All events reach the form first. It dispatches them onward. 
>
>
>- Form callback methods (pointerPressed/Released etc.)
>- Form listener methods
>- Focused component (except for drag which is a bit of a special case)
>
> We don't send events to all the components in the hierarchy except for the 
> special case of drag where events are handled a bit differently.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/50d5924b-e455-4639-96e5-e8a02ecd0659%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: How can i grab the maximal size for a label in a gridlayout

2018-09-20 Thread Thomas
use a TableLayout and give the second column a width of -2 (to make it take 
all the available remaining space)

On Thursday, September 20, 2018 at 10:00:42 AM UTC+2, 
tobias...@googlemail.com wrote:
>
> Hi,
>
> I have a gridlayout with 4 components. The 1st, the 3rd and the 4th are 
> images with a given size. Now i want to have a label on 2nd place which 
> fills the size, so the 3rd and 4th Component in the grid will be as right 
> as possible.
>
> Thanks for helping.
> Tobias
>
>
> If you are experiencing an issue please mention the full platform your 
> issue applies to:
> IDE: Eclipse
> Windows
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/065a83de-8f56-446a-8111-d8fbf3e5e937%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Question regarding the order of events in the EDT

2018-09-19 Thread Thomas
In what order are events dispatched by the EDT in the component hierarchy?
The logic would be that events are dispatched from the component with the 
highest Z-order (the one "closest" to the screen and thus the user) up to 
the one witht the lowest Z-oder (the root form). But it doesn't seems to be 
the case. 
For example for a pointerPressed event, if I consume it at the form level, 
the components that are drawn in the layeredPane of this form never gets it 
(whereas they do if I do not consume it) whereas they are drawn in front of 
the form (= they have a higher z-order) and thus should receive the event 
before it reach the form (and gets consumed)...

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/da741db1-cfc5-4e3f-a3e8-2d34c3bf623a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: considered improvment: custom border shape and border shadow

2018-09-14 Thread Thomas
I thought shape clipping with anti-aliasing was supported natively by ios 
and android (since android 4.4 or so) at least.
And what is the problem with adding a getClipShape() method exatly? if 
there is a setClip(Shape) method, it makes sense to have the counterpart 
getClipShape() 
method to know what is the current clipping applied... So it would be nice 
to have a getClipShape() method that returns a Rectangle shape if the 
current clipping is a rectangle and a GeneralPath Shape if it is another 
shape...


On Wednesday, September 12, 2018 at 5:41:38 AM UTC+2, Shai Almog wrote:

> Shaped clipping should work everywhere but the problem with it is 
> aliasing. It's inherently aliased so simple backgrounds look horrible. We 
> only use it for fallbacks. You can use the sample in RoundRectBorder to see 
> how we used shaped clipping as fallback.
> There is a problem with adding a getClip() generally we recommend 
> restoring the clip to the standard rectangle clipping.
>
> Alpha isn't enough for shadow effect, see the round rect border. We use a 
> gradient and blur effect to produce a shadow.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/af1a1901-b74f-4fa8-b90f-127d7dd7863a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] considered improvment: custom border shape and border shadow

2018-09-11 Thread Thomas
I am planning to modify the CN1 core code to allow components to have any 
custom shape boder and to be able to drop a shadow based on their elevation 
value (like in material design). But this raised a few question. First of 
all, to do this correctly, and with good performances, I must be able to 
perform shape clipping. I have seen that CN1 already supports shape 
clipping on some platforms but couldn't find the current list of these 
supported platforms. Would it be possible to know which platforms are 
currently supporting shapeClipping? (I have seen that CN1 on iOS had issues 
with shape clipping. Has this been resolved? Also is the CSS clip-path 
method supported for javascript target? )
Also, the Graphics class has a setClip(Shape) method but no Shape getClip() 
counterpart. Is this due to technical issues or has it just not be 
implemented? (because I need to be able to save the current shape clipping 
applied to a graphics before painting a child component/container and then 
restore the original clipping)
Finally, do you think that changing the alpha of the graphics  and drawing 
the shape path with a dark faiding color (and an increasing offsset) 2 to 
10 times (probably won't be more) into the paint method would cost 
performance overhead? (I may use this as a first approch (even if not 
prefect) to draw my shadow as using a bluring algorithm on the black filled 
shape would probably cost too much and request some image caching which I 
may implement latter)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/4eb109f0-76fe-441b-a08c-69df4e965ea7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [codenameone-discussions] Re: javascriptContext issue on android

2018-09-04 Thread Thomas
Just checked and it is working now. Thanks for this quick fix steve

On Wednesday, September 5, 2018 at 1:29:31 AM UTC+2, Steve Hannah wrote:
>
> This is fixed now in git.  
> https://github.com/codenameone/CodenameOne/commit/8927c64972a0f1c838b4401b1bdf475b2560abc6
>
> It will be included in next update on Friday.
>
> Best regards
>
> Steve
>
> On Tue, Sep 4, 2018 at 4:00 PM, Steve Hannah  > wrote:
>
>> Thanks.  I should have a fix for this shortly.
>>
>> On Tue, Sep 4, 2018 at 3:30 PM, Thomas 
>> > wrote:
>>
>>> OK. I was able to track down the issue. It appears that the 
>>> android.webview.chromium 
>>> previously-failed class messages in logcat where actually unrelated to 
>>> my problem (the also appear in my working test cases). Actually, the issue 
>>> is that it seems that now, on android, a BrowserComponent can no longer be 
>>> used or controlled (to execute some js code) if not displayed. In the 
>>> simulator this is not the case (the BrowserComponent can still be used if 
>>> not displayed). I don't know if this is the garbage collector that acts 
>>> differently on android and on the simulator or if this is some other code 
>>> in the CN1 code that triggered this change but this is a real issue in my 
>>> test case. Actually, I am using a BrowserComponent to control a socketio 
>>> connection with my server (that is used during the whole life time of my 
>>> app). With the new BrowserComponent behaviour, this is no longer possible...
>>> I updated my SocketIOTest test case (
>>> https://github.com/ramsestom/CN1SocketIO_test) to test for this issue. 
>>> If I have the line
>>>
>>> hi.add(BorderLayout.CENTER, browser);
>>>
>>> in my main MyAppplication class, everything is working. But If I comment 
>>> it (so the BrowserComponent handeling the socketio connection is no 
>>> longer displayed), the socketio connection do not work anymore (and if I 
>>> have a logger in my BrowserComponent it would fail with a null message like 
>>> in my first post).
>>> Would it be possible to reverse the BrowserComponent behaviour back to 
>>> what it was a few weeks ago so that it can be used to execute js code in 
>>> background on any platform supporting it?
>>> Thanks
>>>  
>>>
>>> On Tuesday, September 4, 2018 at 6:42:46 PM UTC+2, Steve Hannah wrote:
>>>
>>>> A self-contained test case always helps.  In any case, please file an 
>>>> issue in the issue tracker so this doesn't get lost.
>>>>
>>>> On Tue, Sep 4, 2018 at 9:32 AM, Thomas  wrote:
>>>>
>>>>> Actually, the issue seems to be related to webview that fails to be 
>>>>> loaded on my android device using CN1. 
>>>>> I commented the logger part in my code and my app still doesn't work 
>>>>> properly on my android device with this kind of message in the debugger 
>>>>> logcat:
>>>>>
>>>>> I/WebViewFactory: Loading com.google.android.webview version 
>>>>> 68.0.3440.91 (code 344009150)
>>>>> I/art: Rejecting re-init on previously-failed class 
>>>>> java.lang.Class
>>>>>Rejecting re-init on previously-failed class 
>>>>> java.lang.Class
>>>>> I/art: Rejecting re-init on previously-failed class 
>>>>> java.lang.Class
>>>>>Rejecting re-init on previously-failed class 
>>>>> java.lang.Class
>>>>> I/cr_LibraryLoader: Time to load native libraries: 1 ms (timestamps 
>>>>> 8819-8820)
>>>>> E/cr_VariationsUtils: Failed reading seed file 
>>>>> "/data/data/org.tbdlab.myapp/app_webview/variations_seed_new": 
>>>>> /data/data/org.tbdlab.myapp/app_webview/variations_seed_new: open 
>>>>> failed: ENOENT (No such file or directory)
>>>>>   Failed reading seed file "/data/data/org.tbdlab.
>>>>> myapp/app_webview/variations_seed": 
>>>>> /data/data/org.tbdlab.myapp/app_webview/variations_seed: 
>>>>> open failed: ENOENT (No such file or directory)
>>>>> I/chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging 
>>>>> enabled: level = 0, default verbosity = 0
>>>>> I/cr_LibraryLoader: Expected native library version number 
>>>>> "68.0.3440.91", actual native library version number "68.0.3440.91"
>>>>&g

Re: [codenameone-discussions] Re: javascriptContext issue on android

2018-09-04 Thread Thomas
OK. I was able to track down the issue. It appears that the 
android.webview.chromium 
previously-failed class messages in logcat where actually unrelated to my 
problem (the also appear in my working test cases). Actually, the issue is 
that it seems that now, on android, a BrowserComponent can no longer be 
used or controlled (to execute some js code) if not displayed. In the 
simulator this is not the case (the BrowserComponent can still be used if 
not displayed). I don't know if this is the garbage collector that acts 
differently on android and on the simulator or if this is some other code 
in the CN1 code that triggered this change but this is a real issue in my 
test case. Actually, I am using a BrowserComponent to control a socketio 
connection with my server (that is used during the whole life time of my 
app). With the new BrowserComponent behaviour, this is no longer possible...
I updated my SocketIOTest test case 
(https://github.com/ramsestom/CN1SocketIO_test) to test for this issue. If 
I have the line

hi.add(BorderLayout.CENTER, browser);

in my main MyAppplication class, everything is working. But If I comment it 
(so the BrowserComponent handeling the socketio connection is no longer 
displayed), the socketio connection do not work anymore (and if I have a 
logger in my BrowserComponent it would fail with a null message like in my 
first post).
Would it be possible to reverse the BrowserComponent behaviour back to what 
it was a few weeks ago so that it can be used to execute js code in 
background on any platform supporting it?
Thanks
 

On Tuesday, September 4, 2018 at 6:42:46 PM UTC+2, Steve Hannah wrote:

> A self-contained test case always helps.  In any case, please file an 
> issue in the issue tracker so this doesn't get lost.
>
> On Tue, Sep 4, 2018 at 9:32 AM, Thomas > 
> wrote:
>
>> Actually, the issue seems to be related to webview that fails to be 
>> loaded on my android device using CN1. 
>> I commented the logger part in my code and my app still doesn't work 
>> properly on my android device with this kind of message in the debugger 
>> logcat:
>>
>> I/WebViewFactory: Loading com.google.android.webview version 68.0.3440.91 
>> (code 344009150)
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/cr_LibraryLoader: Time to load native libraries: 1 ms (timestamps 
>> 8819-8820)
>> E/cr_VariationsUtils: Failed reading seed file 
>> "/data/data/org.tbdlab.myapp/app_webview/variations_seed_new": 
>> /data/data/org.tbdlab.myapp/app_webview/variations_seed_new: open 
>> failed: ENOENT (No such file or directory)
>>   Failed reading seed file "/data/data/org.tbdlab.
>> myapp/app_webview/variations_seed": 
>> /data/data/org.tbdlab.myapp/app_webview/variations_seed: 
>> open failed: ENOENT (No such file or directory)
>> I/chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging enabled: 
>> level = 0, default verbosity = 0
>> I/cr_LibraryLoader: Expected native library version number 
>> "68.0.3440.91", actual native library version number "68.0.3440.91"
>> I/cr_BrowserStartup: Initializing chromium process, singleProcess=true
>> I/cr_base: Android Locale: en_US requires .pak files: []
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>
>>
>> my android test device is using android 5.1.1 and has the latest chromium 
>> vebview version available for this device (I checked on the playstore).
>> So I don't know if this issue was triggered by changes you made in CN1 
>> that may have broke compatibility with some versions of android/webview or 
>> if this is the latest vebview version that is bugged (my device may have 
>> performed an autoupdate of webview chromium since last month)
>> I can probably make you a self-contained test case if necessary but I am 
>> not sure it would help as the issue seems to be with webview that can not 
>> load (so just trying to open a componentbrowser using webview might be 
>

Re: [codenameone-discussions] Re: javascriptContext issue on android

2018-09-04 Thread Thomas
OK I will prepare a small test case and investigate a bit more on this 
issue on the same time. Will keep you posted

On Tuesday, September 4, 2018 at 6:42:46 PM UTC+2, Steve Hannah wrote:
>
> A self-contained test case always helps.  In any case, please file an 
> issue in the issue tracker so this doesn't get lost.
>
> On Tue, Sep 4, 2018 at 9:32 AM, Thomas > 
> wrote:
>
>> Actually, the issue seems to be related to webview that fails to be 
>> loaded on my android device using CN1. 
>> I commented the logger part in my code and my app still doesn't work 
>> properly on my android device with this kind of message in the debugger 
>> logcat:
>>
>> I/WebViewFactory: Loading com.google.android.webview version 68.0.3440.91 
>> (code 344009150)
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/cr_LibraryLoader: Time to load native libraries: 1 ms (timestamps 
>> 8819-8820)
>> E/cr_VariationsUtils: Failed reading seed file 
>> "/data/data/org.tbdlab.myapp/app_webview/variations_seed_new": 
>> /data/data/org.tbdlab.myapp/app_webview/variations_seed_new: open 
>> failed: ENOENT (No such file or directory)
>>   Failed reading seed file "/data/data/org.tbdlab.
>> myapp/app_webview/variations_seed": 
>> /data/data/org.tbdlab.myapp/app_webview/variations_seed: 
>> open failed: ENOENT (No such file or directory)
>> I/chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging enabled: 
>> level = 0, default verbosity = 0
>> I/cr_LibraryLoader: Expected native library version number 
>> "68.0.3440.91", actual native library version number "68.0.3440.91"
>> I/cr_BrowserStartup: Initializing chromium process, singleProcess=true
>> I/cr_base: Android Locale: en_US requires .pak files: []
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>> I/art: Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>Rejecting re-init on previously-failed class 
>> java.lang.Class
>>
>>
>> my android test device is using android 5.1.1 and has the latest chromium 
>> vebview version available for this device (I checked on the playstore).
>> So I don't know if this issue was triggered by changes you made in CN1 
>> that may have broke compatibility with some versions of android/webview or 
>> if this is the latest vebview version that is bugged (my device may have 
>> performed an autoupdate of webview chromium since last month)
>> I can probably make you a self-contained test case if necessary but I am 
>> not sure it would help as the issue seems to be with webview that can not 
>> load (so just trying to open a componentbrowser using webview might be 
>> enaugh as a test)
>> What version of vebview runs on your Nexus 5. Is it the latest one?
>>
>>
>>
>>
>> On Tuesday, September 4, 2018 at 2:15:09 PM UTC+2, Steve Hannah wrote:
>>
>>> I just copied and pasted your sample into my own test case and it works 
>>> fine in Android 6 on Nexus 5.  What version of Android are you using?  Can 
>>> you provide a self-contained test case that will reproduce it?
>>>
>>> On Mon, Sep 3, 2018 at 10:50 PM, Shai Almog  wrote:
>>>
>>>> Steve made some performance improvements to JS interconnect which might 
>>>> have triggered a race condition. We'll look into it.
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "CodenameOne Discussions" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to codenameone-discussions+unsubscr...@googlegroups.com.
>>>> Visit this group at 
>>>> https://groups.google.com/group/codenameone-discussions.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/codenameone-discussions/399db7a2-33a8-451d-b788-504b0d86ab92%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/

Re: [codenameone-discussions] Re: javascriptContext issue on android

2018-09-04 Thread Thomas
Actually, the issue seems to be related to webview that fails to be loaded 
on my android device using CN1. 
I commented the logger part in my code and my app still doesn't work 
properly on my android device with this kind of message in the debugger 
logcat:

I/WebViewFactory: Loading com.google.android.webview version 68.0.3440.91 
(code 344009150)
I/art: Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class
I/art: Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class
I/cr_LibraryLoader: Time to load native libraries: 1 ms (timestamps 
8819-8820)
E/cr_VariationsUtils: Failed reading seed file 
"/data/data/org.tbdlab.myapp/app_webview/variations_seed_new": 
/data/data/org.tbdlab.myapp/app_webview/variations_seed_new: open failed: 
ENOENT (No such file or directory)
  Failed reading seed file 
"/data/data/org.tbdlab.myapp/app_webview/variations_seed": 
/data/data/org.tbdlab.myapp/app_webview/variations_seed: open failed: 
ENOENT (No such file or directory)
I/chromium: [INFO:library_loader_hooks.cc(36)] Chromium logging enabled: 
level = 0, default verbosity = 0
I/cr_LibraryLoader: Expected native library version number "68.0.3440.91", 
actual native library version number "68.0.3440.91"
I/cr_BrowserStartup: Initializing chromium process, singleProcess=true
I/cr_base: Android Locale: en_US requires .pak files: []
I/art: Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class
I/art: Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class
   Rejecting re-init on previously-failed class 
java.lang.Class


my android test device is using android 5.1.1 and has the latest chromium 
vebview version available for this device (I checked on the playstore).
So I don't know if this issue was triggered by changes you made in CN1 that 
may have broke compatibility with some versions of android/webview or if 
this is the latest vebview version that is bugged (my device may have 
performed an autoupdate of webview chromium since last month)
I can probably make you a self-contained test case if necessary but I am 
not sure it would help as the issue seems to be with webview that can not 
load (so just trying to open a componentbrowser using webview might be 
enaugh as a test)
What version of vebview runs on your Nexus 5. Is it the latest one?




On Tuesday, September 4, 2018 at 2:15:09 PM UTC+2, Steve Hannah wrote:

> I just copied and pasted your sample into my own test case and it works 
> fine in Android 6 on Nexus 5.  What version of Android are you using?  Can 
> you provide a self-contained test case that will reproduce it?
>
> On Mon, Sep 3, 2018 at 10:50 PM, Shai Almog  > wrote:
>
>> Steve made some performance improvements to JS interconnect which might 
>> have triggered a race condition. We'll look into it.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "CodenameOne Discussions" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to codenameone-discussions+unsubscr...@googlegroups.com 
>> .
>> Visit this group at 
>> https://groups.google.com/group/codenameone-discussions.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/codenameone-discussions/399db7a2-33a8-451d-b788-504b0d86ab92%40googlegroups.com
>>  
>> 
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Steve Hannah
> Software Developer
> Codename One
> http://www.codenameone.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/38d0a677-a0bc-42c4-9b0e-001fe5ad0f68%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] javascriptContext issue on android

2018-09-03 Thread Thomas
I am using the deprecated JavascriptContext class to create a logger Inside 
a BrowserComponent like this:

JavascriptContext ctx = new JavascriptContext(internalBrowser);
  JSObject logger = (JSObject)ctx.get("{}");
  logger.set("log", new JSFunction() {
   public void apply(JSObject self, Object[] args) {
String msg = (String)args[0];
Log.p("[Javascript Logger] "+msg);
   }
  });
  ctx.set("window.logger", logger);

this used to work fine (the same code from worked fine a month ago), but 
suddently, it stopped working (and crash my app) on android where it 
returns the error:

W/System.err: java.lang.NullPointerException: Attempt to invoke virtual 
method 'void com.codename1.javascript.JSObject.set(java.lang.String, 
java.lang.Object)' on a null object reference
at 
org.tbdlab.myapp.socketio.SocketIO$1.actionPerformed(SocketIO.java:75)
at com.codename1.ui.util.EventDispatcher.fireActionSync(Unknown 
Source)
at com.codename1.ui.util.EventDispatcher.access$100(Unknown Source)
at com.codename1.ui.util.EventDispatcher$CallbackClass.run(Unknown 
Source)
at com.codename1.ui.Display.processSerialCalls(Unknown Source)
at com.codename1.ui.Display.edtLoopImpl(Unknown Source)
at com.codename1.ui.Display.mainEDTLoop(Unknown Source)
at com.codename1.ui.RunnableWrapper.run(Unknown Source)
at com.codename1.impl.CodenameOneThread$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:818)

meaning that the JSObject logger is null. On the simulator it is still 
working though.
Any idea of what change in CN1 may have caused this issue ? And what is the 
recommanded solution to create a logger in a BrowserComponent (to log js 
issues) now (without the deprecated JavascriptContext and JSObject classes?)


-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/c109ea29-9570-4ae1-ab1a-eb78f4299028%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: issue with container dimensions when using a tablelayout inside multiple others layouts

2018-08-29 Thread Thomas
What I am trying to achieve is this:

[image: layout_scheme.jpg] 

where C1b is a component that should have its prefered size and C1 should 
take the rest of the remaining width (I use the constraint width=-2 for the 
last column of the table so it extends to take all the parent width). The 
problem is that, for now, it do not work as with this hierarchy C1 do not 
take into account the parent actual width (it extends to its prefered 
width, not its actual width))
So here is what I have for now:

[image: layout_scheme_real.jpg] 
 



On Wednesday, August 29, 2018 at 8:17:55 AM UTC+2, Shai Almog wrote:

> Border layout south gives the component the full width.
>
> Box Layout X gives components their preferred size on the X axis. So does 
> flow layout. I don't understand what you are trying to accomplish in terms 
> of the UI. If you have a picture of the design you are trying to accomplish 
> I can provide a recommendation. This is just a bit hard to visualize.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/a62908ec-c5c2-4eec-ab2a-f505a73e5359%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] issue with container dimensions when using a tablelayout inside multiple others layouts

2018-08-28 Thread Thomas
I have a container C1 with a tablelayout that is inside another container 
C0 using a borderlayout.(container C0 cover all the screen and C1 is its 
unique child, positionned at south). As long as I use it like this, this is 
ok, the container C1 has the same width as container C0 (= the width of the 
screen)
If I look at the component inspector in the simulator I have:
C0 (BorderLayout):
  Coordinates: x: 0 y: 0 absX: 0 absY: 151 Width: 640 Height: 985
  Prefered Size:  360, 207
C1 (TableLayout):
  Constraint:South
  Coordinates: x: 0 y: 778 absX: 0 absY: 929 Width: 640 Height: 207
  Prefered Size:  360, 207

But if I add a new container C2, between C0 and C1  (So C2 is the unique 
child of C0 and C1 is the unique child of C2)  using a Flowlayout or 
Boxlayout.X, the width of C1 is no longer the one of the screen
Here is the dimensions returned in the component inspector:
C0 (BorderLayout):
  Coordinates: x: 0 y: 0 absX: 0 absY: 151 Width: 640 Height: 985
  Prefered Size:  360, 207
C2 (BoxLayout.X_AXIS):
  Constraint:South
  Coordinates: x: 0 y: 778 absX: 0 absY: 929 Width: 640 Height: 207
  Prefered Size:  360, 207
C1 (TableLayout):
  Coordinates: x: 0 y: 0 absX: 0 absY: 929 Width: 360 Height: 207
  Prefered Size:  360, 207

How can make C1 to have the same width as its parent container (C2) in the 
second case (in the end, I would like to add another component C1b before 
C1 and have C1 to take all the remaining width but it doesn't work as, even 
with C1 as unique child of C2, it doesn't take all the available parent 
(C2) width))

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/7a17b2ba-dede-4a4e-bb65-45ad4dd69ad2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] JAXB usage?

2018-08-13 Thread Thomas
Is it possible to use JAXB in CN1 to bind some XML xs scheme file 
(downloaded by the app) onto some classes of the the app? Or do I have to 
write a custom parser by hand ?


If you are experiencing an issue please mention the full platform your 
issue applies to:
IDE: NetBeans/Eclipse/IDEA
Desktop OS
Simulator 
Device

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/ed1b79f9-b0fd-420f-b80c-ffb9377131e8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: auto select first option on an AutoCompleteTextField?

2018-08-12 Thread Thomas
Did you try to set "please select an option" with setHint()? 

On Monday, August 13, 2018 at 5:27:40 AM UTC+2, Gareth Murfin wrote:
>
> How do you auto select first option on an AutoCompleteTextField? so it 
> doesnt sit there white i want first option to be "please select an option", 
> but if I use settext it clears my list.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/08a89d71-7685-4428-b471-55141bb7f232%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: how to avoid ConcurrentModificationException when threads add elements to the UI

2018-08-12 Thread Thomas
I don't think that the current cn1 native map implementation has an 
asynchronous version of functions for transforming screen position from/to 
geo position. 
Anyway, there is something I am not sure to understand in how CN1 
invokeAndBlock 
works. I thought that with an invokeAndBlock call, the whole app process 
was paused until what is in the block complete (so if it is a call to a 
native android call like here, it will wait for android to answer befor 
pursuing). So how can this result into nested mutiple invokeAndBlock calls? 
once the first  invokeAndBlock call is called (by the calcScreenPosition of 
the first marker of the map), wouldn't the process wait for the android 
answer before pursuing to the next calcScreenPosition (for the next marker) 
that will be processed with an invokeAndBlock too, that should block any 
further line of code /loop step to be executed until android answer and so 
on...?

On Monday, August 13, 2018 at 6:31:54 AM UTC+2, Shai Almog wrote:

> You will notice in the stack trace several calls to calcScreenPosition 
> which trigger native synchronous calls and effectively call a deep nest of 
> invokeAndBlock.
> What happens is this:
>
> - You ask for screen coordinates
> - Map cn1lib goes into Android and asks for this but because this needs to 
> run on the native android thread it uses invokeAndBlock to wait for the 
> Android native thread
> - Android takes a while to complete the answer 
> - While Android is taking its time you ask for screen coordinates again 
> and again...
>
> This ends up nesting invoke and block calls which creates problems after 
> some depth. It's a powerful tool but it's meant for coarse things not 
> things you do often. I'm not sure if the current maps have an asynchronous 
> version of the API but if it does you need to use that API. If not we'll 
> need to add such an API.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/5f472865-69b7-4c70-b54f-c37ec89147ca%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: how to avoid ConcurrentModificationException when threads add elements to the UI

2018-08-12 Thread Thomas
D/MyApplication(24672): [EDT] 0:0:13,103 - Exception: 
java.util.ConcurrentModificationException - null
W/System.err(24672): java.util.ConcurrentModificationException
W/System.err(24672):at 
java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
W/System.err(24672):at 
org.tbdlab.myapp.ui.components.map.MapLayout.layoutContainer(MapLayout.java:83)
W/System.err(24672):at com.codename1.ui.Container.doLayout(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Container.layoutContainer(Unknown Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Container.paint(Unknown Source)
W/System.err(24672):at com.codename1.ui.Form.paint(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.internalPaintImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Form.internalPaintImpl(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintInternalImpl(Unknown Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Component.paintInternal(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintComponent(Unknown Source)
W/System.err(24672):at 
com.codename1.ui.Component.paintComponent(Unknown Source)
W/System.err(24672):at 
com.codename1.impl.CodenameOneImplementation.paintDirty(Unknown Source)
W/System.err(24672):at com.codename1.ui.Display.edtLoopImpl(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)
W/System.err(24672):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)
W/System.err(24672):at 
com.codename1.impl.android.AndroidImplementation.runOnUiThreadAndBlock(Unknown 
Source)
W/System.err(24672):at 
com.codename1.googlemaps.InternalNativeMapsImpl.calcScreenPosition(InternalNativeMapsImpl.java:1315)
W/System.err(24672):at 
com.codename1.googlemaps.InternalNativeMapsStub.calcScreenPosition(InternalNativeMapsStub.java:253)
W/System.err(24672):at 
com.codename1.googlemaps.MapContainer.getScreenCoordinate(MapContainer.java:1520)
W/System.err(24672):at 
com.codename1.googlemaps.MapContainer.getScreenCoordinate(MapContainer.java:1530)
W/System.err(24672):at 
org.tbdlab.myapp.ui.components.map.MapLayout.layoutContainer(MapLayout.java:87)
W/System.err(24672):at com.codename1.ui.Container.doLayout(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Container.layoutContainer(Unknown Source)
W/System.err(24672):at com.codename1.ui.Container.doLayout(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Container.layoutContainer(Unknown Source)
W/System.err(24672):at com.codename1.ui.Container.doLayout(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Container.layoutContainer(Unknown Source)
W/System.err(24672):at com.codename1.ui.Container.doLayout(Unknown 
Source)
W/System.err(24672):at 
com.codename1.ui.Conta

[codenameone-discussions] how to avoid ConcurrentModificationException when threads add elements to the UI

2018-08-11 Thread Thomas
I have some threads that perform networker requests and then create ui 
elements based on the results of these request. 
These elements (markers) are then added to a map. But at this point the app 
sometimes crash with a ConcurrentModificationException. 
The function in my threads that is called to add elements (markers) to the 
map is inside a 
```
Display.getInstance().callSerially(new Runnable() {

}
```
block. I thought it was how we are supposed to "resync" results of some 
threads with the EDT one but it doesn't seem to work as I expected as the 
MapLayout is sometimes returning a ConcurrentModificationException when 
performing the layout (probably because some threads are adding markers 
components when the EDT is trying to perform the layout)
So how can I safelly add components to a container (a map) from multiple 
non EDT threads?
Thanks 
 

Device: android

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/7738b8b5-3d6e-415a-8664-90d730376a70%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Native map MapListenerEvent and getBoundingBox causing an error

2018-08-08 Thread Thomas
I allready have my own queue for network calls that control that the same 
request is not performed twice. So user dragging his finger would not be an 
issue for the network queue here ;) . As for the invokeAndBlock method 
call, if I replace it with an assyncroneous call of the native Google 
map getProjection().fromScreenLocation() native function, it would fix the 
issue? (I already use my own fork of the CN1 native maps lib so it is 
really not an issue to perform the change for me)

On Thursday, August 9, 2018 at 6:34:57 AM UTC+2, Shai Almog wrote:

> This is triggered by invokeAndBlock nesting which can lead to bad 
> situations like this. I suggest adding a small delay to make sure that 
> panning finished before you check bounds and start fetching. If the user is 
> still dragging his finger you'd end up filling the device network queue 
> completely.
>
> You can use a timer to do the request and if you get a new drag event just 
> cancel and resubmit the timer.
>
> We're also replacing some of the Map API's with asynchronous ones that are 
> based on callbacks. These handle the communication with the native layer 
> better.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/00e5ec56-4791-481d-ae8b-02b8e71446ff%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: LayeredLayout and interactive component issue

2018-08-08 Thread Thomas
Yes I changed it for a control layer component and now it is working.
Container is supposed to be a component though (it extends it) so it should 
be able to handle pointer events like any other component...

On Thursday, August 9, 2018 at 6:23:29 AM UTC+2, Shai Almog wrote:

> The complexity of the hierarchy has nothing to do with it. Overriding 
> pointer events in a Container is generally problematic. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/37ea8c10-51a7-4dcb-939b-8174fb5980fd%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Native map MapListenerEvent and getBoundingBox causing an error

2018-08-08 Thread Thomas
Forgot to say that the error is happening on android. In the simulator this 
is OK.

On Thursday, August 9, 2018 at 5:56:41 AM UTC+2, Thomas wrote:
>
> I use the native map cn1lib with a maplistener that, when the position of 
> the map changed, performs a getBoundingBox() request on the map (to get the 
> new bounding box of the displayed zone) and then use a third party database 
> to request some elements into this zone. 
> The problem is that, when the map is dragged, the app sometimes fails 
> during this process with the following error:
>
> D/MyApplication( 5619): [EDT] 0:1:18,984 - Exception: 
> java.lang.ArrayIndexOutOfBoundsException - length=0; index=0
> W/System.err( 5619): java.lang.ArrayIndexOutOfBoundsException: length=0; 
> index=0
> W/System.err( 5619):at com.codename1.ui.Form.pointerDragged(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.handleEvent(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.edtLoopImpl(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
> Source)
> W/System.err( 5619):at 
> com.codename1.impl.android.AndroidImplementation.runOnUiThreadAndBlock(Unknown
>  
> Source)
> W/System.err( 5619):at 
> com.codename1.googlemaps.InternalNativeMapsImpl.calcLatLongPosition(InternalNativeMapsImpl.java:1331)
> W/System.err( 5619):at 
> com.codename1.googlemaps.InternalNativeMapsStub.calcLatLongPosition(InternalNativeMapsStub.java:265)
> W/System.err( 5619):at 
> com.codename1.googlemaps.MapContainer.getCoordAtPosition(MapContainer.java:1477)
> W/System.err( 5619):at 
> com.codename1.googlemaps.MapContainer.getBoundingBox(MapContainer.java:1366)
> W/System.err( 5619):at 
> org.tbdlab.myapp.ui.components.map.MapWithParkings.getBoundingBox(MapWithParkings.java:253)
> W/System.err( 5619):at 
> org.tbdlab.myapp.ui.components.map.ParkingsMap.fetchZoneParkings(ParkingsMap.java:85)
> W/System.err( 5619):at 
> org.tbdlab.myapp.ui.components.map.ParkingsMap.access$000(ParkingsMap.java:33)
> W/System.err( 5619):at 
> org.tbdlab.myapp.ui.components.map.ParkingsMap$1.mapPositionUpdated(ParkingsMap.java:55)
> W/System.err( 5619):at 
> com.codename1.googlemaps.MapContainer.fireMapListenerEvent(MapContainer.java:1678)
> W/System.err( 5619):at 
> com.codename1.googlemaps.MapContainer$7.run(MapContainer.java:1577)
> W/System.err( 5619):at 
> com.codename1.ui.Display.processSerialCalls(Unknown Source)
> W/System.err( 5619):at com.codename1.ui.Display.edtLoopImpl(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
> Source)
> W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
> Source)
>
> any idea of what might be the cause of this issue and how to fix it? 
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/11c1700a-8d26-4f80-b9e9-d80cb5d83fbb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Native map MapListenerEvent and getBoundingBox causing an error

2018-08-08 Thread Thomas
I use the native map cn1lib with a maplistener that, when the position of 
the map changed, performs a getBoundingBox() request on the map (to get the 
new bounding box of the displayed zone) and then use a third party database 
to request some elements into this zone. 
The problem is that, when the map is dragged, the app sometimes fails 
during this process with the following error:

D/MyApplication( 5619): [EDT] 0:1:18,984 - Exception: 
java.lang.ArrayIndexOutOfBoundsException - length=0; index=0
W/System.err( 5619): java.lang.ArrayIndexOutOfBoundsException: length=0; 
index=0
W/System.err( 5619):at com.codename1.ui.Form.pointerDragged(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.handleEvent(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.edtLoopImpl(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)
W/System.err( 5619):at 
com.codename1.impl.android.AndroidImplementation.runOnUiThreadAndBlock(Unknown 
Source)
W/System.err( 5619):at 
com.codename1.googlemaps.InternalNativeMapsImpl.calcLatLongPosition(InternalNativeMapsImpl.java:1331)
W/System.err( 5619):at 
com.codename1.googlemaps.InternalNativeMapsStub.calcLatLongPosition(InternalNativeMapsStub.java:265)
W/System.err( 5619):at 
com.codename1.googlemaps.MapContainer.getCoordAtPosition(MapContainer.java:1477)
W/System.err( 5619):at 
com.codename1.googlemaps.MapContainer.getBoundingBox(MapContainer.java:1366)
W/System.err( 5619):at 
org.tbdlab.myapp.ui.components.map.MapWithParkings.getBoundingBox(MapWithParkings.java:253)
W/System.err( 5619):at 
org.tbdlab.myapp.ui.components.map.ParkingsMap.fetchZoneParkings(ParkingsMap.java:85)
W/System.err( 5619):at 
org.tbdlab.myapp.ui.components.map.ParkingsMap.access$000(ParkingsMap.java:33)
W/System.err( 5619):at 
org.tbdlab.myapp.ui.components.map.ParkingsMap$1.mapPositionUpdated(ParkingsMap.java:55)
W/System.err( 5619):at 
com.codename1.googlemaps.MapContainer.fireMapListenerEvent(MapContainer.java:1678)
W/System.err( 5619):at 
com.codename1.googlemaps.MapContainer$7.run(MapContainer.java:1577)
W/System.err( 5619):at 
com.codename1.ui.Display.processSerialCalls(Unknown Source)
W/System.err( 5619):at com.codename1.ui.Display.edtLoopImpl(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)
W/System.err( 5619):at com.codename1.ui.Display.invokeAndBlock(Unknown 
Source)

any idea of what might be the cause of this issue and how to fix it? 

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/5dd95da2-cb7e-4578-894b-8b542f70ace7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: LayeredLayout and interactive component issue

2018-08-07 Thread Thomas
No my hierarchy is pretty simple. Using the component inspector I have my 
form, that contains my parent container P1 (+ the toolbar) that itself 
contains the child component C1, that contains 3 components (its layer 
components). So I really don't get it. 

On Wednesday, August 8, 2018 at 6:30:10 AM UTC+2, Shai Almog wrote:
>
> A layered layout takes over all the space whereas flow layout will leave 
> some areas untouched. I'm guessing you have a different component within 
> the hierarchy that is grabbing events.
> Notice you shouldn't handle events in a Container. It's problematic as 
> most events won't deliver to a container and instead go directly to the 
> applicable child. A better approach would be to bind an event listener on 
> the form in initComponent() and release it in deinitialize().
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/1f7b2257-45bb-4238-a518-e1b4a787ca09%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] LayeredLayout and interactive component issue

2018-08-07 Thread Thomas
I have a Container (lets call it P1) that contains a single (for now) 
interactive child component (C1). This child component itself is a 
container using a LayeredLayout (it has 3 layers) and is interactive (it 
implements pointer click and drag events with override of the low level 
pointer events methods (pointerPressed, pointerDragged, pointerReleased...))
As long as P1 uses the default FlawLayout layout, everything is fine, my 
click and drag events on the child component it contains (C1) are correctly 
handled. But if I change the P1 layout to LayeredLayout, it stops working 
(my child component C1 do no longer receive the click and drag events).
I really don't understand why and how to fix it (I need P1 to use 
LayeredLayout as I want to add another child component on top of the 
previous one when the user perform some specific action)
Also, is there some debugging tool allowing to track down the CN1 events 
(which component currently has focus and what events have been emited)? It 
would be a really usefull feature to implement in the simulator.



-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/fe474472-fe80-4aab-acc4-54aa253f9e16%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: String Validations

2018-08-05 Thread Thomas
You can easilly test for alphanumeric characters with a regexp of the RE 
class: https://www.codenameone.com/javadoc/com/codename1/util/regex/RE.html

On Friday, July 20, 2018 at 1:11:02 PM UTC+2, Muchey wrote:
>
> I am trying to validate where user's input is only Characters with symbols 
> excluded. Hence the need for method: isAlphabetic().
>
> Reveiwed the Character class in CN1 and cant find method(s) with similar 
> functionality as isAlphabetic().
>
> Negating isDigit() would allow symbols which is not required for the field 
> value.
>
> Any sample procedure, code snippet, method/class to achieve this would be 
> greatly appreciated!
>
> Thanks!
>
> On Friday, July 20, 2018 at 5:52:57 AM UTC+1, Shai Almog wrote:
>>
>> The Character class is supported but some methods aren't see the JavaDoc 
>> https://www.codenameone.com/javadoc/
>>
>> Specifically https://www.codenameone.com/javadoc/java/lang/Character.html
>>
>> isDigit() is supported and should work. isAlphabetic isn't supported, 
>> it's a bit complicated with some of the more complex charsets out there. If 
>> you have a specific use case for it let us know.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/0cbedc9e-3888-424f-87e0-fd79989bfee2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: WebSocket Server

2018-08-03 Thread Thomas
use the websockets cn1lib

On Friday, August 3, 2018 at 3:19:03 PM UTC+2, remon...@ordyx.com wrote:
>
> We need to have a WebSocket Server running on both iOS and Android. How 
> can we get this accomplished using CodenameOne? Is there a library you 
> recommend?
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/f17994c5-1143-4fee-9eba-e554fa0ab8db%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: parallel layout animations

2018-05-26 Thread Thomas
What I want is to be able to force some animations to run in parallel when 
I know that they won't conflict with eachother.
But I looked at the AnimationManager class and it looks like it is not 
possible yet (the AnimationManager only have a serial animation queue). 
So it looks like I would have to override it and create my own 
AnimationManager for this to work as I want ;)

On Saturday, May 26, 2018 at 6:23:38 AM UTC+2, Shai Almog wrote:
>
> These animations are meant to be much faster to hide some of those things.
> What's happening is two layout animations running in parallel without 
> knowledge of each other and the second one essentially drops all its frames 
> as it expired.
>
> What's happening is this:
>
> - We get an event of leaving the text field so we initiate a layout 
> animation which starts immediately
> - We get a second event of a new animation so we start that animation 
> immediately but it's stuck in a queue behind the layout animation
> - By the time the second animation gets to run it expired
>
> A workaround would be to flush the animation queue before beginning an 
> animation but it might make field transitions slower and I'm not sure 
> that's what users want. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/e01a6876-ec07-4b34-97fa-4ac9cc9a06c7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Picker: how to determine if user picked a value or canceled

2018-05-26 Thread Thomas
Yes but how can I determine exactly when it is canceled (as I need to 
perform some action immediatly after this cancel event)? 
After the picker was opened, the user can take  1, 2, 3, 4s... 1min... to 
actually cancel or confirm it. And, without any cancel event fired, I have 
no way to determine when this happen if the user choose to cancel it (I 
can't know if he is still in the picker dialog or actually already canceled 
it)...

On Saturday, May 26, 2018 at 6:14:17 AM UTC+2, Shai Almog wrote:
>
> If the picker was opened and no action event was sent then it was probably 
> canceled. No?
>
> Up until recently the workaround for this was to launch the native picker 
> directly from the display class. But we are transitioning to the 
> lightweight picker so that might not be the best approach.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/c9212084-287f-45dc-85c9-836a66da3f05%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] parallel layout animations

2018-05-25 Thread Thomas
I have a form with some component defined as containers containing two 
components that animate one relative to the other on user interaction. 
This animation is handled with a ComponentAnimation (on layout and style) 
on the container (same as in TextComponent).
But the thing is that when one of my component is animated, if the user 
interact with another component, the animation of the later is bugged (the 
animation is incomplete in this case) and delayed after the animation of 
the first one has ended. 
I tested with two TextComponents and the result is the same (so this is not 
related to my custom component).
How can I make the AnimationManager to play my animations immediately 
(rather than queing them)? 

Here is a small video to show you what I am talking about:

https://streamable.com/mchcr

As long as I interact with the fields one by one (by clicking, for example, 
on my onoffswitch component to make the field component lost focus and 
trigger the animation), the animation is fine. But when I click on "First 
Name" and then on "Last Name" (at 10s of the video), you can see that the 
"Last Name" animation is waiting for the "First Name" one to end and is 
bugged (the "Last Name:" label is "immediately" placed at top without the 
position change animation)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/894834b8-196e-4cf2-94ee-68bf142de314%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Picker: how to determine if user picked a value or canceled

2018-05-25 Thread Thomas
The problem is that the action listener is not triggered on cancellation 
events. So I have no way to determine that the user finished to act with 
the picker if he cancelled its action...

On Friday, May 25, 2018 at 7:21:19 AM UTC+2, Shai Almog wrote:
>
> We don't have consistent behavior for cancellation at the time because of 
> all the platform differences. The value should remain as it was before if 
> the user canceled so the official way to work is to use the action listener 
> and ignore cancellation events. 
> We might provide more nuanced event/behavior when we migrate to the 
> lightweight picker implementation.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/6fb44626-93f3-461f-a765-4662fe285d17%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Programmaticaly triggering a press event on a picker button

2018-05-25 Thread Thomas
OK thanks. I previously tried with pressed() and it didn't work but calling 
release() after pressed() is actually working.

On Friday, May 25, 2018 at 7:17:45 AM UTC+2, Shai Almog wrote:
>
> Since it derives from button you can invoke press() followed by release().
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/48a6f7d6-985d-473d-b6cc-cd7a65b50d2f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Picker: how to determine if user picked a value or canceled

2018-05-24 Thread Thomas
What event should I listen to on a picker to be able to determine the new 
value choosed by the user? Because the ActionListeners are trigerred only 
if the user confirmed a value (so it is not if it canceled) and 
the focusLost() method of focusListeners is actually triggered in any cases 
but before the new value is set (so if picker value was A previously and 
user choose B and confirmed, if we call picker.getValue() in 
the  focusLost() method of focusListeners, it will return A...)

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/9c03353c-43b4-4053-84cf-e4855a33b54e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Programmaticaly triggering a press event on a picker button

2018-05-24 Thread Thomas
I need to programmatically trigger a press event on a picker (so that the 
picker automatically open the picker dialog). 
How can I do that?

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/07ce1642-0d09-4bb0-9bb9-50b04e4266ea%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Why am I getting an Android Build Error due to issues with Manifest Merger?

2018-05-21 Thread Thomas
If the CN1 build cloud service is not broken, you probably have a wrong 
android setting in your codename_settings.properties file. You should post 
the log file provided by the cloud server to track it down

On Tuesday, May 22, 2018 at 4:14:50 AM UTC+2, jaweil...@gmail.com wrote:
>
> IDE: IDEA
> OS: Mac High Sierra
> Issue: Sending android build, works fine on simulator.
>
>
> When I attempt to send an android build for my project that runs perfectly 
> in the simulator, I receive this exception in the log (I am using a basic 
> storage plan so size should not be the issue), would love any insight as I 
> am not very experienced with these kinds of errors: 
>
>  Exception is:
> org.gradle.api.tasks.TaskExecutionException: Execution failed for task 
> ':processReleaseManifest'.
>   at 
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103)
>   at 
> org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
>   at 
> org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
>   at 
> org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
>   at 
> org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
>   at 
> org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
>   at 
> org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
>   at 
> org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
>   at 
> org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
>   at 
> org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
>   at 
> org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
>   at 
> org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
>   at 
> org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
>   at 
> org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
>   at 
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
>   at 
> org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
>   at 
> org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
>   at 
> org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:597)
>   at 
> org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
>   at 
> org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
>   at 
> org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
>   at 
> org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
> Caused by: java.lang.RuntimeException: Manifest merger failed with multiple 
> errors, see logs
>   at 
> com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.j

[codenameone-discussions] Re: Make a better CodenameOne and get it adopted by more developers around the world

2018-05-19 Thread Thomas
Didn't know you already tried this kind of incentive when CN1 was launched. 
But I think that one of the mistake was to say you would reward a free 
basic subscription for any contribution. Had you said you MAY give a 
reaward (at you convenience) for a contribution if you consider it a worth 
one (bug fix, significant contribution...), you probably wouldn't have 
experience bad contributions of people only attracted by the reward. Using 
a system of points rather than direct $ reward would also avoid putting the 
$ sign on community work (we could imagine others points usage than just 
converting them into a $ coupon for services)
Anyway, it was just an idea on how you could try to improve the community 
involvment into CN1. Because unlike you may say, 21 contributors on a 
project like CN1 is really few. You focussed on Flutter (that is quite 
recent and probably didn't reach the 4 developpers yet, which is why I 
mentionned it in the comparison) but I also compared to the OpenFL project 
(where the team is pretty much one guy and that is less promoted than CN1 
and probably less popular (I doubt that it reached 4 developpers)). I 
could also have mentionned libgdx (https://github.com/libgdx/libgdx) that 
is also quite similar. Your comparison to robovm is not fair as robovm is 
just a vm and not a multiplatform developpment Framework (it compares to 
your parparVM for example) so if you want to compare to Xamarin, you should 
sumup the contributions of xamarin-android 
(https://github.com/xamarin/xamarin-android), xamarin-macios 
(https://github.com/xamarin/xamarin-macios) and Mono 
(https://github.com/mono/mono) ...




On Saturday, May 19, 2018 at 7:32:04 AM UTC+2, Shai Almog wrote:

> The contributors to flutter are Google employees in the Dart team which is 
> a HUGE team. They need that many people because the architecture of their 
> VM is pretty complicated (not a very good sign).
>
> It makes more sense to compare us to a project that was shorter lived but 
> highly visible and highly promoted by Oracle/Xamarin: 
> https://github.com/robovm/robovm/graphs/contributors
> Our numbers would have been better had we not worked on Google Code until 
> it was shutdown. We should have been on github sooner.
>
> Despite all of the people who work on Flutter they don't have a fraction 
> of the API/library support that we already have with the limited resources 
> at our disposal. 
>
> Most open source projects don't get a lot of 3rd party contributions, 
> especially complex projects (e.g. us). To me the code contribution aspect 
> isn't a huge deal. I care far more about bug reports, questions & community 
> advocacy all of which could also use improvement.
>
> This isn't the first thread that mentioned this. We made a lot of attempts 
> in the past to increase community engagement and most of them weren't very 
> successful. Even basic things like being active on reddit/other sites or 
> writing an article in medium etc. Most developers don't even submit their 
> app to the gallery...
>
> I know the head of the flutter team has personal calls with developers to 
> encourage them to write about the platform. You can literally see the 
> marketing copy he helps them insert into their posts. Unfortunately we 
> don't have the ability to do that.
>
> About giving bonuses to contribution we did exactly that when we launched. 
> We offered a free basic subscription for code contribution & for people who 
> shared information in social networks to help promote our brand. This 
> didn't result in anything. Worse, it created a bad incentive for 
> contribution that triggered bad contributions with the purpose of getting a 
> free subscription.
>
> This further creates a bad incentive by putting a $ sign on the work 
> community developers do... (I don't know if you read Freakonomics but it 
> has a wonderful explanation on the nuances of negative incentives). I think 
> the main value of contribution should be the contribution itself & being a 
> part of the community. If we offer money (or equivalent) we devalue the 
> work which is arguably worth more.
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/f72e6a55-288a-47e2-b1e2-aa00601c2813%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[codenameone-discussions] Re: Make a better CodenameOne and get it adopted by more developers around the world

2018-05-18 Thread Thomas
I think the real issue with CN1 is the lack of user contributions. Despite 
CN1 beeing 6 years old now, the number of CN1libs is quite limited (and 
most are from the CN1 Team itself) and if you look at the github, you can 
see that the number of contributors to the source code is only 25. With 
more than 4 developers supposed to be using CN1, this is really few. If 
you compare to flutter that is more recent, or to openfl (that is probably 
less popular than CN1), you can see that they both have more than 5 times 
this number of contributors. And this is kind of a problem as if a 
developper see that a Framework is only having a few third party libraries 
or code contributions, he would immediately think that this Framework is 
more likely to lack some features or libraries he may need. So this is kind 
of a vicious circle as, the less libraries you offer, the less your 
Framework is popular and the less you are likely to receive third party 
contributions...
I think one of the reason of this lack of community involvment into CN1 is 
the fact that it offers paid services. So, in some people minds (even 
unconsciously), they don't have to contribute as CN1 is a commercial 
company. But what if we could make this an advantage rather than a 
disadvantage?
I was thinking recently that CN1 should use the fact that it offers some 
paid services to encourage some developpers to share their code that might 
be usefull to others. 
For this, CN1 could offer to link your github account to your CN1 account 
and, for each valuable contribution to the community, offer a bounty in the 
form of points that could be used to have some réductions on paid services 
(cloud services or courses). For example, for a bug fixed into the source 
code, you would get Something like 1 point and for a more valuable 
contribution (like a CN1lib) much more points depending on how much the CN1 
Team think your contribution is worth it. If you keep it subjective (I 
don't think you should use a fixed scheme) and just say: we can reward you 
some points for valuable contributions I think more users would be 
motivated to share their code than currently without any significal impact 
on your earnings (anyway if you see this measure cost you too much, you 
could change the value of a point (for a start 1 point = 1$ discount seems 
a mere conversion factor) or just reward less points for each contribution).
I think it is an idea to think about if it can revitalize the community of 
developpers on CN1 (Note: I am not saying this for me as I have no trouble 
contibuting to CN1 for free and I will continue this way. I am just a bit 
sad to have to redevelopp  some classes and libs that someone has probably 
already developped for himself and just not shared (like recently a 
circular progress indicator or a color editor, that some people already 
tried to develop according to this forum, and that would be part of a 
material design components cn1lib that I would share when ready ;) )



On Wednesday, April 25, 2018 at 9:22:11 AM UTC+2, Shai Almog wrote:

> Despite writing so much I still neglected one important comment... If you 
> want community involvement file RFE's for things like this!
> You want a better wizard file a lot of RFE's with specific narrow 
> suggestions ideally with screenshots.
>
> People reading this, vote and type a comment in such issues and help us 
> see what you care about and what you notice... We can then assign 
> milestones and discuss each one of these individually. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to codenameone-discussions+unsubscr...@googlegroups.com.
Visit this group at https://groups.google.com/group/codenameone-discussions.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/b291fce2-14c3-4c0c-ad4b-01e3f100ada8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


  1   2   >