Open Watcom Linux Port GUI Software Requirements Specification
|
|
|
- Matthew Kelly
- 10 years ago
- Views:
Transcription
1 Open Watcom Linux Port Copyright 2004 Created on 1/15/2004 2:01 PM
2 Open Watcom Linux Port Page 2 of 54 Table of Contents Executive Summary 7 1. Introduction About this document Document structure 7 2. GTK Overview 8 3. General GUI Porting Approach 8 4. Issues Target System Requirements 13 Detailed Porting Guidelines and Estimation 14 Initial Stage GUI Library Initialization. 14 GUIXMain 14 SetupClass 15 _wpi_postquitmessage 15 GUILoadStrInit 15 GUIWinMessageLoop 15 Summary Display window initialization 16 GUIWndInit 16 _wpi_setdouibleclicktime GUIInitDialogFunc _wpi_enddialog 16 Summary Window creation 17 GUIXCreateWindow 19 GUICalcLocation 19 _wpi_createsolidbrush 20 _wpi_create_window_ex 20 _wpi_setredraw 20 GUIMaximizeWindow 20 GUIMinimizeWindow 20 _wpi_showwindow 20 GUIShowWindowNA 20 GUIFreeWindowMemory 20 Summary Standard sample 22 GUIXCreateDialog 27
3 Open Watcom Linux Port Page 3 of 54 GUIDoCreateResDialog 28 DialogTemplate 28 AddControl 28 DoneAddingControls 28 DynamicDialogBox 28 GUIDialogFunc 28 GUIDestroyWnd 28 GUIGetText 28 GUISendMessage 29 GUIWndDirty 29 GUIGetMetrics 29 GUIGetClientRect 29 _wpi_mapwindowpoints 29 _wpi_getwrectvalues 30 _wpi_getheightrect 30 DrawRect 30 GUIXDrawText 30 Summary 30 Elaboration stage Common control functions 30 GUIAddControl 31 GUIResizeControl 31 _wpi_destroywindow 31 GUIEnableControl 31 _wpi_enablewindow 31 GUIIsControlEnabled 31 _wpi_iswindowenabled 32 GUIGetControlRect 32 _wpi_showwindow 32 _wpi_iswindowwisible 32 Summary Common text functions 32 GUISetText 32 GUIClearText GUISelectAll GUISetEditSelect 33 GUIGetEditSelect 33 GUIDlgBuffGetText 33 Summary Special dialogs functions 34 GUIDisplayMessage 34 DlgOpen 34 GUIGetDlgTextMetrics 34 GUIGetSystemMetrics 35 DlgSetCtlSizes 35 GUIGetEditSelect 35 GUIDlgBuffGetText 35 Summary 35
4 Open Watcom Linux Port Page 4 of Scrolling functions 35 Common guidelines 36 Summary Status window functions 36 Common guidelines 36 GUICreateStatusWindow 37 GUICloseStatusWindow 37 GUIDrawStatusText 37 GUIResizeStatusWindow 37 Summary Toolbar functions 37 Common guidelines 37 GUICreateFloatToolBar 37 GUICreateToolBar 37 GUICloseToolBar 38 GUIChangeToolBar 38 Summary Menu functions 38 Common guidelines 38 GUIAppendMenu 38 GUIAppendMenuByOffset 39 GUIInsertMenu 39 GUIEnableMenuItem 39 GUIEnableMenuItem 39 GUISetMenuText 39 GUISetHintText 39 GUIDeleteMenuItem 40 GUIResetMenus 40 GUIEnableMDIMenus 40 GUICreateFloatingPopup GUITrackFloatingPopup GUIGetMenuPopupCount 40 GUIAppendMenuToPopup 40 GUIInsertMenuToPopup Summary Text Handling Functions 41 GUISetWindowText 41 GUIGetWindowText 41 GUIGetWindowTextLength 41 GUIGetExtentX 41 GUIGetExtentY 42 GUIGetControlExtentX 42 GUIGetControlExtentY 42 GUIGetStringPos 43 Summary Drawing functions 43 GUIDrawLine and GUIDrawLineRGB 43
5 Open Watcom Linux Port Page 5 of 54 GUIDrawBar 43 Summary Font handling functions 44 GUIFontsSupported 44 GUIChangeFont 44 GUIGetFontInfo 44 GUISetFontInfo 44 GUISetSystemFont 44 GUIGetFontFromUser 44 Summary Cursor functions 45 GUISetMouseCursor 45 GUIResetMouseCursor 45 Summary Window functions 45 GUIControlDirty 46 GUIWndDirtyRow 46 GUIWndDirtyRect 46 GUIRefresh 46 GUIBringToFront 46 GUISetFocus 46 GUIGetFocus 47 GUIResizeWindow 47 GUIIsMinimized and GUIIsMaximized 47 GUIRestoreWindow 47 GUIHideWindow 47 GUIIsWindowVisible 47 GUISetRestoredSize 47 GUIGetRestoredSize 47 GUISetIcon 48 GUICascadeWindows Summary Hot spot functions 48 GUIInitHotSpots 48 GUIDrawHotSpot 48 Summary Information functions 48 GUIGetKeyState 49 GUIGetPaintRect 49 GUIGetAbsRect 49 GUIGetAbsRect 49 GUIGetMousePosn 49 GUIGetMinSize 49 GUIEnumChildWindows 50 Summary Color functions 50
6 Open Watcom Linux Port Page 6 of 54 GUIGetRGBFromUser 50 Summary Combo list/box functions 50 GUIAddText 51 GUISetListItemData 51 GUIGetListItemData 51 GUIAddTextList 51 GUIInsertText 51 GUIClearList 51 GUIDeleteItem 51 GUIGetListSize 51 GUIGetCurrSelect 52 GUISetCurrSelect 52 GUIGetListItem 52 GUILimitEditText 52 GUIInsertMenuByID 52 Summary Radio button and check box functions 52 GUIIsChecked 52 GUISetChecked 52 Summary F1 key hook functions 53 GUIHookF1 53 GUIUnHookF1 53 Summary Other functions Type definitions Functions that are never used in the current code 54 GUIDropDown 54 GUIScrollCaret 54 GUISetTopIndex GUIGetTopIndex GUISetHorizontalExtent 54 GUIActivateNC 54
7 Open Watcom Linux Port Page 7 of 54 Executive Summary This document describes a detailed approach to porting low-level Open Watcom GUI library to Linux platform using GTK toolkit for the X Window System. 1. Introduction 1.1 About this document This paper represents a result of the Open Watcom low level GUI library research. It provides porting guidelines and identifies the effort required to port the GUI library to Linux platform using GTK windowing toolkit for the X Window System. The research was based on the Open Watcom version This paper is intended as a base Software Requirements Specification for the Open Watcom GUI porting project. 1.2 Document structure This document consists of several parts. GTK Overview provides a short overview of the GIMP Toolkit General GUI Porting Approach describes a porting approach. Issues identifies a set of possible caveats that should be considered before commencing the porting effort. Target System Requirements provides information about required software on a target system for the ported library to run. Detailed Porting Guidelines and Estimation provides detailed guidelines on porting each library function.
8 Open Watcom Linux Port Page 8 of GTK Overview GTK (GIMP Toolkit) is a library for creating graphical user interfaces. It is licensed using the LGPL license, so open software, free software, or commercial non-free software can be developed using GTK without having to spend costs on licenses or royalties. It's called the GIMP toolkit because it was originally written for developing the GNU Image Manipulation Program (GIMP), but GTK has now been used in a large number of software projects, including the GNU Network Object Model Environment (GNOME) project. GTK is built on top of GDK (GIMP Drawing Kit) which is basically a wrapper around the low-level functions for accessing the underlying windowing functions (Xlib in the case of the X windows system), and gdk-pixbuf, a library for client-side image manipulation. GTK is essentially an object oriented application programmers interface (API). Although written completely in C, it is implemented using the idea of classes and callback functions (pointers to functions). There is also a third component called GLib which contains a few replacements for some standard calls, as well as some additional functions for handling linked lists, etc. The replacement functions are used to increase GTK's portability, as some of the functions implemented here are not available or are non-standard on other Unixes (one example being g_strerror)(). Some also contain enhancements to the libc versions, such as g_malloc() that has enhanced debugging utilities. In version 2.0, GLib has picked up the type system which forms the foundation for GTK's class hierarchy, the signal system which is used throughout GTK, a thread API which abstracts the different native thread APIs of the various platforms and a facility for loading modules. As the last component, GTK uses the Pango library for internationalized text output. Why use GTK? It is: Stable, Free, Fast, Well documented, Broadly adopted, Themes support, Extensible. 3. General GUI Porting Approach The Watcom GUI library depends on the Watcom Programming Interface (WPI) and Memory Tracker (TrMem) libraries. WPI is explicitly designed to port Windows functionality to OS/2 Presentation Manager (not the other way around). Both Windows and OS/2 APIs have similar and compatible designs to a large extent. GTK API is similar neither to Windows nor to OS/2 API, so it would be ineffective to extend the WPI library with GTK support. However taking into account that the Watcom GUI library actively uses WPI calls it seems reasonable to port most of the WPI functions called in the library. Since the GUI library relies on OS/2 PM and Windows API, it uses predefined types that exist only in these environments, such as HWND and HBRUSH. It will be an additional work for the programmer to add appropriate type definitions in a special file. For instance, HWND should be defined as GtkWidget*, and HBRUSH should be defined as GdkStyle*.
9 Open Watcom Linux Port Page 9 of 54 As long as in Windows and OS/2 environments user interface controls are placed according to the specified coordinates we must replicate this in GTK using the following widget hierarchy: Window Vertical Box Scrolled Window View Port Fixed Menu Bar Handle Box Window Button Tool Bar 0 r File Edit View Vertical Box (4 rows) Scrolled Window Fixed View Port Status Bar Fig.1 Widget hierarchy for a standard Open Watcom GUI window
10 Open Watcom Linux Port Page 10 of 54 Fig.2 Open Watcom IDE GTK prototype.
11 Open Watcom Linux Port Page 11 of 54 Fig 3. Open Watcom IDE GTK prototype
12 Open Watcom Linux Port Page 12 of Issues Due to the fact that Open Watcom itself is heavy oriented towards Windows, several issues should be considered and dealt with before commencing the porting effort. Resource files There is no possibility in GTK to handle the Windows or OS/2 style resource files. GTK uses its own resource files which are very much different from those in Windows or OS/2 and allows to specify only styles and key bindings of the widgets. There is a possibility to overcome this issue to some extent by using libglade library which is used in GTK to build user interface described in the XML file. A utility can be written to extract all the necessary information from the Windows OS/2 resource files and present it in the XML format which can be handled by libglade to build a user interface. However this will provide only a partial solution as there is nothing like String Table in libglade as string resources are handled by gettext library in GTK. Also there are no numeric resource identifiers in GTK. Problematic functions are: GUICreateResDialog(), GUICreateDialogFromRes() and GUILoadString(). MDI "Windows in Window" model GTK has no possibility to implement applications with MDI "Windows in Window" model. However, it is possible to assign a parent for windows, and they will be destroyed when the parent is closed. Help subsystem GTK has no built in user help subsystem, as this level of user interaction is handled by desktop environments. Problematic functions here are: GUIHelpInit(), GUIHelpFini(), GUIShowHelp(), GUIDisplayHelp(), GUIDisplayHelpWin4() and GUIDisplayHelpId(). Other issues to consider include: Numeric identifiers of widgets. Specific approach to window building includes Window Classes and Dialog Templates. The toolkit allows modifying window (system) menu, which is impossible in GTK.
13 Open Watcom Linux Port Page 13 of Target System Requirements GTK is broadly adopted among the major Linux distribution vendors including RedHat, SuSE, TurboLinux. So, in general case deployment of the ported library should not be a problem. In case the target distribution does not support GTK at all or uses incompatible or older versions of the toolkit the library can be linked statically, the drawback of this approach will be an increased size of the library. In situations when the library would be shipped in source files and then compiled, target system will have to satisfy to a number of requirements. Namely it must have a C compiler and an X Window System including the following libraries: pkg-config (only for compilation) GNU make (only for compilation) JPEG, PNG and TIFF image libraries FreeType fontconfig GNU libiconv library GNU gettext GLib Pango ATK GTK+
14 Open Watcom Linux Port Page 14 of 54 Detailed Porting Guidelines and Estimation Initial Stage 6. GUI Library Initialization. GUI library initialization procedure starts from GUIXMain() function called from predefined in the library main(). Below is the list of subsequent function calls originated from GUIXMain(). GUIXMain() GUIStoreArgs() GUISetWindowClassName() GUIGetWindowClassName() _wpi_setwpiinst() GUIMemOpen() GUIFirstCrack() SetupClass() GUILoadStrInit() GUIGetExtName() GUIInitInternalStringTable() GUIInitGUIMenuHint() GUIGetFront() GUIWinMessageLoop() GUICleanup() GUIDeath() GUICleanupHotSpots() GUIFreeStatus() GUIFiniInternalStringTable() GUILoadStrFini() GUISysFini() GUIFiniDialog() GUIFree() GUIDead() GUIMemClose() Majority of these functions does not need to be changed, GUISetWindowClassName() and GUIGetWindowClassName() is not needed for GTK port at all, since GTK has no window classes. GUIXMain The following functions should be ported: GUIXMain() 0.5 hour(s) SetupClass() hour(s) _wpi_postquitmessage() 0.5 hour(s) GUILoadStrInit() 0.5 hour(s) GUIWinMessageLoop() 1 hour(s) The only function called form the main(). It initializes program GUI, processes message queue and finishes the program.
15 Open Watcom Linux Port Page 15 of 54 SetupClass Time needed for porting: 0.5 hours. Registers a window class. There are no window classes in GTK, so this function should be empty for the GTK port. Time needed for porting: 0.5 hours. _wpi_postquitmessage Post QUIT message into the program. This function should be empty in GTK port since there is no need to emit QUIT message if message loop is not started. GUILoadStrInit Time needed for porting: 0.5 hours. Load external resource DLL under Windows, and set GUIMsgInitFlag. Since there is no "external resource DLLs" in Linux, the GTK port should do the same that OS/2 port does, namely, just set GUIMsgInitFlag. Time needed for porting: 0.5 hours. GUIWinMessageLoop Summary Starts the main program loop. In GTK program message loop strats with gtk_main(). 3 hours are needed for porting and, additionally, approximately 3 more hours are needed for testing and tuning, totaling to 6 hours for this part. At the completion of this step we will be able to execute the following code. int GUImain() {}
16 Open Watcom Linux Port Page 16 of Display window initialization In order to initialize the library, programmer should call GUIWndInit() function. Below is the list of subsequent function calls originated from GUIWndInit(). GUIWndInit GUIWndInit() GUISysInit() _wpi_setdoubleclicktime() GUISetScreen() GUIInitDialog() GUIStrDup() GUIAlloc() DialogTemplate() DoneAddingControls() DynamicDialogBox() GUIInitDialogFunc() _wpi_enddialog() The following functions should be ported: GUIWndInit() 1 hour(s) _wpi_setdouibleclicktime() 0.5 hour(s) GUIInitDialogFunc() 4 hour(s) _wpi_enddialog() 1 hour(s) High level function for the library initialization. It is needed to use gdk_screen_get_width() and gdk_screen_get_height() applied to the result of gdk_screen_get_default()in order to retrieve screen width and high, instead of _wpi_get_systemmetric(). Time needed for porting: 1 hour(s). _wpi_setdouibleclicktime Sets the double click time. Programmer should use gdk_set_double_click_time() Time needed for porting: 0.5 hour(s). GUIInitDialogFunc Callback function the test dialog box used to get the dialog box font and client size information. In GTK it is possible to get the dialog box font from the style returned by gtk_widget_get_default_style(). Instead of _wpi_getclientrect(), _wpi_getwidthrect() and _wpi_getheightrect() functions the gtk_widget_get_request_size() should be called. Time needed for porting: 4 hour(s). _wpi_enddialog This function is used to dismiss a dialog. Note, that this does not destroy the dialog by default but only hides the dialog.
17 Open Watcom Linux Port Page 17 of 54 Summary The similar behaviour could be achieved in GTK by emitting "delete_event" to the given window. g_signal_emit() or g_signal_emit_by_name() should be used. Time needed for porting: 1 hour(s). 6.5 hours are needed for porting activity and, additionally, approximately 3.5 hours are needed for testing and tuning. This step requires 10 hours. At the end of this step we will be able to execute the following code. int GUImain() { GUIWndInit(250); } 8. Window creation This step requires Resource Files handling implemented (see Issues section). Below is the list of subsequent function calls originated from GUICreateWindow(). GUICreateWindow() GUISetupWnd() GUIXSetupWnd() GUIXCreateWindow() GUISetupStruct() GUICalcLocation() GUIScaleToScreen() GUIConvertRect() GUIConvert() GUIMulDiv() GUIScaleToScreenR() GUIConvertRect() GUIConvert() GUIMulDiv() _wpi_getclientrect() _wpi_getheightrect() _wpi_cvtc_y_size_plus1() _wpi_cvtc_y() _wpi_getclientrect() _wpi_getheightrect() GUISetColours()
18 Open Watcom Linux Port Page 18 of 54 GUIXSetColours() SetBKBrush() GUIGetRGB() FillInRGB() GetRValue() GetGValue() GetBValue() GUIRGB() _wpi_createsolidbrush() _wpi_loadmenu() GUICreateMenus() _wpi_createmenu() AppendMenus() GUICreateSubMenu() GUICreateMenuFlags() _wpi_appendmenu() AppendMenu() InsertMenu() InsertPopup() GetPopupHMENU() GetParentOffset() _wpi_getmenuitemcount() _wpi_getsubmenu() GUIGetHMENU() _wpi_get_systemmenu() _wpi_get_menu() GUIInitHint() GetStructNum() CountMenus() InsertHint() GUISetGUIHint() _wpi_create_window_ex() GUISetRedraw() _wpi_setredraw() GUIMaximizeWindow()
19 Open Watcom Linux Port Page 19 of 54 GUIMinimizeWindow() _wpi_showwindow() GUIShowWindowNA() GUIInvalidatePaintHandles() GUIFreeWndPaintHandles() GUIInitMDI() GUIIsValidWindow() GUIGetFront() GUIGetNextWindow() InList() GUIFreeWindowMemory() It is impossible to implement _wpi_loadmenu() and GUICreateMenus() on GTK because GTK doesn't support OS/2-like resource files and has no possibility to modify window (system) menu. Refer to the Issues section. The following functions should be ported: GUIXCreateWindow() 4 hour(s) GUICalcLocation() 2 hour(s) _wpi_createsolidbrush() 2 hour(s) _wpi_create_window_ex() 4 hour(s) _wpi_setredraw() 1 hour(s) GUIMaximizeWindow() 1 hour(s) GUIMinimizeWindow() 1 hour(s) _wpi_showwindow() 1 hour(s) GUIShowWindowNA() 1 hour(s) GUIFreeWindowMemory() 2 hour(s) GUIXCreateWindow This high level function creates a window widget and applies the passed parameters to it. Despite the fact that all the low-level functionality is performed by sub-calls, some tweaking may be needed. Time needed for porting: 4 hours. GUICalcLocation This function calculates coordinates of the new window. Note that X Window System window managers are free to ignore this; most window managers ignore requests for initial window placement (using a userdefined placement algorithm instead) and honors requests only after the window has been shown. Instead of using _wpi_getclientrect() to get client area coordinates of the window, programmers should use gtk_widget_get_request_size().
20 Open Watcom Linux Port Page 20 of 54 _wpi_createsolidbrush In Windows this returns a solid brush with color. In OS/2 PM this allocates space for the object structure and sets the foreground colour for the brush. For GTK this should create GtkStyle structure with the given parameters. _wpi_create_window_ex This function returns pointer to newly created window widget with the given parameters. When ported, this function should make a call of gtk_window_new(), and apply parameters passed in info. After the window is created, it is necessary to put GtkScrolledWindow widget in it and then put GtkFixed widget in the scrolled window widget. See General Porting Approach section. Time needed for porting: 4 hours. _wpi_setredraw This function enables/disables window updates. Should be done via gdk_window_thaw_updates() and gdk_window_freeze_updates() GUIMaximizeWindow This function maximizes the specified window. In order to ask the window manager to maximize the window in GTK gtk_window_maximize() should be called. GUIMinimizeWindow This function minimizes the specified window. In order to ask window manager to minimize the window in GTK, gtk_window_minimize() should be called. _wpi_showwindow Shows the window according to the given state. Windows predefined states are used. In the GTK gtk_widget_show() and gtk_window_hide() should be used. GUIShowWindowNA Shows the window. gdk_window_show() should be used GUIFreeWindowMemory Frees all resources related to the given window. In GTK gtk_object_destory() should be called which automatically will destroy all children. Some additional tweaking may be needed.
21 Open Watcom Linux Port Page 21 of 54 Summary 19 hours are needed for porting activity and, additionally, approximately 16 more hours are needed for testing and tuning. This step requires 35 hours. At the finish of this step we will be able to execute the following code. #include "gui.h" #include "guitypes.h" static gui_rect Scale = { 0, 0, 1000, 1000 }; bool MainEventWnd( gui_window *gui, gui_event gui_ev, void *param ) { gui = gui; gui_ev = gui_ev; param = param; return( TRUE ); } static gui_create_info Parent = { "Sample Application", { 250, 250, 500, 500 }, GUI_HSCROLL GUI_VSCROLL, GUI_GADGETS GUI_VISIBLE, NULL, 0, NULL, 0, NULL, &MainEventWnd, NULL, NULL, 0 }; static gui_create_info Child = { "Child Window", { 300, 300, 200, 200 }, GUI_SCROLL_BOTH, GUI_VISIBLE+GUI_CLOSEABLE+GUI_MAXIMIZE+GUI_RESIZEABLE+GUI_MINIMIZE, NULL, 0, NULL, 0, NULL, &MainEventWnd, NULL, NULL, 0 }; void GUImain( void ) { GUIMemOpen(); GUIWndInit( 300, GUI_GMOUSE ); GUISetScale( &Scale ); Child.parent = GUICreateWindow( &Parent );
22 Open Watcom Linux Port Page 22 of 54 } GUICreateWindow( &Child ); 9. Standard sample The next objective is to run a standard Watcom GUI sample program located in gui/sample/samp2.c. Below is its listing. #include <string.h> #include "gui.h" #define TRUE 1 #define FALSE 0 #define HEIGHT 5 #define WIDTH 8 static gui_ord Width = 0; #define NUM_TEXT 5 static char Text[][NUM_TEXT] = { {"0%"}, {"25%"}, {"50%"}, {"75%"}, {"100%"} }; static int Strlen[NUM_TEXT] = { 2, 3, 3, 3, 4 }; static GUICALLBACK GetNewFunction; static GUICALLBACK StatusFunction; static gui_create_info DialogWnd = { "Install Program: ", { 20, 20, 40, 40 }, GUI_NOSCROLL, GUI_VISIBLE, NULL, 0, NULL, 0, NULL, &GetNewFunction, NULL, 0 }; static gui_rect Rect; static int Row; static int NumEnters = 0; static gui_colour_set StatusColours[GUI_NUM_ATTRS+1] = { /* Fore Back */ GUI_BLUE, GUI_WHITE, /* GUI_MENU_PLAIN */ GUI_BLUE, GUI_WHITE, /* GUI_MENU_STANDOUT */ GUI_BLUE, GUI_WHITE, /* GUI_BACKGROUND */ GUI_BLUE, GUI_WHITE, /* GUI_TITLE_ACTIVE */ GUI_GREY, GUI_WHITE, /* GUI_TITLE_INACTIVE */
23 Open Watcom Linux Port Page 23 of 54 }; GUI_BLUE, GUI_WHITE, /* GUI_FRAME_ACTIVE */ GUI_GREY, GUI_WHITE, /* GUI_FRAME_INACTIVE */ GUI_BRIGHT_WHITE, GUI_MAGENTA /* GUI_FIRST_UNUSED */ static gui_create_info StatusWnd = { "Percent of Installation Complete", { 19, 70, 42, 20 }, GUI_NOSCROLL, GUI_VISIBLE GUI_DIALOG_LOOK, NULL, 0, NULL, GUI_NUM_ATTRS + 1, &StatusColours, &StatusFunction, NULL, 0 }; enum { ctr_static, ctr_edit, ctr_cancelbutton, ctr_okbutton }; static gui_control_info GetNew[] = { { GUI_STATIC, "Please enter install path:", { 4, 4, 30, HEIGHT }, NULL, GUI_NOSCROLL, GUI_NONE, ctr_static }, { GUI_EDIT, NULL, { 4, 15, 30, HEIGHT }, NULL, GUI_NOSCROLL, GUI_NONE, ctr_edit }, { GUI_PUSH_BUTTON, "CANCEL", { 6, 30, WIDTH, HEIGHT }, NULL, GUI_NOSCROLL, GUI_NONE, ctr_cancelbutton }, { GUI_DEFPUSH_BUTTON, "OK", { 26, 30, WIDTH, HEIGHT }, NULL, GUI_NOSCROLL, GUI_NONE, ctr_okbutton } }; static gui_colour_set Colours[GUI_NUM_INIT_COLOURS] = { { GUI_BRIGHT_WHITE, GUI_BLUE }, { GUI_BRIGHT_WHITE, GUI_BLUE } }; static char * text = NULL; static gui_message_return ret_val = GUI_RET_CANCEL; static gui_window * Status = NULL; /* * GetNewFunction - call back routine for the GetNewVal dialog */ static bool GetNewFunction( gui_window * gui, gui_event gui_ev, void * param ) {
24 Open Watcom Linux Port Page 24 of 54 unsigned id; } switch( gui_ev ) { case GUI_INIT_DIALOG : ret_val = GUI_RET_CANCEL; break; case GUI_DESTROY : if( Status!= NULL ) { GUIDestroyWnd( Status ); } break; case GUI_CLICKED : GUI_GETID( param, id ); switch( id ) { case ctr_cancelbutton : GUICloseDialog( gui ); ret_val = GUI_RET_CANCEL; break; case ctr_okbutton : text = GUIGetText( gui, ctr_edit ); if( Status == NULL ) { Status = GUICreateWindow( &StatusWnd ); } else { NumEnters ++; Rect.width = ( NumEnters * Width ) / 4; if( NumEnters > 4 ) { GUICloseDialog( gui ); } else { GUIWndDirty( Status ); } } ret_val = GUI_RET_OK; break; } break; } return( TRUE ); /* * StatusFunction - call back routine for the status window */ static bool StatusFunction( gui_window * gui, gui_event gui_ev, void * param ) { int i; int pos; gui_text_metrics metrics; param = param; switch( gui_ev ) { case GUI_INIT_WINDOW : Row = GUIGetNumRows( gui ) / 2; GUIGetTextMetrics( gui, &metrics );
25 Open Watcom Linux Port Page 25 of 54 } GUIGetClientRect( gui, &Rect ); Rect.x = 1; Rect.y = 1; Width = Rect.width - 2 * Rect.x; Rect.width = 0; for( i = 0; i < NUM_TEXT; i++ ) { Strlen[i] *= metrics.max.x; } break; case GUI_DESTROY : break; case GUI_PAINT : GUIDrawRect( gui, &Rect, GUI_FIRST_UNUSED ); for( i = 0; i < NUM_TEXT; i++ ) { pos = ( i * Width / 4 ) - Strlen[i] + Rect.x; if( pos < (int)rect.x ) { pos = Rect.x; } if( ( i > NumEnters ) ( i == 0 ) && ( NumEnters == 0 ) ) { GUIDrawText( gui, &Text[i], Strlen[i], Row, pos, GUI_TITLE_ACTIVE ); } else { GUIDrawText( gui, &Text[i], Strlen[i], Row, pos, GUI_FIRST_UNUSED ); } } break; } return( TRUE ); void GUImain( void ) { } GUIMemOpen(); GUIWndInit( 250 ); GUICreateDialog( &DialogWnd, NUM_CONTROLS, &GetNew ); Here is a list of functions not yet described: GUICreateDialog() GUIDestroyWnd() GUIGetText() GUICloseDialog() GUIWndDirty() GUIGetNumRows() (doesn't need to be ported) GUIGetTextMetrics() GUIGetClientRect() GUIDrawRect()
26 Open Watcom Linux Port Page 26 of 54 GUIDrawText(). Below is the list of subsequent function calls. GUICreateDialog() CreateDlg() GUISetupWnd() GUIXCreateDialog() GUISetupStruct() GUIDoCreateResDialog() AdjustForFrame() AdjustToDialogUnits() ToDialogUnits() GUIDlgCalcLocation() GUISetControlStyle() DialogTemplate() AddControl() GUIControlInsert() DoneAddingControls() DynamicDialogBox() GUIDialogFunc() GUIFreeWindowMemory() GUIDestroyWnd() GUIGetText() GUIGetControlClass() GUIGetControlByID() GUICloseDialog() GUISendMessage() GUIWndDirty() GUIGetFront() GUIGetNextWindow() GUIGetParentFrameHWND()
27 Open Watcom Linux Port Page 27 of 54 GUIGetTextMetrics() GUIGetMetrics() GUIGetTheDC() GUIReleaseTheDC() GUISetMetrics() GUIScreenToScaleR() GUIConvert() GUIGetClientRect() _wpi_mapwindowpoints() _wpi_getwrectvalues() _wpi_getheightrect() GUIClientToScaleRect() GUIScreenToScaleRect() GUIConvertRect() GUIDrawRect DrawRect() GUIGetScrollPos()... GUIDrawText() GUIGetTextMetrics() GUIXDrawText() GUIDrawTextBitmapAttr() GUIGetFore() GUIGetBack() GUIDrawTextBitmapRGB()... GUIXCreateDialog Creates a dialog with specified controls. Instead of calling GlobalFree() here the window should be destroyed with gtk_widget_destroy() Some tweaking may be needed.
28 Open Watcom Linux Port Page 28 of 54 GUIDoCreateResDialog Creates dialog defined in resource file. Consider Issues section. DialogTemplate AddControl Creates a dialog template. There are no dialog templates in GTK. However, Open Watcom GUI Library adds controls to dialog templates, so we will create a dialog in this function. gtk_window_create() is needed to create a dialog. Adds control to the specified dialog template. There is big amount of work here. This function should create all necessary controls, and apply specified attributes for every requested control. Depending on type of the control and attributes various GTK functions should be used. Time needed for porting: 8 hours. DoneAddingControls Called when there are no more controls. Should be empty in GTK port. Time needed for porting: 0.5 hour. DynamicDialogBox Creates a dynamic dialog box. Should do nothing in GTK port, since DialogTemplate() function created the dialog. Time needed for porting: 0.5 hour. GUIDialogFunc Callback function for all dynamically created dialogs. Should be rewritten for GTK version. The callback should correctly process resizing "resizerequest" and "close" events. GUIDestroyWnd GUIGetText Destroys the given window or all windows if NULL. In GTK port, the function should call gtk_widget_destroy() for the given window or for the toplevel window if NULL. Time needed for porting: 2 hours Returns a copy of the text.
29 Open Watcom Linux Port Page 29 of 54 Should be greatly modified in GTK port, but it is a straightforward task. Text of almost all widgets could be retrieved via gtk_label_get_label(), and gtk_button_get_label(). Note that returned string will be owned by a widget and must not be modified or freed. So, it is needed to duplicate them in this function. Selection of GtkTreeView could be accessed via gtk_tree_view_get_selection() function. Time needed for porting: 6 hours. GUISendMessage GUIWndDirty GUIGetMetrics Sends a message to the specified window. g_signal_emit() should be used for this purpose. Tells the user interface that interface should be repainted. gdk_window_process_updates() can repaint the window in GTK. Returns text metrics for font of the given window. GUIGetDC() and GUIReleaseDC should not be called in GTK port. There is no need to work on so low level in GTK. FontMetrics of the given window could be retrieved in the following way: PangoContext context = gtk_widget_get_pango_context(widget); PangoFontMetrics metrics = pango_context_get_metrics(context, widget->style->font_desk, pango_context_get_language(context)); g_memmove(&guitm, metrics); pango_font_metrics_unref(metrics); GUIGetClientRect Returns scaled, depending upon current scaling settings, rectangle of the given window in absolute coordinates. Note, that client area of the window is the area of the GtkScrolledWindow widget placed in the window. _wpi_mapwindowpoints Translates coordinates relative to source widget's allocation to coordinates relative to destination widget's allocations. The similar functionality in GTK should be achieved by gtk_widget_translate_coordinates(). Note that there is no definition similar to HWND_DESKTOP in GTK. To get the needed value (root window of a given widget) gtk_widget_get_root_window() should be called for a given widget.
30 Open Watcom Linux Port Page 30 of 54 _wpi_getwrectvalues Returns coordinates of the rectangle. Should be rewritten using GdkRectangle type. Time needed for porting: 0.5 hours. _wpi_getheightrect DrawRect Returns height of the given rectangle. Should be rewritten using GdkRectangle structure. Time needed for porting: 0.5 hours. Draws specified rectangle in the given window. Should be rewritten. GTK paint functions applied to the GtkFixed widget placed in the window should be used for this purpose. This approach will allow avoiding all the sub-calls. GUIXDrawText Summary Time needed for porting: 4 hours. Draws specified text in the given window. Should be rewritten. pango_layout_set_text() should be used for text rendering, and gtk_paint_layout() applied to GtkFixed widget placed in the window should be used for drawing. This approach will allow avoiding all the sub-calls. Time needed for porting: 6 hours. 41 hours are needed for porting activity and approximately 24 more hours are required for testing and tuning. This step requires 65 hours. Elaboration stage 10. Common control functions There are a couple of common window control functions in the Open Watcom GUI Library. Below is the list of them with their sub-calls. GUIAddControl() GUIResizeControl() GUIDeleteControl() _wpi_destroywindow() GUIControlDelete() GUIDeleteCtrlWnd() GUIEnableControl() _wpi_enablewindow() GUIIsControlEnabled()
31 Open Watcom Linux Port Page 31 of 54 _wpi_iswindowenabled() GUIGetControlRect() GUIHideControl() ShowControl() _wpi_showwindow() GUIShowControl() GUIIsControlVisible() GUIAddControl _wpi_iswindowwisible() Adds a control to a window. The function should create an appropriate control with appropriate styles and other attributes in the requested position. Already described AddControl should be used here. Time needed for porting: 5 hours. GUIResizeControl Set size and location of a control (relative parent). Instead of using _wpi_getdlgitem() it is needed to use GUIGetControlByID() because the last is portable. Instead of using _wpi_movewindow() it is needed to use gtk_fixed_move() to move the specified control in the fixed widget of window where the control is located. _wpi_destroywindow Destroys the given widget. gtk_widget_destroy() should be called in GTK port. Time needed for porting: 0.5 hour. GUIEnableControl Sets control enabled or not enabled. Instead of using _wpi_movewindow() it is need to use gtk_fixed_move() to move the specified control in the fixed widget of window where the control is located. _wpi_enablewindow Sets specified widget enabled or disabled. gtk_widget_set_sensitive() should be called within this function. Time needed for porting: 0.5 hour. GUIIsControlEnabled Checks if control is enabled.
32 Open Watcom Linux Port Page 32 of 54 Instead of using _wpi_movewindow() it is needed to use gtk_fixed_move() to move the specified control in the fixed widget of window where the control is located. _wpi_iswindowenabled Checks if the given widget is enabled. gtk_widget_get_sensitive() should be called within this function. Time needed for porting: 0.5 hour. GUIGetControlRect Gets location of a control relative to the parent. Instead of using _wpi_movewindow() it is needed to use gtk_fixed_move() to move the specified control in the fixed widget of window where the control is located. Instead of using GUIGetRelRect() it is needed to use g_object_get_property() to read the coordinates of the control, and use gtk_widget_get_size_request() to get its size. _wpi_showwindow Shows or hides widget depending upon the flag. Depending upon the flag gtk_widget_show_all() or gtk_widget_hide_all() function should be called. _wpi_iswindowwisible Summary Checks if the widget is visible. Property "visible" should be used to test if the widget is visible hours are needed for porting activity and, additionally, approximately 13.5 hours are required for testing and tuning. This step requires about 27 hours. 11. Common text functions GUISetText Below is the list of the common text related functions. GUISetText() GUIClearText() GUISelectAll() GUISetEditSelect() GUIGetEditSelect() GUIDlgBuffGetText() Sets the text of the given widget to the given text.
33 Open Watcom Linux Port Page 33 of 54 GUIClearText GUISelectAll Depending on the class of the given widget gtk_entry_set_text() or gtk_label_set_label() should be used. Time needed for porting: 4 hours. Clears the text. GUISetText() should be called to perform the operation. Time needed for porting: 0.5 hour. Selects the text within the controls GUI_EDIT or GUI_EDIT_COMBOBOX. Should call gtk_editable_select() applied to a valid GtkEntry widget to perform the operation. Time needed for porting: 4 hours. GUISetEditSelect Selects the portion of text within controls GUI_EDIT or GUI_EDIT_COMBOBOX. Should call gtk_editable_select() applied to valid GtkEntry widget to perform the operation. GUIGetEditSelect Finds out the portion of the text selected within GUI_EDIT or GUI_EDIT_COMBOBOX. Should call gtk_editable_get_selection_bounds() and gtk_editable_get_chars() applied to valid GtkEntry widget to perform the operation. Time needed for porting: 4 hours. GUIDlgBuffGetText Summary Gets text from the control into a buffer. Additional investigation is needed in order to find out, whether the current memory allocation algorithm in Open Watcom GUI Library can be reused in the GTK port hours are needed for porting activity and, additionally, approximately 8.5 hours are needed for testing and tuning. This step requires about 24 hours.
34 Open Watcom Linux Port Page 34 of Special dialogs functions Below is the list of functions related to special dialogs with their sub-calls. GUIDisplayMessage GUIGetNewVal() GUIDlgOpen() DlgOpen() GUIGetDlgTextMetrics() GUITruncToPixel() DlgSetSize() GUIGetSystemMetrics() DlgSetCtlSizes() GUICreateSysModalDialog() GUICreateDialog() GUIDlgPickWithRtn() GUIDlgOpen() GUIDlgPick() GUIDlgPickWithRtn() GUIGetFileName() GUIDisplayMessage DlgOpen Displays a message and gets the response. Identical functionality could be achieved by using GTK's message dialog via gtk_message_new(). Time needed for porting: 4 hours. Calls GUICreateDilog(), formatting locations to look good on every OS. Some effort to make the controls look similar in Linux to all other systems will be needed. Time needed for porting: 4 hours GUIGetDlgTextMetrics Gets the metrics of the dialog font. FontMetrics of the given window could be retrieved in the following way: PangoContext context = gtk_widget_get_pango_context(widget); PangoFontMetrics metrics = pango_context_get_metrics(context, widget->style->font_desk, pango_context_get_language(context)); g_memmove(&guitm, metrics); pango_font_metrics_unref(metrics);
35 Open Watcom Linux Port Page 35 of 54 GUIGetSystemMetrics Selects the text within GUI_EDIT or GUI_EDIT_COMBOBOX. Instead of calling _wpi_getsystemmetrics() the function should call various GTK functions to get different values. DlgSetCtlSizes Time needed for porting: 10 hours. Sets sizes of controls in GUIDlgOpen. Some effort to make the controls look similar in all systems will be needed. GUIGetEditSelect Finds out the portion of text selected within GUI_EDIT or GUI_EDIT_COMBOBOX. Should call gtk_editable_get_selection_bounds() and gtk_editable_get_chars() applied to valid GtkEntry widget to perform the operation. Time needed for porting: 4 hours. GUIDlgBuffGetText Summary Gets text from the control into a buffer. Additional research should be performed in order to find out whether Open Watcom GUI Library memory allocation algorithm can be reused in the GTK port. 27 hours are needed for porting activity and approximately 44 more hours are needed for testing and tuning. This step requires about 71 hour. 13. Scrolling functions GUIInitHScrollCol() GUIInitVScrollRow() GUISetHScrollCol() GUISetVScrollRow() GUIGetHScrollCol() GUIGetVScrollRow() GUISetHScrollRangeCols() GUISetVScrollRangeRows() GUIGetHScrollRangeCols() GUIGetVScrollRangeRows() GUIDoHScroll() GUIDoVScroll()
36 Open Watcom Linux Port Page 36 of 54 GUIDoHScrollClip() GUIDoVScrollClip() GUIInitHScroll() GUIInitVScroll() GUISetHScroll() GUISetVScroll() GUIGetHScroll() GUIGetVScroll() GUISetHScrollRange() GUISetVScrollRange() GUIGetHScrollRange() GUIGetVScrollRange() GUISetHScrollThumb() GUISetVScrollThumb() Common guidelines Summary WGL windows of the GTK port mush have GTKScroledWindow in them. This should contain GTKViewPort that contains GtkFixed. Values of the scroll bars could be set and get via gtk_scrolled_window_set_hajustment(), gtk_scrolled_window_set_vajustment(), gtk_scrolled_window_get_hajustment() and gtk_scrolled_window_get_vajustment() functions. Since the scroll bars behavior is automatic, there is no possibility to set/get scroll bar range values. Required values could be achieved by getting width and height of the GtkFixed widget. Setting range of a scroll means resizing of the GtkFixed widget. Page size could be obtained from size of the GtkViewPort widget. 16 hours are needed for the porting activity and 16 more hours are required for for testing and tuning. This step requires about 32 hours. 14. Status window functions GUICreateStatusWindow() GUICloseStatusWindow() GUIHasStatus() GUIDrawStatusText() GUIClearStatusText() GUIResizeStatusWindow() Common guidelines WGL windows of the GTK port mush have GTKStatus widget in them. All these functions will interact with it.
37 Open Watcom Linux Port Page 37 of 54 GUICreateStatusWindow Creates a status window. Should make the GtkStatus visible using gtk_widget_show(). GUICloseStatusWindow Closes the status window. Should make the GtkStatus invisible using Gtk_widget_hide() GUIDrawStatusText Draws the text to the status window. Should use gtk_status_push(). GUIResizeStatusWindow Summary Resizes the status window. It is impossible to change X position of the GtkStatus in our layout; however it is never changed through all Open Watcom sources. In addition, it isn't necessary to change vertical size of the bar because it is done automatically. So, this function can be empty in the GTK port. 4 hours are required for the porting activity and, additionally, 4 hours are required for testing and tuning. This step requires about 8 hours. 15. Toolbar functions GUICreateFloatToolBar() GUICreateToolBar() GUICloseToolBar() GUIHasToolBar() GUIChangeToolBar() GUIToolBarFixed() Common guidelines WGL windows of the GTK port mush have GtkHandleBox widget which contains GtkToolbar widget in itself. All these functions will interact with it. GUICreateFloatToolBar Does the same as GUICreateToolbar() which is described below. GUICreateToolBar Creates a tool bar. Should make the GtkHandleBox visible using gtk_widget_show()
38 Open Watcom Linux Port Page 38 of 54 GUICloseToolBar Closes the status window. Should make the GtkHandleBox invisible using gtk_widget_hide() GUIChangeToolBar Summary Changes the tool bar. Makes it fixed or floating. To make the tool bar fixed it is needed to make GtkHandleBox invisible and set parent of the GtkToobar to parent of GtkHandleBox. To reverse the operation it is needed to make the GtkHandleBox visible and set parent of the GtkToobar to the GtkHandleBox widget. 4 hours are needed for porting activity and, additionally, approximately 6 more hours are needed for testing and tuning. This step requires about 10 hours. 16. Menu functions GUIAppendMenu() GUIAppendMenuByOffset() GUIInsertMenu() GUIEnableMenuItem() GUICheckMenuItem() GUISetMenuText() GUISetHintText() GUIDeleteMenuItem() GUIResetMenus() GUIEnableMDIMenus() GUICreateFloatingPopup() GUITrackFloatingPopup() GUIGetMenuPopupCount() GUIAppendMenuToPopup() GUIInsertMenuToPopup() Common guidelines WGL windows of the GTK port must have GtkMenuBar widget in them. All these functions will interact with it. GUIAppendMenu Appends a menu to the menu bar. gtk_menu_shell_append() should be used to add the menu to GtkMenuBar widget. Floating status could be adjusted via tear-off state of the GtkMenu.
39 Open Watcom Linux Port Page 39 of 54 Additionally, the menu and all items should be added in global controls table via GUIControlInsert(), since GTK doesn't allow assigning ID to the menu items. GUIAppendMenuByOffset Appends sub menu to the menu. gtk_menu_shell_append() should be used to insert the menu to GtkMenu widget. Additionally, the menu and all items should be added in global controls table via GUIControlInsert, since GTK doesn't allow assigning ID for the menu items. GUIInsertMenu Inserts a menu into the menu bar. gtk_menu_shell_insert() should be used to add the menu to GtkMenuBar widget. Floating status could be adjusted via tear-off state. Additionally, the menu and all items should be added to the global controls table via GUIControlInsert(), since GTK doesn't allow to assign ID for the menu items. GUIEnableMenuItem Enables/disables menu item. gtk_widget_set_sensitive() applied to the appropriate GtkMenuItem should be used in this function. The GtkMenuItem widget can be obtained via GUIGetControlByID(). GUIEnableMenuItem Checks/unchecks menu item. gtk_check_menu_item_set_active() applied to the appropriate GtkMenuItem should be used in this function. The GtkMenuItem widget can be obtained via GUIGetControlByID(). GUISetMenuText Change the text of a menu item. gtk_label_set_label() applied to GtkLabel contained in appropriate GtkMenuItem should be used in this function. The GtkMenuItem widget can be obtained via GUIGetControlByID(). The GtkLabel widget could be obtained via gtk_bin_get_child(). GUISetHintText Sets the hint for the menu item. gtk_tooltips_set_tip() applied to GtkLabel contained in appropriate GtkMenuItem should be used in this function. The GtkMenuItem widget can be obtained via GUIGetControlByID(). The GtkLabel widget can be obtained via gtk_bin_get_child().
40 Open Watcom Linux Port Page 40 of 54 GUIDeleteMenuItem Delete a menu item for a pull down menu. gtk_widget_destroy() applied to the appropriate GtkMenuItem should be used in this function. The GtkMenuItem widget can be obtained via GUIGetControlByID(). GUIResetMenus Resets the entire menu structure for a window. The function should destroy and create new GtkMenuBar. And, then, build and add given menu structure. Time needed for porting: 6 hours. GUIEnableMDIMenus Enables/disables the MDI menus. Since the "Window in Window" MDI model is not possible in GTK. This function should do nothing for the GTK port. Time needed for porting: 0.5 hour. GUICreateFloatingPopup Creates a floating popup menu. Should create a GtkMenu widget, and call GUITrackFloatingPopup. GUITrackFloatingPopup Tracks a floating popup menu. gtk_menu_popup() applied to the appropriate GtkMenu should be used in this function. The GtkMenu widget can be obtained via GUIGetControlByID(). GUIGetMenuPopupCount Returns number of items in the given floating popup menu. gtk_container_get_children() applied to the appropriate GtkMenu should be used in this function to obtain a list of the items. Then g_list_length() should be applied to the list to obtain a number of elements in the list. The GtkMenu widget can be obtained via GUIGetControlByID(). GUIAppendMenuToPopup Appends sub menu to the given popup menu. GUIAppendMenu() should be called in this function to perform the operation. GUIInsertMenuToPopup Inserts sub menu to the given popup menu. GUIAppendMenuByOffset() should be called in this function to perform the operation.
41 Open Watcom Linux Port Page 41 of 54 Summary 32.5 hours are needed for the porting activity and, additionally, approximately 32.5 hours are required for testing and tuning. This step requires about 65 hours. 17. Text Handling Functions GUISetWindowText() GUIGetWindowTextLength() GUIGetWindowText() GUIGetRow() GUIGetCol() GUIGetStringPos() GUIGetExtentX() GUIGetExtentY() GUIGetControlExtentX() GUIGetControlExtentY() GUIGetTextMetrics() GUIGetDlgTextMetrics() GUIGetPoint() GUIGetRow(), GUIGetCol(), GUIGetTextMetrics(), GUIGetDlgTextMetrics() and GUIGetPoint() does not need to be ported. GUISetWindowText Set window caption. gtk_set_window_title() should be used here. Time needed for porting: 2 hours GUIGetWindowText Get window caption. gtk_get_window_title() should be used here. Time needed for porting: 2 hours GUIGetWindowTextLength Get caption text length. In GTK the length of a char, pointer to which is returned by gtk_get_window_title() can be measured. GUIGetExtentX Time needed for porting: 2 hours Finds X extent of the given string in current font. Width of the given string in specified window could be obtained in the following way.
42 Open Watcom Linux Port Page 42 of 54 PangoLayout pango_layout = gtk_widget_create_layout(fixed, NULL); pango_layout_set_text(pango_layout, text, text_len); pango_layout_get_pixel_size(pango_layout, &width, NULL); Where fixed is the GtkFixed widget located in the given window, text is the given text in the UTF-8 ecoding, text_len is the length if the text, and width is variable for desired value. GUIGetExtentY Finds Y extent of the given string in current font. Height of the given string in specified window could be obtained in the following way. PangoLayout pango_layout = gtk_widget_create_layout(fixed, NULL); pango_layout_set_text(pango_layout, text, text_len); pango_layout_get_pixel_size(pango_layout, NULL, &height); Where fixed is the GtkFixed widget located in the given window, text is the given text in the UTF-8 ecoding, text_len is the length if the text, and height is variable for desired value. GUIGetControlExtentX Finds X extent of the given string in font of the given control. Width of the given string in specified window could be obtained in the following way. PangoLayout pango_layout = gtk_widget_create_layout(widget, NULL); pango_layout_set_text(pango_layout, text, text_len); pango_layout_get_pixel_size(pango_layout, &width, NULL); Where widget is the given widget returned by GUIGetControlByID located in the given window, text is the given text in the UTF-8 ecoding, text_len is the length if the text, and width is variable for desired value. GUIGetControlExtentY Finds Y extent of the given string in font of the given control. Height of the given string in specified window could be obtained in the following way. PangoLayout pango_layout = gtk_widget_create_layout(widget, NULL); pango_layout_set_text(pango_layout, text, text_len); pango_layout_get_pixel_size(pango_layout, NULL, &height); Where widget is the given widget returned by GUIGetControlByID located in the given window, text is the given text in the UTF-8 encoding, text_len is the length of the text, and height is variable for desired value.
43 Open Watcom Linux Port Page 43 of 54 GUIGetStringPos Summary Returns offset (in characters) of the given point if string is offset from left by given amount. Calling of GUIGetTheDC() and DoReturn should be eliminated in this function as GTK operates at a higher level. 15 hours are needed for porting activity and, additionally, approximately 15 hours are needed for testing and tuning. This step requires about 30 hours. 18. Drawing functions GUIFillRect() GUIDrawRect() GUIDrawLine() GUIFillRectRGB() GUIDrawRectRGB() GUIDrawLineRGB() GUIDrawText() GUIDrawTextPos() GUIDrawTextExtent() GUIDrawTextExtentPos() GUIDrawTextRGB() GUIDrawTextPosRGB() GUIDrawTextExtentRGB() GUIDrawTextExtentPosRGB() GUIDrawBar() GUIDrawBarGroup() Since a couple of functions use other already ported functions, just a few of these functions needs modifications to make them work under GTK. GUIDrawLine and GUIDrawLineRGB GUIDrawBar Draw a line given a gui_attr or RGB and style information. These functions use DrawLine() function which should be rewritten using gtk_paint_hline(), gtk_paint_vline() or gtk_paint_polygon(). Time needed for porting: 4 hour. Draws the outline of a rectangle given a gui_attr. The function should use gtk_paint_bar() to perform the operation. Time needed for porting: 4 hour.
44 Open Watcom Linux Port Page 44 of 54 Summary 8 hours are needed for porting activity and, additionally, approximately 16 hours are needed for testing and tuning. This step requires about 24 hours. 19. Font handling functions GUIFontsSupported() GUIChangeFont() GUIGetFontInfo() GUISetFontInfo() GUISetSystemFont() GUIGetFontFromUser() GUIFontsSupported Returns TRUE if these font functions are supported. All these functions except GUISetSystemFont() can be implemented. So, GUIFontsSupported() should always return TRUE. Time needed for porting: 0.5 hours. GUIChangeFont Gets font choice from user and changes the font of the given window. The function could be ported implemented with GUIGetFontFromUser() and GUISetFontInfo(). GUIGetFontInfo Gets the font information for a window. pango_font_description_to_string() applied to a style attribute of the given window should be used to perform the operation. GUISetFontInfo Sets the font information for a window. The function should create PangoFontDescription via pango_font_description_from_string() function, and modify style of the given window with gtk_widget_modify_style(). Time needed for porting: 3 hours. GUISetSystemFont Sets font to the system font (fixed or proportional). It is impossible to implement this function in GTK. So, this function should do nothing in the GTK port. Time needed for porting: 0.5 hours. GUIGetFontFromUser Gets the font information from the user using a dialog.
45 Open Watcom Linux Port Page 45 of 54 Summary This function should be implemented using standard GtkFontSelectionDialog(). Time needed for porting: 4 hours. 12 hours are needed for porting activity and, additionally, approximately 12 hours are needed for testing and tuning. This step requires 24 hours. 20. Cursor functions GUISetMouseCursor() GUIResetMouseCursor() GUISetMouseCursor Sets the type of mouse cursor. This function should create an apropriate cursor with gdk_cursor_new(). And use gdk_window_set_cursor() applied to the result of gdk_get_default_root_window() to change the cursor. GUIResetMouseCursor Summary Resets the type of mouse cursor. This function should use gdk_window_set_cursor() applied to the result of gdk_get_default_root_window() and pass NULL as cursor type to change the cursor to default. 4 hours are needed for porting activity and 2 more hours are required for testing and tuning. This step requires about 6 hours. 21. Window functions GUIGetWindowColours() GUIControlDirty() GUIWndDirtyRow() GUIWndDirtyRect() GUIRefresh() GUIActivateNC() GUIBringToFront() GUIGetRootWindow() GUISetFocus() GUIGetFocus() GUIResizeWindow() GUIIsMinimized() GUIIsMaximized()
46 Open Watcom Linux Port Page 46 of 54 GUIRestoreWindow() GUIHideWindow() GUIShowWindow() GUIIsWindowVisible() GUISetRestoredSize() GUIGetRestoredSize() GUISetIcon() GUICascadeWindows() GUIControlDirty Causes refresh of the given control. gdk_window_process_updates() can repaint the control obtained via GUIGetControlByID(). GUIWndDirtyRow Causes refresh of the given row. gdk_widget_queue_draw_area() can repaint the window region. Note that calculation of the row coordinates is needed. Time needed for porting: 3 hours. GUIWndDirtyRect GUIRefresh Causes refresh of the given rect. gdk_widget_queue_draw_area() can repaint the window region. Time needed for porting: 3 hours. Causes refresh of the screen. gdk_window_process_all_updates() can repaint all windows. GUIBringToFront GUISetFocus Bring the window to the top of all others. Gdk_window_show() should be used. Sets input focus to a control in a dialog box or in a window. gtk_window_set_focus() applied to the control obtained via GUIGetControlByID() should be used here.
47 Open Watcom Linux Port Page 47 of 54 GUIGetFocus Finds out which main window has the focus. This function makes no sense in GTK as it is impossible to implement an MDI in GTK. When ported it will always return supplied parameter without modification. Time needed for porting: 0.5 hour. GUIResizeWindow Gives the window a new size and location. gtk_window_move() should be called to move the window, and gtk_widget_set_size_request() called to set a new size. Note, that window managers are free to ignore the moving request; most window managers ignore request for initial window positions (instead using a user-defined placement algorithm) and honor requests after the window has already been shown. GUIIsMinimized and GUIIsMaximized Returns true if window is minimized/maximized. gdk_window_get_state() should be used to perform the operation. GUIRestoreWindow Restore window to pre-minimize or maximize size. gdk_window_unmaximize() should be used to perform the operation. GUIHideWindow Hides the given window. gdk_window_show() should be used to perform the operation. GUIIsWindowVisible Checks if the given window is visible. gdk_is_window_visible() should be used to perform the operation. GUISetRestoredSize Sets a size of the given window to a restored state. gtk_window_set_size() should be used to perform the operation. GUIGetRestoredSize Gets a size of the given window in a restored state. gtk_window_get_size() should be used to perform the operation.
48 Open Watcom Linux Port Page 48 of 54 GUISetIcon Sets an icon for the given window. gtk_window_set_icon() should be used to perform the operation. GUICascadeWindows Summary Arrange all child windows in MDI in cascade. It is impossible to implement in GTK, so this function should just return TRUE. Time needed for porting: 0.5 hour. 25 hours are needed for the porting activity and, additionally, approximately 30 hours are required for testing and tuning. This step requires about 55 hours. 22. Hot spot functions GUIInitHotSpots() GUIGetNumHoSpots() GUIGetHotSpotSize() GUIDrawHotSpot() GUIInitHotSpots Sets the bitmaps associated with user defined hot spots. The function should create an array of GtkImage objects. Some code to convert bitmaps passed in function to some acceptable format will be needed. Time needed for porting: 8 hours. GUIDrawHotSpot Summary Draws a hot spot at a given location. The function should place the requested hot spot in the appropriate position with gtk_fixed_put() function. 10 hours are needed for porting activity and 6 more hours are needed for testing and tuning. This step requires about 16 hours. 23. Information functions GUIGetKeyState() GUISetExtra() GUIGetExtra() GUIGetClientRect()
49 Open Watcom Linux Port Page 49 of 54 GUIGetPaintRect() GUIGetAbsRect() GUIGetRect() GUIGetScrollStyle() GUIGetCreateStyle() GUIGetMousePosn() GUIGetSystemMetrics() GUIGetMinSize() GUIEnumChildWindows() GUIEnumControls() GUIGetArgs() GUIGetKeyState Gets the current Shift-key state. Since the function doesn't allow specifying which input device should be tested, it isn't clear.shift key on which input device should be checked. However as this function is called only in event callbacks, it is possible to get the current Shift state of the input device which initiated the event via gdk_keymap_translate_keyboard_state() function. GUIGetPaintRect The function uses _wpi_getpaintrect() which should be reimplemented for the GTK port to support GdkRectangle structure. GUIGetAbsRect Get a window size and location in absolute user defined units. Windows size can be obtained via gtk_window_get_size() function and position can be obtained via gtk_window_get_position function. GUIGetAbsRect Get a window size and location relative to its parent. The function should call GUIGetAbsRect(). Time needed for porting: 0.5 hours. GUIGetMousePosn Gets the mouse position (in user coordinates). gtk_widget_get_pointer() function should be used to obtain the location of the mouse pointer in widget coordinates. Then the coordinates should be transformed relative to a WGL scaling factor. GUIGetMinSize Returns the smallest valid size for the window.
50 Open Watcom Linux Port Page 50 of 54 The function returns result based in MIN_WIDTH and MIN_HEIGHT definitions that are defined as 0. But in GTK windows may not be resized smaller that 1 by 1 pixels. So these definitions should be changed in the GTK port. Time needed for porting: 0.5 hours. GUIEnumChildWindows Summary Enumerates child windows by calling given function with the gui_window for each. The function should call gdk_window_get_children(), get the child's gui_window via GUIFindWindowFromHWND, and call necessary callback. Time needed for porting: 4 hours. 11 hours are required for the porting activity and, additionally, 10 hours are required for testing and tuning. This step requires about 21 hours. 24. Color functions GUISetWindowColours() GUISetWndColour() GUIGetRGBFromUser() GUIGetColourFromUser() GUIGetRGBFromUser Summary Creates dialog to ask user for color, returns its RGB. GtkColorSelection() should used for this purpose. Time needed for porting: 4 hours. 4 hours are needed for porting activity and 2 more hours are needed for testing and tuning. This step requires about 6 hours. 25. Combo list/box functions GUIAddText() GUISetListItemData() GUIGetListItemData() GUIAddTextList() GUIInsertText() GUIClearList() GUIDeleteItem() GUIGetListSize() GUIGetCurrSelect() GUISetCurrSelect() GUIGetListItem()
51 Open Watcom Linux Port Page 51 of 54 GUIAddText GUILimitEditText() GUIInsertMenuByID Adds a text item to the list. gtk_list_append_items() function should be used to perform the operation. GUISetListItemData Associates data with a list box item. gtk_object_set_user_data() function should be used to perform the operation. GUIGetListItemData Gets the data associated with a list box item. gtk_object_get_user_data() function should be used to perform the operation. Time needed for porting: 4 hours. GUIAddTextList GUIInsertText GUIClearList GUIDeleteItem Adds a text list item to the list using a callback. gtk_list_append_items() function should be used to perform the operation. Time needed for porting: 4 hours. Inserts a text item to a given location in list. gtk_list_insert_items() function should be used to perform the operation. Removes all items from the list. gtk_list_clear_items() function should be used to perform the operation. Deletes an item from the list. gtk_list_clear_items() function should be used to perform the operation. GUIGetListSize Returns the number of items in the list. The number of items in the list can be obtained via g_list_length() applied to the result of gtk_container_get_children() function.
52 Open Watcom Linux Port Page 52 of 54 GUIGetCurrSelect Gets the position of the current selection. To get the list of the selected items selection field of the GtkList should be used. Then, it is needed to compare all the elements in the list with the selected item, and find out number of the selected item. Time needed for porting: 3 hours. GUISetCurrSelect Sets current selection by position. gtk_list_select_item() function should be used to perform the operation. GUIGetListItem Gets the text of a list item by position. g_list_nth() applied to the result of gtk_container_get_children() function should be used to perform the operation. Time needed for porting: 3 hours. GUILimitEditText Sets the maximum allowed length of the contents of the combo box. gtk_entry_set_max_length() applied to entry field of the GtkCombo should be used to perform the operation. Time needed for porting: 3 hours. GUIInsertMenuByID Summary Inserts a sub menu into the menu before the item with the given ID. The function should insert an entry in the GtkList widget using g_list_insert_before() function. Time needed for porting: 3 hours. 33 hours is needed for porting activity and, additionally, it is needed approximately 33 hours for testing and tuning. This step requires about 66 hours. 26. Radio button and check box functions GUIIsChecked() GUIIsChecked GUISetChecked() Finds out if button is checked or not. gtk_toggle_button_get_active() should be used to perform the operation. GUISetChecked Sets button as checked or not.
53 Open Watcom Linux Port Page 53 of 54 Summary gtk_toggle_button_set_active() should be used to perform the operation. 4 hours are needed for porting activity and, additionally, 6 hours are required for testing and tuning. This step requires about 10 hours. 27. F1 key hook functions GUIHookF1() GUIHookF1 GUIUnHookF1 Summary GUIUnHookF1() Sets the hook for F1 key pressing event. Required functionality can be achieved by using gtk_key_snooper_install() function. Time needed for porting: 4 hours. Removes the hook for F1 key pressing event. Required functionality can be achieved by using gtk_key_snooper_install() function. 5 hours are needed for porting activity and, additionally, 4 hours are needed for testing and tuning. This step requires about 9 hours. 28. Other functions. GUISpawnStart() GUISpawnEnd() GUICharLen() First two does nothing in the GUI version. The third function returns length of a specified character in a char places. In this case, this function should always return Type definitions Here is the basic list of definitions that need to be defined in the GTK port. The definitions of this list was determined on investigation stage, however programmer that will be porting the library will be able determine all necessary type definitions more sharply. Time required 16 hours. WPI_TEXTMETRIC PangoFontMetrics HBRUSH -- GtkRcStyle* HWND -- GtkWindow* WM_CLOSE -- "close" WM_RESIZE -- "size-request" WPI_COLOUR -- GdkColor*
54 Open Watcom Linux Port Page 54 of Functions that are never used in the current code GUIDropDown GUIScrollCaret Drops down or raise dropped down list box. Scrolls the caret. GUISetTopIndex Sets the index of item at the top of list. GUIGetTopIndex Gets the index of item at the top of list. GUISetHorizontalExtent GUIActivateNC Sets the width of the widest list box item. Activates non client MDI window.
KaleidaGraph Quick Start Guide
KaleidaGraph Quick Start Guide This document is a hands-on guide that walks you through the use of KaleidaGraph. You will probably want to print this guide and then start your exploration of the product.
Practical Example: Building Reports for Bugzilla
Practical Example: Building Reports for Bugzilla We have seen all the components of building reports with BIRT. By this time, we are now familiar with how to navigate the Eclipse BIRT Report Designer perspective,
Building a Python Plugin
Building a Python Plugin QGIS Tutorials and Tips Author Ujaval Gandhi http://google.com/+ujavalgandhi This work is licensed under a Creative Commons Attribution 4.0 International License. Building a Python
Xcode Project Management Guide. (Legacy)
Xcode Project Management Guide (Legacy) Contents Introduction 10 Organization of This Document 10 See Also 11 Part I: Project Organization 12 Overview of an Xcode Project 13 Components of an Xcode Project
Help on the Embedded Software Block
Help on the Embedded Software Block Powersim Inc. 1. Introduction The Embedded Software Block is a block that allows users to model embedded devices such as microcontrollers, DSP, or other devices. It
Tutorials. If you have any questions, comments, or suggestions about these lessons, don't hesitate to contact us at [email protected].
Tutorials The lesson schedules for these tutorials were installed when you installed Milestones Professional 2010. They can be accessed under File Open a File Lesson Chart. If you have any questions, comments,
Appointment Scheduler
EZClaim Appointment Scheduler User Guide Last Update: 11/19/2008 Copyright 2008 EZClaim This page intentionally left blank Contents Contents... iii Getting Started... 5 System Requirements... 5 Installing
GelAnalyzer 2010 User s manual. Contents
GelAnalyzer 2010 User s manual Contents 1. Starting GelAnalyzer... 2 2. The main window... 2 3. Create a new analysis... 2 4. The image window... 3 5. Lanes... 3 5.1 Detect lanes automatically... 3 5.2
Chapter 15 Using Forms in Writer
Writer Guide Chapter 15 Using Forms in Writer OpenOffice.org Copyright This document is Copyright 2005 2006 by its contributors as listed in the section titled Authors. You can distribute it and/or modify
Legal Notes. Regarding Trademarks. 2012 KYOCERA Document Solutions Inc.
Legal Notes Unauthorized reproduction of all or part of this guide is prohibited. The information in this guide is subject to change without notice. We cannot be held liable for any problems arising from
MicroStrategy Quick Guide: Creating Prompts ITU Data Mart Support Group, Reporting Services
MicroStrategy Quick Guide: Creating Prompts ITU Data Mart Support Group, Reporting Services Prompts Prompts are questions the report user must answer in order to run the report. Some prompts are required
Web Intelligence User Guide
Web Intelligence User Guide Office of Financial Management - Enterprise Reporting Services 4/11/2011 Table of Contents Chapter 1 - Overview... 1 Purpose... 1 Chapter 2 Logon Procedure... 3 Web Intelligence
Sitecore InDesign Connector 1.1
Sitecore Adaptive Print Studio Sitecore InDesign Connector 1.1 - User Manual, October 2, 2012 Sitecore InDesign Connector 1.1 User Manual Creating InDesign Documents with Sitecore CMS User Manual Page
Writer Guide. Chapter 15 Using Forms in Writer
Writer Guide Chapter 15 Using Forms in Writer Copyright This document is Copyright 2005 2008 by its contributors as listed in the section titled Authors. You may distribute it and/or modify it under the
Kaseya 2. Quick Start Guide. for VSA 6.3
Kaseya 2 Custom Reports Quick Start Guide for VSA 6.3 December 9, 2013 Agreement The purchase and use of all Software and Services is subject to the Agreement as defined in Kaseya s Click-Accept EULA as
TZWorks Windows Event Log Viewer (evtx_view) Users Guide
TZWorks Windows Event Log Viewer (evtx_view) Users Guide Abstract evtx_view is a standalone, GUI tool used to extract and parse Event Logs and display their internals. The tool allows one to export all
8 CREATING FORM WITH FORM WIZARD AND FORM DESIGNER
8 CREATING FORM WITH FORM WIZARD AND FORM DESIGNER 8.1 INTRODUCTION Forms are very powerful tool embedded in almost all the Database Management System. It provides the basic means for inputting data for
Using Adobe Dreamweaver CS4 (10.0)
Getting Started Before you begin create a folder on your desktop called DreamweaverTraining This is where you will save your pages. Inside of the DreamweaverTraining folder, create another folder called
Simply Accounting Intelligence Tips and Tricks Booklet Vol. 1
Simply Accounting Intelligence Tips and Tricks Booklet Vol. 1 1 Contents Accessing the SAI reports... 3 Running, Copying and Pasting reports... 4 Creating and linking a report... 5 Auto e-mailing reports...
User Manual Microsoft Dynamics AX Add-on LabAX Label Printing
User Manual Microsoft Dynamics AX Add-on LabAX Label Printing Version 1.7 Last Update: 17.04.2011 User Manual Microsoft Dynamics AX Add-on LabAX Label Printing Page 2 / 23 Contents 1 Introduction... 3
Hypercosm. Studio. www.hypercosm.com
Hypercosm Studio www.hypercosm.com Hypercosm Studio Guide 3 Revision: November 2005 Copyright 2005 Hypercosm LLC All rights reserved. Hypercosm, OMAR, Hypercosm 3D Player, and Hypercosm Studio are trademarks
THE CERN/SL XDATAVIEWER: AN INTERACTIVE GRAPHICAL TOOL FOR DATA VISUALIZATION AND EDITING
THE CERN/SL XDATAVIEWER: AN INTERACTIVE GRAPHICAL TOOL FOR DATA VISUALIZATION AND EDITING Abstract G. Morpurgo, CERN As a result of many years of successive refinements, the CERN/SL Xdataviewer tool has
Elixir Schedule Designer User Manual
Elixir Schedule Designer User Manual Release 7.3 Elixir Technology Pte Ltd Elixir Schedule Designer User Manual: Release 7.3 Elixir Technology Pte Ltd Published 2008 Copyright 2008 Elixir Technology Pte
INTRODUCTION TO ATRIUM... 2 SYSTEM REQUIREMENTS... 2 TECHNICAL DETAILS... 2 LOGGING INTO ATRIUM... 3 SETTINGS... 4 NAVIGATION PANEL...
INTRODUCTION TO ATRIUM... 2 SYSTEM REQUIREMENTS... 2 TECHNICAL DETAILS... 2 LOGGING INTO ATRIUM... 3 SETTINGS... 4 CONTROL PANEL... 4 ADDING GROUPS... 6 APPEARANCE... 7 BANNER URL:... 7 NAVIGATION... 8
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
Business Objects Version 5 : Introduction
Business Objects Version 5 : Introduction Page 1 TABLE OF CONTENTS Introduction About Business Objects Changing Your Password Retrieving Pre-Defined Reports Formatting Your Report Using the Slice and Dice
Lesson 10: Video-Out Interface
Lesson 10: Video-Out Interface 1. Introduction The Altera University Program provides a number of hardware controllers, called cores, to control the Video Graphics Array (VGA) Digital-to-Analog Converter
Instructions for Creating a Poster for Arts and Humanities Research Day Using PowerPoint
Instructions for Creating a Poster for Arts and Humanities Research Day Using PowerPoint While it is, of course, possible to create a Research Day poster using a graphics editing programme such as Adobe
SimbaEngine SDK 9.4. Build a C++ ODBC Driver for SQL-Based Data Sources in 5 Days. Last Revised: October 2014. Simba Technologies Inc.
Build a C++ ODBC Driver for SQL-Based Data Sources in 5 Days Last Revised: October 2014 Simba Technologies Inc. Copyright 2014 Simba Technologies Inc. All Rights Reserved. Information in this document
Implementação. Interfaces Pessoa Máquina 2010/11. 2009-11 Salvador Abreu baseado em material Alan Dix. Thursday, June 2, 2011
Implementação Interfaces Pessoa Máquina 2010/11 2009-11 baseado em material Alan Dix 1 Windowing systems Architecture Layers Higher level Tool UI Toolkit (Widgets) Window System OS Application Hardware
Basic Microsoft Excel 2007
Basic Microsoft Excel 2007 The biggest difference between Excel 2007 and its predecessors is the new layout. All of the old functions are still there (with some new additions), but they are now located
The BSN Hardware and Software Platform: Enabling Easy Development of Body Sensor Network Applications
The BSN Hardware and Software Platform: Enabling Easy Development of Body Sensor Network Applications Joshua Ellul [email protected] Overview Brief introduction to Body Sensor Networks BSN Hardware
Software documentation systems
Software documentation systems Basic introduction to various user-oriented and developer-oriented software documentation systems. Ondrej Holotnak Ondrej Jombik Software documentation systems: Basic introduction
Page Editor Recommended Practices for Developers
Page Editor Recommended Practices for Developers Rev: 7 July 2014 Sitecore CMS 7 and later Page Editor Recommended Practices for Developers A Guide to Building for the Page Editor and Improving the Editor
EMAIL MAKER FOR VTIGER CRM
EMAIL MAKER FOR VTIGER CRM Introduction The Email Maker is extension tool designed for the vtiger CRM. Using EMAIL Maker you can create email templates with predefined information and send them from all
Tutorial: Building a Dojo Application using IBM Rational Application Developer Loan Payment Calculator
Tutorial: Building a Dojo Application using IBM Rational Application Developer Loan Payment Calculator Written by: Chris Jaun ([email protected]) Sudha Piddaparti ([email protected]) Objective In this
Using the ETDR Word Template Masters Theses and Reports
Using the ETDR Word Template Masters Theses and Reports Information Technology Assistance Center Kansas State University 214 Hale Library 785 532 7722 [email protected] This document is available at:
"SQL Database Professional " module PRINTED MANUAL
"SQL Database Professional " module PRINTED MANUAL "SQL Database Professional " module All rights reserved. No parts of this work may be reproduced in any form or by any means - graphic, electronic, or
Excel 2003 Tutorial I
This tutorial was adapted from a tutorial by see its complete version at http://www.fgcu.edu/support/office2000/excel/index.html Excel 2003 Tutorial I Spreadsheet Basics Screen Layout Title bar Menu bar
Programming in Access VBA
PART I Programming in Access VBA In this part, you will learn all about how Visual Basic for Applications (VBA) works for Access 2010. A number of new VBA features have been incorporated into the 2010
MyOra 3.0. User Guide. SQL Tool for Oracle. Jayam Systems, LLC
MyOra 3.0 SQL Tool for Oracle User Guide Jayam Systems, LLC Contents Features... 4 Connecting to the Database... 5 Login... 5 Login History... 6 Connection Indicator... 6 Closing the Connection... 7 SQL
2010 Ing. Punzenberger COPA-DATA GmbH. All rights reserved.
2010 Ing. Punzenberger COPA-DATA GmbH All rights reserved. Distribution and/or reproduction of this document or parts thereof in any form are permitted solely with the written permission of the company
Introduction to Microsoft Word 2003
Introduction to Microsoft Word 2003 Sabeera Kulkarni Information Technology Lab School of Information University of Texas at Austin Fall 2004 1. Objective This tutorial is designed for users who are new
DiskPulse DISK CHANGE MONITOR
DiskPulse DISK CHANGE MONITOR User Manual Version 7.9 Oct 2015 www.diskpulse.com [email protected] 1 1 DiskPulse Overview...3 2 DiskPulse Product Versions...5 3 Using Desktop Product Version...6 3.1 Product
Windows PowerShell Essentials
Windows PowerShell Essentials Windows PowerShell Essentials Edition 1.0. This ebook is provided for personal use only. Unauthorized use, reproduction and/or distribution strictly prohibited. All rights
Foxit Reader Quick Guide
I Contents Foxit Reader Contents... II Chapter 1 Get Started... 1 Foxit Reader Overview... 1 System Requirements... 1 Install Foxit Reader... 2 Uninstall Foxit Reader... 2 Update Foxit Reader... 2 Workspace...
Image Management Suite. Mini Thesis. Roland Foster. Supervisors: Mr. Mehrdad Ghaziasgar and Mr. James Connan. B.Sc. Honours
Image Management Suite Mini Thesis Roland Foster 2916282 Supervisors: Mr. Mehrdad Ghaziasgar and Mr. James Connan B.Sc. Honours Department of Computer Science 2012 Acknowledgements I would like to thank
Data Tool Platform SQL Development Tools
Data Tool Platform SQL Development Tools ekapner Contents Setting SQL Development Preferences...5 Execution Plan View Options Preferences...5 General Preferences...5 Label Decorations Preferences...6
Desktop, Web and Mobile Testing Tutorials
Desktop, Web and Mobile Testing Tutorials * Windows and the Windows logo are trademarks of the Microsoft group of companies. 2 About the Tutorial With TestComplete, you can test applications of three major
JOOMLA 2.5 MANUAL WEBSITEDESIGN.CO.ZA
JOOMLA 2.5 MANUAL WEBSITEDESIGN.CO.ZA All information presented in the document has been acquired from http://docs.joomla.org to assist you with your website 1 JOOMLA 2.5 MANUAL WEBSITEDESIGN.CO.ZA BACK
Designing and Implementing Forms 34
C H A P T E R 34 Designing and Implementing Forms 34 You can add forms to your site to collect information from site visitors; for example, to survey potential customers, conduct credit-card transactions,
After studying this lesson, you will have a clear understanding of, what an Operating System is. functions of an Operating System
After studying this lesson, you will have a clear understanding of, what an Operating System is functions of an Operating System User Interfaces how to use Windows Operating System 5.1 Introduction As
Mobile Web Design with HTML5, CSS3, JavaScript and JQuery Mobile Training BSP-2256 Length: 5 days Price: $ 2,895.00
Course Page - Page 1 of 12 Mobile Web Design with HTML5, CSS3, JavaScript and JQuery Mobile Training BSP-2256 Length: 5 days Price: $ 2,895.00 Course Description Responsive Mobile Web Development is more
Visual Basic Programming. An Introduction
Visual Basic Programming An Introduction Why Visual Basic? Programming for the Windows User Interface is extremely complicated. Other Graphical User Interfaces (GUI) are no better. Visual Basic provides
Building and Using Web Services With JDeveloper 11g
Building and Using Web Services With JDeveloper 11g Purpose In this tutorial, you create a series of simple web service scenarios in JDeveloper. This is intended as a light introduction to some of the
COGNOS 8 Business Intelligence
COGNOS 8 Business Intelligence QUERY STUDIO USER GUIDE Query Studio is the reporting tool for creating simple queries and reports in Cognos 8, the Web-based reporting solution. In Query Studio, you can
Professional. SlickEdif. John Hurst IC..T...L. i 1 8 О 7» \ WILEY \ Wiley Publishing, Inc.
Professional SlickEdif John Hurst IC..T...L i 1 8 О 7» \ WILEY \! 2 0 0 7 " > Wiley Publishing, Inc. Acknowledgments Introduction xiii xxv Part I: Getting Started with SiickEdit Chapter 1: Introducing
-SoftChalk LessonBuilder-
-SoftChalk LessonBuilder- SoftChalk is a powerful web lesson editor that lets you easily create engaging, interactive web lessons for your e-learning classroom. It allows you to create and edit content
Creating Database Tables in Microsoft SQL Server
Creating Database Tables in Microsoft SQL Server Microsoft SQL Server is a relational database server that stores and retrieves data for multi-user network-based applications. SQL Server databases are
Creating a Newsletter
Creating a Newsletter Publisher Templates Toolbars and Guides Color Schemes Font Schemes Graphics Text Boxes Text overflow Import document Master Pages Design Gallery Publication Designs Microsoft Publisher
How to Edit Your Website
How to Edit Your Website A guide to using your Content Management System Overview 2 Accessing the CMS 2 Choosing Your Language 2 Resetting Your Password 3 Sites 4 Favorites 4 Pages 5 Creating Pages 5 Managing
INSTALL NOTES Elements Environments Windows 95 Users
NEURON DATA INSTALL NOTES Elements Environments Windows 95 Users Modifying Environment Variables You must modify the environment variables of your system to be able to compile and run Elements Environment
Maximizing the Use of Slide Masters to Make Global Changes in PowerPoint
Maximizing the Use of Slide Masters to Make Global Changes in PowerPoint This document provides instructions for using slide masters in Microsoft PowerPoint. Slide masters allow you to make a change just
Microsoft Access 2010 Overview of Basics
Opening Screen Access 2010 launches with a window allowing you to: create a new database from a template; create a new template from scratch; or open an existing database. Open existing Templates Create
VEDATRAK CRM 2.1. User's Guide
VEDATRAK CRM 2.1 User's Guide 2 (C) 2006-2010 SUI SOLUTIONS. All rights reserved. 3 Contents Overview...9 System Requirements...11 Installation Notes...12 Vedatrak Basics...13 User Roles...13 System Administrator...13
COBOL FormPrint Windows Form Printing for COBOL Version 4.1 User Guide
COBOL FormPrint Windows Form Printing for COBOL Version 4.1 User Guide Flexus Voice: 610-588-9400 P.O. Box 640 Fax: 610-588-9475 Bangor PA 18013-0640 E-Mail: [email protected] U.S.A. WWW: http://www.flexus.com
Lesson 07: MS ACCESS - Handout. Introduction to database (30 mins)
Lesson 07: MS ACCESS - Handout Handout Introduction to database (30 mins) Microsoft Access is a database application. A database is a collection of related information put together in database objects.
Parameter Fields and Prompts. chapter
Parameter Fields and Prompts chapter 23 Parameter Fields and Prompts Parameter and prompt overview Parameter and prompt overview Parameters are Crystal Reports fields that you can use in a Crystal Reports
Guide to SAS/AF Applications Development
Guide to SAS/AF Applications Development SAS Documentation The correct bibliographic citation for this manual is as follows: SAS Institute Inc. 2012. Guide to SAS/AF Applications Development. Cary, NC:
<option> eggs </option> <option> cheese </option> </select> </p> </form>
FORMS IN HTML A form is the usual way information is gotten from a browser to a server HTML has tags to create a collection of objects that implement this information gathering The objects are called widgets
Firewall Builder Architecture Overview
Firewall Builder Architecture Overview Vadim Zaliva Vadim Kurland Abstract This document gives brief, high level overview of existing Firewall Builder architecture.
Creating Interactive PDF Forms
Creating Interactive PDF Forms Using Adobe Acrobat X Pro Information Technology Services Outreach and Distance Learning Technologies Copyright 2012 KSU Department of Information Technology Services This
Grandstream XML Application Guide Three XML Applications
Grandstream XML Application Guide Three XML Applications PART A Application Explanations PART B XML Syntax, Technical Detail, File Examples Grandstream XML Application Guide - PART A Three XML Applications
Form And List. SuperUsers. Configuring Moderation & Feedback Management Setti. Troubleshooting: Feedback Doesn't Send
5. At Repeat Submission Filter, select the type of filtering used to limit repeat submissions by the same user. The following options are available: No Filtering: Skip to Step 7. DotNetNuke User ID: Do
bbc Creating a Purchase Order Form Adobe LiveCycle Designer ES2 November 2009 Version 9
bbc Adobe LiveCycle Designer ES2 November 2009 Version 9 2009 Adobe Systems Incorporated. All rights reserved. Adobe LiveCycle Designer ES2 (9.0) for Microsoft Windows November 2009 This tutorial is licensed
Creating Fill-able Forms using Acrobat 8.0: Part 1
Creating Fill-able Forms using Acrobat 8.0: Part 1 The first step in creating a fill-able form in Adobe Acrobat is to generate the form with all its formatting in a program such as Microsoft Word. Then
MAS 500 Intelligence Tips and Tricks Booklet Vol. 1
MAS 500 Intelligence Tips and Tricks Booklet Vol. 1 1 Contents Accessing the Sage MAS Intelligence Reports... 3 Copying, Pasting and Renaming Reports... 4 To create a new report from an existing report...
How to Import Microsoft Access Databases into FmPro Migrator
How to Import Microsoft Access Databases into FmPro Migrator 1 Overview 1.1 2 4 Step 1 2.1 3 Overview - Importing Access Database Files Step 1 - Get Info - Access 6 Importing Forms/Reports, Value Lists
NETWORK PRINT MONITOR User Guide
NETWORK PRINT MONITOR User Guide Legal Notes Unauthorized reproduction of all or part of this guide is prohibited. The information in this guide is subject to change without notice. We cannot be held liable
Building Applications Using Micro Focus COBOL
Building Applications Using Micro Focus COBOL Abstract If you look through the Micro Focus COBOL documentation, you will see many different executable file types referenced: int, gnt, exe, dll and others.
Bitrix Site Manager 4.1. User Guide
Bitrix Site Manager 4.1 User Guide 2 Contents REGISTRATION AND AUTHORISATION...3 SITE SECTIONS...5 Creating a section...6 Changing the section properties...8 SITE PAGES...9 Creating a page...10 Editing
Microsoft Word 2010 Prepared by Computing Services at the Eastman School of Music July 2010
Microsoft Word 2010 Prepared by Computing Services at the Eastman School of Music July 2010 Contents Microsoft Office Interface... 4 File Ribbon Tab... 5 Microsoft Office Quick Access Toolbar... 6 Appearance
How to Develop Accessible Linux Applications
Sharon Snider Copyright 2002 by IBM Corporation v1.1, 2002 05 03 Revision History Revision v1.1 2002 05 03 Revised by: sds Converted to DocBook XML and updated broken links. Revision v1.0 2002 01 28 Revised
2. Building Cross-Tabs in Your Reports Create a Cross-Tab Create a Specified Group Order Filter Cross-Tab by Group Keep Groups Together
Crystal Reports Level 2 Computer Training Solutions Course Outline 1. Creating Running Totals Create a Running Total Field Modify a Running Total Field Create a Manual Running Total on Either Detail Data
Getting Started Guide. Chapter 14 Customizing LibreOffice
Getting Started Guide Chapter 14 Customizing LibreOffice Copyright This document is Copyright 2010 2012 by its contributors as listed below. You may distribute it and/or modify it under the terms of either
Introduction to Microsoft Access 2003
Introduction to Microsoft Access 2003 Zhi Liu School of Information Fall/2006 Introduction and Objectives Microsoft Access 2003 is a powerful, yet easy to learn, relational database application for Microsoft
Freescale Semiconductor, I
nc. Application Note 6/2002 8-Bit Software Development Kit By Jiri Ryba Introduction 8-Bit SDK Overview This application note describes the features and advantages of the 8-bit SDK (software development
MS Word 2007 practical notes
MS Word 2007 practical notes Contents Opening Microsoft Word 2007 in the practical room... 4 Screen Layout... 4 The Microsoft Office Button... 4 The Ribbon... 5 Quick Access Toolbar... 5 Moving in the
Building Applications With DUIM
Building Applications With DUIM Release 1.0 Dylan Hackers January 28, 2016 CONTENTS 1 Copyright 3 2 Preface 5 2.1 About this manual............................................ 5 2.2 Running examples in
INFOPATH FORMS FOR OUTLOOK, SHAREPOINT, OR THE WEB
INFOPATH FORMS FOR OUTLOOK, SHAREPOINT, OR THE WEB GINI COURTER, TRIAD CONSULTING Like most people, you probably fill out business forms on a regular basis, including expense reports, time cards, surveys,
Tutorial Reference Manual. Java WireFusion 4.1
Tutorial Reference Manual Java WireFusion 4.1 Contents INTRODUCTION...1 About this Manual...2 REQUIREMENTS...3 User Requirements...3 System Requirements...3 SHORTCUTS...4 DEVELOPMENT ENVIRONMENT...5 Menu
Self-Service Portal Implementation Guide
Self-Service Portal Implementation Guide Salesforce, Winter 6 @salesforcedocs Last updated: October 0, 05 Copyright 000 05 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark
About XML in InDesign
1 Adobe InDesign 2.0 Extensible Markup Language (XML) is a text file format that lets you reuse content text, table data, and graphics in a variety of applications and media. One advantage of using XML
MS Active Sync: Sync with External Memory Files
Mindfire Solutions - 1 - MS Active Sync: Sync with External Memory Files Author: Rahul Gaur Mindfire Solutions, Mindfire Solutions - 2 - Table of Contents Overview 3 Target Audience 3 Conventions...3 1.
MS Access Lab 2. Topic: Tables
MS Access Lab 2 Topic: Tables Summary Introduction: Tables, Start to build a new database Creating Tables: Datasheet View, Design View Working with Data: Sorting, Filtering Help on Tables Introduction
How to Design a Form Report (RTF) Output
How to Design a Form Report (RTF) Output Applicable to SIMS.net version 7.108 onwards. Permissions required You will need to be a member of any of the following user groups in System Manager to design
Ad Hoc Reporting. Usage and Customization
Usage and Customization 1 Content... 2 2 Terms and Definitions... 3 2.1 Ad Hoc Layout... 3 2.2 Ad Hoc Report... 3 2.3 Dataview... 3 2.4 Page... 3 3 Configuration... 4 3.1 Layout and Dataview location...
IAS Web Development using Dreamweaver CS4
IAS Web Development using Dreamweaver CS4 Information Technology Group Institute for Advanced Study Einstein Drive Princeton, NJ 08540 609 734 8044 * [email protected] Information Technology Group [2] Institute
Notes Client Tips & Tricks
Southern California October 4 & 5, 2011 Notes Client Tips & Tricks Chuck Smith - IBM Client specific topics A look at the desktop Preferences Business card retrieval order Notes Client Workspace features
