[TBUI] TBUI Watch face tool. Editor for one of the FitcloudPro watch face format. - Other SmartWatches

hi all again,
still in "beta", but seems works fine enough to public and allow to use this format even more effective than in vendors watch faces.
what does mean "TBUI"? it's just a tag in watch face (further "wf") file, what allow you identify it. you may find it at the end of all of this type of watch faces. just open it in any editor/viewer, go at the end of the file and you'll se it:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
it's a very flexible format, perhaps a next version of "PUSH" (yep, a similar tag again). at least it looks similar but have more powerful abilities.
this format allow you to use in any combinations a lot of elements such as:
- clock hands (as discrete as smooth)
- digital data: time markers (49 in variants), sensors data (48 in variants)
- sequential frame-based elements (time, month, progress-bars, rolled-up elements... - 30 items)
- localizeable tags (chinesse/non chinesse)
- animations (sequential frames)
- buttons to call device menu items
- internal wf configuration (ability to enable/disable some groups of elements "on the fly")
and you not limited in one item per type (if you want).
but before to continue, to be honest I'd must warn:
WARNING - theoretically you may brick your device and may not recover it without special knowledge. while I'd investigated this format it happed few times in case of wrong frames compression. now it's solved and must not happens, but chances still not a zero. for sample, few days ago I've known what a zero mirror point for clock hands may cause stuck your device too. I did set a foolproof protection for exactly this issue, but can't check all of possibilities because of over 150 available elements.
ok. if you'd not escaped yet, let's continue.
Spoiler: few screenshots of interface
editor was maked closer to the file format as maximum as possible, so you must understand few basic definitions:
- frame - just an image
- char set - required for elements what uses strings to display. technically. it's a group of assignments frames to characters/symbols. if you use some char set for element, then each char in string what must be displayed, would be replaced by assigned frame. if the char would not assigned, than it'll be skipped.
- ui element - a part of a wf what do something. display some sort of data or mark some region for some action.
- region - rarely uses. if you not in plane to make a hard wf, than you may just ignore it. treat it as "layer". it assign new start point of a coordinate for child elements, but have no affect for sequential of global drawing queue and not cut elements if it's draws out of region area. each region have it's own "sets" - a group of elements what must be shown at once. what det must be shown, may be configured by special element class.
so in this case, editor have a 4 "subeditors": "UI" ("UI items" and "Regions") and "Resources" ("Char Sets" and "Frames")
main interface controls:
horizontal control panel:
"X" - remove element
"A" - add new element as next
"U" - up at one position
"D" - down at one position
"+"/"-" - expand/collapse element
vertical control panel (for ui items editor only):
"+"/"-" - expand/collapse element
"H" - hide element on branch
"L" - ignore element on branch (would be displayed, but would be ignored by mouse)
available classes:
Spoiler: Overlay
just a frame as is. used parameters:
Code:
Target ID - id of a frame
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Spoiler: ClockHands
used parameters:
Code:
Target ID - id of a first frame in chain or alone frame id
X, Y - top left corner coordinates
X2, Y2 - coordinates of a mirror/rotate point
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
elements:
CHHoursHand16, CHMinutesHand16, CHSecondsHand16 - uses 16 sequential frames from "N" to "E". works as a discrete clock hands. all other frames would be used as a mirrored via lines goes through mirror point (x2, y2)
CHHoursHand1, CHMinutesHand1, CHSecondsHand1 - uses only one frame ("N"). would be rotated around x2, y2. works as a discrete clock hands. a lot of cpu usage - reduce size of a frame as possible.
CHHoursHandSmooth, CHMinutesHandSmooth, CHSecondsHandSmooth - uses only one frame ("N"). would be rotated around x2, y2. works as a smooth clock hands. a lot of cpu usage - reduce size of a frame as possible.
Spoiler: Char2FrameTime
various elements what display time parts (hours, minutes, seconds, date, month, year, day of the week in different variants) as a numeric values
used parameters:
Code:
Target ID - id of a char set
X, Y - top left corner coordinates
X2, Y2 - used only for calendar table parts as a size of a cell
Align - align of an element to x, y point
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Params 1 - second field only - kerning (interval between chars)
Spoiler: Char2FrameStatistic
various elements what display sensors data (steps, hear rate, o2, battery level etc. in different variants) as a numeric values
used parameters:
Code:
Target ID - id of a char set
X, Y - top left corner coordinates
Align - align of an element to x, y point
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Params 1 - second field only - kerning (interval between chars)
Spoiler: Localizable
elements what display various tags for chinesse and non-chenesse localizations ("am/pm","bpp","o2","km"/"ml" etc. )
each item must have two sequential frames: for "chinesse" locale, then for "non-chinesse" locale.
useless if you have no plans to make a chinesse variant.
used parameters:
Code:
Target ID - id of a first frame (chinesse)
X, Y - top left corner coordinates
Align - align of an element to x, y point
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Spoiler: SequentialFrames
various elements displays some data as sequential frames. like a progress-bars of some data, month etc.
used parameters:
Code:
Target ID - id of a first frame in chain
X, Y - top left corner coordinates
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Spoiler: Specialized
some sort of elements what not assigned to any other classes
used parameters:
Code:
Target ID - id of a first frame in chain
X, Y - top left corner coordinates
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Spoiler: OverlayGroup
not analyzed yet
Spoiler: Button
uses to call internal watch menus if exists
used parameters:
Code:
X, Y - top left corner coordinates
X2, Y2 - width and height of a button
Parent Region ID - as named
Set ID - as named for region assigned in "Parent Region ID"
Spoiler: RegionSettings
selecting id of a set what must be shown in appropriate region. works like a button, but have a some specific.
used parameters:
Code:
X, Y - top left corner coordinates
X2, Y2 - width and height of a button
Region Type - how it must be used - via internal config or by tap
Params 1 - for "RSConfig" only. first field as a count of a selectable items
Params 2 - for "RSConfig" only. list of frames id what would be used as a thumbnails for selection menu
sorry for so short manual, it's a bit hard to write that's all on not my first language. you may use an original watch faces to learn how it works in details or ask me here or in pm.
~200 original watch faces for dm50 (466x466) available on my gdrive you may use it as a sample or just a template/resources.
download link TBUIWFTool.zip
Spoiler: list of tested compatible devices
- DM50, Lemfo (466х466)
- HD11, Huadai (240x280)
- HK28 (368х448)
- HK46 (360x360)
- i20, Colmi (360x360)
- i30, Colmi (390?x390?)
- i31, Colmi (466x466)
- C60, Colmi (240x280)
- C80, Colmi (368x448)
- LA24, Linwear, Tiroki (360х360)
- LF26 Max, Lemfo (360х360)
- Vibe 7 Pro, Zeblaze (466x466)
- x7, Gejian (360x360)
Spoiler: not tested devices with TBUI wf
- Dizo Watch R, Realme (360х360)
- HK3Pro (360х360)
- L20, microwear (240x280)
- W3Pro+, XO (360х360)
all devices except dm50 tested by other users, not by me.

watch face for sample:
it was maked by request (converted from push 240x240 to tbui 360x360) and because my watch have a 466x466 resolution it looks shifted. but on 360x360 would be fine.
if you hold tap on display to get watch face selector, you'll see a little gear icon at bottom of preview:
tap it and you'll enter in internal config menu:
you can setup:
- ability to show/hide weather applet
- using static or roll-up month/day elements
- using battery level by 10% or by 1%
- select discrete seconds clock hand or smooth
also it have a few buttons in regular mode:
- weather (by tap weather applet)
- data (by tap steps)
- heart rate (by tap heart or it's numbers)
- timer (by center of a clock)

Very good

I tried running the tool in a clean Windows 11 VM, and it wont start. Does it require a runtime or framework (eg, .NET, Python, etc.) to be installed?
EDIT: Nevermind, Windows' had blocked the file. Anyone else has this problem, right-click->propoerties->unblock. Windows does not give a helpful error message when failing to run. FYI I also got a hit in Windows Defender, which immediately deleted this when I first downloaded it. I scanned in in Kaspersky online and it appears to be clean, so it appears to be a false-positive, but that might have something to do with why Windows is making it so hard to run it.

danjayh said:
...Does it require a runtime or framework (eg, .NET, Python, etc.) to be installed?
...
Click to expand...
Click to collapse
.net 4.7.2 only.
danjayh said:
...FYI I also got a hit in Windows Defender, which immediately deleted this when I first downloaded it...
Click to expand...
Click to collapse
I use it on win 10 and never seen nothing similar. also never heard about this issue (shared on other forum from march).
also it's not finished and would be updated. m.b. even not an once.

Great work... But how I can upload to Colmi i30?
Thanks!
EDIT: Learned to upload and all ok, thanks again!
It's possible to easy convert 466px to 390px? Or need export and import resized all frames?

Jean-DrEaD said:
It's possible to easy convert 466px to 390px? Or need export and import resized all frames?
Click to expand...
Click to collapse
no. resizing in ".net" is a... not a good quality point. you must resize frames via external specialized tools. I use a xnview (for sample). it have a fine enough algorithms and batch processing.
with next build you'll be allowed to remove all frames by one click (already implemented in debugging build). also I'll integrate local browser (at first) for viewing graphical resources of local watch face files and export it or import to current watch face.
at this time, in debugging build it supports push format for viewing too (editing not in plans, just only as sourse of images). seems public build would be able at this week.
in plans some other formats and add web browser too.

Related

[proof of concept app]Gesture recognition

I recently saw this tread:
http://forum.xda-developers.com/showthread.php?t=370632
i liked the idea, and when i thought about it, gesture recognition didn't seem to hard. And guess what - it really wasn't hard
I made a simple application recognizing gestures defined in an external configuration file. It was supposed to be a gesture launcher, but i didn't find out how to launch an app from a winCE program yet. Also, it turned out to be a bit to slow for that because of the way i draw gesture trails - i'd have to rewrite it almost from scratch to make it really useful and i don't have time for that now.
So i decided to share the idea and the source code, just to demonstrate how easy it is to include gesture recognition in your software.
My demo app is written in C, using XFlib for graphics and compiled using CeGCC so you'll need both of them to compile it (download and install instructions are on the Xflib homepage: www.xflib.net)
The demo program is just an exe file - extract it anywhere on your device, no installation needed. You'll also need to extract the gestureConfig.ini to the root directory of your device, or the program won't run.
Try some of the gestures defined in the ini (like 'M' letter - 8392, a rectangle - 6248, a triangle - 934), or define some of your own to see how the recognition works. Make sure that you have a string consisting of numbers, then space of a tabulator (or more of them) and some text - anything will do, just make sure that there's more than just the numbers in each line. Below you can set the side sensitivity to tweak recognition (see the rest of the post for description on how it works). Better leave the other parameter as it is - seems to work best with this value.
Now, what the demo app does:
It recognizes direction of drawn strokes, and prints them on the bottom of the screen as a string of numbers representing them (described bellow). If a drawn gesture matches one of the patterns in the config file, the entire drawn gesture gets highlited. It works the best with stylus, but is usable with finger as well.
Clicking the large rectangle closes the app.
And how it does it:
The algorithm i used is capable of recognizing strokes drawn in eight directions - horizontally, vertically and diagonally. Directions are described with numbers from 1 to 9, arranged like on a PC numerical keyboard:
Code:
7 8 9
4 6
1 2 3
So a gesture defined in config as 6248 is right-down-left-up - a ractangle.
All that is needed to do the gesture recognition is last few positions of the stylus. In my program i recorded the entire path for drawing if, but used only 5 last positions. The entire trick is to determine which way the stylus is moving, and if it moves one way long enough, store this direction as a stroke.
The easiest way would be to subtract previous stylus position from current one, like
Code:
vectorX=stylusX[i]-stylusX[i-1];
vectorY=stylusY[i]-stylusY[i-1];
[code]
But this method would be highly inaccurate due to niose generated by some digitizers, especially with screen protectors, or when using a finger (try drawing a straight line with your finger in some drawing program)
That's why i decided to calculate an average vector instead:
[code]
averageVectorX=((stylusHistoryX[n]-stylusHistoryX[n-5])+
(stylusHistoryX[n-1]-stylusHistoryX[n-5])
(stylusHistoryX[n-2]-stylusHistoryX[n-5])
(stylusHistoryX[n-3]-stylusHistoryX[n-5])
(stylusHistoryX[n-4]-stylusHistoryX[n-5]))/5;
//Y coordinate is calculated the same way
where stylusHistoryX[n] is the current X position of stylus, and stylusHistoryX[n-1] is the previous position, etc.
Such averaging filters out the noise, without sacrificing too much responsiveness, and uses only a small number of samples. It also has another useful effect - when the stylus changes movement direction, the vector gets shorter.
Now, that we have the direction of motion, we'll have to check how fast the stylus is moving (how long the vector is):
Code:
if(sqrt(averageVectorX*averageVectorX+averageVectorY*averageVectorY)>25)
(...)
If the vector is long enough, we'll have to determine which direction it's facing. Since usually horizontal and vertical lines are easier to draw than diagonal, it's nice to be able to adjust the angle at which the line is considered diagonal or vertical. I used the sideSensitivity parameter for that (can be set in the ini file - range its is from 0 to 100). See the attached image to see how it works.
The green area on the images is the angle where the vector is considered horizontal or vertical. Blue means angles where the vector is considered diagonal. sideSensitivity for those pictures are: left one - 10, middle - 42 (default value, works fine for me ), right - 90. Using o or 100 would mean that horizontal or vertical stroke would be almost impossible to draw.
to make this parameter useful, there are some calculations needed:
Code:
sideSensitivity=tan((sideSensitivity*45/100)*M_PI/180);
First, the range of the parameter is changed from (0-100) to (0-22), meaning angle in degrees of the line dividing right section (green) and top-right (blue). hat angle is then converted to radians, and tangent of this angle (in radians) is being calculated, giving slope of this line.
Having the slope, it's easy to check if the vector is turned sideways or diagonal. here's a part of source code that does the check, it is executed only if the vector is long enough (condition written above):
Code:
if( abs(averageVectorY)<sideSensitivity*abs(averageVectorX) ||
abs(averageVectorX)<sideSensitivity*abs(averageVectorY)) //Vector is turned sideways (horizontal or vertical)
{
/*Now that we know that it's facing sideways, we'll check which side it's actually facing*/
if( abs(averageVectorY)<sideSensitivity*averageVectorX) //Right Gesture
gestureStroke='6'; //storing the direction of vector for later processing
if( abs(averageVectorY)<sideSensitivity*(-averageVectorX)) //Left Gesture
gestureStroke='4';
if( abs(averageVectorX)<sideSensitivity*(averageVectorY)) //Down gesture
gestureStroke='2';
if( abs(averageVectorX)<sideSensitivity*(-averageVectorY)) //Up gesture
gestureStroke='8';
}
else
{ //Vector is diagonal
/*If the vector is not facing isdeways, then it's diagonal. Checking which way it's actually facing
and storing it for later use*/
if(averageVectorX>0 && averageVectorY>0) //Down-Right gesture
gestureStroke='3';
if(averageVectorX>0 && averageVectorY<0) //Up-Right gesture
gestureStroke='9';
if(averageVectorX<0 && averageVectorY>0) //Down-Left gesture
gestureStroke='1';
if(averageVectorX<0 && averageVectorY<0) //Up-Left gesture
gestureStroke='7';
}
Now, we have a character (i used char type, so i can use character strings for string gestures - they can be easily loaded from file and compared with strcmp() ) telling which way the stylus is moving. To avoid errors, we'll have to make sure that the stylus moves in the same direction for a few cycles before storing it as a gesture stroke by increasing a counter as long as it keeps moving in one direction, and resetting it if it changes the direction. If the counter value is bigger than some threshold (pathSensitivity variable is used as this threshold in my program), we can store the gestureStroke value into a string, but only if it's different from previous one - who needs a gesture like "44444" when dragging the stylus left?
After the stylus is released, you'll have to compare generated gesture string to some patterns (eg. loaded from a configuration file), and if it matches, do an appropriate acton.
See the source if you want to see how it can be done, this post already is quite long
If you have any questions, post them and i'll do my best to answer.
Feel free to use this method, parts of, or the entire source in your apps. I'm really looking forward to seeing some gesture-enabled programs
Very nice work. Reading your post was very insightful, and I hope this can provide the basis for some new and exciting apps!
great app... and well done for not just thinking that seems easy... but actually doing it...
ive been a victim of that myself
very nice work man.. one question in which tool did you write code.. i mean it looks like C but how you test and all..
Great app, i see that it is just proof of concept at this stage, but i see that it can be used in future applications control
Continiue with your great work
nik_for_you said:
very nice work man.. one question in which tool did you write code.. i mean it looks like C but how you test and all..
Click to expand...
Click to collapse
It is C, (no "++", no "#", no ".NET", just god old C ) compiled with opensource compiler CeGCC (works under linux, or under windows using cygwin - a unix emulator), developed in opensource IDE Vham (but even a notepad, or better notepad++ would do), tested directly on my Wizard (without emulator). I used XFlib which simplifies graphics and input handling to a level where anyone who ever programed anything at all should be able to handle it - it providea an additional layer between the programmer and the OS. You talk to Xflib, and Xflib talks to the OS. I decided to use this library, because i wanted to try it out anyway.
If i decide to rewrite it and make an actual launcher or anything else out of it, i'll have to use something with a bit faster and more direct screen access (probably SDL, since i already done some programing for desktop PC with it) - XFlib concentrates on usage of sprites - like 2D console games. every single "blob" of the gesture trail is a separate sprite , which has to be drawn each time the screen is refreshed - that is what slows down the app so much. The gesture recognition itself is really fast.
Very good program i just test it and it works very well some combinaison are pretty hard to realize but i like this blue point turning red with command2 and 934. Goond luck , i'll continue to see your job maybe you'll code a very interesting soft.
Interesting work.... would like to see this implemented in an app, could be very useful.
If you want I have some code I did for NDS coding, and which I ported on PocketPC for XFlib.
It works perfectly well and I use it in Skinz Sudoku to recognize the drawn numbers.
The method is pretty simple : when the stylus is pressed, enter the stylus coordinates in a big array. And when it's released, it takes 16 points (could be changed depending on what you need) at the same distance from each other, checks the angle, and gives you the corresponding 'char'.
To add new shapes, it's just a 15 character string which you link to any char (like, link right movement to 'r', or 'a', or a number, or whatever ^^). It works for pretty much any simple shape, and I even used it to do a graffitti-like thing on NDS which worked really well
Hey!
How do you get the last Stylus Positions?
and how often do you read them out
I want to realice such a code under vb.net, but I don't know how i should read out the last stylus positions, to get them perfectly for such calculations
Code:
Private Sub frmGesture_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
If StylusJump = 1 Then
StylusJump += 1
If (CurrentStylusPosition.X <> frmGesture.MousePosition.X) Or (CurrentStylusPosition.Y <> frmGesture.MousePosition.Y) Then
LastStylusPosition(9).X = LastStylusPosition(8).X
LastStylusPosition(9).Y = LastStylusPosition(8).Y
LastStylusPosition(8).X = LastStylusPosition(7).X
LastStylusPosition(8).Y = LastStylusPosition(7).Y
LastStylusPosition(7).X = LastStylusPosition(6).X
LastStylusPosition(7).Y = LastStylusPosition(6).Y
LastStylusPosition(6).X = LastStylusPosition(5).X
LastStylusPosition(6).Y = LastStylusPosition(5).Y
LastStylusPosition(5).X = LastStylusPosition(4).X
LastStylusPosition(5).Y = LastStylusPosition(4).Y
LastStylusPosition(4).X = LastStylusPosition(3).X
LastStylusPosition(4).Y = LastStylusPosition(3).Y
LastStylusPosition(3).X = LastStylusPosition(2).X
LastStylusPosition(3).Y = LastStylusPosition(2).Y
LastStylusPosition(2).X = LastStylusPosition(1).X
LastStylusPosition(2).Y = LastStylusPosition(1).Y
LastStylusPosition(1).X = CurrentStylusPosition.X
LastStylusPosition(1).Y = CurrentStylusPosition.Y
CurrentStylusPosition.X = frmGesture.MousePosition.X
CurrentStylusPosition.Y = frmGesture.MousePosition.Y
End If
Dim LabelString As String
Dim iCount As Integer
LabelString = "C(" & CurrentStylusPosition.X & "\" & CurrentStylusPosition.Y & ")"
For iCount = 1 To 9
LabelString = LabelString & " " & iCount & "(" & LastStylusPosition(iCount).X & "\" & LastStylusPosition(iCount).Y & ")"
Next
lblGesture.Text = LabelString
ElseIf StylusJump <= 3 Then
StylusJump += 1
Else
StylusJump = 1
End If
End Sub
Sorry, i didn't notice your post before. I guess that you have the problem solved now, that you released a beta of gesture launcher?
Anyway, you don't really need 10 last positions, in my code i used only 5 for calculations and it still worked fine.
Nice thread, thanks for sharing.
Human-,achine interface has always been an interesting subject to me, and the release of ultimatelaunch has sparked an idea. I am trying to acheive a certain look-and-feel interface - entirely using components that are today screen and ultimatelaunch compatible. Basically a clock strip with a few status buttons at the top, and an ultimatelaunch cube for the main lower portion of the screen - gesture left/right to spin the cube, and each face should have lists of info / icons scrolled by vertical gesture. I'm talking big chunky buttons here - tasks, calendar appts, (quick) contacts, music/video playlists - all vertical lists, one item per row, scrolling in various faces of the cube.
Done the top bit using rlToday for now. Set it to type 5 so scrollbars never show for the top section. All good. Cobbling together bits for the faces, but few of the apps are exactly what I want, some (like that new face contacts one) are pretty close, and being a bit of an armchair coder, I thought now would be a good opportunity to check out WM programming and see if I can't at least come up with a mockup of what I want if not a working app.
I was wondering if anyone could advise me on whether I should bother recognising gestures in such a way as this. Does WM not provide gesture detection for the basic up, down, left, right? Actually, all the stuff I have in mind would just require up/down scrolling of a pane - I was thinking that I may well not need to code gesture support at all, just draw a vertical stack of items, let it overflow to create a scrollbar and then just use the normal WM drag-to-scroll feature (if it exists) to handle the vertical scrolling by gesture in the face of the cube. I would rather keep the requirements to a minimum (eg touchflo), both for dependancy and compatibility reasons, so maybe doing the detection manually would be the "way to go", I dunno.
Did you release source with the app launcher? A library maybe? I intend to go open source with anything I do, so if you are doing the same then I would love to have access to your working code
Nice work man.
Impressive.

ThrottleLauncher Skining tutorial

Hi!!!
Here you have a little tutorial on how to create Themes for throttlelauncher. I still have to work on it but almost all is here. With this, theorically you can create almost any interface (still there's some work to do to achieve this ).
Any help, sugestions or requests are appreciated.
To read this tutorial is recomended to know XML file format.
First of all the file structure of a setup for throttlelauncher must be this.
- throttlelauncher instalation
|- Setups
|- MyTheme
|- Skins
|- Skin1
|- skin.xml
|- ...pictures of the skin​ |- Skin2
|- skin.xml
|- ...pictures of the skin​ |- Skin3​ |- config.xml
|- ....imported xml files
|- icons
|- ....my icons... any dir estructure​can be placed inside
To configure the app there are several tags. All the xml must be inside the root tag.
configuration: this tag contains the configuration parameters for the app (especified by the tag param). The allowed params names are:
- appear: Boolean value. Defines if the animation from down to top when the app got focus is activated (only valid for the standalon app).
- skin: defines the path of the folder of the skin to use. Relative to the app folder. See some post's below how to create the skin files.
- speeddecreaserate: factor that multiplies the value of your finger speed when starting kinetic scrolling.
- speedinitmultiply: factor that sets how fast the speed will be decreased in kinetic scrolling. IMPORTANT: set a value greatter than 1.
- status: two possible values. 0: normal (will show title bar and button bar of the app). 1: Maximized (will show the app fullscreen).
- osdenabled: It true, the OSD top bar will be shown when element is selected.
- imagecontactnophoto: Relative path to the image to be used it there's no contact photo.
- minclicktime: Min lapse time in miliseconds between the mouse down and up events to perform a click over the pressed element.
- .... there are some more... I will add them latter.
Example:
Code:
<configuration>
<param name="screenshot" value="True" />
<param name="appear" value="True" />
<param name="skin" value="Setups\Touchflo3D\skins\general" />
<param name="speeddecreaserate" value="1.2" />
<param name="speedinitmultiply" value="1.4" />
<param name="status" value="1" />
</configuration>
page: wich represent a page inside the app. Must be placed inside the root tag and the first one in the file is going to be the first one been showed by default. Page can have 2 attributes:
- name: contains the name of the page. This is going to be used when whe create a link to this page.
- loadonstartup: Boolean value, the default is "true". I recomend to set it to "false" in any page that be do not use frecuently to reduce memory usage.
- autounload: Indicates if the page will be unloaded automatically (and all it's resources will be freed).
- autounloadtime: time a unused page will remain loaded until autounload event starts. This param will be only used it autounload is true.
- import: will import the target xml as content of the page.
Example:
Code:
<page name="Home" loadonstartup="True" autounload="false">
row: Must be placed inside a page tag. They are specified in order from top to bottom. The following attributes are allowed:
- name
- marginX / marginY : margin bettwen the elements contained in the row.
- rows: number of rows of elements. If you set it up to -1 the number of rows is infinite.
- minheight: minimum height of the row (use recomended with dinamically sized rows due to contents like all contactswith photo or runningapps or recent)
- mincolwidth:
- scrollingmode: one of [Paged, WheelOfFortune, Direct, Kinetic, Auto, None]
- alignment: one of [left,right,center]
Example:
Code:
<row name="Programs" marginX="5" marginY="1" rows="3" scrolling="Paged">
footer: Must be placed inside the root tag. It parametters are exactly the same as the row. The footer is common for all the pages. Only one footer can be especified.
icon: Must be used inside the row tag or the footer tag. Used to display an icon. The allowed attributes are:
- name: Will be shown in the OSD when the icon is selected.
- path: path of the icon file. Recomended to use png. Can be absolute or relative to the app path. If the path is not specified, then the file on exec (if it's exe or lnk) will be used to obtain the icon image. No zooming efect will be applied in this case.
- exec: file to execute when the icon is clicked (deprecated, use event click instead).
- params: params for the file execution (deprecated, use event click instead).
- width: override the icons width.
- height: override the icons height.
- rowspan: indicates that the icon fills that number of rows intead of 1.
- showtext: will display the name of the icon as footer text.
Example:
Code:
<icon name="New Contact" exec="\windows\poutlook.exe" params="contacts -new" path="icons\contact.png" />
separator: must be especified inside a row or a footer. Allowed attributes are:
- name: if especified will show a vertical oriented text. If not especified the separator will show a vertical line.
Example:
Code:
<separator name="Personal" />
continues
text: Must be especified inside a row or a footer. Used to show text. Inherits all the atributes of the icon (so background icon can be displayed) plus:
- text: contains the text to be shown. The ~ symbol can be used for "new line", and two especial sentences:
* date: #$date,format#. Will be replaced by the date in the format especified. Will be updated automatically every second.
* reg: #$reg,key#. Will de replaced by the value of the desired key. Will be updated every second. When regkey is especified you can also use this format to parse date registry values: #$reg,key,date,dateformat
Example, start date for next apointment: #$reg,HKEY_CURRENT_USER\System\State\Appointments\Next\Start Time,date,MMM/dd/yyyy hh:mm#
- fonttype: font type specified by "fontname,size,bold" or "size,bold".
- fontcolor: RGB value.
- leftmargin: margin left of the text.
- topmargin: margin top of the text.
- spacing: interline spacing.
- textwidth: defines the width of the area filled by the text
- textheight: defines the height of area filled by the text
- textimages: defines a path where you can place images for each caracter on the text. Example: textimages="setups\Touchflo3d\icons\tf3d\numbers\#$char#.png" where #$char# will be replaced on the path for the character.
Example:
Code:
<text text="#$date,HH:mm:ss#~#$date,dd/MM/yy#~#$date,ddd#" fonttype="12,true" fontcolor="255,255,255" leftmargin="10" topmargin="10" spacing="-10" rowspan="3" width="100"/>
clock: must be inside a row or a footer. Inherits all the attributes of the icon. Can contain the following tags:
- hours
- minutes
- seconds
Each of those tags can contain a color attribute with the color in RGB for the line. If some of those tags is not especified, the respective line will not be shown.
Example:
Code:
<clock name="clock" path="clock.png" rowspan="3">
<hours color="0,0,100"/>
<minutes color="100,100,200"/>
<seconds color="160,160,255"/>
</clock>
allcontactswithphoto: must be inside a row or a footer. Will display all contact with photo matching the criteria in the attributes and assigned to the category "ThrottlePhotoDial".
- name: name of the tag element.
- categoryfilter: comma separated list of contact categories to be included on the filter.
- showcategories: If true will automatically show a separator for each category containing contacts.
- max: max number of contacts to display.
- width/height: define the diaplay size of the contact photos.
- All contacts with photo tag may contain two special icons with this two exec values: ":addcontact",":removecontact". This icons will open a contact selecting dialog allowing to choose a contact to asign or remove the "ThrottlePhotoDialer" category.
Example:
Code:
<allcontactswithphoto height="80" width="60" max="100" showcategories="True" name="Group unnamed">
<icon name="New Contact" exec=":addcontact" rowspan="1" height="80" width="80" path="setups\Default\icons\contact_add.png" />
<icon name="Remove Contact" exec=":removecontact" rowspan="1" height="80" width="80" path="setups\Default\icons\contact_del.png" />
</allcontactswithphoto>
lastapps: must be included inside a row or a footer. Will display the last 12 apps executed (same shown in the start menu). Can include the following attributes:
- name.
- zoom: will zoom the icons if different than 1.
Example:
Code:
<lastapps zoom="1" name="Group unnamed" />
runningapps: will display the running apps icons. The following attributes can be included:
- name.
- zoom: will zoom the icons if different than 1.
Inside you can especify the app's to exclude from the list by using the exclude tag as shown in the example.
Example:
Code:
<runningapps zoom="1" name="Group unnamed">
<exclude name="\Windows\shell32.exe" />
<exclude name="\Windows\cprog.exe" />
<exclude name="\Windows\repllog.exe" />
<exclude name="\Windows\gwes.exe" />
<exclude name="\Windows\filesys.exe" />
<exclude name="\Program Files\ThrottleLauncher\ThrottleLauncher.exe" />
</runningapps>
continued....
folder: this will add an icon for each file cotained in the specified folder matching the pattern if any.
- zoom: zoom to be aplied to the icons.
- path: path of the folder to load. If the folder path is on the registry, you may specify the registry path (sample: HKEY_LOCAL_MACHINE\Explorer\CrossPlatformNavigationURL).
- pattern: pattern to be used to filter the files.
- recursive: indicates wether to look into subfolders (any subfolder loaded will generate automatically a spearator named as the folder).
- name
plugin: this is used to include a today plugin inside the main app (not the today plugin).
- name: name of the plugin to be used. Importan the name MUST be the name of entry in HKEY_LOCAL_MACHINE\Software\Microsoft\Today\Items\. ONLY PLUGINS BASE ON DLL's WILL WORK.
examples:
Code:
<plugin name="ADBWeatherPlus"/>
<plugin name="rlToday"/>
<plugin name="HTC Home"/>
<plugin name="BatteryStatus"/>
-throttleplugin: with this tag you can include 3rd party plugins for throttle launcher. For example you can include flash using the following:
<throttleplugin name="Reloj" path="#$THROTTLE#\Plugins\Flash\FlashPlugin.dll" height="90" class="FlashPlugin.FlashThrottlePlugin">
<param name="movie" value="#$THROTTLE#/Setups/Touchflo3dFlash/TWolf/Clock/horas_28_LITE.swf"/>
<param name="width" value="240"/>
<param name="backgroundpath" value="#$THROTTLE#\Setups\Touchflo3dFlash\TWolf\Clock/fondoReloj.jpg"/>
</throttleplugin>
Skins
Skins are based on xml file as config.xml does. Skin xml file may only contain param tag placed inside the root tag. All the params are optional, so if you don't need one, don't especify it!!
All files refenced by the skin.xml need to be placed on the same skin folder.
Params tag format is the following:
Code:
<param name="name" value="value"/>
The allowed names and it's values meanings are:
- trasparency: will allow trasparency for the skin. This means that if the skin is applied to a row the row background will be filled with the main setup skin texture.
- pagebackcolor: backcolor to be used as page background (only used for main setup skin).
- rowbackcolor: backcolor to be used on the rows (this will be used as the trasparent color if trasparency is specified).
- texture: relative path to the texture image to be used as page background.
- rowtexture: relative path to the texture image to be used as rowbackground.
- buttonback: relative path to the back image to be used on all clickable elements.
- selectionimage: relative path to the hover image to be used when an element is selected.
- buttonbackmargin: margin to be used between the buttonback image and the main element image.
- fontstyle: font style for the text displayed for example in the separators or the contact names. Two formats can be used: "size, bold" or "size, bold, fonttype".
- linecolor: color to be used for lines. Must be specified in an RGB value.
- textcolor: color for text. RGB
- osdtextcolor: color for OSD text. RGB
- osdbackcolor: color to be used as the OSD back color. RGB.
- osdfontstyle: font style for the text displayed in the OSD. Two formats can be used: "size, bold" or "size, bold, fonttype".
reserved.......
reserved.....
Thanks, APBilbo, for sharing this. Really appreciate your help towards the community.
Thanks a lot!!! I really love this app. Its the best one I have found so far. I would be surprised if Verizon and T-mobile dont start using this in the phones they sell...
I wish I had the time to create using ThrottleLauncher, I guess I'll leave it up to the pro's. Thanks for sharing your knowledge.

Sygic McGuider optimization

just got my HD last week and now i am trying several route navigation software to see which i like best.
I installed several: Sygic McGuider, iGO8 and Route 66 but on all i experienced lag on GPS position. In another thread i found a regfix which i got working for iGO8 (almost no lag anymore), but i used to navigate with Sygic McGuider.
Got the latest version of McGuider recently (770 build 1073D) but for some reason not only i experience GPS position lag on it (still not on iGO8) and the whole app seems rather slow. While driving the screen seems sluggish and there is some slow response in the menu.
I anyone has a lagfree and response version of mcguider running please post your settings file so we can all benifit.
here's mine
Code:
[Application]
title=Sygic DRIVE
name=Sygic
version=704400
fps=8.0
; Define custom splash screen
splash=mcguider
; bacground color of spash screen (hex), defaul = 000000 black
splashBgr=#000000
; If true center image of splash is stretched
CenterStretch=false
; Move center image of splash screen to different position (TL, TR, BL, BL) C = no moving
CenterMove=L
memory=high
swVersion=7.7010
; topMost=true -> no other application will appear above navigation
; topMost=false -> other applications (e.g. MP3 player) can be displayed above navigation window
topMost=false
[Drivers]
; Select driver (defines assignment of keys, backlight, com port handling and more)
Driver=ppc\driver.dll
; Do not use the below
Device=ppc\sdcard.dll
[Default]
; com=[COM1:,9600 | autodetect]
com=autodetect
; antialiasing means displaying smooth maps. Setting it to 'true' can rapidly slow down some devices
antialias=true
; initially turning on (poiVisible=true) or off (poiVisible=false) some POI categories
poiVisible=false
[Settings]
processing=fribidi
;Set color mode for output Display default mode is RGB565 other are RGB555 and BGR555
colorMode=RGB565
; In case of multiple platforms, when sharing of Resources is required.
; Path to folder with resources (GpsLogs, Icons, Itinerary, Skin, Sounds, Voices)
ResourcePath=\..\..\res
; Path to folder with maps
MapPath=\..\..\maps
; Settnings for First run wizard
;enable new VOlume system
NewVolumeSys=false
;MaxSpeed=190
;VolumeFactor=2.0
;select *.lang file from Skin folder
language=English.lang
languageAsk=true
;select folder name from Voices folder
voice=English
voiceAsk=true
;select one of kilometer or mile
unit=kilometer
unitAsk=true
;select one of europe, us or uk
time=europe
timeAsk=false
;select one of degrees, minutes or seconds
coords=degrees
coordsAsk=false
;use combination of digits
;1=ROMAN 2=CYRILLIC 3=GREEK 4=ARABIC 5=HEBREW 6=THAI 7=JAPANESE 8=CHINESE 9=KOREAN
keybList=1
keybListsAsk=false
;select one of QWERTY, QWERTZ or AZERTY
keybTypeRoman=QWERTY
;select one of PINYIN, ZHUYIN or HANDWRITE
keybTypeChinese=PINYIN
;select name of *.mlm file
map=McGuider 2009.mlm
mapAsk=false
;select coordinates for first run of Browse map
;Latitude in deggrees: Zero = Equator, +90 = North Pole, -90 South Pole
;BrowseMapLat=+49.0
;Longitude in degrees: Zero is Greenwich + East, - West,+180 = -180 = International date line
;BrowseMapLong=+21.23
;Initial zoom level on Browse map, e.g. 45000000 for Globe view
BrowseZoom=45000000
;Enable route computing after restart. Applicatio will compute the last computed route.
RouteComp=enable
; Set to true, if menus are operated by hardware buttons
; If set to true, then menus apear with pre-selected first item
; menuCursor = true | false (default)| autodetect
menuCursor=autodetect
; Sets style of keyboards: "visible" keyboards are for touch screens,
; "cursor" keyboards are for remote-control operated black boxes, and
; "invisible" keyboards are for mobile phones with their own hardware keyboard
; VISIBLE (normal)
; CURSOR (normal+arrows, small keyboard)
; INVISIBLE (dialog buttons)
; AUTODETECT ( if HW keyboard is detected = invisible, if not = visible)
keyboard=autodetect
; System timezone (GMT + timezone = your domestic time), specify time shift in minutes (e.g. -180 for GMT-3h)
; Used for time synchronization
; Enter one of the values from Skin\timezone.ini
timezone=+00:00_a
; hasClock=true (The device does have internal clock source, default) | false (compute clock from GPS GMT time and specified timezone)
hasClock=true
; if autosync=true, system time is set after first valid fix from gps time
; hasClock=true && autosync=true - only system time , system time set from gps after fix
; hasClock=true && autosync=false - only system time
; hasClock=false && autosync=true - system time + time zone, system time set from gps after fix
; hasClock=false && autosync=false - gps time + time zone
autosync=false
recommendedRam=10.0

[JMLToday, JMLLibrary 09/08/04]Wishlist for next versions

Hi to @all (also to people who wants to learn MortScript)
we want to enlarge the library of MortScripts for the JMLLibrary and JMLToday, which gives the Skins of JMLToday much more possibilities.
For JMLToday: That's not a job for a mortscript - but which wishes are better direct in JMLToday - and which are better in JMLLibrary - we will see.
Fo JMLLibrary: I hope there are some people who can help - I give it a try.But I can't do it alone - and I think everybody has other wishes, which his personal Skin should provide to him. The last 4 days it was almost 800 times downloaded here and in France,Germany - and the feedback was great! And also the new wishes. Some of them will come with the next versions, some will be soluted by the JMLLibrary with MortScripts - so that every skinner has a bundle of nice toys for his skin.
In this Thread I want to collect the wishes - and the MortScript-Solutions.
At first (if you still don't have it ) you need JMLToday - WM6.5-Titanium-Plugin: *View and Download JMLToday*
And then you need the Library and an example how it works.
The Skins and some needful descriptions you can find by using the link in my signature and also the description of the Standard-JMLToday-Settings in Registry (Post #3 in JMLToday-Download-Thread)
To make a Script easy - you only need this example - and for the Library we only need Post#1 and #2 - and there's also the default JMLLibrary as .cab-Download in #2:
Example for developing an easy mortscript for JMLLibrary & Download
And now only the collection of some wishes, I've read so far, which could be made (but too much for one person alone) . Of course every developer will all-times mentioned in the library
-----------------------------------------------------------------------
Here's the wishlist & Hall of Fame :
1. Change Titanium-Background by weather
Name: WeatherBeackgroundChanger
Description: Should Change the Titanium-Wallpaper according to the current weather.
Status: DONE by me
Development-Post/Thread: *here*
In JMLLibrary added since Version: 0.1
+++++++++++++
2. Add new Weather-Values for a second Town
Name: SecondWeatherTown
Description: Should read the weather for another town again and sets new Registry-Strings in Page1 and Page2, that the Skinners can access it.
Status: Searching for Developer (Complexity factor: easy-middle)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
3. isNight?
Name: isNight
Description: Should only have a look at the current time, and if it's between 8 pm and 6am - it should set a registry-Key in JMLToday on "1", otherwise on "0" So the skinner can make differences with his JMLSpecial in Enlightment or Clock-/Icon-/Whatever-Color between Day and Night.
Status: DONE by MichelDiamond (Complexity factor: easy)
Development-Post/Thread: *here*
In JMLLibrary added since Version: 0.2
+++++++++++++
4. Get more Information in weatherforecast
Name: getMoreWeatherInfo
Description: The Feed which is used for weather doesn't provide too much information, but some people wants to know something about morning,noon,afternoon,evening. In msn-weather there is - by using the same weather-code - a longer Feed, where this informations can be found.
Therefore the "jmlmeteo" must be taken and renamed to getMoreWeatherInfo - and read the multilanguage-feed. Perhaps some new Lang.Ini-Entries are necessary-perhaps not. Then this additional informations should be set in new registry-entries in Page2 of JMLToday
Status: Searching for Developer (Complexity factor: middle-hard)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
5. Set Main Stock Value
Name: setMainStockValue
Description: Therefore you need the installation of JMLStocks, too ( *here in xda-devs* ) There's a registry-Key for the top-most-stock, which a User choose (in CondensedPage of JMLStocks - the Values: PluginLabel,Pou,Vaj)
These 3 Values should be written in one String and added to a new registry-key in JMLToday.Page1 - so that the user could see the current Value.
Status: Searching for Developer (Complexity factor: easy-for beginners good start)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
6. Update JMLStocks
Name: updateJMLStocks
Description: Therefore you need the installation of JMLStocks, too ( *here in xda-devs* ) Sometimes it's boring to update everything - why not by one click, if you update your weather? Only should look for the current installation and start the update.
If a Skinner uses this - on each update of the weather - the stock vlues will be also updated (in combination with "isNight" only over the day )
Status: Searching for Developer (Complexity factor: very easy-for beginners good start)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
7. Update TitaniumWeather
Name: updateTitaniumWeather
Description: Therefore you need the installation of TitaniumWeather. Sometimes it's boring to update everything - why not by one click, if you update your weather? Only should look for the current installation and start the update.
If a Skinner uses this - on each update of the weather - TitaniumWeather should be updated as the same time (in combination with "isNight" only over the day )
Status: in work by aaronpoweruser (Complexity factor: very easy-for beginners good start)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
8. Update QuickGPS
Name: updateQuickGPS
Description: Therefore QuickGPS must be installed. And QuickGPS needs update - but in Titanium you forget it - and then your device needs long time to find the satellites - why not by one click, if you update your weather? Only should look for the current installation and start the update.
If a Skinner uses this - on each update of the weather - perhaps it should be an additional registrykey, that QucikGPS will only Run once a day - otherwise, no call
Status: Searching for Developer (Complexity factor: easy-for beginners good start)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
9. isBatteryCritical20
Name: isBatteryCritical20
Description: Should have a look if the Load of Battery is lower than 20% - then set an Registry-Key in JMLToday on 1 - otherwise 0.
Looks senseless, ey? Isn't it - the skinner could stop execution of JMLSpecial because of this - and doesn't allow further updates, which cause Battery Drain. And especially if we have an automatic update-feature with 5.3...
Status: Done by TrashMan (Complexity factor: easy)
Development-Post/Thread: *click*
In JMLLibrary or JMLToday added since Version: JMLLibrary0.3
+++++++++++++
10. isBatteryVeryCritical10SwitchOff
Name: isBatteryVeryCritical10switchoff
Description: Should have a look if the Load of Battery is lower than 10% - then set an Registry-Key in JMLToday on 1 - otherwise 0. And: Switch off WLAN!
Looks also senseless, ey? Isn't it - the skinner could stop execution of JMLSpecial because of this and WLAN is turned off - and doesn't allow further updates, which cause Battery Drain. And especially if we have an automatic update-feature with 5.3...
Status: Searching for Developer (Complexity factor: easy)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
11. setSportsScore
Name: setSportsScore (Parameter: Internet-RSS-Feed-URL)
Description: It's a bit crazy and I have no idea which RSS-Feed could be take - perhaps we need some more Names. It should only read the feed of a sports-event and read the current result during a game (Superbowl, FinalGame in Soccer, whatever? )
Then it should set one text-Registry key with the Names of the oppenents and the current stand - and also 4 Image-Registry-Keys HomeStand1,HomeStand2 and VisitorStand1,VistorStand2 - where is the result as c1.png.. (using the graphics of digital clock )
The skinner can perhaps switch during a game the clock as result table or whatever he has ideas.
I think it's not hard to develop, but it's hard to find good feeds and a concept, when what should be transfered
Status: Searching for Developer (Complexity factor: ?)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
+++++++++++++
Further ideas welcome!
But especially welcome: Developers for the stuff Makes fun - please support your skin
Ok - one new little thing - with screenshot to explain:
12. Next Alarm within the next 24 hours?
Name: nextAlarmWithin24hours
Description: If you use some Alarm-Programs - the next alarm is always setted as enabled - and so the Icon "AlarmPng" makes no difference (look at ScreenShot - red arrow points to AlarmPng). So this Script should only count, if the next Alarm is within the next 24 hours. If yes - set a new registry key in JMLToday to 1 otherwise 0. So the skinner can use another (e.g. with more opacity) Image to make a difference
Status: Searching for Developer (Complexity factor: easy)
Development-Post/Thread: -
In JMLLibrary added since Version: -
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
+++++++++++
13. Auto-Update more than 1 time a day for5.3
Name: autoupdateschedule
Description: The Skript should only change the next update time during an update according an registry key or another text-file. So you can have updates as often you like.
Or Scheduler direct in JMLToday - e.g. like UNIX crontab
Status: perhaps in already JMLToday 5.4 (Complexity factor: quite easy)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
14. supply Panel with Informations of RAM and so on
Name: SupplySystemPanel
Description: Compare: *click* - the Script should only write the informations to Registry. Perhaps on Page3 or on Page2, too. In Combination with a Skin/JMLSpecial, there could be provide additional Graphics.
Status: Searching for Developer (Complexity factor: easy or middle - how you like)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
15. Master Date Format for all Languages - configuration direct in Registry
Name: MasterDateFormat
Description: Compare: *click* - there should be in Registry a "MasterDateFormat" - available for Page1 and 2. Which is to set in Registry how it looks (standard Windows API) - so every Skin can independent of Country be assure, that it has the correct size.
Status: will be done by JMHL
Development-Post/Thread: *click*
In JMLToday added since Version: Will come with 5.4
16. Slideshow in Page1
Name: Slideshow
Description: Compare: *click* - only define a new registry-key - which points to a directory with graphics - another Registry key - which makes the update-intervall - controlled by JMLToday (Refresh-Rate? Perhaps extension for JMLToday and the rest in Library?)
Status: Searching for Developer (Complexity factor: easy - middle - how you like)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
17. Check a Skin for it's resolution
Name: checkSkinsResolution
Description: Before installing a skin, it should be checked, which Resolutions are possible, otherwise it won't be installaed. Perhaps above this: Only show this skins, which have the correct resolutions. (Little hint to .plg Resizer included - each Skin CAN EASY work with each Resolution - depenends on the skinner, if he has used this needful tool before sharing)
Status: JMHL
Development-Post/Thread: -
In JMLToday added since Version: -
18. Get Appointments
Name: getAppointments
Description: Should get the Appointments of the next 7 days from Calendar into Registry-Keys. Perhaps no to do with MortScript (Win-API?)
Registry-Keys are free - mustn't be in JMLToday - perhaps "/HKCU/Software/JMLLibrary/Appointments"
Date Time Subject in one key and in 3 different keys.
Status: Searching for Developer (Complexity factor: middle)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
19. Small Apps for some purposes
Name: <different names>
Description: Apps to make an interface to notifications and buttons - to toggle special calls
Status: in work by MichelDiamond (Complexity factor: middle)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
20. Possibility to change volume by JMLToday
Name: VolumeControl (VolumeControlMute, VolumeControlNormal, VolumeControlLoud)
Description: See: http://forum.xda-developers.com/member.php?u=1152216
I think 3 scripts, which all change the Volume according to their name, would do the job.
Will be called by Buttons, if the Skinner adds them to his skin.
Status: Searching for Developer (Complexity factor: quite easy)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
21a. Add new Key for Birthday Reminder
Name: showNextBirthday
Description: JMLToday already has a special File for Birthday - and would show it in "Saint". But if somebody doesn't use "Saint" in Skin - then he wouldn't see it - and so a new Key would be good, to show it. And should be configurable perhaps like one week before"
Status: Searching for Developer (Complexity factor: quite easy)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
21b. Add Configuration Surface for Birthday Reminder
Name: configureBirthday
Description: JMLToday already has a special File for Birthday -but instead of editing the text file, it would be better a user could call a surface to add/delete/edit the Birthdays (showing by 21a) - Developing Language indifferent - but nothing which needs .net
Can be also made in VB, C++ or even Mortscript
Status: Searching for Developer (Complexity factor: easy-middle)
Development-Post/Thread: -
In JMLLibrary or JMLToday added since Version: -
Further Wishes:
*different wishes from Jumba - not to forget!*
Please! We need for this mostly really easy MortScripts some people, who can help! Would be really nice
.
.
MichelDiamond said:
3. isNight?
Name: isNight
Description: Should only have a look at the current time, and if it's between 8 pm and 6am - it should set a registry-Key in JMLToday on "1", otherwise on "0" So the skinner can make differences with his JMLSpecial in Enlightment or Clock-/Icon-/Whatever-Color between Day and Night.
Status: In work by MichelDiamond (Complexity factor: easy)
Development-Post/Thread: -
In JMLLibrary added since Version: -
Click to expand...
Click to collapse
Boah, this was hard - I know now, why nobody could make it ... ok - I did it on my own:
Code:
# Made by MichelDiamond, 02.08.09
# Version 1.0
# Description:
# Set RegistryPath "HKLM", "Software\Microsoft\CHome\JMLToday","isNight" between 8:00pm and 6:00am (5:59am) on 1 otherwise 0
# e.g.to make a "day clock" & "night clock"
...
############################## start code
# Read in 24h-Format to make it easier to check
curHour = FormatTime( "H" )*1
if ((curHour > 19) OR (curHour < 6))
RegWriteString ("HKLM", "Software\Microsoft\CHome\JMLToday","isNight",1)
else
RegWriteString ("HKLM", "Software\Microsoft\CHome\JMLToday","isNight",0)
endif
exit
Will test it and could be added then to next JMLLibrary
<for later use> Perhaps: Notes for wishes in future JMLToday / JMLLibrary - Versions
My wish for a next version is, a third panel like the system panel from Twolf.
What's the content of the system panel?
You see the free ressources from system or the free space of memory and so on. You know what I mean. The second picture.
http://forum.xda-developers.com/showthread.php?t=523015
added wish 13 and 14
edit of edit : 15, 16 and 17, too
I would like to help out writing some scripts & themes for JMLToday but am having problems finding a list of system variables etc or a concise description of how JMLToday works.
I understand MortScripts do the work but what variables can be refered to in skins? (where is the counter for unread VoiceMail for example)
How does the plugin know when to update its display?
Hi - and thanx in advance
On Post #2 and #3 of JMLToday-Thread (http://forum.xda-developers.com/showthread.php?t=540413) you will find the information how it is organized.
In http://forum.xda-developers.com/showpost.php?p=4198290&postcount=6 you will see that the Registry entries correspond with the displayed items. (CHome-Editor)
And in the example for JMLLibrary ( http://forum.xda-developers.com/showthread.php?t=541434 ) you will see, how this can be modified.
But: You mustn't know that all at first to help - you can tell me, which mortscripts you would like to develop - and then I will gie you the informations, you need to know, to get it. With the time you will understand the system more and more - and that's not very complicated, how Titanium / JMLToday/JMLSpecial/JMLLibrary works.
Only tell me, which "wish(es)" of the list (or you have another "wish" ) would be interesting for you - then we get in contact by Private Message or Messenger - and you will see,that it's easy. OK?
One recommendation: Have a look with CHome Editor to JMLToday (Manual Edit Item Values) - you will see all Registry Keys,which are available - and beause of their values, you will see, what they are doing.
For all things: I will help you.
Thank you very much for the offer!
Micha
EDIT: I've oerseen a question:A change in Registry of Page1 and Page2 will be recognized by Titanium in short time (Titanium is Windows-Driven - internal notifiations) - and to force it - there's a key "updated" in each Plugin. So: This direction (display update) is full-automatic made by Windows
The other direction... to catch notifications (SMS,...) - that's be done by JMLToday-Internal (a lightweight C++-Exe)
Here are my suggestions for JMLToday/JMLLibrary
1. Support for animated .pngs (for the weather etc.)
2. Some sort of option to rotate the screen then refresh titanium 3 seconds later. This will be very helpful for those who always have to refresh it manually because of screen corruption (i.e. Omnia).
3. A third/fourth panel. I'm sure this already planned.
4. A script that will let users easily switch between different clocks/weather icons/system/battery icons via a menu - i.e. without having to reinstall the cabs.
5. The ability to Update JMLToday without updating the weather.
6. Install to Storage Card
7. I'm sure I'll think of a few more...
Thank you I will make some comments after a first glimpse:
1. Support for animated .pngs (for the weather etc.)
Unfortunately Titanium in current version doesn't accept .gifs - so sequences are needed.
For weather... little bit harder... at first Clock
2. Some sort of option to rotate the screen then refresh titanium 3 seconds later. This will be very helpful for those who always have to refresh it manually because of screen corruption (i.e. Omnia).
Mortscript in Library which can be called by Button-Press or Context Menu - would be ok?
3. A third/fourth panel. I'm sure this already planned.
yes But with some organisation - otherwise we'll get mess in Skins
4. A script that will let users easily switch between different clocks/weather icons/system/battery icons via a menu - i.e. without having to reinstall the cabs.
not only a script...
5. The ability to Update JMLToday without updating the weather.
Good idea!
6. Install to Storage Card
Titanium Plugins must be located in Main Storage.
But the Concept of JMLLibrary - you know it already - makes a difference between "essential" and "common" - so that bigger things can be swapped out later, if we see the need.
The same could be made for unused Images in JMLToday. Will take some versions, but if it will be necessary - we will react of course - everything for that is considered.
7. I'm sure I'll think of a few more...
I'm sure, too
thank you
Micha
i will do 13 and 7 just give me some direction i am new to programs in moretscrip but i can do file copies and what not and am experanced with visual basic and a lil c
Cool! Thank you.
But with 13 - I have to wait for feedback from JMHL, because I think he has already integrated in next version (He's on holiday at the moment)
But with your experience - a mixture of MortScript and the other development-languages - could you have a look for 18?
And so - simply contact me by PM for any question to the development.
Thx
Micha
Hi,
Could it be possible to have a volume control directly in JMLtoday plugin with normal volume, Vibrate and silent.
Hi.
about 14...
after some research on hs++ i found out that it was a dead way because it uses it's engine for sys data.
rltoday is more old fashion and uses mortscript. i found some interesting data in my old skins.
later today i will try to post it here.
EDIT: these mscr were taken from a rltoday skin made my Klob available at rltoday forum.
they need to be edited to work with new devices(storage,etc)
isBatteryCritical20
My first MortScript! (I hope it works properly )
Should we be creating String values in the registry? Do they take up more room than DWORD?
Code:
# Version 1.0
# Description:
# Set RegistryPath "HKLM", "Software\Microsoft\CHome\JMLToday","isBatteryCritical20" to "1" if battery is less than 20% otherwise set to "0"
# Read battery value from registry, value returned is n% where n = 1 to 100
BattPcnt = RegRead("HKLM", "Software\Microsoft\CHome\JMLToday\page1","BattVal")
# Remove the % symbol from the value
BattPcnt = Part( BattPcnt, "%", 1, TRUE)
# Is battery value < 20?
if (BattPcnt < 20)
# If so set registry to "1" (If the key doesn't exist it will be created)
RegWriteString ("HKLM", "Software\Microsoft\CHome\JMLToday","isBatteryCritical20",1)
else
# Otherwise set registry to "0" (If the key doesn't exist it will be created)
RegWriteString ("HKLM", "Software\Microsoft\CHome\JMLToday","isBatteryCritical20",0)
endif
# All done....run away!
exit
Not working
I don't manage to get any analog clock working. When i install a analog clock, and activate a analog clock theme (actually only the original theme works), the plugin disapears. How can i solve this?
solox said:
I don't manage to get any analog clock working. When i install a analog clock, and activate a analog clock theme (actually only the original theme works), the plugin disapears. How can i solve this?
Click to expand...
Click to collapse
Wishlist for next versions - Please post your question in the other tread. I think you have the wrong resolution for your skin.
As has been mentioned, please make sure you are using the correct resolution. Unless you are using a Samsung Omnia do not use the WQVGA version. Use the All_Res one instead. And yes, please post skin-related questions to the other thread, thanks.

WatchMaker formula and help Thread

Hi,
watchmaker (Link) is a great tool and simple faces are created quickly, but we need more.
with formulas is much more possible and I want to collect them here.
regards
starbase64
example clock > http://facerepo.com/app/faces/details/chronograph-by-starbase64-iv-14a70b5fa2b
rotate "WA" battery:
Code:
-{bl}*360/100
WA battery icon:
Code:
'{bc}' == 'Charging' and 7 or {bl} >= 90 and 1 or {bl} >= 70 and 2 or {bl} >= 50 and 3 or {bl} >= 30 and 4 or {bl} >= 10 and 5 or 6
rotate "PH" battery:
Code:
-{pbl}*360/100
PH battery icon:
Code:
'{bc}' == 'Charging' and 7 or {pbl} >= 90 and 1 or {pbl} >= 70 and 2 or {pbl} >= 50 and 3 or {pbl} >= 30 and 4 or {pbl} >= 10 and 5 or 6
rotate seconds circle:
Code:
-{drss}
rotate minutes circle
Code:
-{drm}
rotate minutes circle
Code:
-{drh}
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
example clock > http://facerepo.com/app/faces/details/summer-time-14acd7a68f6
watch battery in percent
Code:
{blp}
wacht battery in percent with opacity > if lower 15 percent (copy this code to opacity setting)
Code:
{bl} < 15 and 100 or 0
wacht battery in percent with opacity > if lower 50 percent (copy this code to opacity setting)
Code:
{bl} < 50 and 100 or 0
wacht battery in percent with opacity > if charger connectet (copy this code to opacity setting)
Code:
'{bl}' == 'Charging' and 100 or 0
works also with phone battery {pbl} and {pbc}
you need 4 battery in percent letters with various opacity formula.
example clock > http://facerepo.com/app/faces/details/mechanic-v-14ad47f4ec5
this formula show or hide a pic in a defined time:
Code:
{dh23}<=18 and {dh23}>= 6 and [COLOR="Red"][B]50[/B][/COLOR] 0 or
example: a black square with this formula in opacity setting, will dim your clock at night.
The red number is the opacity setting, higher = stronger
example clock > http://facerepo.com/app/faces/details/night-and-day-ii-14adcd8cb74
change background automatically with sunrise and sunset...
copy formula to opacity from the second image (opacity for the first image =100):
Code:
{wsrp}>={dtp} and 100 or {wssp}<{dtp} and 100 or 0
thanks to Klaus Koehler (G+) for helping to find the right formula
Help creating formula in watchmaker:
1) formula for showing wind chill . Formula for metric wind chill calculation:
Twind_chill = 13.12 + 0.6215*T - 11.37*(v0.16) + 0.3965*T*(v0.16)
T=temp, V= windspeed.
2) Formula, showing arrow up when rising temp (or barometric pressure), arrow down, falling temp/barometric pressure. No ide how to create this....if possible...
example watch > http://facerepo.com/app/faces/details/night-and-day-iii-14ae9343b9c
blinking text for temperature lower than 4C°
Code:
{ds}%2 == 0 and 100 and {wt}< 4 and 100 or 0
Copy code to opacity setting!
@espenjoh
no idea at the moment
To show a Different Day of the Week
This code will show tomorrow's day of the week in 3 letter day of the week form.
{ddw0}==0 and 'Mon' or {ddw0}==1 and 'Tue' or {ddw0}==2 and 'Wed' or {ddw0}==3 and 'Thu' or {ddw0}==4 and 'Fri' or {ddw0}==5 and 'Sat' or 'Sun'
Copy code into text field.
This piece of code is very useful at rotating a sun/moon cycle indicator. But this does not simply imply the sun rises at a quarter of the day and sets at 3 quarters, in stead the sun rises and sets just like in real life.
Code:
{dtp} < {wsrp} and (-180 + ({dtp}/{wsrp})*90) or {dtp} <= {wssp} and (-90 + (({dtp} - {wsrp})/({wssp} - {wsrp}))*180) or {dtp} <= 1 and (90 + (({dtp} - {wssp})/(1 - {wssp})*90))
This can be used at indicators where at 0° the sun is at his highest point.
Some self-made examples are:
http://facerepo.com/app/faces/details/epic-sun-moon-cycle-clock-14b06fdac8c
http://facerepo.com/app/faces/details/steampunk-2-14ad939e2b3
http://facerepo.com/app/faces/details/steampunk-14aaa686824
---------- Post added at 12:09 PM ---------- Previous post was at 11:48 AM ----------
This rotates objects according to gravity, but it doesn't work a hundred per cent and needs improvement. Anyone any ideas?
Code:
{say} > 0 and ({sax}+10)/20*360/2+270 or {say} <= 0 and 360-({sax}+10)/20*360/2+270
Example: http://facerepo.com/app/faces/details/andy-with-moving-arms-14ae3ad326a
Probably not correct place to post but haven't had any luck elsewhere. I would like to use the Style Clock 1 on my gear s but use my own background. cant find location of that clock to do so. Can someone please point me in right direction
@lusciousbeard
open watchmaker tap on the clock an choose "Customize Copy"...
starbase64 said:
@lusciousbeard
open watchmaker tap on the clock an choose "Customize Copy"...
Click to expand...
Click to collapse
I want to use the stock clock that comes with gear manager. Its called Style clock 1. I just want my own background with that clock.
Don't know if this is a a forumla but trying to change the watch face based on a variable.
In tasker have WM Change Watch plugin selected, select which watch face and If %Batt <65%
The attempt is that when the battery is 65% or less the watch face changes
I'd like to add a second location and the current forecast for that location.
formula for celsius and fahrenheit in same clock.
F = ({wt}/5)*9+32
C = (({wt}-32)/9)*5
Is it possible to display active tasker profiles etc. ?
Can someone help, I want to make a few different sub dials. How can I change the rotational value for the watch and phone battery to be 160 or so degrees instead of following a full 360. I want to split the dial with two hands, have each devices battery on the dial, once for each side. The left side having and Full down to Empty running from the 11 Oclock spot down to 7, then mirroring the other side for the other battery
The second dial I wanted a 360 - 7 point where the hand changed each day (for day of week dial)
I am not the best at writing code and was having trouble figuring out how to write this
I realize your post is 4 months old, but . . .
mikeschevelle said:
Can someone help, I want to make a few different sub dials. How can I change the rotational value for the watch and phone battery to be 160 or so degrees instead of following a full 360. I want to split the dial with two hands, have each devices battery on the dial, once for each side. The left side having and Full down to Empty running from the 11 Oclock spot down to 7, then mirroring the other side for the other battery
Click to expand...
Click to collapse
It's a math problem. x/160 = y/360.
y is the rotational value based on a full circle ({drs}, {drm}, or {drh} in watchmaker)
x is the rotational value based on your 160 degree arc. If you solve for x, you get x=.444y
so you can enter the following in a rotation field to get any object to show seconds over your 160 degree arc:
Code:
.444 * {drs}
The second dial I wanted a 360 - 7 point where the hand changed each day (for day of week dial)
Click to expand...
Click to collapse
360/7 = 51.429, so each day would be 51.429 degrees. Set your rotation value to:
Code:
{ddw0} * 51.429
In the Watchmaker Reddit, I posted about saving battery life https://www.reddit.com/r/WatchMaker/comments/3liwww/tips_to_improve_battery_life/
I noticed that I was losing 5-6% battery life per hour with a watchface I made. When I switched to a very simple face with no bells and whistles, I lost closer to 3% per hour. I did some experimenting to figure out how to reduce battery usage with my more complicated face. Here's what I learned:
- Watchmaker still executes positioning code for elements that are not visible. For example, if you enter "{ds}+2" as the rotation for an element that is only visible in bright mode, watchmaker will still do the math once a second while it's in dim mode.
- How frequently an object updates is determined by what watchmaker tag is in the object properties. If no tag is in the properties, it will not update. So if you set the rotation of a hand to "{ds}+2" watchmaker will do the math every second and the hand will move every second. Now lets say you create a function called var_ds() that returns the {ds}+2. Setting the rotation of the hand to "var_ds()" will cause the hand not to rotate. There is no watchmaker tag in the rotation field, so the function is never called and the rotation value never updates. Setting rotation to "var_ds({ds})" will cause the function to be called and the hand to rotate every second. Setting rotation to "var_ds({dm})" will cause the function to be called and the hand to move once a minute - even if the function is still returning values based on {ds}.
Using this info, I was able to come up with some possible optimizations to improve battery life:
1) If you're using lots of math or code to place an object, add "if is_bright" to your code so that it won't be executed while the screen is dim. If you do this, you should initialize the variable is_bright to 1 to prevent weirdness.
2) To control the frequency of updates, stick your code in a function and call it with a tag that represents the frequency you want. For example, I wanted my minute hand to stop on minute marks rather than move smoothly. I wrote a function:
Code:
function var_rotation (r)
return 6*math.floor({drm}/6)
end
The "r" variable is never used in the function, but it lets me control how often the function is called. Previously when I used "6*math.floor({drm}/6)" directly as a rotation value, the expression was evaluated whenever {drm} updated - I'm guessing at least once a second - even though the hand was only actually moving once a minute. Now, my rotation value is var_rotation({dm}). The {dm} causes my function to be called only once a minute which makes a lot more sense for a hand that's only moving once a minute
3) If I had multiple objects using var_rotation() to rotate, I might add a conditional statement to make sure the bulk of the code only runs once a minute:
function var_rotation (r)
Code:
if not (var_lastran == {dm}) then
var_result = 6*math.floor({drm}/6)
end
return var_result
end
If there is a recent result, this simply returns that result instead if recalculating it. If the result is older than a minute, it calculates a new result.
For the particular watchface I was working on, only optimization #2 applied, but based on my initial testing, I'm down to around 3% battery/hour. Hopefully this info helps someone else
Click to expand...
Click to collapse

Categories

Resources