To add a file to a package you must:\n\n# Have selected, as current main package, the package where you want to add the file\n# Click with the right button on the file list (on an empty space) and select "Insert package directory file(s)"
To add a menu bar to a form you can declare an object of type MenuBar in the class of the form. \nLike this:\n\n{{{\nclass ProvaConDatabase : public WithProvaConDatabaseLayout<TopWindow> {\n...\nprivate:\n MenuBar menuBar;\n}\n}}}\n\nNext you have to create your menu in the class constructor and initialize it using the callbacks:\n\n{{{\nProvaConDatabase::ProvaConDatabase()\n{\n CtrlLayout(*this, t_("SQLite Database Manager"));\n Sizeable(true);\n AddFrame(menuBar);\n menuBar.Set(THISBACK(CreaMenuBar));\n ...\n}\n\nvoid\nProvaConDatabase::CreaMenuBar(Bar &bar)\n{\n bar.Add(t_("Database"), THISBACK(CreaMenuDatabase));\n bar.Add(t_("Help"), THISBACK(CreaMenuHelp));\n}\n\nvoid\nProvaConDatabase::CreaMenuDatabase(Bar &bar)\n{\n bar.Add(t_("Open"), THISBACK(OnApri));\n bar.Add(t_("Close"), THISBACK(OnChiudi));\n bar.Separator();\n bar.Add(t_("Exit"), THISBACK(OnEsci));\n}\n\nvoid\nProvaConDatabase::OnApri()\n{\n ...\n}\n}}}\n\n''Remember that you should declare your menubar inside the class and not directly in the constructor. In the last case it will be freed at the constructor termination''.\nFor a similiar initializing way using a toolbar please see AddingToolbar
You can create a new main package from the "Select Main Package" window of the development environment using the "New Package" button.\nIf you are going to develop a graphical app you can select the "CtrlLib Application with Main Window" template to have a ready-to-start app with an empty window and layout fle.\n\nYou can access the "Select Main Package" window when the ide starts and from the "File - Set Main Package" option.
To add a package to your main package you must click with the right button on the main package and select "Add Package".\nThis operation is similar to adding requirements to your main package
To add a tool bar to a form you can declare an object of type ToolBar in the class of the form. \nLike this:\n\n{{{\nclass ProvaConDatabase : public WithProvaConDatabaseLayout<TopWindow> {\n...\nprivate:\n ToolBar toolBar;\n}\n}}}\n\nNow you have to create your toolbar in the class constructor and initialize it using the callbacks:\n\n{{{\nProvaConDatabase::ProvaConDatabase()\n{\n CtrlLayout(*this, t_("SQLite Database Manager"));\n Sizeable(true);\n AddFrame(toolBar);\n menuBar.Set(THISBACK(CreaToolBar));\n ...\n}\n\nvoid\nProvaConDatabase::CreaToolDatabase(Bar &bar)\n{\n bar.Add(t_("Open"), CtrlImg::open(), THISBACK(OnApri));\n bar.Add(t_("Close"), CtrlImg::cross(), THISBACK(OnChiudi));\n}\n\nvoid\nProvaConDatabase::OnApri()\n{\n ...\n}\n}}}\n\nThis recipe is very similiar to the recipe of the menu bar (AddingMenu) and it is not a case.\nIf you give an image to the Add arguments of the Bar instance that image will be used to render the toolbar. \nYou can see IconsFromCtrlLib to know how to reuse the icons already included in U++.\nThe string argument of the Add call is used as tooltip.\nGo to AppInternationalization for a discussion of the ''t_'' macro.\n\n''Remember that you should declare your toolbar inside the class and not directly in the constructor. In the last case it will be freed at the constructor termination''
You can configure your package to be compiled with additional compiler flags (like adding another include path):\n\n 1. Open the ''Package Organizer'' from the menu ''Project''\n 2. Make sure that on the left part of this window the activated package (it's in bold) is your package\n 3. Right click on the right side of the window and choose ''New Compiler Option''\n 4. Fill the right textbox with the new flag\n 5. Click ok\n\nWith linker flags it's the same thing but you must use ''New Link Option'' instead of ''New Compiler Option''.
This recipe will explain how to create another window in your application using the layout file, the header and the source file created by the ""CtrlLib Application with Main Window" as explained in AddingNewMainPackage.\n\n! Step One: Adding a new layout\n\nSelect the layout file (usually named "{pkgname}.lay") and add a new layout right-clicking in the layout list.\nThe layout list is the blank space at the top-left of the layout editor (in the following example you must click under the "ProveLayout" text):\n\n[img[LayoutEditor|new_window_1.png]]\n\nSelect ''Add Layout'' and enter the new layout name. It's a good idea to have as suffix the work "Layout" (ex. DataWindowLayout)\n\nNow you can design your layout as explained in LayoutManagement.\n\n! Step Two: Generating the example code\n\nNow you should click on the ''Generate Code'' icon on the layout manager:\n\n[img[LayoutEditor|new_window_2.png]]\n\nThe following window shows an example code using the layout.\nNow you can click on ''Copy to Clipboard''. The window is closed and the code i copied to the clipboard.\n\n! Step Three: Using the example code\n\nOpen the generated header file (usually named "{pkgname}.h") and put the generated class declaration under the class declaration already present. If you want you can change the name of the class... etc...\n\nCut and paste the constructor from the header file to the cpp file (usually named "main.cpp"}.\n\n! Step Four: Using the new window\n\nThe new window, or dialog, is ready. You can start using it (perhaps trying with the GUI_APP_MAIN).\nDo you want your new window to be a modal dialog? See ModalDialogs.\n\n\n
If you want to internationalize your application using translation file you should:\n\n* Add to your package a transation file who has an extension ''.t'' (see AddingFiles)\n* The messages included in your application should be in english (enUS)\n* Mark your application translatable messages with the macro ''t_''. For example the following line:\n{{{\ntableTest.Set(0,0,"One test!");\n}}}\nMust be changed in:\n{{{\ntableTest.Set(0,0,t_("One test!"));\n}}}\nPlease note that you can do this work incredibly fast using the ''Alt-F2'' shortcut provided in the option ''Mark selection with t_'' in the submenu ''Special'' of the menu ''Edit''.\n* Use ''Synchronize Translation Files'' in the ''Project'' menu. This will put all the strings market with the ''t_'' macro in your translation file. In the ''Translation Files'' window there is an option to add other languages (for example itIT)\n* Fill the translations in your translation file\n* Convert your translation file in UTF8 format (see ChangeFileEncoding)\n* Include in a cpp file in your application like these lines:\n{{{\n#define TFILE <MyProjectHere/MyTranslationFileHere>\n#include <Core/t.h>\n}}}\nPlease note it should be a ''cpp'' file and not a ''h'' or ''hpp'' file.\nFor example you can create a "t.cpp" file only for compiling translations.\n* Now at the startup of your application you can choose your language with the ''SetLanguage'' call.\nExample:\n{{{\nif(recentLang==itlang)\n{\n SetLanguage( LNG_('I','T','I','T') );\n} else\n{\n SetLanguage( LNG_('E','N','U','S') );\n}\n}}}\nFor examples you can let the users choose their favourite language, write it in a ConfigurationFile and close the application.\nAt the following start of your application you can read (in the GUI_APP_MAIN) what is the last recently used language and use the SetLanguage with the appropriate arguments.
Callbacks are useful where you want your program to react to user events.\nEvery component has a "default event", for example the default event for the ''button'' is the user click.\nYou can bind a method of your class to the default event for a component in your constructor using the THISBACK macro:\n\n{{{\nbtTest<<=THISBACK(OnTestClick);\n}}}\n\nOf course you must declare and implement the {{{OnTestClick}}} method. Here I show a simple implementation:\n\n{{{\nvoid\nMyClass::OnClick()\n{\n Exclamation("Click!");\n}\n}}}\n\nIf you want to react to something other than the default event you can simply bind your method like this:\n\n{{{\ntableTest.WhenEnterKey=THISBACK(OnTableEnterKey);\n}}}\n
You can change the code editor fonts from the "Environment" option of the "Setup" menu.\nYou must choose the "Font" tab
You can change the default file encoding from the "Environment" item in the "Setup" menu.\nYou will see a tabbed window: the default file encoding is the "Editor" tab.\n\n//Why the window title is "Format Setup"? It's a bug or a feature? //
You can change the file file encoding for a sigle file, for an entire project and the default file encoding for the ide:\n\n! Change for a single file\n# Select "File properties" from the "Project" menu.\n# Select the encoding you want\n# Press "Ok"\n\n! Change for the entire project\n# Select "Package Organizer" from the "Project" menu\n# Change the current encoding from the combobox on the top-right of the window\n# Press "Ok"\n\n! Change for the ide\nSee ChangeDefaultFileEncoding
The application name is the default title for predefined message dialogs (see MessageDialogs).\nYou can get your application name with:\n{{{\nString app=Ctrl::GetAppName();\n}}}\n\nIf you want to change your application name you can do something like this:\n{{{\nCtrl::SetAppName("Test");\n}}}
If you want you can change the shortcuts of the ide from the menu from the ''Key'' option of the ''Setup'' menu.
To reset the size of the components in the designer you can use the following icons:\n\n[img[Min Size Icons|layout_min_size.png]]\n\n* The icon on the left restore the horizontal size to the minimum size.\n* The icon on the right does the same thing for the vertical size
You can create and use a configuration file for your application in really easy way.\nThe Ultimate++ framework manage all the file creation and parsing step.\n\nUltimate++ can manage the configuration files as a easy name-to-value mapping.\nTo read a configuration file you can:\n\n{{{\nString cfgfile = ConfigFile();\nif(FileExists(cfgfile))\n{\n VectorMap<String, String> cfg = LoadIniFile(cfgfile);\n ...\n}\n}}}\n\nThe Ultimate++ framework choose the configuration file name in order to be unique for your application.\nFor instance in linux it is {{{$HOME/.{yourAppNameHere}/{yourAppNameHere}.cfg}}}\nTo read a value from the configuration file you can:\n\n{{{\n String recentLang = cfg.Get("LANGUAGE", Null);\n}}}\n\nTo write your configuration file you can simply do something like:\n\n{{{\nString cfg;\ncfg << "LANGUAGE=" << language << "\sn";\n\nif(!SaveFile(ConfigFile(), cfg))\n{\n Exclamation("Error saving configuration!");\n}\n}}}
Sometimes you would like to isolate a group of components to reuse them multiple times.\nYou can create a custom component with that components inside and use it how many times you want.\n* Create, as usual, your layout file with the child components.\n* Declare a class using the layout created. Your class must extend ParentCtrl:\n{{{\nclass ElencoTabelle : public WithElencoTabelleLayout<ParentCtrl> {\npublic:\n typedef ElencoTabelle CLASSNAME;\n \n ElencoTabelle();\n};\n}}}\n* In the constructor you must invoke the layout creation:\n{{{\nElencoTabelle::ElencoTabelle(ParametriConfigurazione& pConfigurazione) {\n CtrlLayout(*this);\n // something cool here \n}\n}}}
You can change the text inside a EditString with:\n{{{\n// edStr is a EditString\nedStr.SetData("string data");\n}}}\n\nTo retrieve the inserted text you can:\n{{{\nString d=edStr.GetData();\n}}}
Ultimate++ has the predefined dialogs for selecting file and directories.\nIf you want to open a file open dialog you can do:\n{{{\nFileSel fs;\nfs.Type(t_("My File Type Here"), "*.myExtensionHere");\nif(!fs.ExecuteOpen(t_("Window Title Here")))\n{\n return;\n}\n}}}\nIf you instead want a file save dialog you can:\n{{{\nFileSel fs;\nfs.Type(t_("My File Type Here"), "*.myExtensionHere");\nif(!fs.ExecuteSaveAs(t_("Window title here")))\n{\n return;\n}\n}}}\nDo you want to select a directory?\n{{{\nFileSel fs;\nif(!fs.ExecuteSelectDir(t_("Window title here")))\n{\n return;\n}\n}}}\nNow you can get the selected file/directory like this:\n{{{\nString myFileOrDir=fs.Get();\n}}}\nAs always in Ultimate++ it's simple and useful.
To find a string in all the files select ''Find in files...'' from the ''Edit'' menu when you have opened the code editor (and not the layout designer).\n
Ultimate++ has currently a lot of icons in the CtrlLib package.\nThis icons are used for standard dialogs like FileDialogs, MessageDialogs, etc.\nIf you want to use in your application some icons from the CtrlLib you can:\n# Open the file ''Ctrl.img'' from the CtrlLib package and remember the name of the icon you want to use\n# Use the icon in your application like this:\n{{{\nIcon(CtrlImg::open());\n}}}
You can programmatically set the contents of a label with:\n{{{\n// lbMia is a label\nlbMia.SetLabel("contents");\n}}}\n\nYou can change the color of a test inside a label with:\n{{{\n// lbMia is a label\nlbMia.SetInk(Green);\n}}}\n\nThis properties can also be set from the ''Layout Designer''
The layout designed can be opened by selecting a ''.lay'' file.\nIf opening a ''.lay'' file results in a text editor you can activate the designer from the menu ''Edit'' choosing ''Edit using the designer''.\nSome layout management functions:\n\n! Change Layout Size\nYou can choose the layout size dragging the blue anchors of the layout near the border of the gray area\n\n! Adding Components\nYou can add a component clicking with the right button on a empty space and choosing the component you want to add from the popup menu\n\n! Moving Components\nYou can move the components with a simple drag&drop\n\n! Resize Components\nYou can choose the size of your components dragging the blue anchors near the components border\n\n! Choosing Components Resize Policy\nYou can choose the behaviour of your components when the window is resizeable using the springs.\nYou can manage the springs from the layout designer toolbar:\n\n[img[Springs|layout_springs.png]]\n\nIn order (horizontal):\n# The gap bitween the component and the container on the left side will not be influenced by a resize of the container\n# The gap bitween the component and the container on the right side will not be influenced by a resize of the container\n# The gap bitween the component and the container on the both (left and right) sides will not be influenced by a resize of the container\n# The space variations caused by horizontal resize of the container will be distributed equally on the left and the right side of the component\n\nAnd vertical:\n# The gap bitween the component and the container on the top side will not be influenced by a resize of the container\n# The gap bitween the component and the container on the bottom side will not be influenced by a resize of the container\n# The gap bitween the component and the container on the both (top and bottom) sides will not be influenced by a resize of the container\n# The space variations caused by vertical resize of the container will be distributed equally on the top and the bottom side of the component\n\nThe remaining icon automatically set the springs of the selected container.\nProbably the best way to learn how the layout management works (it's really simple and powerful) is to try by yourself.\nBy default windows are not sizeable. \nSee WindowSizeability to make a window sizable
You can configure your package to be compiled with additional libraries in a really simple way.\n\n# Open the ''Package Organizer'' from the menu ''Project''\n# Make sure that on the left part of this window the activated package (it's in ''bold'') is your package\n# Right click on the right side of the window and choose ''New Libraries''\n# Fill the right textbox (next to the colon) with the name of the library (for ex "sqlite3").\n# Click ok\n\n//Why the Package Organizer window isn't sizeable? Is this a bug or a feature? //
The Assist++ shortcut (Ctrl-Space) doesn't work in Ubuntu 6.06.\nI don't know if it works in other distributions.\nIf in your linux box don't work fix it:\n\n* From the main ide window select "Keys" from the "Setup" menu\n* The "Setup Keys" dialog list all the shortcut in the ide. \n* Search "Assist" near the end of the list and select this row\n* Click on the second shortcut text but (it's highlithed in the following image)\n\n[img[setup keys screenshot|linux_ctrl_space.png]]\n\n* Type "Ctrl-Space" in your keyboard\n* Click on "Ok"\n\n
To display an image in a form you must:\n\n# Have in your form (or layout) a label component where display the image\n# Add to your project an image encoder package (see AddingPackages) as png, jpg, tif. The PngEncoder is probably already included in your package.\n# Insert a code like this:\n{{{\n Image k=PngEncoder::New()->LoadImageFile("/home/leonardo/ing1/babytux.png");\n lbImmagine.SetImage(k);\n}}}\n\n
UppCookbook\n[[code recipes|code]]\n[[ide recipes|ide]]\n\n[[TODO]]
Ultimate++ has many prepackaged message dialogs:\n\n! Exclamation Dialog\n{{{\nExclamation("Click!");\n}}}\n[img[Exclamation Dialog|exclamation.png]]\n\n! PromptOK Dialog\n{{{\nPromptOk("Click!");\n}}}\n[img[PromptOK Dialog|prompt_ok.png]]\n\n! PromptYesNo Dialog\n{{{\nif(PromptYesNo("It's ok?"))\n{\n // destroy all\n}\n}}}\n[img[PromptOK Dialog|prompt_yesno.png]]\nThe default title of the messages dialog is the application name.\nSee ChangingAppName to know how to set and get the application name.
First question: are you sure that the dialog you want isn't already implemented? \nPlease see MessageDialogs and FileDialogs.\nTo make a new modal dialog you must: \n# Create another window (see AnotherWindow) \n# Create the callbacks of the buttons that can make the window close (like "Ok", "Cancel", "Yes", "No"). The callback must:\n## Memorize the data that the user has entered in some instance variable. (See for example EditString)\n## Call the ''Break'' method like this {{{Break();}}}\n\nYou might want to configure the Ok and the cancel buttons to make them working like the system dialogs ones. The ok button will be activated if the user press Enter and the cancel button will be activated when the user press the Escape key.\n\n{{{\nBtOk.Ok();\nBtCancel.Cancel();\n}}}\n\nYou can close the dialog window as usual with the {{{Close}}} method or you can return an exit code like this:\n\n{{{\nBreak(IDOK);\n}}}\n\nor\n\n{{{\nBreak(IDCANCEL);\n}}}\n\nIn that way, when you want to call the dialog, you could do something like this:\n{{{\nDialogClassName d;\nif( d.ExecuteOk(true) ) {\n // something cool here\n}\n}}}\n\nIf you want you can not write a callback function for the Ok and Cancel buttons:\n\n{{{\nAcceptor( BtAnnulla, IDOK );\nRejector( BtCancel, IDCANCEL );\n}}}\n\nTo create a callback please see CallBacks.
To construct an XML Tree from an XML buffer you can:\n{{{\n// Now we should parse the XML content\ntry\n{\n XmlNode n=ParseXML(~content);\n} catch(XmlError e)\n{\n throw String(t_("Error in XML parsing"));\n}\n}}}\n\nNow you have an XmlNode object. \nEvery XmlNode object represent a node in the xml parsing tree.\nTo get the XmNode instance that represent the root element of XML you can:\n{{{\nXmlNode rootElement=n[0];\n}}}\n\nNow you can get the tag corresponding to this object with:\n{{{\nString tag=rootElement.GetTag();\n}}}\n\nTo get the childs:\n{{{\nfor(int i=0;i<n.GetCount();i++)\n{\n XmlNode c=n[i];\n}\n}}}\n\nHappy XMLing!\n\n
Are you afraid of the C ''access'' calls? Use the Ultimate++ file access tools!\n\n! Checking for the existance of a file\n{{{\nif(FileExists("test.dat"))\n{\n Exclamation("Yeah! This file exists!");\n}\n}}}\n\n! Loading the file in a string \n{{{\nString buffer=LoadFile("test.dat");\n}}}\n\n! Writing the file \n{{{\nSaveFile("config.dat", buffer);\n}}}
some upp recipes
Leonardo's Ultimate++ Notebook
You can use splitters in your window including in the class:\n{{{\nSplitter split;\n}}}\nNow, in the constructor, you can initialize your splitter like this:\n{{{\nsplit.Horz(leftComponent, rightComponent);\n}}}\nor:\n{{{\nsplit.Vert(leftComponent, rightComponent);\n}}}\nIf you want to set splitter position you can:\n{{{\nsplit.SetPos(3000); // More space on the right/bottom side\n}}}\nThe ''SetPos'' argument is an integer from 0 to 10000.\nYou can also dinamically change the direction of your splitter calling ''Horz'' or ''Vert'' without arguments.
To get a string length:\n{{{\n// k is a string\nk.GetLength();\n}}}\n\nTo trim on the left:\n{{{\nTrimLeft(k);\n}}}\n\nand on the right:\n{{{\nTrimRight(k);\n}}}\n\nThe first {{{n}}} characters of the string {{{k}}}:\n{{{\nk.Left(n);\n}}}\n\nThe last {{{n}}} characters of the string {{{k}}}:\n{{{\nk.Right(n);\n}}}\n\nThe substring of the string {{{k}}} starting from the index {{{i}}} and long {{{n}}} characters:\n{{{\nk.Mid(i,n);\n}}}\n\nThe character at index {{{i}}} of the string {{{k}}}\n{{{\nk[i];\n}}}\n\nSplitting a string using a separator character\n{{{\nString buffer="A string\snwith multiple\snlines";\nVector<String> lines=Split(buffer, '\sn', true);\n}}}\n}}}
/***\nPlace your custom CSS here\n***/\n/*{{{*/\n\n/*}}}*/\n
You can use tabs in your graphical interface. As usual there are many ways to do it. This is the most practical for me:\n\n# Isolate every page in a custom component. See CustomComponentWithLayoutFile. \n# When you have isolated the pages, you include a TabCtrl in your layout file\n# You can add the pages in the tab component like this:\n{{{\nTabsConfigurazione.Add(guiConfigurazioneDatabase, "Database");\nTabsConfigurazione.Add(guiElencoTabelle, "Tabelle");\nTabsConfigurazione.Add(guiConfigurazioneFix, "Gestione Errori");\n}}}
Ultimate++ is a fantastic, and free, developer platform.\nYou can find it here: [[link|]]\n\nThese are some recipes for Upp. \nYou can also search from the search box on the right bar of this page or from the tags.\n* AdditionalCompilerLinkerFlags: How to compile/link with some specific options\n* AddingNewMainPackage: How to add a main package and creating a new application\n* AddingPackages: How to add a requirement package to your main package\n* AddingFiles: How to add a file to your package\n* AddingMenu: How to add a menubar to your window\n* AddingToolbar: How to add a toolbar to your window\n* AppInternationalization: How to internationalize your app with translation files\n* AnotherWindow: How to add anoher window to your app\n* CallBacks: How to react to user events\n* ComponentDefaultSize: How to reset the size of the components in the designer\n* CustomComponentWithLayoutFile: How to create a custom component with a layout file\n* ChangeCodeEditorFont: How to change the code editor fonts\n* ChangeDefaultFileEncoding: How to change the default file encoding for the ide\n* ChangeFileEncoding: How to change the file encoding. For a single file and for the entire project\n* ChangingAppName: How to change the application name and the message dialogs title\n* ChangingShortCut: How to change the shortcuts on the ide\n* CreateConfigFiles: How to manage configuration files in a really simple way\n* EditString: How to play with text boxes\n* FileDialogs: How to let the user select a file or a directory\n* FindInAllFiles: How to find a string in all files\n* IconsFromCtrlLib: How to reuse the icons in the CtrlLib package\n* LabelManagement: Play with labels\n* LayoutManagement: How to manage your layout file\n* LinkingWithExternalLibraries: How to link with an external library\n* LinuxAssistShortcutIssue: Ctrl-space doesn't work in your linux box? Fix it!\n* LoadImage: How to load an image\n* ModalDialogs: How to create new modal dialogs\n* MessageDialogs: How to show messages to user\n* ParserXML: How to read an XML file\n* TabManagement: How to create a tabbed interface\n* SimpleFileManagement: How to read and write files in a easy way\n* SplitterManagement: How to use splitters\n* StringRecipes: String functions, trimming, length, substring, splitting\n* UsingArrayCtrl: How to use the ArrayCtrl control (table-like)\n* UsingHttpClient: How to grab data from the internet\n* WindowSizeability: How to make a window resizeable
ArrayCtrl is a really powerful table-like component.\nHere I propose a simple way fill and use ArrayCtrl.\n\n! Fill the table\nFirst you should add the columns:\n{{{\n// tableTest is an ArrayCtrl\ntableTest.AddColumn("One");\ntableTest.AddColumn("Two");\ntableTest.AddColumn("Three");\n}}}\nYou can also specify the width of the columns in proportional basis:\n{{{\ntableTest.AddColumn("One",2);\ntableTest.AddColumn("Two",1);\ntableTest.AddColumn("Three",1);\n}}}\nThe size of the column "One" will be the double of the column "Two" and etc...\nAfter adding the columns you should set the row count:\n{{{\ntableTest.SetCount(2);\n}}}\nNow you can set the contents of the cells with the zero-based index of the row and the columns (in that order):\n{{{\ntableTest.Set(0,0,"One test!");\n}}}\n\n! Get the contents of a cell\n{{{\nString k=tableTest.Get(0,0);\n}}}\n\n! Get the selected row\n{{{\nint rowIndex=tableTest.GetCursor();\nif(rowIndex==-1)\n{\n Exclamation("Please select a row!");\n}\n}}}\n\n! Clear the table contents\n{{{\ntable.Clear();\n}}}\nThe columns will be preserved.\n\n! Reset the table\n{{{\ntable.Reset();\n}}}\nLike ''Clear'' but will drop the columns
To grab the contents of a web page an put it on a string you must include in the main package the package "Web" (see AddingPackages) and you must have in your code something similiar to:\n\n{{{\nString error;\nString buffer=HttpClientGet(url, NULL, &error);\nif(buffer.GetLength()==0)\n{\n Exclamation(error);\n}\n}}}\n\nUpp 6.0.5 has a linux bug in the web client and so the code doesn't work in it. :-(\nPlease see:\n
Windows, by default, are not sizeable.\nThis is the right thing because windows are to be designed for beeing sizeable: see LayoutManagement.\nTo make a window sizeable simply put in your constructor something like this:\n\n{{{\nSizeable().MaximizeBox().MinimizeBox();\n}}}
These are the recipes who contains code examples
These are the recipes concerning the use of the wonderful UPP Ide