Exemplo n.º 1
0
/*
 * XpGetContentOrientation determines the content-orientation as
 * determined by the passed context. The page and document pools are
 * queried in turn for a specified content-orientation attribute. If none
 * is found the first content-orientation in the
 * content-orientations-supported printer attribute is taken as the
 * default. 
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetContentOrientation(
			XpContextPtr pContext)
{
    XpOid orientation;

    orientation = XpGetOidAttr(pContext, XPPageAttr,
			       xpoid_att_content_orientation,
			       (XpOidList*)NULL);
    if(xpoid_none == orientation)
	orientation = XpGetOidAttr(pContext, XPDocAttr,
				   xpoid_att_content_orientation,
				   (XpOidList*)NULL);
    if(xpoid_none == orientation)
    {
	XpOidList* content_orientations_supported;

	content_orientations_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_content_orientations_supported,
			  (XpOidList*)NULL);
	orientation = XpOidListGetOid(content_orientations_supported, 0);
	XpOidListDelete(content_orientations_supported);
    }
    return orientation;
}
Exemplo n.º 2
0
/*
 * XpGetAvailableCompression determines the available-compression as
 * determined by the passed context. The page and document pools are
 * queried in turn for a specified content-orientation attribute. If none
 * is found the first available-compression in the
 * avaiable-compressions-supported printer attribute is taken as the
 * default.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetAvailableCompression(
			XpContextPtr pContext)
{
    XpOid compression;

    compression = XpGetOidAttr(pContext, XPPageAttr,
			       xpoid_att_available_compression,
			       (XpOidList*)NULL);
    if(xpoid_none == compression)
	compression = XpGetOidAttr(pContext, XPDocAttr,
				   xpoid_att_available_compression,
				   (XpOidList*)NULL);
    if(xpoid_none == compression)
    {
	XpOidList* available_compressions_supported;

	available_compressions_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_available_compressions_supported,
			  (XpOidList*)NULL);
	compression = XpOidListGetOid(available_compressions_supported, 0);
	XpOidListDelete(available_compressions_supported);
    }
    return compression;
}
Exemplo n.º 3
0
void
XpValidateOidAttr(XpContextPtr pContext,
		  XPAttributes pool,
		  XpOid oid,
		  const XpOidList* valid_oids,
		  XpOid default_oid)
{
    XpOid value_oid;
    value_oid = XpGetOidAttr(pContext, pool, oid, valid_oids);
    XpPutOidAttr(pContext, pool, oid,
		 value_oid == xpoid_none ? default_oid : value_oid);
}
Exemplo n.º 4
0
/*
 * XpGetPlex determines the plex as determined by the passed context. The page
 * and document pools are queried in turn for a specified plex attribute. If
 * none is found the first plex in the plexes-supported printer attribute is
 * taken as the default.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetPlex(
	  XpContextPtr pContext)
{
    XpOid plex;

    plex = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_plex,
			(XpOidList*)NULL);
    if(xpoid_none == plex)
	plex = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_plex,
			    (XpOidList*)NULL);
    if(xpoid_none == plex)
    {
	XpOidList* plexes_supported;

	plexes_supported =
	    XpGetListAttr(pContext, XPPrinterAttr,
			  xpoid_att_plexes_supported,
			  (XpOidList*)NULL);
	plex = XpOidListGetOid(plexes_supported, 0);
	XpOidListDelete(plexes_supported);
    }
    return plex;
}
Exemplo n.º 5
0
/*
 * XpGetPageSize returns the XpOid of the current page size (medium names
 * are page sizes in this implementation) as indicated by the passed
 * context.
 *
 * The relevant input-tray is returned in pTray. This parm must not be
 * NULL. If the input-tray is not indicated or irrelevant, xpoid_none
 * will be returned.
 *
 * This function optionally takes a XpOidMediumSS representation of the
 * medium-source-sizes-supported attribute in order to avoid parsing the
 * string value twice for calling functions that need to parse m-s-s-s
 * anyway (e.g. XpGetReproductionArea). If the caller has no other reason
 * to parse medium-source-sizes-supported, it is recommended that NULL be
 * passed.  This function will obtain medium-source-sizes-supported if it
 * needs to.
 *
 * Note: This routine assumes the values found in the passed context's
 *       attributes pools have been validated.
 */
XpOid
XpGetPageSize(XpContextPtr pContext,
	    XpOid* pTray,
	    const XpOidMediumSS* msss)
{
    XpOid medium;
    /*
     * check to see if default-medium is specified
     */
    medium = XpGetOidAttr(pContext, XPPageAttr, xpoid_att_default_medium,
			  (const XpOidList*)NULL);
    if(medium == xpoid_none)
    {
	/*
	 * default-medium not in page pool; try the document pool
	 */
	medium = XpGetOidAttr(pContext, XPDocAttr, xpoid_att_default_medium,
			      (const XpOidList*)NULL);
    }
    if(medium == xpoid_none)
    {
	/*
	 * default-medium not specified; try default-input-tray
	 */
	*pTray = XpGetOidAttr(pContext, XPPageAttr,
			      xpoid_att_default_input_tray,
			      (const XpOidList*)NULL);
	if(*pTray == xpoid_none)
	{
	    /*
	     * default-input-tray not in page pool; try the document pool
	     */
	    *pTray = XpGetOidAttr(pContext, XPDocAttr,
				  xpoid_att_default_input_tray,
				  (const XpOidList*)NULL);
	}
	if(*pTray != xpoid_none)
	{
	    /*
	     * default-input-tray found; get corresponding medium from
	     * input-trays-medium
	     */
	    XpOidTrayMediumList* input_trays_medium;
	    int i;
	    
	    input_trays_medium =
		XpGetTrayMediumListAttr(pContext, XPPrinterAttr,
					xpoid_att_input_trays_medium,
					(const XpOidList*)NULL,
					(const XpOidMediumSS*)NULL);
	    for(i = 0; i < XpOidTrayMediumListCount(input_trays_medium); i++)
	    {
		if(*pTray == XpOidTrayMediumListTray(input_trays_medium, i))
		{
		    medium = XpOidTrayMediumListMedium(input_trays_medium, i);
		    break;
		}
	    }
	    XpOidTrayMediumListDelete(input_trays_medium);
	}
    }
    else
	*pTray = xpoid_none;
    
    if(medium == xpoid_none)
    {
	XpOidMediumSS* local_msss = (XpOidMediumSS*)NULL;
	int i_mss, i_ds;
	XpOidMediumDiscreteSizeList* ds_list;
	/*
	 * no medium specified; use 1st page size found in
	 * medium-source-sizes-supported
	 */
	if((XpOidMediumSS*)NULL == msss)
	    msss = local_msss =
		XpGetMediumSSAttr(pContext, XPPrinterAttr,
				  xpoid_att_medium_source_sizes_supported,
				  (const XpOidList*)NULL,
				  (const XpOidList*)NULL);
	for(i_mss = 0;
	    i_mss < XpOidMediumSSCount(msss) && xpoid_none == medium;
	    i_mss++)
	{
	    if(XpOidMediumSS_DISCRETE == (msss->mss)[i_mss].mstag
	       &&
	       xpoid_none != (msss->mss)[i_mss].input_tray)
	    {
		ds_list =  (msss->mss)[i_mss].ms.discrete;
		for(i_ds = 0; i_ds < ds_list->count; i_ds++)
		{
		    if(xpoid_none != (ds_list->list)[i_ds].page_size)
		    {
			medium = (ds_list->list)[i_ds].page_size;
			break;
		    }
		}
	    }
	}
	XpOidMediumSSDelete(local_msss);
    }
    return medium;
}