This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
hbomb79's profile picture

Titanium - Graphical User Interface (GUI) Framework [Beta 1] - XML

Started by hbomb79, 14 October 2016 - 03:16 AM
hbomb79 #1
Posted 14 October 2016 - 05:16 AM
Titanium

Latest version: v0.1.0-beta.1 (changelog). View docs

See here for information regarding NEW developer tools

Well, I know what you are thinking, another substandard GUI framework. Not so fa–. Yeah, you are likely correct. I would appreciate if you would hear me out though.

Firstly, before I get going I would like to extend an invitation to my Gitter room

Titanium is an 'advanced' GUI framework written in OOP, using a comprehensive custom class engine. It is focused on usability and extensibility. As a result, classes provide static methods to adjust the way the function on a global scale. Titanium uses 'nodes' to display information. A node is, a button, dropdown, text input, scroll container, etc…

To speed up your development, Titanium makes use of a feature named TML (Titanium Markup Language). This XML like language allows you to define your application layout without touching any Lua (example), then simply import it to parse the file and get going. Theme files are also in use (example), they use the same syntax as TML files and allow you to define appearance rules to nodes with certain IDs or classes (or all nodes of a certain type).

Node QueriesNode queries are a massive feature of Titanium (example), allowing you to specifically search for node(s) inside of a parent. They follow jQuery/CSS like structure, this is perfectly valid:

Container > ScrollContainer#wrapper #inner > Container.header > Label#header1

This would search for a Label with id 'header1', directly inside a container with class 'header', directly inside any element with id 'inner', inside a ScrollContainer with an id of 'wrapper' directly inside a Container.

*directly inside means that the node must be a direct child of it's parent (ie: not nested)

Dynamic ValuesDynamic values are pretty awesome, and are powerful when developing a dynamic UI.

-- Sets the buttons width to its text length, +2 (for padding)
button.width = "$#self.text + 2"


-- Sets the X of this button to the X of another, plus the other buttons width (+2 for spacing). This makes it appear 2 pixels AFTER the other button
button.X = "${#myOtherButton}.X + {#myOtherButton}.width + 2"

-- The {} contain a NodeQuery. The first result of the query is used to get the X and width property.

The $ in both of those examples indicates that the string value is to be parsed as a dynamic value.

I could go on for a while, so here is a list of what Titanium currently offers:
- A fleshed out custom class system (single inheritance, mixins, constructor configuration, statics, instance keys, super access, etc)
- TML
- Theme files
- Button
- Checkbox
- Container (no scrolling)
- ScrollContainer (…scrolling)
- ContextMenu
- Dropdown
- Image
- Input (single line, text)
- Label (single line of text)
- PageContainer and Pages (allows quick, easy switching of the application layout)
- Pane (solid block of colour)
- RadioButton
- TextContainer
- EditableTextContainer
- Terminal (allows emulation of term programs)
- Node queries
- Animations with over 40 different easing functions
- Windows (documentation pending)
- DynamicValues (pretty damn awesome, tutorials coming soon)
- Native monitor support (Projector)
- Event binding (for example, assign callbacks (as many as you want) to a certain event: application:on(event, function))
- TabbedPageContainer New!
- DialogWindow New!


Here is a GIF showing the example application. Want to get a more up to date preview? Download it, do it!


Download, Installation and Documentation
This website is still in development, but contains a lot of helpful class documentation (automatically updated), guides and information regarding the installation of Titanium.

The Titanium packager is helpful for users creating projects with Titanium, it will automatically download and start Titanium, as well as creating your custom classes (if any). It is the easiest way to get started.

If you would rather download Titanium manually, TPM can be used – or you can build the source directly.

Lets wrap this up
I am open to ideas and merge requests, and as such feel free to fork the repo. If you find an issue please submit it through GitLab if you can and it isn't a duplicate issue.

This code is licensed under MIT. Feel free to use Titanium builds in any of your projects (credit would be nice, but not required when only using the build file). Let me know of any cool stuff you make.
If you use the Titanium source in your project, the license must remain with the code and be kept intact.

For an alpha project, I think most would agree this is not too bad. Hopefully, this will become a competitor to the more popular frameworks on the forums.
More sophisticated download/install options will exist upon official release.

If you got this far, thank you for reading - seriously. I look forward to reading your responses. Like Titanium? Don't hesitate to show your support in the GitLab repo (star) or up vote this topic.
Edited on 23 October 2017 - 04:01 AM
minebuild02 #2
Posted 14 October 2016 - 10:17 AM
Man, this. Is. AWESOME!
Too bad I can't use this for Tesseract, it is aimed at overall compatibility after all.
hbomb79 #3
Posted 14 October 2016 - 10:20 AM
Too bad I can't use this for Tesseract, it is aimed at overall compatibility after all.

Titanium is trying to be as flexible as possible. Only one file needs to be loaded to get it going, and from their all your buffers are automatically handled and drawn efficiently. I am not familiar with Tesseract, so the problem with using Titanium might be obvious. If there is something I can do to help Titanium fit your needs, be sure to let me know.
Edited on 14 October 2016 - 09:15 AM
blunty666 #4
Posted 14 October 2016 - 12:27 PM
This looks really good! I've tried a few times to make some kind of GUI framework but never managed to get very far…

The example application you've written helps to detail how it works, but as always some more detailed documentation would help a lot.

I've been creating something that needs a decent GUI, so have a few questions:
1) How does Titanium handle monitors?
2) Can you create nodes / canvases dynamically, 'on the fly', or do they always need to be done though the .tml files?
hbomb79 #5
Posted 14 October 2016 - 12:38 PM
Thanks for the compliment, once Titanium is out of alpha my focus will shift from creating new features to fixing and documenting current features. This will be available on the GitLab wiki (not yet created).

1) Titanium currently has no built in support for monitors. I have never really used them to much extent, and I have a feeling it wouldn't be simple. I will think about some elegant ways an application could be run on a monitor instead of the terminal. The `Application` instance already allows resizing, so in theory you could create a custom class (extends Application) that converts monitor events into mouse events, and just redirect the canvas (term.redirect) before and after draw. That way, the program would appear and work on the monitor. May have undesired side effects, but if this feature does get implemented it may be something like that (use of term.redirect before drawing, etc)

2) Titanium nodes can be added on the fly, in the GitLab repo `src/classes/nodes` contains the nodes currently available. Simply instantiate the class with some arguments to create a node, and then add it to the application using (with respect to the example application) `Manager:addNode( NodeInstanceGoesHere )`.


local Manager = Application()
Manager:addNode( Button( "Hello World", 2, 2, 13 ):set{ backgroundColour = colours.red, id = "exampleButton" } ) --# text, X, Y, width
--# This would work for any nodes used in TML (all in the nodes directory). Eg: Input, ScrollContainer, Image, Dropdown, Label

That button can be targeted in theme files using its ID instantly, just as if it were added via TML (TML simply parses the file and adds the nodes the same way)
Edited on 14 October 2016 - 10:40 AM
H4X0RZ #6
Posted 14 October 2016 - 12:45 PM
Awesome, as always!

I remember how I tested a really old version of this and helped you with finding bugs. Ahhh, how long ago was that? XD
Edited on 14 October 2016 - 10:46 AM
hbomb79 #7
Posted 14 October 2016 - 12:50 PM
Awesome, as always!
Thanks!

I remember how I tested a really old version of this and helped you with finding bugs. Ahhh, how long ago was that? XD

Haha yeah, that must have been 'DynaCode'. What a mess. Titanium was my 'remake' of that botched attempt. I think it has come a long way.
blunty666 #8
Posted 14 October 2016 - 12:56 PM
Ah ok, I might have a go at implementing for monitors this weekend. Does Titanium use 'mouse_up' events as well, or just 'mouse_click'?

Like you say, the easiest way might be to have an appication class for each monitor (in it's own coroutine), then an event handler on top that changes the monitor events to mouse ones, which passes them to the correct application and redirects the term at the same time.

Only had chance to have a quick look at the type of nodes, is there one that can be used to display a list?
hbomb79 #9
Posted 14 October 2016 - 01:02 PM
Does Titanium use 'mouse_up' events as well, or just 'mouse_click'?
Yup

Like you say, the easiest way might be to have an appication class for each monitor (in it's own coroutine), then an event handler on top that changes the monitor events to mouse ones, which passes them to the correct application and redirects the term at the same time.
If the content of each monitor is the same, it maybe best to use one Application instance, but use a custom draw function to iterate over each monitor. This way, only one application is running and catching the events and all monitors will be synced up with each other (using multiple applications will mean the content will differ between monitors too). Take a look at some of the classes to get the basic idea of how the system works if you aren't familiar with OOP (or this particular implementation of OOP). This method would require no use of coroutines.

Only had chance to have a quick look at the type of nodes, is there one that can be used to display a list?

No, not really. It would be best right now to use a ScrollContainer and dynamically populate it with values.
Edited on 14 October 2016 - 11:02 AM
H4X0RZ #10
Posted 14 October 2016 - 01:23 PM
About the monitor thing: what about adding a "monitor node" which allows you to put some stuff on a monitor? Granted, it's always nice to have programs which work both on monitors and a computer itself but it would also be nice to "enhance" the space you can write your app on. You could also add the ability to define the monitor size, type, etc.
Wilma456 #11
Posted 14 October 2016 - 02:47 PM
This looks Awesome! But I have a few Questions:

1) Can you make a better Documentention with more Examples? You only have one example that show all posibilities, but if you want strt with this Framework, its better to have one example for each feature.

2) If have seen, theres a function called addThread. It is possible to make multitasking with this function?

3)If is possible to chnage the folders of this. Because I need /bin for my OS.
Edited on 14 October 2016 - 01:58 PM
thecrimulo #12
Posted 14 October 2016 - 07:21 PM
Okay I don't usually comment of showcase posts but this is plain awesome.

It has a lot of features and I love the UI, but overall, my preferred thing was TML.
TML reminded me of XAML, this Microsoft's thing to make applications using XML-like syntax, and I don't know why but
I feel that when this is stable I might use it a lot. The whole idea of using markup language and then adding its functionalities
is plainly great and I don't know how anyone has come up with something like this before.

I can't wait for the release!
Nice thing
~Dael
hbomb79 #13
Posted 14 October 2016 - 10:06 PM
About the monitor thing: what about adding a "monitor node" which allows you to put some stuff on a monitor? Granted, it's always nice to have programs which work both on monitors and a computer itself but it would also be nice to "enhance" the space you can write your app on. You could also add the ability to define the monitor size, type, etc.

Yeah, I actually like that idea. It might take a bit of messing around in terms of the monitor events, but it wouldn't be too hard at all. I guess, instead of drawing itself to the application it would draw straight to the term (using TermCanvas, much like Application). Not sure about optimization and such, but the screen would still only change when something changes in the application.

This looks Awesome! But I have a few Questions:

1) Can you make a better Documentention with more Examples? You only have one example that show all posibilities, but if you want strt with this Framework, its better to have one example for each feature.

2) If have seen, theres a function called addThread. It is possible to make multitasking with this function?

3)If is possible to chnage the folders of this. Because I need /bin for my OS.

Thanks for the compliment!

1) I am planning on writing comprehensive documentation when Titanium leaves alpha and enters beta (which, should be soon).

2) Yes, it's purpose is to function as a coroutine manager, allowing you to add/remove threads on the fly. The terminal node uses this.

3) Yeah, only one file is needed to get Titanium loaded and it can be wherever you like.

Okay I don't usually comment of showcase posts but this is plain awesome.
Haha, thank you for showing your support!

I feel that when this is stable I might use it a lot.
I better hurry up then!
hbomb79 #14
Posted 15 October 2016 - 04:26 AM
Can you make a better Documentention with more Examples?

The example application you've written helps to detail how it works, but as always some more detailed documentation would help a lot.

I edited the OP to include a link to the GitLab wiki. It is still very early stages though.

Edit: The wiki is coming along well. Fully documented Node and Button so far along with some pages explaining basic application development.
Edited on 16 October 2016 - 09:04 AM
FrancisOwer #15
Posted 18 October 2016 - 02:09 PM
Tonight I have been working on rewriting the LuaHUD manual for COAL. I was also planning soon to take the current language docs and HTML-ify them for the website.

So perhaps we should collaborate on this?
hbomb79 #16
Posted 19 October 2016 - 11:54 PM
Titanium packager has been the focus of some updates recently. Many changes have been made, amongst them are some important ones:
  • VFS can be disabled
  • A range of exclusion options can be used to exclude certain paths from extraction, VFS inclusion, class loading, or the entire packager
  • The help menu has had a facelift and is a lot easier to read when run via ComputerCraft
  • Steps have been taken to resolve issue 34
  • When the source is minified, the output file is also minified (as in, the code to load the package is minified - not just the packaged files)
Note: If the VFS is disabled, the init file the package is told to run must be extractable - otherwise the package has no other way to access it.

Tonight I have been working on rewriting the LuaHUD manual for COAL. I was also planning soon to take the current language docs and HTML-ify them for the website.

So perhaps we should collaborate on this?

I am a little confused as to what collaborating with you on this would entail. I am not familiar with LuaHUD/COAL and have only written websites from scratch, not converted some arbitrary format to HTML. I might be able to help with more information.
Edited on 19 October 2016 - 10:05 PM
H4X0RZ #17
Posted 22 October 2016 - 02:24 AM
Is it possible to create our own nodes?
If that's possible this would feel so much like React (currently my favourite "native mobile" and front-end framework) IMO.
hbomb79 #18
Posted 22 October 2016 - 03:02 AM
Is it possible to create our own nodes?
If that's possible this would feel so much like React (currently my favourite "native mobile" and front-end framework) IMO.

Absolutely! Titanium is extensible, and as such you can create your own classes (any that you want, not just nodes) and use them. As long as the class extends node in some way, the class will function like any other node in Titanium and be definable inside of TML and target-able via Theme files. For example, 'Button' extends 'Node', and 'ScrollContainer' extends 'Container' which extends 'Node'. It doesn't matter how layers deep the node is, as long as it extends 'Node' somewhere.

The Titanium packager should be used when using custom classes, as it allows you to define your class source files and load them automatically. This means they are loaded via Titanium's class system, compiled and made available to the environment. Without using the packager, you would have to load and compile the classes manually, which is just a pain.

If you want to see an example, Plexus is a project I have been using Titanium for - it is sort of a test program. It uses custom nodes, they extend 'Button' which extends 'Node' which means they work just like any other nodes. Plexus is packaged using the Titanium Packager, meaning the class files are automatically loaded and the program is started inside of one file (uses a virtual file system).

Titanium's default nodes are also a good place to start when learning how to implement basic functionality, Button is a straightforward one. Let me know if you need anything else, or hop into Gitter.
Edited on 22 October 2016 - 01:39 AM
hbomb79 #19
Posted 29 October 2016 - 11:36 PM
In an effort to make using Titanium even easier, an installer now exists for those who either cannot, or would rather not download the build files manually.

Titanium now offers a manager, which can install and keep Titanium up to date for you. The source is available on GitLab

To allow easier installation via ComputerCraft, a pastebin fetcher exists

Edit: This information has also been added to the OP post.
Edit 2: The old argument system sucked, so I recreated it with flags instead. See here for more information


This system should no longer be used - please refer to OP post (under download section) to learn about the TPM installer, or just get it now:


pastebin run 5B9k1jZg --# Downloads TPM to 'tpm', pass an argument to define a custom location
tpm help --# Show the in program help
tpm install Titanium --dest <shortcutPath>
Edited on 04 November 2016 - 07:44 AM
Androthia #20
Posted 03 November 2016 - 01:07 PM
When I install via Titanium manager, it says download, then decoding, then goes black. Uhmmm….ok?
hbomb79 #21
Posted 03 November 2016 - 11:51 PM
When I install via Titanium manager, it says download, then decoding, then goes black. Uhmmm….ok?

Oh bugger. I am in the process of recreating that website for use with 'Titanium Package Manager', which is essentially a better version of the manager you were using. However, I accidentally deleted the script the manager needs - so it isn't working.

I will work on a fix for that issue right now, apologies for the inconvenience.

Edit: It shouldn't be going black, instead it should be throwing an error to you. Are you sure no error is being produced (if not, is there a 'titanium.lua' file)?
Edit 2: Issue seems to be resolved, please re-download before retesting. Let me know if you encounter problems.
Edited on 04 November 2016 - 01:02 AM
hbomb79 #22
Posted 04 November 2016 - 08:42 AM
When I install via Titanium manager, it says download, then decoding, then goes black. Uhmmm….ok?

Alright, the new system now works (TPM):

From OP Post:
Just want to get your hands on Titanium as quickly as possible? I spent all weekend creating a tool designed to serve not only Titanium, but any future projects - named TPM (Titanium Package Manager).

The TPM allows you to install specific versions of Titanium in one place (/.tpm/packages), and link to them using shortcuts.

To get started, grab the TPM program:

pastebin run 5B9k1jZg --# Downloads TPM to 'tpm', pass an argument to define a custom location
tpm help --# Show the in program help
tpm install Titanium --dest <shortcutPath>
Edited on 04 November 2016 - 07:44 AM
hbomb79 #23
Posted 20 December 2016 - 07:53 AM
After a long break for college exams, I have returned, bearing Titanium v0.1.0-alpha.6!

For those interested in the difference between this version (alpha.6), and the previous (alpha.5), check out the changelog here.

Among other things, DynamicValues are now supported by theme files, PageContainers have been completely re-done to support animations, and the Titanium packager has been fully integrated with TPM.

Get a hold of this new version using:

pastebin run 5B9k1jZg
tpm install Titanium:v0.1.0-alpha.6 --dest <shortcutPath>
Edited on 20 December 2016 - 06:55 AM
SquidDev #24
Posted 20 December 2016 - 07:56 AM
For those interested in the difference between this version (alpha.6), and the previous (alpha.5), check out the changelog here.
Those page containers with an embedded shell look really fancy. I always forget how animations make things look much flashier. Good job!
hbomb79 #25
Posted 21 December 2016 - 07:47 AM
-snip-
Those page containers with an embedded shell look really fancy. I always forget how animations make things look much flashier. Good job!

Thanks SquidDev. I am planning on making further adjustments such as a vertical animation aspect as well as a TabbedPageContainer, which is just what it sounds like (A page container with tabs at the top to select the page, much like Android).

Currently, my to-do list is everything under the v0.1.0-alpha.7 milestone. If anyone has feature suggestion or bug reports, do post them here so they can be pushed with alpha.7.

If anyone wants to lend a hand, do send a merge request!
houseofkraft #26
Posted 25 December 2016 - 01:21 AM
I really like the GUI, especially the animations!

However, it would be nice if you included documentation. I know you already did but it would be nice to add all the stuff this GUI Framework can do and make the documentation easier to understand.

Other then that, I am really liking this Framework and I will definitely use this in my programs.

In fact, I could make my WIP OS called Neptune powered by this framework.
Pyuu #27
Posted 25 December 2016 - 01:29 AM
Impressive interactive and fluid GUI design. Good work.
hbomb79 #28
Posted 25 December 2016 - 04:33 AM
I really like the GUI, especially the animations!

However, it would be nice if you included documentation. I know you already did but it would be nice to add all the stuff this GUI Framework can do and make the documentation easier to understand.

Other then that, I am really liking this Framework and I will definitely use this in my programs.

In fact, I could make my WIP OS called Neptune powered by this framework.

Thanks for the compliment! I do understand that documentation is a problem. In fact, I recently started writing a Ruby program that will hopefully (Never used Ruby before) parse the block comments before each function. Then, I will make a custom website (pretty much done already) that will use this information, combined with examples to display a page per class.

Of course, tutorial pages will still be around, but will not be packed with information about the arguments the function accepts, etc …

All in all, documentation is far from finished, sorry to keep you waiting :D/>

It would be awesome if Titanium is powerful enough to (help) construct your OS. Let me know if you go ahead with it, I would love to find out how it goes.

Impressive interactive and fluid GUI design. Good work.

Thanks, I am making an effort to allow Titanium to be fluid. Currently working on an improvement to TML dynamic values that should further increase fluidity.
Edited on 25 December 2016 - 03:33 AM
handicraftsman #29
Posted 14 January 2017 - 11:00 AM
Noooice. Adding to bookmarks and upvoting topic.
hbomb79 #30
Posted 20 January 2017 - 07:47 AM
it would be nice if you included documentation.

Although not complete, this website is automatically updated with information from Titanium's source code
hbomb79 #31
Posted 20 January 2017 - 10:01 PM
Noooice. Adding to bookmarks and upvoting topic.

Thanks for the support!
hbomb79 #32
Posted 22 January 2017 - 05:44 AM
Alpha.7 was just released, adding TextContainer, EditableTextContainer nodes, project wide documentation and general bug fixes and improvements.

See the git commit log for more information regarding exactly what was changed.

Also, the documentation website (not finished) is automatically serving information for alpha.7, so feel free to use it as a reliable documentation source.
Edited on 22 January 2017 - 04:44 AM
houseofkraft #33
Posted 09 February 2017 - 10:18 PM
How do i use a text box element? I'm making a web browser and I need a text box for a URL
H4X0RZ #34
Posted 09 February 2017 - 10:30 PM
How do i use a text box element? I'm making a web browser and I need a text box for a URL

A textbox is as simple as adding a Input node somewhere.


<...>
  ...
  <Input X=1 Y=1 width=5 limit=20 id=yourInput placeholder="This is a textbox" />
  ...
</...>

Then you can apply a callback to it's "trigger" which is called once the user presses enter:

-- Manager is an instance of Application
Manager:query "#yourInput":on("trigger", function(self, value, selected)
  print("The user entered "..value)
  self.value = "" -- This line empties the textbox after pressing enter
end)
Edited on 09 February 2017 - 09:33 PM
hbomb79 #35
Posted 09 February 2017 - 11:57 PM
How do i use a text box element? I'm making a web browser and I need a text box for a URL

Feel free to hop on Gitter if you have further questions!
minebuild02 #36
Posted 14 February 2017 - 11:43 AM
Too bad I can't use this for Tesseract, it is aimed at overall compatibility after all.

Titanium is trying to be as flexible as possible. Only one file needs to be loaded to get it going, and from their all your buffers are automatically handled and drawn efficiently. I am not familiar with Tesseract, so the problem with using Titanium might be obvious. If there is something I can do to help Titanium fit your needs, be sure to let me know.
Well since I'm (kinda) back, I'll try to explain.
Tesseract is aimed to be compatible with CC straight for 1.4.7 up to 1.8 and beyond. All programs I include both in the package manager and the OS are only written using methods supported by CC for 1.4.7 and then tested on CraftOS 1.7. That makes sure it's compatible with almost everything out there.
As far as I see, Titanium only works on the latest ComputerCraft versions. That's the exact problem.
hbomb79 #37
Posted 26 February 2017 - 03:43 AM
Well since I'm (kinda) back, I'll try to explain. Tesseract is aimed to be compatible with CC straight for 1.4.7 up to 1.8 and beyond. All programs I include both in the package manager and the OS are only written using methods supported by CC for 1.4.7 and then tested on CraftOS 1.7. That makes sure it's compatible with almost everything out there. As far as I see, Titanium only works on the latest ComputerCraft versions. That's the exact problem.

Ah, I see. No problem, I have looked into your project a little and I can see it wouldn't really apply.
hbomb79 #38
Posted 05 March 2017 - 01:39 AM
Alpha 8 Preview

The past few days, Titanium's window support has been my main focus, along with various optimizations and bug fixes.

This new GIF show's off a couple of Titanium's new features (Windows, Dynamic values [you see the three buttons at the top right, they move with the side bar dynamically], dropdown fixes, Z indexing, text containers).

Edited on 05 March 2017 - 12:40 AM
lolmaker2002 #39
Posted 05 March 2017 - 05:28 AM
Best framework i've seen so far! definatly going to use this for one of my projects!
hbomb79 #40
Posted 05 March 2017 - 05:33 AM
Best framework i've seen so far! definatly going to use this for one of my projects!

Thanks, I do look forward to seeing how it goes!

This is from the OP post, providing a basic rundown of Titanium's new (main) feature:

Dynamic ValuesDynamic values are pretty awesome, and are powerful when developing a dynamic UI.

-- Sets the buttons width to its text length, +2 (for padding)
button.width = "$#self.text + 2"


-- Sets the X of this button to the X of another, plus the other buttons width (+2 for spacing). This makes it appear 2 pixels AFTER the other button
button.X = "${#myOtherButton}.X + {#myOtherButton}.width + 2"

-- The {} contain a NodeQuery. The first result of the query is used to get the X and width property.

The $ in both of those examples indicates that the string value is to be parsed as a dynamic value.
Edited on 05 March 2017 - 04:42 AM
Sewbacca #41
Posted 17 March 2017 - 04:28 PM
Is this topic up to date?
Configure Packager

Now that you have downloaded the packager, you must configure it to handle your project correctly.
This section will only cover how to instruct the packager to download Titanium. To find out how to further adjust the packager settings, call the packager with '–help', or visit the documentation page

The link doesn't work. How do I use the
TPM? The documentation just help you with the classes, not how to configure tpm.
Also I got problems using the arguments because it errors all the time.
(I used
pastebin get 3hVHPYhH downloader
downloader tpm
to install tpm)
hbomb79 #42
Posted 20 March 2017 - 01:20 AM
Is this topic up to date?
Configure Packager

Now that you have downloaded the packager, you must configure it to handle your project correctly.
This section will only cover how to instruct the packager to download Titanium. To find out how to further adjust the packager settings, call the packager with '–help', or visit the documentation page

The link doesn't work. How do I use the
TPM? The documentation just help you with the classes, not how to configure tpm.
Also I got problems using the arguments because it errors all the time.

Those installation instructions are for the Titanium Packager, not TPM. The link doesn't work because the website is still in development.

http://harryfelton.w...nload!installer

The link above explains show to use the tpm command to install Titanium, alternatively the built in help (–help flag) will show you how to use TPM.
Edited on 20 March 2017 - 12:35 AM
hbomb79 #43
Posted 31 March 2017 - 10:23 AM
Monitor Support Preview

While I would rather not admit it, I neglected Titanium a little over the past week or two and have… missed the milestone deadline. Never mind.

I do however come with good news, monitor support has come along nicely - should be in testing soon-ish



Super simple to use too; Use this to create your projector

AppInstance:addProjector( Projector( "main", "monitor", "monitor_0" ) ) --# projectorName, projectorMode, targets

and then simply bind nodes to it

<ScrollContainer projector="main" mirrorProjector=true>
	...
</ScrollContainer>

mirrorProjector=true means it will appear on the computer and the projector targets - by default it will only appear on the projector targets when a projector is bound
Edited on 31 March 2017 - 08:31 AM
blunty666 #44
Posted 31 March 2017 - 08:57 PM
This just became even more useful! Just to be sure, is it possible to have multiple monitors showing different content?
H4X0RZ #45
Posted 31 March 2017 - 10:01 PM
This just became even more useful! Just to be sure, is it possible to have multiple monitors showing different content?

Just create multiple projectors and bind nodes to them.
hbomb79 #46
Posted 01 April 2017 - 12:47 AM
This just became even more useful! Just to be sure, is it possible to have multiple monitors showing different content?
I just committed a multiple projector test to GitLab, it should clear up any confusion.

Thanks for the compliment.

Edit: See the GitLab issue for more details on monitor support
Edited on 31 March 2017 - 11:21 PM
hbomb79 #47
Posted 01 April 2017 - 07:25 AM
Alpha 8

Titanium v0.1.0-alpha.8 was just released, bringing you all the shizzle I have previewed on the forums. What are you waiting for?! Go check it out!

See here for a changes summary along with a git changelog.
Edited on 01 April 2017 - 05:26 AM
blunty666 #48
Posted 16 April 2017 - 09:39 AM
There's something weird going on with your example program…

The config checkboxes in the animated pane do not align correctly when they overlap with Animation slider in the main page

hbomb79 #49
Posted 16 April 2017 - 10:49 AM
There's something weird going on with your example program…

The config checkboxes in the animated pane do not align correctly when they overlap with Animation slider in the main page

That is strange, I cannot reproduce. What build of Titanium are you running (version, minification status, method of installation may be helpful too).

blunty666 #50
Posted 16 April 2017 - 12:51 PM
Using the latest version I believe… installed using tpm install Titanium:latest just now

Example program is the version taken from the Develop branch on GitLabs

Minecraft 1.7.10
CC Version 1.75

Not sure if it something to do with the special characters in CC 1.76+ as the slider also appears incorrectly

Update: Can confirm it works correctly in CC1.79 / MC 1.8.9 with the exact same code (copied the files over)

Update 2: Just found out you can change the track character so I've done the following in my CC1.75 code and it is now working as expected. Looks like an issue with the way you are rendering the characters?
local slider = Manager:query("Slider#animationSlider").result[1]
slider:setTrackCharacter("-")
Edited on 16 April 2017 - 05:45 PM
hbomb79 #51
Posted 16 April 2017 - 09:46 PM
Hm, I see. That is quite peculiar. I assume the new characters aren't being drawn, so a weird pixel is hanging about allowing the label/check box character to shift over.
hbomb79 #52
Posted 17 April 2017 - 04:39 AM
Further information regarding this issue should be directed here
hbomb79 #53
Posted 03 May 2017 - 04:10 AM
Titanium Developer Tools

This update brings welcome changes to the way a developer may go about creating and distributing their software. This update makes the process simpler for new and experienced users alike.

The pastebin for downloading TPM (Titanium Package Manager) has now been expanded to include two other programs (the Titanium packager, and TDT (Titanium Developer Tools)). This pastebin is now the only one you will need to use when developing a Titanium application.

The installer will automatically add the 3 programs to your path (they are stored in '/.tpm/bin/'), and will automatically patch your startup file to add them to your path on boot. This will allow you to use 'package', 'tdt' and 'tpm' without using the absolute paths.

TDT is an interface over the old packager which makes setting up your project much easier. It allows you to create a new project, configure it to your liking and then run your project (automatically builds and runs the build). TDT uses the Titanium Packager, so the functionality of the output build is much the same.

The Titanium installations are still managed using TPM, and TDT acknowledges this and makes use of TPM to make managing your project easier.

Anywho, give it a go with pastebin run 5B9k1jZg. Take a look at `tdt help` and `tpm help` if you are not already familiar with what features are at your disposal. From now on (in general) the Titanium packager should not be used directly anymore, and `tdt` should be used instead. If you do need to use the packager directly, `package -h` may be helpful to you.
Edited on 03 May 2017 - 08:01 PM
hbomb79 #54
Posted 04 May 2017 - 10:32 PM
There's something weird going on with your example program…
-snip-

Issue resolved
hbomb79 #55
Posted 27 May 2017 - 12:00 AM
Alpha 9

Alpha 9 has hit the streets, bringing a few new features (dialog popups, overlay container, and typeOf selection in theme files) and a lot of bug fixes. Take a looksie.
hbomb79 #56
Posted 02 June 2017 - 10:09 AM
Just pushed a hotfix for alpha 9. Those encountering issues with the TextContainer (and, by extension EditableTextContainer) widths (when using DynamicValues) may be falling ill to this bug.

Update your build file by uninstalling and reinstalling your Titanium installation.


tpm uninstall Titanium:v0.1.0-alpha.9
tpm install Titanium:v0.1.0-alpha.9
Edited on 02 June 2017 - 08:10 AM
hbomb79 #57
Posted 31 July 2017 - 11:31 AM
Beta!
v0.1.0-beta.1

Another bug fix update with a couple cool features thrown into the mix.

Essentially, TabbedPageContainers are available for use and the DialogWindow system has been overhauled in an effort to make it much less confusing to work with.



View here for the GitLab tag information, and a commit comparison
H4X0RZ #58
Posted 01 August 2017 - 04:49 PM
Awesome!
DIES #59
Posted 08 September 2017 - 11:42 PM
I'll wanted to see a menubar in this (gorgeous, as for CC) framework. This will open some posibilities, like creating some OS X like GUI (people here naming it 'OS', when it's basically just a GUI. Though if it have some great apps that can't be directly runned in shell then it's can be theoretically considered as OS). But yeah, we need some way of Desktop and Dock realisation too (If it doesn't present already). Even better if we will have it as standart nodes.
Skullcraft #60
Posted 13 October 2017 - 04:44 PM
It would be very nice if you implement different colours foor the buttons, menubars, etc.
H4X0RZ #61
Posted 15 October 2017 - 11:00 PM
It would be very nice if you implement different colours foor the buttons, menubars, etc.

You should be able to theme everything already. Look at the examples and the docs. Should be there somewhere.

If you don't mind the added complexity and outdatedness of my code you could also look at this and see if something of it is still applicable. https://github.com/MagnificentPako/Titanium-Tup-Template

Keep in mind that you can't use .haml files natively with Titanium. You have to convert them to xml/html first. The same goes for moonscript files.
Edited on 15 October 2017 - 09:10 PM
hbomb79 #62
Posted 16 October 2017 - 01:12 AM
It would be very nice if you implement different colours foor the buttons, menubars, etc.

You can use whatever CC colours you want. You can use `color`, `backgroundColour`, `activeBackgroundColour`, etc… (colour can be spelt as 'color' too if you prefer).

Literally every aspect of the pre-built nodes (such as TabbedPageContainer, ScrollContainer) can be customized as they are simply nodes that you can target using Node Queries, or the 'nodes' table. The colours you see are the defaults.
Hagis #63
Posted 17 February 2018 - 12:59 PM
Hello, I have problem with installation of framework.

I tried to install tpm and call some test commands, but it doesn't work.
Everytime i call tdt, the program ends on line 628.



I tried to install Titanium manuallly from tpm (latestversion), but still dont work.
I working on Minecraft 1.7.10, ComputerCraft 1.74, Tekkit Legends 1.1.1
Bomb Bloke #64
Posted 18 February 2018 - 12:34 AM
You may need to try a different image host (eg imgur) - it looks like the one you chose doesn't support hot-linking.
EliConstructor #65
Posted 18 March 2018 - 08:21 PM
Hello.
I'm new to Titanium and decided to have a look. In the website though I get errors going to some pages. The error looks like this:
Failed to load tutorial content. Invalid (no tutorial of name create-node) target was provided to dispatcher
Any help would be appreciated.
Windows10User #66
Posted 25 April 2018 - 06:02 PM
It's so good I guess my GUI framework (Graphics) will never see the light of the day. Good luck keeping this boy alive.
minebuild02 #67
Posted 20 June 2018 - 10:31 AM
Now that Tesseract's pretty much discontinued, I'm developing a new OS that will be mostly GUI-based. Titanium would suit me pretty much now as the system is aimed at the latest CC version instead of trying to cope with all other versions. Good job with the framework!
ToxicC00kie1001 #68
Posted 22 June 2018 - 07:31 AM
It would be helpful if you made a youtube video showing the exact steps that need to be taken to use this. It's rather hard for me to understand which sucks because I'd love to use it in programs I make.
alexkar598 #69
Posted 11 August 2018 - 01:31 PM
When i do tdt titanium i get: tdt:488: attempt to concatenate field '1' (a nil value)

in the cache file,there is nothing in titanium its Titanium = {}
Zecradox #70
Posted 17 November 2018 - 07:33 AM
Is there a way i can just require() it in my program instead of this manager installer thing?