The GenApplication object is used as the top object in every application geode. It acts as the head of the generic object tree, and it provides all the functionality necessary for launching and shutting down the application. It is a subclass of
GenClass
and therefore inherits all the instance data and messages of that class.
GenApplicationClass
has no inherent visual representation. Instead, the main windows of an application are created and managed by one or more GenPrimary objects, which should be placed both as children of the Application object and on the application's GAGCNLT_WINDOWS notification list (if it should appear when the application starts up).
1 GenApplication Basics
1.1 Instance Data
1.2 Application GCN Lists
1.3 Application Instance Reference
1.4 Attach and Launch Flags
1.5 ApplicationStates
1.6 Application Features and Levels
1.7 IACP
2 Advanced GenApplication Usage
2.1 An Application's Life Cycle
2.2 Application Busy States
2.3 The GenApplication's Moniker
2.4 Measurement Type
2.5 Interaction with the UI
The top-level generic object of your application must be a GenApplication object. You should place this application object within its own resource; this ensures that your application will take up little memory when minimized. Your application tree should branch from this single node. HelloApp from Hello World
shows a section of Hello World to illustrate the typical use of a
GenApplicationClass
object.
Code Display 3-1 HelloApp from Hello World
/* Application Object * The hello.gp file contains an "appobj" statement which indicates that this * "HelloApp" object is the top-level UI object. Note that the name of the * resource you place the application object in may be whatever you choose; * it does not have to be AppResource. */
@start AppResource; /* Begin definition of objects in AppResource. */
@object GenApplicationClass HelloApp = { GI_comp = @HelloPrimary; /* The GI_comp attribute lists the generic children * of the object. The HelloApp object has just one * child, the primary window of the application. */
gcnList(MANUFACTURER_ID_GEOWORKS, GAGCNLT_WINDOWS) = HelloPrimary; /* The window's application GCN list determines which * windowable children should be launched on * startup. The primary window in most cases should be * launched on startup.*/ }
@end AppResource /* End definition of objects in AppResource. */
Typically, you will not subclass
GenApplicationClass
. You may occasionally send messages to it, but otherwise it exists primarily to interact with the User Interface.
Note that the Application object you set up in your
.goc
file must be reflected in the Geode Parameters file (the
.gp
file). The name of the Application object should appear in the
appobj
field of the
.gp
file.
Application Instance Reference
Application Features and Levels
GenApplicationClass
provides several instance data fields, most of which you will not use. All the instance fields of GenApplication are listed in GenApplication Instance Fields
for reference, however.
Code Display 3-2 GenApplication Instance Fields
/* These fields will not be used directly. They can be accessed dynamically, * however, with the various messages that set and retrieve the instance data. */
@instance AppInstanceReference GAI_appRef = {"","",NullHandle,{0}}; @instance word GAI_appMode = 0; @instance AppLaunchFlags GAI_launchFlags = 0; @instance byte GAI_optFlags = 0; @instance word GAI_appFeatures = 0; @instance Handle GAI_specificUI = 0; @instance ApplicationStates GAI_states = AS_FOCUSABLE | AS_MODELABLE; @instance AppAttachFlags GAI_attachFlags = 0; @instance UIInterfaceLevel GAI_appLevel = UIIL_ADVANCED; @instance ChunkHandle GAI_iacpConnects = 0;
/* ApplicationStates */
typedef WordFlags ApplicationStates; #define AS_HAS_FULL_SCREEN_EXCL 0x2000 #define AS_SINGLE_INSTANCE 0x1000 #define AS_QUIT_DETACHING 0x0800 #define AS_AVOID_TRANSPARENT_DETACH 0x0400 #define AS_TRANSPARENT_DETACHING 0x0200 #define AS_REAL_DETACHING 0x0100 #define AS_QUITTING 0x0080 #define AS_DETACHING 0x0040 #define AS_FOCUSABLE 0x0020 #define AS_MODELABLE 0x0010 #define AS_NOT_USER_INTERACTABLE 0x0008 #define AS_RECEIVED_APP_OBJECT_DETACH 0x0004 #define AS_ATTACHED_TO_STATE_FILE 0x0002 #define AS_ATTACHING 0x0001
/* Optimization Flags */
typedef ByteFlags AppOptFlags; #define AOF_MULTIPLE_INIT_FILE_CATEGORIES 0x80
/* GenApplicationClass also modifies two GenClass instance fields. */
@default GI_states = @default & ~GS_USABLE; @default GI_attrs = @default | GA_TARGETABLE;
GAI_
appRef
is internal. It stores information needed to reload this application. If the application is detached, this instance field contains information necessary to reload this application to its state at detachment.
GAI_
appMode
stores the message that should be sent to the application's Process object to bring the application back from a saved state. This is initially null and is set by the
GenProcessClass
object as soon as it is determined.
GAI_
launchFlags
stores the
AppLaunchFlags
that govern how the application should be run. These flags are used internally and are set when the application is first launched.
GAI_
optFlags
stores miscellaneous optimization flags.
GAI_appFeatures
stores a word representing the application's features as determined by the user's level of expertise. This field is used primarily by hints in GenControl objects and is rarely used directly otherwise.
GAI_
specificUI
stores the handle of the specific UI under which this application is running. This is determined and set by the system when the application is launched.
GAI_
states
stores the
ApplicationStates
of the GenApplication. See ApplicationStates
for full information on application states.
GAI_
attachFlags
stores the
AppAttachFlags
relating to restoring the application from a state file when attached.
GAI_
appLevel
stores an application's user interface level. This level controls the degree of complexity allowed in the application.
GAI_
iacpConnects
stores the chunk handle to an array of active IACP connections.
Code Display 3-3 GenApplication Vardata Fields
@vardata void HINT_APP_IS_ENTERTAINING; @vardata void HINT_APP_IS_EDUCATIONAL; @vardata void HINT_APP_IS_PRODUCTIVITY_ORIENTED;
@vardata void HINT_APPLICATION_NO_INBOX_QUERY_WHEN_FOREGROUND_APP;
@vardata void HINT_APPLICATION_QUIT_ON_IACP_ALLOW_FILE_ACCESS;
@vardata optr ATTR_GEN_APPLICATION_PRINT_CONTROL; @reloc ATTR_GEN_APPLICATION_PRINT_CONTROL, 0, optr; @vardata optr ATTR_GEN_APPLICATION_KBD_OBJ; @vardata optr ATTR_GEN_APPLICATION_SAVE_OPTIONS_TRIGGER; @reloc ATTR_GEN_APPLICATION_SAVE_OPTIONS_TRIGGER, 0, optr;
@vardata GeodeToken ATTR_GEN_APPLICATION_ADDITIONAL_TOKENS;
/* GenApplication adds a TravelOption to communicate with the Print Control. */
typedef enum { TO_PRINT_CONTROL=_FIRST_GenApplicationClass } GenApplicationTravelOption;
GenApplication also provides several hints that indicate the type of application. HINT_APP_IS_ENTERTAINING, HINT_APP_IS_EDUCATIONAL and HINT_APP_IS_PRODUCTIVITY_ORIENTED are provided for this purpose.
HINT_APPLICATION_NO_INBOX_QUERY_WHEN_FOREGROUND_APP
is only applicable for devices that contain a system inbox for the receipt of messages. If this is the case and the application is set up to receive these messages, this hint indicates that the system should deliver the message to the application without prompting the user. (By default, the system initiates a dialog box asking the user whether to accept any newly received messages.)
HINT_APPLICATION_QUIT_ON_IACP_ALLOW_FILE_ACCESS
indicates that the application should quit (send itself a
MSG_META_QUIT
) if it receives a
MSG_META_IACP_CLOSE_FILE
. This message indicates that a client application is requesting access to a file that the current application is accessing.
ATTR_GEN_APPLICATION_PRINT_CONTROL stores the optr of the object to act as the destination for any messages sent to the
GenApplicationTravelOption
TO_PRINT_CONTROL. Specifically, this attribute is designed to allow remote printing capabilities.
ATTR_GEN_APPLICATION_KBD_OBJ stores the optr of the object to act as the application's floating keyboard. This object must be a subclass of
GenInteractionClass
and must be in the generic tree below the application object. MSG_GEN_APPLICATION_DISPLAY_FLOATING_KEYBOARD will display this keyboard.
ATTR_GEN_APPLICATION_SAVE_OPTIONS_TRIGGER contains the optr of the Save Options trigger within the options menu. If you have a custom Save Options trigger, you should add the optr of this object in this field.
ATTR_GEN_APPLICATION_ADDITIONAL_TOKENS
The GCN mechanism is fully discussed in the General Change Mechanism chapter.
Your application may use application GCN lists to notify objects of certain events. For example, it is essential that any windowed objects that you wish to appear upon startup (including your GenPrimary) are added to the GAGCNLT_WINDOWS GCN list.
GenApplication uses its own GCN list types. The four most often used, and the four you will likely use in most of your applications, are listed below. The others can be found in the file geoworks.def and following this short list. Note that all of these GCN list types correspond to the manufacturer ID MANUFACTURER_ID_GEOWORKS.
MSG_META_SAVE_OPTIONS
. These objects will self-load their options; objects on this list will not receive
MSG_META_LOAD_OPTIONS
automatically. If they need to do so, they should be added to the
GAGCNLT_STARTUP_LOAD_OPTIONS
list instead. Objects on this list will be sent
MSG_META_SAVE_OPTIONS
when the GenApplication receives
MSG_META_SAVE_OPTIONS
.
MSG_META_SAVE_OPTIONS
. Objects on this list will receive
MSG_META_LOAD_OPTIONS
when they are first loaded.Code Display 3-4 Sample GenApplication with Controllers
/* This application includes six controllers. One, the TabControl, must receive * MSG_META_ATTACH to work properly and is placed on the GCN active list. Another * controller, the GenViewController, must receive MSG_META_LOAD_OPTIONS at * startup and is therefore placed on the STARTUP_LOAD_OPTIONS list. All other * controllers are placed on the SELF_LOAD_OPTIONS list. Note that controllers * placed on the active list still need to be placed on one options list. */
@object GenApplicationClass MyApplication = { GI_comp = @MyPrimary; /* Windows GCN list. */ gcnList(MANUFACTURER_ID_GEOWORKS, GAGCNLT_WINDOWS) = @MyPrimary; /* Active GCN list. All objects that should receive * MSG_META_ATTACH should be on this list. These controllers * should also be added to the appropriate LOAD_OPTIONS list. */ gcnList(MANUFACTURER_ID_GEOWORKS, MGCNLT_ACTIVE_LIST) = @MyTabControl, @MyToolControl; /* Startup Load Options GCN list. This list must include * all objects that should receive MSG_META_LOAD_OPTIONS * at attach time. */ gcnList(MANUFACTURER_ID_GEOWORKS, GAGCNLT_STARTUP_LOAD_OPTIONS) = @MyGenViewControl; /* Self Load Options GCN list. All objects that save * options and are not on the Startup Load Options list * should appear here. */ gcnList(MANUFACTURER_ID_GEOWORKS, GAGCNLT_SELF_LOAD_OPTIONS) = @MyTabControl, @MyToolControl, @MyEditControl, @MyCharControl, @MyParaControl; }
The other GenApplication-defined GCN lists are listed below with comments about their functions. Other GCN list types are also declared by other classes (e.g.
MetaClass
).
NotifyGenControlStatusChange
.
NotifySelectStateChange
.
NotifyUndoStateChange
.
VisTextNotifyCharAttrChange
.
VisTextNotifyParaAttrChange
.
VisTextNotifyTypeChange
.
VisTextNotifySelectionChange
.
VisTextNotifyCountChange
.
NotifyStyleChange
.
NotifyStyleSheetChange
.
NotifyTextStyleChange
.
NotifyFontChange
.
NotifyPointSizeChange
.
NotifyFontAttrChange
.
NotifyJustificationChange
.
NotifyColorChange
.
NotifyColorChange
.
NotifyColorChange
.
NotifyColorChange
.
NotifyPageSetupChange
.
NotifyPageSetupChange
.
NotifyViewStateChange
.
NotifyPageStateChange
.
NotifyPageStateChange
.
NotifyDisplayChange
.
NotifyColorChange
.
NotifySSheetActiveCellChanged
.
NotifySSheetEditBarChanged
.
NotifySSheetSelectionChanged
.
NotifySSheetCellWidthHeightChang
e.
NotifySSheetDocAttrChange
.
NotifySSheetCellAttrChange
.
NotifySSheetDataRangeChange
.
VisTextNotifyNameChange.
UserDoDialog()
are on-screen. These objects also receive MSG_META_CHECK_IF_INTERACTABLE_OBJECT to allow them to specify objects under them (such as objects in the child blocks) that should also receive messages.
UserDoDialog()
.
UserDoDialog()
but will not be within the same block as the dialog box. Objects on this list will receive MSG_META_CHECK_IF_INTERACTABLE_OBJECT.GAI_appRef, GAI_appMode, GAI_optFlags, MSG_GEN_APPLICATION_SET_APP_MODE_MESSAGE, MSG_GEN_APPLICATION_GET_APP_MODE_MESSAGE, MSG_GEN_APPLICATION_SET_APP_INSTANCE_REFERENCE, MSG_GEN_APPLICATION_GET_APP_INSTANCE_REFERENCE, MSG_GEN_APPLICATION_SEND_APP_INSTANCE_REFERENCE_TO_FIELD
GAI_
appRef
stores information (within an
AppInstanceReference
structure) that allows a GenApplication object to be reloaded from its former state. This structure contains a path name, long file name, and disk handle of a state file as well as an additional byte of disk data. The system automatically manages this state file and this instance field.
GAI_
appMode
stores the application message that should be sent to the process to bring this application back from a saved state. This is initially null (unless previously saved to a state file); it is set by
GenProcessClass
when a mode is determined at
MSG_META_ATTACH
time. You should not alter this instance field.
GAI_
optFlags
stores miscellaneous optimization flags. The only flag at this time--AOF_MULTIPLE_INIT_FILE_CATEGORIES--indicates that within this application there may be several different init file categories (marked with ATTR_GEN_INIT_FILE_CATEGORY). This allows MSG_META_GET_INI_CATEGORY to perform a full upward recursive search to find the appropriate init file category; by default, if an init file category is not found on an object, only the GenApplication object is queried.
void MSG_GEN_APPLICATION_SET_APP_MODE_MESSAGE( Message modeMessage);
This message stores a message into the GenApplication's
GAI_appMode
field. Generally, this message indicates the current mode of the application. Should the application be shut down and restored, this message will be sent to the Process object to restore the state to the same mode.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters:
modeMessage
The message number to be stored in
GAI_appMode
.
Return: Nothing.
Interception: Do not intercept.
Message MSG_GEN_APPLICATION_GET_APP_MODE_MESSAGE();
This message returns the message number stored in the GenApplication's
GAI_appMode
field.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters: None.
Return: The message number stored in
GAI_appMode
.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_APP_INSTANCE_REFERENCE( Handle appInstance);
This message sets the
GAI_appRef
field to the passed structure.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters:
appInstance
The handle of the reference data block.
Return: Nothing.
Interception: Do not intercept.
Handle MSG_GEN_APPLICATION_GET_APP_INSTANCE_REFERENCE();
This message retrieves the values in
GAI_appRef
.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters: None.
Return: The handle of the reference stored in
GAI_appRef
.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SEND_APP_INSTANCE_REFERENCE_TO_FIELD();
This message causes the GenApplication to send the contents of its
GAI_appRef
field off to its parent GenField object.
Source: Rarely used.
Destination: Any GenApplication object.
Interception: Do not intercept.
GAI_launchFlags, GAI_attachFlags, MSG_GEN_APPLICATION_GET_LAUNCH_FLAGS, MSG_GEN_APPLICATION_GET_ATTACH_FLAGS
GAI_
launchFlags
stores flags that are passed when the application is first launched. These flags are never set within your object declaration but may be passed with other messages.
UserLoadApplication()
.
MSG_GEN_PROCESS_OPEN_APPLICATION
.
UILaunchModel
, the application will not query the user if he or she attempts to initiate multiple instances of the same application; the application will be multiply launched without first checking whether the already running application should be used instead.
IACPConnect()
; the application should close once that task is completed. If the application should remain open after such an IACP connection, this bit should be cleared. This behavior is used only for MSG_GEN_PROCESS_OPEN_APPLICATION connections. The application cannot be opened in engine mode.
GAI_
attachFlags
stores flags related to an application attaching from a state file. These flags are never set within your object declaration but may be passed with other messages.
MSG_GEN_PROCESS_RESTORE_FROM_STATE
. AAF_STATE_FILE_PASSED will also be set.
AppLaunchBlock
) is being passed to the launching message. This is internal and should not be used.AppLaunchFlags MSG_GEN_APPLICATION_GET_LAUNCH_FLAGS();
This message retrieves the contents of the GenApplication's
GAI_launchFlags
field.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters: None.
Return: The
AppLaunchFlags
record stored in
GAI_launchFlags
.
Interception: Do not intercept.
AppAttachFlags MSG_GEN_APPLICATION_GET_ATTACH_FLAGS();
This message retrieves the contents of the GenApplication's
GAI_attachFlags
field.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters: None.
Return: The
AppAttachFlags
stored in
GAI_attachFlags
.
Interception: Do not intercept.
GAI_states, MSG_GEN_APPLICATION_GET_STATE, MSG_GEN_APPLICATION_SET_STATE, MSG_GEN_APPLICATION_SET_NOT_USER_INTERACTABLE, MSG_GEN_APPLICATION_SET_USER_INTERACTABLE, MSG_GEN_APPLICATION_SET_NOT_QUITTING, MSG_GEN_APPLICATION_SET_ATTACHED_TO_STATE_FILE, MSG_GEN_APPLICATION_SET_NOT_ATTACHED_TO_STATE_FILE
GAI_
states
stores the
ApplicationStates
of the application. By default, a GenApplication is both AS_FOCUSABLE and AS_MODELABLE, therefore enabling those hierarchies for this application. Only under extremely rare conditions will you alter this behavior. The flags of
ApplicationStates
are listed below:
MSG_META_GAINED_FULL_SCREEN_EXCL
and a
MSG_META_LOST_FULL_SCREEN_EXCL
.
MSG_META_DETACH
and is detaching.
MSG_META_ATTACH
).ApplicationStates MSG_GEN_APPLICATION_GET_STATE();
This message retrieves the current application state, stored in
GAI_states
.
Source: Rarely used.
Destination: Any GenApplication object.
Parameters: None.
Return: The
ApplicationStates
record stored in
GAI_states
.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_STATE( ApplicationStates set, ApplicationStates clear);
This message alters a GenApplication's GAI_
states
flags. This message should only be used to set flags that aren't set internally by the UI. Flags that can be altered are the AS_FOCUSABLE, AS_MODELABLE, AS_NOT_USER_INTERACTABLE and AS_AVOID_TRANSPARENT_DETACH state bits.
This message does not reject attempts to set internal bits; therefore, be careful in using this message and only use it to set the external bits mentioned above.
Source: Unrestricted. This message is also used internally.
Destination: Any GenApplication object.
Parameters:
set
ApplicationStates
to set.
ApplicationStates
to clear.Return: Nothing.
Warnings: Do not attempt to set any internal
ApplicationStates
bits with this message.
Interception: May intercept, but must pass to superclass at some point.
void MSG_GEN_APPLICATION_SET_NOT_QUITTING();
This message clears the AS_QUITTING bit in the application's GAI_
states
bitfield.
Source: Sent by the UI or the kernel.
Destination: A GenApplication object.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_NOT_USER_INTERACTABLE();
This message sets the AS_NOT_USER_INTERACTABLE flag in the application's
GAI_states
field.
Source: Infrequently used.
Destination: The GenApplication to be made not interactable.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_USER_INTERACTABLE();
This message clears the AS_NOT_USER_INTERACTABLE flag in the application's
GAI_states
field.
Source: Infrequently used.
Destination: The GenApplication to be made interactable.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_ATTACHED_TO_STATE_FILE();
This message sets the AS_ATTACHED_TO_STATE_FILE in the GenApplication's
GAI_states
field.
Source: Sent by the UI or the kernel.
Destination: The GenApplication object that has been attached to a state file.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_NOT_ATTACHED_TO_STATE_FILE();
This message clears the AS_ATTACHED_TO_STATE_FILE in the GenApplication's
GAI_states
field.
Source: Sent by the UI or the kernel.
Destination: The GenApplication object that has been detached to a state file.
Interception: Do not intercept.
GAI_appFeatures, GAI_appLevel, MSG_GEN_APPLICATION_GET_APP_FEATURES, MSG_GEN_APPLICATION_SET_APP_FEATURES, MSG_GEN_APPLICATION_SET_APP_LEVEL, MSG_GEN_APPLICATION_UPDATE_APP_FEATURES, MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE, GenAppUsabilityTupleFlags, GenAppUsabilityTuple, GenAppUsabilityCommands
A GenApplication may store a word of features (
GAI_appFeatures
); these features correspond to groups of UI objects. Depending on a certain feature being set or not set, certain groups of UI objects may or may not appear, allowing you to customize your application for different users or criteria. It is up to your application to define both the features and the objects that these features correspond to.
GAI_
appFeatures
is a word-length bitfield. Each bit corresponds to a certain group of features which you define. You may thus have up to 16 different feature groups for any application. (Note that each feature group may include several UI objects.) In general, you group these features together so that they correspond to a specific
UIInterfaceLevel
. If the application appears at a different User Interface level, the makeup of the UI will be different.
An application's user interface level is stored in the GenApplication's GAI_
appLevel
instance data entry. Each
UIInterfaceLevel
corresponds to a certain group of features. Changing the UI level changes the group of features that may be displayed.
The features represented in the bitfield may be represented in hints added to GenControl objects. Most often, the controllers and the application will adjust their menus, tools, and other UI gadgetry to conform to the features specified in this record.
Code Display 3-5 Setting Up Features
/* Features are stored in a word-length bitfield. */
typedef WordFlags MyFeatures;
@define MF_EDIT_FEATURES (0x8000) @define MF_PASTE_FEATURES (0x4000) @define MF_FORMAT_FEATURES (0x2000)
/* We might want to group certain features together based on the level of * expertise of the user. In this example, if the user level is "intermediate" * (which we will define later), we allow features for editing and pasting to the * UI. If the user level is "advanced" we allow the intermediate features and also * allow formatting features. */
@define INTRODUCTORY_FEATURES (0)
@define INTERMEDIATE_FEATURES (@MF_EDIT_FEATURES | @MF_PASTE_FEATURES)
@define ADVANCED_FEATURES (@INTERMEDIATE_FEATURES | @MF_FORMAT_FEATURES)
MSG_GEN_APPLICATION_GET_APP_FEATURES returns the current application features and
UIInterfaceLevel
in use by an application.
You may set the application's GAI_
appFeatures
by sending it MSG_GEN_APPLICATION_SET_APP_FEATURES. You may also change the application's user level by sending it MSG_GEN_APPLICATION_SET_APP_LEVEL. Each of these messages in turn generates a MSG_GEN_APPLICATION_UPDATE_APP_FEATURES.
This message is meant to be sub-classed so that you can alter the behavior for different features. In most cases, however, you will simply handle this message, fill in relevant parameters, and send the GenApplication MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE--the message which performs the actual work done in changing the UI. This message expects a number of arguments.
The most important argument is the table of
GenAppUsabilityTuple
entries that correspond to each feature. These entries define what sort of UI change is required, and what object is required to change.You must set up this table beforehand.
The types of usability commands available (in the bit positions set aside with GAUTF_COMMAND in the tuple's
GenAppUsabilityTupleFlags
) are:
Because each feature may have multiple objects affected, the
GenAppUsabilityTupleFlags
entry GAUTF_END_OF_LIST indicates that there are no more commands for that feature. The flag GAUTF_OFF_IF_BIT_IS_ON indicates that a given command should be reversed for the object. (I.e. if the feature is on, the object should be removed, not added.)
Code Display 3-6 Setting Up the GenAppUsabilityTuple Tables
/* Each GenAppUsabilityTuple will refer to a specific set of features. */
/* * Since GUAC_USABILITY is the default setting (and is zero) setting any other * flags either supersedes or complements this behavior. In this case, setting the * EditToolEntry as a GUAC_TOOLBAR command supersedes the GUAC_USABILITY command. * Setting the GUATF_END_OF_LIST flag for the EditTrigger does not alter the * GUAC_USABILITY command, which is still implicit. */
static const GenAppUsabilityTuple editFeaturesList [] = { {GUAC_TOOLBAR, @EditToolEntry }, {GUATF_END_OF_LIST @EditTrigger } };
static const GenAppUsabilityTuple pasteFeaturesList [] = { {GUAC_END_OF_LIST, @PasteTrigger } };
static const GenAppUsabilityTuple formatFeaturesList [] = { { GAUTF_END_OF_LIST | GUAC_RECALC_CONTROLLER, @FeatureController } };
/* After each feature's GenAppUsabilityTuple is set up, you should set up a table * of these structures to pass to relevant messages. */
static const GenAppUsabilityTuple * const usabilityTable [] = { editFeaturesList, pasteFeaturesList, formatFeaturesList };
/* * Within your code, decide where you wish to set the application features * (usually within some sort of User level dialog box that passes a selection of * feature bits) and send either MSG_GEN_APPLICATION_SET_APP_FEATURES or * MSG_GEN_APPLICATION_SET_APP_LEVEL with the proper feature bits set. */
@method MyLevelApplicationClass, MSG_MY_APPLICATION_SET_USER_LEVEL { @call oself::MSG_GEN_APPLICATION_SET_APP_FEATURES(selection); }
/* * Then intercept MSG_GEN_APPLICATION_UPDATE_APP_FEATURES and set up the correct * parameters for MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE. */
@method MyLevelApplicationClass, MSG_GEN_APPLICATION_UPDATE_APP_FEATURES { @call oself::MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE( NullOptr, @ObjectToReparent, /* if any */ levelTable, /* if any */ sizeof(usabilityTable) / sizeof(usabilityTable [0]), usabilityTable, appOpeningFlag, oldLevel, level, featuresChanged, featuresOn); }
dword MSG_GEN_APPLICATION_GET_APP_FEATURES();
This message retrieves the set of features set for the application.
Source: Unrestricted--typically a GenControl object finding out the application's UI level.
Destination: The GenApplication running the controller.
Parameters: None.
Return: A dword containing the word of features stored in
GAI_appFeatures
and the
UIInterfaceLevel
for the application. The features are stored in the high word; the interface level is stored in the low word.
Interception: Generally not intercepted.
void MSG_GEN_APPLICATION_SET_APP_FEATURES( word features);
This message sets a new set of features into the GenApplication's
GAI_appFeatures
record. This message in turn generates a MSG_GEN_APPLICATION_UPDATE_APP_FEATURES for your application object to intercept. (The message handler for that message must in turn send MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE to activate the UI changes specified in the features list.)
Source: Unrestricted--typically a system function.
Destination: The GenApplication having its features set.
Parameters:
features
The new word-sized record of application features to set.
Return: Nothing.
Interception: Generally not intercepted.
void MSG_GEN_APPLICATION_UPDATE_APP_FEATURES(@stack optr unReparentObject, optr reparentObject, GenAppUsabilityTuple *levelTable, word tableLength, void *table, word appOpeningFlag, UIInterfaceLevel oldLevel, UIInterfaceLevel level, word featuresChanged, word featuresOn);
This message is sent by the application to itself when it is told to change either its features or its
UIInterfacelevel
. This message is passed a number of parameters, most of which should simply be passed to MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE. If you have reparent objects (or un-reparent objects), you must set them up here.
Source: Sent by an application object to itself in response to a MSG_GEN_APPLICATION_SET_APP_FEATURES or MSG_GEN_APPLICATION_SET_APP_LEVEL.
Destination: The GenApplication object.
Parameters: unReparentObject The optr of the object to be unreparented. If a null optr is passed, the object will by default be moved up and added as the next sibling of its current parent.
GenAppUsabilityTuple
entry that contains a GAUC_REPARENT entry.
GenAppUsabilityTuple
entries that must be updated when the user level changes. This table is usually set up as global data and maps each user level feature to a
GenAppUsabilityTuple
.
UIInterfaceLevel
.
UIInterfaceLevel
.Interception: To set an application's features, you must intercept this message and send MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE; there is no default message handler. This message is provided as a convenient point to intercept and change features before executing the changes.
void MSG_GEN_APPLICATION_UPDATE_FEATURES_VIA_TABLE( optr unReparentObject, optr reparentObject, GenAppUsabilityTuple *levelTable, word tableLength, void *table, word appOpeningFlag, UIInterfaceLevel oldLevel, UIInterfaceLevel level, word featuresChanged, word featuresOn);
This message is called to update the application's features to reflect a new set of features to
Source: Typically, your message handler for MSG_GEN_APPLICATION_UPDATE_APP_FEATURES.
Destination: The GenApplication object.
Parameters: unReparentObject The optr of the object to be unreparented. If a null optr is passed, the object will by default be moved up and added as the next sibling of its current parent.
GenAppUsabilityTuple
entry that contains a GAUC_REPARENT entry.
GenAppUsabilityTuple
entries that must be updated when the user level changes. This table is usually set up as global data and maps each user level feature to a
GenAppUsabilityTuple
.
UIInterfaceLevel
.
UIInterfaceLevel
.Interception: Generally not intercepted. Intercept MSG_GEN_APPLICATION_UPDATE_APP_FEATURES instead.
GAI_iacpConnects, MSG_GEN_APPLICATION_IACP_REGISTER, MSG_GEN_APPLICATION_IACP_UNREGISTER, MSG_GEN_APPLICATION_IACP_GET_NUMBER_OF_CONNECTIONS, MSG_GEN_APPLICATION_IACP_ GET_NUMBER_OF_APP_MODE_CONNECTIONS, MSG_GEN_APPLICATION_IACP_SHUTDOWN_ALL_CONNECTIONS, MSG_GEN_APPLICATION_IACP_COMPLETE_CONNECTIONS, MSG_GEN_APPLICATION_APP_MODE_COMPLETE
IACP (the GEOS
I
nter
A
pplication
C
ommunication
P
rotocol) allows applications to communicate with each other. IACP is flexible enough to let applications know whether another application is open, closed, or in the process of attaching or detaching. IACP allows applications to convey information to one another, and could be used to support updating data (e.g. documents) across applications. The IACP mechanism is discussed more fully in the Applications and Geodes chapter. The information included below only discusses GenApplicationClass
support of IACP mechanisms.
GAI_
iacpConnects
stores the chunk handle to an array of active IACP connections. This chunk stores the IACP connection value referring to the remote application and the type of IACP connection (i.e. a connection that is enabled during a MSG_GEN_PROCESS_OPEN_APPLICATION, for example). These values are manipulated internally and there is no need to access them. You will instead use a variety of messages provided with
GenApplicationClass
to register and unregister for application notification.
A good deal of support has been added to
GenApplicationClass
to support IACP. The main things you need to know about this support are:
IACPShutdownAll()
to shut down all remaining connections either to or from it.
MSG_META_IACP_LOST_CONNECTION
sent to it as a server, it will eventually call
IACPShutdown()
for the connection when it is certain no more messages relating to the connection are in any relevant queue. It will forward this message to all GenDocument objects below any GenDocumentGroup object in the application, so they can close themselves if the lost connection was the last reference to them.
AppLaunchBlock
indicates it's running in engine mode, or when it receives MSG_META_ATTACH and has attached all the various pieces of UI. It will unregister itself as a server when it loses its last IACP connection and is no longer functioning in application mode (either because the user quit the application long since, or because it was never functioning in application mode).
MSG_GEN_APPLICATION_IACP_REGISTER
and
MSG_GEN_APPLICATION_IACP_UNREGISTER
to itself, allowing an application to subclass these messages and register with other lists as appropriate.
MSG_GEN_APPLICATION_IACP_GET_NUMBER_OF_CONNECTIONS
on itself. Should an application register the GenApplication or any other object as a server for another list, it can determine how many connections remain from that list and augment the number returned by the default handler in
GenApplicationClass
. If this returns non-zero, GenApplication will not shut down the application voluntarily.
MSG_GEN_APPLICATION_IACP_SHUTDOWN_ALL_CONNECTIONS
to itself. The default handler will call
IACPShutdownAll()
, passing its own optr. A subclass can use this to perform a similar operation for any other server objects the application might have.void MSG_GEN_APPLICATION_IACP_REGISTER();
This message is sent by a GenApplication object to itself when it registers for IACP. It is not a message meant to be sent externally to an application to register it for IACP. Instead, you can subclass this message and register the object with other lists.
Source: Sent by the GenApplication object to itself.
Destination: The GenApplication object to register with IACP.
Interception: May be intercepted if there are other lists with which you want to register the application, or other server objects. You must make sure to call the superclass, however.
void MSG_GEN_APPLICATION_IACP_UNREGISTER();
This message is sent by a GenApplication object to itself when it unregisters for IACP. It is not a message meant to be sent externally to an application to unregister it for IACP. Instead, you can subclass this message and unregister the object with other lists.
Source: Sent by the GenApplication object to itself.
Destination: The GenApplication object to unregister with IACP.
Interception: May be intercepted if there are other lists with which you need to unregister the application, or other server objects. You must make sure to call the superclass, however.
word MSG_GEN_APPLICATION_IACP_GET_NUMBER_OF_CONNECTIONS();
This message returns the number of active engine or app-mode IACP connections for a given application. This message is used to check whether an application open only for IACP purposes may be closed.
Source: Called by GenProcessClass when the UI has finished processing MSG_META_QUIT for the application; this determines if the application should exit at this point or if there are client applications that need the application to stay open.
Destination: GenApplication object of the application.
Return: Number of open connections. If non-zero, application will remain open.
Interception: Only intercept if you have other server objects beside your GenApplication object. If intercepting, call the superclass first and then add the number of connections to the other objects onto the result returned by
GenApplicationClass
.
word MSG_GEN_APPLICATION_IACP_GET_NUMBER_OF_APP_MODE_CONNECTIONS();
This message retrieves the number of connections which require that the application be open in app-mode (as opposed to engine mode). This message is used to check whether an application can be closed down into engine mode even if some IACP connections are still open.
Source: This message is called by the
GenProcessClass
when the UI has finished processing MSG_META_QUIT to determine if the application should really close down to engine mode.
Destination: GenApplication object of application.
Return: Number of open app-mode connections.
Interception: Only intercept if you have other server objects besides your GenApplication object. You should call the superclass first and then add the number of connections to other objects onto the result returned by
GenApplicationClass
.
void MSG_GEN_APPLICATION_IACP_SHUTDOWN_ALL_CONNECTIONS();
This message shuts down all IACP connections for a given application, either on the server or the client side of the connection.
Source: Sent by the GenApplication object to itself.
Destination: GenApplication object of the application.
Interception: May be intercepted to allow connections to other server objects to be shut down. You must call the superclass at some point to ensure that application connections are shut down as well.
void MSG_GEN_APPLICATION_APP_MODE_COMPLETE();
This message is sent to the application when its life as a user-interactable app is complete. The default behavior is to continue shutting down the process if there are no IACP connections active.
Source: Sent by the GenProcess object after it receives a MSG_META_ACK from detaching the application.
Destination: GenApplication object.
Interception: Generally not intercepted; If you have other server connections which you want taken into account before shutting the application completely down, you should intercept MSG_GEN_APPLICATION_IACP_GET_NUMBER_OF_CONNECTIONS instead.
void MSG_GEN_APPLICATION_IACP_COMPLETE_CONNECTIONS();
This message completes all pending IACP connections, accepting any queued messages that have been waiting to be handled. If you subclass it, be sure to call the superclass at some point.
Source: Sent by the GenApplication object to itself in its default MSG_GEN_APPLICATION_OPEN_COMPLETE method, as we assume that the object should be able to handle IACP messages at this latter stage of opening the IACP mechanism.
Destination: GenApplication object of the application.
Interception: May be intercepted if there are other lists besides those connected to the application's token, if those other connections might be pending. If intercepting, you must call the superclass eventually.
Typically, you will merely set up a GenApplication object in your .goc file and then leave it alone. You may occasionally send it messages to invoke functions or to query the application. These messages are infrequently used, however, and you will likely not have need for them.
For information on how an application is launched and closed, see the Applications and Geodes chapter.
MSG_GEN_APPLICATION_MARK_BUSY, MSG_GEN_APPLICATION_MARK_NOT_BUSY, MSG_GEN_APPLICATION_HOLD_UP_INPUT, MSG_GEN_APPLICATION_RESUME_INPUT, MSG_GEN_APPLICATION_IGNORE_INPUT, MSG_GEN_APPLICATION_ACCEPT_INPUT, MSG_GEN_APPLICATION_MARK_APP_COMPLETELY_BUSY, MSG_GEN_APPLICATION_MARK_APP_NOT_COMPLETELY_BUSY
An application's busy state is reflected by its mouse pointer. An application may have several busy states, set appropriately for the action going on at the time. The messages below can set the application's busy state. You will not usually send any of these messages to your GenApplication object. Instead, you will usually set appropriate GI_
attrs
to automatically send out these messages during times when the application will be busy.
MSG_GEN_APPLICATION_MARK_BUSY
marks the application busy (usually by changing the cursor to an appropriate shape determined by the specific UI) until the current operation in the application thread completes. This message is sent by UI gadgets that have GA_INITIATES_BUSY_STATE set in their
GI_attrs
fields. It may also be called by any other object that wants to mark the application busy. When an application is busy, the user may continue to interact with it.
MSG_GEN_APPLICATION_MARK_NOT_BUSY
removes the busy state marker. This message is automatically sent to the application object when the operation that initiated the busy state completes.
MSG_GEN_APPLICATION_HOLD_UP_INPUT
instructs the User Interface to place all input events into a special "hold-up" queue until the input is resumed. This message also marks the application busy. Applications marked GA_INITIATES_INPUT_HOLD_UP will receive this message whenever they initiate an operation.
MSG_GEN_APPLICATION_RESUME_INPUT
removes the input hold-up state, allowing normal input flow. This message flushes the "hold-up" event queue into the application's input queue, ensuring that all events during the "hold up" operation are handled before any new events.
MSG_GEN_APPLICATION_IGNORE_INPUT
instructs the GenApplication object to ignore all input events it receives. This may be accompanied with an audible warning (beep). Applications marked GA_INITIATES_INPUT_IGNORE will receive this message whenever they initiate an operation.
MSG_GEN_APPLICATION_ACCEPT_INPUT
removes the input ignore state and directs the GenApplication object to again receive input events and handle them.
All of these messages are cumulative. The application will keep track of how many times each of these messages is sent. For example, each
MSG_GEN_APPLICATION_MARK_NOT_BUSY
message will remove a
MSG_GEN_APPLICATION_MARK_BUSY
. When the count reaches zero, the busy state is removed.
void MSG_GEN_APPLICATION_MARK_BUSY();
This message marks the application busy and changes the cursor image.
Source: Sent automatically by objects with GA_INITIATES_BUSY_STATE set.
Destination: The GenApplication object running the sender.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_MARK_NOT_BUSY();
This message marks the application not busy, removing the effect of a previous
MSG_GEN_APPLICATION_MARK_BUSY
.
Source: Sent automatically by objects with GA_INITIATES_BUSY_STATE set.
Destination: The GenApplication object running the sender.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_HOLD_UP_INPUT();
This message causes the GenApplication to mark itself busy and redirect input events to a special "hold-up" queue. When the application is ready to resume normal activity, it first handles the messages in the hold-up queue before handling new input messages.
Source: Used infrequently.
Destination: The GenApplication object to be held up.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_RESUME_INPUT();
This message causes a GenApplication to resume normal input handling after it has been held up with
MSG_GEN_APPLICATION_HOLD_UP_INPUT
.
Source: Used infrequently.
Destination: The GenApplication object running the sender.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_IGNORE_INPUT();
This message causes the GenApplication to consume all input events it receives rather than handle them. This message may be used during debugging as a last resort to help find synchronization problems.
Source: Infrequently used.
Destination: The GenApplication object to consume input events.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_ACCEPT_INPUT();
This message undoes a previous
MSG_GEN_APPLICATION_IGNORE_INPUT
, allowing the GenApplication to once again handle input events normally.
Source: Infrequently used.
Destination: The GenApplication object to resume input handling.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_MARK_APP_COMPLETELY_BUSY();
This message is rarely used and forces a busy state over the application regardless of other states. It should be used only when a time-intensive task is going on in the UI and the program can not handle input during that time.
Source: Infrequently used.
Destination: The GenApplication object to be marked completely busy.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_MARK_APP_NOT_COMPLETELY_BUSY();
This message undoes
MSG_GEN_APPLICATION_MARK_COMPLETELY_BUSY
, allowing the application to once again handle user input.
Source: Infrequently used.
Destination: The GenApplication object to be marked not busy.
Interception: Do not intercept.
MSG_GEN_APPLICATION_FIND_MONIKER, MSG_GEN_APPLICATION_SET_TASK_ENTRY_MONIKER
Every GenApplication object should be given a moniker; this moniker is displayed by the UI in its task list. (In OSF/Motif, the task list is manifested as the floating "Express" menu.) While you will set the moniker just like for any generic object, the GenApplication has two messages that can be used to get or set the moniker used in the task list.
optr MSG_GEN_APPLICATION_FIND_MONIKER( MemHandle destBlock, word searchFlags, DisplayType displayType);
This message finds the specified moniker in the GenApplication's
VisMonikerList
and optionally copies it into a specified destination block.
Source: Infrequently used.
Destination: The GenApplication to get the moniker from.
Parameters:
destBlock
The handle of the destination block into which the chunk will be copied. For this to work, you must pass VMSF_COPY_CHUNK in
searchFlags
.
searchFlags
VisMonikerSearchFlags
indicating what type of moniker to find in the moniker list and what to do with it when it is found.
displayType
Return: The optr of the GenApplication's
VisMonikerList
chunk.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_SET_TASK_ENTRY_MONIKER( optr entryMoniker);
This message changes the moniker which is used in the GenField's task list. The task list menu will be updated if currently visible.
Source: Infrequently used.
Destination: The GenApplication to have its moniker changed.
Parameters:
entryMoniker
The optr of the chunk containing the moniker that will be set into the task list.
Return: Nothing.
Interception: Do not intercept.
MSG_GEN_APPLICATION_SET_MEASUREMENT_TYPE, MSG_GEN_APPLICATION_GET_MEASUREMENT_TYPE, GET_APP_MEASUREMENT_TYPE
Each application has a "measurement type" associated with it. The measurement type indicates whether measurements should default to metric or standard US measurements.
void MSG_GEN_APPLICATION_SET_MEASUREMENT_TYPE( byte measurementType);
This message sets the measurement type used by the application.
Source: Infrequently used.
Destination: The GenApplication to have the new measurement type.
Parameters:
measurementType
A value of
AppMeasurementType
to set for the application. Can be AMT_US, AMT_METRIC, or AMT_DEFAULT.
Return: Nothing.
Interception: Do not intercept.
word MSG_GEN_APPLICATION_GET_MEASUREMENT_TYPE();
This message gets the measurement currently used by the application.
Source: Infrequently used.
Destination: The GenApplication whose measurement is to be retrieved.
Parameters: None.
Return: A word value, the low byte of which represents the application's measurement type. Use the macro GET_MEASUREMENT_TYPE to extract the measurement type from the return value.
Interception: Do not intercept.
The GenApplication is an application's main point of contact with the UI. As such, it has several messages that are sent by the UI or by other objects to initiate certain UI-related functions. These messages will rarely, if ever, be used by application programmers, but they are documented here in case you find them useful.
MSG_GEN_APPLICATION_INITIATE_UI_QUIT, MSG_GEN_APPLICATION_INSTALL_TOKEN, MSG_GEN_APPLICATION_DETACH_PENDING, MSG_GEN_APPLICATION_OPEN_COMPLETE, MSG_GEN_APPLICATION_QUIT_AFTER_UI
void MSG_GEN_APPLICATION_INITIATE_UI_QUIT();
This message causes the GenApplication to begin quitting. The application will automatically go through the entire quit sequence.
Source: Infrequently used.
Destination: The GenApplication of the application to be shut down.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_INSTALL_TOKEN();
This message instructs the GenApplication object to set its token into the token database file.
Source: Infrequently used.
Destination: The GenApplication to have its token installed.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_DETACH_PENDING();
This message is sent to the specific UI library through the GenApplication to notify it that the application is about to be shut down. It is used to abort any application-modal dialog boxes so the application's Process object will be able to detach.
Source: The GenApplication object before it detaches.
Destination: The GenApplication of the application about to be detached.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_OPEN_COMPLETE();
This message is sent by the GenApplication object to itself when it has finished opening (after it has set itself usable). It is sent via the queue and indicates that the application's UI is fully usable.
Source: A GenApplication after it has set itself GS_USABLE.
Destination: Sent to itself.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_QUIT_AFTER_UI();
This message is called from the MSG_META_QUIT handler in GenProcessClass, after the UI has finished its MSG_GEN_APPLICATION_INITIATE_UI_QUIT sequence. This message is the application's last chance to abort a quit before the DETACH sequence begins. The default behavior is to abort the QUIT if the application is still open for the user (i.e. not ALF_OPEN_FOR_IACP_CONNECTION_ONLY) or if an IACP connection remains that requires the application to remain open.
Source:
GenProcessClass
.
Destination: GenApplication object of the application.
Interception: May be intercepted and not sent to the superclass to abort the QUIT.
MSG_GEN_APPLICATION_GET_DISPLAY_SCHEME, MSG_GEN_APPLICATION_QUERY_UI, MSG_GEN_APPLICATION_NOTIFY_MODAL_WIN_CHANGE, MSG_GEN_APPLICATION_INK_QUERY_REPLY, MSG_GEN_APPLICATION_GET_GCN_LIST_OF_LISTS, MSG_GEN_APPLICATION_TEST_WIN_INTERACTABILITY, MSG_GEN_APPLICATION_VISIBILITY_NOTIFICATION, MSG_GEN_APPLICATION_GET_MODAL_WIN, MSG_GEN_APPLICATION_CHECK_IF_ALWAYS_INTERACTABLE_OBJECT
void MSG_GEN_APPLICATION_GET_DISPLAY_SCHEME( DisplayScheme * displayScheme);
This message gets the current display scheme used by the application.
Source: Infrequently used.
Destination: Any GenApplication.
Parameters:
displayScheme
A pointer to a structure of type
DisplayScheme
. This structure will be filled by the method and contains information about the color scheme, display type, font ID, and point size used by the application.
Return: The
DisplayScheme
structure pointed to by
displayScheme
will be filled upon return.
Interception: Do not intercept.
Handle MSG_GEN_APPLICATION_QUERY_UI();
This message is used to determine which UI should be used at a given point in the generic tree for a certain type of object.
Source: Infrequently used.
Destination: Any GenApplication object.
Parameters: None.
Return: The handle of the specific UI library geode.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_NOTIFY_MODAL_WIN_CHANGE();
This message is called on a GenApplication object by the UI whenever the application should check to see if there is a change in modal status. The behavior is to look for the top system-modal window owned by the application and then the top application-modal window within the application's layer.
This message sets the AS_ATTACHED_TO_STATE_FILE in the GenApplication's
GAI_states
field.
Source: Sent by the UI.
Destination: Any GenApplication object.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_INK_QUERY_REPLY( InkReturnValue inkReturnValue, word inkGstate);
This message is sent to an Application object in reply to a
MSG_META_QUERY_IF_PRESS_IS_INK
. It indicates whether the object that was queried can or can not handle Ink presses. The GenApplication object responds by sending a message to the UI.
Source: Sent by an object in response to
MSG_META_QUERY_IF_PRESS_IS_INK
.
Destination: The GenApplication object associated with the sender.
Parameters:
inkReturnValue
A value indicating whether the object queried can handle Ink input or not. Will be one of IRV_NO_INK, IRV_INK_WITH_STANDARD_OVERRIDE, IRV_DESIRES_INK, or IRV_WAIT.
inkGstate
Return: Nothing.
Interception: Do not intercept.
ChunkHandle MSG_GEN_APPLICATION_GET_GCN_LIST_OF_LISTS();
This message retrieves the GenApplication's GCN list of lists chunk handle. This chunk handle may then be used with a number of kernel routines for GCN list management or to perform operations on individual GCN lists.
Source: Any object in the GenApplication's thread.
Destination: Any GenApplication object.
Parameters: None.
Return: The chunk handle of the GCN list of lists chunk; a null chunk handle will be returned if the chunk does not exist.
Interception: Do not intercept.
Boolean MSG_GEN_APPLICATION_TEST_WIN_INTERACTABILITY( optr inputOD, Handle window);
This message tests whether the passed window object is interactable.
Source: Unrestricted.
Destination: Any GenApplication object.
Parameters:
inputOD
The optr of the windowed object to be tested.
window
Return: The return value will be
false
if there are no modal windows in the system or if the window object passed is the topmost active modal window. The return value will be
true
if an active modal window exists and is not the passed window object (in this case, if the passed object has any window grabs, it should release them).
True
is also returned if there is no modal window but the GenApplication is ignoring input.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_VISIBILITY_NOTIFICATION( optr obj, Boolean opening);
Notifies the GenApplication object that it has become visible or not visible.
Source: The specific UI.
Destination: The GenApplication that has become visible or not visible.
Parameters:
obj
The optr of the object sending the notification message.
opening
true
if open,
false
if closed.Return: Nothing.
Interception: Do not intercept.
optr MSG_GEN_APPLICATION_GET_MODAL_WIN();
This message returns the current top modal window for the application, if any is present.
Source: Unrestricted.
Destination: GenApplication object.
Return: optr of top modal windowed object.
Boolean MSG_GEN_APPLICATION_CHECK_IF_ALWAYS_INTERACTABLE_OBJECT( optr objToCheck);
This message checks if the passed object should always remain interactable.
Source: Unrestricted.
Destination: GenApplication object.
Parameters: objToCheck optr of object to check the interactable state.
Return: true if the object is always interactable, false if not.
MSG_GEN_APPLICATION_BRING_WINDOW_TO_TOP, MSG_GEN_APPLICATION_LOWER_WINDOW_TO_BOTTOM, MSG_GEN_APPLICATION_BUILD_STANDARD_DIALOG, MSG_GEN_APPLICATION_DO_STANDARD_DIALOG, MSG_GEN_APPLICATION_TOGGLE_CURSOR, MSG_GEN_APPLICATION_BRING_UP_HELP, MSG_GEN_APPLICATION_TOGGLE_CURRENT_MENU_BAR, MSG_GEN_APPLICATION_TOGGLE_FLOATING_KEYBOARD, MSG_GEN_APPLICATION_TOGGLE_EXPRESS_MENU
void MSG_GEN_APPLICATION_BRING_WINDOW_TO_TOP( optr window);
This message brings the passed window to the front of the screen.
Source: Unrestricted
Destination: Any GenApplication object.
Parameters:
window
The optr of the window object to be brought to the front of the screen.
Return: Nothing.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_LOWER_WINDOW_TO_BOTTOM( optr window);
This message sends the specified window to the back of the screen, behind other window objects.
Source: Unrestricted.
Destination: Any GenApplication object.
Parameters:
window
The optr of the window object to be sent to the back of the screen.
Return: Nothing.
Interception: Do not intercept.
optr MSG_GEN_APPLICATION_BUILD_STANDARD_DIALOG( char * customTriggers, char * arg2, char * arg1, char * string, CustomDialogBoxFlags dialogFlags);
This message builds a standard dialog box for the application.
Source: Infrequently used.
Destination: The GenApplication to use the dialog box.
Parameters:
customTriggers
A pointer to a table of custom GenTrigger information. Each trigger given in the table will appear in the dialog box in the order declared. The table is made up of structures of type
StandardDialogResponseTriggerTable
.
arg
1
arg
2
string
dialogFlags
CustomDialogBoxFlags
indicating what type of dialog box is to be created.Return: The optr of the dialog box object.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_DO_STANDARD_DIALOG(@stack word dialogMethod, optr dialogOD, char *helpContext, char * customTriggers, char * arg2, char * arg1, char * string, CustomDialogBoxFlags dialogFlags);
This message executes a standard dialog box and returns immediately. When the dialog box is shut down, the message passed in the
dialogMethod
parameter is sent to the object specified in
dialogOD
. Only one dialog box at a time may be displayed with this message.
Source: Infrequently used.
Destination: The GenApplication to use the created dialog box.
Parameters:
dialogMethod
The message to be sent out when the user is finished with the dialog. This message should be defined based on the prototype
GEN_APP_DO_STANDARD_DIALOG_MSG
.
dialogOD
dialogMethod
above.
customTriggers
StandardDialogResponseTriggerTable
.
arg2
arg1
string
dialogFlags
CustomDialogBoxFlags
indicating what type of dialog box is to be created.Return: Nothing.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_TOGGLE_CURSOR();
This message toggles the cursor for a text object.
Source: Infrequently used.
Destination: The GenApplication of the text object.
Interception: Do not intercept.
void MSG_GEN_APPLICATION_BRING_UP_HELP();
This message brings up help for an application. Normally, this is accomplished by sending a message to the focus object telling it to bring up a help window with the focus' help context.
Source: Unrestricted, though generally from an application Help icon or <F1>.
Destination: GenApplication object.
Interception: Generally not intercepted, though it may be useful if for some reason you do not wish to bring up help (such as it doesn't exist for this application).
void MSG_GEN_APPLICATION_TOGGLE_CURRENT_MENU_BAR();
This message toggles the GIV_POPOUT state of the current GenPrimary's menu bar. This message only takes effect if the menu bar is toggleable (i.e. if UIWO_POPOUT_MENU_BAR is set).
Source: Unrestricted.
Destination: GenApplication object.
void MSG_GEN_APPLICATION_TOGGLE_FLOATING_KEYBOARD();
This message toggles the state of the floating keyboard within the current application. Applications may subclass this to bring up their own PenInputControl (or equivalent) object. Otherwise the application object will create its own.
Source: Unrestricted, though generally only supported on pen-based systems.
Destination: GenApplication object.
Interception: May be intercepted if the application has its own PenInputControl object.
void MSG_GEN_APPLICATION_TOGGLE_EXPRESS_MENU();
This message toggles (opens or closes) the parent field's express menu.
Source: Unrestricted.
Destination: GenApplication object.


| glance.survfit {broom} | R Documentation |
Glance accepts a model object and returns a tibble::tibble()
with exactly one row of model summaries. The summaries are typically
goodness of fit measures, p-values for hypothesis tests on residuals,
or model convergence information.
Glance never returns information from the original call to the modeling function. This includes the name of the modeling function or any arguments passed to the modeling function.
Glance does not calculate summary measures. Rather, it farms out these
computations to appropriate methods and gathers the results together.
Sometimes a goodness of fit measure will be undefined. In these cases
the measure will be reported as NA
.
Glance returns the same number of columns regardless of whether the
model matrix is rank-deficient or not. If so, entries in columns
that no longer have a well-defined value are filled in with an NA
of the appropriate type.
## S3 method for class 'survfit' glance(x, ...)
x |
An |
... |
Additional arguments passed to |
A tibble::tibble()
with exactly one row and columns:
events |
Number of events. |
n.max |
Maximum number of subjects at risk. |
n.start |
Initial number of subjects at risk. |
nobs |
Number of observations used. |
records |
Number of observations |
rmean |
Restricted mean (see [survival::print.survfit()]). |
rmean.std.error |
Restricted mean standard error. |
conf.low |
lower end of confidence interval on median |
conf.high |
upper end of confidence interval on median |
median |
median survival |
Other cch tidiers:
glance.cch()
,
tidy.cch()
Other survival tidiers:
augment.coxph()
,
augment.survreg()
,
glance.aareg()
,
glance.cch()
,
glance.coxph()
,
glance.pyears()
,
glance.survdiff()
,
glance.survexp()
,
glance.survreg()
,
tidy.aareg()
,
tidy.cch()
,
tidy.coxph()
,
tidy.pyears()
,
tidy.survdiff()
,
tidy.survexp()
,
tidy.survfit()
,
tidy.survreg()
library(survival) cfit <- coxph(Surv(time, status) ~ age + sex, lung) sfit <- survfit(cfit) tidy(sfit) glance(sfit) library(ggplot2) ggplot(tidy(sfit), aes(time, estimate)) + geom_line() + geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .25) # multi-state fitCI <- survfit(Surv(stop, status * as.numeric(event), type = "mstate") ~ 1, data = mgus1, subset = (start == 0) ) td_multi <- tidy(fitCI) td_multi ggplot(td_multi, aes(time, estimate, group = state)) + geom_line(aes(color = state)) + geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .25)


HMD slashes Nokia 2.2 price to 5999 in India, available for Rs 5150 at Amazon
by NayanHMD has slashed Nokia 2.2 pricing in India making the 2GB RAM variant available for just Rs 5999 and 3GB RAM variant for 6999 oficially. You can but the smartphone for the revised pricing at Nokia Shop.
But you can buy Nokia 2.2 for just Rs 5150 at Amazon India, as some of the retailers are offering the smartphone at much lower prices than the revised official price.
Even the 3GB RAM variant can be bought for just Rs 6324.
Nokia 2.2 Details:
You can read our complete Nokia 2.2 coverage including performance review and unboxing by clicking here. Nokia 2.2 comes with a display size of 5.71-inch with HD resolution and 19:9 ratio. Nokia 2.2 is the first entry-level Nokia smartphones to come with a tear-drop notch display.
Read all Nokia 2.2 details like complete specs, features, price, and release date and check out images and video by clicking here.


How to watch the 2019 League of Legends World Championship Semifinals: schedule and stream
by Austen GoslinThe League of Legends 2019 semifinals match ups are set, and it’s time to see which team will make it to the Finals. We already know that one Chinese team will be there for sure, but which one, and who they will face is anyone’s guess.
The first match of the weekend will be an LPL contest as Invictus Gaming take on FunPlus Phoenix. While FunPlus managed to take home the trophy during LPL Summer just a few months ago, IG once again looks like one of the best teams in the world. If IG continue to play the way it has throughout the tournament, it may have a chance at repeating as World Champions.
Meanwhile, in the second semifinal match, SK telecom T1 will play G2 Esports. G2 entered Worlds as one of the favorites to win the tournament, but with every other western team knocked out, the level of competition it was facing throughout the season is starting to seem a little suspect. SKT, on the other hand, have been one of the best teams in the tournament and it would take an impressive G2 performance to knock SKT out.
Each of the semifinal matches for the League of Legends 2019 World Championship will be live on Riot’s Youtube and Twitch channels. If you want to claim missions rewards for watching the matches you’ll need to log in and watch on watch.lolesports.com, where you’ll also be able to access Pro View if you subscribe.
Worlds 2019 Semifinal Schedule
Saturday, Nov. 2
Invictus Gaming vs FunPlus Phoenix — 7 a.m. ET
Sunday, Nov. 3
SK telecom T1 vs G2 Esports — 6 a.m. ET


This package provides blocks with Boolean input and output signals to describe logical networks. A typical example for a logical network built with package Logical is shown in the next figure:
The actual value of Boolean input and/or output signals is displayed in the respective block icon as "circle", where "white" color means value false and "green" color means value true. These values are visualized in a diagram animation.
| Name | Description |
|---|---|
| And | Logical 'and': y = u1 and u2 |
| Or | Logical 'or': y = u1 or u2 |
| Xor | Logical 'xor': y = u1 xor u2 |
| Nor | Logical 'nor': y = not (u1 or u2) |
| Nand | Logical 'nand': y = not (u1 and u2) |
| Not | Logical 'not': y = not u |
| Pre | Breaks algebraic loops by an infinitesimal small time delay (y = pre(u): event iteration continues until u = pre(u)) |
| Edge | Output y is true, if the input u has a rising edge (y = edge(u)) |
| FallingEdge | Output y is true, if the input u has a falling edge (y = edge(not u)) |
| Change | Output y is true, if the input u has a rising or falling edge (y = change(u)) |
| GreaterThreshold | Output y is true, if input u is greater than threshold |
| GreaterEqualThreshold | Output y is true, if input u is greater or equal than threshold |
| LessThreshold | Output y is true, if input u is less than threshold |
| LessEqualThreshold | Output y is true, if input u is less or equal than threshold |
| Greater | Output y is true, if input u1 is greater than input u2 |
| GreaterEqual | Output y is true, if input u1 is greater or equal than input u2 |
| Less | Output y is true, if input u1 is less than input u2 |
| LessEqual | Output y is true, if input u1 is less or equal than input u2 |
| ZeroCrossing | Trigger zero crossing of input u |
| LogicalSwitch | Logical Switch |
| Switch | Switch between two Real signals |
| Hysteresis | Transform Real to Boolean signal with Hysteresis |
| OnOffController | On-off controller |
| TriggeredTrapezoid | Triggered trapezoid generator |
| Timer | Timer measuring the time from the time instant where the Boolean input became true |
| RSFlipFlop | A basic RS Flip Flop |
| TerminateSimulation | Terminate simulation if condition is fulfilled |


20 y/o girl born in Genoa, Italy. Communication design student in Milan.
I'm passionate about illustration and editorial design. Cat lover (but I dig dogs too).
Interested in literature, sustainable design and art. I love visiting art exhibitions,
star wars movies, welsh corgis and white chocolate. My hobbies include (apart from
laying in my bed with my cats) drawing, listening to my favourite artists and reading novels.
If you're bored, here you can check out some of my work (there's not much yet so it won't
take too long, I promise). And here is a short compilation of corgi videos. You're welcome.


{{if .Command}}{{.Command.Name}} - {{end}}Ghost RPC
{{if .Command}}{{.Command.Description}}
{{end}}
Ghost version: <IP_ADDRESS>
Note that the RPC is from a regtest node (for completeness), so it includes some additional calls that a regular node doesn't have.
{{range .Groups}}
{{end}}
{{.Name}}
{{range .Commands}}
{{.Name}}
{{end}}
{{end}}
{{end}}


My dearest Iron Bloggers,
Here are the standings for the week of ${week_start.strftime("%F")}. As a reminder, everyone is obliged to post at least one article before 6AM Monday morning. You can pay your debts here. You can also subscribe to a feed of all articles.
People who posted:
% for u in sorted(good, key=lambda u:u.username):
% for p in u.weeks[week]:
- ${u.username} - ${p['title']}
% endfor
% endfor
SLACKERS
% for u in lame:
- ${u.username}
% endfor
% if punt:
PUNTED for balance ≥${currency}${fine * 6}: ${", ".join(sorted(punt))}
% endif
% if skip:
People who have not yet started:
% for u in sorted(skip, key=lambda u:u.username):
- ${u.username}
% endfor
% endif
Beer pool:
- This week: ${currency}${fine * len(lame)}.00
- Total: ${currency}${pool}
Individual debts:
% for (u, v) in sorted(debts, key=lambda p:p[1], reverse=True):
- ${u} ${currency}${v}
% endfor
% if punted:
PREVIOUSLY PUNTED (pay ${currency}${fine * 6} balance to return):
% for (u) in sorted(punted, key=lambda p:p.username):
- ${"%20s (%s)" % (u.username, u.end)}
% endfor
% endif


Mon-Fri: 9:00am - 7:30pm Sat: 8:00am - 4:30pm Sun: 9:00am - 3:30pm
Connect with us on Facebook
603-432-0379


This SVG sprite was created with Fontastic
http://yoursite.com/images/icons.svg
<svg class="icon-twitter"><use xlink:href="#icon-twitter"></use></svg>
/images/icons.svg
. So now the twitter icon markup could look like this:<svg class="icon-twitter"><use xlink:href="/images/icons.svg#icon-twitter"></use></svg>
[class^="icon-"], [class*=" icon-"] {
height: 32px;
width: 32px;
display: inline-block;
fill: currentColor;
}
You can use height
and width
properties to control icon size. To define icon color use fill
property. Note: currentColor
keyword inherits the color value of a parent element.
Remember: with Icon Cloud you don't have to worry about IE capability, the sprite file and other stuff. We'll take care of all of that for you, just click the "Publish" button and give it a try.


{%extends 'base.html'%} {%block content%}
Begin here by searching for a doctor
| Death Among Patients With Treatable Complications | This measure is intended to identify patients who pass away following the development of a complication. The underlying assumption is that good hospitals identify these complications quickly and treat them aggressively. | |
| Sepsis | Considered a life-threatening medical emergency, sepsis happens when an infection you already have triggers a chain reaction throughout your body. Without timely treatment, sepsis can rapidly lead to tissue damage, organ failure, and death. | |
| Clots/Deep Vein Thrombosis (DVT) | A medical condition that occurs when a blood clot forms in a deep vein (common in the lower leg, thigh, or pelvis). Complications of clots happens when a part of the clot breaks off and travels through the bloodstream to the lungs, preventing blood from getting to your lungs. | |
| Pressure Sores & Ulcers | Caused by unrelieved pressure on the skin. They usually develop over bony prominences, such as the elbow, heel, hip, shoulder, back, and back of the head, creating soft-tissue damage ranging from a cut to deep crater in the skin. | |
| Wounds Dehiscence | Caused by a surgical wound failing to heal. Can also be caused by perforation of a surgical wound where internal organs are exposed. | |
| Accidental Cuts & Lacerations | Looking at the rate of a hospital and physician's inadvertent cuts, punctures, perforations, and lacerations during a surgical procedure is a very good gauge of quality of care. |


The points/annotations file is a text file. Each line of text
should correspond to one point/annotation. Here is the format
for each line:
location value 1; value 2; ... ; value n; year; row; column[; label code]
An example:
- Your source has the following location keys: Site, Depth,
Transect Line and Quadrant.
- You are uploading an image that was taken at Site: sharkPoint,
Depth: 10m, Transect Line: 3, and Quadrant: qu4, on 14 January
2010.
- You want to specify a point for this image that is on the
100th row and 150th column of the image (with rows and columns
measured in pixels).
- That point should be annotated with a label whose short code
is
Porit
.
Then you will have the following line of text:
sharkPoint; 10m; 3; qu4; 2010; 100; 150; Porit
If you are uploading points only and not annotations, then your
line of text may specify a label code anyway (which will be
ignored), or you may omit the label code like so:
sharkPoint; 10m; 3; qu4; 2010; 100; 150
Notes:
- When you choose a points/annotations file, it automatically
gets processed. If the processing results are not what you
expect, you can make corrections to the file and then click the
"Re-process file" button to process the file again.
If the file contains points/annotations for an image that is not
selected for upload below, those particular points/annotations
will simply be ignored at upload time.
- If you're used to expressing point positions with x and y,
note that x corresponds to columns, and y corresponds to rows.
- If your image is 1000 pixels wide, then the possible column
numbers are 1-1000, not 0-999. The same thing applies to row
numbers.
- Label codes in the points/annotations file must correspond to
a label in your source's labelset.
- Label codes are case-insensitive. If your labelset has a label
code
PORIT
, and the points/annotations file has
Porit
, then these codes will match.


Hi! |
| This email is confirming that we’ve updated your Never-Run-Out Service according to the tweaks you made: |
| We’ll automatically ship your {{product_list}} every {{subscription_interval}} instead of every {{previous_subscription_interval}}. |
| And if you need to make any other adjustments to your Never-Run-Out Service, visit your account page on Glossier.com to change, cancel, or pause your plan anytime. |
|
Glossier 233 Spring Street, New York, NY 10013 5 New Street Square, London, EC4A 3TW www.glossier.com //<EMAIL_ADDRESS>|


This computes a series of models that test the code in the strict thermodynamic equilibrium limit. The radiation field is a true black body with the energy density and color temperatures equal. It between 104 K and 107.5 K. The gas kinetic temperature should equal the radiation field temperature. The gas has a very high metallicity so that the heavy elements dominate the thermal equilibrium. The output gives the black body temperature, the gas kinetic temperature, and the relative difference between the two.
In this figure the x-axis is the log of the black body temperature. The y-axis is the relative difference between the black body and gas kinetic temperatures. The two should be equal, and are, to substantially better than 1%.
last modified 19 July, 2008


## Dokku
### Great for
- Deveopment Deployments
- Running Builds
- Testing
- Non-critical stuff (Personal Blogs, etc...)
Dokku
Docker-powered Heroku-in-a-Box
Git-push Apps w/ Buildpacks
Dokku
Or Take a Dockerfile...
```dockerfile
FROM ubuntu:trusty
MAINTAINER Steven Edouard
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -y -y
RUN apt-get install wget -y
RUN wget http://nodejs.org/dist/v0.12.0/node-v0.12.0-linux-x64.tar.gz && sudo tar -C /usr/local --strip-components 1 -xzf node$
RUN sudo apt-get install build-essential -y
```
Dokku
And git-push it!
## Dokku
### [Dokku-alt](https://github.com/dokku-alt/dokku-alt) is a fantastic fork that...
- Has MongoDB, Redis etc. plugins
- Super easy update & install script
Dokku
Provisioning on Azure
Deis
Dokku all grown up...
- Runs on CoreOS
- Manages a cluster of VMs
- Git deploy w/ Buildpacks & Dockerfile
- Horizontally scalable
Deis
Scale Effortlessly
Oops! Made a Booboo?
Rollback is a Sinch
## Deis
### Automate with Controller API
```
Request:
POST /v1/apps/ HTTP/1.1
Host: deis.example.com
Content-Type: application/json
Authorization: token abc123
```
```
Reponse:
HTTP/1.1 201 CREATED
X_DEIS_API_VERSION: 1.1
X_DEIS_PLATFORM_VERSION: 1.4.1
Content-Type: application/json
{
"created": "2014-01-01T00:00:00UTC",
"id": "example-go",
"owner": "test",
"structure": {},
"updated": "2014-01-01T00:00:00UTC",
"url": "example-go.example.com",
"uuid": "de1bf5b5-4a72-4f94-a10c-d2a3741cdf75"
}
```
Deis
Provisioning on Azure
Azure
Powerful Infrastructure
Powerful Orchestration
Azure
Checkout our scripts to deploy [dokku](https://github.com/sedouard/dokku-azure) and [deis](http://docs.deis.io/en/latest/installing_deis/azure/)
Find this presentation at:
[sedouard.github.io/Deis-Dokku-Azure](https://sedouard.github.io/Deis-Dokku-Azure)


 This is done to make your login experience as seemless as possible. However you may need to reset these settings, perhaps to disable your pre-selected identity provider(s).')}
${_('Read more about how')} ${_('these settings are stored')}.


Scan QR code to receive and safely dispose of masks at the Recal centers. Points will be added to your account whenever you return used masks at the Recal centers.
collect
&
dispose
Scan QR code to receive and safely dispose of masks at the Recal centers. Points will be added to your account whenever you return used masks at the Recal centers.
Rewards
Redeem the points you've collected at any of our partner stores and service providers for discounts on the products and services you love


Rex Tillerson signs another deal with Rosneft for a lucrative $3.2 billion oil deal that would give Exxon permission to develop offshore oil fields in the Russian Arctic in exchange for Rosneft getting stakes in a number of Exxon's US-based projects.
Source: Business Insider


Hi, I am Nikhil Shejwal
I am experienced front-end developer with demonstrated history of working in dynamic team environment for Fortune 500 companies like Citigroup, Toyota & AT & T. I develop user-interface using advanced JS frameworks such as Angular & ReactJS and backend technologies such as NodeJS and MongoDB.


class: center # Go Pipelines, go...
Fig 1. Two confused Gophers
--- # What's this about 1. What are goroutine pipelines 2. Examples when to use pipelines ... 3. ... and not to --- # Introduction


Tutorial : Computing ideal line profiles¶
In this tutorial you will, hopefully, learn how to compute ideal line Lyman-alpha line profiles with zELDA. The lines computed in this turorial are ideal becase they don’t suffer from the tipical artifacts casued by the fact the instruments are not perfect. These lines are in the rest frame of the galaxy.
Computing one ideal line profile¶
Let’s start by loading zELDA and setting the location of the LyaRT grids:
>>> import Lya_zelda as Lya
>>> your_grids_location = '/This/Folder/Contains/The/Grids/'
>>> Lya.funcs.Data_location = your_grids_location
where /This/Folder/Contains/The/Grids/ is the place where you store the LyaRT data grids, as shown in the installation section.
Now, let’s decide which outflow geometry we want to use. For this tutorial we will use the gas geometry known as Thin Shell in which the instrinsic continum is a gaussian and a continuum with a give equivalent width.
>>> Geometry = 'Thin_Shell_Cont'
Let’s load the data containing the grid:
>>> LyaRT_Grid = Lya.load_Grid_Line( Geometry )
This contains all the necessary information to compute the line profiles. To learn more about the grids of line profiles go to Installation .
Now let’s define the parameters of the shell model that we want. these are five:
>>> V_Value = 50.0 # Outflow expansion velocity [km/s]
>>> logNH_Value = 20. # Logarithmic of the neutral hydrogen column density [cm**-2]
>>> ta_Value = 0.01 # Dust optical depth
>>> logEW_Value = 1.5 # Logarithmic the intrinsic equivalent width [A]
>>> Wi_Value = 0.5 # Intrinsic width of the line [A]
Now, let’s set the wavlength array where we want to put the line in the international system of units (meters). We arbitraly chose to evaluate the line +-10A around Lyman-alpha:
>>> import numpy as np
>>> w_Lya = 1215.68 # Lyman-alpha wavelength in amstrongs
>>> wavelength_Arr = np.linspace( w_Lya-10 , w_Lya+10 , 1000 ) * 1e-10
Now he have verything, let’s compute the line simply by doing:
>>> Line_Arr = Lya.RT_Line_Profile_MCMC( Geometry , wavelength_Arr , V_Value , logNH_Value , ta_Value , LyaRT_Grid , logEW_Value=logEW_Value , Wi_Value=Wi_Value )
And… It’s done! Line_Arr is a numpy array that contains the line profile evaluated in wavelength_Arr.
Let’s plot the line by doing
>>> import pylab as plt
>>> plt.plot( wavelength_Arr *1e10 , Line_Arr )
>>> plt.xlabel('wavelength[A]' , size=15 )
>>> plt.ylabel('Flux density [a.u.]' , size=15 )
>>> plt.show()
This should show something like this
Computing many ideal line profile¶
Above we have just seen how to compute one ideal line profile. In the case that you want to compute several zELDA has a more compact function.
Let’s start like in the case above in which we set the location of the grids:
>>> import Lya_zelda as Lya
>>> your_grids_location = '/This/Folder/Contains/The/Grids/'
>>> Lya.funcs.Data_location = your_grids_location
where /This/Folder/Contains/The/Grids/ is the place where you store the LyaRT data grids, as shown in the installation section.
Now, let’s set the geometry:
>>> Geometry = 'Thin_Shell_Cont'
And now, instead of loading the grid, let’s define the outflow parameters. In this case they will be lists (or numpy arrays) as we want, for example 3 line profile configurations:
>>> V_Arr = [ 50.0 , 100. , 200. ] # Outflow expansion velocity [km/s]
>>> logNH_Arr = [ 18. , 19. , 20. ] # Logarithmic of the neutral hydrogen column density [cm**-2]
>>> ta_Arr = [ 0.1 , 0.01 , 0.001 ] # Dust optical depth
>>> logEW_Arr = [ 1. , 1.5 , 2.0 ] # Logarithmic the intrinsic equivalent width [A]
>>> Wi_Arr = [ 0.1 , 0.5 , 1.0 ] # Intrinsic width of the line [A]
and the wavelength array
>>> import numpy as np
>>> w_Lya = 1215.68 # Lyman-alpha wavelength in amstrongs
>>> np.linspace( w_Lya-10 , w_Lya+10 , 1000 ) * 1e-10
Now let’s actually compute the lines:
>>> Line_Matrix = Lya.RT_Line_Profile( Geometry , wavelength_Arr , V_Arr , logNH_Arr , ta_Arr , logEW_Arr=logEW_Arr , Wi_Arr=Wi_Arr )
Line_Matrix is a 2-D numpy array containing the line profiles for teh configurations. For example, Line_Matrix[0] has outflow velocity V_Arr[0], neutral hydrogen column density logNH_Arr[0] and so on.
Let’s plot them:
>>> import pylab as plt
>>>
>>> for i in range( 0 , 3 ) :
>>>
>>> plt.plot( wavelength_Arr *1e10 , Line_Matrix[i] )
>>>
>>> plt.xlabel('wavelength[A]' , size=15 )
>>> plt.ylabel('Flux density [a.u.]' , size=15 )
>>>
>>> plt.show()
This should show something like this:
Now you know how to get ideal Lyman-alpha line profiles!


[the cutting edge ]
G'day Developers!
My 2013 as a Microsoft Regional Director
This year has been a great year for the cloud, for Microsoft, and for SSW customers.
We’ve delivered many solutions built on top of Azure, CRM Online, SharePoint
Online, and TFS Online – all running on Microsoft’s cloud infrastructure. These
solutions work across devices. They are easy to manage – you are set up in virtually
no time and they are enterprise-ready, and we’re able to offer substantially more for
much smaller costs.
On the consumer front, Microsoft will look back and see 2013 as the start of the fight
for the phone and the tablet.
Building on the Microsoft Stack:
I’ve just come back from a couple of weeks at the MVP summit in Seattle (I love this
event – I was MVP of the year in 2011). As a Microsoft Regional Director and ALM MVP, as
well as Chief Architect of SSW, I enjoy keeping my finger on the pulse of Microsoft and
its many product developments. Since my main job is helping companies adopt and deploy
Microsoft technologies, my roles at Microsoft are very useful for my customers and
staff. Therefore with all the new releases in 2013 it has been a busy year.
Internally at SSW we have implemented the latest upgrades across the board: all our PCs
now happily run on Windows 8.1, our phones now use Skype and Lync 2013, the developers
are making good use of Visual Studio 2013 and TFS 2013. Daily we run the latest Exchange
Server 2013 and SharePoint 2013. Next on our to-do list is to upgrade to CRM
2013, which has just been released.
We’ve definitely seen a shift by our clients from SharePoint development to stand alone
MVC solutions that have some integration points with SharePoint, CRM, and other
applications via REST APIs. Our developers
love using ASP.MVC 4 and 5 with either SQL Server 2012 or Azure. One of these
combinations power 90% of our client projects.
There were 2 standout projects this year. Both embraced the technology, both used Scrum,
and both brought complicated solutions to life. The first one was Toll Transport, led by
Mark Liu, and the second was PwC,
led by Eric Phan. There were many other projects also where I saw exemplary work built
on the Microsoft stack.
My final project starting for 2013 is one I’m very excited about: FireBootCamp.
FireBootCamp is an intensive training course that will cover technologies such as .NET
MVC,
JavaScript & jQuery and uses Microsoft Visual Studio 2013, all brought together in an
agile software development environment – with FireBootCamp we’ll be able to train up
even a starter developer to a .NET hero in just 9 weeks! http://firebootcamp.com
Building SSW TV:
We have continued to work hard to make more and more presentations available to view on
SSW TV. This video site, for which I am the Product Owner, is focused exclusively
on promoting Microsoft platforms and interviewing Microsoft experts from around the
world, continuing the SSW tradition of sharing knowledge to help our industry create
better quality software. In the last 12 months I have personally created over 30 videos
on SSW TV. During this period, our total views have jumped from 44,000 views to more
than 218, 000 and our subscriber numbers have more than quintupled from 295 to more than
1,500.
I also continue to run the Sydney and Canberra .NET User Groups every month to ensure
best practices are identified and shared with the community. This year we’ve covered
a wide range of subjects from business law to Scrum, and have had some exciting
international guest speakers such as Glenn Block from Microsoft and Jason Beres from
Infragistics. The final User Group of the year will be a crescendo featuring the
handsome man Scott Hanselman.
Through SSW TV we make each Sydney .NET User Group a global event each month by
live-streaming the meeting and then publishing the video online. No interested party is
left out!
The TV team have matured and grown our channel extraordinarily this year.
In addition to client work, throughout the year I have spoken around Australia and at
interesting international events. I also presented at my old favorite,
TechEd Australia and TechEds abroad, on topics such as:
I know many of you always want to know what’s new with Microsoft and what’s cool in the
industry so I will be putting together new rules and new presentations in 2014. Now’s
the time to sing out and tell me.
Thank you:
I would like to thank our clients and all those who have sent me a terrific amount of
feedback. Keep telling me what we could do better – my email address is adamcogan at
ssw.com.au
I’m proud to be one of the technology leaders in Australia and I will continue helping
teams work better together by being a Scrum Master, Scrum Trainer and a .NET
architect, working with TFS and implementing the whole ALM lifecycle.
Keep
reading to see my highlights, top tweets and more
-Adam Cogan, SSW
Got a comment for Adam?
Email Adam Cogan
Comment
Adam Cogan's blog
Tweet @adamcogan
|


Susan Hamazaki
|<EMAIL_ADDRESS>| |
| What they can do | Create and stop payments and view financial information |
| Status | Invitation expired |
|<EMAIL_ADDRESS>| |
| What they can do | Create and stop payments and view financial information |
| Status | Invitation expired |


You can view the orders here to facilitate purchase of the items. your store here. Please keep it uptodate to keep it in sync with your store
You can add or update the items for your store here. Please keep the stock info upto date to keep it in sync with your store


Basically a software container is used to encapsulate a software component and the correponding dependencies. You don’t start from scratch or install all the software over and over.
Container-based virtualization, also called operating system virtualization, is an approach to virtualization in which the virtualization layer runs as an application within the operating system (OS). In this approach, the operating system’s kernel runs on the hardware node with several isolated guest virtual machines (VMs) installed on top of it. The isolated guests are called containers.
What exactly is a BioContainer?
Is a Independently deployable bits of code that can be used to build and run agile applications. It could be anything from a FASTA parser, a tree algorithm or a simple visualization module.
- Containers encapsulate discrete components of application logic provisioned only with the minimal resources needed to do their job.
- Containers are easily packaged, lightweight and designed to run anywhere
- Multiple containers can be deployed in a single VM.
Lets install a container quickly:
docker pull biodckr/dia-umpire
This simple sentence install dia-umpire and all its dependencies
What is BioContainers?
BioContainers is a community-driven project that provides the infrastructure and basic guidelines to create, manage and distribute Bioinformatics Docker containers with special focus in Proteomics, Genomics, Transcriptomics and Metabolomics. BioContainers is based in the popular Docker framework. A revolutionary platform for developers and sysadmins to build, ship, and run applications anywhere. With Docker you can build an image containing your software and all dependencies and ship it ready to use (see Details).
BioContainers Goals
BioContainers community and project have three major goals:
- A central registry with containers ready to be use: The BioContainers Registry
- Specifications about how to create a BioContainers container/image and infrastructure to deploy them.
- A complete infrastructure create, share and request docker images from bioinformatics software
BioContainers containersfacilitate the usage, integration and reproducibility of software and algorithms into more comprehensive bioinformatics pipelines. Finally, we presented the guidelines and specifications to create a container, contribute to the group or request a container from the group. Our guidelines and specifications are part of community efforts like open-containers ando Bioconda to make installation, addition, evaluation and benchmarking of new algorithms and tools accessible to researchers, minimizing the efforts for installation and configuration.
BioContainers is an open source and community-driven framework which provides system-agnostic executable environments for bioinformatics software with special focus on proteomics, genomics, metabolomics and transcriptomics.BioContainers is based on the popular Docker framework that allows software to be installed and executed under an isolated and controllable environment. BioContainers is based in four main components:
-
Containers provides all the containers maintained by the BioContainers community and ready to be use by the community.
-
Biocontainers Registry is hosted registry of all biocontainers images that are ready to be use.
-
BioContainers SandBox is used to host all the new software, broken containers. Users can ask for a new container by creating a new issue. Also developers can contribute with the group by generating a container for the requested software.
-
Specifications define a set of guidelines and rules to contribute with BioContainers.
What you get using BioContainers
In the next video you can check out what you can achieve by using docker containers:


Time to do your work
Top 3 Stories: The Economist
-Title:
-Title:
Top New Open Postions
Top Goals of the Day
Goal 1:
Goal 2:
Goal 3: