Merge RCL_3 PDK_3.0.4
authorsrilekhas <srilekhas@symbian.org>
Fri, 22 Oct 2010 14:43:23 +0100
branchRCL_3
changeset 34 453a466b0a43
parent 33 4cb0291370d0 (current diff)
parent 29 bb3bc0aea200 (diff)
Merge
ImagePrint/ImagePrintUI/imageprintapp/src/cimageprintappui.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/data/directprintapp.loc	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+//  LOCALISATION STRINGS
+
+// Caption string for app.
+#define text_directprint_captionstring "DirectPrint"
+
+#define text_directprint_loc_resource_file "\\resource\\apps\\directprintapp"
+
+#define text_directprint_setting_directory "c:\\system\\data\\"
+#define text_directprint_setting_file "c:\\system\\data\\directprintsetting.dat"
+
+// Menu item string
+#define text_directprint_menu_item_help  		"Help"
+#define text_directprint_menu_item_about		"About"
+#define text_directprint_menu_item_exit  		"Back"
+
+// About dialog
+#define text_directprint_about_dialog_title		"About"
+#define text_directprint_about_dialog_text		"DirectPrintApp Version 1.0.0\n\nAuthor: K3"
+
+// error message 
+#define text_directprint_msg_print_in_use		"Print in use"
+#define text_directprint_msg_param_incorrect	"Incorrect parameter"
+#define text_directprint_msg_param_file_not_found	"File not found"
+#define text_directprint_msg_bearer_open_err	"Bearer open error [%d]"
+#define text_directprint_msg_submit_print_err	"Printing failed [%d]"
+#define text_directprint_msg_preview_err		"Preview failed"
+
+// progress message 
+#define text_directprint_printing_progress		"Printing... %d/%d"
+#define text_directprint_searching_progress		"Searching..."
+
+// information message 
+#define text_directprint_msg_now_printing		"Now printing"
+
+// Global menu item
+#define text_directprint_menu_print				"Print"
+#define text_directprint_menu_preview			"Preview"
+#define text_directprint_menu_change			"Change"
+
+#define text_directprint_toolbar_print			"Print"
+#define text_directprint_toolbar_preview		"Preview"
+
+#define text_directprint_mainview_title			"Print"
+#define text_directprint_mainview_menu_propertysetting 	"Property settings"
+#define text_directprint_mainview_menu_exit 		"Exit"
+#define text_directprint_mainview_toolbar_propertysetting 	"Property"
+#define text_directprint_mainview_item_printername		"Printer Name"
+#define text_directprint_mainview_item_bearer			"Bearer"
+#define text_directprint_mainview_item_propertysettings	"Property Settings"
+
+#define text_directprint_printerlist_title			"Printer list"
+#define text_directprint_printerlist_menu_search	"Search"
+#define text_directprint_printerlist_menu_new		"New"
+#define text_directprint_printerlist_menu_edit		"Edit"
+#define text_directprint_printerlist_menu_delete	"Delete"
+
+#define text_directprint_printersearch_title	"Printer search"
+#define text_directprint_searchresult_menu_search	"Search"
+
+#define text_directprint_printersetting_title		"Printer settings"
+#define text_directprint_printersetting_item_printername	"Printer name"
+#define text_directprint_printersetting_item_driver			"Driver"
+#define text_directprint_printersetting_item_bearer			"Bearer"
+#define text_directprint_printersetting_item_accesspoint	"Access point"
+#define text_directprint_printersetting_item_host			"Host"
+#define text_directprint_printersetting_item_port			"Port"
+#define text_directprint_printersetting_item_username		"User name"
+#define text_directprint_printersetting_item_que			"Que"
+#define text_directprint_printersetting_item_type			"Type"
+
+#define text_directprint_propertysetting_title		"Property settings"
+#define text_directprint_propertysetting_tab_paper	"Paper"
+#define text_directprint_propertysetting_tab_page	"Page"
+#define text_directprint_propertysetting_tab_margin	"Margin"
+#define text_directprint_propertysetting_tab_header	"Header"
+#define text_directprint_propertysetting_tab_footer	"Footer"
+#define text_directprint_propertysetting_item_papersize		"Paper Size"
+#define text_directprint_propertysetting_item_orientation	"Orientation"
+#define text_directprint_propertysetting_item_mediatype		"Media type"
+#define text_directprint_propertysetting_item_printpage		"Print page"
+#define text_directprint_propertysetting_item_printrange	"Print range"
+#define text_directprint_propertysetting_item_copy			"Number of copies"
+#define text_directprint_propertysetting_item_leftmargin	"Margin from left"
+#define text_directprint_propertysetting_item_rightmargin	"Margin from right"
+#define text_directprint_propertysetting_item_topmargin		"Margin from top"
+#define text_directprint_propertysetting_item_bottommargin	"Margin from bottom"
+#define text_directprint_propertysetting_item_headertext	"Header text"
+#define text_directprint_propertysetting_item_headerdistance	"Distance from top"
+#define text_directprint_propertysetting_item_headerfirstpage	"Include on first page"
+#define text_directprint_propertysetting_item_footertext	"Footer text"
+#define text_directprint_propertysetting_item_footerdistance	"Distance from bottom"
+#define text_directprint_propertysetting_item_footerfirstpage	"Include on first page"
+#define text_directprint_propertysetting_item_boaderless	"Boaderless"
+
+#define text_directprint_orientation_portrate		"Portrate"
+#define text_directprint_orientation_landscape		"Landscape"
+
+#define text_directprint_range_all		"All"
+#define text_directprint_range_odd		"Odd"
+#define text_directprint_range_even		"Even"
+
+#define text_directprint_yes	"Yes"
+#define text_directprint_no		"No"
+
+#define text_directprint_previewview_title		"Preview"
+#define text_directprint_previewview_expand		"Expand"
+#define text_directprint_previewview_reduce		"Reduce"
+
+
+
+
+
+// ---------------------------------------------------------------------------- 
+//
+// For directprint engine
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+
+// d:Paper size capability presented in the list box in print settings view
+// l:list_setting_pane_t1
+#define qtn_print_settings_paper_size "Paper size"
+
+// d:Paper size "Automatic" in the print settings view settings value
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_auto "Automatic"
+
+// d:Paper size "US Letter" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_letter "US Letter"
+
+// d:Paper size "A4" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_a4 "A4"
+
+// d:Paper size "A6" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_a6 "A6"
+
+// d:Paper size "4x6" in the print settings view list box / pop-up window
+// d:4x6 means paper size of 4 inches by 6 inches. This needs to be converted
+// d:in country localizations that use metric system
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_4x6 "4x6"
+
+// d:Paper size "5x7" in the print settings view list box / pop-up window
+// d:5x7 means paper size of 5 inches by 7 inches. This needs to be converted
+// d:in country localizations that use metric system
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_5x7 "5x7"
+
+// d:Paper size "Sticker" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_paper_size_sticker "Sticker"
+
+// d:Print quality capability presented in the list box in print settings view
+// l:list_setting_pane_t1
+#define qtn_print_settings_print_quality "Print quality"
+
+// d:Print quality "Automatic" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_quality_auto "Automatic"
+
+// d:Print quality "Normal" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_quality_normal "Normal"
+
+// d:Print quality "Draft" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_quality_draft "Draft"
+
+// d:Print quality "Fine" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_quality_fine "Fine"
+
+// d:Template capability as settings item in settings view
+// l:list_setting_pane_t1
+#define qtn_print_settings_template "Images per page"
+
+// d:Template 1 per page "1 borderless" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_settings_bless "1 borderless"
+
+// d:Default printer "PictBridge" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_settings_default_usb "PictBridge"
+
+// d:Default printer "Bluetooth" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_settings_default_bt "Bluetooth"
+
+// d:Default printer "WLAN printer" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_settings_default_wlan "WLAN printer"
+
+// d:Default printer "LPR printer" in the print settings view list box / pop-up window
+// l:list_set_graphic_pane_t1
+#define qtn_print_settings_default_lpr "LPR"
+
+// d:Text on the device discovery pop-up list
+// l:list_single_large_graphic_pane_t1_cp2/opt1
+#define qtn_print_memory_card "Memory card"
+
+// d: Text when there is no printer selected in settings view
+// l: list_set_graphic_pane_t1  
+// r: 6.2
+#define qtn_print_no_printer "No printer"
+
+#define qtn_print_settings_accesspoint "Access point"
+#define qtn_print_settings_host "Host"
+#define qtn_print_settings_port "Port"
+#define qtn_print_settings_user "User name"
+#define qtn_print_settings_que "Que"
+
+#define qtn_print_settings_extent "Extent Item"
+#define qtn_print_settings_extent2 "Extent Item2"
+#define qtn_print_settings_extent_select1 "Select1"
+#define qtn_print_settings_extent_select2 "Select2"
+#define qtn_print_settings_extent_select3 "Select3"
+#define qtn_print_settings_extent_select4 "Select4"
+
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/data/directprintapp.rss	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,1740 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+//  RESOURCE IDENTIFIER
+NAME DIRE	// 4 letter ID
+
+
+//  INCLUDES
+#include <eikon.rh>
+#include <avkon.rsg>
+#include <avkon.mbg>
+#include <avkon.rh>
+#include <appinfo.rh>
+#include "DirectPrintApp.hrh"
+#include "DirectPrintApp.loc"
+
+#define AVKON_BMPFILE_NAME "z:\\resource\\apps\\avkon2.mbm"
+
+//  RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+//	Define the resource file signature
+//	This resource should be empty.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE RSS_SIGNATURE
+	{
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Default Document Name
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_default_document_name
+	{
+	buf="DIRE";
+	}
+
+// -----------------------------------------------------------------------------
+//
+//	Define default menu and CBA key.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE EIK_APP_INFO
+	{
+	menubar = r_directprint_menubar;
+	cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_directprint_menubar
+//   Main menubar
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_BAR r_directprint_menubar
+	{
+	titles =
+		{
+		MENU_TITLE { menu_pane = r_directprint_menu; }
+		};
+	}
+
+
+// -----------------------------------------------------------------------------
+//
+//   r_directprint_menu
+//   Menu for "Options"
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE MENU_PANE r_directprint_menu
+	{
+	items =
+		{
+		MENU_ITEM
+				{
+				command = EDirectPrintCmdIdMainViewHelp;
+				txt = text_directprint_menu_item_help;
+				},
+		MENU_ITEM
+				{
+				command = EDirectPrintCmdIdMainViewAbout;
+				txt = text_directprint_menu_item_about;
+				},
+		MENU_ITEM
+				{
+				command = EAknSoftkeyExit;
+				txt = text_directprint_menu_item_exit;
+				}
+		};
+	}
+
+// -----------------------------------------------------------------------------
+//
+// About dialog resource.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_about_query_dialog
+	{
+	flags = EGeneralQueryFlags | EEikDialogFlagNoBorder | EEikDialogFlagNoShadow;
+	buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
+	items=
+		{
+		DLG_LINE 
+			{
+			type = EAknCtPopupHeadingPane;
+			id = EAknMessageQueryHeaderId;
+			itemflags = EEikDlgItemNonFocusing;
+			control = AVKON_HEADING
+				{
+				};
+			},
+		DLG_LINE
+			{
+			type = EAknCtMessageQuery;
+			id = EAknMessageQueryContentId;
+			control = AVKON_MESSAGE_QUERY
+				{
+				};
+			}
+		};
+	}
+
+//-----------------------------------------------------------------------------
+//
+//    r_directprint_print_progress_note
+//    For progress note.
+//
+//-----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_directprint_print_progress_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EDirectPrintCtrlIdPrintProgressNote;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label = text_directprint_printing_progress;
+                imagefile = AVKON_BMPFILE_NAME;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+                };
+            }
+        };
+    }
+
+//-----------------------------------------------------------------------------
+//
+//    r_directprint_search_progress_note
+//    For progress note.
+//
+//-----------------------------------------------------------------------------
+//
+RESOURCE DIALOG r_directprint_search_progress_note
+    {
+    flags = EAknProgressNoteFlags;
+    buttons = R_AVKON_SOFTKEYS_CANCEL;
+    items =
+        {
+        DLG_LINE
+            {
+            type = EAknCtNote;
+            id = EDirectPrintCtrlIdSearchProgressNote;
+            control = AVKON_NOTE
+                {
+                layout = EProgressLayout;
+                singular_label = text_directprint_searching_progress;
+                imagefile = AVKON_BMPFILE_NAME;
+                imageid = EMbmAvkonQgn_note_progress;
+                imagemask = EMbmAvkonQgn_note_progress_mask;
+				animation = R_QGN_GRAF_WAIT_BAR_ANIM;
+
+                };
+            }
+        };
+    }
+
+
+// -----------------------------------------------------------------------------
+//
+// Resources for messages.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_directprint_caption_string     { buf=text_directprint_captionstring; }
+RESOURCE TBUF r_directprint_about_dialog_title { buf=text_directprint_about_dialog_title; }
+RESOURCE TBUF r_directprint_about_dialog_text    { buf=text_directprint_about_dialog_text; }
+
+RESOURCE TBUF r_directprint_msg_print_in_use        { buf=text_directprint_msg_print_in_use; }
+RESOURCE TBUF r_directprint_msg_param_file_not_found { buf=text_directprint_msg_param_file_not_found; }
+RESOURCE TBUF r_directprint_msg_param_incorrect     { buf=text_directprint_msg_param_incorrect; }
+RESOURCE TBUF r_directprint_msg_bearer_open_err     { buf=text_directprint_msg_bearer_open_err; }
+RESOURCE TBUF r_directprint_msg_submit_print_err    { buf=text_directprint_msg_submit_print_err; }
+RESOURCE TBUF r_directprint_msg_preview_err { buf=text_directprint_msg_preview_err; }
+
+RESOURCE TBUF r_directprint_msg_printing_progress { buf=text_directprint_printing_progress; }
+RESOURCE TBUF r_directprint_msg_searching_progress { buf=text_directprint_searching_progress; }
+
+RESOURCE TBUF r_directprint_msg_now_printing { buf=text_directprint_msg_now_printing; }
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_localisable_app_info
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE LOCALISABLE_APP_INFO r_directprint_localisable_app_info
+	{
+	short_caption = text_directprint_captionstring;
+	caption_and_icon = 
+	CAPTION_AND_ICON_INFO
+		{
+		caption = text_directprint_captionstring;
+		number_of_icons = 1;
+		icon_file = "\\resource\\apps\\DirectPrintApp.mif";
+		};
+	}
+
+// -----------------------------------------------------------------------------
+//
+// Resources for messages.
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE TBUF r_directprint_setting_directory { buf=text_directprint_setting_directory; }
+RESOURCE TBUF r_directprint_setting_file      { buf=text_directprint_setting_file; }
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Print Main View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE AVKON_VIEW r_directprint_mainview
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_directprint_mainview_options_menu;
+	toolbar = r_directprint_mainview_toolbar;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_title
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE TITLE_PANE r_directprint_mainview_title
+	{
+	txt = text_directprint_mainview_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_BAR r_directprint_mainview_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_mainview_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_PANE r_directprint_mainview_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdMainViewPrint;
+			txt = text_directprint_menu_print;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdMainViewPreview;
+			txt = text_directprint_menu_preview;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdMainViewPropertySetting;
+			txt = text_directprint_mainview_menu_propertysetting;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdMainViewExit;
+			txt = text_directprint_mainview_menu_exit;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE AVKON_TOOLBAR r_directprint_mainview_toolbar
+	{
+	flags = KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdMainViewPrint;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_toolbar_print;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdMainViewPreview;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_toolbar_preview;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdMainViewPropertySetting;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_mainview_toolbar_propertysetting;
+						}
+					};
+				};
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_listbox
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE LISTBOX r_directprint_mainview_listbox
+	{
+	flags = EAknListBoxSelectionList;
+//	array_id = r_directprint_mainview_listbox_items;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_mainview_listbox_items
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE ARRAY r_directprint_mainview_listbox_items
+	{
+	items =
+		{
+		LBUF
+			{
+			txt = text_directprint_mainview_item_printername;
+			},
+		LBUF
+			{
+			txt = text_directprint_mainview_item_bearer;
+			},
+		LBUF
+			{
+			txt = text_directprint_mainview_item_propertysettings;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// Resources for item title.
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE TBUF r_directprint_mainview_item_printername      { buf=text_directprint_mainview_item_printername; }
+RESOURCE TBUF r_directprint_mainview_item_bearer           { buf=text_directprint_mainview_item_bearer; }
+RESOURCE TBUF r_directprint_mainview_item_propertysettings { buf=text_directprint_mainview_item_propertysettings; }
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Printer List View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+// 
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_view
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE AVKON_VIEW r_directprint_printerlist_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_DONE;
+	menubar = r_directprint_printerlist_options_menu;
+	toolbar = r_directprint_printerlist_toolbar;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_title
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE TITLE_PANE r_directprint_printerlist_title
+	{
+	txt = text_directprint_printerlist_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_BAR r_directprint_printerlist_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_printerlist_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_PANE r_directprint_printerlist_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPrinterListViewSearch;
+			txt = text_directprint_printerlist_menu_search;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPrinterListViewNew;
+			txt = text_directprint_printerlist_menu_new;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPrinterListViewEdit;
+			txt = text_directprint_printerlist_menu_edit;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPrinterListViewDelete;
+			txt = text_directprint_printerlist_menu_delete;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_toolbar
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE AVKON_TOOLBAR r_directprint_printerlist_toolbar
+	{
+	flags = KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPrinterListViewSearch;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_printerlist_menu_search;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPrinterListViewNew;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_printerlist_menu_new;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPrinterListViewEdit;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_printerlist_menu_edit;
+						}
+					};
+				};
+			}
+		};
+	}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Printer search result View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_searchresult_view
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_VIEW r_directprint_searchresult_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_CANCEL;
+	menubar = r_directprint_searchresult_options_menu;
+	toolbar = r_directprint_searchresult_toolbar;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersearch_title
+//
+// ---------------------------------------------------------------------------- 
+//
+// 
+RESOURCE TITLE_PANE r_directprint_printersearch_title
+	{
+	txt = text_directprint_printersearch_title;
+	}
+
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_BAR r_directprint_searchresult_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_searchresult_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE MENU_PANE r_directprint_searchresult_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdSearchResultViewSearch;
+			txt = text_directprint_searchresult_menu_search;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printerlist_toolbar
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE AVKON_TOOLBAR r_directprint_searchresult_toolbar
+	{
+	flags = KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdSearchResultViewSearch;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_searchresult_menu_search;
+						}
+					};
+				};
+			}
+		};
+	}
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Printer Setting View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_view
+//
+// ---------------------------------------------------------------------------- 
+//
+// 
+RESOURCE AVKON_VIEW r_directprint_printersetting_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_directprint_printersetting_options_menu;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_title
+//
+// ---------------------------------------------------------------------------- 
+//
+// 
+RESOURCE TITLE_PANE r_directprint_printersetting_title
+	{
+	txt = text_directprint_printersetting_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_BAR r_directprint_printersetting_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_printersetting_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_PANE r_directprint_printersetting_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPrinterSettingViewChange;
+			txt = text_directprint_menu_change;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_item_list
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_ITEM_LIST r_directprint_printersetting_item_list
+	{
+	title = text_directprint_printersetting_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_popup_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_printersetting_popup_setting_page
+	{
+	type = EAknCtPopupSettingList;
+	editor_resource_id = r_directprint_printersetting_popup_setting_list;
+	}
+	
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_popup_setting_list
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE POPUP_SETTING_LIST r_directprint_printersetting_popup_setting_list
+	{
+	flags = 0;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_text_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_printersetting_text_setting_page
+	{
+	type = EEikCtEdwin;
+	editor_resource_id = r_directprint_printersetting_text_edwin;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_text_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE EDWIN r_directprint_printersetting_text_edwin
+	{
+	width = 10;
+	maxlength = 50;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_integer_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_printersetting_integer_setting_page
+	{
+	type = EAknCtIntegerEdwin;
+	editor_resource_id = r_directprint_printersetting_integer_edwin;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_integer_edwin
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_INTEGER_EDWIN r_directprint_printersetting_integer_edwin
+	{
+	min = 0;
+	max = 65535;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_ipfield_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_printersetting_ipfield_setting_page
+	{
+	type = EAknCtIpFieldEditor;
+	editor_resource_id = r_directprint_printersetting_ip_editor;
+	}
+	
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_ip_editor
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE IP_FIELD_EDITOR r_directprint_printersetting_ip_editor
+	{
+	min_field_values = IP_FIELD
+		{ 
+		first_field = 0;
+		second_field = 0;
+		third_field = 0;
+		fourth_field = 0;
+		};
+	max_field_values = IP_FIELD
+		{
+		first_field = 255;
+		second_field = 255;
+		third_field = 255;
+		fourth_field = 255;
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_driver_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_printersetting_driver_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_printersetting_driver_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_driver_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_printersetting_driver_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "General";},
+		AVKON_ENUMERATED_TEXT { value=1; text = "Canon";},
+		AVKON_ENUMERATED_TEXT { value=2; text = "HP";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_bearer_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_printersetting_bearer_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_printersetting_bearer_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_bearer_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_printersetting_bearer_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "File output";},
+		AVKON_ENUMERATED_TEXT { value=1; text = "LPR";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_bearer_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_printersetting_accesspoint_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_printersetting_accesspoint_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_accesspoint_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_printersetting_accesspoint_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "WLAN_ap1";},
+		AVKON_ENUMERATED_TEXT { value=1; text = "WLAN_ap2";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_type_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_printersetting_type_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_printersetting_type_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_type_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_printersetting_type_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "MP990";},
+		AVKON_ENUMERATED_TEXT { value=1; text = "MP640";},
+		AVKON_ENUMERATED_TEXT { value=2; text = "MP560";},
+		AVKON_ENUMERATED_TEXT { value=3; text = "MX860";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_printersetting_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_printersetting_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_printersetting_type_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_printersetting_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "dummy";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// Resources for item title.
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE TBUF r_directprint_printersetting_item_printername { buf=text_directprint_printersetting_item_printername; }
+RESOURCE TBUF r_directprint_printersetting_item_driver      { buf=text_directprint_printersetting_item_driver; }
+RESOURCE TBUF r_directprint_printersetting_item_bearer      { buf=text_directprint_printersetting_item_bearer; }
+RESOURCE TBUF r_directprint_printersetting_item_accesspoint { buf=text_directprint_printersetting_item_accesspoint; }
+RESOURCE TBUF r_directprint_printersetting_item_host        { buf=text_directprint_printersetting_item_host; }
+RESOURCE TBUF r_directprint_printersetting_item_port        { buf=text_directprint_printersetting_item_port; }
+RESOURCE TBUF r_directprint_printersetting_item_username    { buf=text_directprint_printersetting_item_username; }
+RESOURCE TBUF r_directprint_printersetting_item_que         { buf=text_directprint_printersetting_item_que; }
+RESOURCE TBUF r_directprint_printersetting_item_type        { buf=text_directprint_printersetting_item_type; }
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Property Setting View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_view
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_VIEW r_directprint_propertysetting_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_directprint_propertysetting_options_menu;
+	toolbar = r_directprint_propertysetting_toolbar;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_title
+//
+// ---------------------------------------------------------------------------- 
+//
+// 
+RESOURCE TITLE_PANE r_directprint_propertysetting_title
+	{
+	txt = text_directprint_propertysetting_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_BAR r_directprint_propertysetting_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_propertysetting_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_PANE r_directprint_propertysetting_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPropertySettingViewChange;
+			txt = text_directprint_menu_change;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPropertySettingViewPrint;
+			txt = text_directprint_menu_print;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPropertySettingViewPreview;
+			txt = text_directprint_menu_preview;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_toolbar
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_TOOLBAR r_directprint_propertysetting_toolbar
+	{
+	flags = KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPropertySettingViewPrint;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_toolbar_print;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPropertySettingViewPreview;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_toolbar_preview;
+						}
+					};
+				};
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_navi_decorator
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE NAVI_DECORATOR r_directprint_propertysetting_navi_decorator
+	{
+	type = ENaviDecoratorControlTabGroup;
+	control = TAB_GROUP
+		{
+		tab_width = EAknTabWidthWithTwoLongTabs;
+		active = 0;
+		tabs =
+			{
+			TAB
+				{
+				id = EDirectPrintPaperSettingTab;
+				txt = text_directprint_propertysetting_tab_paper;
+				},
+			TAB
+				{
+				id = EDirectPrintPageSettingTab;
+				txt = text_directprint_propertysetting_tab_page;
+				},
+			TAB
+				{
+				id = EDirectPrintMarginSettingTab;
+				txt = text_directprint_propertysetting_tab_margin;
+				},
+			TAB
+				{
+				id = EDirectPrintHeaderSettingTab;
+				txt = text_directprint_propertysetting_tab_header;
+				},
+			TAB
+				{
+				id = EDirectPrintFooterSettingTab;
+				txt = text_directprint_propertysetting_tab_footer;
+				}
+			};
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_setting_item_list
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_ITEM_LIST r_directprint_propertysetting_setting_item_list
+	{
+	title = text_directprint_propertysetting_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_popup_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_propertysetting_popup_setting_page
+	{
+	type = EAknCtPopupSettingList;
+	editor_resource_id = r_directprint_propertysetting_popup_setting_list;
+	}
+	
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_popup_setting_list
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE POPUP_SETTING_LIST r_directprint_propertysetting_popup_setting_list
+	{
+	flags = 0;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_text_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_propertysetting_text_setting_page
+	{
+	type = EEikCtEdwin;
+	editor_resource_id = r_directprint_propertysetting_text_edwin;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_text_edwin
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE EDWIN r_directprint_propertysetting_text_edwin
+	{
+	width = 10;
+	maxlength = 50;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_integer_setting_page
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_SETTING_PAGE r_directprint_propertysetting_integer_setting_page
+	{
+	type = EAknCtIntegerEdwin;
+	editor_resource_id = r_directprint_propertysetting_integer_edwin;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_integer_edwin
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_INTEGER_EDWIN r_directprint_propertysetting_integer_edwin
+	{
+	min = 0;
+	max = 150;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_size_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_size_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_size_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_size_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_size_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = "A4";},
+		AVKON_ENUMERATED_TEXT { value=1; text = "A5";},
+		AVKON_ENUMERATED_TEXT { value=2; text = "B5";},
+		AVKON_ENUMERATED_TEXT { value=3; text = "Letter";},
+		AVKON_ENUMERATED_TEXT { value=4; text = "Regal";},
+		AVKON_ENUMERATED_TEXT { value=5; text = "Post card";},
+		AVKON_ENUMERATED_TEXT { value=6; text = "Envelope";}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_orientation_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_orientation_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_orientation_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_orientation_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_orientation_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT
+			{
+			value=0; 
+			text = text_directprint_orientation_portrate;
+			},
+		AVKON_ENUMERATED_TEXT
+			{
+			value=1;
+			text = text_directprint_orientation_landscape;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_mediatype_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_mediatype_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_mediatype_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_orientation_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_mediatype_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT
+			{
+			value = 0; 
+			text = "Plain";
+			},
+		AVKON_ENUMERATED_TEXT
+			{
+			value=1;
+			text = "Photo";
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_boaderless_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_boaderless_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_boaderless_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_orientation_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_boaderless_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT
+			{
+			value = 0; 
+			text = "OFF";
+			},
+		AVKON_ENUMERATED_TEXT
+			{
+			value=1;
+			text = "ON";
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_page_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_range_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_range_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_range_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_range_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = text_directprint_range_all;},
+		AVKON_ENUMERATED_TEXT { value=1; text = text_directprint_range_odd;},
+		AVKON_ENUMERATED_TEXT { value=2; text = text_directprint_range_even;}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_print_popup_setting_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_POPUP_SETTING_TEXTS r_directprint_propertysetting_print_popup_setting_texts
+	{
+	setting_texts_resource = r_directprint_propertysetting_print_texts;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_propertysetting_print_texts
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE ARRAY r_directprint_propertysetting_print_texts
+	{
+	items =
+		{
+		AVKON_ENUMERATED_TEXT { value=0; text = text_directprint_no;},
+		AVKON_ENUMERATED_TEXT { value=1; text = text_directprint_yes;}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// Resources for item title.
+//
+// ---------------------------------------------------------------------------- 
+//
+RESOURCE TBUF r_directprint_propertysetting_item_papersize       { buf=text_directprint_propertysetting_item_papersize; }
+RESOURCE TBUF r_directprint_propertysetting_item_orientation     { buf=text_directprint_propertysetting_item_orientation; }
+RESOURCE TBUF r_directprint_propertysetting_item_mediatype       { buf=text_directprint_propertysetting_item_mediatype; }
+RESOURCE TBUF r_directprint_propertysetting_item_printpage       { buf=text_directprint_propertysetting_item_printpage; }
+RESOURCE TBUF r_directprint_propertysetting_item_printrange      { buf=text_directprint_propertysetting_item_printrange; }
+RESOURCE TBUF r_directprint_propertysetting_item_copy            { buf=text_directprint_propertysetting_item_copy; }
+RESOURCE TBUF r_directprint_propertysetting_item_leftmargin      { buf=text_directprint_propertysetting_item_leftmargin; }
+RESOURCE TBUF r_directprint_propertysetting_item_rightmargin     { buf=text_directprint_propertysetting_item_rightmargin; }
+RESOURCE TBUF r_directprint_propertysetting_item_topmargin       { buf=text_directprint_propertysetting_item_topmargin; }
+RESOURCE TBUF r_directprint_propertysetting_item_bottommargin    { buf=text_directprint_propertysetting_item_bottommargin; }
+RESOURCE TBUF r_directprint_propertysetting_item_headertext      { buf=text_directprint_propertysetting_item_headertext; }
+RESOURCE TBUF r_directprint_propertysetting_item_headerdistance  { buf=text_directprint_propertysetting_item_headerdistance; }
+RESOURCE TBUF r_directprint_propertysetting_item_headerfirstpage { buf=text_directprint_propertysetting_item_headerfirstpage; }
+RESOURCE TBUF r_directprint_propertysetting_item_footertext      { buf=text_directprint_propertysetting_item_footertext; }
+RESOURCE TBUF r_directprint_propertysetting_item_footerdistance  { buf=text_directprint_propertysetting_item_footerdistance; }
+RESOURCE TBUF r_directprint_propertysetting_item_footerfirstpage { buf=text_directprint_propertysetting_item_footerfirstpage; }
+
+RESOURCE TBUF r_directprint_propertysetting_item_boaderless      { buf=text_directprint_propertysetting_item_boaderless; }
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Preview View
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_preview_view
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_VIEW r_directprint_preview_view
+	{
+	cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+	menubar = r_directprint_preview_options_menu;
+	toolbar = r_directprint_preview_toolbar;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_preview_title
+//
+// ---------------------------------------------------------------------------- 
+//
+// 
+RESOURCE TITLE_PANE r_directprint_preview_title
+	{
+	txt = text_directprint_previewview_title;
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_preview_options_menu
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_BAR r_directprint_preview_options_menu
+	{
+	titles =
+		{
+		MENU_TITLE
+			{
+			menu_pane = r_directprint_preview_options_menu_pane;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_preview_options_menu_pane
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE MENU_PANE r_directprint_preview_options_menu_pane
+	{
+	items =
+		{
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPreviewViewPrint;
+			txt = text_directprint_menu_print;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPreviewViewExpand;
+			txt = text_directprint_previewview_expand;
+			},
+		MENU_ITEM
+			{
+			command = EDirectPrintCmdIdPreviewViewReduce;
+			txt = text_directprint_previewview_reduce;
+			}
+		};
+	}
+
+// ---------------------------------------------------------------------------- 
+//
+// r_directprint_preview_toolbar
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+RESOURCE AVKON_TOOLBAR r_directprint_preview_toolbar
+	{
+	flags = KAknToolbarFixed;
+	items =
+		{
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPreviewViewPrint;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_toolbar_print;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPreviewViewExpand;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_previewview_expand;
+						}
+					};
+				};
+			},
+		TBAR_CTRL
+			{
+			type = EAknCtButton;
+			id = EDirectPrintCmdIdPreviewViewReduce;
+			control = AVKON_BUTTON
+				{
+				flags = 0;
+				states = 
+					{
+					AVKON_BUTTON_STATE
+						{
+						txt = text_directprint_previewview_reduce;
+						}
+					};
+				};
+			}
+		};
+	}
+
+
+
+
+
+// ---------------------------------------------------------------------------- 
+//
+// For directprint engine
+//
+// ---------------------------------------------------------------------------- 
+//
+//
+
+// d:List box format string - do not localize this!
+#define qtn_lbox_format "\t%0U\t\t%1U"
+
+// Resource strings
+RESOURCE TBUF R_QTN_LBOX_FORMAT { buf = qtn_lbox_format; }
+RESOURCE TBUF R_EMPTY { buf = ""; }
+
+// Paper sizes
+RESOURCE TBUF R_QTN_STR_PAPER_SIZE { buf = qtn_print_settings_paper_size; }
+RESOURCE TBUF R_QTN_STR_SIZE_AUTO { buf = qtn_print_paper_size_auto; }
+RESOURCE TBUF R_QTN_STR_SIZE_LETTER { buf = qtn_print_paper_size_letter; }
+RESOURCE TBUF R_QTN_STR_SIZE_A4 { buf = qtn_print_paper_size_a4; }
+RESOURCE TBUF R_QTN_STR_SIZE_A6 { buf = qtn_print_paper_size_a6; }
+RESOURCE TBUF R_QTN_STR_SIZE_4X6 { buf = qtn_print_paper_size_4x6; }
+RESOURCE TBUF R_QTN_STR_SIZE_5X7 { buf = qtn_print_paper_size_5x7; }
+RESOURCE TBUF R_QTN_STR_SIZE_STICKER { buf = qtn_print_paper_size_sticker; }
+
+// Print quality
+RESOURCE TBUF R_QTN_STR_QUALITY { buf = qtn_print_settings_print_quality; }
+RESOURCE TBUF R_QTN_STR_QUAL_AUTO { buf = qtn_print_quality_auto; }
+RESOURCE TBUF R_QTN_STR_QUAL_NORMAL { buf = qtn_print_quality_normal; }
+RESOURCE TBUF R_QTN_STR_QUAL_DRAFT { buf = qtn_print_quality_draft; }
+RESOURCE TBUF R_QTN_STR_QUAL_FINE { buf = qtn_print_quality_fine; }
+
+// Template
+RESOURCE TBUF R_QTN_STR_TEMPLATE { buf = qtn_print_settings_template; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_BLESS { buf = qtn_print_settings_bless; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_ONE { buf = "1"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_TWO { buf = "2"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_FOUR { buf = "4"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_SIX { buf = "6"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_NINE { buf = "9"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_TWELVE { buf = "12"; }
+RESOURCE TBUF R_QTN_STR_TEMPLATE_SIXTEEN { buf = "16"; }
+
+// 
+RESOURCE TBUF r_qtn_print_no_printers { buf = qtn_print_no_printers; }	
+RESOURCE TBUF r_qtn_print_settings_default_usb { buf = qtn_print_settings_default_usb; }	
+RESOURCE TBUF r_qtn_print_settings_default_bt { buf = qtn_print_settings_default_bt; }	
+RESOURCE TBUF r_qtn_print_settings_default_wlan { buf = qtn_print_settings_default_wlan; }	
+RESOURCE TBUF r_qtn_print_settings_default_lpr { buf = qtn_print_settings_default_lpr; }	
+RESOURCE TBUF r_qtn_print_memory_card { buf = qtn_print_memory_card; }
+
+// DirectPrint
+RESOURCE TBUF R_QTN_STR_ACCESS_POINT { buf = qtn_print_settings_accesspoint; }
+RESOURCE TBUF R_QTN_STR_HOST { buf = qtn_print_settings_host; }
+RESOURCE TBUF R_QTN_STR_PORT { buf = qtn_print_settings_port; }
+RESOURCE TBUF R_QTN_STR_USER { buf = qtn_print_settings_user; }
+RESOURCE TBUF R_QTN_STR_QUE { buf = qtn_print_settings_que; }
+
+// Extent
+RESOURCE TBUF R_QTN_STR_EXTENT { buf = qtn_print_settings_extent; }
+RESOURCE TBUF R_QTN_STR_EXTENT2 { buf = qtn_print_settings_extent2; }
+RESOURCE TBUF R_QTN_STR_EXTENT_SELECT1 { buf = qtn_print_settings_extent_select1; }
+RESOURCE TBUF R_QTN_STR_EXTENT_SELECT2 { buf = qtn_print_settings_extent_select2; }
+RESOURCE TBUF R_QTN_STR_EXTENT_SELECT3 { buf = qtn_print_settings_extent_select3; }
+RESOURCE TBUF R_QTN_STR_EXTENT_SELECT4 { buf = qtn_print_settings_extent_select4; }
+
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/data/directprintapp_reg.rss	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "DirectPrintApp.hrh"
+#include "DirectPrintApp.loc"
+#include <appinfo.rh>
+#include <DirectPrintApp.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 _UID3
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="DirectPrintApp";
+	localisable_resource_file =  text_directprint_loc_resource_file;
+	localisable_resource_id = R_DIRECTPRINT_LOCALISABLE_APP_INFO;
+
+	hidden = KAppIsHidden;
+	embeddability=KAppNotEmbeddable;
+	newfile=KAppDoesNotSupportNewFile;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintband.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Test print band ECOM plugin
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTBAND_H
+#define DIRECTPRINTBAND_H
+
+// System includes
+#include <e32std.h>
+#include <e32base.h>
+#include <gdi.h>
+#include <ecom/ecom.h>
+
+// Forward declarations
+class CDirectPrintBand;
+class CPrintSetup;
+class RXmlEngDocument;
+class MPageRegionPrinter;
+
+// CLASS DECLARATION
+
+/**
+ *  CDirectPrintBand
+ * 
+ */
+class CDirectPrintBand : public CBase
+	{
+public:
+	inline static CDirectPrintBand* NewL(TUid aImplementationUid);
+	virtual ~CDirectPrintBand();
+
+	/**
+	 * Initialize the print band 
+	 *
+	 * @param aPrintSetup Pointer to the CPrintSetup
+	 * @param aParam Xml parameter object
+	 * @param aFileName Sets the file name if define the file name to xml,
+	 *					Not set if not define the file name to xml
+	 */
+	virtual void InitPrintBandL(CPrintSetup* aPrintSetup,
+								RXmlEngDocument* aParam,
+								const TDesC& aFileName) = 0;
+
+	/**
+	 * Return the print band object
+	 *
+	 * @return MPageRegionPrinter* Pointer to the print band object
+	 */
+	virtual MPageRegionPrinter* RegionPrinter() = 0;
+
+	/**
+	 * Return the total page number
+	 *
+	 * @return TInt the total page number
+	 */
+	virtual TInt PageNum() = 0;
+
+public:
+	TUid iDtorIdKey;
+	};
+
+inline CDirectPrintBand* CDirectPrintBand::NewL(TUid aImplementationUid)
+	{ // static
+	TAny* any = REComSession::CreateImplementationL(aImplementationUid,
+									 _FOFF(CDirectPrintBand, iDtorIdKey));
+	CDirectPrintBand* plugin = reinterpret_cast<CDirectPrintBand*>(any);
+	return plugin;
+	}
+
+inline CDirectPrintBand::~CDirectPrintBand()
+	{
+	REComSession::DestroyedImplementation(iDtorIdKey);
+	}
+
+#endif // DIRECTPRINTBAND_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintbanduid.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Test print band ECOM plugin
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTBANDUID_H
+#define DIRECTPRINTBANDUID_H
+
+// The UIDs are defined for Direct Print band plugin
+
+// Interface Uid for print band plugin
+#define KDirectPrintBandInterfaceUid 0x2002BB30
+
+#endif // DIRECTPRINTBANDUID_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintbasecapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTBASECAPABILITY_H
+#define DIRECTPRINTBASECAPABILITY_H
+
+// System includes
+#include <e32std.h>
+#include <e32base.h>
+#include <aknsettingitemlist.h>
+
+//  TYPE DEFINITIONS
+typedef TBuf<64> TCapabilityTitle;
+
+/**
+ *  
+ *  Capability base class, pure virtual, needs to be derived
+ *
+ */
+class CDirectPrintBaseCapability : public CBase
+	{
+	public:     // New methods
+
+		virtual ~CDirectPrintBaseCapability() {};
+
+		/**
+		 *  Creates text for the setting item list box
+		 *  
+		 *  @return Correctly formatted list box text
+		 */
+		virtual HBufC* ListBoxTextL() = 0;
+
+		/**
+		 *  Clones and returns copy of itself
+		 *
+		 *  @return Cloned copy of the instance itself
+		 */
+		virtual CDirectPrintBaseCapability* CloneL() = 0;
+
+		/**
+		 *  Creates CAknSettingItem for the list box
+		 *  
+		 *  @return CAknSettingItem object
+		 */
+		virtual CAknSettingItem* SettingItemLC(TInt aIndex) = 0;
+
+	public:     // Data
+
+		// The index on the list from the top (0 = topmost)
+		TBool iIndexOnList;
+
+		// Title of this capability
+		TCapabilityTitle iTitle;
+
+		// UID of the capability
+		TInt iUid;
+
+		// Value
+		TInt iValue;
+	};
+
+#endif  // DIRECTPRINTBASECAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintengine.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTENGINE_H__
+#define __DIRECTPRINTENGINE_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <prninf.h>			// MPrintProcessObserver
+#include <prnsetup.h>		// CPrintSetup
+#include <fldbltin.h>		// MFieldNumPagesInfo
+#include <gdi.h>			// CPrinterModelList
+#include <AknProgressDialog.h>	// CAknProgressDialog
+#include <EIKPROGI.H>
+#include <xmlengdocument.h>				// RXmlEngDocument
+#include "DirectPrintEngineObserver.h"
+#include "directprintband.h"
+
+// CLASS DECLARATION
+class CDirectPrintModel;
+
+class CDirectPrintEngine : public CBase,
+						   public MPrintProcessObserver,
+						   public MFieldNumPagesInfo,
+						   public MProgressDialogCallback
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * Two-phased constructor.
+	 */
+	static CDirectPrintEngine* NewL(CDirectPrintModel& aModel);
+
+	/**
+	 * Two-phased constructor.
+	 */
+	static CDirectPrintEngine* NewLC(CDirectPrintModel& aModel);
+
+	/**
+	 * Destructor.
+	 */
+	virtual ~CDirectPrintEngine();
+
+	// from MPrintProcessObserver
+	virtual void NotifyPrintStarted(TPrintParameters aPrintParams);
+	virtual void NotifyBandPrinted(TInt aPercent, TInt aCurrentPageNum, TInt aCurrentCopyNum);
+	virtual void NotifyPrintEnded(TInt aErrNum);
+
+	// from MFieldNumPagesInfo
+	virtual TInt UpdateFieldNumPages()const;
+
+    // from MProgressDialogCallback
+    /**
+    * DialogDismissedL
+    * Called when/if the dialog has been dismissed.
+    * @param aButtonId
+    */
+    void DialogDismissedL( TInt aButtonId );
+
+	// New functions
+	void SetObserver(MDirectPrintEngineObserver* aObserver);
+
+	TInt ModelCount();
+	void ModelName(TInt aIndex, TDes& aDes);
+	TUid ModelUid(TInt aIndex);
+
+	void SetUseModel(TInt aIndex);
+
+	void PrintL();
+
+	void StartPrintPreviewL();
+	void EndPrintPreview();
+
+	inline CPrintSetup* PrintSetup();
+	inline MPageRegionPrinter* PageRegionPrinter();
+	inline TInt PageCounter();
+	inline TInt MaxPageNum();
+
+	void SetParamL(RXmlEngDocument* aParam);
+
+protected:
+	/**
+	 * Constructor for performing 1st stage construction
+	 */
+	CDirectPrintEngine(CDirectPrintModel& aModel);
+
+	/**
+	 * EPOC default constructor for performing 2nd stage construction
+	 */
+	void ConstructL();
+
+private:
+	// New functions
+	void DoPrintL(CPrinterPort* aPort);
+
+	void StartPrintProgressNoteL();
+	void EndPrintProgressNoteL();
+	void UpdatePrintProgressNoteL(TInt aPage);
+	void SearchPluginFromFilenameL(const TDesC& aFileName);
+	void LoadPluginFromUidL(const TUid aUid);
+
+	static void CleanupBand( TAny* aData );
+
+private:
+	// Observer
+	MDirectPrintEngineObserver* iObserver;
+
+	// Model object
+	CDirectPrintModel& iModel;
+
+	// File server session
+	RFs iFs;
+	// Member Variable for CPrintSetup
+	CPrintSetup* iPrintSetup;
+
+	// Member Variable for print model name
+	CPrinterModelList* iModelList;
+
+	// Member Variable for page counter
+	TInt iPageCounter;
+
+	// Member Variable for total page
+	TInt iMaxPageNum;
+
+	// Member Variable for total page
+	TInt iModelIndex;
+
+	CDirectPrintBand*   iPrintBand;
+	//MPageRegionPrinter* iRegionPrinter;
+
+    /**
+    * iProgressDialog
+    * Owned
+    */
+	CAknProgressDialog* iProgressDialog;
+	/**
+	* iProgressInfo
+    * Not owned by CAknExNoteContainer object.
+	*/
+	CEikProgressInfo*   iProgressInfo;
+
+	HBufC* iProgressMessage;
+
+	//TBuf<255> iParam;
+	RXmlEngDocument*	iParam;
+
+	// identifer returned by ECom 
+	TUid				iDtorIdKey;
+
+	// last error
+	TInt				iLastError;
+	};
+
+inline CPrintSetup* CDirectPrintEngine::PrintSetup()
+	{
+	return iPrintSetup;
+	}
+
+inline MPageRegionPrinter* CDirectPrintEngine::PageRegionPrinter()
+	{
+	if (iPrintBand)
+		{
+		return iPrintBand->RegionPrinter();
+		}
+	return NULL;
+	}
+
+inline TInt CDirectPrintEngine::PageCounter()
+	{
+	return iPageCounter;
+	}
+
+inline TInt CDirectPrintEngine::MaxPageNum()
+	{
+	return iMaxPageNum;
+	}
+
+
+#endif // __DIRECTPRINTENGINE_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintengineobserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTENGINEOBSERVER_H__
+#define __DIRECTPRINTENGINEOBSERVER_H__
+
+// INCLUDES
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+class MDirectPrintEngineObserver
+	{
+public:
+	enum TDirectPrintEngineEvents
+		{
+		EDirectPrintEngineEventStartCreatePrintData,
+		EDirectPrintEngineEventFinishCreatePrintData,
+		EDirectPrintEngineEventCancelCreatePrintData,
+		EDirectPrintEngineEventErrorCreatePrintData,
+
+		EDirectPrintEngineEventErrorConnectBearer,
+		EDirectPrintEngineEventConnectedBearer,
+		// add any events, if needed
+
+		// end of event
+		EDirectPrintEngineEventEnd
+		};
+
+public:
+	virtual void HandlePrintEventL(TDirectPrintEngineEvents aEvent, TInt aError, const TDesC& aParam) = 0;
+	};
+
+#endif // __DIRECTPRINTENGINEOBSERVER_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintfloatcapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTFLOATCAPABILITY_H
+#define DIRECTPRINTFLOATCAPABILITY_H
+
+// User includes
+#include "directprintbasecapability.h"
+
+/**
+ *
+ *  Capability type for float type of settings
+ *
+ */
+class CDirectPrintFloatCapability : public CDirectPrintBaseCapability
+    {
+    public:     //  Constructors and destructors
+
+        /**
+         *  Destructor
+         */
+        virtual ~CDirectPrintFloatCapability();
+
+    public:     //  Methods derived from CBaseCapability
+
+        virtual HBufC* ListBoxTextL();
+        virtual CDirectPrintBaseCapability* CloneL();
+        virtual CAknSettingItem* SettingItemLC(TInt aIndex);
+
+    public:     //  New methods
+
+        /**
+         *  Sets the values for denominator, numerator and
+         *  maximum numerator. Initializes iRealValue at the same time
+         *
+         *  @param aDenom       Denominator
+         *  @param aNumerator   Current numerator
+         *  @param aMaxNumerator Maximum numerator
+         *  @return Error code
+         */
+        TInt SetValues( TInt aDenom, TInt aNumerator, TInt aMaxNumerator );
+
+        /**
+         *  Returns numerator
+         *  @return numerator
+         */
+        TInt Numerator() const;
+
+        /**
+         *  Returns denominator
+         *  @return denominator
+         */
+        TInt Denominator() const;
+
+    private:     // Data
+
+        // Denominator / Numerator pair 
+        TInt iDenominator;
+        TInt iMaxNumerator;
+
+        TReal iRealValue;
+    };
+
+#endif  //  DIRECTPRINTFLOATCAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintlistcapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTLISTCAPABILITY_H
+#define DIRECTPRINTLISTCAPABILITY_H
+
+// User includes
+#include "directprintbasecapability.h"
+
+/**
+ *
+ *  Capability type for list type of settings
+ *
+ */
+class CDirectPrintListCapability : public CDirectPrintBaseCapability
+	{
+	public:     //  Constructors and destructors
+
+		CDirectPrintListCapability ();
+
+		/**
+		 *  Destructor
+		 */
+		virtual ~CDirectPrintListCapability();
+
+	public:     //  Methods derived from CBaseCapability
+
+		virtual HBufC* ListBoxTextL();
+		virtual CDirectPrintBaseCapability* CloneL();
+		virtual CAknSettingItem* SettingItemLC(TInt aIndex);
+
+	public:     // Data
+
+		// Enumeration IDs and the texts associated to the ids
+		RArray<TInt> iEnumIDs;
+		RPointerArray<HBufC> iTexts;
+
+		TInt iEnumIndex;
+	};
+
+#endif  //  DIRECTPRINTLISTCAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintprintsettings.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTPRINTSETTINGS_H
+#define DIRECTPRINTPRINTSETTINGS_H
+
+// System includes
+#include <e32std.h>
+#include <e32base.h>
+
+// Forward declarations
+class CDirectPrintBaseCapability;
+
+/**
+ *
+ * Interface to use the device discovery functionality of Image Print Engine
+ *
+ */
+class CDirectPrintPrintSettings : public CBase
+    {
+    public:     // Constructors and destructors
+
+        /**
+         *  Constructor
+         */
+        CDirectPrintPrintSettings();
+
+        /**
+         *  Destructor
+         */
+        virtual ~CDirectPrintPrintSettings();
+
+    public:     // New methods
+
+        CDirectPrintPrintSettings* CloneL();
+
+	public:		// Data
+
+        // Capability list
+        RPointerArray<CDirectPrintBaseCapability> iCapabilities;
+    };
+
+#endif //  DIRECTPRINTPRINTSETTINGS_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintsettingsconverter.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTSETTINGSCONVERTER_H
+#define DIRECTPRINTSETTINGSCONVERTER_H
+
+#include <e32std.h>
+
+class CDirectPrintTIntCapability;
+class CDirectPrintListCapability;
+class CDirectPrintFloatCapability;
+class CDirectPrintTextCapability;
+class TDirectPrintCapability;
+
+/**
+ *
+ *  Utility class for converting capabilities to correct format
+ *
+ */
+class DirectPrintSettingsConverter
+    {
+    public:
+
+        /**
+         *  Converts TDirectPrintCapability to CDirectPrintTIntCapability
+         *
+         *  @param aCapability      Capability coming from the engine
+         *  @param aIndexOnList     Capability's index on the list box
+         *  @param aCapabUid        Capability's UID
+         *  @return Initialized CDirectPrintTIntCapability instance
+         */
+        static CDirectPrintTIntCapability* AddTIntCapabilityLC(
+            TDirectPrintCapability& aCapability, TInt aIndexOnList, TInt aCapabUid );
+
+        /**
+         *  Converts TDirectPrintCapability to CDirectPrintListCapability
+         *
+         *  @param aCapability      Capability coming from the engine
+         *  @param aIndexOnList     Capability's index on the list box
+         *  @param aCapabUid        Capability's UID
+         *  @return Initialized CDirectPrintListCapability instance
+         */
+        static CDirectPrintListCapability* AddListCapabilityLC(
+            TDirectPrintCapability& aCapability, TInt aIndexOnList, TInt aCapabUid );
+
+        /**
+         *  Converts TDirectPrintCapability to CDirectPrintFloatCapability
+         *
+         *  @param aCapability      Capability coming from the engine
+         *  @param aIndexOnList     Capability's index on the list box
+         *  @param aCapabUid        Capability's UID
+         *  @return Initialized CDirectPrintFloatCapability instance
+         */
+        static CDirectPrintFloatCapability* AddFloatCapabilityLC(
+            TDirectPrintCapability& aCapability, TInt aIndexOnList, TInt aCapabUid );
+
+        /**
+         *  Converts TDirectPrintCapability to CDirectPrintTextCapability
+         *
+         *  @param aCapability      Capability coming from the engine
+         *  @param aIndexOnList     Capability's index on the list box
+         *  @param aCapabUid        Capability's UID
+         *  @return Initialized CDirectPrintTextCapability instance
+         */
+        static CDirectPrintTextCapability* AddTextCapabilityLC(
+            TDirectPrintCapability& aCapability, TInt aIndexOnList, TInt aCapabUid );
+
+    private:
+
+        /**
+         *  Creates text string from the enumeration ID
+         *
+         *  @param aId      Enumeration Id
+         *  @return buffer containing the string
+         */
+        static HBufC* TextStringLC( TInt aId );
+    };
+
+#endif  //  DIRECTPRINTSETTINGSCONVERTER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintstringids.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef DIRECTPRINTSTRINGIDS_H
+#define DIRECTPRINTSTRINGIDS_H
+
+#include <DirectPrintApp.rsg>
+
+#include "directprintcapabilitycodes.h"
+#include "printmessagecodes.h"
+#include "directprintvariant.h"
+
+const TInt KEmptyString( 0 );
+
+// This table combines the capability IDs with strings so that they
+// can be fetched from the resources
+
+const TInt KConverterTableCount( 18 );
+const TInt KConverterTableIndexCount( 2 );
+const TInt KIDConverterTable[KConverterTableCount][KConverterTableIndexCount] =
+    {
+    { EDirectPrintCapabLayout, R_QTN_STR_TEMPLATE } ,
+    { EDirectPrintCapabQuality, R_QTN_STR_QUALITY },
+    { EDirectPrintCapabQualityDefault, R_QTN_STR_QUAL_AUTO },
+    { EDirectPrintCapabQualityNormal, R_QTN_STR_QUAL_NORMAL },
+    { EDirectPrintCapabQualityDraft, R_QTN_STR_QUAL_DRAFT },
+    { EDirectPrintCapabQualityFine, R_QTN_STR_QUAL_FINE },
+    { EDirectPrintCapabAP, R_QTN_STR_ACCESS_POINT },
+    { EDirectPrintCapabHost, R_QTN_STR_HOST },
+    { EDirectPrintCapabPort, R_QTN_STR_PORT },
+    { EDirectPrintCapabUser, R_QTN_STR_USER },
+    { EDirectPrintCapabQue, R_QTN_STR_QUE },
+    { EDirectPrintCapabExtent, R_QTN_STR_EXTENT },
+    { EDirectPrintCapabExtent2, R_QTN_STR_EXTENT2 },
+    { EDirectPrintCapabExtentSelect1, R_QTN_STR_EXTENT_SELECT1 },
+    { EDirectPrintCapabExtentSelect2, R_QTN_STR_EXTENT_SELECT2 },
+    { EDirectPrintCapabExtentSelect3, R_QTN_STR_EXTENT_SELECT3 },
+    { EDirectPrintCapabExtentSelect4, R_QTN_STR_EXTENT_SELECT4 },
+    { KEmptyString, R_EMPTY  }
+    };
+#endif  //  DIRECTPRINTSTRINGIDS_H
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprinttextcapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTTEXTCAPABILITY_H
+#define DIRECTPRINTTEXTCAPABILITY_H
+
+// User includes
+#include "directprintbasecapability.h"
+
+/**
+ *
+ *  Capability type for TInt type of settings
+ *
+ */
+class CDirectPrintTextCapability : public CDirectPrintBaseCapability
+	{
+public:
+	/** Destructor */
+	virtual ~CDirectPrintTextCapability();
+
+public: // Methods derived from CBaseCapability
+
+	virtual HBufC* ListBoxTextL();
+	virtual CDirectPrintBaseCapability* CloneL();
+	virtual CAknSettingItem* SettingItemLC(TInt aIndex);
+
+public: // Data
+	TBuf<50> iText;
+	};
+
+#endif  //  DIRECTPRINTTEXTCAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprinttintcapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTTINTCAPABILITY_H
+#define DIRECTPRINTTINTCAPABILITY_H
+
+// User includes
+#include "directprintbasecapability.h"
+
+/**
+ *
+ *  Capability type for TInt type of settings
+ *
+ */
+class CDirectPrintTIntCapability : public CDirectPrintBaseCapability
+    {
+    public:     //  Constructors and destructors
+
+        /**
+         *  Destructor
+         */
+        virtual ~CDirectPrintTIntCapability();
+
+    public:     //  Methods derived from CBaseCapability
+
+        virtual HBufC* ListBoxTextL();
+        virtual CDirectPrintBaseCapability* CloneL();
+        virtual CAknSettingItem* SettingItemLC(TInt aIndex);
+
+    public:     // Data
+
+        // Minimum and maximum value
+        TInt iMin;
+        TInt iMax;
+    };
+
+#endif  //  DIRECTPRINTTINTCAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/inc/directprintvariant.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTVARIANT_H
+#define DIRECTPRINTVARIANT_H
+
+// Defines dynamic settings to be in use
+#define DIRECT_PRINT_DYNAMIC_PRINT_SETTINGS
+
+#endif // DIRECTPRINTVARIANT_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprintengine.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,649 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+#include <pdrport.h>				// CFilePrinterPort
+#include <TXTETEXT.H>				// CEditableText
+#include <TXTRICH.H>				// CRichText
+#include <FLDBLTIN.H>				// CPageNumField
+#include <flddef.h>					// KPageNumberFieldUid, KNumPagesFieldUid
+#include <stringloader.h>			// StringLoader
+#include <xmlengdocument.h>			// RXmlEngDocument
+#include <xmlengelement.h>			// TXmlEngElement
+#include <xmlengattr.h>				// TXmlEngAttr
+#include <xmlengnodelist.h>			// RXmlEngNodeList
+#include <bautils.h>				// BaflUtils
+#include <eikenv.h>					// CEikonEnv
+
+#include "clog.h"
+#include <directprintapp.rsg>
+#include "directprintengine.h"
+#include "directprintband.h"
+#include "directprintengineobserver.h"
+#include "directprintmodel.h"
+#include "directprintbanduid.h"
+
+//! Default Page spec in Twips
+#define KDefaultPageSpecInTwips TPageSpec(TPageSpec::EPortrait,TSize(11906,16838))
+
+CDirectPrintEngine::CDirectPrintEngine(CDirectPrintModel& aModel)
+	: iModel(aModel)
+	{
+	}
+
+CDirectPrintEngine::~CDirectPrintEngine()
+	{
+	if (iProgressDialog)
+		{
+		TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
+		delete iProgressDialog;
+		iProgressDialog = NULL;
+		}
+
+	if (iPrintBand)
+		{
+		delete iPrintBand;
+		iPrintBand = NULL;
+		}
+
+	iPrintSetup->FreeModelList();
+	delete iPrintSetup;
+	delete iProgressMessage;
+	iFs.Close();
+	}
+
+CDirectPrintEngine* CDirectPrintEngine::NewL(CDirectPrintModel& aModel)
+	{
+	CDirectPrintEngine* self = CDirectPrintEngine::NewLC(aModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintEngine* CDirectPrintEngine::NewLC(CDirectPrintModel& aModel)
+	{
+	CDirectPrintEngine* self = new(ELeave) CDirectPrintEngine(aModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintEngine::ConstructL()
+	{
+	LOG("CDirectPrintEngine::ConstructL BEGIN");
+	iFs.Connect();
+
+	iPrintSetup = CPrintSetup::NewL();
+	iPrintSetup->AddPrinterDriverDirL(KDefaultPrinterDriverPath);
+	iModelList = iPrintSetup->ModelNameListL(iFs);
+
+#ifdef _DEBUG
+	LOG1("ModelCount=[%d]", ModelCount());
+	for (TInt i=0; i < ModelCount(); i++)
+		{
+		TPrinterModelEntry entry = (*iModelList)[i];
+		RDebug::Print(_L("[%d][%S][%d] "), i, &(entry.iModelName), entry.iRequiresPrinterPort);
+		LOG1("ModelName=[%S]", &(entry.iModelName));
+		}
+#endif
+	// read progress message
+	iProgressMessage = StringLoader::LoadL( R_DIRECTPRINT_MSG_PRINTING_PROGRESS );
+
+	LOG("CDirectPrintEngine::ConstructL END");
+	}
+
+void CDirectPrintEngine::SetObserver(MDirectPrintEngineObserver* aObserver)
+	{
+	iObserver = aObserver;
+	}
+
+/**
+  Override of base class virtual.
+  Notifies that a print or print preview operation is about to begin.
+ */
+void CDirectPrintEngine::NotifyPrintStarted(TPrintParameters /*aPrintParams*/)
+	{
+	iPageCounter = 0;
+	TRAPD(err, StartPrintProgressNoteL());
+	iLastError = err;
+	}
+
+/**
+  Override of base class virtual.\n
+  Notifies that a band is about to be printed used to display print progress information,
+  including the current page number.\n
+  It is called immediately before each band is printed.\n
+ */
+void CDirectPrintEngine::NotifyBandPrinted(TInt /*aPercent*/, TInt aCurrentPageNum, TInt /*aCurrentCopyNum*/)
+	{
+	if (iPageCounter==0)
+		{
+		// start print
+		}
+	if (iPageCounter<aCurrentPageNum)
+		{
+		// next page
+		iPageCounter = aCurrentPageNum;
+		TRAPD(err, UpdatePrintProgressNoteL(iPageCounter));
+		iLastError = err;
+		}
+	}
+
+/**
+  Override of base class virtual.\n
+  Notifies that the print or print preview operation has completed.\n
+  used to display information about how the operation completed,
+  for example any errors that occurred.\n
+ */
+void CDirectPrintEngine::NotifyPrintEnded(TInt aErr)
+	{
+	CActiveScheduler::Stop();
+	TInt err = KErrNone;
+
+	if (aErr == KErrNone)
+		{
+		if (iObserver)
+			{
+			TRAP(err, iObserver->HandlePrintEventL(MDirectPrintEngineObserver::EDirectPrintEngineEventFinishCreatePrintData, 0, KNullDesC));
+			}
+		}
+	else
+		{
+		switch (aErr)
+			{
+		case KErrCancel:
+			if (iObserver)
+				{
+				TRAP(err, iObserver->HandlePrintEventL(MDirectPrintEngineObserver::EDirectPrintEngineEventCancelCreatePrintData, aErr, KNullDesC));
+				}
+			break;
+		default:
+			if (iObserver)
+				{
+				TRAP(err, iObserver->HandlePrintEventL(MDirectPrintEngineObserver::EDirectPrintEngineEventErrorCreatePrintData, aErr, KNullDesC));
+				}
+			break;
+			}
+		}
+
+	TRAP(err, EndPrintProgressNoteL());
+	}
+
+/**
+  Override of base class virtual.\n
+  Returns the number of pages in the current document.\n
+  @return - TInt (Number of pages).\n
+ */
+TInt CDirectPrintEngine::UpdateFieldNumPages()const
+	{
+	return iMaxPageNum;
+	}
+
+
+void CDirectPrintEngine::PrintL()
+	{
+	
+	// set the total page
+	iMaxPageNum = 1;
+	iPrintSetup->Header()->SetNumPagesInfo(*this);
+
+	TInt modelNum = iModelList->UidToNum(ModelUid(iModelIndex));
+	iPrintSetup->CreatePrinterDeviceL(modelNum);
+
+	// create a port if necessary
+	CPrinterPort* port=NULL;
+	if ((*iModelList)[modelNum].iRequiresPrinterPort)
+		{
+#ifdef __WINSCW__
+		port = CFilePrinterPort::NewL(_L("c:\\fpr.pcl"));
+#else
+//		port = CFilePrinterPort::NewL(_L("e:\\fpr.pcl"));
+		port = CFilePrinterPort::NewL(_L("c:\\fpr.pcl"));
+#endif
+		}
+
+	iPrintSetup->PrinterDevice()->SelectPageSpecInTwips(KDefaultPageSpecInTwips);
+	iPrintSetup->iPageMarginsInTwips.iHeaderOffset = 720;
+	iPrintSetup->iPageMarginsInTwips.iFooterOffset = 0;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iLeft = 1440; // 1 inch
+	iPrintSetup->iPageMarginsInTwips.iMargins.iRight = 1440;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iTop = 1440;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iBottom = 1440;
+
+	if (iObserver)
+		{
+		iObserver->HandlePrintEventL(MDirectPrintEngineObserver::EDirectPrintEngineEventStartCreatePrintData, 0, KNullDesC);
+		}
+	
+
+	TRAPD(err, DoPrintL(port));
+	if (err == KErrNone)
+		{
+		CActiveScheduler::Start(); // stopped by killing it - subtle...
+		}
+	else
+		{
+		if (iObserver)
+			{
+			iObserver->HandlePrintEventL(MDirectPrintEngineObserver::EDirectPrintEngineEventErrorCreatePrintData, err, KNullDesC);
+			}
+		}
+
+//	if (iPrintBand)
+//		{
+//		delete iPrintBand;
+//		iPrintBand = NULL;
+//		}
+	}
+
+void CDirectPrintEngine::DoPrintL(CPrinterPort* aPort)
+	{
+	// create a header
+	iPrintSetup->Header()->CreateTextL();
+	TBuf<40> buf(_L("This is the header on page  out of "));
+	buf.Append(CEditableText::EParagraphDelimiter);
+	iPrintSetup->Header()->Text()->InsertL(0,buf);
+	CTextField* pNumberfield=iPrintSetup->Header()->Text()->NewTextFieldL(KPageNumberFieldUid);
+	iPrintSetup->Header()->Text()->InsertFieldL(27,pNumberfield,KPageNumberFieldUid);  
+	CNumPagesField* numPagesField=(CNumPagesField*)iPrintSetup->Header()->Text()->NewTextFieldL(KNumPagesFieldUid);
+	iPrintSetup->Header()->Text()->InsertFieldL(35,numPagesField,KNumPagesFieldUid);  
+	iPrintSetup->Header()->Text()->UpdateFieldL(27);
+	iPrintSetup->Header()->Text()->UpdateFieldL(35);
+	iPrintSetup->Header()->SetFirstPageToPrintTo(1); // no header on first 3 pages
+
+	iPrintSetup->Footer()->CreateTextL();
+	TBuf<40> buf2(_L("This is the footer on page "));
+	buf2.Append(CEditableText::EParagraphDelimiter);
+	iPrintSetup->Footer()->Text()->InsertL(0,buf2);
+	CTextField* pNumberfield2=iPrintSetup->Footer()->Text()->NewTextFieldL(KPageNumberFieldUid);
+	iPrintSetup->Footer()->Text()->InsertFieldL(27,pNumberfield2,KPageNumberFieldUid);	
+	iPrintSetup->Footer()->Text()->UpdateFieldL(27);
+
+	// start print to file
+	iPrintSetup->iNumOfFirstPage = 1;
+	TPrintParameters params;
+	params.iFirstPage = 1; // don't print the first page at all, ie print page no's 3-6
+	params.iLastPage = 1;
+	params.iNumCopies = 1;
+	TPageSpec spec;
+	spec.iPortraitPageSize = KA4PaperSizeInTwips;
+	spec.iOrientation = TPageSpec::EPortrait;
+	iPrintSetup->PrinterDevice()->SelectPageSpecInTwips(spec);
+
+	//===========================
+	// start printing
+	//===========================
+	iPrintSetup->StartPrintL(params, *(PageRegionPrinter()), aPort, this);
+
+	}
+
+
+TInt CDirectPrintEngine::ModelCount()
+	{
+	return iModelList->ModelCount();
+	}
+
+void CDirectPrintEngine::ModelName(TInt aIndex, TDes& aDes)
+	{
+	TPtrC name((*iModelList)[aIndex].iModelName);
+	if (name.Length() <= aDes.MaxLength())
+		{
+		aDes.Copy(name);
+		}
+	}
+
+TUid CDirectPrintEngine::ModelUid(TInt aIndex)
+	{
+	return (*iModelList)[aIndex].iUid;
+	}
+
+void CDirectPrintEngine::SetUseModel(TInt aIndex)
+	{
+	iModelIndex = aIndex;
+	}
+
+void CDirectPrintEngine::StartPrintProgressNoteL()
+	{
+	// Delete possible previous CAknProgressDialog.
+	delete iProgressDialog;
+	iProgressDialog = NULL;
+
+	// Create new CAknProgressDialog.
+	iProgressDialog = new ( ELeave ) CAknProgressDialog( reinterpret_cast
+														 <CEikDialog**> 
+														 ( &iProgressDialog ) );
+	
+	iProgressDialog->SetCallback( this );
+	iProgressDialog->PrepareLC( R_DIRECTPRINT_PRINT_PROGRESS_NOTE );
+	iProgressInfo = iProgressDialog->GetProgressInfoL();
+	iProgressInfo->SetFinalValue( iMaxPageNum );
+
+	TBuf<32> msg;
+	msg.AppendFormat(*iProgressMessage, iPageCounter, iMaxPageNum);
+	iProgressDialog->SetTextL(msg);
+	iProgressDialog->RunLD();
+	}
+
+void CDirectPrintEngine::EndPrintProgressNoteL()
+	{
+	if (iProgressDialog)
+		{
+		iProgressDialog->ProcessFinishedL();
+		delete iProgressDialog;
+		iProgressDialog = NULL;
+		}
+	}
+
+void CDirectPrintEngine::UpdatePrintProgressNoteL(TInt aPage)
+	{
+	if (iProgressInfo)
+		{
+		TBuf<32> msg;
+		msg.AppendFormat(*iProgressMessage, aPage, iMaxPageNum);
+		iProgressDialog->SetTextL(msg);
+		iProgressInfo->SetAndDraw(aPage);
+		}
+	}
+
+void CDirectPrintEngine::DialogDismissedL( TInt /*aButtonId*/ )
+	{
+	if (iPrintSetup)
+		{
+		iPrintSetup->EndPrint();
+		}
+	}
+
+void CDirectPrintEngine::StartPrintPreviewL()
+	{
+	// Clear previous object
+	EndPrintPreview();
+
+	// set the total page
+	iMaxPageNum = 1;
+	iPrintSetup->Header()->SetNumPagesInfo(*this);
+
+	TInt modelNum = iModelList->UidToNum(ModelUid(iModelIndex));
+	iPrintSetup->CreatePrinterDeviceL(modelNum);
+
+	// create a port if necessary
+	//CPrinterPort* port=NULL;
+	//if ((*iModelList)[modelNum].iRequiresPrinterPort)
+	//	{
+	//	port = CFilePrinterPort::NewL(_L("e:\\fpr.pcl"));
+	//	}
+
+	iPrintSetup->PrinterDevice()->SelectPageSpecInTwips(KDefaultPageSpecInTwips);
+	iPrintSetup->iPageMarginsInTwips.iHeaderOffset = 720;
+	iPrintSetup->iPageMarginsInTwips.iFooterOffset = 0;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iLeft = 1440; // 1 inch
+	iPrintSetup->iPageMarginsInTwips.iMargins.iRight = 1440;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iTop = 1440;
+	iPrintSetup->iPageMarginsInTwips.iMargins.iBottom = 1440;
+	}
+
+void CDirectPrintEngine::EndPrintPreview()
+	{
+	}
+
+void CDirectPrintEngine::SetParamL(RXmlEngDocument* aParam)
+	{
+	LOG("CDirectPrintEngine::SetParamL BEGIN");
+
+	iParam = aParam;
+	if ( iPrintBand )
+		{
+		delete iPrintBand;
+		iPrintBand = NULL;
+		}
+
+	_LIT8(KElementRecogMode, "RecognizeMode");
+	_LIT8(KElementRecogModeAttr, "mode");
+	_LIT8(KElementRecogModeValueFile, "PrintRecognizeModeFile");
+	_LIT8(KElementRecogModeValuePlugin, "PrintRecognizeModePlugin");
+	_LIT8(KElementFile, "PrintFile");
+	_LIT8(KElementFileAttr, "file");
+	_LIT8(KElementPluginUid, "PluginUid");
+	_LIT8(KElementPluginUidAttr, "uid");
+
+	TXmlEngElement element = iParam->DocumentElement().FirstChild().AsElement();
+	HBufC* filename = NULL;
+	TUint uidValue = 0;
+
+	enum {
+		EParamModeFile	 = 0x0001,
+		EParamModePlugin = 0x0002,
+		EParamFileExist   = 0x0008,
+		EParamPluginExist = 0x0010
+	};
+	TUint paramFlag = 0;
+
+	while (element.NotNull())
+		{
+		if (element.Name().CompareF(KElementRecogMode()) == 0)
+			{
+			TXmlEngAttr attr = element.AttributeNodeL(KElementRecogModeAttr,KNullDesC8);
+			if(attr.Value().CompareF(KElementRecogModeValueFile) == 0)
+				{
+				paramFlag |= EParamModeFile;
+				LOG("Param:Mode=File");
+				}
+			else if(attr.Value().CompareF(KElementRecogModeValuePlugin) == 0)
+				{
+				paramFlag |= EParamModePlugin;
+				LOG("Param:Mode=Plugin");
+				}
+			else
+				{
+				LOG("[Error] Param:Mode=Not set");
+				break;
+				}
+			}
+		else if (element.Name().CompareF(KElementFile()) == 0)
+			{
+			TXmlEngAttr attr = element.AttributeNodeL(KElementFileAttr,KNullDesC8);
+			filename = HBufC::NewLC(attr.Value().Length());
+			TPtr ptr(filename->Des());
+			ptr.Copy(attr.Value());
+			if (ptr.Length() > 0)
+				{
+				LOG1("Param:FileName UID=[%S]", &ptr);
+				if (BaflUtils::FileExists(CEikonEnv::Static()->FsSession(), ptr))
+					{
+					paramFlag |= EParamFileExist;
+					}
+				}
+			if (!(paramFlag & EParamFileExist))
+				{
+				LOG("[Error] File not exist");
+				}
+			}
+		else if (element.Name().CompareF(KElementPluginUid()) == 0)
+			{
+			TXmlEngAttr attr = element.AttributeNodeL(KElementPluginUidAttr,KNullDesC8);
+			//HBufC8* bufUid = HBufC8::NewLC(attr.Value().Length());
+			//TPtr8 ptr(bufUid->Des());
+			HBufC* bufUid = HBufC::NewLC(attr.Value().Length());
+			TPtr ptr(bufUid->Des());
+			ptr.Copy(attr.Value());
+			//_LIT8(KHeadOfHexString, "0x");
+			_LIT(KHeadOfHexString, "0x");
+			const TInt KUidStingLength = 8;
+			if (ptr.Left(KHeadOfHexString().Length()).CompareF(KHeadOfHexString()) == 0)
+				{
+				ptr.Delete(0, KHeadOfHexString().Length());
+				}
+			if (ptr.Length() == KUidStingLength)
+				{
+				//TBuf<8> bufUid;
+				//bufUid.Copy(ptr);
+				//TLex lex(bufUid);
+				TLex lex(ptr);
+				if (lex.Val(uidValue,EHex) == KErrNone)
+					{
+					LOG1("Param:Plugin UID=[0x%X]", uidValue);
+					paramFlag |= EParamPluginExist;
+					}
+				else
+					{
+					LOG("[Error] Convert from HEX string to int");
+					}
+				}
+			if (!(paramFlag & EParamPluginExist))
+				{
+				LOG("[Error] File not exist");
+		  		}
+			CleanupStack::PopAndDestroy(bufUid); //bufUid
+			}
+
+		if (paramFlag == (EParamFileExist|EParamModeFile)
+		 || paramFlag == (EParamPluginExist|EParamModePlugin))
+			{
+			break;
+			}
+		element = element.NextSibling().AsElement();
+		}
+
+	if (paramFlag == (EParamFileExist|EParamModeFile)
+	 && filename)
+		{
+		TPtrC ptr(filename->Des());
+		SearchPluginFromFilenameL(ptr);
+		}
+	if (paramFlag == (EParamPluginExist|EParamModePlugin)
+	 && uidValue)
+		{
+		TUid uid = TUid::Uid(uidValue);
+		LoadPluginFromUidL(uid);
+		}
+
+	if (filename)
+		{
+		CleanupStack::PopAndDestroy(filename); //filename
+		}
+
+	if ( !iPrintBand )
+		{
+		// error xml parameter
+		User::Leave(KErrArgument);
+		}
+
+	LOG("CDirectPrintEngine::SetParamL END");
+	}
+
+void CDirectPrintEngine::SearchPluginFromFilenameL(const TDesC& aFileName)
+	{
+	LOG("CDirectPrintEngine::SearchPluginFromFilenameL START");
+	RImplInfoPtrArray infoArray;
+	TUid interface = TUid::Uid(KDirectPrintBandInterfaceUid);
+	REComSession::ListImplementationsL( interface, infoArray );
+	CleanupClosePushL( infoArray );
+	LOG1("CDirectPrintEngine::SearchPluginFromFilenameL infoArray.Count(): %d", infoArray.Count());
+
+	TParsePtrC parse(aFileName);
+
+	TPtrC8 dataType;
+	TPtrC16 dispName;
+	TPtrC8 opaqueData;
+	HBufC* dataTypeBuf = NULL;
+	TBool bFound = EFalse;
+	TInt findLen;
+	const TChar KDataTypeSeparator = '|';
+
+	for( TInt i = 0; i < infoArray.Count(); i++ )
+		{
+		LOG1("[InfoArray] i=%d", i);
+		CImplementationInformation* info = infoArray[i];
+		dataType.Set( info->DataType() );
+		dispName.Set( info->DisplayName() );
+		opaqueData.Set( info->OpaqueData() );
+
+		dataTypeBuf = HBufC::NewLC( dataType.Length() );
+		TPtr dataTypePtr(dataTypeBuf->Des());
+		dataTypePtr.Copy( dataType );
+
+		LOG1("[DataType]=[%S]", &dataTypePtr);
+		FOREVER
+			{
+			findLen = dataTypePtr.Locate( KDataTypeSeparator );
+			if (findLen < 0)
+				{
+				// the separator is not found
+				if (dataTypePtr.Length() > 0)
+					{
+					findLen = dataTypePtr.Length();
+					}
+				else
+					{
+					break;
+					}
+				}
+//			LOG1("[Compare]=[%S]", &(dataTypePtr.Left( findLen )));
+//			LOG1("[Ext]=[%S]", &(parse.Ext()));
+//			LOG1("[Comp]=[%S]", &(dataTypePtr.Left( findLen )));
+			if ( parse.Ext().CompareF( dataTypePtr.Left( findLen ) ) == 0 )
+				{
+				bFound = ETrue;
+				break;
+				}
+			dataTypePtr.Delete( 0, findLen+1 );
+			}
+
+		CleanupStack::PopAndDestroy(dataTypeBuf); // dataTypeBuf
+		
+		if ( bFound )
+			{
+			LOG("Match!!!");
+			LoadPluginFromUidL(info->ImplementationUid());
+			break;
+			}
+		}
+
+	infoArray.ResetAndDestroy();
+	CleanupStack::PopAndDestroy(&infoArray); // infoArray
+
+	LOG("CDirectPrintEngine::SearchPluginFromFilenameL End");
+	}
+
+void CDirectPrintEngine::LoadPluginFromUidL(const TUid aUid)
+	{
+	LOG1("CDirectPrintEngine::LoadPluginFromUidL(0x%X) Start", aUid.iUid);
+
+	CDirectPrintBand* band = NULL;
+	band = CDirectPrintBand::NewL(aUid);
+	TCleanupItem clItem( CleanupBand, band );
+	CleanupStack::PushL( clItem );
+	band->InitPrintBandL( iPrintSetup,
+						  iParam,
+						  KNullDesC );
+	CleanupStack::Pop(); // band
+	iPrintBand = band;
+
+	LOG("CDirectPrintEngine::LoadPluginFromUidL End");
+	}
+
+void CDirectPrintEngine::CleanupBand( TAny* aData )
+	{
+	LOG("[CDirectPrintEngine::CleanupBand]\t Begin");
+
+	CDirectPrintBand* band = (CDirectPrintBand*)aData;
+	delete band;
+
+	LOG("[CDirectPrintEngine::CleanupBand]\t End");
+	}
+
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprintfloatcapability.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <aknquerydialog.h>
+#include <stringloader.h>
+#include <DirectPrintApp.rsg>
+
+#include "directprintfloatcapability.h"
+
+const TInt KMaxTRealCharNum( 30 );
+const TInt KDecimals( 2 );
+
+// Destructor
+CDirectPrintFloatCapability::~CDirectPrintFloatCapability()
+    {
+    }
+
+// Creates text string for the settings list box
+HBufC* CDirectPrintFloatCapability::ListBoxTextL()
+    {   
+    const TInt KGranularity( 4 );
+    TRealFormat format( KMaxTRealCharNum, KDecimals );
+    TBuf<KMaxTRealCharNum> numStr;
+    
+    numStr.Zero();
+    numStr.AppendNum( iRealValue, format );
+
+    CDesCArrayFlat* strings = new ( ELeave ) CDesCArrayFlat( KGranularity );
+    CleanupStack::PushL( strings );
+    strings->AppendL( iTitle );
+    strings->AppendL( numStr );
+
+    HBufC* buf = StringLoader::LoadL( R_QTN_LBOX_FORMAT, *strings ); 
+    CleanupStack::PopAndDestroy();  // strings
+    
+    return buf;
+    }
+
+// Clones itself
+CDirectPrintBaseCapability* CDirectPrintFloatCapability::CloneL()
+    {
+    CDirectPrintFloatCapability* clone = new ( ELeave ) CDirectPrintFloatCapability;
+
+    clone->iDenominator = iDenominator;
+    clone->iIndexOnList = iIndexOnList;
+    clone->iMaxNumerator = iMaxNumerator;
+    clone->iValue = iValue;
+    clone->iTitle = iTitle;
+    clone->iUid = iUid;
+    clone->iRealValue = iRealValue;
+
+    return clone;
+    }
+
+// Sets the new values and checks the boundaries
+TInt CDirectPrintFloatCapability::SetValues( 
+    TInt aDenom, 
+    TInt aNumerator, 
+    TInt aMaxNumerator )
+    {
+    TInt err( KErrNone );
+
+    if ( aNumerator > aMaxNumerator )
+        {
+        err = KErrArgument;
+        }
+    else
+        {
+        iDenominator = aDenom;
+        iValue = aNumerator;
+        iMaxNumerator = aMaxNumerator;
+        if( iDenominator != 0 )
+            {
+            iRealValue = TReal( iValue )/TReal( iDenominator );
+            }
+        }
+
+    return err;
+    }
+
+// Numerator
+TInt CDirectPrintFloatCapability::Numerator() const
+    {
+    return iValue;
+    }
+
+// Denominator
+TInt CDirectPrintFloatCapability::Denominator() const
+    {
+    return iDenominator;
+    }
+
+// Creates setting item for the settings list box
+CAknSettingItem* CDirectPrintFloatCapability::SettingItemLC(TInt aIndex)
+	{
+	CAknIntegerEdwinSettingItem* item = new (ELeave) CAknIntegerEdwinSettingItem(aIndex, iValue); // Not Float Edwin
+	CleanupStack::PushL(item);
+	item->ConstructL(EFalse, aIndex, iTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+
+	return item;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprintlistcapability.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <stringloader.h>
+#include <aknqueryvaluetext.h>
+#include <aknpopupsettingpage.h>
+#include <badesca.h>
+#include <DirectPrintApp.rsg>
+
+#include "directprintlistcapability.h"
+#include "tprinter.h"
+#include "directprintcapabilitycodes.h"
+
+const TInt KArrayGranularity( 4 );
+
+CDirectPrintListCapability::CDirectPrintListCapability()
+	{
+	}
+	
+// Destructor
+CDirectPrintListCapability::~CDirectPrintListCapability()
+    {
+    iEnumIDs.Close();
+    iTexts.ResetAndDestroy();
+    }
+
+// Creates text string for the settings list box
+HBufC* CDirectPrintListCapability::ListBoxTextL()
+    {        
+    CDesCArrayFlat* strings = 
+        new ( ELeave ) CDesCArrayFlat( KArrayGranularity );
+    CleanupStack::PushL( strings );
+    strings->AppendL( iTitle );
+
+    TInt i( 0 );
+    TInt num( iEnumIDs.Count() );
+    TBool found( EFalse );
+    // Find the matching text based on the enumeration value
+    for ( i = 0; i < num && !found; i++ )
+        {
+        if ( iEnumIDs[i] == iValue )
+            {
+            strings->AppendL( iTexts[i]->Des() );
+            found = ETrue;
+            }
+        }
+
+    if ( !found )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+    HBufC* buf = StringLoader::LoadL( R_QTN_LBOX_FORMAT, *strings ); 
+    CleanupStack::PopAndDestroy();  // strings
+
+    return buf;
+    }
+
+// Clones itself
+CDirectPrintBaseCapability* CDirectPrintListCapability::CloneL()
+	{
+	CDirectPrintListCapability* clone = new ( ELeave ) CDirectPrintListCapability();
+	CleanupStack::PushL( clone );
+
+	clone->iValue = iValue;
+	clone->iIndexOnList = iIndexOnList;
+	clone->iTitle = iTitle;
+	clone->iUid = iUid;
+
+	TInt num( iEnumIDs.Count() );
+	if ( iUid != EDirectPrintCapabLayout )
+		{
+		for ( TInt j = 0; j < num; j++ )
+			{
+			User::LeaveIfError( clone->iEnumIDs.Append( iEnumIDs[j] ) );
+			User::LeaveIfError( clone->iTexts.Append( iTexts[j]->AllocLC() ) );
+			CleanupStack::Pop();      // clone->iTexts
+			}
+		}
+
+	CleanupStack::Pop(); // clone
+	return clone;
+	}
+
+// Creates setting item for the settings list box
+CAknSettingItem* CDirectPrintListCapability::SettingItemLC(TInt aIndex)
+	{
+	CAknEnumeratedTextPopupSettingItem* item = new (ELeave) CAknEnumeratedTextPopupSettingItem(aIndex, iEnumIndex);
+	CleanupStack::PushL(item);
+	item->ConstructL(EFalse, aIndex, iTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_TEXTS);
+
+	TInt count = iTexts.Count();
+	if (count > 0)
+		{
+		item->EnumeratedTextArray()->ResetAndDestroy();
+		}
+	for (TInt i=0; i<count; i++ )
+		{
+		CAknEnumeratedText* enumText;
+		enumText = new (ELeave) CAknEnumeratedText(i, iTexts[i]->AllocLC());
+		CleanupStack::Pop();
+		CleanupStack::PushL(enumText);
+		item->EnumeratedTextArray()->AppendL(enumText);
+		CleanupStack::Pop();
+
+		if (iValue == iEnumIDs[i])
+			{
+			iEnumIndex = i;
+			}
+		}
+
+	return item;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprintprintsettings.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// User include files
+#include "directprintprintsettings.h"
+#include "directprintbasecapability.h"
+
+// CONSTRUCTION
+CDirectPrintPrintSettings::CDirectPrintPrintSettings()
+    {
+    }
+
+// Default destructor
+CDirectPrintPrintSettings::~CDirectPrintPrintSettings()
+    {
+    iCapabilities.ResetAndDestroy();
+    }
+
+// Clone this instance and return it
+CDirectPrintPrintSettings* CDirectPrintPrintSettings::CloneL()
+    {
+    CDirectPrintPrintSettings* clone = new ( ELeave ) CDirectPrintPrintSettings;
+    CleanupStack::PushL( clone );
+
+    TInt i( 0 );
+    TInt num( iCapabilities.Count() );
+    for ( i = 0; i < num; i++ )
+        {
+        User::LeaveIfError( 
+            clone->iCapabilities.Append( iCapabilities[i]->CloneL() ) );
+        }
+
+    CleanupStack::Pop();	// clone
+
+    return clone;
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprintsettingsconverter.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,240 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <stringloader.h>
+
+// User include files
+#include "directprintsettingsconverter.h"
+#include "directprinttintcapability.h"
+#include "directprintlistcapability.h"
+#include "directprintfloatcapability.h"
+#include "directprinttextcapability.h"
+#include "directprintstringids.h"
+#include "directprintcapability.h"
+#include "directprintvariant.h"
+#include "clog.h"
+
+const TInt KEngineLimitValue( -1 );
+const TInt KMenuItemsRequired( 2 );
+
+// Converts TDirectPrintCapability to CDirectPrintTIntCapability
+CDirectPrintTIntCapability* DirectPrintSettingsConverter::AddTIntCapabilityLC(
+    TDirectPrintCapability& aCapability,
+    TInt aIndexOnList,
+    TInt aCapabUid )
+    {
+    LOG("DirectPrintSettingsConverter::AddTIntCapabilityLC Begin");
+    CDirectPrintTIntCapability* intC = new ( ELeave ) CDirectPrintTIntCapability;
+    CleanupStack::PushL( intC );
+
+    // If engine returns KEngineLimitValue as low/high limit then it means
+    // that there is no minimum or maximum limit
+    if ( aCapability.iLow == KEngineLimitValue )
+        {
+        intC->iMin = KMinTInt32;
+        }
+    else
+        {
+        intC->iMin = aCapability.iLow;
+        }
+
+    if ( aCapability.iHigh == KEngineLimitValue )
+        {
+        intC->iMax = KMaxTInt32;
+        }
+    else
+        {
+        intC->iMax = aCapability.iHigh;
+        }
+
+    // Initialize TInt capability and return it
+    intC->iTitle = DirectPrintSettingsConverter::TextStringLC( aCapabUid )->Des();
+    CleanupStack::PopAndDestroy();  // SettingsConverter text string
+    intC->iIndexOnList = aIndexOnList;
+    intC->iUid = aCapabUid;
+    intC->iValue = aCapability.iDefaultValue;
+	
+	LOG("DirectPrintSettingsConverter::AddTIntCapabilityLC End");
+    return intC;
+    }
+
+// Converts TDirectPrintCapability to CDirectPrintListCapability
+CDirectPrintListCapability* DirectPrintSettingsConverter::AddListCapabilityLC(
+    TDirectPrintCapability& aCapability,
+    TInt aIndexOnList,
+    TInt aCapabUid )
+    {
+    LOG("DirectPrintSettingsConverter::AddListCapabilityLC Begin");
+    CDirectPrintListCapability* listC = new ( ELeave ) CDirectPrintListCapability();
+    CleanupStack::PushL( listC );
+    listC->iIndexOnList = aIndexOnList;
+    listC->iUid = aCapabUid;
+ 
+	/* There's a problem with some usb printers:
+	   They offer "normal" print quality twice and nothing else.
+	   This has to be handled so that user is not shown the option
+	   as he cannot change it anyway in this case */
+	TBool qualityDuplicates = EFalse;
+	if ( aCapabUid == EDirectPrintCapabQuality && 
+		 aCapability.iEnumCount == KMenuItemsRequired )
+		{
+		if ( aCapability.iEnumCodes[0] == aCapability.iEnumCodes[1] )
+			{
+			LOG("DirectPrintSettingsConverter::AddListCapabilityLC duplicate quality detected!");
+			qualityDuplicates = ETrue;
+			}
+		} 
+		 
+    // If there is only one value for certain capability, empty
+    // title is added so the capability is not visible on the
+    // settings menu.
+    if( aCapability.iEnumCount < KMenuItemsRequired || qualityDuplicates )
+        {
+        listC->iTitle = DirectPrintSettingsConverter::TextStringLC( 0 )->Des();
+        }
+    else
+        {
+        listC->iTitle = DirectPrintSettingsConverter::TextStringLC( aCapabUid )->Des();
+        }    
+
+    CleanupStack::PopAndDestroy();  // SettingsConverter text string
+    listC->iValue = aCapability.iDefaultValue;
+
+    TBool enumLabels = listC->iTitle.CompareF( KNullDesC() ) !=  0;
+    TInt i( 0 );
+    TInt num( aCapability.iEnumCount );
+    for ( i = 0; i < num; i++ )
+        {
+        User::LeaveIfError(
+            listC->iEnumIDs.Append( aCapability.iEnumCodes[i] ) );
+
+        // Find matching text for the enumeration if the capability is
+        // visible on the settings view
+#ifdef DIRECT_PRINT_DYNAMIC_PRINT_SETTINGS        
+        if ( enumLabels || aCapability.iEnumCount < KMenuItemsRequired )
+#else
+		// Not for layout if no dynamic print settings
+        if (( enumLabels || aCapability.iEnumCount < KMenuItemsRequired ) &&
+            aCapabUid != EDirectPrintCapabLayout )
+#endif
+            {
+            LOG("DirectPrintSettingsConverter::AddListCapabilityLC Adding real value");
+            User::LeaveIfError( listC->iTexts.Append(
+                DirectPrintSettingsConverter::TextStringLC( aCapability.iEnumCodes[i] )));
+            CleanupStack::Pop();    // SettingsConverter text string 
+            }
+        else
+            {
+            LOG("DirectPrintSettingsConverter::AddListCapabilityLC Adding EMPTY value");
+            User::LeaveIfError( listC->iTexts.Append(
+                StringLoader::LoadLC( R_EMPTY ) ) );
+            CleanupStack::Pop();	// SettingsConverter text string
+            }
+        }
+
+    if ( aCapability.iEnumCount > 0 )
+        {
+        i = 0;
+        // Check that current active capability code is found from the
+        // list of codes and activate first one if not found
+        TInt num( aCapability.iEnumCount );
+        while ( i < num &&
+                listC->iValue != aCapability.iEnumCodes[i] )
+            {
+            i++;
+            }
+        if ( i >= aCapability.iEnumCount )
+            {
+            listC->iValue = aCapability.iEnumCodes[0];
+            }
+        }
+
+	LOG("DirectPrintSettingsConverter::AddListCapabilityLC End");
+    return listC;
+    }
+
+// Converts TDirectPrintCapability to CDirectPrintFloatCapability
+CDirectPrintFloatCapability* DirectPrintSettingsConverter::AddFloatCapabilityLC(
+    TDirectPrintCapability& aCapability,
+    TInt aIndexOnList,
+    TInt aCapabUid )
+    {
+    LOG("DirectPrintSettingsConverter::AddFloatCapabilityLC Begin");
+    CDirectPrintFloatCapability* floatC = new ( ELeave ) CDirectPrintFloatCapability;
+    CleanupStack::PushL( floatC );
+
+    floatC->iIndexOnList = aIndexOnList;
+    floatC->iUid = aCapabUid;
+    floatC->iTitle = DirectPrintSettingsConverter::TextStringLC( aCapabUid )->Des();
+    CleanupStack::PopAndDestroy();  // SettingsConverter text string
+
+    floatC->SetValues( aCapability.iLow,
+                       aCapability.iDefaultValue, aCapability.iHigh );
+    
+    LOG("DirectPrintSettingsConverter::AddFloatCapabilityLC End");
+    return floatC;
+    }
+
+// Converts TDirectPrintCapability to CDirectPrintTextCapability
+CDirectPrintTextCapability* DirectPrintSettingsConverter::AddTextCapabilityLC(
+    TDirectPrintCapability& /*aCapability*/,
+    TInt aIndexOnList,
+    TInt aCapabUid )
+    {
+    LOG("DirectPrintSettingsConverter::AddTextCapabilityLC Begin");
+    CDirectPrintTextCapability* textC = new ( ELeave ) CDirectPrintTextCapability;
+    CleanupStack::PushL( textC );
+
+    textC->iIndexOnList = aIndexOnList;
+    textC->iUid = aCapabUid;
+    textC->iTitle = DirectPrintSettingsConverter::TextStringLC( aCapabUid )->Des();
+    CleanupStack::PopAndDestroy();  // SettingsConverter text string
+
+    LOG("DirectPrintSettingsConverter::AddTextCapabilityLC End");
+    return textC;
+    }
+
+// Fetches text string based on the enumeration ID
+HBufC* DirectPrintSettingsConverter::TextStringLC(
+    TInt aId )
+    {
+    LOG1("DirectPrintSettingsConverter::TextStringLC Begin: %d", aId );
+    HBufC* buf = 0;
+    TBool found( EFalse );
+
+    TInt i( 0 );
+    for ( i = 0; i < KConverterTableCount && !found; i++ )
+        {
+        if ( aId == KIDConverterTable[i][0] )
+            {
+            buf = StringLoader::LoadLC( KIDConverterTable[i][1] );
+            found = ETrue;
+            }
+        }
+
+    if ( !found )
+        {
+        User::Leave( KErrNotFound );
+        }
+
+	LOG("DirectPrintSettingsConverter::TextStringLC End");
+    return buf;
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprinttextcapability.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <stringloader.h>
+#include <akntextsettingpage.h>
+#include <DirectPrintApp.rsg>
+
+#include "directprinttextcapability.h"
+
+// Destructor
+CDirectPrintTextCapability::~CDirectPrintTextCapability()
+	{
+	}
+
+HBufC* CDirectPrintTextCapability::ListBoxTextL()
+	{
+	const TInt KGranularity( 4 );
+
+	CDesCArrayFlat* strings = new ( ELeave ) CDesCArrayFlat( KGranularity );
+	CleanupStack::PushL( strings );
+	strings->AppendL( iTitle );
+	strings->AppendL( iText );
+
+	HBufC* buf = StringLoader::LoadL( R_QTN_LBOX_FORMAT, *strings );
+	CleanupStack::PopAndDestroy();  // strings
+
+	return buf;
+	}
+
+CDirectPrintBaseCapability* CDirectPrintTextCapability::CloneL()
+	{
+	CDirectPrintTextCapability* clone = new ( ELeave ) CDirectPrintTextCapability;
+
+	clone->iIndexOnList = iIndexOnList;
+	clone->iTitle = iTitle;
+	clone->iUid = iUid;
+	clone->iValue = iValue;
+	clone->iText = iText;
+
+	return clone;
+	}
+
+CAknSettingItem* CDirectPrintTextCapability::SettingItemLC(TInt aIndex)
+	{
+	CAknTextSettingItem* item = new (ELeave) CAknTextSettingItem(aIndex, iText);
+	CleanupStack::PushL(item);
+	item->SetEmptyItemTextL( _L("") );
+	item->ConstructL(EFalse, aIndex, iTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_TEXT_SETTING_PAGE, -1);
+
+	return item;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/engine/src/directprinttintcapability.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <stringloader.h>
+#include <akntextsettingpage.h>
+#include <DirectPrintApp.rsg>
+
+#include "directprinttintcapability.h"
+
+const TInt KMaxTIntCharNum( 11 );
+
+// Destructor
+CDirectPrintTIntCapability::~CDirectPrintTIntCapability()
+    {
+    }
+
+// Creates text string for the settings list box
+HBufC* CDirectPrintTIntCapability::ListBoxTextL()
+    {
+    const TInt KGranularity( 4 );
+    TBuf<KMaxTIntCharNum> numStr;
+    numStr.Zero();
+    numStr.AppendNum( iValue );
+
+    CDesCArrayFlat* strings = new ( ELeave ) CDesCArrayFlat( KGranularity );
+    CleanupStack::PushL( strings );
+    strings->AppendL( iTitle );
+    strings->AppendL( numStr );
+
+    HBufC* buf = StringLoader::LoadL( R_QTN_LBOX_FORMAT, *strings );
+    CleanupStack::PopAndDestroy();  // strings
+
+    return buf;
+    }
+
+// Clones itself
+CDirectPrintBaseCapability* CDirectPrintTIntCapability::CloneL()
+    {
+    CDirectPrintTIntCapability* clone = new ( ELeave ) CDirectPrintTIntCapability;
+
+    clone->iIndexOnList = iIndexOnList;
+    clone->iMax = iMax;
+    clone->iMin = iMin;
+    clone->iTitle = iTitle;
+    clone->iUid = iUid;
+    clone->iValue = iValue;
+
+    return clone;
+    }
+
+// Creates setting item for the settings list box
+CAknSettingItem* CDirectPrintTIntCapability::SettingItemLC(TInt aIndex)
+	{
+	CAknIntegerEdwinSettingItem* item = new (ELeave) CAknIntegerEdwinSettingItem(aIndex, iValue);
+	CleanupStack::PushL(item);
+	item->ConstructL(EFalse, aIndex, iTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+
+	return item;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/gfx/qgn_menu_directprintapp.svg	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" width="86px" height="86px" viewBox="0 0 86 86" enable-background="new 0 0 86 86" xml:space="preserve">
+<polyline fill="#EED6FF" points="22.889,27.984 4.625,41.375 4.75,65.688 5.765,67.223 6.865,67.988 7.794,68.883 17.375,70 
+	14.125,75.125 43.5,80.375 47.5,73.75 63.099,75.018 72.485,74.635 73.501,73.954 74.261,73.612 82.125,63.132 82.125,61.726 
+	82.125,33.225 81.618,32.202 80.857,31.436 79.842,31.052 59.249,30.315 59,30.125 59.5,23.375 58.625,23.367 29.125,22.875 
+	28.724,28.112 "/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.6255" y1="53.1055" x2="72.8606" y2="19.8405">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.2537" style="stop-color:#A6AEB0"/>
+	<stop  offset="0.4063" style="stop-color:#9EA5A8"/>
+	<stop  offset="0.5322" style="stop-color:#90979A"/>
+	<stop  offset="0.6435" style="stop-color:#7D8385"/>
+	<stop  offset="0.7453" style="stop-color:#65696B"/>
+	<stop  offset="0.84" style="stop-color:#464A4B"/>
+	<stop  offset="0.9275" style="stop-color:#232525"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_1_)" points="20.833,30.833 10.5,38.5 12.167,40.167 69.166,44.167 81.501,33.667 79.5,31.833 
+	28.167,28.833 24.5,28.833 22.167,29.5 "/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="5.1665" y1="44.167" x2="71.334" y2="44.167">
+	<stop  offset="0.0909" style="stop-color:#000000"/>
+	<stop  offset="0.3465" style="stop-color:#020202"/>
+	<stop  offset="0.4804" style="stop-color:#0A0A0A"/>
+	<stop  offset="0.5862" style="stop-color:#181818"/>
+	<stop  offset="0.6771" style="stop-color:#2B2B2B"/>
+	<stop  offset="0.7586" style="stop-color:#444444"/>
+	<stop  offset="0.8334" style="stop-color:#626262"/>
+	<stop  offset="0.9029" style="stop-color:#868686"/>
+	<stop  offset="0.9666" style="stop-color:#AFAFAF"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+	<stop  offset="1" style="stop-color:#FFFCFF"/>
+</linearGradient>
+<polygon fill="url(#SVGID_2_)" points="5.167,42.167 7.125,43.375 9.158,44.537 11.833,45.167 62.334,49.334 70.167,49.834 
+	71.334,49 69.166,44.167 12.167,40.167 10.5,38.5 "/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="62.166" y1="51.333" x2="81.5" y2="51.333">
+	<stop  offset="0" style="stop-color:#9C9C96;stop-opacity:0.56"/>
+	<stop  offset="0.2262" style="stop-color:#9E9E98;stop-opacity:0.7507"/>
+	<stop  offset="0.3077" style="stop-color:#A5A59F;stop-opacity:0.8194"/>
+	<stop  offset="0.3658" style="stop-color:#B0B0AA;stop-opacity:0.8683"/>
+	<stop  offset="0.4128" style="stop-color:#C1C1BB;stop-opacity:0.9079"/>
+	<stop  offset="0.453" style="stop-color:#D7D7D1;stop-opacity:0.9418"/>
+	<stop  offset="0.488" style="stop-color:#F1F1EC;stop-opacity:0.9713"/>
+	<stop  offset="0.503" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.6882" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.7549" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.8025" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.841" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.8739" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9031" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9295" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9537" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9763" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9963" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#141415"/>
+	<stop  offset="1" style="stop-color:#2D2D30"/>
+	<stop  offset="1" style="stop-color:#505054"/>
+	<stop  offset="1" style="stop-color:#7D7D83"/>
+	<stop  offset="1" style="stop-color:#B2B2BC"/>
+	<stop  offset="1" style="stop-color:#BDBDC7"/>
+</linearGradient>
+<polyline fill="url(#SVGID_3_)" points="74.001,48.5 74.166,48.5 80.166,41.5 81.5,38.833 81.5,33.5 81.5,38.833 81.5,60.833 
+	74.666,67.666 73.166,69.166 62.166,69.166 62.166,51.167 70.875,51.125 72,50.375 74.166,48.5 80.166,41.5 "/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="5.2915" y1="53.333" x2="13.0005" y2="53.333">
+	<stop  offset="0" style="stop-color:#ADADAB;stop-opacity:0.56"/>
+	<stop  offset="0.3404" style="stop-color:#AFAFAD;stop-opacity:0.7585"/>
+	<stop  offset="0.463" style="stop-color:#B6B6B3;stop-opacity:0.8299"/>
+	<stop  offset="0.5504" style="stop-color:#C1C1BF;stop-opacity:0.8809"/>
+	<stop  offset="0.621" style="stop-color:#D2D2CF;stop-opacity:0.9221"/>
+	<stop  offset="0.6808" style="stop-color:#E8E8E4;stop-opacity:0.9569"/>
+	<stop  offset="0.7273" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8289" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.8655" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.8916" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9127" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9308" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9468" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9613" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9746" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.987" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.998" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_4_)" points="5.292,42.167 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 13,45.334 9.283,44.537 "/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="12.834" y1="48.25" x2="71.75" y2="48.25">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.4091" style="stop-color:#CBCBC1;stop-opacity:0.772"/>
+	<stop  offset="0.5565" style="stop-color:#D1D1C8;stop-opacity:0.8484"/>
+	<stop  offset="0.6615" style="stop-color:#DCDCD3;stop-opacity:0.9028"/>
+	<stop  offset="0.7458" style="stop-color:#EBEBE4;stop-opacity:0.9465"/>
+	<stop  offset="0.8182" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8859" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.9103" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.9277" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9418" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9539" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9645" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9742" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9831" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9913" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9987" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_5_)" points="70.5,51.167 62.166,51.167 12.834,47 13,45.334 70.167,49.834 71.25,49.125 71.75,50.625 "/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="5.4995" y1="60.584" x2="81.5" y2="60.584">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.0042" style="stop-color:#C5C5BB;stop-opacity:0.5619"/>
+	<stop  offset="0.0499" style="stop-color:#9C9C94;stop-opacity:0.5819"/>
+	<stop  offset="0.0998" style="stop-color:#777771;stop-opacity:0.6039"/>
+	<stop  offset="0.1556" style="stop-color:#575752;stop-opacity:0.6284"/>
+	<stop  offset="0.2171" style="stop-color:#3B3B38;stop-opacity:0.6555"/>
+	<stop  offset="0.2867" style="stop-color:#252524;stop-opacity:0.6861"/>
+	<stop  offset="0.3679" style="stop-color:#141413;stop-opacity:0.7219"/>
+	<stop  offset="0.4683" style="stop-color:#090908;stop-opacity:0.7661"/>
+	<stop  offset="0.6091" style="stop-color:#020202;stop-opacity:0.828"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<polygon fill="url(#SVGID_6_)" points="81.5,60.833 81.167,63.334 73.001,73.334 72.001,74 68.834,74 65.001,74.167 61.834,74.167 
+	10,68.5 8.834,68.334 7.334,67.5 5.834,65.667 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 12.834,47 62.166,51.167 
+	62.166,69.166 70,69.25 71.75,69 72.875,68.625 74,67.875 "/>
+<g>
+	<polygon fill="#FFFFFF" points="16.193,74.057 28.847,57.109 54.479,60.105 42.896,79.108 	"/>
+	<path fill="#CCCCCC" d="M29.059,57.602l24.646,2.881L42.666,78.592l-25.655-4.854L29.059,57.602 M28.635,56.616l-13.26,17.759
+		l27.75,5.25l12.129-19.897L28.635,56.616L28.635,56.616z"/>
+</g>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="43.6729" y1="40.2471" x2="44.2277" y2="24.3578" gradientTransform="matrix(0.9873 -0.0177 0.0176 0.985 -0.1104 0.7738)">
+	<stop  offset="0.49" style="stop-color:#E0E0DE"/>
+	<stop  offset="0.6851" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.7553" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.8054" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.8459" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.8806" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.9114" style="stop-color:#898988"/>
+	<stop  offset="0.9392" style="stop-color:#696968"/>
+	<stop  offset="0.9647" style="stop-color:#434343"/>
+	<stop  offset="0.9875" style="stop-color:#1A1A1A"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="1" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="1" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="1" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="1" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="1" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="1" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+</linearGradient>
+<polygon fill="url(#SVGID_7_)" stroke="#FFFFFF" stroke-width="0.7398" points="29.968,23.748 29.229,38.253 57.516,39.879 
+	58.485,24.731 57.745,24.744 "/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="25.834" y1="41.75" x2="57.5" y2="41.75">
+	<stop  offset="0" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+	<stop  offset="0" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="0" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="0" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="0" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="0" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="0" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="0" style="stop-color:#000000"/>
+	<stop  offset="0.0125" style="stop-color:#1A1A1A"/>
+	<stop  offset="0.0353" style="stop-color:#434343"/>
+	<stop  offset="0.0608" style="stop-color:#696968"/>
+	<stop  offset="0.0886" style="stop-color:#898988"/>
+	<stop  offset="0.1194" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.1541" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.1946" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.2447" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.3149" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.51" style="stop-color:#E0E0DE"/>
+</linearGradient>
+<polygon fill="url(#SVGID_8_)" stroke="#666666" stroke-width="0.5" points="25.834,42.667 29.167,38.833 57.5,40.375 
+	54.667,44.667 "/>
+<polygon fill="#FFFFFF" points="36.375,29.375 36,29.375 35.667,34.875 49.834,35.708 50,29.875 "/>
+<polygon points="23.75,29.375 6.5,42.75 5.375,41.75 22.167,29.5 22.875,29 23.625,28.875 "/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="69.2783" y1="45.7109" x2="83.5552" y2="36.7898">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_9_)" points="69.166,44.167 71.334,49 81.5,38.833 81.5,33.5 "/>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="71.334" y1="49" x2="71.334" y2="49">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)" d="M71.334,49"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/gfx/qgn_menu_directprintapp_org.svg	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" width="86px" height="86px" viewBox="0 0 86 86" enable-background="new 0 0 86 86" xml:space="preserve">
+<g>
+	<g>
+		<rect y="0" fill="none" stroke="#FF0000" width="86" height="86"/>
+	</g>
+</g>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="77.3838" y1="-338.5713" x2="128.4909" y2="-399.4785" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#B3DDFF"/>
+	<stop  offset="0.8146" style="stop-color:#084296"/>
+	<stop  offset="1" style="stop-color:#084296"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M-159.595,26.247l-17.368,9.789v22.641c0,0,8.723,15.002,10.23,17.592
+	c-2.332,1.665-15.089,10.779-15.089,10.779l21.122,12.364c0,0,12.614-9.626,14.376-10.971c1.934,1.084,15.861,8.895,15.861,8.895
+	l16.285-14.788c0,0-13.746-6.771-16.504-8.129c1.434-2.942,10.291-21.113,10.291-21.113l-21.791-9.372c0,0-1.451,3.102-2.045,4.365
+	c-2-0.859-6.424-2.762-6.424-2.762s-3.628,2.407-5.566,3.692c-0.32-0.728-0.53-1.205-0.642-1.461
+	c0.007-0.806,0.208-23.181,0.208-23.181L-159.595,26.247z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="178.5576" y1="-312.0112" x2="153.9297" y2="-280.9551" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#5AA7E0"/>
+	<stop  offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#SVGID_2_)" points="-62.291,16.313 -52.045,-4.709 -70.214,-12.523 -72.258,-8.159 -79.45,-11.25 -86.07,-6.859 
+	-87.816,-10.829 -87.636,-31.051 -104.009,-21.821 -104.009,-0.85 -93.148,17.824 -107.233,27.885 -89.845,38.064 -75.489,27.109 
+	-59.734,35.942 -46.617,24.032 "/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="171.71" y1="-361.2764" x2="164.9832" y2="-374.5129" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#5AA7E0"/>
+	<stop  offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#SVGID_3_)" points="-105.678,75.675 -96.214,55.477 -78.045,63.291 -88.291,84.313 "/>
+<polygon fill="#0046B7" points="-94.009,58.15 -83.148,76.824 -69.678,66.675 -77.816,48.171 "/>
+<polygon fill="#3366CC" points="-109.009,69.15 -109.009,48.179 -92.636,38.949 -92.816,59.171 "/>
+<polygon fill="#CFECFF" points="-86.911,42.339 -72.45,32.75 -54.83,40.324 -68.489,50.865 "/>
+<path fill="#5AA7E0" stroke="#FF0000" d="M41,54.029"/>
+<polygon fill="#3366CC" points="-107.911,50.339 -107.148,69.824 -89.489,79.109 -89.489,58.865 "/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="163.8691" y1="-396.1548" x2="183.3704" y2="-388.6689" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#5AA7E0"/>
+	<stop  offset="0.0056" style="stop-color:#5AA7E0"/>
+	<stop  offset="0.85" style="stop-color:#3366CC"/>
+	<stop  offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#SVGID_4_)" points="-80.564,76.904 -96.148,88.824 -78.489,98.109 -78.489,77.865 "/>
+<polygon fill="#0046B7" points="-94.489,64.865 -94.489,85.109 -81.291,74.313 -80.83,54.324 "/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="188.2412" y1="-377.6636" x2="201.8975" y2="-377.6636" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#0046B7"/>
+	<stop  offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#SVGID_5_)" points="-70.638,66.224 -70.489,84.109 -57.291,73.313 "/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="191.4629" y1="-406.2676" x2="187.8638" y2="-396.3791" gradientTransform="matrix(0.9773 0 0 -0.9773 -254.6002 -293.9144)">
+	<stop  offset="0" style="stop-color:#5AA7E0"/>
+	<stop  offset="0.4101" style="stop-color:#5AA7E0"/>
+	<stop  offset="1" style="stop-color:#3366CC"/>
+</linearGradient>
+<polygon fill="url(#SVGID_6_)" points="-66.734,111.942 -82.489,103.109 -69.291,92.313 -53.617,100.032 "/>
+<image overflow="visible" width="99" height="61" xlink:href="79E366C1.jpg"  transform="matrix(0.7739 0 0 0.8457 3.167 21.4995)">
+</image>
+<line fill="none" stroke="#FF0000" x1="21.833" y1="26.167" x2="4.166" y2="39.167"/>
+<line fill="none" stroke="#FF0000" x1="22.166" y1="26.167" x2="79.166" y2="29.833"/>
+<line fill="none" stroke="#FF0000" x1="8.166" y1="35.5" x2="69.833" y2="39.833"/>
+<line fill="none" stroke="#FF0000" x1="77.499" y1="29.833" x2="69.833" y2="39.167"/>
+<line fill="none" stroke="#FF0000" x1="80.166" y1="29.833" x2="83.166" y2="32.833"/>
+<line fill="none" stroke="#FF0000" x1="83.166" y1="32.833" x2="74.166" y2="44.833"/>
+<line fill="none" stroke="#FF0000" x1="73.833" y1="44.833" x2="3.833" y2="39.167"/>
+<line fill="none" stroke="#FF0000" x1="30.5" y1="22.833" x2="25.833" y2="35.833"/>
+<line fill="none" stroke="#FF0000" x1="30.833" y1="22.833" x2="58.166" y2="24.833"/>
+<line fill="none" stroke="#FF0000" x1="58.499" y1="24.5" x2="53.833" y2="37.833"/>
+<line fill="none" stroke="#FF0000" x1="53.499" y1="37.5" x2="24.5" y2="35.833"/>
+<line fill="none" stroke="#FF0000" x1="4.166" y1="38.833" x2="4.5" y2="59.5"/>
+<line fill="none" stroke="#FF0000" x1="4.833" y1="59.5" x2="11.166" y2="61.167"/>
+<line fill="none" stroke="#FF0000" x1="12.833" y1="42.5" x2="12.833" y2="60.5"/>
+<line fill="none" stroke="#FF0000" x1="13.166" y1="42.833" x2="62.166" y2="47.833"/>
+<line fill="none" stroke="#FF0000" x1="61.833" y1="47.167" x2="61.833" y2="64.833"/>
+<line fill="none" stroke="#FF0000" x1="62.166" y1="65.833" x2="73.833" y2="66.167"/>
+<line fill="none" stroke="#FF0000" stroke-width="2.1812" x1="74.166" y1="66.167" x2="83.833" y2="52.167"/>
+<line fill="none" stroke="#FF0000" stroke-width="1.5904" x1="83.167" y1="56.834" x2="73.166" y2="71.167"/>
+<line fill="none" stroke="#FF0000" x1="73.166" y1="71.5" x2="7.166" y2="65.167"/>
+<line fill="none" stroke="#FF0000" x1="4.5" y1="58.833" x2="7.5" y2="64.833"/>
+<line fill="none" stroke="#FF0000" x1="11.833" y1="60.833" x2="61.499" y2="65.833"/>
+<line fill="none" stroke="#FF0000" x1="24.833" y1="52.833" x2="7.5" y2="67.833"/>
+<line fill="none" stroke="#FF0000" x1="24.5" y1="53.167" x2="56.499" y2="56.5"/>
+<line fill="none" stroke="#FF0000" x1="56.499" y1="56.167" x2="42.5" y2="72.167"/>
+<line fill="none" stroke="#FF0000" x1="8.5" y1="68.167" x2="41.833" y2="72.167"/>
+<line fill="none" stroke="#FF0000" x1="83.499" y1="33.167" x2="83.166" y2="57.833"/>
+<path fill="none" stroke="#FF0000" d="M-33.159,34.084c-0.408,2.751-2.008,4.082-5.008,7.749c-2.596,3.173-4.594,6.777-6.89,10.201
+	c8.002,0.428,23.514,0.468,31.557,0.466c2.141,0-1.263,0.412,0.517-0.532c1.139-0.604,3.694-4.268,4.776-5.299
+	c2.897-2.759,4.751-6.604,6.815-9.958c-5.925,0.212-10.649-0.661-16.44-1.878c-3.856-0.811-11.589-2.165-15.325-0.082"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/gfx/qgn_menu_directprintapp_pink.svg	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" width="86px" height="86px" viewBox="0 0 86 86" enable-background="new 0 0 86 86" xml:space="preserve">
+<polyline fill="#EED6FF" points="22.889,27.984 4.625,41.375 4.75,65.688 5.765,67.223 6.865,67.988 7.794,68.883 17.375,70 
+	14.125,75.125 43.5,80.375 47.5,73.75 63.099,75.018 72.485,74.635 73.501,73.954 74.261,73.612 82.125,63.132 82.125,61.726 
+	82.125,33.225 81.618,32.202 80.857,31.436 79.842,31.052 59.249,30.315 59,30.125 59.5,23.375 58.625,23.367 29.125,22.875 
+	28.724,28.112 "/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.6255" y1="53.1055" x2="72.8606" y2="19.8405">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.2537" style="stop-color:#A6AEB0"/>
+	<stop  offset="0.4063" style="stop-color:#9EA5A8"/>
+	<stop  offset="0.5322" style="stop-color:#90979A"/>
+	<stop  offset="0.6435" style="stop-color:#7D8385"/>
+	<stop  offset="0.7453" style="stop-color:#65696B"/>
+	<stop  offset="0.84" style="stop-color:#464A4B"/>
+	<stop  offset="0.9275" style="stop-color:#232525"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_1_)" points="20.833,30.833 10.5,38.5 12.167,40.167 69.166,44.167 81.501,33.667 79.5,31.833 
+	28.167,28.833 24.5,28.833 22.167,29.5 "/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="5.1665" y1="44.167" x2="71.334" y2="44.167">
+	<stop  offset="0.0909" style="stop-color:#000000"/>
+	<stop  offset="0.3465" style="stop-color:#020202"/>
+	<stop  offset="0.4804" style="stop-color:#0A0A0A"/>
+	<stop  offset="0.5862" style="stop-color:#181818"/>
+	<stop  offset="0.6771" style="stop-color:#2B2B2B"/>
+	<stop  offset="0.7586" style="stop-color:#444444"/>
+	<stop  offset="0.8334" style="stop-color:#626262"/>
+	<stop  offset="0.9029" style="stop-color:#868686"/>
+	<stop  offset="0.9666" style="stop-color:#AFAFAF"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+	<stop  offset="1" style="stop-color:#FFFCFF"/>
+</linearGradient>
+<polygon fill="url(#SVGID_2_)" points="5.167,42.167 7.125,43.375 9.158,44.537 11.833,45.167 62.334,49.334 70.167,49.834 
+	71.334,49 69.166,44.167 12.167,40.167 10.5,38.5 "/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="62.166" y1="51.333" x2="81.5" y2="51.333">
+	<stop  offset="0" style="stop-color:#9C9C96;stop-opacity:0.56"/>
+	<stop  offset="0.2262" style="stop-color:#9E9E98;stop-opacity:0.7507"/>
+	<stop  offset="0.3077" style="stop-color:#A5A59F;stop-opacity:0.8194"/>
+	<stop  offset="0.3658" style="stop-color:#B0B0AA;stop-opacity:0.8683"/>
+	<stop  offset="0.4128" style="stop-color:#C1C1BB;stop-opacity:0.9079"/>
+	<stop  offset="0.453" style="stop-color:#D7D7D1;stop-opacity:0.9418"/>
+	<stop  offset="0.488" style="stop-color:#F1F1EC;stop-opacity:0.9713"/>
+	<stop  offset="0.503" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.6882" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.7549" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.8025" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.841" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.8739" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9031" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9295" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9537" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9763" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9963" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#141415"/>
+	<stop  offset="1" style="stop-color:#2D2D30"/>
+	<stop  offset="1" style="stop-color:#505054"/>
+	<stop  offset="1" style="stop-color:#7D7D83"/>
+	<stop  offset="1" style="stop-color:#B2B2BC"/>
+	<stop  offset="1" style="stop-color:#BDBDC7"/>
+</linearGradient>
+<polyline fill="url(#SVGID_3_)" points="74.001,48.5 74.166,48.5 80.166,41.5 81.5,38.833 81.5,33.5 81.5,38.833 81.5,60.833 
+	74.666,67.666 73.166,69.166 62.166,69.166 62.166,51.167 70.875,51.125 72,50.375 74.166,48.5 80.166,41.5 "/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="5.2915" y1="53.333" x2="13.0005" y2="53.333">
+	<stop  offset="0" style="stop-color:#ADADAB;stop-opacity:0.56"/>
+	<stop  offset="0.3404" style="stop-color:#AFAFAD;stop-opacity:0.7585"/>
+	<stop  offset="0.463" style="stop-color:#B6B6B3;stop-opacity:0.8299"/>
+	<stop  offset="0.5504" style="stop-color:#C1C1BF;stop-opacity:0.8809"/>
+	<stop  offset="0.621" style="stop-color:#D2D2CF;stop-opacity:0.9221"/>
+	<stop  offset="0.6808" style="stop-color:#E8E8E4;stop-opacity:0.9569"/>
+	<stop  offset="0.7273" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8289" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.8655" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.8916" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9127" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9308" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9468" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9613" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9746" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.987" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.998" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_4_)" points="5.292,42.167 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 13,45.334 9.283,44.537 "/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="12.834" y1="48.25" x2="71.75" y2="48.25">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.4091" style="stop-color:#CBCBC1;stop-opacity:0.772"/>
+	<stop  offset="0.5565" style="stop-color:#D1D1C8;stop-opacity:0.8484"/>
+	<stop  offset="0.6615" style="stop-color:#DCDCD3;stop-opacity:0.9028"/>
+	<stop  offset="0.7458" style="stop-color:#EBEBE4;stop-opacity:0.9465"/>
+	<stop  offset="0.8182" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8859" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.9103" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.9277" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9418" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9539" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9645" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9742" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9831" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9913" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9987" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_5_)" points="70.5,51.167 62.166,51.167 12.834,47 13,45.334 70.167,49.834 71.25,49.125 71.75,50.625 "/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="5.4995" y1="60.584" x2="81.5" y2="60.584">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.0042" style="stop-color:#C5C5BB;stop-opacity:0.5619"/>
+	<stop  offset="0.0499" style="stop-color:#9C9C94;stop-opacity:0.5819"/>
+	<stop  offset="0.0998" style="stop-color:#777771;stop-opacity:0.6039"/>
+	<stop  offset="0.1556" style="stop-color:#575752;stop-opacity:0.6284"/>
+	<stop  offset="0.2171" style="stop-color:#3B3B38;stop-opacity:0.6555"/>
+	<stop  offset="0.2867" style="stop-color:#252524;stop-opacity:0.6861"/>
+	<stop  offset="0.3679" style="stop-color:#141413;stop-opacity:0.7219"/>
+	<stop  offset="0.4683" style="stop-color:#090908;stop-opacity:0.7661"/>
+	<stop  offset="0.6091" style="stop-color:#020202;stop-opacity:0.828"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<polygon fill="url(#SVGID_6_)" points="81.5,60.833 81.167,63.334 73.001,73.334 72.001,74 68.834,74 65.001,74.167 61.834,74.167 
+	10,68.5 8.834,68.334 7.334,67.5 5.834,65.667 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 12.834,47 62.166,51.167 
+	62.166,69.166 70,69.25 71.75,69 72.875,68.625 74,67.875 "/>
+<g>
+	<polygon fill="#FFFFFF" points="16.193,74.057 28.847,57.109 54.479,60.105 42.896,79.108 	"/>
+	<path fill="#CCCCCC" d="M29.059,57.602l24.646,2.881L42.666,78.592l-25.655-4.854L29.059,57.602 M28.635,56.616l-13.26,17.759
+		l27.75,5.25l12.129-19.897L28.635,56.616L28.635,56.616z"/>
+</g>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="43.6729" y1="40.2471" x2="44.2277" y2="24.3578" gradientTransform="matrix(0.9873 -0.0177 0.0176 0.985 -0.1104 0.7738)">
+	<stop  offset="0.49" style="stop-color:#E0E0DE"/>
+	<stop  offset="0.6851" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.7553" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.8054" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.8459" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.8806" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.9114" style="stop-color:#898988"/>
+	<stop  offset="0.9392" style="stop-color:#696968"/>
+	<stop  offset="0.9647" style="stop-color:#434343"/>
+	<stop  offset="0.9875" style="stop-color:#1A1A1A"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="1" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="1" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="1" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="1" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="1" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="1" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+</linearGradient>
+<polygon fill="url(#SVGID_7_)" stroke="#FFFFFF" stroke-width="0.7398" points="29.968,23.748 29.229,38.253 57.516,39.879 
+	58.485,24.731 57.745,24.744 "/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="25.834" y1="41.75" x2="57.5" y2="41.75">
+	<stop  offset="0" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+	<stop  offset="0" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="0" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="0" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="0" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="0" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="0" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="0" style="stop-color:#000000"/>
+	<stop  offset="0.0125" style="stop-color:#1A1A1A"/>
+	<stop  offset="0.0353" style="stop-color:#434343"/>
+	<stop  offset="0.0608" style="stop-color:#696968"/>
+	<stop  offset="0.0886" style="stop-color:#898988"/>
+	<stop  offset="0.1194" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.1541" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.1946" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.2447" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.3149" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.51" style="stop-color:#E0E0DE"/>
+</linearGradient>
+<polygon fill="url(#SVGID_8_)" stroke="#666666" stroke-width="0.5" points="25.834,42.667 29.167,38.833 57.5,40.375 
+	54.667,44.667 "/>
+<polygon fill="#FFFFFF" points="36.375,29.375 36,29.375 35.667,34.875 49.834,35.708 50,29.875 "/>
+<polygon points="23.75,29.375 6.5,42.75 5.375,41.75 22.167,29.5 22.875,29 23.625,28.875 "/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="69.2783" y1="45.7109" x2="83.5552" y2="36.7898">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_9_)" points="69.166,44.167 71.334,49 81.5,38.833 81.5,33.5 "/>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="71.334" y1="49" x2="71.334" y2="49">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)" d="M71.334,49"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/gfx/qgn_menu_directprintapp_yellow.svg	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="レイヤー_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+	 y="0px" width="86px" height="86px" viewBox="0 0 86 86" enable-background="new 0 0 86 86" xml:space="preserve">
+<polyline fill="#FFFFCC" points="23.125,28.375 5.375,41.75 5.25,65.25 6.25,66.75 7.334,67.5 8.25,68.375 17.25,69.375 
+	13.625,73.75 42.141,79.134 46.75,72.75 62.75,74.375 72.001,74 73.001,73.334 73.75,73 81.5,62.75 81.5,61.375 81.5,33.5 81,32.5 
+	80.25,31.75 79.25,31.375 58.125,30.625 58.729,24.499 29.852,23.5 28.875,28.5 "/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="19.6255" y1="53.1055" x2="72.8606" y2="19.8405">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.2537" style="stop-color:#A6AEB0"/>
+	<stop  offset="0.4063" style="stop-color:#9EA5A8"/>
+	<stop  offset="0.5322" style="stop-color:#90979A"/>
+	<stop  offset="0.6435" style="stop-color:#7D8385"/>
+	<stop  offset="0.7453" style="stop-color:#65696B"/>
+	<stop  offset="0.84" style="stop-color:#464A4B"/>
+	<stop  offset="0.9275" style="stop-color:#232525"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_1_)" points="20.833,30.833 10.5,38.5 12.167,40.167 69.166,44.167 81.501,33.667 79.5,31.833 
+	28.167,28.833 24.5,28.833 22.167,29.5 "/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="5.1665" y1="44.167" x2="71.334" y2="44.167">
+	<stop  offset="0.0909" style="stop-color:#000000"/>
+	<stop  offset="0.3465" style="stop-color:#020202"/>
+	<stop  offset="0.4804" style="stop-color:#0A0A0A"/>
+	<stop  offset="0.5862" style="stop-color:#181818"/>
+	<stop  offset="0.6771" style="stop-color:#2B2B2B"/>
+	<stop  offset="0.7586" style="stop-color:#444444"/>
+	<stop  offset="0.8334" style="stop-color:#626262"/>
+	<stop  offset="0.9029" style="stop-color:#868686"/>
+	<stop  offset="0.9666" style="stop-color:#AFAFAF"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+	<stop  offset="1" style="stop-color:#FFFCFF"/>
+</linearGradient>
+<polygon fill="url(#SVGID_2_)" points="5.167,42.167 7.125,43.375 9.158,44.537 11.833,45.167 62.334,49.334 70.167,49.834 
+	71.334,49 69.166,44.167 12.167,40.167 10.5,38.5 "/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="62.166" y1="51.333" x2="81.5" y2="51.333">
+	<stop  offset="0" style="stop-color:#9C9C96;stop-opacity:0.56"/>
+	<stop  offset="0.2262" style="stop-color:#9E9E98;stop-opacity:0.7507"/>
+	<stop  offset="0.3077" style="stop-color:#A5A59F;stop-opacity:0.8194"/>
+	<stop  offset="0.3658" style="stop-color:#B0B0AA;stop-opacity:0.8683"/>
+	<stop  offset="0.4128" style="stop-color:#C1C1BB;stop-opacity:0.9079"/>
+	<stop  offset="0.453" style="stop-color:#D7D7D1;stop-opacity:0.9418"/>
+	<stop  offset="0.488" style="stop-color:#F1F1EC;stop-opacity:0.9713"/>
+	<stop  offset="0.503" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.6882" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.7549" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.8025" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.841" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.8739" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9031" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9295" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9537" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9763" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9963" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#141415"/>
+	<stop  offset="1" style="stop-color:#2D2D30"/>
+	<stop  offset="1" style="stop-color:#505054"/>
+	<stop  offset="1" style="stop-color:#7D7D83"/>
+	<stop  offset="1" style="stop-color:#B2B2BC"/>
+	<stop  offset="1" style="stop-color:#BDBDC7"/>
+</linearGradient>
+<polyline fill="url(#SVGID_3_)" points="74.001,48.5 74.166,48.5 80.166,41.5 81.5,38.833 81.5,33.5 81.5,38.833 81.5,60.833 
+	74.666,67.666 73.166,69.166 62.166,69.166 62.166,51.167 70.875,51.125 72,50.375 74.166,48.5 80.166,41.5 "/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="5.2915" y1="53.333" x2="13.0005" y2="53.333">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.4091" style="stop-color:#CBCBC1;stop-opacity:0.772"/>
+	<stop  offset="0.5565" style="stop-color:#D1D1C8;stop-opacity:0.8484"/>
+	<stop  offset="0.6615" style="stop-color:#DCDCD3;stop-opacity:0.9028"/>
+	<stop  offset="0.7458" style="stop-color:#EBEBE4;stop-opacity:0.9465"/>
+	<stop  offset="0.8182" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8859" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.9103" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.9277" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9418" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9539" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9645" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9742" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9831" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9913" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9987" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_4_)" points="5.292,42.167 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 13,45.334 9.283,44.537 "/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="12.834" y1="48.25" x2="71.75" y2="48.25">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.4091" style="stop-color:#CBCBC1;stop-opacity:0.772"/>
+	<stop  offset="0.5565" style="stop-color:#D1D1C8;stop-opacity:0.8484"/>
+	<stop  offset="0.6615" style="stop-color:#DCDCD3;stop-opacity:0.9028"/>
+	<stop  offset="0.7458" style="stop-color:#EBEBE4;stop-opacity:0.9465"/>
+	<stop  offset="0.8182" style="stop-color:#FFFFFA;stop-opacity:0.984"/>
+	<stop  offset="0.8859" style="stop-color:#FDFDF8;stop-opacity:0.99"/>
+	<stop  offset="0.9103" style="stop-color:#F6F6F2;stop-opacity:0.9921"/>
+	<stop  offset="0.9277" style="stop-color:#EBEBE6;stop-opacity:0.9936"/>
+	<stop  offset="0.9418" style="stop-color:#DADAD5;stop-opacity:0.9949"/>
+	<stop  offset="0.9539" style="stop-color:#C4C4C0;stop-opacity:0.9959"/>
+	<stop  offset="0.9645" style="stop-color:#A8A8A5;stop-opacity:0.9969"/>
+	<stop  offset="0.9742" style="stop-color:#888885;stop-opacity:0.9977"/>
+	<stop  offset="0.9831" style="stop-color:#626260;stop-opacity:0.9985"/>
+	<stop  offset="0.9913" style="stop-color:#373736;stop-opacity:0.9992"/>
+	<stop  offset="0.9987" style="stop-color:#090909;stop-opacity:0.9999"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#F7F7F7"/>
+</linearGradient>
+<polygon fill="url(#SVGID_5_)" points="70.5,51.167 62.166,51.167 12.834,47 13,45.334 70.167,49.834 71.25,49.125 71.75,50.625 "/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="5.4995" y1="60.584" x2="81.5" y2="60.584">
+	<stop  offset="0" style="stop-color:#C9C9BF;stop-opacity:0.56"/>
+	<stop  offset="0.0042" style="stop-color:#C5C5BB;stop-opacity:0.5619"/>
+	<stop  offset="0.0499" style="stop-color:#9C9C94;stop-opacity:0.5819"/>
+	<stop  offset="0.0998" style="stop-color:#777771;stop-opacity:0.6039"/>
+	<stop  offset="0.1556" style="stop-color:#575752;stop-opacity:0.6284"/>
+	<stop  offset="0.2171" style="stop-color:#3B3B38;stop-opacity:0.6555"/>
+	<stop  offset="0.2867" style="stop-color:#252524;stop-opacity:0.6861"/>
+	<stop  offset="0.3679" style="stop-color:#141413;stop-opacity:0.7219"/>
+	<stop  offset="0.4683" style="stop-color:#090908;stop-opacity:0.7661"/>
+	<stop  offset="0.6091" style="stop-color:#020202;stop-opacity:0.828"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+</linearGradient>
+<polygon fill="url(#SVGID_6_)" points="81.5,60.833 81.167,63.334 73.001,73.334 72.001,74 68.834,74 65.001,74.167 61.834,74.167 
+	10,68.5 8.834,68.334 7.334,67.5 5.834,65.667 5.5,62.833 6.833,63.833 9.833,64.5 12.833,64.167 12.834,47 62.166,51.167 
+	62.166,69.166 70,69.25 71.75,69 72.875,68.625 74,67.875 "/>
+<g>
+	<polygon fill="#FFFFFF" points="14.951,73.339 28.827,57.106 54.441,60.101 41.928,78.618 	"/>
+	<path fill="#CCCCCC" d="M29.019,57.597l24.609,2.877l-11.913,17.63l-25.893-5.068L29.019,57.597 M28.635,56.616L14.081,73.642
+		l28.06,5.492l13.113-19.406L28.635,56.616L28.635,56.616z"/>
+</g>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="43.6719" y1="40.2466" x2="44.2267" y2="24.3573" gradientTransform="matrix(0.9998 -0.0179 0.0179 0.9998 -0.6087 0.1803)">
+	<stop  offset="0.49" style="stop-color:#E0E0DE"/>
+	<stop  offset="0.6851" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.7553" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.8054" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.8459" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.8806" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.9114" style="stop-color:#898988"/>
+	<stop  offset="0.9392" style="stop-color:#696968"/>
+	<stop  offset="0.9647" style="stop-color:#434343"/>
+	<stop  offset="0.9875" style="stop-color:#1A1A1A"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="1" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="1" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="1" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="1" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="1" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="1" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+</linearGradient>
+<polygon fill="url(#SVGID_7_)" stroke="#FFFFFF" stroke-width="0.75" points="29.852,23.5 29.104,38.224 57.748,39.875 
+	58.729,24.499 57.979,24.512 "/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="25.834" y1="41.75" x2="57.5" y2="41.75">
+	<stop  offset="0" style="stop-color:#C8C8C8;stop-opacity:0.5"/>
+	<stop  offset="0" style="stop-color:#BCBCBC;stop-opacity:0.5192"/>
+	<stop  offset="0" style="stop-color:#838383;stop-opacity:0.6134"/>
+	<stop  offset="0" style="stop-color:#545454;stop-opacity:0.7049"/>
+	<stop  offset="0" style="stop-color:#303030;stop-opacity:0.7914"/>
+	<stop  offset="0" style="stop-color:#151515;stop-opacity:0.8718"/>
+	<stop  offset="0" style="stop-color:#060606;stop-opacity:0.9437"/>
+	<stop  offset="0" style="stop-color:#000000"/>
+	<stop  offset="0.0125" style="stop-color:#1A1A1A"/>
+	<stop  offset="0.0353" style="stop-color:#434343"/>
+	<stop  offset="0.0608" style="stop-color:#696968"/>
+	<stop  offset="0.0886" style="stop-color:#898988"/>
+	<stop  offset="0.1194" style="stop-color:#A5A5A3"/>
+	<stop  offset="0.1541" style="stop-color:#BBBBB9"/>
+	<stop  offset="0.1946" style="stop-color:#CBCBCA"/>
+	<stop  offset="0.2447" style="stop-color:#D7D7D5"/>
+	<stop  offset="0.3149" style="stop-color:#DEDEDC"/>
+	<stop  offset="0.51" style="stop-color:#E0E0DE"/>
+</linearGradient>
+<polygon fill="url(#SVGID_8_)" stroke="#666666" stroke-width="0.5" points="25.834,42.667 29.167,38.833 57.5,40.375 
+	54.667,44.667 "/>
+<polygon fill="#FFFFFF" points="36.375,29.375 36,29.375 35.667,34.875 49.834,35.708 50,29.875 "/>
+<polygon points="23.75,29.375 6.5,42.75 5.375,41.75 22.167,29.5 22.875,29 23.625,28.875 "/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="69.2783" y1="45.7109" x2="83.5552" y2="36.7898">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<polygon fill="url(#SVGID_9_)" points="69.166,44.167 71.334,49 81.5,38.833 81.5,33.5 "/>
+<g>
+	<path d="M30.569,60.508c1.881,0.611,3.933,1.166,5.257,1.355l0.652,1.387c-0.071,0.004-0.2-0.045-0.365-0.183
+		c-1.438-0.296-3.623-0.968-5.577-1.644l-1.485,2.334l4.729,3.011l-0.5,0.786l-4.729-3.012l-1.934,3.036l4.94,3.146l-0.492,0.773
+		l-4.94-3.146l-0.63,0.988l-1.094-0.695l5.595-8.787L30.569,60.508z M43.425,68.324l-4.473,7.024
+		c-0.659,1.036-1.451,0.55-3.962-1.05c0.08-0.268,0.118-0.762,0.092-1.079c0.433,0.292,0.856,0.562,1.215,0.79
+		c1.387,0.883,1.387,0.883,1.554,0.621l3.964-6.227L37.411,65.6l-5.799,9.108l-1.109-0.705l6.3-9.895L43.425,68.324z"/>
+</g>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="71.334" y1="49" x2="71.334" y2="49">
+	<stop  offset="0" style="stop-color:#A8B0B3"/>
+	<stop  offset="0.1726" style="stop-color:#7B8183"/>
+	<stop  offset="0.3672" style="stop-color:#4F5355"/>
+	<stop  offset="0.5533" style="stop-color:#2D2F30"/>
+	<stop  offset="0.7258" style="stop-color:#141516"/>
+	<stop  offset="0.8799" style="stop-color:#050506"/>
+	<stop  offset="1" style="stop-color:#000000"/>
+	<stop  offset="1" style="stop-color:#060606"/>
+	<stop  offset="1" style="stop-color:#151515"/>
+	<stop  offset="1" style="stop-color:#303030"/>
+	<stop  offset="1" style="stop-color:#545454"/>
+	<stop  offset="1" style="stop-color:#838383"/>
+	<stop  offset="1" style="stop-color:#BCBCBC"/>
+	<stop  offset="1" style="stop-color:#C8C8C8"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)" d="M71.334,49"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/group/bld.inf	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+PRJ_EXPORTS
+../engine/inc/directprintband.h    |../../inc/directprintband.h
+../engine/inc/directprintbanduid.h |../../inc/directprintbanduid.h
+
+PRJ_MMPFILES
+
+gnumakefile icons_scalable_dc.mk
+
+DirectPrintApp.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/group/directprintapp.mmp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Use standard macros
+#include <platform_paths.hrh>
+
+// Build target
+TARGET          DirectPrintApp.exe
+TARGETTYPE      exe
+UID             0x100039CE 0x2002BB28
+
+EPOCSTACKSIZE   0x10000           // Min 64kb
+EPOCHEAPSIZE    0x20000 0x1000000 // Min 128kb, max 16Mb
+
+sourcepath      ../src
+source          directprintapp.cpp
+source          directprintappapplication.cpp
+source          directprintappappui.cpp
+source          directprintappdocument.cpp
+source          directprintmodel.cpp
+source          directprintbearermgr.cpp
+source			directprintprinterdata.cpp
+source			directprintbearerdata.cpp
+source			directprintproperty.cpp
+source			directprintmsgutil.cpp
+source			directprintuipluginmgr.cpp
+source          directprintprinterinforeader.cpp
+
+sourcepath      ../ui/src
+source          directprintlistbox.cpp
+source          directprintsettinglistbox.cpp
+source          directprintlistview.cpp
+source          directprintmainview.cpp
+source          directprintpreviewview.cpp
+source          directprintpropertyview.cpp
+source          directprintsearchresultview.cpp
+source          directprintsettingview.cpp
+source          directprintviewbase.cpp
+source          directprintpreviewcontrol.cpp
+
+sourcepath      ../engine/src
+source          directprintengine.cpp
+source          directprintfloatcapability.cpp
+source          directprintlistcapability.cpp
+source          directprinttintcapability.cpp
+source          directprinttextcapability.cpp
+source          directprintprintsettings.cpp
+source          directprintsettingsconverter.cpp
+
+
+SOURCEPATH      ../data
+
+START RESOURCE  DirectPrintApp.rss
+HEADER
+TARGET DirectPrintApp
+TARGETPATH resource/apps
+END //RESOURCE
+
+START RESOURCE  DirectPrintApp_reg.rss
+TARGET DirectPrintApp_reg
+TARGETPATH    /private/10003a3f/apps
+END //RESOURCE
+
+
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../ui/inc
+USERINCLUDE     ../engine/inc
+USERINCLUDE     ../../inc
+USERINCLUDE     ../../ImagePrintLibrary/inc
+
+SYSTEMINCLUDE   /epoc32/include/ecom
+
+APP_LAYER_SYSTEMINCLUDE 
+
+LIBRARY         euser.lib
+LIBRARY         apparc.lib
+LIBRARY         cone.lib
+LIBRARY         eikcore.lib
+LIBRARY         avkon.lib
+LIBRARY         ecom.lib		// REComSession
+LIBRARY         commonengine.lib
+LIBRARY         efsrv.lib 
+LIBRARY         estor.lib
+LIBRARY         aknnotify.lib
+LIBRARY         eikdlg.lib
+LIBRARY         bafl.lib
+LIBRARY         insock.lib
+LIBRARY         eikctl.lib
+LIBRARY         servicehandler.lib
+LIBRARY         ws32.lib
+LIBRARY         gdi.lib 
+LIBRARY         print.lib       // CPrintSetup
+LIBRARY         prev.lib        // CPrintPreviewImage
+LIBRARY         fbscli.lib		// CFbsBitmap
+LIBRARY         etext.lib       // CRichText
+LIBRARY         pdrprt.lib      // CFilePrinterPort
+LIBRARY         field.lib       // CPageNumField
+LIBRARY         eikcoctl.lib    // CEikBorderedControl
+LIBRARY         egul.lib        // TGulBorder
+
+LIBRARY         centralrepository.lib // CRepository
+
+LIBRARY         directprintclient.lib // CDirectPrintClient
+
+LIBRARY         XmlEngineDom.lib
+
+STATICLIBRARY   clog.lib
+LIBRARY			flogger.lib
+
+LIBRARY         platformenv.lib
+
+//not use LIBRARY   featmgr.lib
+
+LANG SC
+
+VENDORID          0
+SECUREID          0x2002BB28
+CAPABILITY        ALL -TCB
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/group/icons_scalable_dc.mk	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,59 @@
+# ============================================================================
+# Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+#
+# Contributors:
+#
+# Description: This is file for creating .mif file (scalable icon)
+# 
+# ============================================================================
+
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\resource\apps
+ICONTARGETFILENAME=$(TARGETDIR)\DirectPrintApp.mif
+
+ICONDIR=..\gfx
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN :
+	@echo ...Deleting $(ICONTARGETFILENAME)
+	if exist $(ICONTARGETFILENAME) del /q /f $(ICONTARGETFILENAME)
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+RESOURCE : $(ICONTARGETFILENAME)
+
+$(ICONTARGETFILENAME) : $(ICONDIR)\qgn_menu_DirectPrintApp.svg
+	mifconv $(ICONTARGETFILENAME) \
+		/c32 $(ICONDIR)\qgn_menu_DirectPrintApp.svg
+
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintapp.hrh	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+#ifndef __DIRECTPRINTAPP_HRH__
+#define __DIRECTPRINTAPP_HRH__
+
+#define _UID3 0x2002BB28
+
+enum TDirectPrintViewIds
+	{
+	EDirectPrintMainViewId = 1,
+	EDirectPrintPrinterListViewId,
+	EDirectPrintSearchResultViewId,
+	EDirectPrintPrinterSettingViewId,
+	EDirectPrintPreviewViewId,
+	EDirectPrintPropertyViewId
+	};
+
+// DirectPrintApp enumerate command codes
+enum TDirectPrintCommandIds
+	{
+	EDirectPrintCmdIdMainViewPrint = 0x6001, // start value must not be 0
+	EDirectPrintCmdIdMainViewPreview,
+	EDirectPrintCmdIdMainViewPrinterList,
+	EDirectPrintCmdIdMainViewPrinterSetting,
+	EDirectPrintCmdIdMainViewPropertySetting,
+
+	EDirectPrintCmdIdMainViewHelp,
+	EDirectPrintCmdIdMainViewAbout,
+	EDirectPrintCmdIdMainViewExit,
+
+	EDirectPrintCmdIdPrinterListViewSearch,
+	EDirectPrintCmdIdPrinterListViewNew,
+	EDirectPrintCmdIdPrinterListViewEdit,
+	EDirectPrintCmdIdPrinterListViewDelete,
+	EDirectPrintCmdIdPrinterListViewDone,
+
+	EDirectPrintCmdIdSearchResultViewSearch,
+	EDirectPrintCmdIdSearchResultViewSelect,
+	EDirectPrintCmdIdSearchResultViewCancel,
+
+	EDirectPrintCmdIdPrinterSettingViewChange,
+	EDirectPrintCmdIdPrinterSettingViewBack,
+
+	EDirectPrintCmdIdPropertySettingViewChange,
+	EDirectPrintCmdIdPropertySettingViewPrint,
+	EDirectPrintCmdIdPropertySettingViewPreview,
+	EDirectPrintCmdIdPropertySettingViewBack,
+
+	EDirectPrintCmdIdPreviewViewPrint,
+	EDirectPrintCmdIdPreviewViewExpand,
+	EDirectPrintCmdIdPreviewViewReduce,
+	EDirectPrintCmdIdPreviewViewBack
+	};
+
+enum TDirectPrintPropertyTabIds
+	{
+	EDirectPrintPaperSettingTab = 0,
+	EDirectPrintPageSettingTab,
+	EDirectPrintMarginSettingTab,
+	EDirectPrintHeaderSettingTab,
+	EDirectPrintFooterSettingTab
+	};
+
+enum TDirectPrintPropertyItemIds
+	{
+	EDirectPrintPaperPaperSize = 0,
+	EDirectPrintPaperOrientation,
+	EDirectPrintPaperHight,
+	EDirectPrintPaperWidth,
+	EDirectPrintPagePrintPage,
+	EDirectPrintPagePrintRange,
+	EDirectPrintPageCopy,
+	EDirectPrintMarginLeftMargin,
+	EDirectPrintMarginRightMargin,
+	EDirectPrintMarginTopMargin,
+	EDirectPrintMarginBottomMargin,
+	EDirectPrintHeaderHeaderText,
+	EDirectPrintHeaderDistance,
+	EDirectPrintHeaderFirstPage,
+	EDirectPrintFooterFooterText,
+	EDirectPrintFooterDistance,
+	EDirectPrintFooterFirstPage,
+	EDirectPrintPropertyItemEnd
+	};
+
+enum TDirectPrintCtrlIds
+	{
+	EDirectPrintCtrlIdPrintProgressNote = 1,
+	EDirectPrintCtrlIdSearchProgressNote
+	};
+
+#endif // __DIRECTPRINTAPP_HRH__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintapp.pan	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+#ifndef __DIRECTPRINTAPP_PAN__
+#define __DIRECTPRINTAPP_PAN__
+
+#include <e32std.h>
+
+/** DirectPrintApp application panic codes */
+enum TDirectPrintAppPanics
+	{
+	EDirectPrintAppUi = 1,
+	EDirectPrintNoObserver,
+	EDirectPrintNullPointer,
+
+	EDirectPrintEnd
+	};
+
+inline void Panic(TDirectPrintAppPanics aReason)
+	{
+	_LIT(applicationName, "DirectPrintApp");
+	User::Panic(applicationName, aReason);
+	}
+
+#endif // __DIRECTPRINTAPP_PAN__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintappapplication.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTAPPAPPLICATION_H__
+#define __DIRECTPRINTAPPAPPLICATION_H__
+
+// System includes
+#include <aknapp.h>
+ 
+// User includes
+#include "DirectPrintApp.hrh"
+
+// UID for the application;
+// this should correspond to the uid defined in the mmp file
+const TUid KUidDirectPrintAppApp =
+	{
+	_UID3
+	};
+
+// CLASS DECLARATION
+
+/**
+ * CDirectPrintAppApplication application class.
+ * Provides factory to create concrete document object.
+ * An instance of CDirectPrintAppApplication is the application part of the
+ * AVKON application framework for the DirectPrintApp example application.
+ */
+class CDirectPrintAppApplication : public CAknApplication
+	{
+public:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, AppDllUid.
+	 * @return Application's UID (KUidDirectPrintAppApp).
+	 */
+	TUid AppDllUid() const;
+
+protected:
+	// Functions from base classes
+
+	/**
+	 * From CApaApplication, CreateDocumentL.
+	 * Creates CDirectPrintAppDocument document object. The returned
+	 * pointer in not owned by the CDirectPrintAppApplication object.
+	 * @return A pointer to the created document object.
+	 */
+	CApaDocument* CreateDocumentL();
+	};
+
+#endif // __DIRECTPRINTAPPAPPLICATION_H__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintappappui.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTAPPAPPUI_H__
+#define __DIRECTPRINTAPPAPPUI_H__
+
+// System includes
+#include <aknviewappui.h>
+#include <aknnavide.h>
+#include <AknTabObserver.h> 
+#include <e32property.h>
+#include <xmlengdocument.h>				// RXmlEngDocument
+#include <xmlengdomparser.h>			// RXmlEngDOMParser
+#include <xmlengdomimplementation.h>	// RXmlEngDOMImplementation
+
+// User includes
+#include "DirectPrintEngineObserver.h"
+#include "DirectPrintBearerMngObserver.h"
+
+// Forward declarations
+class CDirectPrintMainView;
+class CDirectPrintAppDocument;
+class CDirectPrintEngine;
+class CDirectPrintBearerMgr;
+class CDirectPrintUiPluginMgr;
+
+// Class declaration
+class CDirectPrintAppAppUi : public CAknViewAppUi,
+							 public MAknTabObserver,
+							 public MDirectPrintEngineObserver,
+							 public MDirectPrintBearerMngObserver
+	{
+public: // Constructors and destructor
+	CDirectPrintAppAppUi();
+	virtual ~CDirectPrintAppAppUi();
+	void ConstructL();
+
+private:
+	// Functions from base classes
+
+	/**
+	 * From CEikAppUi, HandleCommandL.
+	 * Takes care of command handling.
+	 * @param aCommand Command to be handled.
+	 */
+	void HandleCommandL( TInt aCommand );
+
+	/**
+	 * From CEikAppUi, HandleResourceChangeL.
+	 * Handles a change to the application's resources.
+	 * @param aType Type of resources.
+	 */
+	void HandleResourceChangeL( TInt aType );
+
+public: // from MAknTabObserver
+	/**
+	 * From MAknTabObserver, TabChangedL.
+	 * Handles a change to the tabs.
+	 * @param aIndex Index of tabs.
+	 */
+	void TabChangedL(TInt aIndex);
+
+public: // from MDirectPrintEngineObserver
+	/**
+	 * From MDirectPrintEngineObserver, HandlePrintEventL.
+	 * Handles user events.
+	 * @param aEvent The ID of the event.
+	 * @param aError The ID of the error.
+	 * @param aParam Parameter.
+	 */
+	void HandlePrintEventL(TDirectPrintEngineEvents aEvent,
+						   TInt aError, 
+						   const TDesC& aParam);
+
+public: // from MDirectPrintBearerMngObserver
+	/**
+	 * From MDirectPrintBearerMngObserver, HandleBearerMngEventL.
+	 * Handles user events.
+	 * @param aEvent The ID of the event.
+	 * @param aError Error code.
+	 * @param aParam Parameter.
+	 */
+	void HandleBearerMngEventL(TDirectPrintBearerMngEvents aEvent,
+						   TInt aError, 
+						   const TDesC& aParam);
+
+	/**
+	 * From MDirectPrintBearerMngObserver, PrintJobProgressEvent.
+	 * Handles user events.
+	 * @param aStatus The ID of the status.
+	 * @param aPercentCompletion Percentage of progress.
+	 * @param aJobStateCode The ID of job states.
+	 */
+	void PrintJobProgressEvent( TInt aStatus, 
+							TInt aPercentCompletion, 
+							TInt aJobStateCode );
+							
+
+	/**
+	 * From MDirectPrintBearerMngObserver, PrintJobErrorEvent.
+	 * Handles user events.
+	 * @param aError The ID of the error.
+	 * @param aErrorStringCode The ID of error strings.
+	 */
+	void PrintJobErrorEvent( TInt aError, 
+							TInt aErrorStringCode );
+							
+
+	/**
+	 * From MDirectPrintBearerMngObserver, PrinterStatusEvent.
+	 * Handles user events.
+	 * @param aError The ID of the error.
+	 * @param aErrorStringCode The ID of error strings.
+	 */
+	void PrinterStatusEvent( TInt aError, 
+							TInt aErrorStringCode );
+
+	/**
+	 * From MDirectPrintBearerMngObserver, PreviewImageEvent.
+	 * Handles user events.
+	 * @param aFsBitmapHandle The Handle of the bitmap.
+	 */
+	void PreviewImageEvent( TInt aFsBitmapHandle );
+
+	/**
+	 * From MDirectPrintBearerMngObserver, ShowMessageL.
+	 * Show messages.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 */
+	void ShowMessageL( TInt aMsgLine1Code, 
+							TInt aMsgLine2Code );
+
+	/**
+	 * From MDirectPrintBearerMngObserver, AskYesNoQuestionL.
+	 * Show Yes/No question.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 * @return ETrue is Yes. EFalse is No.
+	 */
+	TBool AskYesNoQuestionL( TInt aMsgLine1Code, 
+							TInt aMsgLine2Code );
+
+	/**
+	 * From MDirectPrintBearerMngObserver, AskForInputL.
+	 * input.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 * @return Inputed strings.
+	 */
+	const TDesC& AskForInputL( TInt aMsgLine1Code, 
+							TInt aMsgLine2Code );
+
+public:
+	/**
+	 * engine object.
+	 * 
+	 * @return Pointer to a engine object.
+	 */
+	inline CDirectPrintEngine* Engine() {return iEngine;}
+
+	/**
+	 * document object.
+	 * 
+	 * @return Pointer to a document object.
+	 */
+	inline CDirectPrintAppDocument* Doc() {return iDoc;}
+
+	/**
+	 * Plugin manager object.
+	 * 
+	 * @return Reference to a plugin manager object.
+	 */
+	inline CDirectPrintUiPluginMgr& PluginMgr() {return *iPluginMgr;}
+
+	/**
+	 * Bearer manager object.
+	 * 
+	 * @return Pointer to a bearer manager object.
+	 */
+	inline CDirectPrintBearerMgr* BearerMgr() {return iBearerMgr;}
+
+private:
+	void MakeNaviPaneVisibleL(TBool aVisible);
+	void MakeStatusPaneVisible(TBool aVisible);
+
+	void InitializeViewsL();
+	void LoadParamL();
+	void GetParamFromAiwProviderL();
+
+	void InitializeEngineL();
+	void InitializeBearerMngL();
+	void InitializePluginMgrL();
+
+private: // Data
+	// Used for navigation pane text
+	CAknNavigationDecorator* iNaviDecorator;
+
+	// Document class
+	CDirectPrintAppDocument* iDoc;
+
+	// previous view id
+	TUid iBackViewUid;
+
+	// For AIW calls;
+	TInt iAiwState;
+
+	// publish/subscribe of aiw print
+	RProperty iAiwCall;
+
+	// print engine
+	CDirectPrintEngine* iEngine;
+	
+	// bearer manager
+	CDirectPrintBearerMgr* iBearerMgr;
+
+	// param xml object
+	RXmlEngDocument iXmlEngDoc;
+    RXmlEngDOMImplementation iXmlDomImpl;
+    RXmlEngDOMParser iXmlParser;
+
+	HBufC8*	iXmlParam;
+
+	CDirectPrintUiPluginMgr* iPluginMgr;
+	};
+
+#endif // __DIRECTPRINTAPPAPPUI_H__
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintappdocument.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTAPPDOCUMENT_h__
+#define __DIRECTPRINTAPPDOCUMENT_h__
+
+// System includes
+#include <akndoc.h>
+
+// Forward declarations
+class CDirectPrintAppAppUi;
+class CEikApplication;
+
+// Class declaration
+class CDirectPrintModel;
+
+/**
+ * CDirectPrintAppDocument application class.
+ * An instance of class CDirectPrintAppDocument is the Document part of the
+ * AVKON application framework for the DirectPrintApp example application.
+ */
+class CDirectPrintAppDocument : public CAknDocument
+	{
+public:
+	// Constructors and destructor
+
+	/**
+	 * NewL.
+	 * Two-phased constructor.
+	 * Construct a CDirectPrintAppDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CDirectPrintAppDocument.
+	 */
+	static CDirectPrintAppDocument* NewL(CEikApplication& aApp);
+
+	/**
+	 * NewLC.
+	 * Two-phased constructor.
+	 * Construct a CDirectPrintAppDocument for the AVKON application aApp
+	 * using two phase construction, and return a pointer
+	 * to the created object.
+	 * @param aApp Application creating this document.
+	 * @return A pointer to the created instance of CDirectPrintAppDocument.
+	 */
+	static CDirectPrintAppDocument* NewLC(CEikApplication& aApp);
+
+	/**
+	 * ~CDirectPrintAppDocument
+	 * Virtual Destructor.
+	 */
+	virtual ~CDirectPrintAppDocument();
+
+public:
+	// Functions from base classes
+
+	/**
+	 * CreateAppUiL
+	 * From CEikDocument, CreateAppUiL.
+	 * Create a CDirectPrintAppAppUi object and return a pointer to it.
+	 * The object returned is owned by the Uikon framework.
+	 * @return Pointer to created instance of AppUi.
+	 */
+	CEikAppUi* CreateAppUiL();
+public:
+	// New functions
+	CDirectPrintModel& Model();
+
+private:
+	// Constructors
+
+	/**
+	 * ConstructL
+	 * 2nd phase constructor.
+	 */
+	void ConstructL();
+
+	/**
+	 * CDirectPrintAppDocument.
+	 * C++ default constructor.
+	 * @param aApp Application creating this document.
+	 */
+	CDirectPrintAppDocument(CEikApplication& aApp);
+
+
+private:
+	/** Model class */
+	CDirectPrintModel*  iModel;
+
+
+	};
+
+#endif // __DIRECTPRINTAPPDOCUMENT_h__
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintbearerdata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTBEARERDATA_H__
+#define __DIRECTPRINTBEARERDATA_H__
+
+// System includes
+#include <e32base.h>
+#include <in_sock.h>
+
+// User includes
+#include "DirectPrintDef.h"
+
+// Forward declarations
+class RReadStream;
+class RWriteStream;
+
+// Class declaration
+/**
+ *  Bearer data class
+ *  more_complete_description
+ */
+class TDirectPrintBearerData
+	{
+public:
+	/**
+	 * Internalize operation.
+	 *
+	 * @param aStream ReadStream.
+	 */
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+
+	/**
+	 * Externalize operation.
+	 *
+	 * @param aStream WriteStream.
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream)const;
+
+	/**
+	 * Substitution operator.
+	 *
+	 * @param aData Bearer data.
+	 * @return Bearer data.
+	 */
+	IMPORT_C TDirectPrintBearerData& operator=(const TDirectPrintBearerData& aData);
+
+public:
+	/** The ID of printer data. */
+	TInt iPrinterId;
+	/** The ID of bearer data. */
+	TInt iBearerId;
+	/** Name of bearer. */
+	TBuf<KDirectPrintNameLength> iBearerName;
+	/** AccessPoint. */
+	TBuf<KDirectPrintNameLength> iAccessPoint;
+	/** HostName. */
+	TBuf<KDirectPrintNameLength> iHostName;
+	/** IPAddress of host. */
+	TInetAddr iHostIp;
+	/** Number of port. */
+	TInt iPort;
+	/** UserName. */
+	TBuf<KDirectPrintNameLength> iUserName;
+	/** Name of que. */
+	TBuf<KDirectPrintNameLength> iQueName;
+	};
+
+typedef RArray<TDirectPrintBearerData> RDPBearerDataArray;
+
+#endif // __DIRECTPRINTBEARERDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintbearermgr.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTBEARERMGR_H__
+#define __DIRECTPRINTBEARERMGR_H__
+
+// System includes
+#include <e32base.h>
+ 
+// User includes
+#include "directprintbearermngobserver.h"
+#include "directprintclient.h"
+#include "directprintjobguarddata.h"
+
+// Forward declarations
+class CDirectPrintModel;
+class CDirectPrintPrintSettings;
+
+// Class declaration
+/**
+ *  Bearer manager class
+ *  more_complete_description
+ */
+class CDirectPrintBearerMgr : public CActive
+	{
+public:
+	/** Status of bearer manager */
+	enum TBearerMngStatus
+		{
+		EBearerMngNotConnected = 0,	// (0)
+		EBearerMngConnected,		// (1)
+		EBearerMngCreatingJob,		// (2)
+		EBearerMngPrinting,			// (3)
+		EBearerMngClosing,			// (4)
+		EBearerMngCanceling,		// (5)
+		};
+
+public:
+	/** Constructors */
+	static CDirectPrintBearerMgr* NewL(MDirectPrintBearerMngObserver* aObserver,
+										CDirectPrintModel& aModel);
+	static CDirectPrintBearerMgr* NewLC(MDirectPrintBearerMngObserver* aObserver,
+										CDirectPrintModel& aModel);
+	/** Destructor */
+	~CDirectPrintBearerMgr();
+
+public:
+	/**
+	 * Create print job.
+	 */
+	void CreateJobL();
+	/**
+	 * Submit print job.
+	 */
+	void SubmitPrintJobL();
+	/**
+	 * Close session.
+	 */
+	void CloseSession();
+
+	/**
+	 * Get status of bearer manager.
+	 *
+	 * @return Status of bearer manager
+	 */
+	TBearerMngStatus BearerStatus();
+
+	TInt SupportedProtocols();
+
+	TInt GetProtocolNames(RSelectItemArray& aNames);
+
+	void InitCapabilitiesL(TInt aIndex);
+
+	TInt GetJobSetting(TInt aCapabilityID, TInt& aValue);
+
+	TInt SetJobSetting(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability);
+
+	void SetJobSettings();
+
+	CDirectPrintPrintSettings* PrinterSettingsL();
+
+protected:
+	CDirectPrintBearerMgr(MDirectPrintBearerMngObserver* aObserver,
+							CDirectPrintModel& aModel);
+	void ConstructL();
+
+private: // from CActive
+
+	void RunL();
+	void DoCancel();
+
+private:
+	void SetBearerStatus(TBearerMngStatus aStatus);
+
+	TInt CreatePrinterUid(TInt aIndex);
+
+private:
+	/** Pointer to bearer manager observer. */
+	MDirectPrintBearerMngObserver* iObserver;
+	/** Bearer object. */
+	RDirectPrintClient iBearer;
+	/** Job guard data. */
+	TDirectPrintJobGuardData iJobGuardData;
+	/** Reference to model class. */
+	CDirectPrintModel& iModel;
+
+	/** Status of bearer manager. */
+	TBearerMngStatus iBearerStatus;
+
+	/** Printer settings. */
+	CDirectPrintPrintSettings* iPrintSettings;
+	};
+
+#endif // __DIRECTPRINTBEARERMGR_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintbearermngobserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTBEARERMNGOBSERVER_H__
+#define __DIRECTPRINTBEARERMNGOBSERVER_H__
+
+// System includes
+#include <e32base.h>
+
+// Class declaration
+/**
+ *  Bearer manager observer mix-in class
+ *  more_complete_description
+ */
+class MDirectPrintBearerMngObserver
+	{
+public:
+	/** The ID of bearer event. */
+	enum TDirectPrintBearerMngEvents
+		{
+		EDirectPrintBearerMngErrorConnectBearer,
+		EDirectPrintBearerMngConnectedBearer,
+		// add any events, if needed
+
+		// end of event
+		EDirectPrintBearerMngEventEnd
+		};
+
+public:
+	/**
+	 * Handles user events.
+	 * @param aEvent The ID of the event.
+	 * @param aError Error code.
+	 * @param aParam Parameter.
+	 */
+	virtual void HandleBearerMngEventL(
+									TDirectPrintBearerMngEvents aEvent,
+									TInt aError,
+									const TDesC& aParam) = 0;
+
+	/**
+	 * Handles user events.
+	 * @param aStatus The ID of the status.
+	 * @param aPercentCompletion Percentage of progress.
+	 * @param aJobStateCode The ID of job states.
+	 */
+	virtual void PrintJobProgressEvent( TInt aStatus, 
+									TInt aPercentCompletion, 
+									TInt aJobStateCode ) = 0;
+									
+	/**
+	 * Handles user events.
+	 * @param aError The ID of the error.
+	 * @param aErrorStringCode The ID of error strings.
+	 */
+	virtual void PrintJobErrorEvent( TInt aError, 
+									TInt aErrorStringCode ) = 0;
+									
+	/**
+	 * Handles user events.
+	 * @param aError The ID of the error.
+	 * @param aErrorStringCode The ID of error strings.
+	 */
+	virtual void PrinterStatusEvent( TInt aError, 
+									TInt aErrorStringCode ) = 0;
+									
+	/**
+	 * Handles user events.
+	 * @param aFsBitmapHandle The Handle of the bitmap.
+	 */
+	virtual void PreviewImageEvent( TInt aFsBitmapHandle ) = 0;
+	
+	/**
+	 * Show messages.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 */
+	virtual void ShowMessageL( TInt aMsgLine1Code, 
+									TInt aMsgLine2Code ) = 0;
+									
+	/**
+	 * Show Yes/No question.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 * @return ETrue is Yes. EFalse is No.
+	 */
+	virtual TBool AskYesNoQuestionL( TInt aMsgLine1Code, 
+									TInt aMsgLine2Code ) = 0;
+									
+	/**
+	 * input.
+	 * @param aMsgLine1Code The ID of message.
+	 * @param aMsgLine2Code The ID of message.
+	 * @return Inputed strings.
+	 */
+	virtual const TDesC& AskForInputL( TInt aMsgLine1Code, 
+									TInt aMsgLine2Code ) = 0;
+	};
+
+#endif // __DIRECTPRINTBEARERMNGOBSERVER_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintdef.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTDEF_H__
+#define __DIRECTPRINTDEF_H__
+
+//Constants
+/**  Max length of string data. */
+const TInt KDirectPrintNameLength = 50;
+
+#endif // __DIRECTPRINTDEF_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintmodel.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* This model class for DirectPrint data managemrnt
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTMODEL_H__
+#define __DIRECTPRINTMODEL_H__
+
+// System includes
+#include <e32base.h>
+#include <f32file.h>
+#include <prninf.h>
+
+// User includes
+#include "directprintprinterdata.h"
+#include "directprintbearerdata.h"
+#include "directprintpropertydata.h"
+#include "directprintproperty.h"
+
+// Forward declarations
+class CDirectPrintPrinterInfoReader;
+
+// Class declaration
+/**
+ *  Model class
+ *  more_complete_description
+ */
+class CDirectPrintModel : public CBase
+	{
+public:
+	/** Constructors */
+	static CDirectPrintModel* NewL();
+	static CDirectPrintModel* NewLC();
+	/** Destructor */
+	~CDirectPrintModel();
+
+	/**
+	 * Initialize data.
+	 */
+	void InitializeDataL();
+	/**
+	 * Internalize data.
+	 */
+	void InternalizeDataL();
+	/**
+	 * Externalize data.
+	 */
+	void ExternalizeDataL();
+
+	/**
+	 * Get printer data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @param aData printer data
+	 */
+	void GetPrinterDataL(TInt aIndex, TDirectPrintPrinterData& aData);
+	/**
+	 * Get bearer data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @param aData bearer data
+	 */
+	void GetBearerDataL(TInt aIndex, TDirectPrintBearerData& aData);
+	/**
+	 * Get current bearer data.
+	 *
+	 * @param aData bearer data
+	 */
+	void GetCurrentBearerDataL(TDirectPrintBearerData& aData);
+	/**
+	 * Get selected bearer data.
+	 *
+	 * @param aData bearer data
+	 */
+	void GetSelectedBearerDataL(TDirectPrintBearerData& aData);
+	/**
+	 * Get property data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @return property data
+	 */
+	CPrinterProperty* GetPrinterPropertyL(TInt aIndex);
+	/**
+	 * Get current property data.
+	 *
+	 * @param aAppUid Application UID.
+	 * @return property data
+	 */
+	CPrinterProperty* GetCurrentPrinterPropertyL(TUid aAppUid);
+	/**
+	 * Get the id of current printer data.
+	 *
+	 * @return The id of printer data
+	 */
+	TInt GetCurrentPrinterIdL();
+	/**
+	 * Get the index of current printer data.
+	 *
+	 * @return The index of data array.
+	 */
+	TInt CurrentPrinter();
+	/**
+	 * Get the index of current bearer data.
+	 *
+	 * @return The index of data array.
+	 */
+	TInt CurrentBearer();
+	/**
+	 * Get the index of current property data.
+	 *
+	 * @return The index of data array.
+	 */
+	TInt CurrentProperty();
+	/**
+	 * Get the index of selected printer data.
+	 *
+	 * @return The index of data array.
+	 */
+	TInt SelectPrinter();
+	/**
+	 * Get the count of printer data.
+	 *
+	 * @return The count of data.
+	 */
+	TInt PrinterCount();
+	/**
+	 * Get the count of bearer data.
+	 *
+	 * @return The count of data.
+	 */
+	TInt BearerCount();
+	/**
+	 * Get the count of property data.
+	 *
+	 * @return The count of data.
+	 */
+	TInt PropertyCount();
+
+	/**
+	 * Set printer data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @param aData printer data
+	 */
+	void SetPrinterDataL(TInt aIndex, const TDirectPrintPrinterData& aData);
+	/**
+	 * Set printer data.
+	 *
+	 * @param aData printer data
+	 */
+	void SetPrinterDataL(const TDirectPrintPrinterData& aData);
+	/**
+	 * Set bearer data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @param aData bearer data
+	 */
+	void SetBearerDataL(TInt aIndex, const TDirectPrintBearerData& aData);
+	/**
+	 * Set bearer data.
+	 *
+	 * @param aData bearer data
+	 */
+	void SetBearerDataL(const TDirectPrintBearerData& aData);
+	/**
+	 * Set property data.
+	 *
+	 * @param aIndex The index of data array.
+	 * @param aProperty property data
+	 */
+	void SetPrinterPropertyL(TInt aIndex, CPrinterProperty* aProperty);
+	/**
+	 * Set property data.
+	 *
+	 * @param aProperty property data
+	 */
+	void SetPrinterPropertyL(CPrinterProperty* aProperty);
+	/**
+	 * Set the index of current printer data.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void SetCurrentPrinter(TInt aIndex);
+	/**
+	 * Set the index of current bearer data.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void SetCurrentBearer(TInt aIndex);
+	/**
+	 * Set the index of current property data.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void SetCurrentProperty(TInt aIndex);
+	/**
+	 * Set the index of selected printer data.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void SetSelectPrinter(TInt aIndex);
+
+	/**
+	 * Add printer data.
+	 *
+	 * @param aData printer data
+	 */
+	void AddPrinterDataL(const TDirectPrintPrinterData& aData);
+	/**
+	 * Add bearer data.
+	 *
+	 * @param aData bearer data
+	 */
+	void AddBearerDataL(const TDirectPrintBearerData& aData);
+	/**
+	 * Add property data.
+	 *
+	 * @param aProperty property data
+	 */
+	void AddPrinterPropertyL(CPrinterProperty* aProperty);
+
+	/**
+	 * Remove printer data from data array.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void RemovePrinterDataL(TInt aIndex);
+	/**
+	 * Remove bearer data from data array.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void RemoveBearerDataL(TInt aIndex);
+	/**
+	 * Remove property data from data array.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void RemovePrinterPropertyL(TInt aIndex);
+
+	/**
+	 * Move printer data to top of data array.
+	 *
+	 * @param aIndex The index of data array.
+	 */
+	void MoveTopPrinterDataL(TInt aIndex);
+
+	/**
+	 * Get new data flag.
+	 *
+	 * @return new data flag.
+	 */
+	inline TBool IsNewData() {return iIsNewData;};
+	/**
+	 * Set new data flag.
+	 *
+	 * @param aFlag new data flag.
+	 */
+	inline void SetIsNewData(TBool aFlag) {iIsNewData = aFlag;};
+	/**
+	 * Generate new printer id.
+	 *
+	 * @return new data flag.
+	 */
+	inline TInt NewPrinterId() {return ++iMaxPrinterId;};
+
+	/**
+	 * Get uid of plugin.
+	 *
+	 * @return uid of plugin.
+	 */
+	TUid SettingUIPluginUidL();
+
+protected:
+	CDirectPrintModel();
+	void ConstructL();
+
+private:
+	/** File server session. */
+	RFs iFs;
+
+	/** Printer data Array. */
+	RDPPrinterDataArray iPrinters;
+	/** Bearer data Array. */
+	RDPBearerDataArray iBearers;
+	/** Property data Array. */
+	RPrinterPropertyArray iProperties;
+	/** The index of current printer data. */
+	TInt iCurrentPrinter;
+	/** The index of current bearer datay. */
+	TInt iCurrentBearer;
+	/** The index of current property data. */
+	TInt iCurrentProperty;
+	/** The index of selected printer data. */
+	TInt iSelectPrinter;
+
+	/** New data flag. */
+	TBool iIsNewData;
+	/** Printer id. */
+	TInt iMaxPrinterId;
+
+	CDirectPrintPrinterInfoReader* iPrinterInfoReader;
+	};
+
+#endif // __DIRECTPRINTMODEL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintmsgutil.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* This class is the message utility class of DirectPrint
+*
+*/
+
+#ifndef __DIRECTPRINTMSGUTIL_H__
+#define __DIRECTPRINTMSGUTIL_H__
+
+// System includes
+#include <e32base.h>
+#include <f32file.h>
+
+// User includes
+
+// Forward declarations
+
+// Class declaration
+/**
+ *  one_line_short_description
+ *  more_complete_description
+ *
+ */
+class CDirectPrintMsgUtil : public CBase
+	{
+public:
+	static CDirectPrintMsgUtil* NewL();
+	static CDirectPrintMsgUtil* NewLC();
+	~CDirectPrintMsgUtil();
+
+    /**
+    * Displays error note
+    * @param aResourceId Resource id for note text.
+    */
+    static void DisplayErrorNoteL( TInt aResourceId );
+
+protected:
+	CDirectPrintMsgUtil();
+	void ConstructL();
+
+private:
+	};
+
+#endif // __DIRECTPRINTMSGUTIL_H__
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintprinterdata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPRINTERDATA_H__
+#define __DIRECTPRINTPRINTERDATA_H__
+
+// System includes
+#include <e32cmn.h>
+
+// User includes
+#include "DirectPrintDef.h"
+
+// Forward declarations
+class RReadStream;
+class RWriteStream;
+
+// Class declaration
+/**
+ *  Printer data class
+ *  more_complete_description
+ */
+class TDirectPrintPrinterData
+	{
+public:
+	/**
+	 * Internalize operation.
+	 *
+	 * @param aStream ReadStream.
+	 */
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+
+	/**
+	 * Externalize operation.
+	 *
+	 * @param aStream WriteStream.
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream)const;
+
+	/**
+	 * Substitution operator.
+	 *
+	 * @param aData Printer data.
+	 * @return Printer data.
+	 */
+	IMPORT_C TDirectPrintPrinterData& operator=(const TDirectPrintPrinterData& aData);
+
+public:
+	/** The ID of printer data. */
+	TInt iPrinterId;
+	/** Name of printer. */
+	TBuf<KDirectPrintNameLength> iPrinterName;
+	/** The UID of printer driver. */
+	TUid iPrinterDriver;
+	/** Name of printer driver. */
+	TBuf<KDirectPrintNameLength> iDriverName;
+	/** The ID of printer type. */
+	TInt iPrinterType;
+	/** Name of printer type. */
+	TBuf<KDirectPrintNameLength> iTypeName;
+	};
+
+typedef RArray<TDirectPrintPrinterData> RDPPrinterDataArray;
+
+#endif // __DIRECTPRINTPRINTERDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintprinterinforeader.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Printer information reader class
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPRINTERINFOREADER_H__
+#define __DIRECTPRINTPRINTERINFOREADER_H__
+
+// System includes
+#include <e32base.h>
+#include <xmlengdocument.h>				// RXmlEngDocument
+#include <xmlengdomparser.h>			// RXmlEngDOMParser
+#include <xmlengdomimplementation.h>	// RXmlEngDOMImplementation
+
+// User includes
+
+// Forward declarations
+class CDirectPrintModel;
+
+// Class declaration
+/**
+ *  Printer information reader class
+ *  more_complete_description
+ */
+class CDirectPrintPrinterInfoReader : public CBase
+	{
+public:
+	/** Constructors */
+	static CDirectPrintPrinterInfoReader* NewL(CDirectPrintModel& aModel);
+	static CDirectPrintPrinterInfoReader* NewLC(CDirectPrintModel& aModel);
+	/** Destructor */
+	~CDirectPrintPrinterInfoReader();
+
+	void ReadPrinterInfoL();
+
+	void GetManufactureL(TDes& aManufacture);
+	TUid GetDriverL(TDesC& aId);
+	TUid GetSettingUIPluginL(TDesC& aId);
+
+protected:
+	CDirectPrintPrinterInfoReader(CDirectPrintModel& aModel);
+	void ConstructL();
+
+private:
+	void ReadXmlDataL(const TDesC& aParam);
+	TBool CheckManufactureL(const TDesC& aParam);
+
+private:
+	// Model object
+	CDirectPrintModel& iModel;
+
+	RXmlEngDocument iXmlEngDoc;
+	RXmlEngDOMImplementation iXmlDomImpl;
+	RXmlEngDOMParser iXmlParser;
+	};
+
+#endif // __DIRECTPRINTPRINTERINFOREADER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintproperty.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPROPERTY_H__
+#define __DIRECTPRINTPROPERTY_H__
+
+// System includes
+#include <e32base.h>
+#include <e32cmn.h>
+
+// User includes
+#include "DirectPrintDef.h"
+#include "directprintpropertydata.h"
+
+// Class declaration
+/**
+ *  Printer property class
+ *  more_complete_description
+ */
+class CPrinterProperty : public CBase
+	{
+public:
+	/** Constructors */
+	IMPORT_C CPrinterProperty();
+	/** Destructor */
+	IMPORT_C ~CPrinterProperty();
+
+public:
+	/**
+	 * Internalize operation.
+	 *
+	 * @param aStream ReadStream.
+	 */
+	IMPORT_C void InternalizeL(RReadStream& aStream);
+
+	/**
+	 * Externalize operation.
+	 *
+	 * @param aStream WriteStream.
+	 */
+	IMPORT_C void ExternalizeL(RWriteStream& aStream)const;
+
+	/**
+	 * Substitution operator.
+	 *
+	 * @param aProperty Printer property.
+	 * @return Printer property.
+	 */
+	IMPORT_C CPrinterProperty& operator=(const CPrinterProperty& aProperty);
+
+public:
+	/** The ID of printer data. */
+	TInt iPrinterId;
+	/** The ID of application. */
+	TInt iApplicationId;
+	/** Printer property data array. */
+	RDPPropertyDataArray iPropertyItems;
+	};
+
+typedef RPointerArray<CPrinterProperty> RPrinterPropertyArray;
+
+#endif // __DIRECTPRINTPROPERTY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintpropertydata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPROPERTYDATA_H__
+#define __DIRECTPRINTPROPERTYDATA_H__
+
+// System includes
+#include <e32base.h>
+#include <e32cmn.h>
+
+// User includes
+#include "DirectPrintDef.h"
+
+// Class declaration
+/**
+ *  Printer property data class
+ *  more_complete_description
+ */
+class TDirectPrintPropertyData
+	{
+public:
+	/**
+	 * Internalize operation.
+	 *
+	 * @param aStream ReadStream.
+	 */
+	inline void InternalizeL(RReadStream& aStream);
+
+	/**
+	 * Externalize operation.
+	 *
+	 * @param aStream WriteStream.
+	 */
+	inline void ExternalizeL(RWriteStream& aStream)const;
+
+	/**
+	 * Substitution operator.
+	 *
+	 * @param aData Printer property data.
+	 * @return Printer property data.
+	 */
+	inline TDirectPrintPropertyData& operator=(const TDirectPrintPropertyData& aData);
+
+public:
+	/** The ID of printer data. */
+	TInt iPrinterId;
+	/** The ID of application. */
+	TInt iApplicationId;
+	/** The ID of item type. */
+	TInt iItemType;
+	/** The ID of item. */
+	TInt iItemId;
+	/** Name of item. */
+	TBuf<KDirectPrintNameLength> iItemName;
+	/** Numerical value. */
+	TInt iItemValue;
+	/** Text value. */
+	TBuf<KDirectPrintNameLength> iItemTextValue;
+	};
+
+typedef RArray<TDirectPrintPropertyData> RDPPropertyDataArray;
+
+
+
+inline void TDirectPrintPropertyData::InternalizeL(RReadStream& aStream)
+	{
+	iItemType = aStream.ReadInt32L();
+	iItemId = aStream.ReadInt32L();
+	TInt length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iItemName, length);
+		}
+	iItemValue = aStream.ReadInt32L();
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iItemTextValue, length);
+		}
+	}
+
+inline void TDirectPrintPropertyData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iItemType);
+	aStream.WriteInt32L(iItemId);
+	aStream.WriteInt32L(iItemName.Length());
+	if (iItemName.Length() > 0)
+		{
+		aStream.WriteL(iItemName);
+		}
+	aStream.WriteInt32L(iItemValue);
+	aStream.WriteInt32L(iItemTextValue.Length());
+	if (iItemTextValue.Length() > 0)
+		{
+		aStream.WriteL(iItemTextValue);
+		}
+	}
+
+inline TDirectPrintPropertyData& TDirectPrintPropertyData::operator=(const TDirectPrintPropertyData& aData)
+	{
+	iPrinterId = aData.iPrinterId;
+	iApplicationId = aData.iApplicationId;
+	iItemType = aData.iItemType;
+	iItemId = aData.iItemId;
+	iItemName.Copy(aData.iItemName);
+	iItemValue = aData.iItemValue;
+	iItemTextValue.Copy(aData.iItemTextValue);
+	return *this;
+	}
+
+#endif // __DIRECTPRINTPROPERTYDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintselectitem.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTSELECTITEM_H__
+#define __DIRECTPRINTSELECTITEM_H__
+
+// System includes
+#include <e32cmn.h>
+
+// Class declaration
+/**
+ *  Select item information class
+ *  more_complete_description
+ */
+class TDirectPrintSelectItem
+	{
+public:
+	/** Id. */
+	TInt iId;
+	/** Name. */
+	TBuf<50> iName;
+	};
+
+typedef RArray<TDirectPrintSelectItem> RSelectItemArray;
+
+#endif // __DIRECTPRINTSELECTITEM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/inc/directprintuipluginmgr.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef _DIRECTPRINTUIPLUGINMGR_H_
+#define _DIRECTPRINTUIPLUGINMGR_H_
+
+// System includes
+#include <e32base.h>
+#include <implementationproxy.h>
+
+// Forward declarations
+class CDirectPrintModel;
+class CDirectPrintUiPlugin;
+
+// Class declaration
+/**
+ *  UiPrugin manager class
+ *  more_complete_description
+ */
+class CDirectPrintUiPluginMgr : public CBase
+	{
+public:
+	/** Constructors */
+	static CDirectPrintUiPluginMgr* NewL(CDirectPrintModel& aModel);
+	static CDirectPrintUiPluginMgr* NewLC(CDirectPrintModel& aModel);
+	/** Destructor */
+	~CDirectPrintUiPluginMgr();
+
+public:
+	/**
+	 * Load plugin object.
+	 *
+	 * @param aUid The Uid of plugin.
+	 */
+	void LoadPluginL(TUid aUid);
+	/**
+	 * Load plugin object.
+	 *
+	 * @param aKey default_data string.
+	 */
+	void LoadPluginL(const TDesC8& aKey);
+	/**
+	 * Get current plugin object.
+	 *
+	 * @return Pointer to plugin object.
+	 */
+	CDirectPrintUiPlugin* CurrentPluginL();
+
+protected:
+	CDirectPrintUiPluginMgr(CDirectPrintModel& aModel);
+	void ConstructL();
+
+private:
+	/** Reference to model class. */
+	CDirectPrintModel& iModel;
+	/** Pointer to plugin. */
+	CDirectPrintUiPlugin* iPlugin;
+	/** Uid of current plugin. */
+	TUid iCurrentPluginUid;
+	};
+
+#endif // _DIRECTPRINTUIPLUGINMGR_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/sis/backup_registration.xml	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration>
+  <system_backup/>
+  <restore requires_reboot = "no"/>
+</backup_registration>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/sis/directprintapp_1_0_0.pkg	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,37 @@
+; Installation file for DirectPrintApp application
+;
+; This is an auto-generated PKG file by Carbide.
+; This file uses variables specific to Carbide builds that will not work
+; on command-line builds. If you want to use this generated PKG file from the
+; command-line tools you will need to modify the variables with the appropriate
+; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
+;
+;Language - standard language definitions
+&EN
+
+; standard SIS file header
+#{"DirectPrintApp"},(0x2002BB28),1,0,0
+
+;Localised Vendor name
+%{"Vendor-EN"}
+
+;Unique Vendor name
+:"Vendor"
+
+;Supports Series 60 v 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+;Files to install
+;You should change the source paths to match that of your environment
+;<source> <destination>
+"$(EPOCROOT)Epoc32\release\$(PLATFORM)\$(TARGET)\DirectPrintApp.exe"		-"!:\sys\bin\DirectPrintApp.exe"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\DirectPrintApp.rsc"		-"!:\resource\apps\DirectPrintApp.rsc"
+"$(EPOCROOT)Epoc32\data\z\private\10003a3f\apps\DirectPrintApp_reg.rsc"	-"!:\private\10003a3f\import\apps\DirectPrintApp_reg.rsc"
+"$(EPOCROOT)Epoc32\data\z\resource\apps\DirectPrintApp.mif" -"!:\resource\apps\DirectPrintApp.mif"
+"..\help\DirectPrintApp.hlp"							 -"!:\resource\help\DirectPrintApp.hlp"
+
+; Add any installation notes if applicable
+;"DirectPrintApp.txt"		-"!:\private\2002BB28\DirectPrintApp.txt"
+
+;required for application to be covered by backup/restore facility 
+"..\sis\backup_registration.xml"		-"!:\private\2002BB28\backup_registration.xml"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintapp.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <eikstart.h>
+#include "DirectPrintAppApplication.h"
+
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CDirectPrintAppApplication;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintappapplication.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include "DirectPrintApp.hrh"
+#include "DirectPrintAppDocument.h"
+#include "DirectPrintAppApplication.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppApplication::CreateDocumentL()
+// Creates CApaDocument object
+// -----------------------------------------------------------------------------
+//
+CApaDocument* CDirectPrintAppApplication::CreateDocumentL()
+	{
+	// Create an DirectPrintApp document, and return a pointer to it
+	return CDirectPrintAppDocument::NewL(*this);
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppApplication::AppDllUid()
+// Returns application UID
+// -----------------------------------------------------------------------------
+//
+TUid CDirectPrintAppApplication::AppDllUid() const
+	{
+	// Return the UID for the DirectPrintApp application
+	return KUidDirectPrintAppApp;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintappappui.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,665 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <avkon.hrh>
+#include <aknnotewrappers.h>
+#include <akntabgrp.h>
+#include <barsread.h>
+#include <stringloader.h>
+#include <DirectPrintApp.rsg>
+#include <f32file.h>
+#include <s32file.h>
+#include <f32file.h>
+#include <aiwmenu.h>					// CAiwGenericParamList
+
+//not use #include <featmgr.h>			// FeatureManager
+
+#include <xmlengdomparser.h>			// RXmlEngDOMParser
+#include <xmlengdomimplementation.h>	// RXmlEngDOMImplementation
+#include <xmlengerrors.h>
+
+// Start ImagePrint Provide
+#include "imageprint.h"  
+#include "printmessagecodes.h"
+// End   ImagePrint Provide
+
+#include "clog.h"
+#include "aiwprintproperty.h"
+
+#include "directprintapp.pan"
+#include "directprintappappui.h"
+#include "directprintapp.hrh"
+#include "directprintappdocument.h"
+#include "directprintmodel.h"
+
+#include "directprintmainview.h"
+#include "directprintlistview.h"
+#include "directprintsettingview.h"
+#include "directprintpreviewview.h"
+#include "directprintpropertyview.h"
+#include "directprintsearchresultview.h"
+#include "directprintengine.h"
+#include "directprintbearermgr.h"
+#include "directprintmsgutil.h"
+#include "directprintuipluginmgr.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppAppUi::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::ConstructL()
+	{
+	LOG("CDirectPrintAppAppUi::ConstructL BEGIN");
+	// Initialise app UI with standard value.
+    //BaseConstructL( EAknEnableSkin | EAknEnableMSK );
+    BaseConstructL( EAknEnableSkin );
+
+//not use    FeatureManager::InitializeLibL();
+
+    iDoc = static_cast<CDirectPrintAppDocument*>( CAknAppUi::Document() );
+
+	TRAPD( err, InitializeEngineL() );
+	if ( err == KErrInUse )
+		{
+		LOG1("InitializeEngineL Error [%d]", err);
+		CDirectPrintMsgUtil::DisplayErrorNoteL(R_DIRECTPRINT_MSG_PRINT_IN_USE);
+		Exit();
+		}
+	else
+		{
+		User::LeaveIfError( err );
+		}
+
+	TRAP( err, InitializeBearerMngL() );
+	if ( err == KErrInUse || err == KErrAlreadyExists )
+		{
+		LOG1("InitializeBearerMngL Error [%d]", err);
+		CDirectPrintMsgUtil::DisplayErrorNoteL(R_DIRECTPRINT_MSG_PRINT_IN_USE);
+		Exit();
+		}
+	else
+		{
+		User::LeaveIfError( err );
+		}
+
+	InitializePluginMgrL();
+
+	LOG("CDirectPrintAppAppUi::ConstructL StatusPane...");
+	CEikStatusPane* statusPane = StatusPane();
+	CAknNavigationControlContainer* naviPane = (CAknNavigationControlContainer*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
+		{
+		TResourceReader reader;
+		iCoeEnv->CreateResourceReaderLC(reader, R_DIRECTPRINT_PROPERTYSETTING_NAVI_DECORATOR);
+		iNaviDecorator = naviPane->ConstructNavigationDecoratorFromResourceL(reader);
+		CleanupStack::PopAndDestroy();
+		}
+	CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>(iNaviDecorator->DecoratedControl());
+	tabGroup->SetObserver(this);
+
+	LOG("CDirectPrintAppAppUi::ConstructL aiw param...");
+	// aiw param
+	iAiwState = ENotAiwCall;
+	TInt r = iAiwCall.Attach(KPrintPropertyCat,EPrintProperty,EOwnerProcess);
+	if (r == KErrNone)
+		{
+		iAiwCall.Get(KPrintPropertyCat,EPrintProperty,iAiwState);
+		}
+
+	if ( iAiwState == EAiwPrintCall )
+		{
+		// Set the aiw call RProperty key back to default value so that
+		// if application for some reason crashes the value is not left for AIW mode.
+		iAiwCall.Set( KPrintPropertyCat,EPrintProperty, ENotAiwCall );
+		TRAP( err, LoadParamL() );
+		if ( err != KErrNone )
+			{
+			CDirectPrintMsgUtil::DisplayErrorNoteL(R_DIRECTPRINT_MSG_PARAM_INCORRECT);
+			Exit();
+			}
+		}
+
+	LOG("CDirectPrintAppAppUi::ConstructL InitializeViewsL...");
+	InitializeViewsL();
+
+    iCoeEnv->RootWin().EnableScreenChangeEvents();
+
+	LOG("CDirectPrintAppAppUi::ConstructL END");
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppAppUi::CDirectPrintAppAppUi()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintAppAppUi::CDirectPrintAppAppUi()
+	{
+	// No implementation required
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppAppUi::~CDirectPrintAppAppUi()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintAppAppUi::~CDirectPrintAppAppUi()
+	{
+//not use	FeatureManager::UnInitializeLib();
+
+    if (iXmlEngDoc.NotNull()) 
+        {
+	    iXmlEngDoc.Close();               // closing all opened objects
+	    iXmlParser.Close();
+	    iXmlDomImpl.Close();
+        }
+	delete iXmlParam;
+	delete iEngine;
+	delete iBearerMgr;
+	delete iPluginMgr;
+	delete iNaviDecorator;
+    iAiwCall.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppAppUi::HandleCommandL()
+// Takes care of command handling.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::HandleCommandL( TInt aCommand )
+	{
+	LOG1("CDirectPrintAppAppUi::HandleCommandL(%d) BEGIN", aCommand);
+	switch( aCommand )
+		{
+		case EEikCmdExit:
+		case EAknSoftkeyExit:
+		case EDirectPrintCmdIdMainViewExit:
+			{
+			LOG1("BearerStatu=%d", iBearerMgr->BearerStatus());
+
+			TBool isPrinting = EFalse;
+			switch (iBearerMgr->BearerStatus())
+				{
+				case CDirectPrintBearerMgr::EBearerMngCreatingJob:
+				case CDirectPrintBearerMgr::EBearerMngPrinting:
+					isPrinting = ETrue;
+					break;
+				case CDirectPrintBearerMgr::EBearerMngClosing:
+				case CDirectPrintBearerMgr::EBearerMngCanceling:
+				case CDirectPrintBearerMgr::EBearerMngNotConnected:
+				case CDirectPrintBearerMgr::EBearerMngConnected:
+				default:
+					isPrinting = EFalse;
+					break;
+				}
+
+			if (!isPrinting)
+				{
+				iDoc->Model().ExternalizeDataL();
+				Exit();
+				}
+			else
+				{
+				// Show information message
+				HBufC* textResource = StringLoader::LoadLC(R_DIRECTPRINT_MSG_NOW_PRINTING);
+				CAknInformationNote* informationNote;
+				informationNote = new (ELeave) CAknInformationNote;
+				informationNote->ExecuteLD(*textResource);
+				CleanupStack::PopAndDestroy(textResource);
+				}
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPrint:
+		case EDirectPrintCmdIdPropertySettingViewPrint:
+		case EDirectPrintCmdIdPreviewViewPrint:
+			{
+			MakeNaviPaneVisibleL(EFalse);
+			//TInt modelcount = iEngine->ModelCount();
+			iEngine->SetUseModel(0);
+			iEngine->PrintL();
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPreview:
+		case EDirectPrintCmdIdPropertySettingViewPreview:
+			{
+			TVwsViewId id;
+			GetActiveViewId(id);
+			iBackViewUid = id.iViewUid;
+			//MakeStatusPaneVisible(EFalse);
+			MakeNaviPaneVisibleL(EFalse);
+			ActivateLocalViewL(TUid::Uid(EDirectPrintPreviewViewId));
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPropertySetting:
+			{
+			if (iDoc->Model().PrinterCount() > 0)
+				{
+				CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>(iNaviDecorator->DecoratedControl());
+				tabGroup->SetActiveTabByIndex(0);
+			//	tabGroup->SetActiveTabByIndex(1);
+				MakeNaviPaneVisibleL(ETrue);
+			//	ActivateLocalViewL(TUid::Uid(EDirectPrintPropertySetting1ViewId));
+			//	ActivateLocalViewL(TUid::Uid(EDirectPrintPropertySetting2ViewId));
+				ActivateLocalViewL(TUid::Uid(EDirectPrintPropertyViewId));
+				}
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPrinterList:
+			{
+			MakeNaviPaneVisibleL(EFalse);
+			ActivateLocalViewL(TUid::Uid(EDirectPrintPrinterListViewId));
+			}
+			break;
+		case EDirectPrintCmdIdPrinterSettingViewBack:
+			{
+			if (iBackViewUid != TUid::Uid(0))
+				{
+				ActivateLocalViewL(iBackViewUid);
+				iBackViewUid = TUid::Uid(0);
+				}
+			else
+				{
+				ActivateLocalViewL(TUid::Uid(EDirectPrintPrinterListViewId));
+				}
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPrinterSetting:
+		case EDirectPrintCmdIdPrinterListViewNew:
+		case EDirectPrintCmdIdPrinterListViewEdit:
+			{
+			if ((iDoc->Model().PrinterCount() > 0) || (iDoc->Model().IsNewData()))
+				{
+				TVwsViewId id;
+				GetActiveViewId(id);
+				iBackViewUid = id.iViewUid;
+				MakeNaviPaneVisibleL(EFalse);
+				ActivateLocalViewL(TUid::Uid(EDirectPrintPrinterSettingViewId));
+				}
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewDone:
+		case EDirectPrintCmdIdPropertySettingViewBack:
+			{
+			MakeNaviPaneVisibleL(EFalse);
+			ActivateLocalViewL(TUid::Uid(EDirectPrintMainViewId));
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewSearch:
+			{
+			// Start printer search
+			//SearchPrinterL();
+			ActivateLocalViewL(TUid::Uid(EDirectPrintSearchResultViewId));
+			}
+			break;
+		case EDirectPrintCmdIdSearchResultViewSearch:
+			{
+			// Start printer search
+			//SearchPrinterL();
+			}
+			break;
+		case EDirectPrintCmdIdSearchResultViewSelect:
+		case EDirectPrintCmdIdSearchResultViewCancel:
+			{
+			ActivateLocalViewL(TUid::Uid(EDirectPrintPrinterListViewId));
+			}
+			break;
+		case EDirectPrintCmdIdPreviewViewBack:
+			{
+			MakeStatusPaneVisible(ETrue);
+			if (iBackViewUid != TUid::Uid(0))
+				{
+				if (iBackViewUid != TUid::Uid(EDirectPrintMainViewId))
+					{
+					MakeNaviPaneVisibleL(ETrue);
+					}
+				ActivateLocalViewL(iBackViewUid);
+				iBackViewUid = TUid::Uid(0);
+				}
+			else
+				{
+				ActivateLocalViewL(TUid::Uid(EDirectPrintMainViewId));
+				}
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewDelete:
+		default:
+			break;
+		}
+	LOG("CDirectPrintAppAppUi::HandleCommandL END");
+	}
+
+void CDirectPrintAppAppUi::HandleResourceChangeL( TInt aType )
+	{
+	// base-class call also
+	CAknAppUi::HandleResourceChangeL(aType);
+	if (aType == KEikDynamicLayoutVariantSwitch)
+		{
+		}
+	}
+
+void CDirectPrintAppAppUi::TabChangedL(TInt aIndex)
+	{
+	TVwsViewId id;
+	GetActiveViewId(id);
+	if (id.iViewUid.iUid == EDirectPrintPropertyViewId)
+		{
+		CDirectPrintPropertyView* view = static_cast<CDirectPrintPropertyView*>(View(id.iViewUid));
+		view->ChangeTabL(aIndex);
+		}
+	}
+
+void CDirectPrintAppAppUi::MakeNaviPaneVisibleL(TBool aVisible)
+	{
+	CEikStatusPane* statusPane = StatusPane();
+	CAknNavigationControlContainer* naviPane = (CAknNavigationControlContainer*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidNavi));
+
+	if (aVisible)
+		{
+		naviPane->PushL(*iNaviDecorator);
+		}
+	else
+		{
+		naviPane->Pop(iNaviDecorator);
+		}
+	}
+
+void CDirectPrintAppAppUi::MakeStatusPaneVisible(TBool aVisible)
+	{
+	CEikStatusPane* statusPane = StatusPane();
+	statusPane->MakeVisible(aVisible);
+	}
+
+void CDirectPrintAppAppUi::InitializeViewsL()
+	{
+	LOG("CDirectPrintAppAppUi::InitializeViewsL begin");
+	// Create view
+	LOG("-->CDirectPrintMainView");
+	CDirectPrintMainView* view1 = CDirectPrintMainView::NewL();
+	CleanupStack::PushL(view1);
+	AddViewL(view1);
+	CleanupStack::Pop(view1);
+
+	LOG("-->CDirectPrintListView");
+	CDirectPrintListView* view2 = CDirectPrintListView::NewL();
+	CleanupStack::PushL(view2);
+	AddViewL(view2);
+	CleanupStack::Pop(view2);
+
+	LOG("-->CDirectPrintSearchResultView");
+	CDirectPrintSearchResultView* view3 = CDirectPrintSearchResultView::NewL();
+	AddViewL(view3);
+
+	LOG("-->CDirectPrintPrinterSettingView");
+	CDirectPrintPrinterSettingView* view4 = CDirectPrintPrinterSettingView::NewL();
+	CleanupStack::PushL(view4);
+	AddViewL(view4);
+	CleanupStack::Pop(view4);
+
+	LOG("-->CDirectPrintPreviewView");
+	CDirectPrintPreviewView* view5 = CDirectPrintPreviewView::NewL();
+	CleanupStack::PushL(view5);
+	AddViewL(view5);
+	CleanupStack::Pop(view5);
+
+	LOG("-->CDirectPrintPropertyView");
+	CDirectPrintPropertyView* view6 = CDirectPrintPropertyView::NewL();
+	CleanupStack::PushL(view6);
+	AddViewL(view6);
+	CleanupStack::Pop(view6);
+
+	// Check plugins. Create view, if extended view exists.
+
+	SetDefaultViewL( *view1 );
+
+	iBackViewUid = TUid::Uid(0);
+	LOG("CDirectPrintAppAppUi::InitializeViewsL end");
+	}
+
+
+void CDirectPrintAppAppUi::LoadParamL()
+	{
+	// get the xml parameter from AIW provider
+	// after that iXmlEngDoc is set in the function.
+	GetParamFromAiwProviderL();
+	// set the xml param to the engine side, and 
+	// the adapted band plugin is loaded and the xml
+	// parameter is sent to the plugin.
+	iEngine->SetParamL(&iXmlEngDoc);
+	}
+
+void CDirectPrintAppAppUi::GetParamFromAiwProviderL()
+	{
+	LOG("CDirectPrintAppAppUi::GetParamFromAiwProviderL() BEGIN");
+
+	RFileReadStream readStream;
+	TFileName paramFile;
+	_LIT( KParamFile, "c:\\system\\data\\T_AIW_TEMP.DAT");
+	paramFile.Copy(KParamFile);
+
+	User::LeaveIfError( readStream.Open(iCoeEnv->FsSession(), paramFile, EFileRead) );
+	readStream.PushL();
+	CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(readStream);
+
+	TInt index( 0 );
+	const TAiwGenericParam* param = paramList->FindFirst(index,
+			EGenericParamPrintXMLFile,
+			EVariantTypeDesC8);
+	TPtrC8 ptrParam = param->Value().AsData();
+	if ( ptrParam.Length() == 0)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	// set file name
+	iXmlParam = ptrParam.AllocL();
+
+	// parse XML param
+	// opening DOM implementation object 
+	iXmlDomImpl.OpenL();
+	// opening parser object
+	User::LeaveIfError(iXmlParser.Open( iXmlDomImpl ));
+	// ParseL return KXmlEngErrParsing
+	iXmlEngDoc =iXmlParser.ParseL( *iXmlParam );   // parsing buffer
+
+	CleanupStack::PopAndDestroy(paramList); //paramList
+	readStream.Close();
+	readStream.Pop();
+	LOG("CDirectPrintAppAppUi::GetParamFromAiwProviderL() END");
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppAppUi::InitializeEngineL()
+// Initialize print engine.
+// ---------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::InitializeEngineL()
+	{
+	iEngine = CDirectPrintEngine::NewL(iDoc->Model());
+	iEngine->SetObserver(this);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppAppUi::HandlePrintEventL()
+// Handle the events from engine side
+// ---------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::HandlePrintEventL(
+							TDirectPrintEngineEvents aEvent,
+							TInt /*aError*/, 
+							const TDesC& /*aParam*/)
+	{
+
+	switch (aEvent)
+		{
+		case EDirectPrintEngineEventStartCreatePrintData:
+			break;
+		case EDirectPrintEngineEventFinishCreatePrintData:
+			{
+			//TInt msgid = R_DIRECTPRINT_MSG_BEARER_OPEN_ERR;
+			TRAPD(err, iBearerMgr->CreateJobL());
+			if (err == KErrNone)
+				{
+				//msgid = R_DIRECTPRINT_MSG_SUBMIT_PRINT_ERR;
+				TRAP(err, iBearerMgr->SubmitPrintJobL());
+				}
+
+			if (err != KErrNone)
+				{
+				// show bearer open error
+				CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue );
+				HBufC* format = StringLoader::LoadLC( R_DIRECTPRINT_MSG_BEARER_OPEN_ERR );
+				HBufC* msg = HBufC::NewLC(format->Length()+5);
+				TPtr ptrMsg(msg->Des());
+				ptrMsg.AppendFormat(*format, err);
+				errornote->ExecuteLD( *msg );
+				CleanupStack::PopAndDestroy( msg );
+				CleanupStack::PopAndDestroy( format );
+				}
+			}
+			break;
+		case EDirectPrintEngineEventCancelCreatePrintData:
+			break;
+		case EDirectPrintEngineEventErrorCreatePrintData:
+			break;
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppAppUi::InitializeBearerMngL()
+// Initialize bearer manager.
+// ---------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::InitializeBearerMngL()
+	{
+	iBearerMgr = CDirectPrintBearerMgr::NewL(this, iDoc->Model());
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppAppUi::InitializePluginMgrL()
+// Initialize plugin manager.
+// ---------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::InitializePluginMgrL()
+	{
+	iPluginMgr = CDirectPrintUiPluginMgr::NewL(iDoc->Model());
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppAppUi::HandleBearerMngEventL()
+// Handle the events from engine side
+// ---------------------------------------------------------------------------
+//
+void CDirectPrintAppAppUi::HandleBearerMngEventL(
+							TDirectPrintBearerMngEvents aEvent,
+							TInt /*aError*/, 
+							const TDesC& /*aParam*/)
+	{
+
+	switch (aEvent)
+		{
+		case EDirectPrintBearerMngErrorConnectBearer:
+			break;
+		case EDirectPrintBearerMngConnectedBearer:
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintAppAppUi::PrintJobProgressEvent( TInt aStatus,
+										TInt aPercentCompletion,
+										TInt aJobStateCode )
+	{
+	LOG3("Start CDirectPrintAppAppUi::PrintJobProgressEvent[%d],[%d],[%d]", 
+												aStatus, aPercentCompletion, aJobStateCode);
+	if ( aStatus == EActive )
+		{
+		LOG("aStatus == EActive");
+
+		}
+	else
+		{
+		LOG("aStatus == EDone");
+		if ( aJobStateCode == ECancelling && aStatus == EDone )
+			{
+			LOG("ECancelling");
+			}
+		else if ( aJobStateCode == ECancellingNoMessage && aStatus == EDone )
+			{
+			LOG("ECancellingNoMessage");
+			}
+		else
+			{
+			LOG("Finish");
+			this->iBearerMgr->CloseSession();
+			}
+		}
+	LOG("End   CDirectPrintAppAppUi::PrintJobProgressEvent");
+	}
+
+void CDirectPrintAppAppUi::PrintJobErrorEvent( TInt aError,
+										TInt aErrorStringCode )
+	{
+	LOG2("Start CDirectPrintAppAppUi::PrintJobErrorEvent[%d], [%d]", aError, aErrorStringCode);
+	LOG("Finish when error happen");
+	this->iBearerMgr->CloseSession();
+	LOG("End   CDirectPrintAppAppUi::PrintJobErrorEvent");
+	}
+
+void CDirectPrintAppAppUi::PrinterStatusEvent( TInt aError,
+										TInt aErrorStringCode )
+	{
+	LOG2("Start CDirectPrintAppAppUi::PrinterStatusEvent[%d], [%d]", aError, aErrorStringCode);
+	LOG("End   CDirectPrintAppAppUi::PrinterStatusEvent");
+	}
+
+void CDirectPrintAppAppUi::PreviewImageEvent( TInt /*aFsBitmapHandle*/ )
+	{
+	LOG("Start CDirectPrintAppAppUi::PreviewImageEvent");
+	LOG("End   CDirectPrintAppAppUi::PreviewImageEvent");
+	}
+
+void CDirectPrintAppAppUi::ShowMessageL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code )
+	{
+	LOG2("Start CDirectPrintAppAppUi::ShowMessageL[%d], [%d]", aMsgLine1Code, aMsgLine2Code);
+	LOG("End   CDirectPrintAppAppUi::ShowMessageL");
+	}
+
+TBool CDirectPrintAppAppUi::AskYesNoQuestionL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code )
+	{
+	LOG2("Start CDirectPrintAppAppUi::AskYesNoQuestionL[%d], [%d]", aMsgLine1Code, aMsgLine2Code);
+	LOG("End   CDirectPrintAppAppUi::AskYesNoQuestionL");
+	return EFalse;
+	}
+
+const TDesC& CDirectPrintAppAppUi::AskForInputL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code )
+	{
+	LOG2("Start CDirectPrintAppAppUi::AskForInputL[%d], [%d]", aMsgLine1Code, aMsgLine2Code);
+	LOG("End   CDirectPrintAppAppUi::AskForInputL");
+	return KNullDesC;
+	}
+
+// End of File
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintappdocument.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include "clog.h"
+#include "directprintappappui.h"
+#include "directprintappdocument.h"
+#include "directprintmodel.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppDocument::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintAppDocument* CDirectPrintAppDocument::NewL(CEikApplication& aApp)
+	{
+	CDirectPrintAppDocument* self = NewLC(aApp);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppDocument::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintAppDocument* CDirectPrintAppDocument::NewLC(CEikApplication& aApp)
+	{
+	CDirectPrintAppDocument* self = new (ELeave) CDirectPrintAppDocument(aApp);
+
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppDocument::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintAppDocument::ConstructL()
+	{
+	LOG("CDirectPrintAppDocument::ConstructL BEGIN");
+	// create the model object
+	iModel = CDirectPrintModel::NewL();
+	LOG("CDirectPrintAppDocument::ConstructL END");
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppDocument::CDirectPrintAppDocument()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintAppDocument::CDirectPrintAppDocument(CEikApplication& aApp) :
+	CAknDocument(aApp)
+	{
+	// No implementation required
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppDocument::~CDirectPrintAppDocument()
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CDirectPrintAppDocument::~CDirectPrintAppDocument()
+	{
+	delete iModel;
+	}
+
+// ---------------------------------------------------------------------------
+// CDirectPrintAppDocument::CreateAppUiL()
+// Constructs CreateAppUi.
+// ---------------------------------------------------------------------------
+//
+CEikAppUi* CDirectPrintAppDocument::CreateAppUiL()
+	{
+	// Create the application user interface, and return a pointer to it;
+	// the framework takes ownership of this object
+	return new (ELeave) CDirectPrintAppAppUi;
+	}
+
+CDirectPrintModel& CDirectPrintAppDocument::Model()
+	{
+	return *iModel;
+	}
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintbearerdata.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <s32strm.h>
+
+#include "directprintbearerdata.h"
+
+EXPORT_C void TDirectPrintBearerData::InternalizeL(RReadStream& aStream)
+	{
+	iPrinterId = aStream.ReadInt32L();
+	iBearerId = aStream.ReadInt32L();
+	TInt length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iBearerName, length);
+		}
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iAccessPoint, length);
+		}
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iHostName, length);
+		}
+	iHostIp.SetAddress(aStream.ReadInt32L());
+	iPort = aStream.ReadInt32L();
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iUserName, length);
+		}
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iQueName, length);
+		}
+	}
+
+EXPORT_C void TDirectPrintBearerData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iPrinterId);
+	aStream.WriteInt32L(iBearerId);
+	aStream.WriteInt32L(iBearerName.Length());
+	if (iBearerName.Length() > 0)
+		{
+		aStream.WriteL(iBearerName);
+		}
+	aStream.WriteInt32L(iAccessPoint.Length());
+	if (iAccessPoint.Length() > 0)
+		{
+		aStream.WriteL(iAccessPoint);
+		}
+	aStream.WriteInt32L(iHostName.Length());
+	if (iHostName.Length() > 0)
+		{
+		aStream.WriteL(iHostName);
+		}
+	aStream.WriteInt32L(iHostIp.Address());
+	aStream.WriteInt32L(iPort);
+	aStream.WriteInt32L(iUserName.Length());
+	if (iUserName.Length() > 0)
+		{
+		aStream.WriteL(iUserName);
+		}
+	aStream.WriteInt32L(iQueName.Length());
+	if (iQueName.Length() > 0)
+		{
+		aStream.WriteL(iQueName);
+		}
+	}
+
+EXPORT_C TDirectPrintBearerData& TDirectPrintBearerData::operator=(const TDirectPrintBearerData& aData)
+	{
+	iPrinterId = aData.iPrinterId;
+	iBearerId = aData.iBearerId;
+	iBearerName.Copy(aData.iBearerName);
+	iAccessPoint.Copy(aData.iAccessPoint);
+	iHostName.Copy(aData.iHostName);
+	//iHostIp.SetAddress(aData.iHostIp.Address());
+	iHostIp = aData.iHostIp;
+	iPort = aData.iPort;
+	iUserName.Copy(aData.iUserName);
+	iQueName.Copy(aData.iQueName);
+	return *this;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintbearermgr.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,357 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// User includes
+#include "clog.h"
+#include "DirectPrintApp.pan"
+#include "DirectPrintBearerMgr.h"
+#include "DirectPrintModel.h"
+#include "directprintbearerdata.h"
+#include "directprintprinterdata.h"
+
+#include "directprintprintsettings.h"
+#include "directprinttintcapability.h"
+#include "directprintlistcapability.h"
+#include "directprintfloatcapability.h"
+#include "directprinttextcapability.h"
+#include "directprintsettingsconverter.h"
+#include "directprintcapability.h"
+
+const TInt PROTOCOL_ID_BIT_COUNT = 6;
+
+CDirectPrintBearerMgr::CDirectPrintBearerMgr(MDirectPrintBearerMngObserver* aObserver,
+											 CDirectPrintModel& aModel)
+	: CActive( CActive::EPriorityHigh )
+	, iObserver(aObserver)
+	, iModel(aModel)
+	{
+	LOG("CDirectPrintBearerMgr::CDirectPrintBearerMgr()");
+	CActiveScheduler::Add(this);
+	}
+
+CDirectPrintBearerMgr::~CDirectPrintBearerMgr()
+	{
+	LOG("CDirectPrintBearerMgr::~CDirectPrintBearerMgr()");
+	if (IsActive())
+		{
+		Cancel();
+		}
+	iBearer.Close();
+	delete iPrintSettings;
+	}
+
+CDirectPrintBearerMgr* CDirectPrintBearerMgr::NewL(MDirectPrintBearerMngObserver* aObserver,
+										CDirectPrintModel& aModel)
+	{
+	CDirectPrintBearerMgr* self = CDirectPrintBearerMgr::NewLC(aObserver, aModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintBearerMgr* CDirectPrintBearerMgr::NewLC(MDirectPrintBearerMngObserver* aObserver,
+										CDirectPrintModel& aModel)
+	{
+	CDirectPrintBearerMgr* self = new(ELeave) CDirectPrintBearerMgr(aObserver, aModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintBearerMgr::ConstructL()
+	{
+	LOG("CDirectPrintBearerMgr::ConstructL BEGIN");
+	__ASSERT_ALWAYS(iObserver, Panic(EDirectPrintNoObserver));
+	iPrintSettings = new ( ELeave ) CDirectPrintPrintSettings;
+	iBearer.ConnectL();
+	SetBearerStatus(EBearerMngConnected);
+	LOG("CDirectPrintBearerMgr::ConstructL END");
+	}
+
+void CDirectPrintBearerMgr::CreateJobL()
+	{
+	LOG("CDirectPrintBearerMgr::CreateJobL BEGIN");
+	RPointerArray<TDesC> cmdline;
+	CleanupClosePushL(cmdline);
+
+	_LIT(KDPAppName, "DirectPrint");
+	cmdline.AppendL(&(KDPAppName()));
+
+	TDirectPrintBearerData bearerData;
+	TDirectPrintPrinterData printerData;
+	TInt indexBearer = iModel.CurrentBearer();
+	TInt indexPrinter = iModel.CurrentPrinter();
+	if (indexBearer >= 0 && indexPrinter >= 0)
+		{
+		iModel.GetBearerDataL(indexBearer, bearerData);
+		iModel.GetPrinterDataL(indexPrinter, printerData);
+		}
+	else
+		{
+		LOG("CDirectPrintBearerMgr::CreateJobL LEAVE1 KErrNotFound");
+		User::Leave(KErrNotFound);
+		}
+
+	HBufC* apname = HBufC::NewLC(50);
+	TPtr apnamePtr(apname->Des());
+	_LIT(KDPApName, "-S%S");
+	apnamePtr.AppendFormat(KDPApName(), &(bearerData.iHostName));
+	cmdline.AppendL(apname);
+
+	HBufC* printername = HBufC::NewLC(50);
+	TPtr printernamePtr(printername->Des());
+	_LIT(KDPPrinterName, "-P000000439163");
+	printernamePtr.Copy(KDPPrinterName());
+	cmdline.AppendL(printername);
+
+	HBufC* filename = HBufC::NewLC(50);
+	TPtr filenamePtr(filename->Des());
+#ifdef __WINSCW__
+		_LIT(KDPFileName, "c:\\fpr.pcl");
+#else
+//		_LIT(KDPFileName, "e:\\fpr.pcl");
+		_LIT(KDPFileName, "c:\\fpr.pcl");
+#endif
+	filenamePtr.Copy(KDPFileName());
+	cmdline.AppendL(filename);
+
+	SetBearerStatus(EBearerMngCreatingJob);
+
+	// bearer ID
+	TInt printerID = 128;
+	TInt err = iBearer.CreateJob(printerID, iJobGuardData,
+						cmdline, iStatus);
+	if( !err )
+		{
+		LOG("Start create JOB");
+		SetActive();
+		}
+	else
+		{
+		LOG1("CDirectPrintBearerMgr::CreateJobL LEAVE2[%d]", err);
+		User::Leave(err);
+		}
+
+	CleanupStack::PopAndDestroy(filename);
+	CleanupStack::PopAndDestroy(printername);
+	CleanupStack::PopAndDestroy(apname);
+	CleanupStack::PopAndDestroy(&cmdline);
+	LOG("CDirectPrintBearerMgr::CreateJobL END");
+	}
+
+void CDirectPrintBearerMgr::RunL()
+	{
+	LOG1("CDirectPrintBearerMgr::RunL begin with iStatus.Int(): %d", iStatus.Int());
+	if( iStatus == KErrNone && iObserver )
+		{
+		switch( iJobGuardData.iCb )
+			{
+			case TDirectPrintJobGuardData::EProgressEventCb:
+				LOG("CJobGuard::RunL TDirectPrintJobGuardData::EProgressEventCb");
+				LOG1("CJobGuard::RunL iJobGuardData.iStatus: %d", iJobGuardData.iStatus);
+				LOG1("CJobGuard::RunL iJobGuardData.iPercentCompletion: %d", iJobGuardData.iPercentCompletion);
+				LOG1("CJobGuard::RunL iJobGuardData.iJobStateCode: %d", iJobGuardData.iJobStateCode);
+				iObserver->PrintJobProgressEvent( iJobGuardData.iStatus, iJobGuardData.iPercentCompletion, iJobGuardData.iJobStateCode );
+				break;
+			case TDirectPrintJobGuardData::EErrorEventCb:
+				LOG("CJobGuard::RunL TDirectPrintJobGuardData::EErrorEventCb");
+				LOG1("CJobGuard::RunL iJobGuardData.iError: %d", iJobGuardData.iError);
+				LOG1("CJobGuard::RunL iJobGuardData.iErrorStringCode: %d", iJobGuardData.iErrorStringCode);
+				iObserver->PrintJobErrorEvent( iJobGuardData.iError, iJobGuardData.iErrorStringCode );
+				break;
+			case TDirectPrintJobGuardData::EStatusEventCb:
+				LOG("CJobGuard::RunL TDirectPrintJobGuardData::EStatusEventCb");
+				LOG1("CJobGuard::RunL iJobGuardData.iError: %d", iJobGuardData.iError);
+				LOG1("CJobGuard::RunL iJobGuardData.iErrorStringCode: %d", iJobGuardData.iErrorStringCode);
+				iObserver->PrintJobErrorEvent( iJobGuardData.iError, iJobGuardData.iErrorStringCode );
+				break;
+			case TDirectPrintJobGuardData::EImageEventCb:
+				LOG("CJobGuard::RunL TDirectPrintJobGuardData::EImageEventCb");
+				LOG1("CJobGuard::RunL iJobGuardData.iFsBitmapHandle: %d", iJobGuardData.iFsBitmapHandle);
+				iObserver->PreviewImageEvent( iJobGuardData.iFsBitmapHandle );
+				break;
+			default:
+				break;
+			}
+
+		LOG1("CDirectPrintBearerMgr::RunL BearerStatus=[%d]", iBearerStatus);
+
+		switch (iBearerStatus)
+			{
+			case EBearerMngNotConnected:
+			case EBearerMngConnected:
+			case EBearerMngCreatingJob:
+			case EBearerMngPrinting:
+				{
+				LOG("CDirectPrintBearerMgr::RunL ContinueCreateJob");
+				iBearer.ContinueCreateJob( iJobGuardData, iStatus );
+				SetActive();
+				}
+				break;
+			case EBearerMngClosing:
+			case EBearerMngCanceling:
+			default:
+				break;
+			}
+
+		}
+	LOG("CDirectPrintBearerMgr::RunL end");
+	}
+
+void CDirectPrintBearerMgr::SubmitPrintJobL()
+	{
+	LOG("CDirectPrintBearerMgr::SubmitPrintJobL BEGIN");
+	SetBearerStatus(EBearerMngPrinting);
+	// Submit print job
+	TInt err = iBearer.SubmitPrintJob();
+	if( err != KErrNone )
+		{
+		User::Leave(err);
+		}
+	LOG("CDirectPrintBearerMgr::SubmitPrintJobL END");
+	}
+
+void CDirectPrintBearerMgr::CloseSession()
+	{
+	LOG("CDirectPrintBearerMgr::CloseSession BEGIN");
+	SetBearerStatus(EBearerMngClosing);
+	Cancel();
+//	iBearer.Close();
+	SetBearerStatus(EBearerMngConnected);
+	LOG("CDirectPrintBearerMgr::CloseSession END");
+	}
+
+void CDirectPrintBearerMgr::DoCancel()
+	{
+	LOG("CDirectPrintBearerMgr::DoCancel BEGIN");
+	SetBearerStatus(EBearerMngCanceling);
+	iBearer.CancelCreateJob();
+	LOG("CDirectPrintBearerMgr::DoCancel END");
+	}
+
+void CDirectPrintBearerMgr::SetBearerStatus(TBearerMngStatus aStatus)
+	{
+	LOG1("CDirectPrintBearerMgr::SetBearerStatus [%d]", aStatus);
+	iBearerStatus = aStatus;
+	}
+
+CDirectPrintBearerMgr::TBearerMngStatus CDirectPrintBearerMgr::BearerStatus()
+	{
+	return iBearerStatus;
+	}
+
+TInt CDirectPrintBearerMgr::SupportedProtocols()
+	{
+	return iBearer.SupportedProtocols();
+	}
+
+TInt CDirectPrintBearerMgr::GetProtocolNames(RSelectItemArray& aNames)
+	{
+	return iBearer.GetProtocolNames(aNames);
+	}
+
+void CDirectPrintBearerMgr::InitCapabilitiesL(TInt aIndex)
+	{
+	TInt printerUid = CreatePrinterUid(aIndex);
+
+	RArray<TInt> capabIDs;
+	CleanupClosePushL( capabIDs );
+
+	iBearer.GetPrinterCapabilityIDs( printerUid, capabIDs );
+	CDirectPrintPrintSettings* printSettings = new ( ELeave ) CDirectPrintPrintSettings;
+	CleanupStack::PushL( printSettings );
+
+	TInt i( 0 );
+	TInt num( capabIDs.Count() );
+	for ( i = 0; i < num; i++ )
+		{
+		TDirectPrintCapability capab;
+		iBearer.GetPrinterCapability( printerUid, capabIDs[i], capab );
+		//capab.iType = TDirectPrintCapability::Enum;
+
+		CDirectPrintBaseCapability* capability = 0;
+
+		// Create capability
+		switch ( capab.iType )
+			{
+			case TDirectPrintCapability::Int:
+				capability = DirectPrintSettingsConverter::AddTIntCapabilityLC( capab, i, capabIDs[i] );
+				break;
+			case TDirectPrintCapability::Enum:
+				capability = DirectPrintSettingsConverter::AddListCapabilityLC( capab, i, capabIDs[i] );
+				break;
+			case TDirectPrintCapability::Float:
+				capability = DirectPrintSettingsConverter::AddFloatCapabilityLC( capab, i, capabIDs[i] );
+				break;
+			case TDirectPrintCapability::Text:
+				capability = DirectPrintSettingsConverter::AddTextCapabilityLC( capab, i, capabIDs[i] );
+				break;
+			default:
+				User::Leave( KErrUnknown );
+				break;
+			}
+		//iBearer.GetJobSetting( capabIDs[i], capability->iValue );
+
+		// Add the capability to the list
+		User::LeaveIfError( printSettings->iCapabilities.Append( capability ) );
+		CleanupStack::Pop();    // capability
+		}
+
+	delete iPrintSettings;
+	iPrintSettings = printSettings;
+
+	CleanupStack::Pop();    // printSettings
+	CleanupStack::PopAndDestroy();  // capabIDs
+	}
+
+TInt CDirectPrintBearerMgr::GetJobSetting(TInt aCapabilityID, TInt& aValue)
+	{
+	return iBearer.GetJobSetting(aCapabilityID, aValue);
+	}
+
+TInt CDirectPrintBearerMgr::SetJobSetting(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability)
+	{
+	return iBearer.SetJobSetting(aCapabilityID, aValue, aAffectedCapability);
+	}
+
+void CDirectPrintBearerMgr::SetJobSettings()
+	{
+	TInt i( 0 );
+	TInt num( iPrintSettings->iCapabilities.Count() );
+	for ( i = 0; i < num; i++ )
+		{
+		TInt getSettings;
+		iBearer.SetJobSetting(iPrintSettings->iCapabilities[i]->iUid, iPrintSettings->iCapabilities[i]->iValue, getSettings);
+		}
+	}
+
+CDirectPrintPrintSettings* CDirectPrintBearerMgr::PrinterSettingsL()
+	{
+	//return iPrintSettings->CloneL();
+	return iPrintSettings;
+	}
+
+TInt CDirectPrintBearerMgr::CreatePrinterUid(TInt aIndex)
+	{
+	TInt printerUid = 0;
+	TInt protocolIndex = aIndex;
+	protocolIndex <<= sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT;
+	printerUid |= protocolIndex;
+	return printerUid;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintmodel.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,476 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* This model class for DirectPrint data managemrnt
+*
+*/
+
+#include <bautils.h>
+#include <eikenv.h>
+#include <s32file.h>
+#include <DirectPrintApp.rsg>
+
+#include "clog.h"
+#include "DirectPrintModel.h"
+#include "directprintprinterinforeader.h"
+
+CDirectPrintModel::CDirectPrintModel()
+	: iCurrentPrinter(-1)
+	, iCurrentBearer(-1)
+	, iCurrentProperty(-1)
+	, iMaxPrinterId(0)
+	{
+	}
+
+CDirectPrintModel::~CDirectPrintModel()
+	{
+	iPrinters.Close();
+	iBearers.Close();
+	iProperties.ResetAndDestroy();
+	delete iPrinterInfoReader;
+	}
+
+CDirectPrintModel* CDirectPrintModel::NewL()
+	{
+	CDirectPrintModel* self = CDirectPrintModel::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintModel* CDirectPrintModel::NewLC()
+	{
+	CDirectPrintModel* self = new(ELeave) CDirectPrintModel();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintModel::ConstructL()
+	{
+	LOG("CDirectPrintModel::ConstructL BEGIN");
+	iFs = CEikonEnv::Static()->FsSession();
+
+	// Read setting data
+	InternalizeDataL();
+
+	iPrinterInfoReader = CDirectPrintPrinterInfoReader::NewL(*this);
+	iPrinterInfoReader->ReadPrinterInfoL();
+
+	LOG("CDirectPrintModel::ConstructL END");
+	}
+
+void CDirectPrintModel::InitializeDataL()
+	{
+	}
+
+void CDirectPrintModel::InternalizeDataL()
+	{
+	LOG("CDirectPrintModel::ConstructL BEGIN");
+	TFileName fileName;
+	CEikonEnv::Static()->ReadResourceAsDes16L(fileName, R_DIRECTPRINT_SETTING_FILE);
+
+	if (BaflUtils::FileExists(iFs, fileName))
+		{
+		LOG("CDirectPrintModel::ConstructL file exist");
+		RFileReadStream stream;
+		TInt err = stream.Open(iFs, fileName, EFileRead|EFileStream);
+
+		TInt count, i;
+		count = stream.ReadInt32L();
+		for (i=0; i<count; i++)
+			{
+			TDirectPrintPrinterData data;
+			data.InternalizeL(stream);
+			AddPrinterDataL(data);
+			if (iMaxPrinterId < data.iPrinterId)
+				{
+				iMaxPrinterId = data.iPrinterId;
+				}
+			}
+		iCurrentPrinter = stream.ReadInt32L();
+
+		count = stream.ReadInt32L();
+		for (i=0; i<count; i++)
+			{
+			TDirectPrintBearerData data;
+			data.InternalizeL(stream);
+			AddBearerDataL(data);
+			}
+		iCurrentBearer = stream.ReadInt32L();
+
+		count = stream.ReadInt32L();
+		for (i=0; i<count; i++)
+			{
+			CPrinterProperty* property = new(ELeave)CPrinterProperty();
+			CleanupStack::PushL(property);
+			property->InternalizeL(stream);
+			CleanupStack::Pop(property);
+			AddPrinterPropertyL(property);
+			}
+		iCurrentProperty = stream.ReadInt32L();
+
+		stream.Close();
+		}
+	LOG("CDirectPrintModel::ConstructL END");
+	}
+
+void CDirectPrintModel::ExternalizeDataL()
+	{
+	LOG("CDirectPrintModel::ExternalizeDataL START");
+	TFileName fileName;
+	CEikonEnv::Static()->ReadResourceAsDes16L(fileName, R_DIRECTPRINT_SETTING_FILE);
+
+	RFileWriteStream stream;
+	TInt err = stream.Replace(iFs, fileName, EFileWrite|EFileStream);
+
+	TInt count, i;
+	count = iPrinters.Count();
+	stream.WriteInt32L(count);
+	for (i=0; i<count; i++)
+		{
+		iPrinters[i].ExternalizeL(stream);
+		}
+	stream.WriteInt32L(iCurrentPrinter);
+
+	count = iBearers.Count();
+	stream.WriteInt32L(count);
+	for (i=0; i<count; i++)
+		{
+		iBearers[i].ExternalizeL(stream);
+		}
+	stream.WriteInt32L(iCurrentBearer);
+
+	count = iProperties.Count();
+	stream.WriteInt32L(count);
+	for (i=0; i<count; i++)
+		{
+		iProperties[i]->ExternalizeL(stream);
+		}
+	stream.WriteInt32L(iCurrentProperty);
+
+	stream.Close();
+	LOG("CDirectPrintModel::ExternalizeDataL END");
+	}
+
+void CDirectPrintModel::GetPrinterDataL(TInt aIndex, TDirectPrintPrinterData& aData)
+	{
+	aData = iPrinters[aIndex];
+	}
+
+void CDirectPrintModel::GetBearerDataL(TInt aIndex, TDirectPrintBearerData& aData)
+	{
+	aData = iBearers[aIndex];
+	}
+
+void CDirectPrintModel::GetCurrentBearerDataL(TDirectPrintBearerData& aData)
+	{
+	TDirectPrintPrinterData printer;
+	GetPrinterDataL(CurrentPrinter(), printer);
+
+	TInt count = BearerCount();
+	for (TInt i=0; i<count; i++)
+		{
+		TInt printerId = iBearers[i].iPrinterId;
+		if (printerId == printer.iPrinterId)
+			{
+			aData = iBearers[i];
+			break;
+			}
+		}
+	}
+
+void CDirectPrintModel::GetSelectedBearerDataL(TDirectPrintBearerData& aData)
+	{
+	TDirectPrintPrinterData printer;
+	GetPrinterDataL(SelectPrinter(), printer);
+
+	TInt count = BearerCount();
+	for (TInt i=0; i<count; i++)
+		{
+		TInt printerId = iBearers[i].iPrinterId;
+		if (printerId == printer.iPrinterId)
+			{
+			aData = iBearers[i];
+			break;
+			}
+		}
+	}
+
+CPrinterProperty* CDirectPrintModel::GetPrinterPropertyL(TInt aIndex)
+	{
+	return iProperties[aIndex];
+	}
+
+CPrinterProperty* CDirectPrintModel::GetCurrentPrinterPropertyL(TUid aAppUid)
+	{
+	CPrinterProperty* property = NULL;
+	TDirectPrintPrinterData printer;
+	GetPrinterDataL(CurrentPrinter(), printer);
+
+	TInt index, count;
+	count = PropertyCount();
+	for (index=0; index<count; index++)
+		{
+		TInt printerId = iProperties[index]->iPrinterId;
+		TUid uid = TUid::Uid(iProperties[index]->iApplicationId);
+		if ((printerId == printer.iPrinterId) &&
+			(uid == aAppUid))
+			{
+			if (iCurrentProperty != index)
+				{
+				iCurrentProperty = index;
+				}
+			property = iProperties[index];
+			break;
+			}
+		}
+
+	return property;
+	}
+
+TInt CDirectPrintModel::GetCurrentPrinterIdL()
+	{
+	TDirectPrintPrinterData printer;
+	GetPrinterDataL(CurrentPrinter(), printer);
+	return printer.iPrinterId;
+	}
+
+TInt CDirectPrintModel::CurrentPrinter()
+	{
+	return iCurrentPrinter;
+	}
+
+TInt CDirectPrintModel::CurrentBearer()
+	{
+	return iCurrentBearer;
+	}
+
+TInt CDirectPrintModel::CurrentProperty()
+	{
+	return iCurrentProperty;
+	}
+
+TInt CDirectPrintModel::SelectPrinter()
+	{
+	return iSelectPrinter;
+	}
+
+TInt CDirectPrintModel::PrinterCount()
+	{
+	return iPrinters.Count();
+	}
+
+TInt CDirectPrintModel::BearerCount()
+	{
+	return iBearers.Count();
+	}
+
+TInt CDirectPrintModel::PropertyCount()
+	{
+	return iProperties.Count();
+	}
+
+void CDirectPrintModel::SetPrinterDataL(TInt aIndex, const TDirectPrintPrinterData& aData)
+	{
+	if ((aIndex >= 0) && (iPrinters.Count() > aIndex))
+		{
+		iPrinters[aIndex] = aData;
+		}
+	else
+		{
+		iPrinters.AppendL(aData);
+		}
+	iPrinterInfoReader->ReadPrinterInfoL();
+	}
+
+void CDirectPrintModel::SetPrinterDataL(const TDirectPrintPrinterData& aData)
+	{
+	TBool isSet = EFalse;
+	TInt count = PrinterCount();
+	for (TInt i=0; i<count; i++)
+		{
+		TInt printerId = iPrinters[i].iPrinterId;
+		if (printerId == aData.iPrinterId)
+			{
+			iPrinters[i] = aData;
+			isSet = ETrue;
+			break;
+			}
+		}
+
+	if (!isSet)
+		{
+		iPrinters.AppendL(aData);
+		}
+	iPrinterInfoReader->ReadPrinterInfoL();
+	}
+
+void CDirectPrintModel::SetBearerDataL(TInt aIndex, const TDirectPrintBearerData& aData)
+	{
+	if ((aIndex >= 0) && (iBearers.Count() > aIndex))
+		{
+		iBearers[aIndex] = aData;
+		}
+	else
+		{
+		iBearers.AppendL(aData);
+		}
+	}
+
+void CDirectPrintModel::SetBearerDataL(const TDirectPrintBearerData& aData)
+	{
+	TBool isSet = EFalse;
+	TInt count = BearerCount();
+	for (TInt i=0; i<count; i++)
+		{
+		TInt printerId = iBearers[i].iPrinterId;
+		if (printerId == aData.iPrinterId)
+			{
+			iBearers[i] = aData;
+			isSet = ETrue;
+			break;
+			}
+		}
+
+	if (!isSet)
+		{
+		iBearers.AppendL(aData);
+		}
+	}
+
+void CDirectPrintModel::SetPrinterPropertyL(TInt aIndex, CPrinterProperty* aProperty)
+	{
+	if ((aIndex >= 0) && (iProperties.Count() > aIndex))
+		{
+		*(iProperties[aIndex]) = *aProperty;
+		delete aProperty;
+		}
+	else
+		{
+		iProperties.AppendL(aProperty);
+		}
+	}
+
+void CDirectPrintModel::SetPrinterPropertyL(CPrinterProperty* aProperty)
+	{
+	CPrinterProperty* property = GetCurrentPrinterPropertyL(TUid::Uid(aProperty->iApplicationId));
+	if (property)
+		{
+		TInt count1, count2;
+		count1 = property->iPropertyItems.Count();
+		count2 = aProperty->iPropertyItems.Count();
+		for (TInt i=0; i<count2; i++)
+			{
+			TBool isSet = EFalse;
+			for (TInt j=0; j<count1; j++)
+				{
+				if (aProperty->iPropertyItems[i].iItemId == property->iPropertyItems[j].iItemId)
+					{
+					(property->iPropertyItems[j]) = (aProperty->iPropertyItems[i]);
+					isSet = ETrue;
+					break;
+					}
+				}
+
+			if (!isSet)
+				{
+				property->iPropertyItems.AppendL(aProperty->iPropertyItems[i]);
+				}
+			}
+		delete aProperty;
+		}
+	else
+		{
+		iProperties.AppendL(aProperty);
+		}
+	}
+
+void CDirectPrintModel::SetCurrentPrinter(TInt aIndex)
+	{
+	iCurrentPrinter = aIndex;
+	}
+
+void CDirectPrintModel::SetCurrentBearer(TInt aIndex)
+	{
+	iCurrentBearer = aIndex;
+	}
+
+void CDirectPrintModel::SetCurrentProperty(TInt aIndex)
+	{
+	iCurrentProperty = aIndex;
+	}
+
+void CDirectPrintModel::SetSelectPrinter(TInt aIndex)
+	{
+	iSelectPrinter = aIndex;
+	}
+
+void CDirectPrintModel::AddPrinterDataL(const TDirectPrintPrinterData& aData)
+	{
+	iPrinters.AppendL(aData);
+	}
+
+void CDirectPrintModel::AddBearerDataL(const TDirectPrintBearerData& aData)
+	{
+	iBearers.AppendL(aData);
+	}
+
+void CDirectPrintModel::AddPrinterPropertyL(CPrinterProperty* aProperty)
+	{
+	iProperties.AppendL(aProperty);
+	}
+
+void CDirectPrintModel::RemovePrinterDataL(TInt aIndex)
+	{
+	if ((aIndex >= 0) && (iPrinters.Count() > aIndex))
+		{
+		iPrinters.Remove(aIndex);
+		}
+	}
+
+void CDirectPrintModel::RemoveBearerDataL(TInt aIndex)
+	{
+	if ((aIndex >= 0) && (iBearers.Count() > aIndex))
+		{
+		iBearers.Remove(aIndex);
+		}
+	}
+
+void CDirectPrintModel::RemovePrinterPropertyL(TInt aIndex)
+	{
+	if ((aIndex >= 0) && (iProperties.Count() > aIndex))
+		{
+		iProperties.Remove(aIndex);
+		}
+	}
+
+void CDirectPrintModel::MoveTopPrinterDataL(TInt aIndex)
+	{
+	if ((aIndex >= 0) && (iPrinters.Count() > aIndex))
+		{
+		TDirectPrintPrinterData data = iPrinters[aIndex];
+		iPrinters.Remove(aIndex);
+		iPrinters.Insert(data, 0);
+		}
+	iPrinterInfoReader->ReadPrinterInfoL();
+	}
+
+TUid CDirectPrintModel::SettingUIPluginUidL()
+	{
+	TDirectPrintPrinterData printer;
+	GetPrinterDataL(0, printer);
+
+	return iPrinterInfoReader->GetSettingUIPluginL(printer.iTypeName);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintmsgutil.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* This class is the message utility class of DirectPrint
+*
+*/
+
+#include <bautils.h>
+#include <eikenv.h>
+#include <s32file.h>
+#include <aknnotewrappers.h>
+#include <DirectPrintApp.rsg>
+
+#include "clog.h"
+#include "DirectPrintMsgUtil.h"
+
+CDirectPrintMsgUtil::CDirectPrintMsgUtil()
+	{
+	}
+
+CDirectPrintMsgUtil::~CDirectPrintMsgUtil()
+	{
+	}
+
+CDirectPrintMsgUtil* CDirectPrintMsgUtil::NewL()
+	{
+	CDirectPrintMsgUtil* self = CDirectPrintMsgUtil::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintMsgUtil* CDirectPrintMsgUtil::NewLC()
+	{
+	CDirectPrintMsgUtil* self = new(ELeave) CDirectPrintMsgUtil();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintMsgUtil::ConstructL()
+	{
+	LOG("CDirectPrintMsgUtil::ConstructL BEGIN");
+
+	LOG("CDirectPrintMsgUtil::ConstructL END");
+	}
+
+// -----------------------------------------------------------------------------
+// Displays error note
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintMsgUtil::DisplayErrorNoteL( TInt aResourceId )
+    {
+    HBufC* noteBuf = CCoeEnv::Static()->AllocReadResourceLC( aResourceId );
+    CAknErrorNote* errorNote = new( ELeave ) CAknErrorNote();
+    errorNote->ExecuteLD( *noteBuf );
+    CleanupStack::PopAndDestroy( noteBuf );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintprinterdata.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <s32strm.h>
+
+#include "directprintprinterdata.h"
+
+EXPORT_C void TDirectPrintPrinterData::InternalizeL(RReadStream& aStream)
+	{
+	iPrinterId = aStream.ReadInt32L();
+	TInt length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iPrinterName, length);
+		}
+	iPrinterDriver = TUid::Uid(aStream.ReadInt32L());
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iDriverName, length);
+		}
+	iPrinterType = aStream.ReadInt32L();
+	length = aStream.ReadInt32L();
+	if(length > 0)
+		{
+		aStream.ReadL(iTypeName, length);
+		}
+	}
+
+EXPORT_C void TDirectPrintPrinterData::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iPrinterId);
+	aStream.WriteInt32L(iPrinterName.Length());
+	if (iPrinterName.Length() > 0)
+		{
+		aStream.WriteL(iPrinterName);
+		}
+	aStream.WriteInt32L(iPrinterDriver.iUid);
+	aStream.WriteInt32L(iDriverName.Length());
+	if (iDriverName.Length() > 0)
+		{
+		aStream.WriteL(iDriverName);
+		}
+	aStream.WriteInt32L(iPrinterType);
+	aStream.WriteInt32L(iTypeName.Length());
+	if (iTypeName.Length() > 0)
+		{
+		aStream.WriteL(iTypeName);
+		}
+	}
+
+EXPORT_C TDirectPrintPrinterData& TDirectPrintPrinterData::operator=(const TDirectPrintPrinterData& aData)
+	{
+	iPrinterId = aData.iPrinterId;
+	iPrinterName.Copy(aData.iPrinterName);
+	iPrinterDriver = aData.iPrinterDriver;
+	iDriverName.Copy(aData.iDriverName);
+	iPrinterType = aData.iPrinterType;
+	iTypeName.Copy(aData.iTypeName);
+	return *this;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintprinterinforeader.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,246 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <eikenv.h>
+#include <f32file.h>
+#include <xmlengelement.h>
+#include <xmlengattr.h>
+#include <xmlengnodelist.h>
+
+#include "DirectPrintModel.h"
+#include "directprintprinterinforeader.h"
+
+CDirectPrintPrinterInfoReader::CDirectPrintPrinterInfoReader(CDirectPrintModel& aModel)
+	: iModel(aModel)
+	{
+	}
+
+CDirectPrintPrinterInfoReader::~CDirectPrintPrinterInfoReader()
+	{
+	if (iXmlEngDoc.NotNull()) 
+		{
+		iXmlEngDoc.Close();
+		iXmlParser.Close();
+		iXmlDomImpl.Close();
+		}
+	}
+
+CDirectPrintPrinterInfoReader* CDirectPrintPrinterInfoReader::NewL(CDirectPrintModel& aModel)
+	{
+	CDirectPrintPrinterInfoReader* self = CDirectPrintPrinterInfoReader::NewLC(aModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintPrinterInfoReader* CDirectPrintPrinterInfoReader::NewLC(CDirectPrintModel& aModel)
+	{
+	CDirectPrintPrinterInfoReader* self = new(ELeave) CDirectPrintPrinterInfoReader(aModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintPrinterInfoReader::ConstructL()
+	{
+	iXmlDomImpl.OpenL();
+	TInt err = iXmlParser.Open(iXmlDomImpl);
+	User::LeaveIfError(err);
+	}
+
+void CDirectPrintPrinterInfoReader::ReadPrinterInfoL()
+	{
+	TDirectPrintPrinterData printer;
+	iModel.GetPrinterDataL(0, printer);
+
+	_LIT( KFilePath, "c:\\printers\\*.xml");
+	_LIT( KFilePathFormat, "c:\\printers\\%S");
+
+	CDir* fileList;
+	const TUint KMask = KEntryAttNormal|KEntryAttReadOnly|KEntryAttHidden|KEntryAttSystem;
+	User::LeaveIfError(CEikonEnv::Static()->FsSession().GetDir(KFilePath, KMask, ESortByName, fileList));
+	CleanupStack::PushL(fileList);
+
+	TInt count = fileList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		TFileName filename;
+		filename.Format(KFilePathFormat, &(*fileList)[i].iName);
+		ReadXmlDataL(filename);
+
+		// Check XML file for current printer driver
+		if (CheckManufactureL(printer.iDriverName))
+			{
+			break;
+			}
+		else
+			{
+		    iXmlEngDoc.Close();
+			}
+		}
+
+	CleanupStack::PopAndDestroy(); // fileList
+	}
+
+void CDirectPrintPrinterInfoReader::GetManufactureL(TDes& aManufacture)
+	{
+	if (iXmlEngDoc.NotNull()) 
+		{
+		_LIT8(KElementManufacture, "Manufacture");
+
+		TXmlEngElement element = iXmlEngDoc.DocumentElement().FirstChild().AsElement();
+
+		while (element.NotNull())
+			{
+			TBuf<50> elementName;
+			elementName.Copy(element.Name());
+			if (element.Name().CompareF(KElementManufacture()) == 0)
+				{
+				aManufacture.Copy(element.Value());
+				break;
+				}
+
+			element = element.NextSibling().AsElement();
+			}
+		}
+	}
+
+TUid CDirectPrintPrinterInfoReader::GetDriverL(TDesC& aId)
+	{
+	TUint uidValue = 0;
+
+	if (iXmlEngDoc.NotNull()) 
+		{
+		_LIT8(KElementPrinters, "Printers");
+		_LIT8(KElementPrinter, "Printer");
+		_LIT8(KElementDriver, "Driver");
+		_LIT8(KAttributeId, "id");
+
+		TXmlEngElement element = iXmlEngDoc.DocumentElement().FirstChild().AsElement();
+
+		while (element.NotNull())
+			{
+			TBuf<50> elementName;
+			elementName.Copy(element.Name());
+			if (element.Name().CompareF(KElementPrinters()) == 0)
+				{
+				element = element.FirstChild().AsElement();
+				}
+			else if (element.Name().CompareF(KElementPrinter()) == 0)
+				{
+				TBool next = EFalse;
+				TBuf<50> attrValue;
+				TXmlEngAttr attr = element.AttributeNodeL(KAttributeId);
+				attrValue.Copy(attr.Value());
+				if (aId.CompareF(attrValue) == 0)
+					{
+					element = element.FirstChild().AsElement();
+					next = ETrue;
+					}
+
+				if (!next)
+					{
+					element = element.NextSibling().AsElement();
+					}
+				}
+			else if (element.Name().CompareF(KElementDriver()) == 0)
+				{
+				TLex8 lex(element.Value());
+				lex.Val(uidValue, EHex);
+				break;
+				}
+			else
+				{
+				element = element.NextSibling().AsElement();
+				}
+			}
+		}
+
+	return TUid::Uid(uidValue);
+	}
+
+TUid CDirectPrintPrinterInfoReader::GetSettingUIPluginL(TDesC& aId)
+	{
+	TUint uidValue = 0;
+
+	if (iXmlEngDoc.NotNull()) 
+		{
+		_LIT8(KElementPrinters, "Printers");
+		_LIT8(KElementPrinter, "Printer");
+		_LIT8(KElementSettingUIPlugin, "SettingUIPlugin");
+		_LIT8(KAttributeId, "id");
+
+		TXmlEngElement element = iXmlEngDoc.DocumentElement().FirstChild().AsElement();
+
+		while (element.NotNull())
+			{
+			if (element.Name().CompareF(KElementPrinters()) == 0)
+				{
+				element = element.FirstChild().AsElement();
+				}
+			else if (element.Name().CompareF(KElementPrinter()) == 0)
+				{
+				TBool next = EFalse;
+				TBuf<50> attrValue;
+				TXmlEngAttr attr = element.AttributeNodeL(KAttributeId);
+				attrValue.Copy(attr.Value());
+				if (aId.CompareF(attrValue) == 0)
+					{
+					element = element.FirstChild().AsElement();
+					next = ETrue;
+					}
+
+				if (!next)
+					{
+					element = element.NextSibling().AsElement();
+					}
+				}
+			else if (element.Name().CompareF(KElementSettingUIPlugin()) == 0)
+				{
+				TLex8 lex(element.Value());
+				lex.Val(uidValue, EHex);
+				break;
+				}
+
+			element = element.NextSibling().AsElement();
+			}
+		}
+
+	return TUid::Uid(uidValue);
+	}
+
+void CDirectPrintPrinterInfoReader::ReadXmlDataL(const TDesC& aFilename)
+	{
+	if (iXmlEngDoc.NotNull()) 
+		{
+		iXmlEngDoc.Close();
+		}
+	iXmlEngDoc = iXmlParser.ParseFileL(aFilename);
+	}
+
+TBool CDirectPrintPrinterInfoReader::CheckManufactureL(const TDesC& aParam)
+	{
+	TBool res = EFalse;
+	TBuf<50> buf;
+	GetManufactureL(buf);
+	if (aParam.Compare(buf) == 0)
+		{
+		res = ETrue;
+		}
+	return res;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintproperty.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+// INCLUDE FILES
+#include <s32strm.h>
+
+#include "directprintproperty.h"
+
+EXPORT_C CPrinterProperty::CPrinterProperty()
+	{
+	}
+
+EXPORT_C CPrinterProperty::~CPrinterProperty()
+	{
+	iPropertyItems.Close();
+	}
+
+EXPORT_C void CPrinterProperty::InternalizeL(RReadStream& aStream)
+	{
+	iPrinterId = aStream.ReadInt32L();
+	iApplicationId = aStream.ReadInt32L();
+	iPropertyItems.Reset();
+	TInt count = aStream.ReadInt32L();
+	for (TInt i=0; i<count; i++)
+		{
+		TDirectPrintPropertyData item;
+		item.InternalizeL(aStream);
+		iPropertyItems.Append(item);
+		}
+	}
+
+EXPORT_C void CPrinterProperty::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt32L(iPrinterId);
+	aStream.WriteInt32L(iApplicationId);
+	TInt count = iPropertyItems.Count();
+	aStream.WriteInt32L(count);
+	for (TInt i=0; i<count; i++)
+		{
+		iPropertyItems[i].ExternalizeL(aStream);
+		}
+	}
+
+EXPORT_C CPrinterProperty& CPrinterProperty::operator=(const CPrinterProperty& aProperty)
+	{
+	iPrinterId = aProperty.iPrinterId;
+	iApplicationId = aProperty.iApplicationId;
+	iPropertyItems.Reset();
+	TInt count = aProperty.iPropertyItems.Count();
+	for (TInt i=0; i<count; i++)
+		{
+		iPropertyItems.Append(aProperty.iPropertyItems[i]);
+		}
+	return *this;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintuipluginmgr.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* This class for DirectPrint UI_Plugin managemrnt
+*
+*/
+
+// User includes
+#include "DirectPrintUiPluginMgr.h"
+#include "DirectPrintModel.h"
+#include "DirectPrintUiPlugin.h"
+#include "directprintprinterdata.h"
+
+CDirectPrintUiPluginMgr::CDirectPrintUiPluginMgr(CDirectPrintModel& aModel)
+	: iModel(aModel)
+	, iPlugin(NULL)
+	{
+	}
+
+CDirectPrintUiPluginMgr::~CDirectPrintUiPluginMgr()
+	{
+	delete iPlugin;
+	}
+
+CDirectPrintUiPluginMgr* CDirectPrintUiPluginMgr::NewL(CDirectPrintModel& aModel)
+	{
+	CDirectPrintUiPluginMgr* self = CDirectPrintUiPluginMgr::NewLC(aModel);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintUiPluginMgr* CDirectPrintUiPluginMgr::NewLC(CDirectPrintModel& aModel)
+	{
+	CDirectPrintUiPluginMgr* self = new(ELeave) CDirectPrintUiPluginMgr(aModel);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintUiPluginMgr::ConstructL()
+	{
+	iCurrentPluginUid = TUid::Uid(0);
+	}
+
+void CDirectPrintUiPluginMgr::LoadPluginL(TUid aUid)
+	{
+	delete iPlugin;
+	iPlugin = NULL;
+	if (aUid.iUid > 0)
+		{
+		iPlugin = CDirectPrintUiPlugin::NewL(aUid);
+		}
+	}
+
+void CDirectPrintUiPluginMgr::LoadPluginL(const TDesC8& aKey)
+	{
+	delete iPlugin;
+	iPlugin = NULL;
+	if (aKey.Length() > 0)
+		{
+		iPlugin = CDirectPrintUiPlugin::NewL(aKey);
+		}
+	}
+
+CDirectPrintUiPlugin* CDirectPrintUiPluginMgr::CurrentPluginL()
+	{
+	TUid uid = iModel.SettingUIPluginUidL();
+	if (iCurrentPluginUid != uid)
+		{
+		LoadPluginL(uid);
+		iCurrentPluginUid = uid;
+		}
+
+	return iPlugin;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintlistbox.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTLISTBOX_H__
+#define __DIRECTPRINTLISTBOX_H__
+
+// System includes
+#include <aknlists.h>
+
+// User includes
+#include "DirectPrintListObserver.h"
+
+// Class declaration
+/**
+ *  Listbox class
+ *  more_complete_description
+ */
+class CDirectPrintListBox : public CCoeControl, public MEikListBoxObserver
+	{
+public:
+	// Data types
+	/** The index of controls */
+	enum TControls
+		{
+		EListBox = 0,
+		ELastControl
+		};
+
+public:
+	/** Constructors */
+	static CDirectPrintListBox* NewL(const TRect& aRect, CDesCArray* aItemArray);
+	static CDirectPrintListBox* NewLC(const TRect& aRect, CDesCArray* aItemArray);
+	/** Destructor */
+	virtual ~CDirectPrintListBox();
+
+public:
+	/**
+	 * From CCoeControl.
+	 * Get count of component controls.
+	 *
+	 * @return Count of component controls.
+	 */
+	TInt CountComponentControls() const;
+	/**
+	 * From CCoeControl.
+	 * Get component controls.
+	 *
+	 * @param aIndex The index of controls
+	 * @return Component control.
+	 */
+	CCoeControl* ComponentControl( TInt aIndex ) const;
+
+public:
+	/**
+	 * From MEikListBoxObserver.
+	 * Handles listbox events.
+	 *
+	 * @param aListBox Pointer to listbox control.
+	 * @param aEventType Event type.
+	 */
+	void HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType);
+
+public: // New Function
+	/**
+	 * Set listbox items.
+	 *
+	 * @param aItemArray Pointer to item array.
+	 */
+	void SetItemL(CDesCArray* aItemArray);
+	/**
+	 * Set list observer.
+	 *
+	 * @param aObserver Pointer to list observer.
+	 */
+	void SetListObserver(MDirectPrintListObserver* aObserver);
+	/**
+	 * Delete current item from listbox.
+	 *
+	 * @return Result value.
+	 */
+	TInt DeleteCurrentItemL();
+	/**
+	 * redraw listbox.
+	 */
+	void RedrawListL();
+	/**
+	 * Get the index of current item.
+	 *
+	 * @return The index of current listbox item.
+	 */
+	TInt CurrentIndex();
+	/**
+	 * Set focus.
+	 *
+	 * @param aIndex The index of listbox item
+	 */
+	void SetFocusL(TInt aIndex);
+
+private:
+	CDirectPrintListBox();
+	void ConstructL(const TRect& aRect, CDesCArray* aItemArray);
+
+	void InitializeControlsL();
+
+private:
+	/** Listbox control. */
+	CAknDoubleStyleListBox* iListBox;		// Owend Data
+	/** Pointer to list observer. */
+	MDirectPrintListObserver* iListObserver;
+	};
+
+#endif // __DIRECTPRINTLISTBOX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintlistobserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTLISTOBSERVER_H__
+#define __DIRECTPRINTLISTOBSERVER_H__
+
+// Class declaration
+/**
+ *  List observer mix-in class
+ *  more_complete_description
+ */
+class MDirectPrintListObserver
+	{
+public:
+	/**
+	 * Handles index.
+	 *
+	 * @param aIndex The index of selected item.
+	 */
+	virtual void HandleListIndexL(TInt aIndex) = 0;
+	};
+
+#endif // __DIRECTPRINTLISTOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintlistview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __PRINTERLISTVIEW_H__
+#define __PRINTERLISTVIEW_H__
+
+// System includes
+#include <aknlists.h>
+#include <akntoolbarobserver.h>
+
+// User includes
+#include "DirectPrintViewBase.h"
+#include "DirectPrintListBox.h"
+
+// Class declaration
+/**
+ *  List view class
+ *  more_complete_description
+ */
+class CDirectPrintListView : public CDirectPrintViewBase, public MAknToolbarObserver
+	{
+public:
+	/** Constructors */
+	static CDirectPrintListView* NewL();
+	static CDirectPrintListView* NewLC();
+	/** Destructor */
+	~CDirectPrintListView();
+
+public:
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+public:
+	/**
+	 * From MDirectPrintListObserver.
+	 * Handles index.
+	 *
+	 * @param aIndex The index of list items.
+	 */
+	void HandleListIndexL(TInt aIndex);
+
+public: // from MAknToolbarObserver
+	/**
+	 * From MAknToolbarObserver.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void OfferToolbarEventL(TInt aCommand);
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+private:
+	CDirectPrintListView();
+	void ConstructL();
+
+	void LoadListDataL();
+	void PrepareNewDataL();
+
+private:
+	/** Pointer to listbox. */
+	CDirectPrintListBox* iListBox;		// Owend Data
+	/** Pointer to item array. */
+	CDesCArray* iItemArray;
+	};
+
+#endif // __PRINTERLISTVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintmainview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __PRINTMAINVIEW_H__
+#define __PRINTMAINVIEW_H__
+
+// System includes
+#include <aknlists.h>
+#include <akntoolbarobserver.h>
+
+// User includes
+#include "DirectPrintViewBase.h"
+#include "DirectPrintListBox.h"
+
+// Class declaration
+/**
+ *  Main view class
+ *  more_complete_description
+ */
+class CDirectPrintMainView : public CDirectPrintViewBase, public MAknToolbarObserver
+	{
+private:
+	// Data types
+	/** The index of list items */
+	enum
+		{
+		EItemPrinter,
+		EItemBearer,
+		EItemSetting
+		};
+
+public:
+	/** Constructors */
+	static CDirectPrintMainView* NewL();
+	static CDirectPrintMainView* NewLC();
+	/** Destructor */
+	~CDirectPrintMainView();
+
+public: // from CAknView
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+public:
+	/**
+	 * From MDirectPrintListObserver.
+	 * Handles index.
+	 *
+	 * @param aIndex The index of list items.
+	 */
+	void HandleListIndexL(TInt aIndex);
+
+public:
+	/**
+	 * From MAknToolbarObserver.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void OfferToolbarEventL(TInt aCommand);
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+private:
+	CDirectPrintMainView();
+	void ConstructL();
+
+	void LoadListDataL();
+	void MakePropertyStringL(TDes& aProperty);
+
+private:
+	/** Pointer to listbox. */
+	CDirectPrintListBox* iListBox;		// Owend Data
+	/** Pointer to item array. */
+	CDesCArray* iItemArray;
+	};
+
+#endif // __PRINTMAINVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintpreviewcontrol.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,254 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPREVIEWCONTROL_H__
+#define __DIRECTPRINTPREVIEWCONTROL_H__
+
+// System includes
+#include <eikbctrl.h>
+#include <prnprev.h>
+
+// Forward declarations
+class CPrintSetup;
+class TPrintPreviewFormat;
+class MPageRegionPrinter;
+class MPrintProcessObserver;
+
+// Class declaration
+/**
+ *  Preview control class
+ *  more_complete_description
+ */
+class CDirectPrintPreviewControl : public CEikBorderedControl
+								 , public MCoeControlObserver
+	{
+public:
+	// Data types
+	/** The index of zoom level */
+	enum TPreviewZoomLevel
+		{
+		EPreviewZoomLevel1, // display into view area
+		EPreviewZoomLevel2,
+		EPreviewZoomLevel3,
+		EPreviewZoomLevel4,
+		EPreviewZoomLevel5,
+		EPreviewZoomLevelMax
+		};
+
+public:
+	/** Constructors */
+	static CDirectPrintPreviewControl* NewL(const CCoeControl* aParent);
+	static CDirectPrintPreviewControl* NewLC(const CCoeControl* aParent);
+	/** Destructor */
+	virtual ~CDirectPrintPreviewControl();
+
+public:
+	/**
+	 * Set observer.
+	 *
+	 * @param aObserver Pointer to observer.
+	 */
+	void SetPreviewImageObserver(MPrintProcessObserver* aObserver);
+
+	/**
+	 * Initialize display format.
+	 *
+	 * @param aPrintSetup Setup information.
+	 * @param aBodyPrinter Body printer.
+	 * @param aFormat Display format information.
+	 * @param aNumPagesInDoc Number of all pages.
+	 * @param aFirstPageToDisplay Page number of first display.
+	 * @param aNumPagesToView Number of pages to view.
+	 * @param aMarginState Margin information.
+	 */
+	void InitializeFormat(	CPrintSetup& aPrintSetup,
+							MPageRegionPrinter& aBodyPrinter,
+							TPrintPreviewFormat& aFormat,
+							TInt& aNumPagesInDoc,
+							TInt& aFirstPageToDisplay,
+							TInt aNumPagesToView,
+							CPrintPreviewImage::TMarginState& aMarginState);
+	/**
+	 * Set display format.
+	 *
+	 * @param aFirstPageToDisplay Page number of first display.
+	 * @param aNumPagesToView Count of pages to view.
+	 */
+	void SetFormatAndDrawL(TInt& aFirstPageToDisplay,TInt& aNumPagesToView);
+	/**
+	 * Set margin.
+	 *
+	 * @param aMarginState Margin information.
+	 */
+	void SetMarginAndDrawL(CPrintPreviewImage::TMarginState aMarginState);
+	/**
+	 * Set number of bands.
+	 *
+	 * @param aNumBands Number of bands.
+	 */
+	void SetNumBands(TInt aNumBands);
+	/**
+	 * Set page number.
+	 *
+	 * @param aNumPagesInDoc Number of all pages.
+	 * @param aFirstPageToDisplay Page number of first display.
+	 * @param aNumPagesToView Number of pages to view.
+	 */
+	void SetNumPagesInDoc(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView);
+
+public: // from CCoeControl
+	/**
+	 * From CCoeControl.
+	 * Activate.
+	 */
+	void ActivateL();
+	/**
+	 * From CCoeControl.
+	 * Draw display.
+	 *
+	 * @param aRect Rect to draw.
+	 */
+	void Draw(const TRect& aRect) const;
+
+	/**
+	 * From CCoeControl.
+	 * Handles key events.
+	 *
+	 * @param aKeyEvent The code of key event.
+	 * @param aType The code of event.
+	 * @return The code of key response.
+	 */
+	TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
+	/**
+	 * From CCoeControl.
+	 * Constructor.
+	 *
+	 * @param aReader ResourceReader.
+	 */
+//	void ConstructFromResourceL(TResourceReader& aReader);
+	/**
+	 * Set flag.
+	 *
+	 * @param aDraw Draw flag.
+	 */
+	void SetDrawFlag(TBool aDraw);
+	/**
+	 * Get flag.
+	 *
+	 * @return Draw flag.
+	 */
+	TBool DrawFlag();
+	/**
+	 * From CCoeControl.
+	 * Get input capabilities.
+	 *
+	 * @return Input capabilities.
+	 */
+	TCoeInputCapabilities InputCapabilities() const;
+
+	// for zoom
+	/**
+	 * Set zoom level.
+	 *
+	 * @param aZoomLevel Zoom level.
+	 */
+	void SetZoomLevel(TInt aZoomLevel);
+	/**
+	 * Get zoom level.
+	 *
+	 * @return Zoom level.
+	 */
+	TInt GetZoomLebel();
+	/**
+	 * Increment zoom level.
+	 */
+	void IncrementZoomLevel();
+	/**
+	 * Decrement zoom level.
+	 */
+	void DecrementZoomLevel();
+
+protected: // from CCoeControl
+	void SizeChanged();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+
+	void WriteInternalStateL(RWriteStream& aWriteStream) const;
+
+	/**
+	 * From CoeControl, HandlePointerEventL.
+	 * Called by framework when a pointer touch event occurs.
+	 * Note: although this method is compatible with earlier SDKs,
+	 * it will not be called in SDKs without Touch support.
+	 * @param aPointerEvent the information about this event
+	 */
+	virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+
+private: // from CCoeControl
+//	void SetContainerWindowL(const CCoeControl& aParent);
+
+private: // from MCoeControlObserver
+	void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEvent);
+
+private:
+	CDirectPrintPreviewControl();
+	void ConstructL(const CCoeControl* aParent);
+
+private:
+	void CreateScrollButtonsL();
+	void DrawPreview(const TRect& aRect);
+	void SwitchFirstPageToDisplayL(TInt& aNewFirstPageToDisplay);
+	void DrawButtons() const;
+	void SetZoomLevelAndDispalyRect(TInt aZoomLevel);
+	void CreatePreviewImageL();
+
+private:
+	/** Pointer to button controls. */
+//	CEikScrollButton* iButton[2];
+	/** Pointer to image. */
+	CPrintPreviewImage* iPreview;
+	/** Pointer to setup information. */
+	CPrintSetup* iPrintSetup;
+	/** Pointer to body printer. */
+	MPageRegionPrinter* iBodyPrinter;
+	/** Pointer to format information. */
+	TPrintPreviewFormat* iPrintPreviewFormat;
+	/** Pointer to page number. */
+	TInt* iFirstPageToDisplay;
+	/** Number of all pages. */
+	TInt iNumPagesInDoc;
+	/** Number of pages to view. */
+	TInt iNumPagesToView;
+	/** Number of bands. */
+	TInt iNumBands;
+	/** Margin information. */
+	CPrintPreviewImage::TMarginState iMarginState;
+	/** Display rect. */
+	TRect iDisplayRect;
+	/** Draw flag. */
+	TBool iPreviewDraw;
+	/** Display point. */
+	TPoint iDisplayPoint;
+	/** Position of pointer. */
+	TPoint iPointerDownPos;
+	/** Zoom level. */
+	TInt  iZoomLevel;			// set TPreviewZoomLevel
+	};
+
+#endif // __DIRECTPRINTPREVIEWCONTROL_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintpreviewview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __PREVIEWVIEW_H__
+#define __PREVIEWVIEW_H__
+
+// System includes
+#include <aknview.h>
+#include <akntoolbarobserver.h>
+#include <prninf.h>
+#include <PRNPREV.H>
+
+// User includes
+#include "DirectPrintViewBase.h"
+
+// Forward declarations
+class CDirectPrintPreviewControl;
+
+// Class declaration
+/**
+ *  Preview view class
+ *  more_complete_description
+ */
+class CDirectPrintPreviewView : public CDirectPrintViewBase
+                              , public MAknToolbarObserver
+                              , public MPrintProcessObserver
+	{
+public:
+	/** Constructors */
+	static CDirectPrintPreviewView* NewL();
+	static CDirectPrintPreviewView* NewLC();
+	/** Destructor */
+	~CDirectPrintPreviewView();
+
+public:
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+	/**
+	 * From CAknView.
+	 * Get the id of view.
+	 *
+	 * @return The id of view.
+	 */
+	TUid Id() const;
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+public:
+	/**
+	 * From MAknToolbarObserver.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void OfferToolbarEventL(TInt aCommand);
+
+private:  // from MPrintProcessObserver 
+	void NotifyPrintStarted(TPrintParameters aPrintParams);
+	void NotifyPrintEnded(TInt anErrorCode);
+	void NotifyBandPrinted(TInt aPercentageOfPagePrinted, TInt aCurrentPageNum, TInt aCurrentCopyNum);
+
+private:
+	CDirectPrintPreviewView();
+	void ConstructL();
+
+	void ChangeVisibleState();
+
+private:
+	/** Pointer to preview control. */
+	CDirectPrintPreviewControl* iPrevCtrl;
+
+	/** Parameter. */
+	TPrintParameters iParameters;
+	/** Preview format. */
+	TPrintPreviewFormat iPrintPreviewFormat;
+	/** Number of pages in document. */
+	TInt iNumPagesInDoc;
+	/** Display flag. */
+	TInt iFirstPageToDisplay;
+	/** Number of pages. */
+	TInt iNumPagesToView;
+	/** Number of bands. */
+	TInt iNumBands;
+	/** Margin state. */
+	CPrintPreviewImage::TMarginState iMarginState;
+	};
+
+#endif // __PREVIEWVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintpropertyview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPROPERTYVIEW_H__
+#define __DIRECTPRINTPROPERTYVIEW_H__
+
+// System includes
+#include <aknlists.h>
+#include <akntoolbarobserver.h>
+
+// User includes
+#include "DirectPrintViewBase.h"
+#include "directprintsettinglistbox.h"
+
+// Class declaration
+/**
+ *  Property view class
+ *  more_complete_description
+ */
+class CDirectPrintPropertyView : public CDirectPrintViewBase, public MAknToolbarObserver
+	{
+public:
+	/** Constructors */
+	static CDirectPrintPropertyView* NewL();
+	static CDirectPrintPropertyView* NewLC();
+	/** Destructor */
+	~CDirectPrintPropertyView();
+
+public:
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+public:
+	/**
+	 * From MAknToolbarObserver.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void OfferToolbarEventL(TInt aCommand);
+
+public: // New function
+	/**
+	 * Process by change tab.
+	 *
+	 * @param aTabIndex The index of tab.
+	 */
+	void ChangeTabL(TInt aTabIndex);
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+private:
+	CDirectPrintPropertyView();
+	void ConstructL();
+
+	void LoadListL();
+	void ReadDataL();
+	void WriteDataL();
+	void NewDataL();
+
+	void LoadPaperTabL();
+	void LoadPageTabL();
+	void LoadMarginTabL();
+	void LoadHeaderTabL();
+	void LoadFooterTabL();
+
+private:
+	/** Pointer to listbox. */
+	CDirectPrintSettingListBox* iListBox;
+	/** Index of paper size setting. */
+	TInt iPaperSize;
+	/** Index of orientation setting. */
+	TInt iOrientation;
+	/** Paper hight. */
+	TInt iHight;
+	/** Paper width. */
+	TInt iWidth;
+	/** Index of media type setting. */
+	TInt iMediaType;
+	/** Index of print page setting. */
+	TInt iPrintPage;
+	/** Print range. */
+	TBuf<50> iPrintRange;
+	/** Number of copies. */
+	TInt iCopy;
+	/** Left margin. */
+	TInt iLeftMargin;
+	/** Right margin. */
+	TInt iRightMargin;
+	/** Top margin. */
+	TInt iTopMargin;
+	/** Bottom margin. */
+	TInt iBottomMargin;
+	/** Header text. */
+	TBuf<50> iHeaderText;
+	/** Distance of header. */
+	TInt iHeaderDistance;
+	/** First page flag. */
+	TInt iHeaderFirstPage;
+	/** Footer text. */
+	TBuf<50> iFooterText;
+	/** Distance of footer. */
+	TInt iFooterDistance;
+	/** First page flag. */
+	TInt iFooterFirstPage;
+
+	/** Boaderless flag. */
+	TInt iBoaderless;
+
+	/** Index of tab. */
+	TInt iTabIndex;
+	};
+
+#endif // __DIRECTPRINTPROPERTYVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintsearchresultview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __SEARCHRESULTVIEW_H__
+#define __SEARCHRESULTVIEW_H__
+
+// System includes
+#include <aknlists.h>
+#include <akntoolbarobserver.h>
+#include <AknProgressDialog.h>	// CAknProgressDialog
+#include <EIKPROGI.H>
+
+// User includes
+#include "DirectPrintViewBase.h"
+#include "DirectPrintListBox.h"
+
+// Class declaration
+/**
+ *  Search result view class
+ *  more_complete_description
+ */
+class CDirectPrintSearchResultView : public CDirectPrintViewBase
+									, public MAknToolbarObserver
+									, public MProgressDialogCallback
+	{
+public:
+	/** Constructors */
+	static CDirectPrintSearchResultView* NewL();
+	static CDirectPrintSearchResultView* NewLC();
+	/** Destructor */
+	~CDirectPrintSearchResultView();
+
+public:
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+public:
+	/**
+	 * From MDirectPrintListObserver.
+	 * Handles index.
+	 *
+	 * @param aIndex The index of list items.
+	 */
+	void HandleListIndexL(TInt aIndex);
+
+public:
+	/**
+	 * From MAknToolbarObserver.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void OfferToolbarEventL(TInt aCommand);
+
+public: // from MProgressDialogCallback
+    /**
+    * DialogDismissedL
+    * Called when/if the dialog has been dismissed.
+    * @param aButtonId
+    */
+    void DialogDismissedL( TInt aButtonId );
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+private:
+	CDirectPrintSearchResultView();
+	void ConstructL();
+
+	void StartSearchProgressNoteL();
+	void EndProgressNoteL();
+
+	void StartSearchL();
+
+	static TInt HandleTimeout(TAny* aAny);
+	void HandleTimeoutL();
+
+private:
+	/** Pointer to listbox. */
+	CDirectPrintListBox* iListBox;		// Owend Data
+	/** Pointer to array. */
+	CDesCArray* iItemArray;
+
+    /**
+    * iProgressDialog
+    * Owned
+    */
+	CAknProgressDialog* iProgressDialog;
+	/**
+	* iProgressInfo
+    * Not owned by CAknExNoteContainer object.
+	*/
+	CEikProgressInfo*   iProgressInfo;
+	/** Pointer to progress message. */
+	HBufC* iProgressMessage;
+	/** Pointer to periodic timer object. */
+	CPeriodic* iPeriodic;
+
+	/** Count of timeout. */
+	TInt iTimeoutCount;
+	};
+
+#endif // __SEARCHRESULTVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintsettinglistbox.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTSETTINGLISTBOX_H__
+#define __DIRECTPRINTSETTINGLISTBOX_H__
+
+// System includes
+#include <aknsettingitemlist.h>
+
+// User includes
+#include "directprintsettinglistobserver.h"
+
+// Class declaration
+/**
+ *  Setting listbox class
+ *  more_complete_description
+ */
+class CDirectPrintSettingListBox : public CAknSettingItemList
+	{
+public:
+	/** Constructors */
+	static CDirectPrintSettingListBox* NewL(const TRect& aRect);
+	static CDirectPrintSettingListBox* NewLC(const TRect& aRect);
+	/** Destructor */
+	virtual ~CDirectPrintSettingListBox();
+
+public: // from CAknSettingItemList
+//	CAknSettingItem* CreateSettingItemL(TInt identifier);
+	/**
+	 * Set focus.
+	 *
+	 * @param aIndex The index of listbox item
+	 * @param aCalledFromMenu The flag of called from menu
+	 */
+	void EditItemL(TInt aIndex, TBool aCalledFromMenu);
+
+public: // New function
+	/**
+	 * Set list observer.
+	 *
+	 * @param aObserver Pointer to list observer.
+	 */
+	void SetSettingListObserver(MDirectPrintSettingListObserver* aObserver);
+
+private:
+	CDirectPrintSettingListBox();
+	void ConstructL(const TRect& aRect);
+
+private:
+	/** Pointer to list observer. */
+	MDirectPrintSettingListObserver* iObserver;
+	};
+
+#endif // __DIRECTPRINTSETTINGLISTBOX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintsettinglistobserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTSETTINGLISTOBSERVER_H__
+#define __DIRECTPRINTSETTINGLISTOBSERVER_H__
+
+// Class declaration
+/**
+ *  Setting list observer mix-in class
+ *  more_complete_description
+ */
+class MDirectPrintSettingListObserver
+	{
+public:
+	/**
+	 * Handles index.
+	 *
+	 * @param aIndex The index of selected item.
+	 * @param aChanged The flag of change data.
+	 */
+	virtual void HandleEditItemL(TInt aIndex, TBool aChanged) = 0;
+	};
+
+#endif // __DIRECTPRINTSETTINGLISTOBSERVER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintsettingview.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __PRINTERSETTINGVIEW_H__
+#define __PRINTERSETTINGVIEW_H__
+
+// System includes
+#include <aknlists.h>
+#include <aknsettingitemlist.h>
+
+// User includes
+#include "DirectPrintViewBase.h"
+#include "directprintsettinglistbox.h"
+#include "directprintselectitem.h"
+
+// Forward declarations
+class CDirectPrintBearerMgr;
+
+// Class declaration
+/**
+ *  Printer setting view class
+ *  more_complete_description
+ */
+class CDirectPrintPrinterSettingView : public CDirectPrintViewBase
+	{
+public:
+	enum TListItemIndex
+		{
+		ESettingViewItemPrinterName = 1,
+		ESettingViewItemDriver,
+		ESettingViewItemType,
+		ESettingViewItemBearer,
+		ESettingViewItemExtent
+		};
+
+public:
+	/** Constructors */
+	static CDirectPrintPrinterSettingView* NewL();
+	static CDirectPrintPrinterSettingView* NewLC();
+	/** Destructor */
+	~CDirectPrintPrinterSettingView();
+
+public:
+	/**
+	 * From CAknView.
+	 * Handles user commands.
+	 *
+	 * @param aCommand The id of commands.
+	 */
+	void HandleCommandL(TInt aCommand);
+
+public:
+	/**
+	 * Handles index.
+	 *
+	 * @param aIndex The index of selected item.
+	 * @param aChanged The flag of change data.
+	 */
+	void HandleEditItemL(TInt aIndex, TBool aChanged);
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+private:
+	CDirectPrintPrinterSettingView();
+	void ConstructL();
+
+	void LoadListL();
+	void LoadExtendListL();
+	void ReloadListL();
+	void SetBearerListL(CAknEnumeratedTextPopupSettingItem* item);
+
+	void ReadDataL();
+	void WriteDataL();
+	void NewDataL();
+
+	void LoadDriverInfoL();
+	void LoadTypeInfoL();
+	void LoadBearerInfoL();
+	void LoadItemInfoL(TInt aResouceId, const TDesC& aInfo, TInt& aIndex);
+	void LoadExtendSettingsL();
+	void StoreDriverInfoL();
+	void StoreTypeInfoL();
+	void StoreBearerInfoL();
+	void StoreItemInfoL(TInt aResouceId, TDes& aInfo);
+	void StoreExtendSettingsL();
+
+	CAknSettingItem* GetSettingItemL(const TDesC& aItemTitle);
+
+	CDirectPrintBearerMgr* GetBearerMgr();
+
+private:
+	/** Pointer to listbox. */
+	CDirectPrintSettingListBox* iListBox;
+	/** Printer id. */
+	TInt iPrinterId;
+	/** Printer name. */
+	TBuf<50> iPrinterName;
+	/** Index of driver setting. */
+	TInt iDriver;
+	/** Driver uid. */
+	TUid iDriverUid;
+	/** Driver name. */
+	TBuf<50> iDriverName;
+	/** Index of bearer setting. */
+	TInt iBearer;
+	/** Bearer name. */
+	TBuf<50> iBearerName;
+	/** Index of access point setting. */
+	TInt iAccessPoint;
+	/** Access point name. */
+	TBuf<50> iAccessPointName;
+	/** Host name. */
+	TBuf<50> iHost;
+	/** Ip address. */
+	TInetAddr iHostIp;
+	/** Port number. */
+	TInt iPort;
+	/** User name. */
+	TBuf<50> iUserName;
+	/** Que name. */
+	TBuf<50> iQue;
+	/** Printer type name. */
+	TBuf<50> iTypeName;
+	/** Index of printer type setting. */
+	TInt iType;
+
+	/** Array of driver. */
+	RSelectItemArray iDriverList;
+	/** Array of bearer. */
+	RSelectItemArray iBearerList;
+	/** Array of type. */
+	RSelectItemArray iTypeList;
+	};
+
+#endif // __PRINTERSETTINGVIEW_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/inc/directprintviewbase.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTVIEWBASE_H__
+#define __DIRECTPRINTVIEWBASE_H__
+
+// System includes
+#include <aknview.h>
+
+// User includes
+#include "directprintlistobserver.h"
+#include "directprintsettinglistobserver.h"
+
+// Forward declarations
+class CDirectPrintModel;
+class CDirectPrintUiPluginMgr;
+class CDirectPrintEngine;
+
+// Class declaration
+/**
+ *  View base class
+ *  more_complete_description
+ */
+class CDirectPrintViewBase : public CAknView, public MDirectPrintListObserver, public MDirectPrintSettingListObserver
+	{
+public:
+	/** Destructor */
+	~CDirectPrintViewBase();
+
+public:
+	/**
+	 * From CAknView.
+	 * Get the id of view.
+	 *
+	 * @return The id of view.
+	 */
+	TUid Id() const;
+
+public:
+	/**
+	 * Handles index.
+	 *
+	 * @param aIndex The index of selected item.
+	 */
+	virtual void HandleListIndexL(TInt aIndex);
+
+public:
+	/**
+	 * Handles index.
+	 *
+	 * @param aIndex The index of selected item.
+	 * @param aChanged The flag of change data.
+	 */
+	virtual void HandleEditItemL(TInt aIndex, TBool aChanged);
+
+protected:
+	CDirectPrintViewBase();
+	void ConstructL();
+
+protected: // from CAknView
+	void DoActivateL(const TVwsViewId& aPrevViewId, TUid aCustomMessageId, const TDesC8& aCustomMessage);
+	void DoDeactivate();
+
+protected: // New founctions
+	void SetActiveTitleL(TInt aTitleResId);
+	CDirectPrintModel& GetModel();
+	CDirectPrintUiPluginMgr& GetPluginMgr();
+	CDirectPrintEngine& GetEngine();
+
+protected:
+	/** View id. */
+	TUid iViewId;
+
+private:
+	};
+
+#endif // __DIRECTPRINTVIEWBASE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintlistbox.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+
+#include "DirectPrintListBox.h"
+
+CDirectPrintListBox::CDirectPrintListBox()
+	{
+	iListObserver = NULL;
+	}
+
+CDirectPrintListBox::~CDirectPrintListBox()
+	{
+	delete iListBox;
+	}
+
+CDirectPrintListBox* CDirectPrintListBox::NewL(const TRect& aRect, CDesCArray* aItemArray)
+	{
+	CDirectPrintListBox* self = CDirectPrintListBox::NewLC(aRect, aItemArray);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintListBox* CDirectPrintListBox::NewLC(const TRect& aRect, CDesCArray* aItemArray)
+	{
+	CDirectPrintListBox* self = new(ELeave) CDirectPrintListBox();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect, aItemArray);
+	return self;
+	}
+
+void CDirectPrintListBox::ConstructL(const TRect& aRect, CDesCArray* aItemArray)
+	{
+	CreateWindowL();
+	SetRect(aRect);
+
+	InitializeControlsL();
+	iListBox->SetRect(Rect());
+	iListBox->Model()->SetItemTextArray(aItemArray);
+	iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+	iListBox->HandleItemAdditionL();
+
+	ActivateL();
+	}
+
+TInt CDirectPrintListBox::CountComponentControls() const
+	{
+	return (int)ELastControl;
+	}
+
+CCoeControl* CDirectPrintListBox::ComponentControl(TInt aIndex) const
+	{
+	CCoeControl* ctrl = NULL;
+
+	switch ( aIndex )
+		{
+		case EListBox:
+			{
+			ctrl = iListBox;
+			}
+			break;
+		default:
+			break;
+		}
+
+	return ctrl;
+	}
+
+void CDirectPrintListBox::InitializeControlsL()
+	{
+	TBuf<50> buf;
+	//_LIT ( KStringHeader, "%S\t%S" );
+	iListBox = new(ELeave) CAknDoubleStyleListBox;
+	iListBox->SetContainerWindowL(*this);
+		{
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC(reader, R_DIRECTPRINT_MAINVIEW_LISTBOX);
+		iListBox->ConstructFromResourceL(reader);
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+
+	iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EOn);
+	iListBox->ScrollBarFrame()->DrawScrollBarsNow();
+	iListBox->SetFocus( ETrue );
+	iListBox->SetListBoxObserver(this);
+    iListBox->View()->SetListEmptyTextL( _L("No Data") );
+	}
+
+void CDirectPrintListBox::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
+	{
+	switch (aEventType)
+		{
+		case EEventItemClicked:
+		case EEventEnterKeyPressed:
+			{
+			TInt index = iListBox->CurrentItemIndex();
+			if (iListObserver)
+				{
+				iListObserver->HandleListIndexL(index);
+				}
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintListBox::SetItemL(CDesCArray* aItemArray)
+	{
+	iListBox->Model()->SetItemTextArray(aItemArray);
+	iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+	iListBox->HandleItemAdditionL();
+	}
+
+void CDirectPrintListBox::SetListObserver(MDirectPrintListObserver* aObserver)
+	{
+	iListObserver = aObserver;
+	}
+
+TInt CDirectPrintListBox::DeleteCurrentItemL()
+	{
+	TInt index = -1;
+	if (iListBox->Model()->NumberOfItems() > 0)
+		{
+		index = iListBox->CurrentItemIndex();
+		CDesCArray* itemArray = static_cast<CDesC16ArrayFlat*>(iListBox->Model()->ItemTextArray());
+		itemArray->Delete(index);
+		}
+	iListBox->HandleItemAdditionL();
+
+	return index;
+	}
+
+void CDirectPrintListBox::RedrawListL()
+	{
+	iListBox->HandleItemAdditionL();
+	iListBox->DrawNow();
+	DrawNow();
+	}
+
+TInt CDirectPrintListBox::CurrentIndex()
+	{
+	return iListBox->CurrentItemIndex();
+	}
+
+void CDirectPrintListBox::SetFocusL(TInt aIndex)
+	{
+	iListBox->SetCurrentItemIndexAndDraw(aIndex);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintlistview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// System include files
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+
+// User include files go here:
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "directprintmodel.h"
+#include "directprintlistview.h"
+
+CDirectPrintListView::CDirectPrintListView()
+	{
+	iListBox = NULL;
+	}
+
+CDirectPrintListView::~CDirectPrintListView()
+	{
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	delete iListBox;
+	delete iItemArray;
+	}
+
+CDirectPrintListView* CDirectPrintListView::NewL()
+	{
+	CDirectPrintListView* self = CDirectPrintListView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintListView* CDirectPrintListView::NewLC()
+	{
+	CDirectPrintListView* self = new(ELeave) CDirectPrintListView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintListView::ConstructL()
+	{
+	LOG("CDirectPrintListView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_PRINTERLIST_VIEW);
+
+	LOG("CDirectPrintListView::ConstructL 1");
+	iViewId = TUid::Uid(EDirectPrintPrinterListViewId);
+
+	iItemArray = new(ELeave) CDesCArrayFlat(3);
+	LOG("CDirectPrintListView::ConstructL END");
+	}
+
+void CDirectPrintListView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyDone:
+			{
+			TInt index = iListBox->CurrentIndex();
+			if (index >= 0)
+				{
+				GetModel().MoveTopPrinterDataL(index);
+				}
+			AppUi()->HandleCommandL(EDirectPrintCmdIdPrinterListViewDone);
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewDelete:
+			{
+			TInt index = iListBox->DeleteCurrentItemL();
+			if (index >= 0)
+				{
+				GetModel().RemovePrinterDataL(index);
+				iListBox->SetFocusL(0);
+				}
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewNew:
+			{
+			PrepareNewDataL();
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+void CDirectPrintListView::HandleListIndexL(TInt aIndex)
+	{
+	GetModel().SetSelectPrinter(aIndex);
+	AppUi()->HandleCommandL(EDirectPrintCmdIdPrinterListViewEdit);
+	}
+
+void CDirectPrintListView::OfferToolbarEventL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EDirectPrintCmdIdPrinterListViewEdit:
+			{
+			TInt index = iListBox->CurrentIndex();
+			GetModel().SetSelectPrinter(index);
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewSearch:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		case EDirectPrintCmdIdPrinterListViewNew:
+			{
+			PrepareNewDataL();
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintListView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+	toolbar->SetToolbarObserver(this);
+
+	iItemArray->Reset();
+
+	// Create list box
+	if (!iListBox)
+		{
+		iListBox = CDirectPrintListBox::NewL(ClientRect(), iItemArray);
+		iListBox->SetMopParent(this);
+		iListBox->SetListObserver(this);
+		}
+	AppUi()->AddToStackL(*this, iListBox);
+	iListBox->MakeVisible(ETrue);
+
+	LoadListDataL();
+
+	iListBox->RedrawListL();
+
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_PRINTERLIST_TITLE);
+	}
+
+void CDirectPrintListView::DoDeactivate()
+	{
+	iListBox->MakeVisible(EFalse);
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	}
+
+void CDirectPrintListView::LoadListDataL()
+	{
+	CDirectPrintModel& model = GetModel();
+	TInt count = model.PrinterCount();
+	for (TInt i=0; i<count; i++)
+		{
+		TDirectPrintPrinterData printerData;
+		model.GetPrinterDataL(i, printerData);
+
+		TBuf<50> buf;
+		buf.Format(_L("\t%S\t%S"), &printerData.iPrinterName, &printerData.iDriverName);
+		iItemArray->AppendL(buf);
+		}
+	}
+
+void CDirectPrintListView::PrepareNewDataL()
+	{
+	CDirectPrintModel& model = GetModel();
+	model.SetIsNewData(ETrue);
+	model.SetSelectPrinter(0);
+	if (model.PrinterCount() == 0)
+		{
+		model.SetCurrentPrinter(0);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintmainview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,250 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "directprintmodel.h"
+#include "directprintmainview.h"
+
+CDirectPrintMainView::CDirectPrintMainView()
+	{
+	iListBox = NULL;
+	}
+
+CDirectPrintMainView::~CDirectPrintMainView()
+	{
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	delete iListBox;
+	iItemArray->Reset();
+	delete iItemArray;
+	}
+
+CDirectPrintMainView* CDirectPrintMainView::NewL()
+	{
+	CDirectPrintMainView* self = CDirectPrintMainView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintMainView* CDirectPrintMainView::NewLC()
+	{
+	CDirectPrintMainView* self = new(ELeave) CDirectPrintMainView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintMainView::ConstructL()
+	{
+	LOG("CDirectPrintMainView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_MAINVIEW);
+
+	iViewId = TUid::Uid(EDirectPrintMainViewId);
+
+	iItemArray = new(ELeave) CDesCArrayFlat(3);
+	LOG("CDirectPrintMainView::ConstructL END");
+	}
+
+void CDirectPrintMainView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyBack:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdMainViewExit);
+			}
+			break;
+		case EDirectPrintCmdIdMainViewPrinterList:
+		case EDirectPrintCmdIdMainViewPrint:
+		case EDirectPrintCmdIdMainViewPreview:
+		case EDirectPrintCmdIdMainViewPropertySetting:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+void CDirectPrintMainView::HandleListIndexL(TInt aIndex)
+	{
+	switch (aIndex)
+		{
+		case EItemPrinter:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdMainViewPrinterList);
+			}
+			break;
+		case EItemBearer:
+			{
+			CDirectPrintModel& model = GetModel();
+			model.SetSelectPrinter(model.CurrentPrinter());
+			AppUi()->HandleCommandL(EDirectPrintCmdIdMainViewPrinterSetting);
+			}
+			break;
+		case EItemSetting:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdMainViewPropertySetting);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintMainView::OfferToolbarEventL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EDirectPrintCmdIdMainViewPrint:
+		case EDirectPrintCmdIdMainViewPreview:
+		case EDirectPrintCmdIdMainViewPropertySetting:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintMainView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	LOG("CDirectPrintMainView::DoActivateL BEGIN");
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+	toolbar->SetToolbarObserver(this);
+
+	iItemArray->Reset();
+	LoadListDataL();
+
+	// Create list box
+	if (!iListBox)
+		{
+		iListBox = CDirectPrintListBox::NewL(ClientRect(), iItemArray);
+		iListBox->SetMopParent(this);
+		iListBox->SetListObserver(this);
+		}
+	AppUi()->AddToStackL(*this, iListBox);
+	iListBox->MakeVisible(ETrue);
+	iListBox->RedrawListL();
+
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_MAINVIEW_TITLE);
+	LOG("CDirectPrintMainView::DoActivateL END");
+	}
+
+void CDirectPrintMainView::DoDeactivate()
+	{
+	LOG("CDirectPrintMainView::DoDeactivate BEGIN");
+	iListBox->MakeVisible(EFalse);
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	LOG("CDirectPrintMainView::DoDeactivate END");
+	}
+
+void CDirectPrintMainView::LoadListDataL()
+	{
+	CDirectPrintModel& model = GetModel();
+
+	if (model.PrinterCount() > 0)
+		{
+		TBuf<50> buf;
+		TBuf<25> itemTitle;
+
+		TDirectPrintPrinterData printerData;
+		model.GetPrinterDataL(0, printerData);
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_PRINTERNAME);
+		buf.Format(_L("\t%S\t%S"), &itemTitle, &printerData.iPrinterName);
+		iItemArray->AppendL(buf);
+
+		TDirectPrintBearerData bearerData;
+		model.GetCurrentBearerDataL(bearerData);
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_BEARER);
+		buf.Format(_L("\t%S\t%S"), &itemTitle, &bearerData.iBearerName);
+		iItemArray->AppendL(buf);
+
+		TBuf<25> property;
+		MakePropertyStringL(property);
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_PROPERTYSETTINGS);
+		buf.Format(_L("\t%S\t%S"), &itemTitle, &property);
+		iItemArray->AppendL(buf);
+		}
+	else
+		{
+		TBuf<50> buf;
+		TBuf<30> itemTitle;
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_PRINTERNAME);
+		buf.Format(_L("\t%S\t"), &itemTitle);
+		iItemArray->AppendL(buf);
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_BEARER);
+		buf.Format(_L("\t%S\t"), &itemTitle);
+		iItemArray->AppendL(buf);
+		CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_MAINVIEW_ITEM_PROPERTYSETTINGS);
+		buf.Format(_L("\t%S\t"), &itemTitle);
+		iItemArray->AppendL(buf);
+		}
+	}
+
+void CDirectPrintMainView::MakePropertyStringL(TDes& aProperty)
+	{
+	CDirectPrintModel& model = GetModel();
+	CPrinterProperty* property = model.GetCurrentPrinterPropertyL(TUid::Uid(0));
+
+	if (property)
+		{
+		TInt paperSize(0), orientation(0), copy(0);
+		TInt count = property->iPropertyItems.Count();
+		for (TInt i=0; i<count; i++)
+			{
+			if (property->iPropertyItems[i].iItemType == EDirectPrintPageSettingTab)
+				{
+				switch (property->iPropertyItems[i].iItemId)
+					{
+					case EDirectPrintPaperPaperSize:
+						{
+						paperSize = property->iPropertyItems[i].iItemValue;
+						}
+						break;
+					case EDirectPrintPaperOrientation:
+						{
+						orientation = property->iPropertyItems[i].iItemValue;
+						}
+						break;
+					case EDirectPrintPageCopy:
+						{
+						copy = property->iPropertyItems[i].iItemValue;
+						}
+						break;
+					default:
+						break;
+					}
+				}
+			}
+
+		//aProperty.Format(_L("%S/%S/%d"), paperSize, orientation, copy);
+		aProperty.Format(_L("%d/%d/%d"), paperSize, orientation, copy);
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintpreviewcontrol.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,500 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// INCLUDE FILES
+#include <coemain.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+#include <prninf.h>
+#include <prnsetup.h>
+#include <gdi.h>
+#include <prnprev.h>
+#include <eikenv.h>
+#include <gulbordr.h>					// TGulBorder
+#include <e32cmn.h>
+
+#include "directprintapp.pan"
+#include "directprintapp.hrh"
+#include "directprintpreviewcontrol.h"
+
+const TInt KFirstPage=0;
+
+const TInt KDraggingAccepted = 10;
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::NewL()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintPreviewControl* CDirectPrintPreviewControl::NewL(const CCoeControl* aParent)
+	{
+	CDirectPrintPreviewControl* self = CDirectPrintPreviewControl::NewLC(aParent);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::NewLC()
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintPreviewControl* CDirectPrintPreviewControl::NewLC(const CCoeControl* aParent)
+	{
+	CDirectPrintPreviewControl* self = new(ELeave) CDirectPrintPreviewControl();
+	CleanupStack::PushL(self);
+	self->ConstructL(aParent);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::CDirectPrintPreviewControl()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintPreviewControl::CDirectPrintPreviewControl()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::~CDirectPrintPreviewControl()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CDirectPrintPreviewControl::~CDirectPrintPreviewControl()
+	{
+	Window().SetPointerGrab(EFalse);
+	delete iPreview;
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintPreviewControl::ConstructL(const CCoeControl* aParent)
+	{
+	// Create a window for this application view
+	if (aParent)
+		{
+		CreateBackedUpWindowL(*aParent->DrawableWindow(), EGray4);
+		}
+	else
+		{
+		CreateBackedUpWindowL((RWindowTreeNode&)iCoeEnv->RootWin(), EGray4);
+		}
+
+	EnableDragEvents();
+	Window().SetPointerGrab(ETrue);
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::SetPreviewImageObserver()
+//
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintPreviewControl::SetPreviewImageObserver(MPrintProcessObserver* aObserver)
+	{
+	__ASSERT_DEBUG(iPreview,Panic(EDirectPrintNullPointer));
+	iPreview->SetObserver(*aObserver);
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::CountComponentControls()
+// Called by framework
+// -----------------------------------------------------------------------------
+//
+TInt CDirectPrintPreviewControl::CountComponentControls() const
+	{
+//	return(2);
+	return(0);
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::ComponentControl()
+// Called by framework
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CDirectPrintPreviewControl::ComponentControl( TInt aIndex ) const
+	{
+	CCoeControl* control=NULL;
+	switch (aIndex)
+		{
+	case 0:
+//		control=iButton[0];
+		break;
+	case 1:
+//		control=iButton[1];
+		break;
+		}
+	return(control);
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::WriteInternalStateL()
+//
+// -----------------------------------------------------------------------------
+//
+#ifndef _DEBUG
+void CDirectPrintPreviewControl::WriteInternalStateL(RWriteStream& /*aWriteStream*/) const
+	{
+	}
+#else
+void CDirectPrintPreviewControl::WriteInternalStateL(RWriteStream& aWriteStream) const
+	{
+	CEikBorderedControl::WriteInternalStateL(aWriteStream);
+	}
+#endif
+
+// -----------------------------------------------------------------------------
+// CDirectPrintAppAppView::HandlePointerEventL()
+// Called by framework to handle pointer touch events.
+// Note: although this method is compatible with earlier SDKs,
+// it will not be called in SDKs without Touch support.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintPreviewControl::HandlePointerEventL(
+		const TPointerEvent& aPointerEvent)
+	{
+	const TRect rect=Rect();
+	if( !rect.Contains(aPointerEvent.iPosition) )
+		{
+		return;
+		}
+
+	switch ( aPointerEvent.iType )
+		{
+		case TPointerEvent::EButton1Down:
+			{
+			iPointerDownPos = aPointerEvent.iPosition;
+			}
+			break;
+		case TPointerEvent::EButton1Up:
+		case TPointerEvent::EDrag:
+			{
+			TInt x =  aPointerEvent.iPosition.iX - iPointerDownPos.iX;
+			TInt y = aPointerEvent.iPosition.iY - iPointerDownPos.iY;
+			if (Abs(x) > KDraggingAccepted || Abs(y) > KDraggingAccepted)
+				{
+				TPoint newPos;
+				TInt maxWidth = iDisplayRect.Width() - rect.Width();
+				TInt maxHeight = iDisplayRect.Height() - rect.Height();
+				newPos.iX = Min(iDisplayPoint.iX + x, maxWidth);
+				if (newPos.iX <= (maxWidth*-1))
+					newPos.iX = (maxWidth*-1);
+				newPos.iY = Min(iDisplayPoint.iY + y, maxHeight);
+				if (newPos.iY <= (maxHeight*-1))
+					newPos.iY = (maxHeight*-1);
+				iDisplayPoint = newPos;
+				iPointerDownPos = aPointerEvent.iPosition;
+				DrawNow();
+				}
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintPreviewControl::ActivateL()
+	{
+	DrawButtons();
+	CCoeControl::ActivateL();
+	}
+
+TCoeInputCapabilities CDirectPrintPreviewControl::InputCapabilities() const
+	{
+	return TCoeInputCapabilities(TCoeInputCapabilities::ENavigation);
+	}
+
+void CDirectPrintPreviewControl::InitializeFormat(
+										CPrintSetup& aPrintSetup,
+										MPageRegionPrinter& aBodyPrinter,
+										TPrintPreviewFormat& aFormat,
+										TInt& aNumPagesInDoc,
+										TInt& aFirstPageToDisplay,
+										TInt aNumPagesToView,
+										CPrintPreviewImage::TMarginState& aMarginState)
+	{
+	iPrintSetup=&aPrintSetup;
+	iBodyPrinter=&aBodyPrinter;
+	iPrintPreviewFormat=&aFormat;
+	iFirstPageToDisplay=&aFirstPageToDisplay;
+	iNumPagesInDoc=aNumPagesInDoc;
+	iNumPagesToView=aNumPagesToView;
+	iMarginState=aMarginState;
+	}
+
+void CDirectPrintPreviewControl::SetNumBands(TInt aNumBands)
+	{
+	iNumBands=aNumBands;
+	if (iPreview)
+		{
+		iPreview->SetNumBands(aNumBands);
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::SizeChanged()
+// Called by framework when the view size is changed.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintPreviewControl::SizeChanged()
+	// can't recover if CPrintPreviewImage::NewL() fails !!
+	{
+	iPreviewDraw=ETrue;
+
+	// set zoom level 
+	SetZoomLevelAndDispalyRect(EPreviewZoomLevel1);
+
+	// create CPrintPreviewImage object
+	TRAP_IGNORE(CreatePreviewImageL());
+	}
+
+// -----------------------------------------------------------------------------
+// CDirectPrintPreviewControl::Draw()
+// Draws the display.
+// -----------------------------------------------------------------------------
+//
+void CDirectPrintPreviewControl::Draw(const TRect& aRect) const
+	{
+	if (!iPreviewDraw)
+		return;
+//	DrawButtons();
+	CWindowGc& gc=SystemGc();
+	iBorder.Draw(gc,Rect());
+	gc.Clear();
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.SetBrushColor(KRgbWhite);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+//	TRect rectAboveButton(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iTl.iY),TSize(KScrollButtonWidth,iDisplayRect.Height()-(iButton[0]->IsVisible()? KScrollButtonWidth : 0)));
+//	gc.DrawRect(rectAboveButton);
+//	rectAboveButton=(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iTl.iY),TSize(KScrollButtonWidth,iDisplayRect.Height()-(iButton[1]->IsVisible()? KScrollButtonWidth : 0)));
+//	rectAboveButton.Move(iDisplayRect.Width()+KScrollButtonWidth+1,1); // why are the 1s needed???
+//	gc.DrawRect(rectAboveButton);
+	gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	CONST_CAST(CDirectPrintPreviewControl*,this)->DrawPreview(aRect);  // cast away constness
+	}
+
+void CDirectPrintPreviewControl::SetDrawFlag(TBool aDraw)
+	{
+	iPreviewDraw=aDraw;
+	}
+
+TBool CDirectPrintPreviewControl::DrawFlag()
+	{
+	return iPreviewDraw;
+	}
+
+void CDirectPrintPreviewControl::SetFormatAndDrawL(TInt& aFirstPageToDisplay,TInt& aNumPagesToView)
+	{
+	iPreview->FormatL(iNumPagesInDoc,aFirstPageToDisplay,aNumPagesToView);
+	*iFirstPageToDisplay=aFirstPageToDisplay;
+	iNumPagesToView=aNumPagesToView;
+	DrawButtons();
+	DrawNow();
+	}
+
+void CDirectPrintPreviewControl::SetMarginAndDrawL(CPrintPreviewImage::TMarginState aMarginState)
+	{
+	iPreview->SetMargins(aMarginState);
+	iMarginState=aMarginState;
+	DrawNow();
+	}
+
+void CDirectPrintPreviewControl::SetNumPagesInDoc(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView)
+	{
+	iNumPagesInDoc=aNumPagesInDoc;
+	*iFirstPageToDisplay=aFirstPageToDisplay;
+	iNumPagesToView=aNumPagesToView;
+	}
+
+void CDirectPrintPreviewControl::DrawPreview(const TRect& aRect)
+	{
+	TRAPD(err,iPreview->DrawL(iDisplayPoint,aRect));
+	if (err)
+		{
+		SystemGc().Clear(iDisplayRect);
+		CEikonEnv::Static()->NotifyIdleErrorWhileRedrawing(err);
+		}
+	}
+
+TKeyResponse CDirectPrintPreviewControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
+	{
+	TInt newFirstPageToDisplay=*iFirstPageToDisplay;
+	switch (aKeyEvent.iCode)
+		{
+	case EKeyLeftArrow:
+	case EKeyPageUp:
+		newFirstPageToDisplay--;
+		break;
+	case EKeyRightArrow:
+	case EKeyPageDown:
+		newFirstPageToDisplay++;
+		break;
+	case EKeyHome:
+		newFirstPageToDisplay=KFirstPage;
+		break;
+	case EKeyEnd:
+		newFirstPageToDisplay=iNumPagesInDoc-iNumPagesToView;
+		break;
+	default:
+		return(EKeyWasNotConsumed);
+
+		}
+	SwitchFirstPageToDisplayL(newFirstPageToDisplay);
+	return(EKeyWasConsumed);
+	}
+
+void CDirectPrintPreviewControl::SwitchFirstPageToDisplayL(TInt& aNewFirstPageToDisplay)
+	{
+	if (aNewFirstPageToDisplay<KFirstPage)
+		aNewFirstPageToDisplay=KFirstPage;
+	if (aNewFirstPageToDisplay>iNumPagesInDoc-iNumPagesToView)
+		aNewFirstPageToDisplay=iNumPagesInDoc-iNumPagesToView;
+	if (aNewFirstPageToDisplay!=*iFirstPageToDisplay)
+		SetFormatAndDrawL(aNewFirstPageToDisplay,iNumPagesToView);
+	}
+
+void CDirectPrintPreviewControl::HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent aEventType)
+	{
+	if (aEventType!=EEventStateChanged)
+		return;
+	TInt newFirstPageToDisplay=*iFirstPageToDisplay;
+//	if (aControl==iButton[0])
+//		newFirstPageToDisplay--;
+//	else if (aControl==iButton[1])
+//		newFirstPageToDisplay++;
+	SwitchFirstPageToDisplayL(newFirstPageToDisplay);
+	}
+
+void CDirectPrintPreviewControl::DrawButtons() const
+	{
+	if (iNumPagesToView==iNumPagesInDoc)
+		{
+//		iButton[1]->MakeVisible(EFalse);
+//		iButton[0]->MakeVisible(EFalse);
+		return;
+		}
+//	TBool leftvisible=ETrue;
+//	TBool rightvisible=ETrue;
+//	if (*iFirstPageToDisplay==KFirstPage)
+//		leftvisible=EFalse;
+//	else
+//		{
+//		if (*iFirstPageToDisplay>=iNumPagesInDoc-iNumPagesToView)
+//			rightvisible=EFalse;
+//		}
+//	iButton[0]->MakeVisible(leftvisible);
+//	iButton[1]->MakeVisible(rightvisible);
+////	iButton[0]->DrawNow();
+////	iButton[1]->DrawNow();
+	}
+
+
+// for zoom
+void CDirectPrintPreviewControl::SetZoomLevel(TInt /*aZoomLevel*/)
+	{
+	SetZoomLevelAndDispalyRect(iZoomLevel);
+	}
+
+TInt CDirectPrintPreviewControl::GetZoomLebel()
+	{
+	return (TInt)iZoomLevel;
+	}
+
+void CDirectPrintPreviewControl::IncrementZoomLevel()
+	{
+	TInt zoom = iZoomLevel + 1;
+	if (zoom >= EPreviewZoomLevel1
+	 && zoom < EPreviewZoomLevelMax)
+		{
+		SetZoomLevelAndDispalyRect(zoom);
+		TRAPD(err, CreatePreviewImageL());
+		if (err == KErrNone)
+			{
+			DrawNow();
+			}
+		}
+	}
+
+void CDirectPrintPreviewControl::DecrementZoomLevel()
+	{
+	TInt zoom = iZoomLevel - 1;
+	if (zoom >= EPreviewZoomLevel1)
+		{
+		SetZoomLevelAndDispalyRect(zoom);
+		TRAPD(err, CreatePreviewImageL());
+		if (err == KErrNone)
+			{
+			DrawNow();
+			}
+		}
+	}
+
+	// set zoom level 
+void CDirectPrintPreviewControl::SetZoomLevelAndDispalyRect(TInt aZoomLevel)
+	{
+	static const TInt KZoomPercent[EPreviewZoomLevelMax] = {100, 120, 140, 160, 180};
+	TInt oldZoomLevel = iZoomLevel;
+	if (aZoomLevel == EPreviewZoomLevel1)
+		{
+		iDisplayRect = iBorder.InnerRect(Rect());
+		iDisplayPoint = iDisplayRect.iTl;
+		}
+	else
+		{
+		TRect rect(iBorder.InnerRect(Rect()));
+		TSize newSize;
+		newSize.iWidth = (rect.Size().iWidth * KZoomPercent[aZoomLevel] + 5) / KZoomPercent[EPreviewZoomLevel1];
+		newSize.iHeight = (rect.Size().iHeight * KZoomPercent[aZoomLevel] + 5) / KZoomPercent[EPreviewZoomLevel1];
+		iDisplayRect.SetSize(newSize);
+		if (oldZoomLevel != EPreviewZoomLevel1)
+			{
+			TPoint newPos;
+			newPos.iX = Max(0, ((iDisplayPoint.iX  * KZoomPercent[aZoomLevel] + 5) / KZoomPercent[EPreviewZoomLevel1]));
+			newPos.iY = Max(0, ((iDisplayPoint.iY  * KZoomPercent[aZoomLevel] + 5) / KZoomPercent[EPreviewZoomLevel1]));
+			iDisplayPoint = newPos;
+			}
+		}
+	iZoomLevel = aZoomLevel;
+	}
+
+void CDirectPrintPreviewControl::CreatePreviewImageL()
+	{
+	if (iPreview)
+		{
+		delete iPreview;
+		iPreview=NULL;
+		}
+
+	iPreview = CPrintPreviewImage::NewL(*iPrintSetup,
+										*iBodyPrinter,
+										CEikonEnv::Static()->WsSession(),
+										Window(),
+										iDisplayRect.Size(),
+										*iPrintPreviewFormat);
+	iPreview->SetNumBands(iNumBands);
+	iPreview->FormatL(iNumPagesInDoc,*iFirstPageToDisplay,iNumPagesToView);
+	iPreview->SetMargins(iMarginState);
+//	TRect buttonRect(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iBr.iY-KScrollButtonWidth),
+//					TSize(KScrollButtonWidth,KScrollButtonWidth));
+//	iButton[0]->SetRect(buttonRect);
+//	buttonRect.Move(iDisplayRect.Width()+KScrollButtonWidth,0);
+//	iButton[1]->SetRect(buttonRect);
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintpreviewview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+#include <eikcore.rsg>
+#include <prnprev.h> 
+
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "DirectPrintAppAppUi.h"
+#include "DirectPrintEngine.h"
+#include "directprintpreviewview.h"
+#include "directprintpreviewcontrol.h"
+
+CDirectPrintPreviewView::CDirectPrintPreviewView()
+	{
+	}
+
+CDirectPrintPreviewView::~CDirectPrintPreviewView()
+	{
+	delete iPrevCtrl;
+	}
+
+CDirectPrintPreviewView* CDirectPrintPreviewView::NewL()
+	{
+	CDirectPrintPreviewView* self = CDirectPrintPreviewView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintPreviewView* CDirectPrintPreviewView::NewLC()
+	{
+	CDirectPrintPreviewView* self = new(ELeave) CDirectPrintPreviewView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintPreviewView::ConstructL()
+	{
+	LOG("CDirectPrintPreviewView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_PREVIEW_VIEW);
+	LOG("CDirectPrintPreviewView::ConstructL END");
+	}
+
+void CDirectPrintPreviewView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyBack:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdPreviewViewBack);
+			}
+			break;
+		case EDirectPrintCmdIdPreviewViewPrint:
+		case EDirectPrintCmdIdPreviewViewExpand:
+		case EDirectPrintCmdIdPreviewViewReduce:
+		case EDirectPrintCmdIdPreviewViewBack:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+TUid CDirectPrintPreviewView::Id() const
+	{
+	return TUid::Uid(EDirectPrintPreviewViewId);
+	}
+
+void CDirectPrintPreviewView::OfferToolbarEventL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EDirectPrintCmdIdPreviewViewPrint:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		case EDirectPrintCmdIdPreviewViewExpand:
+			{
+			iPrevCtrl->IncrementZoomLevel();
+			ChangeVisibleState();
+			}
+			break;
+		case EDirectPrintCmdIdPreviewViewReduce:
+			{
+			iPrevCtrl->DecrementZoomLevel();
+			ChangeVisibleState();
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintPreviewView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	LOG("CDirectPrintPreviewView::DoActivateL BEGIN");
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+	toolbar->SetToolbarObserver(this);
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_PREVIEW_TITLE);
+
+	if (!iPrevCtrl)
+		{
+		CDirectPrintAppAppUi* appui = static_cast<CDirectPrintAppAppUi*>( AppUi() );
+		CDirectPrintEngine* engine = appui->Engine();
+
+		const TInt KPanelGutter=5;
+		const TInt KShadowWidth=2;
+		const TInt KLabelFontHeight=12;
+
+		TFontSpec normalFontSpec = CEikonEnv::Static()->NormalFont()->FontSpecInTwips();
+		TFontSpec fontSpec(normalFontSpec);
+		fontSpec.iHeight = KLabelFontHeight;
+		iPrintPreviewFormat.iLabelFontSpecInPixels=fontSpec;
+		iPrintPreviewFormat.iMinPanelGutterInPixels=TSize(KPanelGutter,KPanelGutter);
+		iPrintPreviewFormat.iPanelShadowWidthInPixels=KShadowWidth;
+		iPrintPreviewFormat.iPanelShadowColor=KRgbDarkGray;
+		iPrintPreviewFormat.iPanelMarginColor=KRgbGray;
+		iPrintPreviewFormat.iLabelOffsetInPixels=5;
+
+		iPrevCtrl = CDirectPrintPreviewControl::NewL(NULL);
+		iPrevCtrl->SetMopParent(this);
+
+		//iNumPagesInDoc = engine->MaxPageNum();
+		iNumPagesInDoc = 3;
+		iFirstPageToDisplay = 1;
+		iNumPagesToView = 1;
+		iNumBands = 2;
+		iMarginState = CPrintPreviewImage::EShowMargins;
+
+		engine->StartPrintPreviewL();
+
+		iPrevCtrl->InitializeFormat(*(engine->PrintSetup()),
+									*(engine->PageRegionPrinter()),
+									iPrintPreviewFormat,
+									iNumPagesInDoc,
+									iFirstPageToDisplay,
+									iNumPagesToView,
+									iMarginState);
+		iPrevCtrl->ActivateL();
+		iPrevCtrl->SetNumBands(2);
+		}
+	iPrevCtrl->SetRect(ClientRect());
+	iPrevCtrl->SetDrawFlag(ETrue);
+	iPrevCtrl->MakeVisible(ETrue);
+	iPrevCtrl->DrawDeferred();
+	AppUi()->AddToStackL(*this, iPrevCtrl);
+	ChangeVisibleState();
+	LOG("CDirectPrintPreviewView::DoActivateL END");
+	}
+
+void CDirectPrintPreviewView::DoDeactivate()
+	{
+	LOG("CDirectPrintPreviewView::DoDeactivate BEGIN");
+	AppUi()->RemoveFromViewStack(*this, iPrevCtrl);
+	if (iPrevCtrl)
+		{
+		CDirectPrintAppAppUi* appui = static_cast<CDirectPrintAppAppUi*>( AppUi() );
+		CDirectPrintEngine* engine = appui->Engine();
+		engine->EndPrintPreview();
+		delete iPrevCtrl;
+		iPrevCtrl = NULL;
+		}
+	LOG("CDirectPrintPreviewView::DoDeactivate END");
+	}
+
+
+void CDirectPrintPreviewView::NotifyBandPrinted(TInt /*aPercentageOfPagePrinted*/, 
+												TInt /*aCurrentPageNum*/, 
+												TInt /*aCurrentCopyNum*/)
+    {
+	LOG("CDirectPrintPreviewView::NotifyBandPrinted");
+	} 
+
+
+void CDirectPrintPreviewView::NotifyPrintStarted(TPrintParameters /*aPrintParams*/)
+	{
+	LOG("CDirectPrintPreviewView::NotifyPrintStarted");
+	}
+
+void CDirectPrintPreviewView::NotifyPrintEnded(TInt anErrorCode)
+	// ignore any errors before fully initialized
+    {
+	LOG1("CDirectPrintPreviewView::NotifyPrintEnded [%d]", anErrorCode);
+	if (anErrorCode!=KErrNone && anErrorCode!=KErrCancel)
+		{
+		TBuf<80> previewError;
+		if (anErrorCode==KErrNoMemory)
+			iCoeEnv->ReadResource(previewError,R_EIK_TBUF_NOT_ENOUGH_MEMORY);
+		else
+			iCoeEnv->ReadResource(previewError,R_DIRECTPRINT_MSG_PREVIEW_ERR);
+		iEikonEnv->AlertWin(previewError);
+		// ToDo: Go back to Main view
+		//delete this;
+		}
+	}
+
+void CDirectPrintPreviewView::ChangeVisibleState()
+	{
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+
+	TBool isDimmedExpand = EFalse;
+	TBool isDimmedReduce = EFalse;
+	switch (iPrevCtrl->GetZoomLebel())
+		{
+		case CDirectPrintPreviewControl::EPreviewZoomLevel1:
+			isDimmedReduce = ETrue;
+			break;
+		case CDirectPrintPreviewControl::EPreviewZoomLevel5:
+			isDimmedExpand = ETrue;
+			break;
+		default:
+			break;
+		}
+	toolbar->SetItemDimmed(EDirectPrintCmdIdPreviewViewExpand, isDimmedExpand, ETrue);
+	toolbar->SetItemDimmed(EDirectPrintCmdIdPreviewViewReduce, isDimmedReduce, ETrue);
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintpropertyview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,633 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "directprintmodel.h"
+#include "directprintpropertyview.h"
+#include "DirectPrintUiPluginMgr.h"
+#include "DirectPrintUiPlugin.h"
+
+CDirectPrintPropertyView::CDirectPrintPropertyView()
+	{
+	iListBox = NULL;
+	}
+
+CDirectPrintPropertyView::~CDirectPrintPropertyView()
+	{
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	delete iListBox;
+	}
+
+CDirectPrintPropertyView* CDirectPrintPropertyView::NewL()
+	{
+	CDirectPrintPropertyView* self = CDirectPrintPropertyView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintPropertyView* CDirectPrintPropertyView::NewLC()
+	{
+	CDirectPrintPropertyView* self = new(ELeave) CDirectPrintPropertyView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintPropertyView::ConstructL()
+	{
+	LOG("CDirectPrintPropertyView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_PROPERTYSETTING_VIEW);
+
+	iViewId = TUid::Uid(EDirectPrintPropertyViewId);
+	LOG("CDirectPrintPropertyView::ConstructL END");
+	}
+
+void CDirectPrintPropertyView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyBack:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdPropertySettingViewBack);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+void CDirectPrintPropertyView::OfferToolbarEventL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EDirectPrintCmdIdPropertySettingViewPreview:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintPropertyView::ChangeTabL(TInt aTabIndex)
+	{
+	iTabIndex = aTabIndex;
+	iListBox->SettingItemArray()->ResetAndDestroy();
+	LoadListL();
+	iListBox->LoadSettingsL();
+	iListBox->DrawNow();
+	}
+
+void CDirectPrintPropertyView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	LOG("CDirectPrintPropertyView::DoActivateL BEGIN");
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+	toolbar->SetToolbarObserver(this);
+
+	ReadDataL();
+
+	// Create list box
+	if (!iListBox)
+		{
+		iListBox = CDirectPrintSettingListBox::NewL(ClientRect());
+		iListBox->SetMopParent(this);
+		iListBox->ConstructFromResourceL(R_DIRECTPRINT_PROPERTYSETTING_SETTING_ITEM_LIST);
+		iListBox->ActivateL();
+		}
+	ChangeTabL(EDirectPrintPaperSettingTab);
+	iListBox->LoadSettingsL();
+	AppUi()->AddToStackL(*this, iListBox);
+	iListBox->MakeVisible(ETrue);
+	iListBox->DrawNow();
+
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_PROPERTYSETTING_TITLE);
+	LOG("CDirectPrintPropertyView::DoActivateL END");
+	}
+
+void CDirectPrintPropertyView::DoDeactivate()
+	{
+	LOG("CDirectPrintPropertyView::DoDeactivate BEGIN");
+	TInt err = 0;
+
+	if (iListBox)
+		{
+		TRAP(err, iListBox->StoreSettingsL());
+		TRAP(err, WriteDataL());
+
+		iListBox->MakeVisible(EFalse);
+		AppUi()->RemoveFromViewStack(*this, iListBox);
+		}
+	LOG("CDirectPrintPropertyView::DoDeactivate END");
+	}
+
+void CDirectPrintPropertyView::LoadListL()
+	{
+	LOG("CDirectPrintPropertyView::LoadListL BEGIN");
+
+	switch (iTabIndex)
+		{
+		case EDirectPrintPaperSettingTab:
+			{
+			LoadPaperTabL();
+			}
+			break;
+		case EDirectPrintPageSettingTab:
+			{
+			LoadPageTabL();
+			}
+			break;
+		case EDirectPrintMarginSettingTab:
+			{
+			LoadMarginTabL();
+			}
+			break;
+		case EDirectPrintHeaderSettingTab:
+			{
+			LoadHeaderTabL();
+			}
+			break;
+		case EDirectPrintFooterSettingTab:
+			{
+			LoadFooterTabL();
+			}
+			break;
+		default:
+			break;
+		}
+
+	// Set extend setting item
+	CDirectPrintUiPlugin* plugin = GetPluginMgr().CurrentPluginL();
+	if (plugin)
+		{
+		plugin->LoadExtendItemsL(*(iListBox->SettingItemArray()), iTabIndex);
+		}
+
+	iListBox->HandleChangeInItemArrayOrVisibilityL();
+	LOG("CDirectPrintPropertyView::LoadListL END");
+	}
+
+void CDirectPrintPropertyView::ReadDataL()
+	{
+	LOG("CDirectPrintPropertyView::ReadDataL BEGIN");
+
+	CDirectPrintModel& model = GetModel();
+	CPrinterProperty* property = model.GetCurrentPrinterPropertyL(TUid::Uid(0));
+
+	if (property)
+		{
+		TInt count = property->iPropertyItems.Count();
+		for (TInt i=0; i<count; i++)
+			{
+			switch (property->iPropertyItems[i].iItemId)
+				{
+				case EDirectPrintPaperPaperSize:
+					{
+					iPaperSize = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintPaperOrientation:
+					{
+					iOrientation = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintPaperHight:
+					{
+					iHight = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintPaperWidth:
+					{
+					iWidth = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintPagePrintPage:
+					{
+					iPrintPage = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintPagePrintRange:
+					{
+					iPrintRange.Copy(property->iPropertyItems[i].iItemTextValue);
+					}
+					break;
+				case EDirectPrintPageCopy:
+					{
+					iCopy = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintMarginLeftMargin:
+					{
+					iLeftMargin = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintMarginRightMargin:
+					{
+					iRightMargin = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintMarginTopMargin:
+					{
+					iTopMargin = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintMarginBottomMargin:
+					{
+					iBottomMargin = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintHeaderHeaderText:
+					{
+					iHeaderText.Copy(property->iPropertyItems[i].iItemTextValue);
+					}
+					break;
+				case EDirectPrintHeaderDistance:
+					{
+					iHeaderDistance = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintHeaderFirstPage:
+					{
+					iHeaderFirstPage = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintFooterFooterText:
+					{
+					iFooterText.Copy(property->iPropertyItems[i].iItemTextValue);
+					}
+					break;
+				case EDirectPrintFooterDistance:
+					{
+					iFooterDistance = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				case EDirectPrintFooterFirstPage:
+					{
+					iFooterFirstPage = property->iPropertyItems[i].iItemValue;
+					}
+					break;
+				default:
+					{
+					// Set extend setting item
+					CDirectPrintUiPlugin* plugin = GetPluginMgr().CurrentPluginL();
+					if (plugin)
+						{
+						plugin->ReadDataL(property->iPropertyItems[i]);
+						}
+					}
+					break;
+				}
+			}
+		}
+	else
+		{
+		model.SetCurrentProperty(model.PropertyCount());
+		NewDataL();
+		}
+
+	LOG("CDirectPrintPropertyView::ReadDataL END");
+	}
+
+void CDirectPrintPropertyView::WriteDataL()
+	{
+	LOG("CDirectPrintPropertyView::WriteDataL BEGIN");
+
+	CDirectPrintModel& model = GetModel();
+	CPrinterProperty* property = new (ELeave) CPrinterProperty();
+	CleanupStack::PushL(property);
+	property->iPrinterId = model.GetCurrentPrinterIdL();
+	property->iApplicationId = 0;
+
+	TDirectPrintPropertyData data1;
+	data1.iItemType = EDirectPrintPaperSettingTab;
+	data1.iItemId = EDirectPrintPaperPaperSize;
+	//data1.iItemName.Copy();
+	data1.iItemValue = iPaperSize;
+	property->iPropertyItems.Append(data1);
+
+	TDirectPrintPropertyData data2;
+	data2.iItemType = EDirectPrintPaperSettingTab;
+	data2.iItemId = EDirectPrintPaperOrientation;
+	//data2.iItemName.Copy();
+	data2.iItemValue = iOrientation;
+	property->iPropertyItems.Append(data2);
+
+	TDirectPrintPropertyData data3;
+	data3.iItemType = EDirectPrintPaperSettingTab;
+	data3.iItemId = EDirectPrintPaperHight;
+	//data3.iItemName.Copy();
+	data3.iItemValue = iHight;
+	property->iPropertyItems.Append(data3);
+
+	TDirectPrintPropertyData data4;
+	data4.iItemType = EDirectPrintPaperSettingTab;
+	data4.iItemId = EDirectPrintPaperWidth;
+	//data4.iItemName.Copy();
+	data4.iItemValue = iWidth;
+	property->iPropertyItems.Append(data4);
+
+	TDirectPrintPropertyData data5;
+	data5.iItemType = EDirectPrintPageSettingTab;
+	data5.iItemId = EDirectPrintPagePrintPage;
+	//data5.iItemName.Copy();
+	data5.iItemValue = iPrintPage;
+	property->iPropertyItems.Append(data5);
+
+	TDirectPrintPropertyData data6;
+	data6.iItemType = EDirectPrintPageSettingTab;
+	data6.iItemId = EDirectPrintPagePrintRange;
+	//data6.iItemName.Copy();
+	data6.iItemTextValue.Copy(iPrintRange);
+	property->iPropertyItems.Append(data6);
+
+	TDirectPrintPropertyData data7;
+	data7.iItemType = EDirectPrintPageSettingTab;
+	data7.iItemId = EDirectPrintPageCopy;
+	//data7.iItemName.Copy();
+	data7.iItemValue = iCopy;
+	property->iPropertyItems.Append(data7);
+
+	TDirectPrintPropertyData data8;
+	data8.iItemType = EDirectPrintMarginSettingTab;
+	data8.iItemId = EDirectPrintMarginLeftMargin;
+	//data8.iItemName.Copy();
+	data8.iItemValue = iLeftMargin;
+	property->iPropertyItems.Append(data8);
+
+	TDirectPrintPropertyData data9;
+	data9.iItemType = EDirectPrintMarginSettingTab;
+	data9.iItemId = EDirectPrintMarginRightMargin;
+	//data9.iItemName.Copy();
+	data9.iItemValue = iRightMargin;
+	property->iPropertyItems.Append(data9);
+
+	TDirectPrintPropertyData data10;
+	data10.iItemType = EDirectPrintMarginSettingTab;
+	data10.iItemId = EDirectPrintMarginTopMargin;
+	//data10.iItemName.Copy();
+	data10.iItemValue = iTopMargin;
+	property->iPropertyItems.Append(data10);
+
+	TDirectPrintPropertyData data11;
+	data11.iItemType = EDirectPrintMarginSettingTab;
+	data11.iItemId = EDirectPrintMarginBottomMargin;
+	//data11.iItemName.Copy();
+	data11.iItemValue = iBottomMargin;
+	property->iPropertyItems.Append(data11);
+
+	TDirectPrintPropertyData data12;
+	data12.iItemType = EDirectPrintHeaderSettingTab;
+	data12.iItemId = EDirectPrintHeaderHeaderText;
+	//data12.iItemName.Copy();
+	data12.iItemTextValue.Copy(iHeaderText);
+	property->iPropertyItems.Append(data12);
+
+	TDirectPrintPropertyData data13;
+	data13.iItemType = EDirectPrintHeaderSettingTab;
+	data13.iItemId = EDirectPrintHeaderDistance;
+	//data13.iItemName.Copy();
+	data13.iItemValue = iHeaderDistance;
+	property->iPropertyItems.Append(data13);
+
+	TDirectPrintPropertyData data14;
+	data14.iItemType = EDirectPrintHeaderSettingTab;
+	data14.iItemId = EDirectPrintHeaderFirstPage;
+	//data14.iItemName.Copy();
+	data14.iItemValue = iHeaderFirstPage;
+	property->iPropertyItems.Append(data14);
+
+	TDirectPrintPropertyData data15;
+	data15.iItemType = EDirectPrintFooterSettingTab;
+	data15.iItemId = EDirectPrintFooterFooterText;
+	//data15.iItemName.Copy();
+	data15.iItemTextValue.Copy(iFooterText);
+	property->iPropertyItems.Append(data15);
+
+	TDirectPrintPropertyData data16;
+	data16.iItemType = EDirectPrintFooterSettingTab;
+	data16.iItemId = EDirectPrintFooterDistance;
+	//data16.iItemName.Copy();
+	data16.iItemValue = iFooterDistance;
+	property->iPropertyItems.Append(data16);
+
+	TDirectPrintPropertyData data17;
+	data17.iItemType = EDirectPrintFooterSettingTab;
+	data17.iItemId = EDirectPrintFooterFirstPage;
+	//data17.iItemName.Copy();
+	data17.iItemValue = iFooterFirstPage;
+	property->iPropertyItems.Append(data17);
+
+	// Set extend setting item
+	CDirectPrintUiPlugin* plugin = GetPluginMgr().CurrentPluginL();
+	if (plugin)
+		{
+		plugin->WriteDataL(property->iPropertyItems);
+		}
+
+	CleanupStack::Pop(property);
+	model.SetPrinterPropertyL(property);
+
+	LOG("CDirectPrintPropertyView::WriteDataL END");
+	}
+
+void CDirectPrintPropertyView::NewDataL()
+	{
+	LOG("CDirectPrintPropertyView::NewDataL BEGIN");
+
+	iPaperSize = 0;
+	iOrientation = 0;
+	iHight = 0;
+	iWidth = 0;
+	iPrintPage = 0;
+	iPrintRange.Copy(_L(""));
+	iCopy = 1;
+	iLeftMargin = 2;
+	iRightMargin = 2;
+	iTopMargin = 2;
+	iBottomMargin = 2;
+	iHeaderText.Copy(_L(""));
+	iHeaderDistance = 0;
+	iHeaderFirstPage = 0;
+	iFooterText.Copy(_L(""));
+	iFooterDistance = 0;
+	iFooterFirstPage = 0;
+
+	// Set extend setting item
+	CDirectPrintUiPlugin* plugin = GetPluginMgr().CurrentPluginL();
+	if (plugin)
+		{
+		plugin->NewDataL();
+		}
+
+	LOG("CDirectPrintPropertyView::NewDataL END");
+	}
+
+void CDirectPrintPropertyView::LoadPaperTabL()
+	{
+	TBuf<25> itemTitle;
+
+	// Set common setting item
+	CAknEnumeratedTextPopupSettingItem* item1 = new (ELeave) CAknEnumeratedTextPopupSettingItem(1, iPaperSize);
+	CleanupStack::PushL(item1);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_PAPERSIZE);
+	item1->ConstructL(EFalse, 1, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_SIZE_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	CAknEnumeratedTextPopupSettingItem* item2 = new (ELeave) CAknEnumeratedTextPopupSettingItem(2, iOrientation);
+	CleanupStack::PushL(item2);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_ORIENTATION);
+	item2->ConstructL(EFalse, 2, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_ORIENTATION_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	CAknEnumeratedTextPopupSettingItem* item3 = new (ELeave) CAknEnumeratedTextPopupSettingItem(3, iMediaType);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_MEDIATYPE);
+	item3->ConstructL(EFalse, 3, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_MEDIATYPE_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+	}
+
+void CDirectPrintPropertyView::LoadPageTabL()
+	{
+	TBuf<25> itemTitle;
+
+	// Set common setting item
+	CAknEnumeratedTextPopupSettingItem* item1 = new (ELeave) CAknEnumeratedTextPopupSettingItem(1, iPrintPage);
+	CleanupStack::PushL(item1);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_PRINTPAGE);
+	item1->ConstructL(EFalse, 1, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_RANGE_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	CAknTextSettingItem* item2 = new (ELeave) CAknTextSettingItem(2, iPrintRange);
+	CleanupStack::PushL(item2);
+	item2->SetEmptyItemTextL( _L("None") );
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_PRINTRANGE);
+	item2->ConstructL(EFalse, 2, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_TEXT_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	CAknIntegerEdwinSettingItem* item3 = new (ELeave) CAknIntegerEdwinSettingItem(3, iCopy);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_COPY);
+	item3->ConstructL(EFalse, 3, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+	}
+
+void CDirectPrintPropertyView::LoadMarginTabL()
+	{
+	TBuf<25> itemTitle;
+
+	// Set common setting item
+	CAknIntegerEdwinSettingItem* item1 = new (ELeave) CAknIntegerEdwinSettingItem(1, iLeftMargin);
+	CleanupStack::PushL(item1);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_LEFTMARGIN);
+	item1->ConstructL(EFalse, 1, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	CAknIntegerEdwinSettingItem* item2 = new (ELeave) CAknIntegerEdwinSettingItem(2, iRightMargin);
+	CleanupStack::PushL(item2);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_RIGHTMARGIN);
+	item2->ConstructL(EFalse, 2, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	CAknIntegerEdwinSettingItem* item3 = new (ELeave) CAknIntegerEdwinSettingItem(3, iTopMargin);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_TOPMARGIN);
+	item3->ConstructL(EFalse, 3, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+
+	CAknIntegerEdwinSettingItem* item4 = new (ELeave) CAknIntegerEdwinSettingItem(4, iBottomMargin);
+	CleanupStack::PushL(item4);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_BOTTOMMARGIN);
+	item4->ConstructL(EFalse, 4, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item4);
+	CleanupStack::Pop(item4);
+	}
+
+void CDirectPrintPropertyView::LoadHeaderTabL()
+	{
+	TBuf<25> itemTitle;
+
+	// Set common setting item
+	CAknTextSettingItem* item1 = new (ELeave) CAknTextSettingItem(1, iHeaderText);
+	CleanupStack::PushL(item1);
+	item1->SetEmptyItemTextL( _L("None") );
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_HEADERTEXT);
+	item1->ConstructL(EFalse, 1, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_TEXT_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	CAknIntegerEdwinSettingItem* item2 = new (ELeave) CAknIntegerEdwinSettingItem(2, iHeaderDistance);
+	CleanupStack::PushL(item2);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_HEADERDISTANCE);
+	item2->ConstructL(EFalse, 2, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	CAknEnumeratedTextPopupSettingItem* item3 = new (ELeave) CAknEnumeratedTextPopupSettingItem(3, iHeaderFirstPage);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_HEADERFIRSTPAGE);
+	item3->ConstructL(EFalse, 3, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_PRINT_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+	}
+
+void CDirectPrintPropertyView::LoadFooterTabL()
+	{
+	TBuf<25> itemTitle;
+
+	// Set common setting item
+	CAknTextSettingItem* item1 = new (ELeave) CAknTextSettingItem(1, iFooterText);
+	CleanupStack::PushL(item1);
+	item1->SetEmptyItemTextL( _L("None") );
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_FOOTERTEXT);
+	item1->ConstructL(EFalse, 1, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_TEXT_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	CAknIntegerEdwinSettingItem* item2 = new (ELeave) CAknIntegerEdwinSettingItem(2, iFooterDistance);
+	CleanupStack::PushL(item2);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_FOOTERDISTANCE);
+	item2->ConstructL(EFalse, 2, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_INTEGER_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	CAknEnumeratedTextPopupSettingItem* item3 = new (ELeave) CAknEnumeratedTextPopupSettingItem(3, iFooterFirstPage);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PROPERTYSETTING_ITEM_FOOTERFIRSTPAGE);
+	item3->ConstructL(EFalse, 3, itemTitle, NULL, R_DIRECTPRINT_PROPERTYSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PROPERTYSETTING_PRINT_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintsearchresultview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+#include <stringloader.h>			// StringLoader
+
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "directprintsearchresultview.h"
+
+CDirectPrintSearchResultView::CDirectPrintSearchResultView()
+	{
+	iListBox = NULL;
+	}
+
+CDirectPrintSearchResultView::~CDirectPrintSearchResultView()
+	{
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+
+    if (iPeriodic)
+        {
+        iPeriodic->Cancel();
+        delete iPeriodic;
+        iPeriodic = NULL;
+        }
+
+	if (iProgressDialog)
+		{
+		TRAP_IGNORE(iProgressDialog->ProcessFinishedL());
+		delete iProgressDialog;
+		iProgressDialog = NULL;
+		}
+	if (iProgressMessage)
+		{
+		delete iProgressMessage;
+		iProgressMessage = NULL;
+		}
+
+	delete iListBox;
+	delete iItemArray;
+	}
+
+CDirectPrintSearchResultView* CDirectPrintSearchResultView::NewL()
+	{
+	CDirectPrintSearchResultView* self = CDirectPrintSearchResultView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintSearchResultView* CDirectPrintSearchResultView::NewLC()
+	{
+	CDirectPrintSearchResultView* self = new(ELeave) CDirectPrintSearchResultView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintSearchResultView::ConstructL()
+	{
+	LOG("CDirectPrintSearchResultView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_SEARCHRESULT_VIEW);
+
+	iViewId = TUid::Uid(EDirectPrintSearchResultViewId);
+
+	iItemArray = new(ELeave) CDesCArrayFlat(3);
+	LOG("CDirectPrintSearchResultView::ConstructL END");
+	}
+
+void CDirectPrintSearchResultView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyCancel:
+			{
+			AppUi()->HandleCommandL(EDirectPrintCmdIdSearchResultViewCancel);
+			}
+			break;
+		case EDirectPrintCmdIdSearchResultViewSearch:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+void CDirectPrintSearchResultView::HandleListIndexL(TInt /*aIndex*/)
+	{
+	AppUi()->HandleCommandL(EDirectPrintCmdIdSearchResultViewSelect);
+	}
+
+void CDirectPrintSearchResultView::OfferToolbarEventL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EDirectPrintCmdIdPrinterListViewEdit:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+void CDirectPrintSearchResultView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	LOG("CDirectPrintSearchResultView::DoActivateL BEGIN");
+	CAknToolbar* toolbar = AppUi()->CurrentFixedToolbar();
+	toolbar->SetToolbarObserver(this);
+
+	// Create list box
+	if (!iListBox)
+		{
+		iListBox = CDirectPrintListBox::NewL(ClientRect(), iItemArray);
+		iListBox->SetMopParent(this);
+		iListBox->SetListObserver(this);
+		}
+	AppUi()->AddToStackL(*this, iListBox);
+	iListBox->MakeVisible(ETrue);
+
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_PRINTERSEARCH_TITLE);
+	
+	StartSearchL();
+	LOG("CDirectPrintSearchResultView::DoActivateL END");
+	}
+
+void CDirectPrintSearchResultView::DoDeactivate()
+	{
+	LOG("CDirectPrintSearchResultView::DoDeactivate BEGIN");
+	iListBox->MakeVisible(EFalse);
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	LOG("CDirectPrintSearchResultView::DoDeactivate END");
+	}
+
+void CDirectPrintSearchResultView::StartSearchProgressNoteL()
+	{
+	// Delete possible previous CAknProgressDialog.
+	if (iProgressDialog)
+		{
+		delete iProgressDialog;
+		iProgressDialog = NULL;
+		}
+
+	if (!iProgressMessage)
+		{
+		// read progress message
+		iProgressMessage = StringLoader::LoadL( R_DIRECTPRINT_MSG_SEARCHING_PROGRESS );
+		}
+
+	// Create new CAknProgressDialog.
+	iProgressDialog = new ( ELeave ) CAknProgressDialog( reinterpret_cast
+														 <CEikDialog**> 
+														 ( &iProgressDialog ) );
+	iProgressDialog->SetCallback( this );
+	iProgressDialog->PrepareLC( R_DIRECTPRINT_SEARCH_PROGRESS_NOTE );
+	//iProgressInfo = iProgressDialog->GetProgressInfoL();
+	//iProgressInfo->SetFinalValue( 1 );
+
+	iProgressDialog->SetTextL(*iProgressMessage);
+	iProgressDialog->RunLD();
+	}
+
+void CDirectPrintSearchResultView::EndProgressNoteL()
+	{
+	if (iProgressDialog)
+		{
+		iProgressDialog->ProcessFinishedL();
+		if (iProgressDialog)
+			{
+			delete iProgressDialog;
+			iProgressDialog = NULL;
+			}
+		}
+	}
+
+void CDirectPrintSearchResultView::StartSearchL()
+	{
+	const TInt KSearchTimeoutTime(10000000);  // 10 sec
+
+    if (iPeriodic)
+        {
+        iPeriodic->Cancel();
+        }
+    else
+        {
+        iPeriodic = CPeriodic::NewL(CActive::EPriorityIdle);
+        }
+    iPeriodic->Start(KSearchTimeoutTime, KSearchTimeoutTime, TCallBack(HandleTimeout, this));
+	StartSearchProgressNoteL();
+	}
+
+TInt CDirectPrintSearchResultView::HandleTimeout(TAny* aAny)
+    {
+    // Setting size button back to up state
+    
+    CDirectPrintSearchResultView* self = static_cast<CDirectPrintSearchResultView*>( aAny );
+    // Cancel timer
+    TRAPD( err, self->HandleTimeoutL());
+    return err;
+    }
+
+void CDirectPrintSearchResultView::HandleTimeoutL()
+    {
+	iTimeoutCount++;
+	if (iTimeoutCount == 1)
+		{
+		// for test
+		TBuf<50> buf;
+		buf.Copy(_L("\tCanon MP640_000XXX\t"));
+		iItemArray->AppendL(buf);
+		iListBox->DrawNow();
+		}
+	else if (iTimeoutCount > 1)
+		{
+		EndProgressNoteL();
+		if (iPeriodic)
+			{
+			iPeriodic->Cancel();
+			delete iPeriodic;
+			iPeriodic = NULL;
+			}
+		iTimeoutCount = 0;
+		}
+	}
+
+void CDirectPrintSearchResultView::DialogDismissedL( TInt aButtonId )
+	{
+	//TInt button = aButtonId;
+	}
+
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintsettinglistbox.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "directprintsettinglistbox.h"
+
+CDirectPrintSettingListBox::CDirectPrintSettingListBox()
+	{
+	}
+
+CDirectPrintSettingListBox::~CDirectPrintSettingListBox()
+	{
+	}
+
+CDirectPrintSettingListBox* CDirectPrintSettingListBox::NewL(const TRect& aRect)
+	{
+	CDirectPrintSettingListBox* self = CDirectPrintSettingListBox::NewLC(aRect);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintSettingListBox* CDirectPrintSettingListBox::NewLC(const TRect& aRect)
+	{
+	CDirectPrintSettingListBox* self = new(ELeave) CDirectPrintSettingListBox();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	return self;
+	}
+
+void CDirectPrintSettingListBox::ConstructL(const TRect& aRect)
+	{
+	CreateWindowL();
+	SetRect(aRect);
+	}
+
+void CDirectPrintSettingListBox::EditItemL(TInt aIndex, TBool aCalledFromMenu)
+	{
+	TBuf<25> beforeText, afterText;
+	beforeText.Copy((*SettingItemArray())[aIndex]->SettingTextL());
+
+	CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu);
+
+	if (iObserver)
+		{
+		afterText.Copy((*SettingItemArray())[aIndex]->SettingTextL());
+		TBool changed = (beforeText.Compare(afterText) != 0);
+		iObserver->HandleEditItemL(aIndex, changed);
+		}
+	}
+
+void CDirectPrintSettingListBox::SetSettingListObserver(MDirectPrintSettingListObserver* aObserver)
+	{
+	iObserver = aObserver;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintsettingview.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,669 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// System include files
+#include <aknviewappui.h>
+#include <akntoolbar.h>
+#include <barsread.h>
+#include <DirectPrintApp.rsg>
+#include <AknSettingItemList.h>
+#include <eiklbx.h>
+#include <bautils.h>
+#include <driveinfo.h>
+#include <pathinfo.h>
+
+// User include files
+#include "clog.h"
+#include "directprintapp.hrh"
+#include "DirectPrintAppAppUi.h"
+#include "DirectPrintEngine.h"
+#include "DirectPrintModel.h"
+#include "directprintsettingview.h"
+#include "DirectPrintBearerMgr.h"
+
+#include "directprintbasecapability.h"
+#include "directprintlistcapability.h"
+#include "directprinttextcapability.h"
+#include "directprintprintsettings.h"
+#include "imageprint.h"
+#include "directprintcapabilitycodes.h"
+
+CDirectPrintPrinterSettingView::CDirectPrintPrinterSettingView()
+	{
+	iListBox = NULL;
+	}
+
+CDirectPrintPrinterSettingView::~CDirectPrintPrinterSettingView()
+	{
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	delete iListBox;
+	}
+
+CDirectPrintPrinterSettingView* CDirectPrintPrinterSettingView::NewL()
+	{
+	CDirectPrintPrinterSettingView* self = CDirectPrintPrinterSettingView::NewLC();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CDirectPrintPrinterSettingView* CDirectPrintPrinterSettingView::NewLC()
+	{
+	CDirectPrintPrinterSettingView* self = new(ELeave) CDirectPrintPrinterSettingView();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CDirectPrintPrinterSettingView::ConstructL()
+	{
+	LOG("CDirectPrintPrinterSettingView::ConstructL BEGIN");
+	BaseConstructL(R_DIRECTPRINT_PRINTERSETTING_VIEW);
+
+	iViewId = TUid::Uid(EDirectPrintPrinterSettingViewId);
+	LOG("CDirectPrintPrinterSettingView::ConstructL END");
+	}
+
+void CDirectPrintPrinterSettingView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		case EAknSoftkeyBack:
+			{
+			iListBox->StoreSettingsL();
+			StoreDriverInfoL();
+			StoreTypeInfoL();
+			StoreBearerInfoL();
+			StoreExtendSettingsL();
+			WriteDataL(); // write to model
+			GetBearerMgr()->SetJobSettings(); // write to bearer
+			GetModel().SetIsNewData(EFalse);
+
+			AppUi()->HandleCommandL(EDirectPrintCmdIdPrinterSettingViewBack);
+			}
+			break;
+		default:
+			{
+			AppUi()->HandleCommandL(aCommand);
+			}
+			break;
+		}
+	}
+
+void CDirectPrintPrinterSettingView::HandleEditItemL(TInt aIndex, TBool aChanged)
+	{
+	if (aChanged)
+		{
+		TBuf<25> titleBearer;
+		CEikonEnv::Static()->ReadResource(titleBearer, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER);
+
+		TPtrC name = (*(iListBox->SettingItemArray()))[aIndex]->SettingName();
+		if (name.Compare(titleBearer) == 0)
+			{
+			ReloadListL();
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	LOG("CDirectPrintPrinterSettingView::DoActivateL BEGIN");
+
+	if (GetModel().IsNewData())
+		{
+		NewDataL();
+		}
+	else
+		{
+		ReadDataL();
+		}
+
+	if (!iListBox)
+		{
+		// Create list box
+		iListBox = CDirectPrintSettingListBox::NewL(ClientRect());
+		iListBox->SetMopParent(this);
+		iListBox->SetSettingListObserver(this);
+		iListBox->ConstructFromResourceL(R_DIRECTPRINT_PRINTERSETTING_ITEM_LIST);
+		iListBox->ActivateL();
+		}
+	else
+		{
+		iListBox->SettingItemArray()->ResetAndDestroy();
+		}
+
+	LoadListL();
+	LoadDriverInfoL();
+	LoadTypeInfoL();
+	LoadBearerInfoL();
+	LoadExtendListL();
+	iListBox->LoadSettingsL();
+	AppUi()->AddToStackL(*this, iListBox);
+	iListBox->MakeVisible(ETrue);
+	iListBox->DrawNow();
+
+	// set the title pane
+	SetActiveTitleL(R_DIRECTPRINT_PRINTERSETTING_TITLE);
+	LOG("CDirectPrintPrinterSettingView::DoActivateL END");
+	}
+
+void CDirectPrintPrinterSettingView::DoDeactivate()
+	{
+	LOG("CDirectPrintPrinterSettingView::DoDeactivate BEGIN");
+	iListBox->MakeVisible(EFalse);
+	AppUi()->RemoveFromViewStack(*this, iListBox);
+	LOG("CDirectPrintPrinterSettingView::DoDeactivate END");
+	}
+
+void CDirectPrintPrinterSettingView::LoadListL()
+	{
+	LOG("CDirectPrintPrinterSettingView::LoadListL BEGIN");
+
+	TBuf<25> itemTitle;
+
+	// Common setting item
+	CAknTextSettingItem* item1 = new (ELeave) CAknTextSettingItem(ESettingViewItemPrinterName, iPrinterName);
+	CleanupStack::PushL(item1);
+	item1->SetEmptyItemTextL( _L("None") );
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_PRINTERNAME);
+	item1->ConstructL(EFalse, ESettingViewItemPrinterName, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_TEXT_SETTING_PAGE, -1);
+	iListBox->SettingItemArray()->AppendL(item1);
+	CleanupStack::Pop(item1);
+
+	LOG("CDirectPrintPrinterSettingView::LoadListL 1");
+
+	iDriver = 0;
+	CAknEnumeratedTextPopupSettingItem* item2 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemDriver, iDriver);
+	CleanupStack::PushL(item2);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER);
+	item2->ConstructL(EFalse, ESettingViewItemDriver, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_TEXTS);
+
+	LOG("CDirectPrintPrinterSettingView::LoadListL 2");
+	// set printer driver
+		{
+		const TInt KSettingItemArrayGranularity = 5;
+		// Construct the array
+		CArrayPtr<CAknEnumeratedText>* enumeratedTextArray; 
+		enumeratedTextArray = new( ELeave ) CArrayPtrFlat<CAknEnumeratedText>( KSettingItemArrayGranularity );
+		CleanupStack::PushL( enumeratedTextArray );
+
+		// Construct a dummy array for popup text, needed to avoid a panic
+		CArrayPtr<HBufC>* popupTextArray; 
+		popupTextArray = new( ELeave ) CArrayPtrFlat<HBufC>( KSettingItemArrayGranularity );
+		CleanupStack::PushL( popupTextArray );
+
+		CDirectPrintAppAppUi* appui = static_cast<CDirectPrintAppAppUi*>( AppUi() );
+		CDirectPrintEngine* engine = appui->Engine();
+
+		// Read in the texts to be used in the setting item list
+		TInt index;
+		// Loop through all the texts 
+
+		LOG1("ModelCount=[%d]", engine->ModelCount());
+
+		for (index=0; index < engine->ModelCount(); index++)
+			{
+			HBufC* thisText = HBufC::NewLC(KMaxPrinterModelNameLength); 
+			TPtr thisTextDes = thisText->Des();
+			engine->ModelName(index, thisTextDes);
+			CAknEnumeratedText* enumeratedText = new( ELeave ) CAknEnumeratedText( index, thisText );
+			CleanupStack::Pop( thisText ); 
+			CleanupStack::PushL( enumeratedText );
+			enumeratedTextArray->AppendL( enumeratedText );
+			CleanupStack::Pop( enumeratedText ); 
+			}
+		if (engine->ModelCount() > 0)
+			{
+			item2->SetEnumeratedTextArrays( enumeratedTextArray, popupTextArray );
+			}
+		CleanupStack::Pop( popupTextArray );
+		CleanupStack::Pop( enumeratedTextArray );
+		}
+	LOG("CDirectPrintPrinterSettingView::LoadListL 2-2");
+
+	iListBox->SettingItemArray()->AppendL(item2);
+	CleanupStack::Pop(item2);
+
+	LOG("CDirectPrintPrinterSettingView::LoadListL 3");
+	iType = 0;
+	CAknEnumeratedTextPopupSettingItem* item3 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemType, iType);
+	CleanupStack::PushL(item3);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE);
+	item3->ConstructL(EFalse, ESettingViewItemType, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_TYPE_POPUP_SETTING_TEXTS);
+	iListBox->SettingItemArray()->AppendL(item3);
+	CleanupStack::Pop(item3);
+
+	iBearer = 0;
+	LOG("CDirectPrintPrinterSettingView::LoadListL 4");
+	CAknEnumeratedTextPopupSettingItem* item4 = new (ELeave) CAknEnumeratedTextPopupSettingItem(ESettingViewItemBearer, iBearer);
+	CleanupStack::PushL(item4);
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER);
+	item4->ConstructL(EFalse, ESettingViewItemBearer, itemTitle, NULL, R_DIRECTPRINT_PRINTERSETTING_POPUP_SETTING_PAGE, -1, 0, R_DIRECTPRINT_PRINTERSETTING_BEARER_POPUP_SETTING_TEXTS);
+
+	SetBearerListL(item4);
+
+	iListBox->SettingItemArray()->AppendL(item4);
+	CleanupStack::Pop(item4);
+
+	LOG("CDirectPrintPrinterSettingView::LoadListL xxx");
+
+	iListBox->ListBox()->SetCurrentItemIndex(0);
+	LOG("CDirectPrintPrinterSettingView::LoadListL xx");
+	iListBox->HandleChangeInItemArrayOrVisibilityL(); 
+	LOG("CDirectPrintPrinterSettingView::LoadListL END");
+	}
+
+void CDirectPrintPrinterSettingView::LoadExtendListL()
+	{
+	// Initialize capabilities for bearer
+	GetBearerMgr()->InitCapabilitiesL(iBearer);
+
+	// Extend setting item
+	CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL();
+	TInt count = printSettings->iCapabilities.Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAknSettingItem* item = printSettings->iCapabilities[i]->SettingItemLC(ESettingViewItemExtent+i);
+		iListBox->SettingItemArray()->AppendL(item);
+		CleanupStack::Pop(item);
+		}
+
+	LoadExtendSettingsL();
+
+	iListBox->HandleChangeInItemArrayOrVisibilityL(); 
+	}
+
+void CDirectPrintPrinterSettingView::ReloadListL()
+	{
+	iListBox->StoreSettingsL();
+	StoreDriverInfoL();
+	StoreTypeInfoL();
+	StoreBearerInfoL();
+	StoreExtendSettingsL();
+
+	iListBox->SettingItemArray()->ResetAndDestroy();
+	LoadListL();
+	LoadDriverInfoL();
+	LoadTypeInfoL();
+	LoadBearerInfoL();
+
+	LoadExtendListL();
+
+	iListBox->LoadSettingsL();
+	iListBox->DrawNow();
+	}
+
+void CDirectPrintPrinterSettingView::SetBearerListL(CAknEnumeratedTextPopupSettingItem* item)
+	{
+	TInt err = GetBearerMgr()->GetProtocolNames(iBearerList);
+	if (!err)
+		{
+		CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+		textArray->ResetAndDestroy();
+
+		TInt count = iBearerList.Count();
+		for (TInt i=0; i<count; i++)
+			{
+			CAknEnumeratedText* enumText = new (ELeave) CAknEnumeratedText(i, iBearerList[i].iName.AllocLC());
+			CleanupStack::Pop();
+			CleanupStack::PushL(enumText);
+			textArray->AppendL(enumText);
+			CleanupStack::Pop();
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::ReadDataL()
+	{
+	LOG("CDirectPrintPrinterSettingView::ReadDataL BEGIN");
+	CDirectPrintModel& model = GetModel();
+	TDirectPrintPrinterData printerData;
+	TInt index = model.SelectPrinter();
+	if (index >= 0)
+		{
+		model.GetPrinterDataL(index, printerData);
+		}
+	else
+		{
+		model.SetCurrentPrinter(0);
+		}
+
+	TDirectPrintBearerData bearerData;
+	index = model.CurrentBearer();
+	if (index >= 0)
+		{
+		//model.GetBearerDataL(index, bearerData);
+		model.GetSelectedBearerDataL(bearerData);
+		}
+	else
+		{
+		model.SetCurrentBearer(0);
+		}
+
+	iPrinterId = printerData.iPrinterId;
+	iPrinterName.Copy(printerData.iPrinterName);
+	iDriverName.Copy(printerData.iDriverName);
+	iTypeName.Copy(printerData.iTypeName);
+	//iDriver = 1;
+	//iBearer = 1;
+	//iAccessPoint = 0;
+	iAccessPointName.Copy(bearerData.iAccessPoint);
+	iBearerName.Copy(bearerData.iBearerName);
+	iPort = bearerData.iPort;
+	if (bearerData.iHostName.Length() > 0)
+		{
+		iHost.Copy(bearerData.iHostName);
+		}
+	iUserName.Copy(bearerData.iUserName);
+	iQue.Copy(bearerData.iQueName);
+
+	LOG("CDirectPrintPrinterSettingView::ReadDataL END");
+	}
+
+void CDirectPrintPrinterSettingView::WriteDataL()
+	{
+	LOG("CDirectPrintPrinterSettingView::WriteDataL BEGIN");
+	TDirectPrintPrinterData printerData;
+	printerData.iPrinterId = iPrinterId;
+	printerData.iPrinterName.Copy(iPrinterName);
+//	printerData.iPrinterDriver = iDriverUid;
+	printerData.iDriverName.Copy(iDriverName);
+//	printerData.iPrinterType = iType;
+	printerData.iTypeName.Copy(iTypeName);
+
+	TDirectPrintBearerData bearerData;
+	bearerData.iPrinterId = iPrinterId;
+	bearerData.iBearerName.Copy(iBearerName);
+	bearerData.iAccessPoint.Copy(iAccessPointName);
+	bearerData.iHostName.Copy(iHost);
+	bearerData.iPort = iPort;
+	bearerData.iUserName.Copy(iUserName);
+	bearerData.iQueName.Copy(iQue);
+
+	CDirectPrintModel& model = GetModel();
+	if (model.IsNewData())
+		{
+		if (model.PrinterCount() == 0)
+			{
+			model.SetCurrentPrinter(0);
+			model.SetCurrentBearer(0);
+			}
+		model.SetPrinterDataL(model.PrinterCount(), printerData);
+		model.SetBearerDataL(model.BearerCount(), bearerData);
+		}
+	else
+		{
+		model.SetPrinterDataL(model.SelectPrinter(), printerData);
+		//model.SetBearerDataL(model.CurrentBearer(), bearerData);
+		model.SetBearerDataL(bearerData);
+		}
+	LOG("CDirectPrintPrinterSettingView::WriteDataL END");
+	}
+
+void CDirectPrintPrinterSettingView::NewDataL()
+	{
+	CDirectPrintModel& model = GetModel();
+	TInt count = model.PrinterCount();
+
+	TBuf<50> buf;
+	TBool IsNewName = EFalse;
+	for (TInt i=1; !IsNewName; i++)
+		{
+		buf.Format(_L("Printer%d"), count+i);
+		IsNewName = ETrue;
+
+		for (TInt j=0; j<count; j++)
+			{
+			TDirectPrintPrinterData printerData;
+			model.GetPrinterDataL(j, printerData);
+			if (printerData.iPrinterName.Compare(buf) == 0)
+				{
+				IsNewName = EFalse;
+				break;
+				}
+			}
+		}
+
+	iPrinterId = model.NewPrinterId();
+	iPrinterName.Copy(buf);
+	iDriver = 0;
+	iBearer = 0;
+	iAccessPoint = 0;
+//	iAccessPointName.Copy(_L("WLAN_ap1"));
+//	iHostIp.SetAddress(3232235530);
+	iPort = 80;
+	iUserName.Copy(_L(""));
+	iQue.Copy(_L(""));
+	}
+
+void CDirectPrintPrinterSettingView::LoadDriverInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER);
+	CAknEnumeratedTextPopupSettingItem* item = static_cast<CAknEnumeratedTextPopupSettingItem*>(GetSettingItemL(itemTitle));
+	CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+	TInt count = textArray->Count();
+
+	for (TInt i=0; i<count; i++)
+		{
+		if (iDriverName.Compare((*textArray)[i]->Value()->Des()) == 0)
+			{
+			iDriver = i;
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::LoadTypeInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE);
+	CAknEnumeratedTextPopupSettingItem* item = static_cast<CAknEnumeratedTextPopupSettingItem*>(GetSettingItemL(itemTitle));
+	CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+	TInt count = textArray->Count();
+
+	for (TInt i=0; i<count; i++)
+		{
+		if (iTypeName.Compare((*textArray)[i]->Value()->Des()) == 0)
+			{
+			iType = i;
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::LoadBearerInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER);
+	CAknEnumeratedTextPopupSettingItem* item = static_cast<CAknEnumeratedTextPopupSettingItem*>(GetSettingItemL(itemTitle));
+	CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+	TInt count = textArray->Count();
+
+	for (TInt i=0; i<count; i++)
+		{
+		if (iBearerName.Compare((*textArray)[i]->Value()->Des()) == 0)
+			{
+			iBearer = i;
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::LoadItemInfoL(TInt aResouceId, const TDesC& aInfo, TInt& aIndex)
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, aResouceId);
+	CAknEnumeratedTextPopupSettingItem* item = static_cast<CAknEnumeratedTextPopupSettingItem*>(GetSettingItemL(itemTitle));
+	CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+	TInt count = textArray->Count();
+
+	for (TInt i=0; i<count; i++)
+		{
+		if (aInfo.Compare((*textArray)[i]->Value()->Des()) == 0)
+			{
+			aIndex = i;
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::LoadExtendSettingsL()
+	{
+	CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL();
+	TInt count = printSettings->iCapabilities.Count();
+	for (TInt i=0; i<count; i++)
+		{
+		switch (printSettings->iCapabilities[i]->iUid)
+			{
+			case EDirectPrintCapabAP:
+				{
+				CAknEnumeratedTextPopupSettingItem* item = static_cast<CAknEnumeratedTextPopupSettingItem*>(GetSettingItemL(printSettings->iCapabilities[i]->iTitle));
+				CArrayPtr<CAknEnumeratedText>* textArray = item->EnumeratedTextArray();
+				TInt count = textArray->Count();
+
+				for (TInt j=0; j<count; j++)
+					{
+					if (iAccessPointName.Compare((*textArray)[j]->Value()->Des()) == 0)
+						{
+						CDirectPrintListCapability* capability = static_cast<CDirectPrintListCapability*>(printSettings->iCapabilities[i]);
+						capability->iEnumIndex = j;
+						capability->iValue = capability->iEnumIDs[j];
+						break;
+						}
+					}
+				}
+				break;
+			case EDirectPrintCapabHost:
+				{
+				CDirectPrintTextCapability* capability = static_cast<CDirectPrintTextCapability*>(printSettings->iCapabilities[i]);
+				capability->iText.Copy(iHost);
+				}
+				break;
+			case EDirectPrintCapabPort:
+				{
+				printSettings->iCapabilities[i]->iValue = iPort;
+				}
+				break;
+			case EDirectPrintCapabUser:
+				{
+				CDirectPrintTextCapability* capability = static_cast<CDirectPrintTextCapability*>(printSettings->iCapabilities[i]);
+				capability->iText.Copy(iUserName);
+				}
+				break;
+			case EDirectPrintCapabQue:
+				{
+				CDirectPrintTextCapability* capability = static_cast<CDirectPrintTextCapability*>(printSettings->iCapabilities[i]);
+				capability->iText.Copy(iQue);
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+void CDirectPrintPrinterSettingView::StoreDriverInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_DRIVER);
+	iDriverName.Copy(GetSettingItemL(itemTitle)->SettingTextL());
+	}
+
+void CDirectPrintPrinterSettingView::StoreTypeInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_TYPE);
+	iTypeName.Copy(GetSettingItemL(itemTitle)->SettingTextL());
+	}
+
+void CDirectPrintPrinterSettingView::StoreBearerInfoL()
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, R_DIRECTPRINT_PRINTERSETTING_ITEM_BEARER);
+	iBearerName.Copy(GetSettingItemL(itemTitle)->SettingTextL());
+	}
+
+void CDirectPrintPrinterSettingView::StoreItemInfoL(TInt aResouceId, TDes& aInfo)
+	{
+	TBuf<25> itemTitle;
+	CEikonEnv::Static()->ReadResource(itemTitle, aResouceId);
+	aInfo.Copy(GetSettingItemL(itemTitle)->SettingTextL());
+	}
+
+void CDirectPrintPrinterSettingView::StoreExtendSettingsL()
+	{
+	CDirectPrintPrintSettings* printSettings = GetBearerMgr()->PrinterSettingsL();
+	TInt count = printSettings->iCapabilities.Count();
+	for (TInt i=0; i<count; i++)
+		{
+		switch (printSettings->iCapabilities[i]->iUid)
+			{
+			case EDirectPrintCapabAP:
+				{
+				CDirectPrintListCapability* capability = static_cast<CDirectPrintListCapability*>(printSettings->iCapabilities[i]);
+				iAccessPointName.Copy(GetSettingItemL(capability->iTitle)->SettingTextL());
+				capability->iValue = capability->iEnumIDs[capability->iEnumIndex];
+				}
+				break;
+			case EDirectPrintCapabHost:
+				{
+				iHost.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL());
+				}
+				break;
+			case EDirectPrintCapabPort:
+				{
+				iPort = printSettings->iCapabilities[i]->iValue;
+				}
+				break;
+			case EDirectPrintCapabUser:
+				{
+				iUserName.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL());
+				}
+				break;
+			case EDirectPrintCapabQue:
+				{
+				iQue.Copy(GetSettingItemL(printSettings->iCapabilities[i]->iTitle)->SettingTextL());
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+CAknSettingItem* CDirectPrintPrinterSettingView::GetSettingItemL(const TDesC& aItemTitle)
+	{
+	CAknSettingItem* item = NULL;
+	CAknSettingItemArray* array = iListBox->SettingItemArray();
+	TInt count = array->Count();
+
+	for (TInt i=0; i<count; i++)
+		{
+		item = (*array)[i];
+		TPtrC name = item->SettingName();
+		if (name.Compare(aItemTitle) == 0)
+			{
+			break;
+			}
+		item = NULL;
+		}
+
+	return item;
+	}
+
+CDirectPrintBearerMgr* CDirectPrintPrinterSettingView::GetBearerMgr()
+	{
+	return (static_cast<CDirectPrintAppAppUi*>(AppUi()))->BearerMgr();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/ui/src/directprintviewbase.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <aknviewappui.h>
+#include <barsread.h>
+#include <akntitle.h>
+
+#include "directprintviewbase.h"
+#include "directprintappappui.h"
+#include "directprintappdocument.h"
+#include "directprintmodel.h"
+#include "directprintuipluginmgr.h"
+#include "directprintengine.h"
+
+CDirectPrintViewBase::CDirectPrintViewBase()
+	{
+	}
+
+CDirectPrintViewBase::~CDirectPrintViewBase()
+	{
+	}
+
+void CDirectPrintViewBase::ConstructL()
+	{
+	}
+
+TUid CDirectPrintViewBase::Id() const
+	{
+	return iViewId;
+	}
+
+void CDirectPrintViewBase::HandleListIndexL(TInt /*aIndex*/)
+	{
+	}
+
+void CDirectPrintViewBase::HandleEditItemL(TInt /*aIndex*/, TBool /*aChanged*/)
+	{
+	}
+
+void CDirectPrintViewBase::DoActivateL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
+	{
+	}
+
+void CDirectPrintViewBase::DoDeactivate()
+	{
+	}
+
+void CDirectPrintViewBase::SetActiveTitleL(TInt aTitleResId)
+	{
+	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+		StatusPane()->PaneCapabilities( titlePaneUid );
+	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+		{
+		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+			StatusPane()->ControlL( titlePaneUid ) );
+		TResourceReader reader;
+		iEikonEnv->CreateResourceReaderLC( reader, aTitleResId );
+		title->SetFromResourceL( reader );
+		CleanupStack::PopAndDestroy(); // reader internal state
+		}
+	}
+
+CDirectPrintModel& CDirectPrintViewBase::GetModel()
+	{
+	return (static_cast<CDirectPrintAppAppUi*>(AppUi()))->Doc()->Model();
+	}
+
+CDirectPrintUiPluginMgr& CDirectPrintViewBase::GetPluginMgr()
+	{
+	return (static_cast<CDirectPrintAppAppUi*>(AppUi()))->PluginMgr();
+	}
+
+CDirectPrintEngine& CDirectPrintViewBase::GetEngine()
+	{
+	return *((static_cast<CDirectPrintAppAppUi*>(AppUi()))->Engine());
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/bwins/directprintclientu.def	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,31 @@
+EXPORTS
+	??0RDirectPrintClient@@QAE@XZ @ 1 NONAME ; RDirectPrintClient::RDirectPrintClient(void)
+	?CancelCreateJob@RDirectPrintClient@@QBEHXZ @ 2 NONAME ; int RDirectPrintClient::CancelCreateJob(void) const
+	?CancelDiscovery@RDirectPrintClient@@QBEHXZ @ 3 NONAME ; int RDirectPrintClient::CancelDiscovery(void) const
+	?CancelPrintJob@RDirectPrintClient@@QBEHXZ @ 4 NONAME ; int RDirectPrintClient::CancelPrintJob(void) const
+	?CancelStartDiscovery@RDirectPrintClient@@QBEHXZ @ 5 NONAME ; int RDirectPrintClient::CancelStartDiscovery(void) const
+	?Close@RDirectPrintClient@@QAEXXZ @ 6 NONAME ; void RDirectPrintClient::Close(void)
+	?ConnectL@RDirectPrintClient@@QAEXXZ @ 7 NONAME ; void RDirectPrintClient::ConnectL(void)
+	?ContinueCreateJob@RDirectPrintClient@@QAEHAAVTDirectPrintJobGuardData@@AAVTRequestStatus@@@Z @ 8 NONAME ; int RDirectPrintClient::ContinueCreateJob(class TDirectPrintJobGuardData &, class TRequestStatus &)
+	?ContinuePrintJob@RDirectPrintClient@@QBEHXZ @ 9 NONAME ; int RDirectPrintClient::ContinuePrintJob(void) const
+	?CountConnections@RDirectPrintClient@@QBEHAAH@Z @ 10 NONAME ; int RDirectPrintClient::CountConnections(int &) const
+	?CreateJob@RDirectPrintClient@@QAEHHAAVTDirectPrintJobGuardData@@AAV?$RPointerArray@VTDesC16@@@@AAVTRequestStatus@@@Z @ 11 NONAME ; int RDirectPrintClient::CreateJob(int, class TDirectPrintJobGuardData &, class RPointerArray<class TDesC16> &, class TRequestStatus &)
+	?GetJobSetting@RDirectPrintClient@@QBEHHAAH@Z @ 12 NONAME ; int RDirectPrintClient::GetJobSetting(int, int &) const
+	?GetJobStatus@RDirectPrintClient@@QBEHXZ @ 13 NONAME ; int RDirectPrintClient::GetJobStatus(void) const
+	?GetJobTemplateIcon@RDirectPrintClient@@QBEHHAAH@Z @ 14 NONAME ; int RDirectPrintClient::GetJobTemplateIcon(int, int &) const
+	?GetNumPreviewPages@RDirectPrintClient@@QBEHXZ @ 15 NONAME ; int RDirectPrintClient::GetNumPreviewPages(void) const
+	?GetNumPrintPages@RDirectPrintClient@@QBEHXZ @ 16 NONAME ; int RDirectPrintClient::GetNumPrintPages(void) const
+	?GetPrinterCapability@RDirectPrintClient@@QBEHHHAAVTDirectPrintCapability@@@Z @ 17 NONAME ; int RDirectPrintClient::GetPrinterCapability(int, int, class TDirectPrintCapability &) const
+	?GetPrinterCapabilityIDs@RDirectPrintClient@@QBEHHAAV?$RArray@H@@@Z @ 18 NONAME ; int RDirectPrintClient::GetPrinterCapabilityIDs(int, class RArray<int> &) const
+	?GetPrinterStatus@RDirectPrintClient@@QBEHH@Z @ 19 NONAME ; int RDirectPrintClient::GetPrinterStatus(int) const
+	?GetProtocolNames@RDirectPrintClient@@QBEHAAV?$RArray@VTDirectPrintSelectItem@@@@@Z @ 20 NONAME ; int RDirectPrintClient::GetProtocolNames(class RArray<class TDirectPrintSelectItem> &) const
+	?IsPictBridgeMode@RDirectPrintClient@@QBEHXZ @ 21 NONAME ; int RDirectPrintClient::IsPictBridgeMode(void) const
+	?ReleaseEngine@RDirectPrintClient@@QBEHXZ @ 22 NONAME ; int RDirectPrintClient::ReleaseEngine(void) const
+	?RemoveCachedPrinter@RDirectPrintClient@@QBEHH@Z @ 23 NONAME ; int RDirectPrintClient::RemoveCachedPrinter(int) const
+	?ReserveEngine@RDirectPrintClient@@QBEHXZ @ 24 NONAME ; int RDirectPrintClient::ReserveEngine(void) const
+	?SetForeground@RDirectPrintClient@@QBEHH@Z @ 25 NONAME ; int RDirectPrintClient::SetForeground(int) const
+	?SetJobSetting@RDirectPrintClient@@QBEHHHAAH@Z @ 26 NONAME ; int RDirectPrintClient::SetJobSetting(int, int, int &) const
+	?SetNumberOfCopies@RDirectPrintClient@@QBEHABV?$RArray@H@@@Z @ 27 NONAME ; int RDirectPrintClient::SetNumberOfCopies(class RArray<int> const &) const
+	?SubmitPrintJob@RDirectPrintClient@@QBEHXZ @ 28 NONAME ; int RDirectPrintClient::SubmitPrintJob(void) const
+	?SupportedProtocols@RDirectPrintClient@@QBEHXZ @ 29 NONAME ; int RDirectPrintClient::SupportedProtocols(void) const
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/eabi/directprintclientu.def	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,32 @@
+EXPORTS
+	_ZN18RDirectPrintClient17ContinueCreateJobER24TDirectPrintJobGuardDataR14TRequestStatus @ 1 NONAME
+	_ZN18RDirectPrintClient5CloseEv @ 2 NONAME
+	_ZN18RDirectPrintClient8ConnectLEv @ 3 NONAME
+	_ZN18RDirectPrintClient9CreateJobEiR24TDirectPrintJobGuardDataR13RPointerArrayI7TDesC16ER14TRequestStatus @ 4 NONAME
+	_ZN18RDirectPrintClientC1Ev @ 5 NONAME
+	_ZN18RDirectPrintClientC2Ev @ 6 NONAME
+	_ZNK18RDirectPrintClient12GetJobStatusEv @ 7 NONAME
+	_ZNK18RDirectPrintClient13GetJobSettingEiRi @ 8 NONAME
+	_ZNK18RDirectPrintClient13ReleaseEngineEv @ 9 NONAME
+	_ZNK18RDirectPrintClient13ReserveEngineEv @ 10 NONAME
+	_ZNK18RDirectPrintClient13SetForegroundEi @ 11 NONAME
+	_ZNK18RDirectPrintClient13SetJobSettingEiiRi @ 12 NONAME
+	_ZNK18RDirectPrintClient14CancelPrintJobEv @ 13 NONAME
+	_ZNK18RDirectPrintClient14SubmitPrintJobEv @ 14 NONAME
+	_ZNK18RDirectPrintClient15CancelCreateJobEv @ 15 NONAME
+	_ZNK18RDirectPrintClient15CancelDiscoveryEv @ 16 NONAME
+	_ZNK18RDirectPrintClient16ContinuePrintJobEv @ 17 NONAME
+	_ZNK18RDirectPrintClient16CountConnectionsERi @ 18 NONAME
+	_ZNK18RDirectPrintClient16GetNumPrintPagesEv @ 19 NONAME
+	_ZNK18RDirectPrintClient16GetPrinterStatusEi @ 20 NONAME
+	_ZNK18RDirectPrintClient16GetProtocolNamesER6RArrayI22TDirectPrintSelectItemE @ 21 NONAME
+	_ZNK18RDirectPrintClient16IsPictBridgeModeEv @ 22 NONAME
+	_ZNK18RDirectPrintClient17SetNumberOfCopiesERK6RArrayIiE @ 23 NONAME
+	_ZNK18RDirectPrintClient18GetJobTemplateIconEiRi @ 24 NONAME
+	_ZNK18RDirectPrintClient18GetNumPreviewPagesEv @ 25 NONAME
+	_ZNK18RDirectPrintClient18SupportedProtocolsEv @ 26 NONAME
+	_ZNK18RDirectPrintClient19RemoveCachedPrinterEi @ 27 NONAME
+	_ZNK18RDirectPrintClient20CancelStartDiscoveryEv @ 28 NONAME
+	_ZNK18RDirectPrintClient20GetPrinterCapabilityEiiR22TDirectPrintCapability @ 29 NONAME
+	_ZNK18RDirectPrintClient23GetPrinterCapabilityIDsEiR6RArrayIiE @ 30 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/group/bld.inf	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+../inc/directprintclient.h    |../../inc/directprintclient.h
+
+//../rom/directprintserver.iby 	CORE_APP_LAYER_IBY_EXPORT_PATH( directprintserver.iby )
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+PRJ_MMPFILES
+directprintclient.mmp
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/group/directprintclient.mmp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+
+#include "../../inc/logdef.h"
+
+deffile directprintclient.def
+
+TARGET          directprintclient.dll
+TARGETTYPE      dll
+CAPABILITY 		ALL -TCB
+UID             0x1000008D 0x2002BB2B
+
+APP_LAYER_SYSTEMINCLUDE	
+
+USERINCLUDE     . ../inc 
+USERINCLUDE		../../ImagePrintLibrary/inc
+USERINCLUDE     ../../inc
+
+SOURCEPATH      ../src
+
+SOURCE          directprintclient.cpp
+//SOURCE			cidleguard.cpp
+//SOURCE			cdiscoveryguard.cpp
+//SOURCE			cjobguard.cpp
+
+STATICLIBRARY   clog.lib
+LIBRARY			flogger.lib
+
+LIBRARY       	euser.lib
+
+// End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/inc/directprintclient.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,315 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef RDIRECTPRINTCLIENT_H
+#define RDIRECTPRINTCLIENT_H
+
+#include <e32std.h>
+
+#include "directprintselectitem.h"
+
+class TDirectPrintCapability;
+//class TIdleGuardData;
+//class TDiscoveryGuardData;
+class TDirectPrintJobGuardData;
+
+class RDirectPrintClient : public RSessionBase
+	{
+	public:
+
+		/**
+         *	Constructor      
+         */
+		IMPORT_C RDirectPrintClient();
+
+		/**
+         *	Connect to the DirectPrint server
+		 *
+		 *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C void ConnectL();
+
+		/**
+         *	Close the session         
+         */
+		IMPORT_C void Close();
+
+		/**
+         *	Count connections to the server ( all clients in all prosesses )
+         *	
+		 *	@param aConnections holder for connnections count 
+         *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C TInt CountConnections( TInt& aConnections ) const;
+		
+		/**    
+		 *	Inform server about foreground/background state of the client
+		 *
+		 *	@param aFg foreground/background flag
+         *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C TInt SetForeground( TInt aFg ) const;
+	
+		
+		/**
+         *	Reserves DirectPrint engine for this client
+         *	
+         *  @return KErrNone if successful, KErrInUse if used by another client
+         */
+		IMPORT_C TInt ReserveEngine() const;
+
+		/**
+         *	Releases DirectPrint engine
+         *	
+         *  @return KErrNone if successful, KErrInUse if used by another client 
+         */
+		IMPORT_C TInt ReleaseEngine() const;
+		
+		/**
+         *	Get protocols supported by DirectPrint engine
+         *	
+         *  @return OR:ed protocols or KErrInUse if used by another client 
+         */
+		IMPORT_C TInt SupportedProtocols() const;				
+		
+		/**
+		 *	Gets the number of pages to be printed
+		 *
+		 *	@return Number of pages to print or KErrInUse if used by another client  
+		 */
+		IMPORT_C TInt GetNumPrintPages() const;
+		
+		/**
+		 *	Gets the status of the printing job created
+		 *
+		 *	@return Printing job status or KErrInUse if used by another client
+		 */
+		IMPORT_C TInt GetJobStatus() const;
+		
+		/**
+		 *	Gets the status of the printer
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterStatus( TInt aPrinterID ) const;
+		
+		/**
+		 *	Cancel discovery
+		 *
+		 *	@return KErrNone or KErrInUse if used by another client
+		 */
+		IMPORT_C TInt CancelDiscovery() const;
+		
+		/**
+		 *	Submits a print job already created. The actual job execution is asynchronous so this 
+		 *	function returns immediately. If successful, notification of job status and job 
+		 *	completion is received by the client through the MPrintEventObserver.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SubmitPrintJob() const;
+		
+		/**
+		 *	Cancels the print job. This is an asynchronous command. MPrintEventObserver::PrintJobProgressEvent 
+		 *	will be called with the status of TPrintJobProgressEventStatus::EDone when the cancellation 
+		 *	is completed. The notification can potentially be received by the client before 
+		 *	this command returns to the client.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelPrintJob() const;
+		
+		/**
+		 *	Continues printing and / or submitting a print job.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt ContinuePrintJob() const;
+		
+		/**
+		 *	Removes a specified cached printer.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to remove.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt RemoveCachedPrinter( TInt aPrinterID ) const;
+		
+		/**
+		 *	Gets the icon representing a given layout or template.
+		 *
+		 *	@param aTemplateID ID of the template / layout of interest.
+		 *	@param aFbsBitmapHandle Handle to the appropriate bitmap.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetJobTemplateIcon( TInt aTemplateID, TInt& aFbsBitmapHandle ) const;
+		
+		/**
+		 *	Gets the number of pages in the preview.
+		 *
+		 *	@return Number of pages in the preview. 
+		 */
+		IMPORT_C TInt GetNumPreviewPages() const;
+		
+		/**
+		 *	Sets a print job setting.
+		 *
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aValue New capability value.
+		 *	@param aAffectedCapability ID of any affected capability.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SetJobSetting( TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability ) const;
+		
+		/**
+		 *	Gets a setting configured for the created print job.
+		 *
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aValue Capability value.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetJobSetting( TInt aCapabilityID, TInt& aValue ) const;
+		
+		/**
+		 *	Gets the detail of a certain capability of a certain printer.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aCapability Capability information.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterCapability(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability) const;
+		
+		/**
+		 *	Gets the IDs of the capabilities supported by the printer specified.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *	@param aCapabilityIDs Array containing the ID's of the capabilities of the specified printer.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterCapabilityIDs( TInt aPrinterID, RArray<TInt>& aCapabilityIDs ) const;
+		
+		/**
+		 *  Registers the IdleObserver to send idle event notifications. Asynchronous function.
+		 *
+		 *  @param aData place holder for idle event. On function completion contains idle event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt RegisterIdleObserver( TIdleGuardData& aData, TRequestStatus& aStatus );
+		
+		/**
+		 *  Cancel registering idle observer
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt CancelRegisterIdleObserver() const;
+		
+		/**
+		 *  Start discovery and set request for discovery event. Asynchronous function.
+		 *
+		 *  @param aData place holder for discovery event. On function completion contains discovery event data.
+		 *	@param aProtocols OR:ed protocol ids
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt StartDiscovery( TDiscoveryGuardData& aData, TUint aProtocols, TRequestStatus& aStatus );
+		
+		/**
+		 *  Set next request for discovery event. Asynchronous function.
+		 *
+		 *  @param aData place holder for discovery event. On function completion contains discovery event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt ContinueDiscovery( TDiscoveryGuardData& aData, TRequestStatus& aStatus );
+
+		/**
+		 *  Create print job and set request for print job event. Asynchronous function.
+		 *
+		 *	@param aPrinterID printer id
+		 *  @param aData place holder for print job event. On function completion contains print job event data.
+		 *	@param aImages array of image file names
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CreateJob( TInt aPrinterID, TDirectPrintJobGuardData& aData, RPointerArray<TDesC>& aImages, TRequestStatus& aStatus );
+		
+		/**
+		 *  Set next request for print job event. Asynchronous function.
+		 *
+		 *  @param aData place holder for print job event. On function completion contains print job event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt ContinueCreateJob( TDirectPrintJobGuardData& aData, TRequestStatus& aStatus );
+		
+		/**
+		 *  Cancel starting discovery
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelStartDiscovery() const;
+		
+		/**
+		 *  Cancel creating print job
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelCreateJob() const;
+
+		/**
+		 *	PictBridge USB mode checker
+		 *
+		 *	@return TInt value more than 0, if PictBridge USB mode is on; 0 if off; negative value if error
+		 */
+		IMPORT_C TInt IsPictBridgeMode() const;
+		
+		/**
+		 *  Set number of copies
+		 *
+		 *  @param aArray array of number of copies elements. Each array element corresponds to the array
+		 *		of image file names of created print job
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SetNumberOfCopies( const RArray<TInt>& aArray ) const;
+
+		IMPORT_C TInt GetProtocolNames(RSelectItemArray& aNames) const;
+
+	public:
+
+		/**
+		 *	Version getter
+		 *
+		 *	@return version of the client
+		 */
+		TVersion Version() const;
+
+	private:
+		
+		TPtr8 iDicsoveryDataPtr;
+		TPtr8 iIdleDataPtr;
+		TPtr8 iJobDataPtr;
+		TDirectPrintCapability* iCapability;
+		TPtr8 iNameDataPtr;
+	};
+	
+	
+#endif // RDIRECTPRINTCLIENT_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintClient/src/directprintclient.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,577 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <e32svr.h>
+#include <e32math.h>
+
+#include "directprintclient.h"
+#include "directprintclientserver.h"
+#include "directprintcapability.h"
+#include "clog.h"
+#include "directprintjobguarddata.h"
+
+namespace
+	{	
+	// Server startup code
+	TInt StartServer()
+		{
+		// EPOC and EKA2 is easy, we just create a new server process. Simultaneous
+		// launching of two such processes should be detected when the second one
+		// attempts to create the server object, failing with KErrAlreadyExists.
+		RProcess server;
+		TInt r = server.Create( KDirectPrintServerImg, KNullDesC );
+
+		if( r != KErrNone )
+			return r;
+		TRequestStatus stat;
+		server.Rendezvous(stat);
+		if (stat!=KRequestPending)
+			server.Kill(0);		// abort startup
+		else
+			server.Resume();	// logon OK - start the server
+		User::WaitForRequest(stat);		// wait for start or death
+		// we can't use the 'exit reason' if the server panicked as this
+		// is the panic 'reason' and may be '0' which cannot be distinguished
+		// from KErrNone
+		r=(server.ExitType()==EExitPanic) ? KErrGeneral : stat.Int();
+
+		server.Close();
+		return r;
+		}
+	}
+
+TVersion RDirectPrintClient::Version() const
+	{
+	return TVersion( KDirectPrintServerMajor, KDirectPrintServerMinor, KDirectPrintServerBuild );
+	}
+
+EXPORT_C RDirectPrintClient::RDirectPrintClient()
+	: RSessionBase()
+	, iDicsoveryDataPtr(NULL, 0, 0)
+	, iIdleDataPtr(NULL, 0, 0)
+	, iJobDataPtr(NULL, 0, 0)
+	, iNameDataPtr(NULL, 0, 0)
+    {
+    iCapability = NULL;
+    }
+
+EXPORT_C void RDirectPrintClient::ConnectL()
+	{
+	LOG1("RDirectPrintClient::Connect Handle(): %d", Handle());
+	// check against double-connect
+	if( Handle() != KNullHandle )
+		{
+		User::Leave(KErrAlreadyExists);
+		}
+
+	iCapability = new (ELeave) TDirectPrintCapability();
+
+	// create process
+	TInt err = StartServer();
+	if (err == KErrNone)
+		{
+		// create session
+		err = CreateSession( KDirectPrintServerName, Version() );
+		}
+	User::LeaveIfError(err);
+	}
+
+EXPORT_C void RDirectPrintClient::Close()
+	{
+	LOG("RDirectPrintClient::Close begin");
+	if( iCapability )
+		{		
+		delete iCapability;
+		iCapability = NULL;	
+		}	
+	RSessionBase::Close();
+	LOG("RDirectPrintClient::Close end");
+	}
+
+EXPORT_C TInt RDirectPrintClient::CountConnections( TInt& aConnections ) const
+	{
+	TPckg<TInt> connsBuf( aConnections );	
+	return SendReceive( ECountConnections, TIpcArgs( &connsBuf ) );
+	}
+
+EXPORT_C TInt RDirectPrintClient::SetForeground( TInt aFg ) const
+	{
+	return SendReceive( ESetForeground, TIpcArgs( aFg ) );
+	}
+
+EXPORT_C TInt RDirectPrintClient::ReserveEngine() const
+	{
+	return SendReceive( EReserveEngine );
+	}
+
+EXPORT_C TInt RDirectPrintClient::ReleaseEngine() const
+	{
+	return SendReceive( EReleaseEngine );
+	}
+
+EXPORT_C TInt RDirectPrintClient::SupportedProtocols() const
+	{
+	LOG("RDirectPrintClient::SupportedProtocols ESupportedProtocols");
+	TInt prots = SendReceive( ESupportedProtocols );
+	LOG1("RDirectPrintClient::SupportedProtocols end with: %d", prots);
+	return prots;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetNumPrintPages() const
+	{
+	LOG("RDirectPrintClient::GetNumPrintPages EGetNumPrintPages");
+	TInt pages = SendReceive( EGetNumPrintPages );
+	LOG1("RDirectPrintClient::GetNumPrintPages end with: %d", pages);
+	return pages;	
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetJobStatus() const
+	{
+	LOG("RDirectPrintClient::GetJobStatus EGetJobStatus");
+	TInt status = SendReceive( EGetJobStatus );
+	LOG1("RDirectPrintClient::GetJobStatus end with: %d", status);
+	return status;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetPrinterStatus( TInt aPrinterID ) const
+	{
+	LOG1("RDirectPrintClient::GetPrinterStatus EGetPrinterStatus aPrinterID: %d", aPrinterID);
+	TInt status = SendReceive( EGetPrinterStatus, TIpcArgs( aPrinterID ) );
+	LOG1("RDirectPrintClient::GetPrinterStatus end with: %d", status);	
+	return status;
+	}
+
+EXPORT_C TInt RDirectPrintClient::CancelDiscovery() const
+	{
+	LOG("RDirectPrintClient::CancelDiscovery ECancelDiscovery");
+	TInt err = SendReceive( ECancelDiscovery );
+	LOG1("RDirectPrintClient::CancelDiscovery end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::SubmitPrintJob() const
+	{
+	LOG("RDirectPrintClient::SubmitPrintJob ESubmitPrintJob");
+	TInt err = SendReceive( ESubmitPrintJob );
+	LOG1("RDirectPrintClient::SubmitPrintJob end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::CancelPrintJob() const
+	{
+	LOG("RDirectPrintClient::CancelPrintJob ECancelPrintJob");
+	TInt err = SendReceive( ECancelPrintJob );
+	LOG1("RDirectPrintClient::CancelPrintJob end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::ContinuePrintJob() const
+	{
+	LOG("RDirectPrintClient::ContinuePrintJob EContinuePrintJob");
+	TInt err = SendReceive( EContinuePrintJob );
+	LOG1("RDirectPrintClient::ContinuePrintJob end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::RemoveCachedPrinter( TInt aPrinterID ) const
+	{
+	LOG1("RDirectPrintClient::RemoveCachedPrinter ERemoveCachedPrinter aPrinterID: %d", aPrinterID);
+	TInt err = SendReceive( ERemoveCachedPrinter, TIpcArgs( aPrinterID ) );	
+	LOG1("RDirectPrintClient::RemoveCachedPrinter end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetJobTemplateIcon( TInt aTemplateID, TInt& aFbsBitmapHandle ) const
+	{
+	TPckg<TInt> handleBuf( aFbsBitmapHandle );
+	LOG1("RDirectPrintClient::GetJobTemplateIcon EGetJobTemplateIcon aTemplateID: %d", aTemplateID);
+	TInt err = SendReceive( EGetJobTemplateIcon, TIpcArgs( aTemplateID, &handleBuf ) );
+	LOG1("RDirectPrintClient::GetJobTemplateIcon aFbsBitmapHandle: %d", aFbsBitmapHandle);
+	LOG1("RDirectPrintClient::GetJobTemplateIcon end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetNumPreviewPages() const
+	{
+	LOG("RDirectPrintClient::GetNumPreviewPages EGetNumPreviewPages");
+	TInt pages = SendReceive( EGetNumPreviewPages );
+	LOG1("RDirectPrintClient::GetNumPreviewPages end with: %d", pages);	
+	return pages;
+	}
+
+EXPORT_C TInt RDirectPrintClient::SetJobSetting( TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability ) const
+	{
+	TPckg<TInt> capBuf( aAffectedCapability );
+	LOG1("RDirectPrintClient::SetJobSetting ESetJobSetting aCapabilityID: %d", aCapabilityID);
+	LOG1("RDirectPrintClient::SetJobSetting ESetJobSetting aValue: %d", aValue);
+	TInt err = SendReceive( ESetJobSetting, TIpcArgs( aCapabilityID, aValue, &capBuf ) );
+	LOG1("RDirectPrintClient::SetJobSetting aAffectedCapability: %d", aAffectedCapability);
+	LOG1("RDirectPrintClient::SetJobSetting end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetJobSetting( TInt aCapabilityID, TInt& aValue ) const
+	{
+	TPckg<TInt> valueBuf( aValue );
+	LOG1("RDirectPrintClient::GetJobSetting EGetJobSetting aCapabilityID: %d", aCapabilityID);
+	TInt err = SendReceive( EGetJobSetting, TIpcArgs( aCapabilityID, &valueBuf ) );
+	LOG1("RDirectPrintClient::GetJobSetting aValue: %d", aValue);
+	LOG1("RDirectPrintClient::GetJobSetting end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::GetPrinterCapability(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability) const
+	{
+	LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapability aPrinterID: %d", aPrinterID);
+	LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapability aCapabilityID: %d", aCapabilityID);
+	TInt err = SendReceive( EGetPrinterCapability, TIpcArgs( aPrinterID, aCapabilityID ) );
+	LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapability err: %d", err);
+
+	if( !err )
+		{
+		TInt capId;
+		TPckg<TInt> capIdBuf( capId );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapId");
+		err = SendReceive( EGetPrinterCapId, TIpcArgs( &capIdBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapId err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapId capId: %d", capId);
+		if( !err )
+			{
+			iCapability->iCapabilityID = capId;
+			}
+		}
+
+	if( !err )
+		{
+		TInt type;
+		TPckg<TInt> typeBuf( type );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapType");
+		err = SendReceive( EGetPrinterCapType, TIpcArgs( &typeBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapType err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapType type: %d", type);
+		if( !err )
+			{
+			iCapability->iType = static_cast<TDirectPrintCapability::ECapType>(type);
+			}
+		}
+
+	if( !err )
+		{
+		TInt def;
+		TPckg<TInt> defBuf( def );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapDef");
+		err = SendReceive( EGetPrinterCapDef, TIpcArgs( &defBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapDef err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapDef def: %d", def);
+		if( !err )
+			{
+			iCapability->iDefaultValue = def;
+			}
+		}
+
+	if( !err )
+		{
+		TInt low;
+		TPckg<TInt> lowBuf( low );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapLow");
+		err = SendReceive( EGetPrinterCapLow, TIpcArgs( &lowBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapLow err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapLow low: %d", low);
+		if( !err )
+			{
+			iCapability->iLow = low;
+			}
+		}
+
+	if( !err )
+		{
+		TInt high;
+		TPckg<TInt> highBuf( high );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapHigh");
+		err = SendReceive( EGetPrinterCapHigh, TIpcArgs( &highBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapHigh err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapHigh high: %d", high);
+		if( !err )
+			{
+			iCapability->iHigh = high;
+			}
+		}
+
+	if( !err )
+		{
+		TInt count;
+		TPckg<TInt> countBuf( count );
+		LOG("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnumCount");
+		err = SendReceive( EGetPrinterCapEnumCount, TIpcArgs( &countBuf ) );
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnumCount err: %d", err);
+		LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnumCount count: %d", count);
+		
+		if( !err )
+			{
+			iCapability->iEnumCount = count;
+			for( TInt i = 0; i < count && ! err; i++ )
+				{
+				TInt value;
+				TPckg<TInt> valueBuf( value );
+				LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnum i: %d",i);
+				TInt err = SendReceive( EGetPrinterCapEnum, TIpcArgs( i, &valueBuf ) );
+				LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnum err: %d", err);
+				LOG1("RDirectPrintClient::GetPrinterCapability EGetPrinterCapEnum value: %d", value);
+				
+				if( !err )
+					{
+					iCapability->iEnumCodes[i] = value;
+					}
+				}
+			}
+		}
+
+	if( !err )
+		{
+		aCapability	= *iCapability;
+		}
+
+	LOG1("RDirectPrintClient::GetPrinterCapability end with: %d", err);
+	return err;
+	}
+
+
+EXPORT_C TInt RDirectPrintClient::GetPrinterCapabilityIDs( TInt aPrinterID, RArray<TInt>& aCapabilityIDs ) const
+	{
+	TInt count;
+	TPckg<TInt> countBuf( count );
+	
+	LOG1("RDirectPrintClient::GetPrinterCapabilityIDs EGetPrinterCapabilityIDsCount aPrinterID: %d", aPrinterID);
+	TInt err = SendReceive( EGetPrinterCapabilityIDsCount, TIpcArgs( aPrinterID, &countBuf ) );
+	LOG1("RDirectPrintClient::GetPrinterCapabilityIDs EGetPrinterCapabilityIDsCount err: %d", err);
+	if( !err )
+		{
+		LOG1("RDirectPrintClient::GetPrinterCapabilityIDs EGetPrinterCapabilityIDsCount count: %d", count);
+		for( TInt i = 0; i < count && !err; i++ )
+			{
+			TInt capability;
+			TPckg<TInt> capBuf( capability );
+			LOG1("RDirectPrintClient::GetPrinterCapabilityIDs EGetPrinterCapabilityID i: %d", i);
+			err = SendReceive( EGetPrinterCapabilityID, TIpcArgs( i, &capBuf ) );
+			LOG1("RDirectPrintClient::GetPrinterCapabilityIDs EGetPrinterCapabilityID err: %d", err);
+			if( !err )
+				{
+				LOG1("RDirectPrintClient::GetPrinterCapabilityIDs capability id: %d", capability);
+				err = aCapabilityIDs.Append( capability );
+				LOG1("RDirectPrintClient::GetPrinterCapabilityIDs append err: %d", err);
+				}
+			}
+		}
+	
+	LOG1("RDirectPrintClient::GetPrinterCapabilityIDs end with: %d", err);
+	return err;
+	}
+/*
+EXPORT_C TInt RDirectPrintClient::RegisterIdleObserver( TIdleGuardData& aData, TRequestStatus& aStatus )
+	{ 
+	LOG("RDirectPrintClient::RegisterIdleObserver EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::RegisterIdleObserver EReserveEngine err: %d", err);
+	if( !err )
+		{
+		LOG("RDirectPrintClient::RegisterIdleObserver ERegisterIdleObserver");
+		iIdleDataPtr.Set(reinterpret_cast<TUint8*>(&aData), sizeof(aData), sizeof(aData));
+		SendReceive( ERegisterIdleObserver, TIpcArgs( &iIdleDataPtr ), aStatus );
+		}
+	LOG1("RDirectPrintClient::RegisterIdleObserver end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::CancelRegisterIdleObserver() const 
+	{
+	LOG("RDirectPrintClient::CancelRegisterIdleObserver ECancelRegisterIdleObserver");
+	TInt err = SendReceive( EReleaseEngine );
+	LOG1("RDirectPrintClient::RegisterIdleObserver EReleaseEngine err: %d", err);
+
+	err = SendReceive( ECancelRegisterIdleObserver );
+	LOG1("RDirectPrintClient::RegisterIdleObserver ECancelRegisterIdleObserver err: %d", err);
+	
+	LOG1("RDirectPrintClient::CancelRegisterIdleObserver end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::StartDiscovery( TDiscoveryGuardData& aData, TUint aProtocols, TRequestStatus& aStatus )
+	{ 
+	LOG("RDirectPrintClient::StartDiscovery EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::StartDiscovery EReserveEngine err: %d", err);
+	if( !err )
+		{ 
+		LOG1("RDirectPrintClient::StartDiscovery EStartDiscovery aProtocols: %d", aProtocols);
+		err = SendReceive( EStartDiscovery, TIpcArgs( aProtocols ) );
+		LOG1("RDirectPrintClient::StartDiscovery EStartDiscovery err: %d", err);
+		}
+	if( !err )
+		{
+		LOG("RDirectPrintClient::StartDiscovery EContinueDiscovery");
+		iDicsoveryDataPtr.Set(reinterpret_cast<TUint8*>(&aData), sizeof(aData), sizeof(aData));
+		SendReceive( EContinueDiscovery, TIpcArgs( &iDicsoveryDataPtr ), aStatus );
+		}
+	LOG1("RDirectPrintClient::StartDiscovery end with: %d", err);
+	return err;
+	}
+
+EXPORT_C TInt RDirectPrintClient::ContinueDiscovery( TDiscoveryGuardData& aData, TRequestStatus& aStatus )
+	{
+	LOG("RDirectPrintClient::ContinueDiscovery EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::ContinueDiscovery EReserveEngine err: %d", err);
+    if( !err )
+    	{
+    	LOG("RDirectPrintClient::ContinueDiscovery EContinueDiscovery");
+	    iDicsoveryDataPtr.Set(reinterpret_cast<TUint8*>(&aData), sizeof(aData), sizeof(aData));
+	    SendReceive( EContinueDiscovery, TIpcArgs( &iDicsoveryDataPtr ), aStatus );
+    	}
+    LOG1("RDirectPrintClient::ContinueDiscovery end with: %d", err);
+    return err;
+	}
+*/
+EXPORT_C TInt RDirectPrintClient::CreateJob( TInt aPrinterID, TDirectPrintJobGuardData& aData, RPointerArray<TDesC>& aImages, TRequestStatus& aStatus )
+	{
+	LOG("RDirectPrintClient::CreateJob EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::CreateJob EReserveEngine err: %d", err);
+	if( !err )
+		{
+		TInt count = aImages.Count();
+		LOG1("RDirectPrintClient::CreateJob aImages.Count(): %d", aImages.Count());
+		for( TInt i = 0; i < count && !err; i++ )
+			{
+			LOG("RDirectPrintClient::CreateJob EPrepareJob");
+			err = SendReceive( EPrepareJob, TIpcArgs( aImages[i] ) );
+			LOG1("RDirectPrintClient::CreateJob EPrepareJob err: %d", err);	
+			}
+		}
+    if( !err )
+    	{
+    	LOG("RDirectPrintClient::CreateJob ECreateJob");
+    	err = SendReceive( ECreateJob, TIpcArgs( aPrinterID ) );
+    	LOG1("RDirectPrintClient::CreateJob ECreateJob err: %d", err);
+    	}
+    if( !err )
+    	{ 
+    	LOG("RDirectPrintClient::CreateJob EContinueCreateJob");
+    	iJobDataPtr.Set(reinterpret_cast<TUint8*>(&aData), sizeof(aData), sizeof(aData));
+	    SendReceive( EContinueCreateJob, TIpcArgs( &iJobDataPtr ), aStatus );
+    	}
+    LOG1("RDirectPrintClient::CreateJob end with: %d", err);
+    return err;
+	}		
+        
+EXPORT_C TInt RDirectPrintClient::ContinueCreateJob( TDirectPrintJobGuardData& aData, TRequestStatus& aStatus )
+	{
+	LOG("RDirectPrintClient::ContinueCreateJob EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::ContinueCreateJob EReserveEngine err: %d", err);
+    if( !err )
+    	{  
+    	LOG("RDirectPrintClient::ContinueCreateJob EContinueCreateJob");  	    	
+    	iJobDataPtr.Set(reinterpret_cast<TUint8*>(&aData), sizeof(aData), sizeof(aData));
+	    SendReceive( EContinueCreateJob, TIpcArgs( &iJobDataPtr ), aStatus );
+    	}
+    LOG1("RDirectPrintClient::ContinueCreateJob end with: %d", err);
+    return err;
+	}
+	
+EXPORT_C TInt RDirectPrintClient::CancelStartDiscovery() const
+	{
+	LOG("RDirectPrintClient::CancelStartDiscovery ECancelStartDiscovery");
+	TInt err = SendReceive( ECancelStartDiscovery );
+	LOG1("RDirectPrintClient::CancelStartDiscovery end with: %d", err);
+	return err;	
+	}	
+		
+EXPORT_C TInt RDirectPrintClient::CancelCreateJob() const
+	{
+	LOG("RDirectPrintClient::CancelCreateJob ECancelCreateJob");
+	TInt err = SendReceive( ECancelCreateJob );
+	LOG1("RDirectPrintClient::CancelCreateJob end with: %d", err);
+	return err;	
+	}
+	
+EXPORT_C TInt RDirectPrintClient::IsPictBridgeMode() const
+	{
+	LOG("RDirectPrintClient::IsPictBridgeMode EIsPictBridgeMode");
+#ifdef __WINS__
+	TInt err( KErrNotFound );
+#else
+	TInt err = SendReceive( EIsPictBridgeMode );
+#endif	
+	LOG1("RDirectPrintClient::IsPictBridgeMode end with: %d", err);
+	return err;	
+	}
+	
+EXPORT_C TInt RDirectPrintClient::SetNumberOfCopies( const RArray<TInt>& aArray ) const
+	{
+	LOG("RDirectPrintClient::SetNumberOfCopies EReserveEngine");
+	TInt err = SendReceive( EReserveEngine );
+	LOG1("RDirectPrintClient::SetNumberOfCopies EReserveEngine err: %d", err);
+    if( !err )
+    	{
+    	TInt count = aArray.Count();
+    	LOG1("RDirectPrintClient::SetNumberOfCopies count: %d", count);
+    	LOG("RDirectPrintClient::SetNumberOfCopies ESetNumberOfCopiesCount");
+		err = SendReceive( ESetNumberOfCopiesCount, TIpcArgs( count ) );
+		LOG1("RDirectPrintClient::SetNumberOfCopies ESetNumberOfCopiesCount err: %d", err);
+    	for( TInt i = 0; i < count && !err; i++ )
+			{
+			LOG1("RDirectPrintClient::SetNumberOfCopies i: %d", i);
+			LOG("RDirectPrintClient::SetNumberOfCopies ESetNumberOfCopies");
+			err = SendReceive( ESetNumberOfCopies, TIpcArgs( aArray[i] ) );
+			LOG1("RDirectPrintClient::SetNumberOfCopies ESetNumberOfCopies err: %d", err);
+			}
+    	}
+	LOG1("RDirectPrintClient::SetNumberOfCopies end with: %d", err);
+	return err;
+	}
+	
+EXPORT_C TInt RDirectPrintClient::GetProtocolNames(RSelectItemArray& aNames) const
+	{
+	//TInt err = SendReceive( EReserveEngine );
+	TInt count;
+	TPckg<TInt> countBuf( count );
+
+	TInt err = SendReceive( EGetProtocolNamesCount, TIpcArgs( &countBuf ) );
+
+	if( !err )
+		{
+		aNames.Reset();
+
+		for( TInt i = 0; i < count && !err; i++ )
+			{
+			TDirectPrintSelectItem item;
+			//iNameDataPtr.Set(reinterpret_cast<TUint8*>(&item), sizeof(item), sizeof(item));
+			TPtr8 ptr(reinterpret_cast<TUint8*>(&item), sizeof(item), sizeof(item));
+			//err = SendReceive( EGetProtocolName, TIpcArgs( i, &iNameDataPtr ) );
+			err = SendReceive( EGetProtocolName, TIpcArgs( i, &ptr ) );
+			if( !err )
+				{
+				aNames.Append(item);
+				}
+			}
+		}
+
+	return err;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/group/bld.inf	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_EXPORTS
+
+//../rom/directprintserver.iby 	CORE_APP_LAYER_IBY_EXPORT_PATH( directprintserver.iby )
+
+../inc/directprintclientserver.h    |../../inc/directprintclientserver.h
+../inc/directprintjobguarddata.h    |../../inc/directprintjobguarddata.h
+../inc/directprintserveruid.h       |../../inc/directprintserveruid.h
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+
+PRJ_MMPFILES
+directprintserver.mmp
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/group/directprintserver.mmp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+
+#include "../../inc/logdef.h"
+#include "../../inc/directprintserveruid.h"
+
+TARGET        	directprintserver.exe
+TARGETTYPE 		exe
+CAPABILITY		ALL -TCB
+
+UID           	0x1000008D KDIRECTPRINTSERVERUID3
+EPOCSTACKSIZE	0x5000
+EPOCHEAPSIZE	0x1000 0x1000000
+
+APP_LAYER_SYSTEMINCLUDE	 
+
+USERINCLUDE     . ../inc
+USERINCLUDE		../../ImagePrintLibrary/inc
+USERINCLUDE     ../../inc
+
+SOURCEPATH      ../src
+
+SOURCE          main.cpp
+SOURCE          directprintserver.cpp
+SOURCE          directprintsession.cpp
+SOURCE			directprintbody.cpp
+SOURCE			directprintscheduler.cpp
+SOURCE 			directprintprotocolsloader.cpp
+SOURCE			directprintrsimageparser.cpp
+SOURCE			directprintserverjobguard.cpp
+SOURCE			directprintnumofcopies.cpp
+SOURCE			directprintmessage.cpp
+
+SOURCE			directprintprotocolinfo.cpp
+
+STATICLIBRARY   clog.lib
+LIBRARY	flogger.lib
+
+LIBRARY       	euser.lib
+LIBRARY 		efsrv.lib
+LIBRARY			fbscli.lib
+LIBRARY         ecom.lib 
+LIBRARY	    	centralrepository.lib
+
+#ifdef _DIRECTPRINT_USE_USB
+LIBRARY 		usbman.lib
+LIBRARY         usbwatcher.lib
+#endif // _DIRECTPRINT_USE_USB
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintbody.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintBody class definition.
+*
+*/
+
+
+// Protection against nested includes
+#ifndef CDIRECTPRINTBODY_H
+#define CDIRECTPRINTBODY_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "imageprint.h"
+#include "directprintprotocolsloader.h"
+#include "directprintscheduler.h"
+#include "mprotprintingdevice.h"
+
+// Forward declarations
+class TDpMessage;
+
+/**
+ *
+ *	This class is in charge of discoverying devices across the protocols available, of creating
+ *	a print job in the right printer and right protocol, etc. It can be considered a controller. 
+ *	Implements the MProtPrintingDevice observers (MProtDiscoveryObserver, MProtPrintEventObserver) so it can act
+ *	accordingly when the protocols report or need something.
+ */
+class CDirectPrintBody : public CBase, public MProtDiscoveryObserver, public MProtPrintEventObserver, public MProtIdleObserver
+	{
+	public:
+	
+		/**
+         *	2-phase constructor
+         *
+         *	@return new object      
+         */
+		static CDirectPrintBody* NewL();
+		
+		/**
+         *	Destructor         
+         */
+		~CDirectPrintBody();
+
+		/**
+         *	Start discovery for one or several protocols
+         *
+         *	@param aObserver observer for notifications about discovery events
+         *	@param aProtocols OR:ed protocol ids
+         *	@return error code     
+         */
+		TInt StartDiscovery(MPrinterDiscoveryObserver& aObserver, TUint aProtocols = 0);
+		
+		/**
+         *	Cancel discovery        
+         */
+		void CancelDiscovery();
+		
+		/**
+         *	Creates print job
+         *
+         *	@param aPrinterID printer id
+         *	@param aImages array of image file names to be printed
+         *	@param aObserver observer for notifications about print job events
+         *	@return error code     
+         */
+		TInt CreatePrintJobL(TInt aPrinterID, RPointerArray<TDesC>& aImages, MPrintEventObserver& aObserver);
+		
+		/**
+         *	Start actual printing of previously created print job
+         */
+		void SubmitPrintJobL();
+		
+		/**
+         *	Cancel print job
+         *
+         *	@return error code      
+         */
+		TInt CancelPrintJob();
+		
+		/**
+         *	Continue print job
+         *
+         *	@return error code      
+         */
+		TInt ContinuePrintJobL();
+		
+		/**
+         *	Print pages amount getter
+         *
+         *	@return amount of print pages with current settings for current print job    
+         */
+		TInt GetNumPrintPages();
+		
+		/**
+         *	Job status getter
+         *
+         *	@return job status code    
+         */
+		TInt GetJobStatus();
+		
+		/**
+         *	Printer status getter
+         *
+         *	@param aPrinterID printer id
+         *	@return printer status code    
+         */
+		TInt GetPrinterStatus(TInt aPrinterID);
+		
+		/**
+         *	Printer capability id getter
+         *
+         *	@param aPrinterID printer id
+         *	@param aCapabilityIDs place holder for capability ids supported by printer
+         *	@return error code    
+         */
+		TInt GetPrinterCapabilityIDsL(TInt aPrinterID, RArray<TInt>& aCapabilityIDs);
+		
+		/**
+         *	Printer capability getter
+         *
+         *	@param aPrinterID printer id
+         *	@param aCapabilityID capability id
+         *	@param aCapability place holder for capability
+         *	@return error code    
+         */
+		TInt GetPrinterCapabilityL(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability);
+		
+		/**
+         *	Printer setting getter
+         *
+         *	@param aCapabilityID capability id
+         *	@param aValue place holder for capability value
+         *	@return error code    
+         */
+		TInt GetJobSetting(TInt aCapabilityID, TInt& aValue);
+		
+		/**
+         *	Printer setting setter
+         *
+         *	@param aCapabilityID capability id
+         *	@param aValue capability value
+         *	@param aAffectedCapability affected capability id
+         *	@return error code    
+         */
+		TInt SetJobSettingL(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability);
+		
+		/**
+         *	Preview pages amount getter for current protocol
+         *
+         *	@return preview pages amount      
+         */
+		TInt GetNumPreviewPages();
+		
+		/**
+         *	Template icon getter
+         *
+         *	@param aTemplateID template id
+         *	@param aFbsBitmapHandle place holder for template bitmap handle
+         *	@return error code    
+         */
+		TInt GetJobTemplateIconL(TInt aTemplateID, TInt& aFbsBitmapHandle);
+		
+		/**
+         *Creates a preview image
+         *
+         *	@param aPageNumber Page number to create preview image of
+         *	@return error code    
+         */
+		TInt CreatePreviewImage(TInt aPageNumber);
+		
+		/**
+         *	Remove cached printer
+         *
+         *	@param aPrinterID printer id
+         *	@return error code    
+         */
+		TInt RemoveCachedPrinterL(TInt aPrinterID);
+		
+		/**
+         *	Supported protocols getter
+         *
+         *	@return OR:ed protocol ids      
+         */
+		TUint SupportedProtocols();
+
+		/**
+         *	Register observer for idle events receiving
+         *
+         *	@param aObserver observer      
+         */
+		void RegisterIdleObserver(MIdleObserver* aObserver);
+
+		/**
+         *	Number of copies setter for current print job
+         *
+         *	@param aNumsOfCopies number of copies array
+         *	@param aErr place holder for error code      
+         */
+		void SetNumsOfCopiesL(const RArray<TInt>& aNumsOfCopies, TInt& aErr);
+
+		/**
+         *	Handle session disconnection
+         *
+         *	@param aIdleObserver idle observer object of that session
+         *	@param aDiscoveryObserver discovery observer object of that session     
+         *	@param aEventObserver print job observer object of that session
+         */
+		void HandleSessionDisconnect( const MIdleObserver* aIdleObserver,
+									const MPrinterDiscoveryObserver* aDiscoveryObserver,
+									const MPrintEventObserver* aEventObserver );
+
+		/**
+         *	Number of protocols getter
+         *
+         *	@return number of protocols
+         */
+		TInt ProtocolCount();
+
+		/**
+         *	Protocol name getter
+         *
+         *	@param aMessage message completed upon event arrival
+         *	@return error code
+         */
+		TInt GetProtocolNameL(TDpMessage& aMessage);
+
+
+	private: // from MProtDiscoveryObserver
+		void FoundDeviceL(TPrinter& aDeviceInfo);
+		void DiscoveryStatusL(TInt aStatus, TInt aErrorCode, TInt aErrorStringCode);
+		void RemoveDeviceL(TPrinter& aDeviceInfo);
+
+	private: // from MProtPrintEventObserver
+		void PrintJobProgressEvent(TInt aStatus, TInt aPercent, TInt aJobStateCode);
+		void PrintJobErrorEvent(TInt aErrorCode, TInt aErrorStringCode);
+		void PrinterStatusEvent(TInt aErrorCode, TInt aErrorStringCode);
+		void PreviewImageEvent(TInt aFsBitmapHandle);
+		void ShowMessageL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		TBool AskYesNoQuestionL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		const TDesC& AskForInputL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+
+	private: // from MProtIdleObserver
+		void StatusEvent(const TEvent &aEvent, TInt aError, TInt aMsgCode);
+	
+	private:
+		CDirectPrintBody();
+		void ConstructL();
+		TInt FindInternalDeviceReference(TInt aExternalDeviceID, TInt& aInternalDeviceID, MProtPrintingDevice*& aProtToUse);
+		TInt ValidateImagesL(const RPointerArray<HBufC>& aImageList, TInt &aInvalidCount);
+		CDirectPrintScheduler& ActiveScheduler() const;
+		void TryNextDiscovery();
+		static TInt TryNextDiscoveryL(TAny* aObj);
+		void DoTryNextDiscoveryL();
+
+	private:
+		/// Class loader and manager.
+		CDirectPrintProtocolsLoader* iClassLoader;
+		/// Pointer to store the current protocol in use for discovery.
+		MProtPrintingDevice* iCurrentProtocol;
+		/// Pointer to store the current protocol in use for creating a print job.
+		MProtPrintingDevice* iCurrentPrintJobProtocol;
+		/// DirectPrint Observer.
+		MPrinterDiscoveryObserver* iPrinterDiscoveryObserver;
+		/// DirectPrint Observer.
+		MPrintEventObserver* iPrinterPrintEventObserver;
+		/// DirectPrint Idle Observer.
+		MIdleObserver* iPrinterIdleObserver;							
+		/// Used to store the requested protocols.
+		TUint iProtocolsRequested;
+		/// Array of the image filenames to print.
+		RPointerArray<HBufC> iImageFileNames;
+		/// Enables async discovery
+		CIdle* iIdleDiscovery;
+		
+		TBool iDiscoveryCancelled;
+	};
+
+#endif // CDIRECTPRINTBODY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintclientserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTCLIENTSERVER_H
+#define DIRECTPRINTCLIENTSERVER_H
+
+// System include files
+#include <e32std.h>
+
+// User include files
+#include "directprintserveruid.h"
+
+_LIT( KDirectPrintServerName, "directprintserver" );
+_LIT( KDirectPrintServerImg, "directprintserver" );		// EXE name
+
+const TInt KMaxDirectPrintMessage = 512;
+const TInt KDirectPrintServerMajor = 0;
+const TInt KDirectPrintServerMinor = 0;
+const TInt KDirectPrintServerBuild = 0;
+
+enum TDirectPrintMessages
+	{
+	ECountConnections = 0,
+	ESetForeground,
+	EReserveEngine,
+	EReleaseEngine,
+	ESupportedProtocols,
+	EGetNumPrintPages,
+	EGetJobStatus,
+	EGetPrinterStatus,
+	ECancelDiscovery,
+	ESubmitPrintJob,
+	ECancelPrintJob, // 10
+	EContinuePrintJob,
+	ERemoveCachedPrinter,
+	EGetJobTemplateIcon,
+	EGetNumPreviewPages,
+	ESetJobSetting,
+	EGetJobSetting,
+	EGetPrinterCapability,
+	EGetPrinterCapId,
+	EGetPrinterCapType,
+	EGetPrinterCapDef, // 20
+	EGetPrinterCapLow,
+	EGetPrinterCapHigh,
+	EGetPrinterCapEnumCount,
+	EGetPrinterCapEnum,
+	EGetPrinterCapabilityIDsCount,
+	EGetPrinterCapabilityID,
+	ERegisterIdleObserver,
+	ECancelRegisterIdleObserver,
+	EStartDiscovery,
+	EContinueDiscovery, // 30
+	EPrepareJob,
+	ECreateJob,
+	EContinueCreateJob,
+	ECancelStartDiscovery,
+	ECancelCreateJob,
+	EIsPictBridgeMode,
+	ESetNumberOfCopiesCount,
+	ESetNumberOfCopies, // 38
+	EGetProtocolNamesCount,
+	EGetProtocolName
+	};
+
+#endif// DIRECTPRINTCLIENTSERVER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintjobguarddata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTJOBGUARDDATA_H
+#define DIRECTPRINTJOBGUARDDATA_H
+
+// System includes
+#include <e32def.h>
+
+class TDirectPrintJobGuardData
+	{
+public:
+
+	enum TCallbackNum
+		{
+		EProgressEventCb = 0,
+		EErrorEventCb,
+		EStatusEventCb,
+		EImageEventCb
+		};
+
+public:
+
+	TInt iStatus;
+	TInt iPercentCompletion;
+	TInt iJobStateCode;
+	TInt iError;
+	TInt iErrorStringCode;
+	TInt iFsBitmapHandle;
+	TCallbackNum iCb;
+	};
+
+#endif // DIRECTPRINTJOBGUARDDATA_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintmessage.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef TMESSAGEWRP2_H
+#define TMESSAGEWRP2_H
+
+#include <e32base.h>
+
+class TDpMessage
+	{
+	public:
+	
+		/**
+		 *	Message wrapper constructor
+		 *
+		 *	@param aMessage message to be wrapped
+		 *	@param aConnected session connection flag		 
+		 */
+		TDpMessage( const RMessage2& aMessage, const TBool& aConnected );
+			
+	public:
+	
+		/**
+		 *	If session connected, write descriptor to the wrapped message
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	 
+		void WriteL(TInt aParam, const TDesC8 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	If session connected, complete the wrapped message
+		 *
+		 *	@param aReason completion code
+		 */
+		void Complete(TInt aReason) const;
+		
+		/**
+		 *	If session connected, gets the 1st message argument as an integer value
+		 *
+		 *	@return 1st message argument as an integer value
+		 */
+		TInt Int0() const;
+		
+		/**
+		 *	If session connected, gets the 2nd message argument as an integer value
+		 *
+		 *	@return 2nd message argument as an integer value
+		 */					
+		TInt Int1() const;
+		
+		/**
+		 *	If session connected, gets the length of a descriptor argument 
+		 *	in the client's process
+		 *
+		 *	@param aParam index value identifying the argument
+		 *	@return the length of the descriptor or error code
+		 */	
+		TInt GetDesLength(TInt aParam) const;
+		
+		/**
+		 *	If session connected, read data from the specified offset within 
+		 *	the 8-bit descriptor argument, into the specified target descriptor
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes target descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	 
+		void ReadL(TInt aParam, TDes8 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	If session connected, read data from the specified offset within 
+		 *	the 16-bit descriptor argument, into the specified target descriptor
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes target descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	
+		void ReadL(TInt aParam, TDes16 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	Panic the client thread
+		 *
+		 *	@param aCategory category descriptor
+		 *	@param aReason reason id
+		 */
+		void Panic(const TDesC &aCategory, TInt aReason) const;
+		
+		/**
+		 *	Gets the the number of the function requested by the client
+		 *
+		 *	@return the function number
+		 */
+		TInt Function() const;
+		
+		/**
+		 *	Sets the disposable state. Disposable means that the message needs not
+		 *	to be preserved
+		 *
+		 *	@param aDisposable disposable flag
+		 */
+		void SetDisposable( TBool aDisposable );
+		
+		/**
+		 *	Gets the disposable state
+		 *
+		 *	@return the disposable flag
+		 */
+		TBool Disposable() const;
+
+	private: // data
+		RMessage2 iMessage;
+		const TBool& iConnected;
+		TBool iDisposable;
+	};
+
+
+#endif // TMESSAGEWRP2_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintnumofcopies.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTNUMOFCOPIES_H
+#define DIRECTPRINTNUMOFCOPIES_H
+
+// System includes
+#include <e32base.h>
+
+class CDirectPrintNumOfCopies : public CBase
+	{
+	public:
+	
+		/**
+		 *	2-phase constructor
+		 *
+		 *	@return new object
+		 */
+		static CDirectPrintNumOfCopies* NewL();
+		
+		/**
+		 *	Destructor
+		 */
+		~CDirectPrintNumOfCopies();	
+
+	private:
+		CDirectPrintNumOfCopies();
+		void ConstructL();
+
+	public:
+	
+		/**
+		 *	Set the amount of coming array elements
+		 *
+		 *	@param aCount amount of coming array elements
+		 */	 
+		void Reset( TInt aCount );
+		
+		/**
+		 *	Append next element to the array
+		 *
+		 *	@param aNumOfCopies number of copies array element
+		 *	@param aFull place holder for value which indicates that
+		 *			all elements are added to the array
+		 */	
+		void AddNumOfCopyL( TInt aNumOfCopies, TBool& aFull );
+		
+		/**
+		 *	Number of copies array getter
+		 *
+		 *	@return number of copies array
+		 */
+		const RArray<TInt>& NumsOfCopies() const;					
+
+	private: // data
+		TInt iCount;
+		RArray<TInt> iNumsOfCopies;
+	};
+
+
+#endif // DIRECTPRINTNUMOFCOPIES_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintprotocolinfo.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTPROTOCOLINFO_H__
+#define __DIRECTPRINTPROTOCOLINFO_H__
+
+// System includes
+#include <e32base.h>
+#include <ecom/ImplementationInformation.h>
+
+// Class declaration
+/**
+ *  Listbox class
+ *  more_complete_description
+ */
+class CDirectPrintProtocolInfo : public CBase
+	{
+public:
+	/** Constructors */
+	static CDirectPrintProtocolInfo* NewLC(const CImplementationInformation& aImplInfo);
+	/** Destructor */
+	~CDirectPrintProtocolInfo();
+
+	TUid ImplementationUid() const;
+
+	const TDesC& DisplayName() const;
+
+private:
+	CDirectPrintProtocolInfo();
+
+private:
+	/** The implementation UID */
+	TUid iImplementationUid;
+	/** Display name */
+	HBufC* iDisplayName;
+	};
+
+#endif // __DIRECTPRINTPROTOCOLINFO_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintprotocolsloader.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintProtocolsLoader class definition.
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTPROTOCOLSLOADER_H
+#define DIRECTPRINTPROTOCOLSLOADER_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "directprintprotocolinfo.h"
+
+// Forward declarations
+class MProtPrintingDevice;
+
+class CDirectPrintProtocolsLoader : public CBase
+	{
+	public:
+	
+		static CDirectPrintProtocolsLoader* NewL();
+		~CDirectPrintProtocolsLoader();
+
+		/**
+		 *	Gets the number of protocol implementations that could be loaded.
+		 *	@return Number of protocols available.
+		 */
+		TInt GetNumberOfProtocolsAvailable() const;
+		
+		/**
+		 *	Gets the next protocol in the internal list of protocols.
+		 *
+		 *	Returns a pointer to the next protocol in the list. If the end of the list is reached, it starts the list over.
+		 *	The order in which protocols will be returned is: DPOF, BPP, PictBridge, any other protocols (sorted alpha-
+		 *	betically). This pointer should not be deleted. 
+		 *	@return Pointer to the next protocol instance.
+		 */
+		MProtPrintingDevice* GetNextProtocol();
+		
+		/**
+		 *	Gets the protocol located in the position specified. 
+		 *	@param aIndex Index of the desired protocol. If there are 3 protocols, the valid indexes are: 0, 1, 2.
+		 *	@return Pointer to the next protocol instance. This pointer should not be deleted. 
+		 */
+		MProtPrintingDevice* GetProtocolAt(TInt aIndex);
+		
+		/**
+		 *	Resets the inner pointers to the beginning of the protocols' list.
+		 */
+		void Reset();
+		
+		/**
+		 * Returns the index of the current protocol
+		 */
+		TInt GetProtocolIndex() const;
+		
+		/**
+		 *	@brief Returns the Protocols supported by the DLL. It can be any of the KDirectPrint_PrinterProtocol* constants.
+		 *	@return An OR'ed value with the supported protocols information.
+		 */
+		TUint SupportedProtocols() const;
+
+		/**
+		 *	Gets the protocol name in the position specified. 
+		 *	@param aIndex Index of the desired protocol. If there are 3 protocols, the valid indexes are: 0, 1, 2.
+		 *	@param aName Name of the protocol.
+		 *	@param aUid Uid of the protocol.
+		 *	@return error code.
+		 */
+		TInt GetProtocolName(TInt aIndex, TDes& aName, TInt& aUid);
+
+	private:
+	
+		CDirectPrintProtocolsLoader();
+		void ConstructL();
+		void LoadL();
+		static void CleanupProt( TAny* aData );
+	
+	private: // data
+	
+		/// Used to store the number of protocols loaded and available for use.
+		TInt iAvailableProtocols;
+					
+		/// Index of the next protocol available.
+		TInt iProtIndex;
+
+		/// Pointer array used to store the reference to the protocols.
+		RPointerArray<MProtPrintingDevice> iProtocols;
+				
+		/// OR'ed value with the supported protocols information.
+		TUint iSupportedProtocols;
+
+		/// Pointer array used to store the reference to the protocol infomations.
+		RPointerArray<CDirectPrintProtocolInfo> iProtocolInfos;
+	};
+
+#endif // DIRECTPRINTPROTOCOLSLOADER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintrsimageparser.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintRsImageParser class definition.
+*
+*/
+
+
+#ifndef CDIRECTPRINTRSDIRECTPARSER_H
+#define CDIRECTPRINTRSDIRECTPARSER_H
+
+#include <e32base.h>
+#include <f32file.h>
+
+class CDirectPrintRsImageParser : public CBase
+	{
+	public:
+		enum TImageEncoding
+			{
+			EUnknown = 0,
+			ENonDiffHuffmanBaseline = 0xc0,
+			ENonDiffHuffmanExtendedSeq,
+			ENonDiffHuffmanProgressive,
+			ENonDiffHuffmanLossless,
+			EUnused1,
+			EDiffHuffmanSequential,
+			EDiffHuffmanProgressive,
+			EDiffHuffmanLossless,
+			EReserved,
+			ENonDiffArithExtendedSeq,
+			ENonDiffArithProgressive,
+			ENonDiffArithLossless,
+			EUnused2,
+			EDiffArithSequential,
+			EDiffArithProgressive,
+			EDiffArithLossless
+			};
+
+		/**
+		 *	2-phase constructor
+		 *
+		 *	@return new object. The object is left on the cleanup stack
+		 */
+		static CDirectPrintRsImageParser* NewLC();
+		
+		/**
+		 *	Destructor
+		 */			
+		~CDirectPrintRsImageParser();
+		
+		/**
+		 *	JPEG image validator
+		 *
+		 *	@param aFileName image file name
+		 *	@param aValid place holder for validity indicator
+		 *	@param aErr place holder for error code
+		 */			
+		void ValidateL( const TDesC& aFileName, TBool& aValid, TInt& aErr );
+								
+	private:		
+
+		CDirectPrintRsImageParser();
+		void ConstructL();	
+		TBool Validate( TInt aStartOfDataOffset, TInt aWidth, TInt aHeight, TInt aSize, TInt aEncoding, TInt aErr );
+		TInt ReadData( RFile& aFile, TInt aStartByte, TDes8& aData );
+
+	private:
+	
+		RFs iFs;
+	};
+
+#endif // CDIRECTPRINTRSDIRECTPARSER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintscheduler.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef CDIRECTPRINTSCHEDULER_H
+#define CDIRECTPRINTSCHEDULER_H
+
+// System include files
+#include <e32base.h>
+
+class MProtIdleObserver;
+
+class CDirectPrintScheduler : public CActiveScheduler
+	{
+	public: // from CActiveScheduler
+		void Error(TInt aError) const;
+	public:
+	
+		/**
+         *	Idle observer setter. Asynchronous errors (leaves) will be
+         *	propagated to this observer
+         *
+         *	@param aIdleObserver idle observer
+         */
+		void SetIdleObserver( MProtIdleObserver& aIdleObserver );
+		
+		/**
+         *	Current protocol id setter
+         *
+         *	@param aProtocol current protocol id
+         */
+		void SetCurrentProtocol( TInt aProtocol );
+		
+	private:
+		MProtIdleObserver* iIdleObserver;
+		TInt iCurrentProtocol;						
+	};
+
+
+#endif // CDIRECTPRINTSCHEDULER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef CDIRECTPRINTSERVER_H
+#define CDIRECTPRINTSERVER_H
+
+// System include files
+#include <e32base.h>
+#include <fbs.h>
+
+class CDirectPrintBody;
+
+// ----------------------------------------------------------------------------------------
+// Server's policy here
+// ----------------------------------------------------------------------------------------
+
+// Total number of ranges
+const TUint KDirectPrintRangeCount = 2;
+
+// Definition of the ranges of IPC numbers
+const TInt KDirectPrintRanges[KDirectPrintRangeCount] = 
+    {
+    0,	// implemented 0-38
+    41 	// non implemented function end of range check ; ENotSupported        
+    }; 
+
+// Policy to implement for each of the above ranges        
+const TUint8 KDirectPrintElementsIndex[KDirectPrintRangeCount] = 
+    {
+    CPolicyServer::EAlwaysPass,		// applies to 0th range        
+    CPolicyServer::ENotSupported  	// applies to 1st range (out of range IPC)
+    };
+
+// Package all the above together into a policy
+const CPolicyServer::TPolicy KDirectPrintPolicy =
+    {
+    CPolicyServer::EAlwaysPass, 	// specifies all connect attempts should pass
+    KDirectPrintRangeCount,			// number of ranges                                   
+    KDirectPrintRanges,				// ranges array
+    KDirectPrintElementsIndex,		// elements<->ranges index
+    NULL,							// array of elements
+    };
+class CDirectPrintServer : public CPolicyServer
+	{
+	public:
+
+		/**
+		 *	2-phase constructor
+		 *
+		 *	@return new object. The object is left on the cleanup stack
+		 */
+		static CDirectPrintServer* NewLC();
+		
+		/**
+		 *	Destructor
+		 */
+		~CDirectPrintServer();
+		
+		/**
+		 *	Increase session counter
+		 */
+		void AddSession();
+		
+		/**
+		 *	Decrease session counter. If the counter is decreased to 0, the
+		 *	server is shut down
+		 */
+		void RemoveSession();
+		
+		/**
+		 *	Session count getter
+		 *
+		 *	@return session count
+		 */
+		TInt SessionCount() const;
+		
+		/**
+		 *	Reserve printing engine to the session
+		 *
+		 *	@param aSession session that claims the printing engine
+		 *	@return error code
+		 */
+		TInt ReserveEngine( const CSession2* aSession );
+		
+		/**
+		 *	Release printing engine by the session
+		 *
+		 *	@param aSession session that wants to release the printing engine
+		 *	@return error code
+		 */
+		TInt ReleaseEngine( const CSession2* aSession );
+		
+		/**
+		 *	Printing engine getter
+		 *
+		 *	@return printing engine
+		 */
+		CDirectPrintBody& Engine() const;
+
+	private:
+		
+		TInt RunError( TInt aError );
+		CDirectPrintServer();
+		void ConstructL();		
+		CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& aMessage ) const;		
+
+	private:
+
+		TInt iConnsCount;
+		
+		const CSession2* iEngineHolder;
+		
+		CDirectPrintBody* iEngine;
+				
+		RFbsSession iFbs;
+	};
+
+
+#endif // CDIRECTPRINTSERVER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintserverjobguard.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef DIRECTPRINTSERVERJOBGUARD_H
+#define DIRECTPRINTSERVERJOBGUARD_H
+
+#include <e32base.h>
+
+#include "imageprint.h"
+#include "directprintjobguarddata.h"
+
+class CDirectPrintBody;
+class TDpMessage;
+
+class CDirectPrintServerJobGuard : public CBase, public MPrintEventObserver
+	{
+	public:
+
+		/**
+		 *	2-phase constructor
+		 *
+		 *	@param aEngine printing engine
+		 *	@return new object
+		 */
+		static CDirectPrintServerJobGuard* NewL( CDirectPrintBody& aEngine );
+		
+		/**
+		 *	Destructor
+		 */
+		~CDirectPrintServerJobGuard();
+
+	private: // from MPrintEventObserver
+		
+		void PrintJobProgressEvent(TInt aStatus, TInt aPercentCompletion, TInt aJobStateCode);
+		void PrintJobErrorEvent(TInt aError, TInt aErrorStringCode);
+		void PrinterStatusEvent(TInt aError, TInt aErrorStringCode);
+		void PreviewImageEvent(TInt aFsBitmapHandle);
+		void ShowMessageL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		TBool AskYesNoQuestionL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		const TDesC& AskForInputL(TInt aMsgLine1Code, TInt aMsgLine2Code);
+		
+	public:
+	
+		/**
+		 *	Prepare print job by copying image file name into internal buffer
+		 *
+		 *	@param aMessage message contains file name of one image. 
+		 */
+		void PrepareL( TDpMessage& aMessage );
+		
+		/**
+		 *	Create print job and set this object as print job events observer
+		 *
+		 *	@param aMessage message contains printer id
+		 */
+		TInt CreateL( TDpMessage& aMessage );
+		
+		/**
+		 *	Continue waiting for print job events
+		 *
+		 *	@param aMessage message completed upon event arrival
+		 */
+		void ContinueCreateL( TDpMessage& aMessage );
+		
+		/**
+		 *	Stop waiting for print job events. Cancel waiting message
+		 */
+		void Stop();
+
+	private:
+
+		CDirectPrintServerJobGuard( CDirectPrintBody& aEngine );
+		void ConstructL();
+		void Process( TInt aErr = KErrNone );
+		void DoProcessL();
+		void DoPreProcessL( const TDirectPrintJobGuardData& aData );
+		
+	private: // data
+	
+		CDirectPrintBody& iEngine;
+		TDpMessage* iMessage;
+		RArray<TDirectPrintJobGuardData> iBuffer;
+		RPointerArray<TDesC> iImages;
+		TBool iRequestActive;
+	};
+
+
+#endif // DIRECTPRINTSERVERJOBGUARD_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintserveruid.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTSERVERUID_H
+#define DIRECTPRINTSERVERUID_H
+
+// Image Print Server UID3
+
+#define KDIRECTPRINTSERVERUID3 0x2002BB2C
+
+#endif  // DIRECTPRINTSERVERUID_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/inc/directprintsession.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef CDIRECTPRINTSESSION_H
+#define CDIRECTPRINTSESSION_H
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include "directprintcapability.h"
+#include "directprintmessage.h"
+
+// Forward declarations
+class CDirectPrintServer;
+class CDirectPrintServerJobGuard;
+class CDirectPrintNumOfCopies;
+
+
+class CDirectPrintSession : public CSession2
+	{
+	public: // from CSession2
+		void CreateL();
+
+	private:
+		~CDirectPrintSession();
+		CDirectPrintServer& Server();
+		void ServiceL( const RMessage2& aMessage );
+		void Disconnect(const RMessage2 &aMessage);
+
+	private:
+		void ServiceFirstPartL( TInt aIndex );
+		void ServiceSecondPartL( TInt aIndex );
+		void ServiceThirdPartL ( TInt aIndex );
+		void CountConnectionsL( TDpMessage& aMessage );
+		void SetForegroundL( TDpMessage& aMessage );
+		void ReserveEngine( TDpMessage& aMessage );
+		void ReleaseEngine( TDpMessage& aMessage );
+		void SupportedProtocols( TDpMessage& aMessage );
+		void GetNumPrintPages( TDpMessage& aMessage );
+		void GetJobStatus( TDpMessage& aMessage );
+		void GetPrinterStatus( TDpMessage& aMessage );
+		void CancelDiscovery( TDpMessage& aMessage );
+		void SubmitPrintJobL( TDpMessage& aMessage );
+		void CancelPrintJob( TDpMessage& aMessage );
+		void ContinuePrintJobL( TDpMessage& aMessage );
+		void RemoveCachedPrinterL( TDpMessage& aMessage );
+		void GetJobTemplateIconL( TDpMessage& aMessage );
+		void GetNumPreviewPages( TDpMessage& aMessage );
+		void SetJobSettingL( TDpMessage& aMessage );
+		void GetJobSettingL( TDpMessage& aMessage );
+		void GetPrinterCapabilityL( TDpMessage& aMessage );
+		void GetPrinterCapIdL( TDpMessage& aMessage );
+		void GetPrinterCapTypeL( TDpMessage& aMessage );
+		void GetPrinterCapDefL( TDpMessage& aMessage );
+		void GetPrinterCapLowL( TDpMessage& aMessage );
+		void GetPrinterCapHighL( TDpMessage& aMessage );
+		void GetPrinterCapEnumCountL( TDpMessage& aMessage );
+		void GetPrinterCapEnumL( TDpMessage& aMessage );
+		void GetPrinterCapabilityIDsCountL( TDpMessage& aMessage );
+		void GetPrinterCapabilityIDL( TDpMessage& aMessage );
+		void RegisterIdleObserverL( TDpMessage& aMessage );
+		void CancelRegisterIdleObserverL( TDpMessage& aMessage );
+		void StartDiscoveryL( TDpMessage& aMessage );
+		void ContinueDiscoveryL( TDpMessage& aMessage );
+		void PrepareJobL( TDpMessage& aMessage );	
+		void CreateJobL( TDpMessage& aMessage );
+		void ContinueCreateJobL( TDpMessage& aMessage );
+		void CancelStartDiscoveryL( TDpMessage& aMessage );
+		void CancelCreateJobL( TDpMessage& aMessage );
+		void IsPictBridgeModeL( TDpMessage& aMessage );
+		void SetNumberOfCopiesCountL( TDpMessage& aMessage );
+		void SetNumberOfCopiesL( TDpMessage& aMessage );
+		void GetProtocolNamesCountL( TDpMessage& aMessage );
+		void GetProtocolNameL( TDpMessage& aMessage );
+
+	private: // data
+	
+		RPointerArray<TDpMessage> iMsgWrappers;
+		RArray<TInt> iCapabilityIDs;
+		CDirectPrintServerJobGuard* iJobGuard;
+		TDirectPrintCapability iCapability;
+		CDirectPrintNumOfCopies* iNumOfCopies;
+		TBool iConnected;
+	};
+
+
+#endif // CDIRECTPRINTSESSION_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintbody.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,739 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintBody class definition.
+*
+*/
+
+
+#include <bluetooth/hci/hcierrors.h>
+
+#include "directprintbody.h"
+#include "directprintrsimageparser.h"
+#include "clog.h"
+#include "directprintselectitem.h"
+#include "directprintmessage.h"
+
+CDirectPrintBody* CDirectPrintBody::NewL()
+    {
+	CDirectPrintBody* self = new (ELeave) CDirectPrintBody();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+    }
+
+CDirectPrintBody::~CDirectPrintBody()
+	{
+	LOG("CDirectPrintBody::~CDirectPrintBody begin");			
+	delete iClassLoader;
+	iImageFileNames.ResetAndDestroy();
+	delete iIdleDiscovery;
+	LOG("CDirectPrintBody::~CDirectPrintBody end");
+	}
+
+TInt CDirectPrintBody::StartDiscovery(MPrinterDiscoveryObserver& aObserver, TUint aProtocols)
+	{
+	LOG1("CDirectPrintBody::StartDiscovery aProtocols: %d", aProtocols);
+	iPrinterDiscoveryObserver = &aObserver;
+
+	if( iCurrentProtocol )
+		{
+		iCurrentProtocol->CancelDiscovery( EFalse );
+		}
+
+	iCurrentProtocol = NULL;
+	iClassLoader->Reset();
+	iProtocolsRequested = aProtocols;
+	iDiscoveryCancelled = EFalse;
+	TryNextDiscovery();		
+	
+	LOG("CDirectPrintBody::StartDiscovery end");
+	return KErrNone;
+	}
+
+void CDirectPrintBody::CancelDiscovery()
+	{
+	LOG("CDirectPrintBody::CancelDiscovery begin");
+	iDiscoveryCancelled = ETrue;
+	if( iCurrentProtocol )
+		{
+		iCurrentProtocol->CancelDiscovery();
+		}
+	LOG("CDirectPrintBody::CancelDiscovery end");
+	}
+
+
+TInt CDirectPrintBody::CreatePrintJobL(TInt aPrinterID, RPointerArray<TDesC>& aImages, MPrintEventObserver& aObserver)
+	{
+	LOG("CDirectPrintBody::CreatePrintJobL begin");
+	iPrinterPrintEventObserver = &aObserver;
+	iCurrentPrintJobProtocol = NULL;
+
+	if( iCurrentProtocol )
+		{		
+		iCurrentProtocol->CancelDiscovery( EFalse );
+		}
+
+#ifdef __IMAGE_PRINT_BASE
+	TInt DeviceID;
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, iCurrentPrintJobProtocol );
+	if( !err )
+		{
+		TInt count = aImages.Count();
+		if( count )
+			{
+			iImageFileNames.ResetAndDestroy();
+			for( TInt i = 0; i < count; ++i )
+				{
+				HBufC* fileName = aImages[i]->AllocLC();
+				iImageFileNames.AppendL( fileName );
+				CleanupStack::Pop(); // fileName
+				}
+							
+			ActiveScheduler().SetCurrentProtocol( iCurrentPrintJobProtocol->SupportedProtocols() );
+			err = iCurrentPrintJobProtocol->CreatePrintJobL( DeviceID, aImages, *this );	
+			}
+		else
+			{
+			err = KErrInvalidData;
+			}
+		}
+#endif // __IMAGE_PRINT_BASE
+
+	TInt DeviceID;
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, iCurrentPrintJobProtocol );
+	if( !err )
+		{
+		ActiveScheduler().SetCurrentProtocol( iCurrentPrintJobProtocol->SupportedProtocols() );
+		err = iCurrentPrintJobProtocol->CreatePrintJobL( DeviceID, aImages, *this );
+		}
+
+	LOG1("CDirectPrintBody::CreatePrintJobL return: %d", err);
+	return err;
+	}
+
+
+void CDirectPrintBody::SubmitPrintJobL()
+	{
+	LOG1("CDirectPrintBody::SubmitPrintJobL iCurrentPrintJobProtocol: %d", iCurrentPrintJobProtocol);
+	TInt err( KErrNone );
+
+	if( !iCurrentPrintJobProtocol )
+		{
+		err = KErrInvalidSequence;
+		}
+	if( !err )
+		{
+		TInt invalidImages;
+		err = ValidateImagesL( iImageFileNames, invalidImages );
+		LOG1("CDirectPrintBody::SubmitPrintJobL ValidateImagesL returns: %d", err);
+		}
+
+	User::LeaveIfError( err );
+
+	iCurrentPrintJobProtocol->SubmitPrintJobL();
+
+	LOG("CDirectPrintBody::SubmitPrintJobL end");
+	}
+
+
+TInt CDirectPrintBody::CancelPrintJob()
+	{
+	LOG("CDirectPrintBody::CancelPrintJob begin");
+	TInt err( KErrNone );
+	if( !iCurrentPrintJobProtocol )
+		{
+		err = KErrInvalidSequence;
+		}
+	if( !err )
+		{
+		err = iCurrentPrintJobProtocol->CancelPrintJob();
+		}
+	LOG1("CDirectPrintBody::CancelPrintJob return: %d", err);
+	return err;
+	}
+
+
+TInt CDirectPrintBody::ContinuePrintJobL()
+	{
+	LOG("CDirectPrintBody::ContinuePrintJobL begin");
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->ContinuePrintJobL();
+		}
+	LOG1("CDirectPrintBody::ContinuePrintJobL return: %d", err);
+	return err;
+	}
+
+
+TInt CDirectPrintBody::GetNumPrintPages()
+	{
+	LOG("CDirectPrintBody::GetNumPrintPages begin");
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->GetNumPrintPages();
+		}
+	LOG1("CDirectPrintBody::GetNumPrintPages return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetJobStatus()
+	{
+	LOG("CDirectPrintBody::GetJobStatus begin");
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->GetPrintJobStatus();
+		}
+	LOG1("CDirectPrintBody::GetJobStatus return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetPrinterStatus(TInt aPrinterID)
+	{
+	LOG1("CDirectPrintBody::GetPrinterStatus aPrinterID: %d", aPrinterID);
+	TInt DeviceID;
+	MProtPrintingDevice* theProtToQuery = NULL;
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, theProtToQuery );
+	if( !err )
+		{
+		err = theProtToQuery->GetPrinterStatus( DeviceID );
+		}
+	LOG1("CDirectPrintBody::GetPrinterStatus return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetPrinterCapabilityIDsL(TInt aPrinterID, RArray<TInt>& aCapabilityIDs)
+	{
+	LOG1("CDirectPrintBody::GetPrinterCapabilityIDsL aPrinterID: %d", aPrinterID);
+	TInt DeviceID;
+	MProtPrintingDevice* theProtToQuery = NULL;
+
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, theProtToQuery );
+	if( !err )
+		{
+		err = theProtToQuery->GetDeviceCapabilityIDsL( DeviceID, aCapabilityIDs );
+		}
+	else if( err == KErrNotFound )
+		{
+		err = KErrInvalidData;
+		}
+
+	LOG1("CDirectPrintBody::GetPrinterCapabilityIDsL return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetPrinterCapabilityL(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability)
+	{
+	LOG1("CDirectPrintBody::GetPrinterCapabilityL aPrinterID: %d", aPrinterID);
+	LOG1("CDirectPrintBody::GetPrinterCapabilityL aCapabilityID: %d", aCapabilityID);
+	TInt DeviceID;
+	MProtPrintingDevice* theProtToQuery = NULL;
+	
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, theProtToQuery );
+	if( !err )
+		{
+		err = theProtToQuery->GetDeviceCapabilityL( DeviceID, aCapabilityID, aCapability );
+		}
+	else if( err == KErrNotFound )
+		{
+		err = KErrInvalidData;
+		}
+	
+	LOG1("CDirectPrintBody::GetPrinterCapabilityL return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetJobSetting(TInt aCapabilityID, TInt& aValue)
+	{
+	LOG1("CDirectPrintBody::GetJobSetting aCapabilityID: %d", aCapabilityID);
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->GetJobSetting( aCapabilityID, aValue );
+		}
+	LOG1("CDirectPrintBody::GetJobSetting return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::SetJobSettingL(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability)
+	{
+	LOG1("CDirectPrintBody::SetJobSettingL aCapabilityID: %d", aCapabilityID);
+	LOG1("CDirectPrintBody::SetJobSettingL aValue: %d", aValue);
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->SetJobSettingL( aCapabilityID, aValue, aAffectedCapability );
+		}
+	LOG1("CDirectPrintBody::SetJobSettingL return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetNumPreviewPages()
+	{
+	LOG("CDirectPrintBody::GetNumPreviewPages");
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->GetNumPreviewPages();
+		}
+	LOG1("CDirectPrintBody::GetNumPreviewPages return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::GetJobTemplateIconL( TInt aTemplateID, TInt& aFbsBitmapHandle )
+	{
+	LOG1("CDirectPrintBody::GetJobTemplateIconL aTemplateID: %d", aTemplateID);
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->GetJobTemplateIconL( aTemplateID, aFbsBitmapHandle );
+		}
+	LOG1("CDirectPrintBody::GetJobTemplateIconL return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::CreatePreviewImage(TInt aPageNumber)
+	{
+	LOG1("CDirectPrintBody::CreatePreviewImage aPageNumber: %d", aPageNumber);
+	TInt err( KErrInvalidSequence );
+	if( iCurrentPrintJobProtocol )
+		{
+		err = iCurrentPrintJobProtocol->CreatePreviewImage(aPageNumber);
+		}
+	LOG1("CDirectPrintBody::CreatePreviewImage return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::RemoveCachedPrinterL(TInt aPrinterID)
+	{
+	LOG1("CDirectPrintBody::RemoveCachedPrinterL aPrinterID: %d", aPrinterID);
+	TInt DeviceID;
+	MProtPrintingDevice* theProtToQuery = NULL;
+	TInt err = FindInternalDeviceReference( aPrinterID, DeviceID, theProtToQuery );
+	if( !err )
+		{
+		err = theProtToQuery->RemoveCachedDeviceL( DeviceID );
+		}
+	LOG1("CDirectPrintBody::RemoveCachedPrinterL return: %d", err);
+	return err;
+	}
+
+TUint CDirectPrintBody::SupportedProtocols()
+	{
+	LOG("CDirectPrintBody::SupportedProtocols begin");
+	TUint prots = iClassLoader->SupportedProtocols();
+	LOG1("CDirectPrintBody::SupportedProtocols return: %d", prots);
+	return prots;
+	}
+
+void CDirectPrintBody::RegisterIdleObserver(MIdleObserver *aObserver)
+	{
+	LOG("CDirectPrintBody::RegisterIdleObserver begin");
+	iPrinterIdleObserver = aObserver;
+	LOG("CDirectPrintBody::RegisterIdleObserver end");
+	}
+
+// From MProtDiscoveryObserver.
+void CDirectPrintBody::FoundDeviceL(TPrinter& aDeviceInfo)
+	{
+	LOG("CDirectPrintBody::FoundDeviceL begin");
+	if( iPrinterDiscoveryObserver )
+		{	
+		//Check that device id is valid, there can't be any bits in the protocol field (higher bits)
+		if( !( PROTOCOL_ID_FIELD_MASK & aDeviceInfo.iPrinterID ) )
+			{
+			// Get the protocol index number
+			TInt protocolIndex = iClassLoader->GetProtocolIndex();
+
+			// Left shift this number so that it occupies the higher X bits (the PROTOCOL_ID_BIT_COUNT highest bits)
+			protocolIndex <<= sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT;
+
+			// Add the protocol index number to the device id
+			aDeviceInfo.iPrinterID |= protocolIndex;
+
+			// Forward the FoundPrinterL callback to the observer
+			iPrinterDiscoveryObserver->FoundPrinterL( aDeviceInfo );
+			}
+		}
+	LOG("CDirectPrintBody::FoundDeviceL end");	
+	}
+
+void CDirectPrintBody::DiscoveryStatusL( TInt aStatus, TInt aErrorCode, TInt aErrorStringCode )
+	{
+	LOG1("CDirectPrintBody::DiscoveryStatusL aStatus: %d", aStatus);
+	LOG1("CDirectPrintBody::DiscoveryStatusL aErrorCode: %d", aErrorCode);
+	LOG1("CDirectPrintBody::DiscoveryStatusL aErrorStringCode: %d", aErrorStringCode);
+	if( iPrinterDiscoveryObserver )
+		{
+		switch( aStatus )
+			{
+			case EDiscoveryFinished: // Done with 1 protocol.
+			{
+				// When Bluetooth discovery is finished, but Bluetooth is not enabled pass error code to UI. 
+				if ( aErrorCode == ENoConnection )
+					{
+					iPrinterDiscoveryObserver->DiscoveryStatusL( aStatus, aErrorCode, aErrorStringCode );
+					}
+				iCurrentProtocol = NULL;
+				TUint doDiscovery = iProtocolsRequested & iClassLoader->SupportedProtocols();
+				LOG1("CDirectPrintBody::DiscoveryStatusL doDiscovery: %d", doDiscovery);
+				LOG1("CDirectPrintBody::DiscoveryStatusL iDiscoveryCancelled: %d", iDiscoveryCancelled);
+				if( ( !doDiscovery && aErrorCode == KErrCancel ) || iDiscoveryCancelled )
+					{
+					iPrinterDiscoveryObserver->DiscoveryStatusL( aStatus, aErrorCode, aErrorStringCode );
+					}
+				else
+					{
+					TryNextDiscovery();
+					}
+			}
+				break;
+			default: // Discovering, Cancelling.
+				iCurrentProtocol = NULL;
+				iPrinterDiscoveryObserver->DiscoveryStatusL( aStatus, aErrorCode, aErrorStringCode );
+			break;
+			}
+		}
+	LOG("CDirectPrintBody::DiscoveryStatusL end");
+	}
+
+
+void CDirectPrintBody::RemoveDeviceL(TPrinter& aDeviceInfo)
+	{	
+	LOG("CDirectPrintBody::RemoveDeviceL begin");
+	if( iPrinterDiscoveryObserver )
+		{
+		if (PROTOCOL_ID_FIELD_MASK & aDeviceInfo.iPrinterID)
+			{	//Invalid id, reject printer
+			}
+		else
+			{	// Get the protocol index number
+			TInt protocolIndex = iClassLoader->GetProtocolIndex();
+			
+			// Left shift this number so that it occupies the higher X bits (the PROTOCOL_ID_BIT_COUNT highest bits)
+			protocolIndex <<= sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT;
+
+			// Add the protocol index number to the device id
+			aDeviceInfo.iPrinterID |= protocolIndex;
+
+			// Forward the RemovePrinterL callback to the observer
+			iPrinterDiscoveryObserver->RemovePrinterL( aDeviceInfo );
+			}
+		}
+	LOG("CDirectPrintBody::RemoveDeviceL end");	
+	}
+
+// From MProtPrintEventObserver.
+void CDirectPrintBody::PrintJobProgressEvent(TInt aStatus, TInt aPercent, TInt aJobStateCode)
+	{
+	LOG1("CDirectPrintBody::PrintJobProgressEvent aStatus: %d", aStatus);
+	LOG1("CDirectPrintBody::PrintJobProgressEvent aPercent: %d", aPercent);
+	LOG1("CDirectPrintBody::PrintJobProgressEvent aJobStateCode: %d", aJobStateCode);
+	if( iPrinterPrintEventObserver )
+		iPrinterPrintEventObserver->PrintJobProgressEvent(aStatus, aPercent, aJobStateCode);
+	LOG("CDirectPrintBody::PrintJobProgressEvent end");
+	}
+
+void CDirectPrintBody::PrintJobErrorEvent(TInt aErrorCode, TInt aErrorStringCode)
+	{
+	LOG1("CDirectPrintBody::PrintJobErrorEvent aErrorCode: %d", aErrorCode);
+	LOG1("CDirectPrintBody::PrintJobErrorEvent aErrorStringCode: %d", aErrorStringCode);
+	if( iPrinterPrintEventObserver )
+		iPrinterPrintEventObserver->PrintJobErrorEvent(aErrorCode, aErrorStringCode);
+	LOG("CDirectPrintBody::PrintJobErrorEvent end");
+	}
+
+void CDirectPrintBody::PrinterStatusEvent(TInt aErrorCode, TInt aErrorStringCode)
+	{
+	LOG1("CDirectPrintBody::PrinterStatusEvent aErrorCode: %d", aErrorCode);
+	LOG1("CDirectPrintBody::PrinterStatusEvent aErrorStringCode: %d", aErrorStringCode);
+	if( iPrinterPrintEventObserver )
+		iPrinterPrintEventObserver->PrinterStatusEvent(aErrorCode, aErrorStringCode);
+	LOG("CDirectPrintBody::PrinterStatusEvent end");
+	}
+
+void CDirectPrintBody::PreviewImageEvent(TInt aFsBitmapHandle)
+	{
+	LOG1("CDirectPrintBody::PreviewImageEvent aFsBitmapHandle: %d", aFsBitmapHandle);
+	if( iPrinterPrintEventObserver )
+		iPrinterPrintEventObserver->PreviewImageEvent(aFsBitmapHandle);
+	LOG("CDirectPrintBody::PreviewImageEvent end");
+	}
+
+void CDirectPrintBody::ShowMessageL(TInt aMsgLine1Code, TInt aMsgLine2Code)
+	{
+	LOG1("CDirectPrintBody::ShowMessageL aMsgLine1Code: %d", aMsgLine1Code);
+	LOG1("CDirectPrintBody::ShowMessageL aMsgLine2Code: %d", aMsgLine2Code);
+	if( iPrinterPrintEventObserver )
+		iPrinterPrintEventObserver->ShowMessageL(aMsgLine1Code, aMsgLine2Code);
+	LOG("CDirectPrintBody::ShowMessageL end");
+	}
+
+TBool CDirectPrintBody::AskYesNoQuestionL(TInt aMsgLine1Code, TInt aMsgLine2Code)
+	{
+	LOG1("CDirectPrintBody::AskYesNoQuestionL aMsgLine1Code: %d", aMsgLine1Code);
+	LOG1("CDirectPrintBody::AskYesNoQuestionL aMsgLine2Code: %d", aMsgLine2Code);
+	TBool res( EFalse );
+	if( iPrinterPrintEventObserver )
+		{
+		res = iPrinterPrintEventObserver->AskYesNoQuestionL(aMsgLine1Code, aMsgLine2Code);
+		}
+	LOG1("CDirectPrintBody::AskYesNoQuestionL return: %d", res);
+	return res;
+	}
+
+const TDesC& CDirectPrintBody::AskForInputL(TInt aMsgLine1Code, TInt aMsgLine2Code)
+	{
+	LOG1("CDirectPrintBody::ShowMessageL aMsgLine1Code: %d", aMsgLine1Code);
+	LOG1("CDirectPrintBody::ShowMessageL aMsgLine2Code: %d", aMsgLine2Code);
+	if( iPrinterPrintEventObserver )
+		{
+		return iPrinterPrintEventObserver->AskForInputL(aMsgLine1Code, aMsgLine2Code);
+		}
+	else
+		{
+		return KNullDesC;
+		}
+	}
+
+void CDirectPrintBody::StatusEvent(const TEvent& aEvent, TInt aError, TInt aMsgCode)
+	{
+	LOG1("CDirectPrintBody::StatusEvent aError: %d", aError);
+	LOG1("CDirectPrintBody::StatusEvent aMsgCode: %d", aMsgCode);
+	LOG1("CDirectPrintBody::StatusEvent aEvent.iProtocol: %d", aEvent.iProtocol);
+	LOG1("CDirectPrintBody::StatusEvent aEvent.iSeverity: %d", aEvent.iSeverity);
+	LOG1("CDirectPrintBody::StatusEvent aEvent.iEventType: %d", aEvent.iEventType);
+	
+	if( iPrinterIdleObserver )
+		{
+		iPrinterIdleObserver->StatusEvent( aEvent, aError, aMsgCode );
+		}
+	
+	if( aEvent.iEventType == EAsynchronousLeave )
+		{
+		// a protocol threw an async leave
+		// we continue with other protocols
+		TUint doDiscovery = iProtocolsRequested & iClassLoader->SupportedProtocols();
+		if( doDiscovery ) TryNextDiscovery();
+		}
+	LOG("CDirectPrintBody::StatusEvent end");
+	}
+
+CDirectPrintBody::CDirectPrintBody()
+	: iCurrentProtocol( NULL )
+	, iCurrentPrintJobProtocol( NULL )
+	{
+	LOG("CDirectPrintBody::CDirectPrintBody begin");
+	LOG("CDirectPrintBody::CDirectPrintBody end");
+	}
+
+void CDirectPrintBody::ConstructL()
+	{
+	LOG("CDirectPrintBody::ConstructL begin");	
+	iClassLoader = CDirectPrintProtocolsLoader::NewL();
+	iClassLoader->Reset();
+	for( TInt x=0; x < iClassLoader->GetNumberOfProtocolsAvailable(); ++x )
+		{
+		iClassLoader->GetNextProtocol()->RegisterIdleObserver( this );
+		}
+
+	iIdleDiscovery = CIdle::NewL( CActive::EPriorityIdle );
+	ActiveScheduler().SetIdleObserver( *this );
+	LOG("CDirectPrintBody::ConstructL end");
+	}
+
+CDirectPrintScheduler& CDirectPrintBody::ActiveScheduler() const
+	{
+	LOG("CDirectPrintBody::ActiveScheduler begin");
+	CDirectPrintScheduler* scheduler = static_cast<CDirectPrintScheduler*>( CActiveScheduler::Current() );
+	LOG("CDirectPrintBody::ActiveScheduler end");
+	return *scheduler;
+	}
+
+TInt CDirectPrintBody::FindInternalDeviceReference(TInt aExternalDeviceID, TInt& aInternalDeviceID, MProtPrintingDevice*& aProtToUse)
+	{
+	LOG1("CDirectPrintBody::FindInternalDeviceReference aExternalDeviceID: %d", aExternalDeviceID);
+	TInt err( KErrNotFound );
+
+#ifdef __IMAGE_PRINT_BASE
+	aProtToUse = NULL;
+
+	// Separate the external id into the corresponding fields
+	TInt protId = aExternalDeviceID & PROTOCOL_ID_FIELD_MASK;
+
+	TInt deviceId = aExternalDeviceID & DEVICE_ID_FIELD_MASK;
+	protId >>= (sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT);
+	// If TInt is more than 4 bytes the mask should clear everything but the 6 least significant bits
+	protId &= PROTOCOL_ID_CLEAR_MASK;	//remove 1's if the original protId was negative
+
+	// Check that the external ID does indeed belong to one of the currently
+	// loaded protocols
+	if( protId >= 0 && protId < iClassLoader->GetNumberOfProtocolsAvailable() )
+		{
+		aInternalDeviceID = deviceId;
+		aProtToUse = iClassLoader->GetProtocolAt(protId);
+		if( aProtToUse ) err = KErrNone;
+		}
+#endif // __IMAGE_PRINT_BASE
+#if 1 // ko
+	TInt protId = aExternalDeviceID & PROTOCOL_ID_FIELD_MASK;
+	protId >>= (sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT);
+	protId &= PROTOCOL_ID_CLEAR_MASK;
+	if( protId >= 0 && protId < iClassLoader->GetNumberOfProtocolsAvailable() )
+		{
+		aInternalDeviceID = 128;
+		aProtToUse = iClassLoader->GetProtocolAt(protId);
+		if( aProtToUse ) err = KErrNone;
+		}
+#else // ko
+	aInternalDeviceID = 128;
+	aProtToUse = iClassLoader->GetProtocolAt(0);
+	if( aProtToUse ) err = KErrNone;
+#endif // ko
+	LOG1("CDirectPrintBody::FindInternalDeviceReference return: %d", err);
+	return err;
+	}
+
+TInt CDirectPrintBody::ValidateImagesL(const RPointerArray<HBufC>& aImageList, TInt &aInvalidCount)
+	{
+	LOG1("CDirectPrintBody::ValidateImagesL aImageList.Count(): %d", aImageList.Count());
+	aInvalidCount = 0;
+	TInt lastError = KErrNone;
+	CDirectPrintRsImageParser *imageParser = CDirectPrintRsImageParser::NewLC();
+
+	for( TInt nCnt=0; nCnt < aImageList.Count(); ++nCnt )
+		{
+		LOG1("CDirectPrintBody::ValidateImagesL nCnt: %d", nCnt);
+		LOG1("CDirectPrintBody::ValidateImagesL image: %S", aImageList[nCnt]);
+		TBool valid;
+		imageParser->ValidateL(*(aImageList[nCnt]), valid, lastError);
+		LOG1("CDirectPrintBody::ValidateImagesL valid: %d", valid);
+		LOG1("CDirectPrintBody::ValidateImagesL lastError: %d", lastError);
+		if( !valid )
+			{
+			++aInvalidCount;
+			}
+		}
+
+	CleanupStack::PopAndDestroy(imageParser);
+	LOG1("CDirectPrintBody::ValidateImagesL aInvalidCount: %d", aInvalidCount);
+	LOG1("CDirectPrintBody::ValidateImagesL ends with: %d", lastError);
+	return lastError;
+	}
+
+void CDirectPrintBody::TryNextDiscovery()
+	{
+	LOG("CDirectPrintBody::TryNextDiscovery begin");
+	iIdleDiscovery->Cancel();
+	iIdleDiscovery->Start(TCallBack(TryNextDiscoveryL, this));
+	LOG("CDirectPrintBody::TryNextDiscovery end");
+	}
+
+void CDirectPrintBody::DoTryNextDiscoveryL()
+	{
+	LOG("CDirectPrintBody::DoTryNextDiscoveryL begin");
+	TUint doDiscovery = iProtocolsRequested & iClassLoader->SupportedProtocols();
+	LOG1("CDirectPrintBody::DoTryNextDiscoveryL doDiscovery: %d", doDiscovery);
+	if( doDiscovery )
+		{
+		TBool found( EFalse );
+		TInt protId( 0 );
+		TInt count = iClassLoader->GetNumberOfProtocolsAvailable();
+		LOG1("CDirectPrintBody::DoTryNextDiscoveryL count: %d", count);
+		for( TInt i = 0; i < count && !found; i++ )
+			{
+			iCurrentProtocol = iClassLoader->GetNextProtocol();
+			protId = iCurrentProtocol->SupportedProtocols();
+			if( iProtocolsRequested & protId ) found = ETrue;
+			}
+		LOG1("CDirectPrintBody::DoTryNextDiscoveryL found: %d", found);
+		LOG1("CDirectPrintBody::DoTryNextDiscoveryL protId: %d", protId);
+		if( found )
+			{
+			TUint temp = KMaxTUint ^ protId;
+			iProtocolsRequested &= temp;
+			LOG1("CDirectPrintBody::DoTryNextDiscoveryL iProtocolsRequested: %d", iProtocolsRequested);
+			ActiveScheduler().SetCurrentProtocol( protId );
+			iCurrentProtocol->StartDiscoveryL( *this, protId );
+			}
+		}
+	else
+		{
+		iPrinterDiscoveryObserver->DiscoveryStatusL( EDiscoveryFinished, 0, 0 );
+		}
+	LOG("CDirectPrintBody::DoTryNextDiscoveryL end");
+	}
+
+TInt CDirectPrintBody::TryNextDiscoveryL(TAny* aObj)
+	{
+	LOG("CDirectPrintBody::TryNextDiscoveryL begin");
+	CDirectPrintBody* obj = static_cast<CDirectPrintBody*>(aObj);
+	obj->DoTryNextDiscoveryL();
+	LOG("CDirectPrintBody::TryNextDiscoveryL end");
+	return EFalse;
+	}
+
+void CDirectPrintBody::SetNumsOfCopiesL( const RArray<TInt>& aNumsOfCopies, TInt& aErr )
+	{
+	LOG1("CDirectPrintBody::SetNumberOfCopiesL aNumsOfCopies.Count(): %d", aNumsOfCopies.Count());
+
+	if( iCurrentPrintJobProtocol )
+		{
+		iCurrentPrintJobProtocol->SetNumsOfCopiesL( aNumsOfCopies, aErr );
+		LOG1("CDirectPrintBody::SetNumberOfCopiesL aErr: %d", aErr);
+		}
+
+	LOG("CDirectPrintBody::SetNumberOfCopiesL end");
+	}
+
+void CDirectPrintBody::HandleSessionDisconnect( const MIdleObserver* aIdleObserver,
+												const MPrinterDiscoveryObserver* aDiscoveryObserver,
+												const MPrintEventObserver* aEventObserver )
+	{
+	LOG1("CDirectPrintBody::HandleSessionDisconnect aIdleObserver address: %d", aIdleObserver);
+	LOG1("CDirectPrintBody::HandleSessionDisconnect iPrinterIdleObserver address: %d", iPrinterIdleObserver);
+	LOG1("CDirectPrintBody::HandleSessionDisconnect aDiscoveryObserver address: %d", aDiscoveryObserver);
+	LOG1("CDirectPrintBody::HandleSessionDisconnect iPrinterDiscoveryObserver address: %d", iPrinterDiscoveryObserver);
+	LOG1("CDirectPrintBody::HandleSessionDisconnect aEventObserver address: %d", aEventObserver);
+	LOG1("CDirectPrintBody::HandleSessionDisconnect iPrinterPrintEventObserver address: %d", iPrinterPrintEventObserver);
+	if( aIdleObserver == iPrinterIdleObserver )	iPrinterIdleObserver = NULL;
+	if( aEventObserver == iPrinterPrintEventObserver ) iPrinterPrintEventObserver = NULL;
+	if( aDiscoveryObserver == iPrinterDiscoveryObserver ) iPrinterDiscoveryObserver = NULL;
+	LOG("CDirectPrintBody::HandleSessionDisconnect end");
+	}
+
+TInt CDirectPrintBody::ProtocolCount()
+	{
+	return iClassLoader->GetNumberOfProtocolsAvailable();
+	}
+
+TInt CDirectPrintBody::GetProtocolNameL( TDpMessage& aMessage )
+	{
+	TDirectPrintSelectItem item;
+	TInt index = aMessage.Int0();
+	TInt err = iClassLoader->GetProtocolName(index, item.iName, item.iId);
+
+	if (err == KErrNone)
+		{
+		TPtr8 ptr(reinterpret_cast<TUint8*>(&item), sizeof(item), sizeof(item));
+		aMessage.WriteL( 1, ptr );
+		}
+
+	return err;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintmessage.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <e32cmn.h>
+
+#include "directprintmessage.h"
+#include "clog.h"
+
+TDpMessage::TDpMessage( const RMessage2& aMessage, 
+							const TBool& aConnected ) :
+							iConnected( aConnected ),
+							iDisposable( EFalse )
+																		
+    {
+    iMessage = aMessage;
+    }
+
+void TDpMessage::WriteL(TInt aParam, const TDesC8 &aDes, TInt aOffset) const
+	{
+	LOG("TDpMessage::WriteL begin");
+	LOG1("TDpMessage::WriteL iConnected: %d", iConnected);
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::WriteL iMessage.Function(): %d", iMessage.Function());
+		iMessage.WriteL( aParam, aDes, aOffset );	
+		}
+	LOG("TDpMessage::WriteL end");
+	}
+	
+void TDpMessage::Complete(TInt aReason) const
+	{
+	LOG("TDpMessage::Complete begin");
+	LOG1("TDpMessage::Complete iConnected: %d", iConnected);
+	if( !iMessage.IsNull() && iConnected ) 
+		{
+		LOG1("TDpMessage::Complete iMessage.Function(): %d", iMessage.Function());
+		iMessage.Complete( aReason );
+		}
+	LOG("TDpMessage::Complete end");
+	}
+	
+TInt TDpMessage::Int0() const
+	{
+	LOG("TDpMessage::Int0 begin");
+	LOG1("TDpMessage::Int0 iConnected: %d", iConnected);
+	TInt value( 0 );
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::Int0 iMessage.Function(): %d", iMessage.Function());
+		value = iMessage.Int0();
+		}	
+	LOG("TDpMessage::Int0 end");
+	return value;
+	}
+	
+TInt TDpMessage::Int1() const
+	{
+	LOG("TDpMessage::Int1 begin");
+	LOG1("TDpMessage::Int1 iConnected: %d", iConnected);
+	TInt value( 0 );
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::Int1 iMessage.Function(): %d", iMessage.Function());
+		value = iMessage.Int1();
+		}	
+	LOG("TDpMessage::Int1 end");
+	return value;
+	}
+	
+TInt TDpMessage::GetDesLength(TInt aParam) const
+	{
+	LOG("TDpMessage::GetDesLength begin");
+	LOG1("TDpMessage::GetDesLength iConnected: %d", iConnected);	
+	TInt value( 0 );
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::GetDesLength iMessage.Function(): %d", iMessage.Function());
+		value = iMessage.GetDesLength( aParam );
+		}	
+	LOG("TDpMessage::GetDesLength end");
+	return value;
+	}
+	
+void TDpMessage::ReadL(TInt aParam, TDes8 &aDes, TInt aOffset) const
+	{
+	LOG("TDpMessage::ReadL TDes8 begin");
+	LOG1("TDpMessage::ReadL TDes8 iConnected: %d", iConnected);
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::ReadL TDes8 iMessage.Function(): %d", iMessage.Function());
+		iMessage.ReadL( aParam, aDes, aOffset );
+		}
+	LOG("TDpMessage::ReadL TDes8 end");
+	}
+	
+void TDpMessage::ReadL(TInt aParam, TDes16 &aDes, TInt aOffset) const
+	{
+	LOG("TDpMessage::ReadL TDes16 begin");
+	LOG1("TDpMessage::ReadL TDes16 iConnected: %d", iConnected);
+	if( !iMessage.IsNull() && iConnected )
+		{
+		LOG1("TDpMessage::ReadL TDes16 iMessage.Function(): %d", iMessage.Function());
+		iMessage.ReadL( aParam, aDes, aOffset );
+		}
+	LOG("TDpMessage::ReadL TDes16 end");
+	}
+	
+TInt TDpMessage::Function() const
+	{
+	return iMessage.Function();
+	}
+	
+void TDpMessage::SetDisposable( TBool aDisposable )
+	{
+	iDisposable = aDisposable;
+	}
+	
+TBool TDpMessage::Disposable() const
+	{
+	return iDisposable;
+	}		
+	
+void TDpMessage::Panic(const TDesC &aCategory, TInt aReason) const
+	{
+	iMessage.Panic( aCategory, aReason );
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintnumofcopies.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include "directprintnumofcopies.h"
+#include "clog.h"
+
+CDirectPrintNumOfCopies* CDirectPrintNumOfCopies::NewL()
+    {
+	CDirectPrintNumOfCopies* obj = new (ELeave) CDirectPrintNumOfCopies();
+    CleanupStack::PushL( obj ) ;
+    obj->ConstructL();
+	CleanupStack::Pop(); // obj
+    return obj;
+    }
+
+CDirectPrintNumOfCopies::~CDirectPrintNumOfCopies()
+    {
+    LOG("CDirectPrintNumOfCopies::~CDirectPrintNumOfCopies begin");
+	iNumsOfCopies.Close();
+	LOG("CDirectPrintNumOfCopies::~CDirectPrintNumOfCopies end");
+    }
+
+CDirectPrintNumOfCopies::CDirectPrintNumOfCopies() : iCount( 0 )
+    {
+    }
+
+void CDirectPrintNumOfCopies::ConstructL()
+    {
+    }
+    
+void CDirectPrintNumOfCopies::Reset( TInt aCount )
+    {
+    LOG("CDirectPrintNumOfCopies::Reset begin");
+    iCount = aCount;
+    iNumsOfCopies.Reset();
+    LOG("CDirectPrintNumOfCopies::Reset end");
+    }    
+    
+void CDirectPrintNumOfCopies::AddNumOfCopyL( TInt aNumOfCopies, TBool& aFull )
+	{
+	LOG1("CDirectPrintNumOfCopies::AddNumOfCopyL aNumOfCopies: %d", aNumOfCopies);
+	iNumsOfCopies.AppendL( aNumOfCopies );
+	aFull = ( iNumsOfCopies.Count() == iCount ) ? ETrue : EFalse;
+	LOG1("CDirectPrintNumOfCopies::AddNumOfCopyL end with aFull: %d", aFull);
+	}
+
+const RArray<TInt>& CDirectPrintNumOfCopies::NumsOfCopies() const
+	{
+	return iNumsOfCopies;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintprotocolinfo.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "directprintprotocolinfo.h"
+
+CDirectPrintProtocolInfo::CDirectPrintProtocolInfo()
+	{
+	}
+
+CDirectPrintProtocolInfo::~CDirectPrintProtocolInfo()
+	{
+	delete iDisplayName;
+	}
+
+CDirectPrintProtocolInfo* CDirectPrintProtocolInfo::NewLC(const CImplementationInformation& aImplInfo)
+	{
+	CDirectPrintProtocolInfo* self = new (ELeave) CDirectPrintProtocolInfo();
+	CleanupStack::PushL(self);
+
+	self->iImplementationUid = aImplInfo.ImplementationUid();
+
+	if(aImplInfo.DisplayName().Length() != 0)
+		{
+		self->iDisplayName = aImplInfo.DisplayName().AllocL();
+		}
+
+	return self;
+	}
+
+TUid CDirectPrintProtocolInfo::ImplementationUid() const
+	{
+	return iImplementationUid;
+	}
+
+const TDesC& CDirectPrintProtocolInfo::DisplayName() const
+	{
+	if(iDisplayName == NULL)
+		return KNullDesC();
+	else
+		return *iDisplayName;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintprotocolsloader.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintProtocolsLoader class definition.
+*
+*/
+
+
+#include <ecom/ecom.h>
+
+#include "directprintprotocolsloader.h"
+#include "mprotprintingdevice.h"
+#include "clog.h"
+#include "imageprint.h"
+
+namespace
+	{
+	const TUid KDirectPrintEcomUid = { 0x10208A1E };
+	}
+
+CDirectPrintProtocolsLoader* CDirectPrintProtocolsLoader::NewL()
+	{		
+	LOG("[CDirectPrintProtocolsLoader::NewL]\t Begin");
+	CDirectPrintProtocolsLoader* self = new (ELeave) CDirectPrintProtocolsLoader();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	LOG("[CDirectPrintProtocolsLoader::NewL]\t End");
+	return self;	
+	}
+
+
+CDirectPrintProtocolsLoader::~CDirectPrintProtocolsLoader()
+	{
+	LOG("[CDirectPrintProtocolsLoader::~CDirectPrintProtocolsLoader]\t Begin");
+	iProtocols.ResetAndDestroy();
+	iProtocolInfos.ResetAndDestroy();
+	LOG("[CDirectPrintProtocolsLoader::~CDirectPrintProtocolsLoader]\t End");
+	}
+
+
+TInt CDirectPrintProtocolsLoader::GetNumberOfProtocolsAvailable() const
+	{
+	LOG("[CDirectPrintProtocolsLoader::GetNumberOfProtocolsAvailable]\t Begin");	
+	LOG1("[CDirectPrintProtocolsLoader::GetNumberOfProtocolsAvailable]\t return: %d", iAvailableProtocols);
+	LOG("[CDirectPrintProtocolsLoader::GetNumberOfProtocolsAvailable]\t End");
+	return iAvailableProtocols;
+	}
+
+
+MProtPrintingDevice* CDirectPrintProtocolsLoader::GetNextProtocol()
+	{
+	LOG("[CDirectPrintProtocolsLoader::GetNextProtocol]\t Begin");
+	if (iAvailableProtocols <= 0)
+		return NULL;
+
+	if (iProtIndex == iAvailableProtocols)
+		iProtIndex = 0;
+
+	MProtPrintingDevice* temp = iProtocols[iProtIndex];
+	iProtIndex++;
+	LOG("[CDirectPrintProtocolsLoader::GetNextProtocol]\t End");
+	return temp;
+	}
+
+
+MProtPrintingDevice* CDirectPrintProtocolsLoader::GetProtocolAt(TInt aIndex)
+	{
+	LOG("[CDirectPrintProtocolsLoader::GetProtocolAt]\t Begin");
+	if( iAvailableProtocols <= 0 ) return NULL;
+
+	MProtPrintingDevice* temp = NULL;
+
+	if (aIndex < 0)
+		temp = (MProtPrintingDevice*) iProtocols[0];
+	else
+		if (aIndex >= iAvailableProtocols)
+			temp = (MProtPrintingDevice*) iProtocols[iAvailableProtocols - 1];
+		else
+			temp = (MProtPrintingDevice*) iProtocols[aIndex];
+
+	LOG("[CDirectPrintProtocolsLoader::GetProtocolAt]\t End");
+	return temp;
+	
+	}
+
+
+void CDirectPrintProtocolsLoader::Reset()
+	{
+	LOG("[CDirectPrintProtocolsLoader::Reset]\t Begin");
+	iProtIndex = 0;
+	LOG("[CDirectPrintProtocolsLoader::Reset]\t End");
+	}
+
+
+TInt CDirectPrintProtocolsLoader::GetProtocolIndex() const
+	{
+	LOG("[CDirectPrintProtocolsLoader::GetProtocolIndex]\t Begin");
+
+	TInt retVal = iProtIndex - 1;
+	// The next check is probably unnecessary since GetNextProtocol() should only leave iProtIndex with
+	// a value between 1 and iAvailableProtocols
+	if (retVal < 0)
+	{
+		retVal = iProtocols.Count() - 1;
+	}
+	LOG1("[CDirectPrintProtocolsLoader::GetProtocolIndex] return: %d", retVal);
+	LOG("[CDirectPrintProtocolsLoader::GetProtocolIndex]\t End");
+	return retVal;
+	}
+
+
+TUint CDirectPrintProtocolsLoader::SupportedProtocols() const
+	{
+	LOG("[CDirectPrintProtocolsLoader::SupportedProtocols]\t Begin");
+	LOG1("[CDirectPrintProtocolsLoader::SupportedProtocols] return: %d", iSupportedProtocols);
+	LOG("[CDirectPrintProtocolsLoader::SupportedProtocols]\t End");
+	return iSupportedProtocols;
+	}
+
+
+TInt CDirectPrintProtocolsLoader::GetProtocolName(TInt aIndex, TDes& aName, TInt& aUid)
+	{
+	TInt retVal = KErrNone;
+
+	if( iAvailableProtocols <= 0 )
+		{
+		retVal = KErrNotFound;
+		}
+	else
+		{
+		CDirectPrintProtocolInfo* info = NULL;
+
+		if (aIndex < 0)
+			{
+			info = iProtocolInfos[0];
+			}
+		else
+			{
+			if (aIndex >= iAvailableProtocols)
+				{
+				info = iProtocolInfos[iAvailableProtocols - 1];
+				}
+			else
+				{
+				info = iProtocolInfos[aIndex];
+				}
+			}
+
+		if (info)
+			{
+			aName.Copy(info->DisplayName());
+			aUid = info->ImplementationUid().iUid;
+			}
+		}
+
+	return retVal;
+	}
+
+
+CDirectPrintProtocolsLoader::CDirectPrintProtocolsLoader()
+	{
+	LOG("[CDirectPrintProtocolsLoader::CDirectPrintProtocolsLoader]\t Begin");
+	iAvailableProtocols = 0;
+	iProtIndex = 0;
+	iSupportedProtocols = 0;
+	LOG("[CDirectPrintProtocolsLoader::CDirectPrintProtocolsLoader]\t End");
+	}
+
+void CDirectPrintProtocolsLoader::ConstructL()
+	{
+	LOG("[CDirectPrintProtocolsLoader::ConstructL]\t Begin");
+	LoadL();
+	LOG("[CDirectPrintProtocolsLoader::ConstructL]\t End");
+	}
+
+void CDirectPrintProtocolsLoader::LoadL()
+	{
+	LOG("[CDirectPrintProtocolsLoader::LoadL]\t Begin");
+	RImplInfoPtrArray infoArray;
+	REComSession::ListImplementationsL( KDirectPrintEcomUid, infoArray );
+	CleanupClosePushL( infoArray );
+	MProtPrintingDevice* device = NULL;
+	LOG1("CDirectPrintProtocolsLoader::LoadL infoArray.Count(): %d", infoArray.Count());
+	for( TInt i = 0; i < infoArray.Count(); i++ )
+		{
+		LOG1("CDirectPrintProtocolsLoader::LoadL i: %d", i);
+		CImplementationInformation* info = infoArray[i];
+		if (info->Version() == 2)
+			{
+			CDirectPrintProtocolInfo* protocolInfo = CDirectPrintProtocolInfo::NewLC(*info);
+			iProtocolInfos.AppendL( protocolInfo );
+			CleanupStack::Pop( protocolInfo );
+
+			TPtrC8 dataType = info->DataType();
+			TEComResolverParams resolverParams;
+			resolverParams.SetDataType( dataType );
+			resolverParams.SetWildcardMatch( ETrue );
+			TAny* prot = REComSession::CreateImplementationL( KDirectPrintEcomUid,
+					_FOFF( MProtPrintingDevice, iDtor_ID_Key ), NULL, resolverParams );
+			device = reinterpret_cast<MProtPrintingDevice*>(prot);
+			//device->ConstructL( KNullDesC );
+			//device = reinterpret_cast<MProtPrintingDevice*>(prot);
+
+			TCleanupItem clItem( CleanupProt, device );
+			CleanupStack::PushL( clItem );
+			device->ConstructL( KNullDesC );
+			LOG1("CDirectPrintProtocolsLoader::LoadL device->SupportedProtocols(): %d", device->SupportedProtocols());
+			iProtocols.AppendL( device );
+			iSupportedProtocols |= device->SupportedProtocols();
+			CleanupStack::Pop(); // device
+			device = NULL;
+			}
+		}
+
+	infoArray.ResetAndDestroy();
+	CleanupStack::PopAndDestroy(); // infoArray
+
+	iAvailableProtocols = iProtocols.Count();
+	LOG("[CDirectPrintProtocolsLoader::LoadL]\t End");
+	}
+
+void CDirectPrintProtocolsLoader::CleanupProt( TAny* aData )
+    {
+    LOG("[CDirectPrintProtocolsLoader::CleanupProt]\t Begin");
+    MProtPrintingDevice* prot = (MProtPrintingDevice*)aData;
+    delete prot;
+    LOG("[CDirectPrintProtocolsLoader::CleanupProt]\t End");
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintrsimageparser.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the CDirectPrintRsImageParser class definition.
+*
+*/
+
+
+// DirectPrintRsImageParser.cpp: implementation of the CDirectPrintRsImageParser class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "directprintrsimageparser.h"
+#include "clog.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CDirectPrintRsImageParser* CDirectPrintRsImageParser::NewLC()
+	{
+	CDirectPrintRsImageParser* self = new (ELeave) CDirectPrintRsImageParser();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+
+void CDirectPrintRsImageParser::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	}
+
+
+CDirectPrintRsImageParser::~CDirectPrintRsImageParser()
+	{
+	iFs.Close();
+	}
+
+CDirectPrintRsImageParser::CDirectPrintRsImageParser()
+	{
+	}
+
+void CDirectPrintRsImageParser::ValidateL( const TDesC& aFileName, TBool& aValid, TInt& aErr )
+	{
+	LOG1("CDirectPrintRsImageParser::ValidateL aFileName: %S", &aFileName);
+	aValid = EFalse;
+	TInt dataPos( 0 );
+	TBuf8<9> imgData;
+	TBool bAllDone( EFalse );
+	TInt height( 0 );
+	TInt width( 0 );
+	TInt startOfDataOffset( 0 );
+	TInt encoding( EUnknown );
+	TInt size( 0 );
+
+	RFile file;
+	aErr = file.Open( iFs, aFileName, EFileRead | EFileShareReadersOnly );
+	LOG1("CDirectPrintRsImageParser::ValidateL file.Open (shareread mode): %d", aErr);
+	if ( aErr != KErrNone )
+		{
+		aErr = file.Open( iFs, aFileName, EFileRead | EFileShareAny );
+		LOG1("CDirectPrintRsImageParser::ValidateL file.Open (shareany mode): %d", aErr);
+		}
+
+	// magic numbers used here are JPEG format related
+	else // if ( aErr == KErrNone ) // 1 IF
+		{
+		CleanupClosePushL( file );
+		aErr = file.Size( size );
+		if( size && aErr == KErrNone ) // 2 IF
+			{
+			aErr = ReadData( file, dataPos, imgData );
+			if( aErr == KErrNone && imgData.Length() == 9 ) // 3 IF
+				{
+				// First check for the JPEG header "FF D8"
+				if( imgData[0] == 0xff && imgData[1] == 0xd8 ) // 4 IF
+					{
+					// Start skipping headers until we find the one we're looking for
+					dataPos = (imgData[4] << 8) + imgData[5] + 4;
+
+					aErr = ReadData( file, dataPos, imgData );
+
+					while( aErr == KErrNone && imgData.Length() == 9 && imgData[0] == 0xff )
+						{
+						switch( imgData[1] )
+							{
+							case 0xda:
+								// Start of data
+								startOfDataOffset = dataPos + ((imgData[2] << 8) + imgData[3] + 2);
+								bAllDone = ETrue;
+								break;
+
+							case EDiffArithLossless:
+								encoding = imgData[1];
+								height = (imgData[5] << 8) + imgData[6];
+								width = (imgData[7] << 8) + imgData[8];
+								break;
+								
+							default:
+								break;
+							} // SWITCH
+
+							if( bAllDone )
+								{
+								break;
+								}
+							else
+								{
+								dataPos += (imgData[2] << 8) + imgData[3] + 2;
+								aErr = ReadData( file, dataPos, imgData );
+								}
+						} // WHILE
+					} // 4 IF
+				else
+					{
+					// Not a JPG
+					aErr = KErrCorrupt;
+					}
+				} // 3 IF
+			} // 2 IF
+			
+		CleanupStack::PopAndDestroy( &file ); 
+		} // 1 IF
+
+	aValid = Validate( startOfDataOffset, width, height, size, encoding, aErr );
+		
+	LOG1("CDirectPrintRsImageParser::ValidateL aValid: %d", aValid);
+	LOG1("CDirectPrintRsImageParser::ValidateL aErr: %d", aErr);
+	LOG("CDirectPrintRsImageParser::ValidateL end");
+	}
+
+TBool CDirectPrintRsImageParser::Validate( TInt aStartOfDataOffset, TInt aWidth, TInt aHeight, TInt aSize, TInt aEncoding, TInt aErr )
+	{
+	if ( aStartOfDataOffset && aWidth && aHeight && aSize && aEncoding && !aErr )
+		{
+		return ETrue;
+		}
+	else 
+		{
+		return EFalse;
+		}
+	}
+
+TInt CDirectPrintRsImageParser::ReadData( RFile& aFile, TInt aStartByte, TDes8& aData )
+	{
+	LOG("CDirectPrintRsImageParser::ReadData begin");
+	TInt err = aFile.Read( aStartByte, aData );
+	LOG1("CDirectPrintRsImageParser::ReadData return: %d", err);
+	return err;	
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintscheduler.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include "directprintscheduler.h"
+#include "mprotprintingdevice.h"
+#include "tidleevent.h"
+#include "printmessagecodes.h"
+#include "clog.h"
+
+void CDirectPrintScheduler::Error(TInt aError) const
+	{
+	LOG1("CDirectPrintScheduler::Error aError: %d", aError);
+	if( iIdleObserver )
+		{
+		TEvent event;
+		event.iProtocol = iCurrentProtocol;
+		event.iSeverity = ESevere;
+		event.iEventType = EAsynchronousLeave;
+		LOG("CDirectPrintScheduler::Error informing observer");		
+		iIdleObserver->StatusEvent( event, aError, ENoMessage );
+		}
+	LOG("CDirectPrintScheduler::Error end");
+	}
+
+void CDirectPrintScheduler::SetIdleObserver( MProtIdleObserver& aIdleObserver )
+	{
+	LOG("CDirectPrintScheduler::SetIdleObserver begin");
+	iIdleObserver = &aIdleObserver;
+	LOG("CDirectPrintScheduler::SetIdleObserver end");
+	}
+
+void CDirectPrintScheduler::SetCurrentProtocol( TInt aProtocol )
+	{
+	LOG1("CDirectPrintScheduler::SetCurrentProtocol aProtocol: %d", aProtocol);
+	iCurrentProtocol = aProtocol;
+	LOG("CDirectPrintScheduler::SetCurrentProtocol end");
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintserver.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include "directprintserver.h"
+#include "directprintclientserver.h"
+#include "directprintsession.h"
+#include "clog.h"
+#include "directprintbody.h"
+ 
+namespace
+	{
+	// panic
+	_LIT( KDirectPrintServerPanic, "CIPSer" );
+	enum TDirectPrintServerPanic
+		{
+		EBadDescriptor
+		};
+	
+	void PanicClient( const RMessage2& aMessage, TDirectPrintServerPanic aCategory )
+		{
+		aMessage.Panic( KDirectPrintServerPanic, aCategory );
+		}
+	}
+
+
+CDirectPrintServer* CDirectPrintServer::NewLC()
+    {
+	CDirectPrintServer* server = new (ELeave) CDirectPrintServer();
+    CleanupStack::PushL( server ) ;
+    server->ConstructL();
+    return server;
+    }
+
+        
+CDirectPrintServer::CDirectPrintServer()
+	: CPolicyServer( 0, KDirectPrintPolicy, ESharableSessions )
+	{
+	}    
+
+CDirectPrintServer::~CDirectPrintServer()
+    {
+    LOG("CDirectPrintServer::~CDirectPrintServer begin");
+    delete iEngine;
+	iFbs.Disconnect();
+	LOG("CDirectPrintServer::~CDirectPrintServer end");
+    }
+
+void CDirectPrintServer::ConstructL()
+    {  
+    LOG("CDirectPrintServer::ConstructL begin");          
+    StartL( KDirectPrintServerName );    
+    User::LeaveIfError( iFbs.Connect() );        
+    iEngine = CDirectPrintBody::NewL();
+    LOG("CDirectPrintServer::ConstructL end");
+    }
+
+void CDirectPrintServer::AddSession()
+	{
+	LOG("CDirectPrintServer::AddSession begin");
+	++iConnsCount;
+	LOG("CDirectPrintServer::AddSession end");
+	}
+
+void CDirectPrintServer::RemoveSession()
+	{
+	--iConnsCount;
+	LOG1("CDirectPrintServer::RemoveSession iConnsCount: %d", iConnsCount);
+	if( iConnsCount == 0 )
+		{
+		delete iEngine;
+		iEngine = NULL;
+		iFbs.Disconnect();
+		CActiveScheduler::Stop();
+		}
+	LOG("CDirectPrintServer::RemoveSession end");
+	}
+
+TInt CDirectPrintServer::SessionCount() const
+	{
+	LOG("CDirectPrintServer::SessionCount begin");
+	LOG1("CDirectPrintServer::SessionCount return: %d", iConnsCount);
+	return iConnsCount;
+	}
+
+TInt CDirectPrintServer::RunError( TInt aError )
+    {
+    LOG1("CDirectPrintServer::RunError aError: %d", aError);
+	if( aError == KErrBadDescriptor )
+        {        
+        PanicClient( Message(), EBadDescriptor );
+        }
+	else
+        {
+		Message().Complete( aError );
+        }	
+	ReStart();
+	LOG("CDirectPrintServer::RunError end");
+	return KErrNone;
+    }
+
+    
+CSession2* CDirectPrintServer::NewSessionL( const TVersion& aVersion, const RMessage2& ) const
+	{
+	LOG("CDirectPrintServer::NewSessionL begin");
+	TBool supported = User::QueryVersionSupported( TVersion( KDirectPrintServerMajor,
+													KDirectPrintServerMinor,
+													KDirectPrintServerBuild ),
+													aVersion );	
+	if( !supported )
+        {
+		User::Leave( KErrNotSupported );
+        }
+        
+    LOG("CDirectPrintServer::NewSessionL end");	
+	return new (ELeave) CDirectPrintSession();
+	}
+	
+TInt CDirectPrintServer::ReserveEngine( const CSession2* aSession )
+	{
+	LOG("CDirectPrintServer::ReserveEngine begin");
+	TInt err( KErrInUse );
+	if( iEngineHolder == aSession || !iEngineHolder )
+		{
+		iEngineHolder = aSession;
+		err = KErrNone;
+		}
+	LOG1("CDirectPrintServer::ReserveEngine return: %d", err);
+	return err;	
+	}
+
+TInt CDirectPrintServer::ReleaseEngine( const CSession2* aSession )
+	{
+	LOG("CDirectPrintServer::ReleaseEngine begin");
+	TInt err( KErrInUse );
+	if( iEngineHolder == aSession || !iEngineHolder )
+		{
+		iEngineHolder = NULL;
+		err = KErrNone;
+		}
+	LOG1("CDirectPrintServer::ReleaseEngine return: %d", err);
+	return err;		
+	}
+
+CDirectPrintBody& CDirectPrintServer::Engine() const
+	{
+	LOG("CDirectPrintServer::Engine begin");
+	LOG("CDirectPrintServer::Engine end");
+	return *iEngine;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintserverjobguard.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,237 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+
+#include "directprintserverjobguard.h"
+#include "directprintbody.h"
+#include "clog.h"
+#include "directprintmessage.h"
+
+CDirectPrintServerJobGuard* CDirectPrintServerJobGuard::NewL( CDirectPrintBody& aEngine )
+	{
+	CDirectPrintServerJobGuard* self = new ( ELeave ) CDirectPrintServerJobGuard( aEngine );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop();    // self
+	return self;
+	}
+
+CDirectPrintServerJobGuard::CDirectPrintServerJobGuard( CDirectPrintBody& aEngine )
+	: iEngine( aEngine )
+	, iRequestActive( EFalse )
+	{
+	}
+
+CDirectPrintServerJobGuard::~CDirectPrintServerJobGuard()
+	{
+	LOG("CDirectPrintServerJobGuard::~CDirectPrintServerJobGuard begin");
+	iImages.ResetAndDestroy();
+	iImages.Close();
+	iBuffer.Close();
+	LOG("CDirectPrintServerJobGuard::~CDirectPrintServerJobGuard end");
+	}
+
+void CDirectPrintServerJobGuard::ConstructL()
+	{
+	}
+
+void CDirectPrintServerJobGuard::PrepareL( TDpMessage& aMessage )
+	{
+	LOG("CDirectPrintServerJobGuard::PrepareL begin");
+	TInt len = aMessage.GetDesLength( 0 );
+	HBufC* buf = HBufC::NewLC( len );
+	TPtr ptr( buf->Des() );
+	aMessage.ReadL( 0, ptr );
+	iImages.AppendL( buf );
+	CleanupStack::Pop(); // buf
+	LOG("CDirectPrintServerJobGuard::PrepareL end");
+	}
+
+void CDirectPrintServerJobGuard::Stop()	
+	{
+	LOG("CDirectPrintServerJobGuard::Stop begin");
+	iImages.ResetAndDestroy();
+	if( iRequestActive )
+		{
+		LOG("CDirectPrintServerJobGuard::Stop cancelling...");
+		iMessage->Complete( KErrCancel );
+		iRequestActive = EFalse;
+		}
+	LOG("CDirectPrintServerJobGuard::Stop end");
+	}
+
+TInt CDirectPrintServerJobGuard::CreateL( TDpMessage& aMessage )
+	{
+	LOG("CDirectPrintServerJobGuard::CreateL begin");
+	iRequestActive = EFalse;
+	iBuffer.Reset();
+	TInt printer = aMessage.Int0();
+	TInt err = iEngine.CreatePrintJobL( printer, iImages, *this );
+	LOG1("CDirectPrintServerJobGuard::CreateL err: %d", err);
+	if( err )
+		{
+		iImages.ResetAndDestroy();
+		}
+	LOG1("CDirectPrintServerJobGuard::CreateL return: %d", err);
+	return err;
+	}
+
+void CDirectPrintServerJobGuard::ContinueCreateL( TDpMessage& aMessage )
+	{
+	LOG("CDirectPrintServerJobGuard::ContinueCreateL begin");
+	if( iMessage ) iMessage->SetDisposable( ETrue );
+	iMessage = &aMessage;
+	iRequestActive = ETrue;
+	if( iBuffer.Count() )
+		{
+		LOG("CDirectPrintServerJobGuard::ContinueCreateL before ProcessL");
+		Process();
+		LOG("CDirectPrintServerJobGuard::ContinueCreateL after ProcessL");
+		}
+	LOG("CDirectPrintServerJobGuard::ContinueCreateL end");
+	}
+
+void CDirectPrintServerJobGuard::PrintJobProgressEvent(TInt aStatus, TInt aPercentCompletion, TInt aJobStateCode)
+	{
+	LOG("CDirectPrintServerJobGuard::PrintJobProgressEvent begin");
+	LOG1("CDirectPrintServerJobGuard::PrintJobProgressEvent aStatus: %d", aStatus);
+	LOG1("CDirectPrintServerJobGuard::PrintJobProgressEvent aPercentCompletion: %d", aPercentCompletion);
+	LOG1("CDirectPrintServerJobGuard::PrintJobProgressEvent aJobStateCode: %d", aJobStateCode);
+	TDirectPrintJobGuardData data;
+	data.iCb = TDirectPrintJobGuardData::EProgressEventCb;
+	data.iStatus = aStatus;
+	data.iPercentCompletion = aPercentCompletion;
+	data.iJobStateCode = aJobStateCode;
+	TRAPD( err, DoPreProcessL( data ) );
+	LOG1("CDirectPrintServerJobGuard::PrintJobProgressEvent DoPreProcessL's TRAP err: %d", err);
+	Process( err );
+	LOG("CDirectPrintServerJobGuard::PrintJobProgressEvent end");
+	}
+
+void CDirectPrintServerJobGuard::PrintJobErrorEvent(TInt aError, TInt aErrorStringCode)
+	{
+	LOG("CDirectPrintServerJobGuard::PrintJobErrorEvent begin");
+	LOG1("CDirectPrintServerJobGuard::PrintJobErrorEvent aError: %d", aError);
+	LOG1("CDirectPrintServerJobGuard::PrintJobErrorEvent aErrorStringCode: %d", aErrorStringCode);
+	TDirectPrintJobGuardData data;
+	data.iCb = TDirectPrintJobGuardData::EErrorEventCb;
+	data.iError = aError;
+	data.iErrorStringCode = aErrorStringCode;
+	TRAPD( err, DoPreProcessL( data ) );
+	LOG1("CDirectPrintServerJobGuard::PrintJobErrorEvent DoPreProcessL's TRAP err: %d", err);
+	Process( err );
+	LOG("CDirectPrintServerJobGuard::PrintJobErrorEvent end");
+	}
+
+void CDirectPrintServerJobGuard::PrinterStatusEvent(TInt aError, TInt aErrorStringCode)
+	{
+	LOG("CDirectPrintServerJobGuard::PrinterStatusEvent begin");
+	LOG1("CDirectPrintServerJobGuard::PrinterStatusEvent aError: %d", aError);
+	LOG1("CDirectPrintServerJobGuard::PrinterStatusEvent aErrorStringCode: %d", aErrorStringCode);
+	TDirectPrintJobGuardData data;
+	data.iCb = TDirectPrintJobGuardData::EStatusEventCb;
+	data.iError = aError;
+	data.iErrorStringCode = aErrorStringCode;
+	TRAPD( err, DoPreProcessL( data ) );
+	LOG1("CDirectPrintServerJobGuard::PrinterStatusEvent DoPreProcessL's TRAP err: %d", err);
+	Process( err );
+	LOG("CDirectPrintServerJobGuard::PrinterStatusEvent end");
+	}
+
+void CDirectPrintServerJobGuard::PreviewImageEvent(TInt aFsBitmapHandle)
+	{
+	LOG("CDirectPrintServerJobGuard::PreviewImageEvent begin");
+	LOG1("CDirectPrintServerJobGuard::PreviewImageEvent aFsBitmapHandle: %d", aFsBitmapHandle);
+	TDirectPrintJobGuardData data;
+	data.iCb = TDirectPrintJobGuardData::EImageEventCb;
+	data.iFsBitmapHandle = aFsBitmapHandle;
+	TRAPD( err, DoPreProcessL( data ) );
+	LOG1("CDirectPrintServerJobGuard::PreviewImageEvent DoPreProcessL's TRAP err: %d", err);
+	Process( err );
+	LOG("CDirectPrintServerJobGuard::PreviewImageEvent end");
+	}
+
+void CDirectPrintServerJobGuard::DoPreProcessL( const TDirectPrintJobGuardData& aData )
+	{
+	LOG("CDirectPrintServerJobGuard::DoPreProcessL begin");
+	User::LeaveIfError( iBuffer.Append( aData ) );
+	LOG("CDirectPrintServerJobGuard::DoPreProcessL end");
+	}
+
+void CDirectPrintServerJobGuard::DoProcessL()
+	{
+	LOG("CDirectPrintServerJobGuard::ProcessL begin");
+	if( iBuffer.Count() && iRequestActive )
+		{
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 1");
+		TPtr8 ptr(reinterpret_cast<TUint8*>(&(iBuffer[0])), sizeof(iBuffer[0]), sizeof(iBuffer[0]));
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 2");
+		iMessage->WriteL( 0, ptr );
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 3");
+		iMessage->Complete( KErrNone );
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 4");
+		iRequestActive = EFalse;
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 5");
+		iBuffer.Remove( 0 );
+		LOG("CDirectPrintServerJobGuard::DoProcessL step 6");
+		}	
+	LOG("CDirectPrintServerJobGuard::ProcessL end");
+	}
+
+void CDirectPrintServerJobGuard::Process( TInt aErr )
+	{
+	LOG("CDirectPrintServerJobGuard::Process begin");
+	if( aErr )
+		{
+		LOG1("CDirectPrintServerJobGuard::Process aErr: %d", aErr);
+		iMessage->Complete( aErr );
+		iRequestActive = EFalse;
+		}
+	else
+		{
+		LOG("CDirectPrintServerJobGuard::Process calling DoProcessL");
+		TRAPD( err, DoProcessL() );
+		LOG1("CDirectPrintServerJobGuard::Process DoProcessL's TRAP err: %d", err);
+		if( err )
+			{
+			iMessage->Complete( err );
+			iRequestActive = EFalse;
+			}
+		}
+	LOG("CDirectPrintServerJobGuard::Process end");	
+	}
+
+
+
+// DEPRECATED
+
+void CDirectPrintServerJobGuard::ShowMessageL( TInt /*aMsgLine1Code*/, TInt /*aMsgLine2Code*/ )
+	{
+	}
+
+TBool CDirectPrintServerJobGuard::AskYesNoQuestionL( TInt /*aMsgLine1Code*/, TInt /*aMsgLine2Code*/ )
+	{
+	return EFalse;
+	}
+
+const TDesC& CDirectPrintServerJobGuard::AskForInputL( TInt /*aMsgLine1Code*/, TInt /*aMsgLine2Code*/ )
+	{
+	return KNullDesC;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/directprintsession.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,823 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifdef _DIRECTPRINT_USE_USB
+#include <usbman.h>
+#include <usbstates.h>
+#include <usbpersonalityids.h>
+#endif // _DIRECTPRINT_USE_USB
+
+#include "directprintsession.h"
+#include "directprintclientserver.h"
+#include "directprintserver.h"
+#include "clog.h"
+#include "directprintbody.h"
+#include "directprintserverjobguard.h"
+#include "directprintnumofcopies.h"
+ 
+namespace
+	{
+	// panic
+	_LIT( KDirectPrintSessionPanic, "CIPSes" );
+	enum TDirectPrintSessionPanic
+		{
+		ENotSupported
+		};
+	
+	void PanicClient( const TDpMessage& aMessage, TDirectPrintSessionPanic aCategory )
+		{
+		aMessage.Panic( KDirectPrintSessionPanic, aCategory );
+		}
+	}
+
+CDirectPrintSession::~CDirectPrintSession()
+	{ 
+	LOG("CDirectPrintSession::~CDirectPrintSession begin");
+	delete iNumOfCopies;
+	delete iJobGuard;
+	iCapabilityIDs.Close();
+	iMsgWrappers.ResetAndDestroy();
+	iMsgWrappers.Close();
+	Server().ReleaseEngine( this );
+	Server().RemoveSession();
+	LOG("CDirectPrintSession::~CDirectPrintSession end");
+	}
+
+CDirectPrintServer& CDirectPrintSession::Server()
+    {
+	return *static_cast<CDirectPrintServer*>( const_cast<CServer2*>( CSession2::Server() ) );
+    }
+
+void CDirectPrintSession::CreateL()
+    {
+    LOG("CDirectPrintSession::CreateL begin");
+	Server().AddSession();
+	iJobGuard = CDirectPrintServerJobGuard::NewL( Server().Engine() );
+	iNumOfCopies = CDirectPrintNumOfCopies::NewL();
+	iConnected = ETrue;
+	LOG("CDirectPrintSession::CreateL end");
+    }
+
+void CDirectPrintSession::Disconnect(const RMessage2 &aMessage)
+	{
+	LOG("CDirectPrintSession::Disconnect begin");
+//	Server().Engine().HandleSessionDisconnect( iIdleGuard, iDiscoveryGuard, iJobGuard );
+	Server().Engine().HandleSessionDisconnect( NULL, NULL, iJobGuard );
+	iConnected = EFalse;	
+	CSession2::Disconnect( aMessage );
+	LOG("CDirectPrintSession::Disconnect end");
+	}
+
+void CDirectPrintSession::ServiceL( const RMessage2& aMessage )
+    {
+    LOG1("CDirectPrintSession::ServiceL aMessage.Function(): %d", aMessage.Function());
+    
+    // wrapper array clean begin
+	TInt index = iMsgWrappers.Count();
+	LOG1("CDirectPrintSession::ServiceL index: %d", index);
+	TBool result( EFalse );
+	while( --index >= 0 && !result )
+		{
+		if( ( iMsgWrappers[index] )->Disposable() )
+			{
+			TDpMessage* toDispose = iMsgWrappers[index];
+			iMsgWrappers.Remove( index );
+			delete toDispose;
+			toDispose = NULL;
+			result = ETrue;
+			}
+		}	
+	// wrapper array clean end
+    
+    TDpMessage* msgWrapper = new (ELeave) TDpMessage( aMessage, iConnected );    
+    TInt err = iMsgWrappers.Insert( msgWrapper, 0 );
+    if( err )
+    	{
+    	delete msgWrapper;
+    	User::Leave( err );
+    	}
+    else
+    	{
+    	msgWrapper = NULL;
+    	}    
+      
+    TInt messageIndex = aMessage.Function();
+    
+    if ( messageIndex <= EContinuePrintJob )
+		{
+	    ServiceFirstPartL( messageIndex );
+		}
+    else if ( messageIndex >= ERemoveCachedPrinter && messageIndex <= EGetPrinterCapHigh )
+    	{
+		ServiceSecondPartL( messageIndex );				
+    	}		
+    else if ( messageIndex >= EGetPrinterCapEnumCount && messageIndex <= EGetProtocolName )
+    	{
+		ServiceThirdPartL ( messageIndex );
+    	}
+    else 
+    	{		
+    	PanicClient( *iMsgWrappers[0], ENotSupported );    
+    	}	
+
+	LOG("CDirectPrintSession::ServiceL end");
+    }
+void CDirectPrintSession::ServiceFirstPartL( TInt aIndex )
+	{
+    switch( aIndex )
+		{
+		case ECountConnections:
+			CountConnectionsL( *iMsgWrappers[0] );
+			break;	
+			
+		case ESetForeground:
+			SetForegroundL( *iMsgWrappers[0] );
+			break;	
+			
+		case EReserveEngine:
+			ReserveEngine( *iMsgWrappers[0] );
+			break;
+
+		case EReleaseEngine:
+			ReleaseEngine( *iMsgWrappers[0] );
+			break;	
+
+		case ESupportedProtocols:
+			SupportedProtocols( *iMsgWrappers[0] );
+			break;	
+			
+		case EGetNumPrintPages:
+			GetNumPrintPages( *iMsgWrappers[0] );
+			break;	
+			
+		case EGetJobStatus:
+			GetJobStatus( *iMsgWrappers[0] );
+			break;	
+			
+		case EGetPrinterStatus:
+			GetPrinterStatus( *iMsgWrappers[0] );
+			break;	
+			
+		case ECancelDiscovery:
+			CancelDiscovery( *iMsgWrappers[0] );
+			break;	
+			
+		case ESubmitPrintJob:
+			SubmitPrintJobL( *iMsgWrappers[0] );
+			break;	
+			
+		case ECancelPrintJob:
+			CancelPrintJob( *iMsgWrappers[0] );
+			break;
+			
+		case EContinuePrintJob:
+			ContinuePrintJobL( *iMsgWrappers[0] );
+			break;
+			
+		default:
+		LOG1("[CDirectPrintSession::ServiceFirstPartL]\t Method reached to an end with index: %d", aIndex);
+			break;
+		}
+	}
+            
+void CDirectPrintSession::ServiceSecondPartL( TInt aIndex )
+	{
+    switch( aIndex )
+		{
+		case ERemoveCachedPrinter:
+			RemoveCachedPrinterL( *iMsgWrappers[0] );
+			break;
+		
+		case EGetJobTemplateIcon:
+			GetJobTemplateIconL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetNumPreviewPages:
+			GetNumPreviewPages( *iMsgWrappers[0] );
+			break;
+		
+		case ESetJobSetting:
+			SetJobSettingL( *iMsgWrappers[0] );
+			break;	
+		
+		case EGetJobSetting:
+			GetJobSettingL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetPrinterCapability:
+			GetPrinterCapabilityL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetPrinterCapId:
+			GetPrinterCapIdL( *iMsgWrappers[0] );
+			break;
+					
+		case EGetPrinterCapType:
+			GetPrinterCapTypeL( *iMsgWrappers[0] );
+			break;
+		
+    	case EGetPrinterCapDef:
+			GetPrinterCapDefL( *iMsgWrappers[0] );
+			break;
+    				
+		case EGetPrinterCapLow:
+			GetPrinterCapLowL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetPrinterCapHigh:
+			GetPrinterCapHighL( *iMsgWrappers[0] );
+			break;	
+			
+		default:
+			LOG1("[CDirectPrintSession::ServiceSecondPartL]\t Method reached to an end with index: %d", aIndex);
+			break;
+		}
+	}
+
+void CDirectPrintSession::ServiceThirdPartL( TInt aIndex )
+	{
+    switch( aIndex )
+		{
+		case EGetPrinterCapEnumCount:
+			GetPrinterCapEnumCountL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetPrinterCapEnum:
+			GetPrinterCapEnumL( *iMsgWrappers[0] );
+			break;	
+																										
+		case EGetPrinterCapabilityIDsCount:
+			GetPrinterCapabilityIDsCountL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetPrinterCapabilityID:
+			GetPrinterCapabilityIDL( *iMsgWrappers[0] );
+			break;
+				
+		case ERegisterIdleObserver:
+			RegisterIdleObserverL( *iMsgWrappers[0] );
+			break;
+			
+		case ECancelRegisterIdleObserver:
+			CancelRegisterIdleObserverL( *iMsgWrappers[0] );
+			break;
+				
+		case EStartDiscovery:
+			StartDiscoveryL( *iMsgWrappers[0] );
+			break;
+			
+		case EContinueDiscovery:
+			ContinueDiscoveryL( *iMsgWrappers[0] );
+			break;
+			
+		case EPrepareJob:
+			PrepareJobL( *iMsgWrappers[0] );
+			break;
+			
+		case ECreateJob:
+			CreateJobL( *iMsgWrappers[0] );
+			break;			
+		
+		case EContinueCreateJob:
+			ContinueCreateJobL( *iMsgWrappers[0] );
+			break;
+			
+		case ECancelStartDiscovery:
+			CancelStartDiscoveryL( *iMsgWrappers[0] );
+			break;
+			
+		case ECancelCreateJob:
+			CancelCreateJobL( *iMsgWrappers[0] );
+			break;
+			
+		case EIsPictBridgeMode:
+			IsPictBridgeModeL( *iMsgWrappers[0] );
+			break;
+			
+		case ESetNumberOfCopiesCount:
+			SetNumberOfCopiesCountL( *iMsgWrappers[0] );
+			break;
+			
+		case ESetNumberOfCopies:
+			SetNumberOfCopiesL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetProtocolNamesCount:
+			GetProtocolNamesCountL( *iMsgWrappers[0] );
+			break;
+			
+		case EGetProtocolName:
+			GetProtocolNameL( *iMsgWrappers[0] );
+			break;
+			
+		default:
+			LOG1("[CDirectPrintSession::ServiceThirdPartL]\t Method reached to an end with index: %d", aIndex);
+			break;
+		}
+	}
+
+
+void CDirectPrintSession::CountConnectionsL( TDpMessage& aMessage )
+	{	
+	TInt count = Server().SessionCount();
+	TPckgC<TInt> countDes( count );
+	aMessage.WriteL( 0, countDes );
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNone );
+	}
+		
+void CDirectPrintSession::SetForegroundL( TDpMessage& aMessage )
+	{
+	TInt fg = aMessage.Int0();
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNone );
+	}
+	
+void CDirectPrintSession::ReserveEngine( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::ReleaseEngine( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReleaseEngine( this );
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::SupportedProtocols( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	if( !err )	
+		{
+		TInt protocols = Server().Engine().SupportedProtocols();
+		aMessage.Complete( protocols );	
+		}
+	else
+		{
+		aMessage.Complete( err );	
+		}
+	}
+	
+void CDirectPrintSession::GetNumPrintPages( TDpMessage& aMessage )
+{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	if( !err )	
+		{
+		TInt pages = Server().Engine().GetNumPrintPages();
+		aMessage.Complete( pages );	
+		}
+	else
+		{
+		aMessage.Complete( err );	
+		}
+	}	
+
+void CDirectPrintSession::GetJobStatus( TDpMessage& aMessage )
+{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	if( !err )	
+		{
+		TInt status = Server().Engine().GetJobStatus();
+		aMessage.Complete( status );	
+		}
+	else
+		{
+		aMessage.Complete( err );	
+		}
+	}	
+	
+void CDirectPrintSession::GetPrinterStatus( TDpMessage& aMessage )
+{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	if( !err )	
+		{
+		TInt id = aMessage.Int0();
+		TInt status = Server().Engine().GetPrinterStatus( id );
+		aMessage.Complete( status );	
+		}
+	else
+		{
+		aMessage.Complete( err );	
+		}
+	}
+	
+void CDirectPrintSession::CancelDiscovery( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		Server().Engine().CancelDiscovery();
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::SubmitPrintJobL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		Server().Engine().SubmitPrintJobL();			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::CancelPrintJob( TDpMessage& aMessage )
+	{	
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		err = Server().Engine().CancelPrintJob();
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::ContinuePrintJobL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		err = Server().Engine().ContinuePrintJobL();			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}			
+
+void CDirectPrintSession::RemoveCachedPrinterL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		TInt id = aMessage.Int0();
+		err = Server().Engine().RemoveCachedPrinterL( id );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::GetJobTemplateIconL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		TInt id = aMessage.Int0();
+		TInt handle;
+		err = Server().Engine().GetJobTemplateIconL( id, handle );
+		TPckgC<TInt> handleDes( handle );
+		aMessage.WriteL( 1, handleDes );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::GetNumPreviewPages( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	aMessage.SetDisposable( ETrue );
+	if( !err )
+		{
+		TInt num = Server().Engine().GetNumPreviewPages();
+		aMessage.Complete( num );
+		}
+	else
+		{
+		aMessage.Complete( err );
+		}
+	}
+	
+void CDirectPrintSession::SetJobSettingL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		TInt capabilityID = aMessage.Int0();
+		TInt value = aMessage.Int1();
+		TInt affectedCapability;
+		
+		LOG2("CDirectPrintSession::SetJobSettingL || capabilityID = %d, value = %d", capabilityID, value );
+		
+		err = Server().Engine().SetJobSettingL( capabilityID, value, affectedCapability );
+		TPckgC<TInt> affectedCapabilityDes( affectedCapability );
+		aMessage.WriteL( 2, affectedCapabilityDes );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::GetJobSettingL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		TInt capabilityID = aMessage.Int0();
+		TInt value;		
+		err = Server().Engine().GetJobSetting( capabilityID, value );
+		TPckgC<TInt> valueDes( value );
+		aMessage.WriteL( 1, valueDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}			
+	
+void CDirectPrintSession::GetPrinterCapabilityL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		TInt printerID = aMessage.Int0();
+		TInt capabilityID = aMessage.Int1();	
+		err = Server().Engine().GetPrinterCapabilityL( printerID, capabilityID, iCapability );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+	
+void CDirectPrintSession::GetPrinterCapIdL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> capIdDes( iCapability.iCapabilityID );
+		aMessage.WriteL( 0, capIdDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapTypeL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> typeDes( iCapability.iType );
+		aMessage.WriteL( 0, typeDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapDefL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> defDes( iCapability.iDefaultValue );
+		aMessage.WriteL( 0, defDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapLowL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> lowDes( iCapability.iLow );
+		aMessage.WriteL( 0, lowDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapHighL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> highDes( iCapability.iHigh );
+		aMessage.WriteL( 0, highDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapEnumCountL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{		
+		TPckgC<TInt> countDes( iCapability.iEnumCount );
+		aMessage.WriteL( 0, countDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapEnumL( TDpMessage& aMessage )	
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		TInt index = aMessage.Int0();		
+		TPckgC<TInt> enumDes( iCapability.iEnumCodes[index] );
+		aMessage.WriteL( 1, enumDes );			
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+	
+
+void CDirectPrintSession::GetPrinterCapabilityIDsCountL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		iCapabilityIDs.Reset();
+		TInt printerID = aMessage.Int0();	
+		err = Server().Engine().GetPrinterCapabilityIDsL( printerID, iCapabilityIDs );
+		if( !err )
+			{
+			TInt count = iCapabilityIDs.Count();
+			TPckgC<TInt> countDes( count );
+			aMessage.WriteL( 1, countDes );	
+			}
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+
+void CDirectPrintSession::GetPrinterCapabilityIDL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		TInt index = aMessage.Int0();
+		TInt id = iCapabilityIDs[index];
+		TPckgC<TInt> idDes( id );
+		aMessage.WriteL( 1, idDes );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::RegisterIdleObserverL( TDpMessage& aMessage )
+	{
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNotSupported );
+	}
+	
+void CDirectPrintSession::CancelRegisterIdleObserverL( TDpMessage& aMessage )
+	{
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNotSupported );
+	}
+	
+void CDirectPrintSession::StartDiscoveryL( TDpMessage& aMessage )
+	{
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNotSupported );
+	}
+
+void CDirectPrintSession::ContinueDiscoveryL( TDpMessage& aMessage )
+	{
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNotSupported );
+	}
+	
+void CDirectPrintSession::PrepareJobL( TDpMessage& aMessage )
+	{
+	iJobGuard->PrepareL( aMessage );
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNone );
+	}
+
+void CDirectPrintSession::CreateJobL( TDpMessage& aMessage )
+	{
+	TInt err = iJobGuard->CreateL( aMessage );
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+	
+void CDirectPrintSession::ContinueCreateJobL( TDpMessage& aMessage )
+	{
+	iJobGuard->ContinueCreateL( aMessage );
+	}
+	
+void CDirectPrintSession::CancelStartDiscoveryL( TDpMessage& aMessage )
+	{
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( KErrNotSupported );
+	}
+
+void CDirectPrintSession::CancelCreateJobL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )	
+		{
+		iJobGuard->Stop();					
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );	
+	}
+	
+void CDirectPrintSession::IsPictBridgeModeL( TDpMessage& aMessage )
+	{
+#ifdef _DIRECTPRINT_USE_USB
+		RUsb usbManager;
+		TUsbDeviceState dState;
+		TInt personality;
+		TInt err = EFalse;
+		User::LeaveIfError( usbManager.Connect());
+		User::LeaveIfError( usbManager.GetDeviceState(dState));
+		User::LeaveIfError( usbManager.GetCurrentPersonalityId(personality));
+		usbManager.Close();
+		
+		/* 
+		*	If there is some problems with pictbridge, check from usbpersonalityids.h that constants haven't been changed.
+		*/
+		if( dState == EUsbDeviceStateConfigured && personality == KUsbPersonalityIdMTP )
+			err = ETrue;		
+
+		aMessage.SetDisposable( ETrue );
+		aMessage.Complete( err );
+#else
+		aMessage.SetDisposable( EFalse );
+		aMessage.Complete( EFalse );
+#endif // _DIRECTPRINT_USE_USB
+	}	
+
+void CDirectPrintSession::SetNumberOfCopiesCountL( TDpMessage& aMessage )
+	{
+	LOG("CDirectPrintSession::CheckNumberOfCopiesL begin");
+	TInt count = aMessage.Int0();
+	LOG1("CDirectPrintSession::CheckNumberOfCopiesL count: %d", count);
+	TInt err = ( count > 0 ) ? KErrNone : KErrInvalidData;
+	if( !err )
+		{
+		iNumOfCopies->Reset( count );
+		}					
+	LOG1("CDirectPrintSession::CheckNumberOfCopiesL return: %d", err);
+	aMessage.SetDisposable( ETrue );	
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::SetNumberOfCopiesL( TDpMessage& aMessage )
+	{
+	LOG("CDirectPrintSession::SetNumberOfCopiesL begin");
+	TInt copies = aMessage.Int0();
+	LOG1("CDirectPrintSession::SetNumberOfCopiesL copies: %d", copies);	
+	TInt err = ( copies < 0 ) ? KErrInvalidData : KErrNone;
+	if( !err )
+		{
+		TBool full;
+		iNumOfCopies->AddNumOfCopyL( copies, full );
+		LOG1("CDirectPrintSession::SetNumberOfCopiesL full: %d", full);
+		if( full )
+			{
+			Server().Engine().SetNumsOfCopiesL( iNumOfCopies->NumsOfCopies(), err );	
+			}						
+		}	
+	LOG1("CDirectPrintSession::SetNumberOfCopiesL return: %d", err);
+	aMessage.SetDisposable( ETrue );	
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::GetProtocolNamesCountL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		TPckgC<TInt> count( Server().Engine().ProtocolCount() );
+		aMessage.WriteL( 0, count );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+
+void CDirectPrintSession::GetProtocolNameL( TDpMessage& aMessage )
+	{
+	TInt err = Server().ReserveEngine( this );
+	if( !err )
+		{
+		err = Server().Engine().GetProtocolNameL( aMessage );
+		}
+	aMessage.SetDisposable( ETrue );
+	aMessage.Complete( err );
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintServer/src/main.cpp	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <e32base.h>
+
+#include "directprintclientserver.h"
+#include "directprintserver.h"
+#include "directprintscheduler.h"
+#include "clog.h"
+
+// init and run the server
+static void RunTheServerL()
+	{
+#ifndef __SECURE_API__
+	User::LeaveIfError( RThread().Rename( KDirectPrintServerName ) );  //Deprecated! Replace this with the line below as soon as possible
+#else
+	User::LeaveIfError( RThread().RenameMe( KDirectPrintServerName ) );
+#endif
+
+	CActiveScheduler* scheduler = new (ELeave) CDirectPrintScheduler;
+	CleanupStack::PushL( scheduler );
+	CActiveScheduler::Install( scheduler );
+
+	CDirectPrintServer::NewLC();
+	
+	RProcess::Rendezvous( KErrNone );
+
+	CActiveScheduler::Start();
+	CleanupStack::PopAndDestroy( 2 );	// CDirectPrintServer, scheduler
+	}
+
+// Server process entry-point
+TInt E32Main()
+	{	
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	TInt r( KErrNoMemory );
+	if( cleanup )
+		{
+		TRAP( r, RunTheServerL() );
+		delete cleanup;
+		}
+	return r;
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/imageprint.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,153 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Client include file for the ImagePrint server. Contains the 
+* 				 CImagePrint class definition, and the following interfaces:
+* 				 MIdleObserver, MPrinterDiscoveryObserver and MPrintEventObserver
+*
+*/
+
+
+// Protection against nested includes
+#ifndef IMAGEPRINT_H
+#define IMAGEPRINT_H
+
+// System includes
+#include <e32base.h>
+
+class TPrinter;
+class TEvent;
+
+_LIT( KTabChar, "\t" );
+_LIT( KParamFile, "\\system\\data\\T_AIW_TEMP.DAT");
+
+/// Error constant defined to indicate Invalid Sequence.
+const TInt KErrInvalidSequence = -50;
+/// Error constant defined to indicate Invalid Data.
+const TInt KErrInvalidData = -51;
+/// Error constant defined to indicate that a printer has been connected
+const TInt KErrConnected = -500;
+
+/// BPP Protocol Identifier.
+const TUint KImagePrint_PrinterProtocol_BPP = 1;
+/// BIP Protocol Identifier.
+const TUint KImagePrint_PrinterProtocol_BIP = 2;
+/// OPP Protocol Identifier (Printer).
+const TUint KImagePrint_PrinterProtocol_OPP_Printer = 4;
+/// DPOF Protocol Identifier.
+const TUint KImagePrint_PrinterProtocol_DPOF = 8;
+/// PictBridge Protocol Identifier.
+const TUint KImagePrint_PrinterProtocol_PictBridge = 16;
+/// OPP Protocol Identifier (PC).
+const TUint KImagePrint_PrinterProtocol_OPP_PC = 32;
+/// UPnP Protocol Identifier
+const TUint KImagePrint_PrinterProtocol_UPnP = 64;
+/// LPR Protocol Identifier
+const TUint KImagePrint_PrinterProtocol_LPR = 128;
+
+/// Enums used to specify the current state in the DiscoveryStatusL callback.
+enum TDiscoveryStatus
+	{
+	EDiscoverying = 0,
+	EDiscoveryFinished = 1,
+	EDiscoveryCancelling = 2
+	};
+
+/// Enums used to specify the current state in the PrintJobProgressEvent callback.
+enum TPrintJobProgressEventStatus
+	{
+	EActive = 0,
+	EDone = 1
+	};
+
+/**
+ *	@brief Interface to be implemented by the class using CImagePrint. It is used by CImagePrint to report anything related
+ *	to the discovery process.
+ */
+class MPrinterDiscoveryObserver
+	{
+	public:
+		/**
+		 * Called by Image Printer Server to notify the client application that a printer was discovered.
+		 *  @param aPrinterInfo Contains printer information of the discovered device.
+		 */
+		virtual void FoundPrinterL( const TPrinter& aPrinterInfo ) = 0;
+		/**
+		 * Called by Image Printer Server to notify the client application that an operation 
+		 * has completed, either successfully or with an error.
+		 * @param aStatus Indicate the status of the discovery process. One of the values of \c ::TDiscoveryStatus
+		 * @param aErrorCode \c KErrNone if there was no error, otherwise another of the system-wide error codes.
+		 * @param aErrorStringCode StringCode - Descriptive text that can be used to further explain error.
+		 */
+		virtual void DiscoveryStatusL( TInt aStatus, 
+										TInt aErrorCode, 
+										TInt aErrorStringCode ) = 0;
+		/**
+		 * Called by Image Printer Server to notify the client application that a printer 
+		 * returned from the cache was not discovered during the discovery phase, 
+		 * and should be removed from the UI. If this call is needed, it will be made 
+		 * after all BPP printers have been returned, but before the discovery completes.
+		 *  @param aPrinterInfo Contains printer information of the printer that was not found during discovery
+		 */
+		virtual void RemovePrinterL( const TPrinter& aPrinterInfo ) = 0;
+	};
+
+/**
+ *	@brief Interface to be implemented by the class using CImagePrint. It is used by CImagePrint to report anything related
+ *	to the printing process, once it is started.
+ */
+class MPrintEventObserver
+	{
+	public:
+		virtual void PrintJobProgressEvent( TInt aStatus, 
+										TInt aPercentCompletion, 
+										TInt aJobStateCode ) = 0;
+										
+		virtual void PrintJobErrorEvent( TInt aError, 
+										TInt aErrorStringCode ) = 0;
+										
+		virtual void PrinterStatusEvent( TInt aError, 
+										TInt aErrorStringCode ) = 0;
+										
+		virtual void PreviewImageEvent( TInt aFsBitmapHandle ) = 0;
+		
+		virtual void ShowMessageL( TInt aMsgLine1Code, 
+										TInt aMsgLine2Code ) = 0;
+										
+		virtual TBool AskYesNoQuestionL( TInt aMsgLine1Code, 
+										TInt aMsgLine2Code ) = 0;
+										
+		virtual const TDesC& AskForInputL( TInt aMsgLine1Code, 
+										TInt aMsgLine2Code ) = 0;
+	};
+
+/**
+ *  @brief Interface to be implemented by the class using CImagePrint. It is used by CImagePrint to report
+ *  anything related to status changes in the handling protocol.
+ *  @sa CImagePrint::RegisterIdleObserver
+ */
+class MIdleObserver
+	{
+	public:
+		/** Called by CImagePrint to notify of events. The meaning of the event and associated error and mesage codes
+		 *  is protocol dependant.
+		 */
+		virtual void StatusEvent( const TEvent &aEvent, 
+										TInt aError, 
+										TInt aMsgCode ) = 0;
+	};
+
+
+#endif // IMAGEPRINT_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/imageprint.rh	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the following interfaces: MProtPrintingDevice, 
+* 				 MProtIdleObserver, MProtPrintEventObserver and MProtDiscoveryObserver.
+*
+*/
+
+
+STRUCT RS_CAPABILITY
+{
+	LONG	printerclass;
+	LONG	capabilityid;
+	LONG	type;
+	LONG	defaultvalue;
+	LONG	low;
+	LONG	high;
+	LONG	enumcodes[];  //code and link pair
+	LONG	linkid;
+}
+
+STRUCT RS_CAPABILITIES
+{
+	STRUCT capabilities[];	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/mprotprintingdevice.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the following interfaces: MProtPrintingDevice, 
+* 				 MProtIdleObserver, MProtPrintEventObserver and MProtDiscoveryObserver.
+*
+*/
+
+
+#ifndef MPROTPRINTINGDEVICE_H
+#define MPROTPRINTINGDEVICE_H
+
+#include <e32base.h>
+
+#include "tprinter.h"
+#include "directprintcapability.h"
+#include "tidleevent.h"
+
+const TInt DEVICE_ID_FIELD_MASK = 0x03FFFFFF;	// most significant bits: 0000 0011 rest is 1's
+const TInt PROTOCOL_ID_FIELD_MASK = 0xFC000000;	// most significant bits: 1111 1100
+const TInt PROTOCOL_ID_CLEAR_MASK = 0x0000003F;	// less siginificant bits: 0011 1111
+const TInt PROTOCOL_ID_BIT_COUNT = 6;
+
+
+/**
+ *	@brief Interface to be implemented by a class observing the discovery events of a class implementing MProtPrintingDevice.
+ *
+ *	Interface used by a Protocol implementing "MProtPrintingDevice" to report back any device found or not found and
+ *	the general status of the discovery process. This should be implemented by the class using "MProtPrintingDevice"; in
+ *	this case, it's already implemented in a class in the Image Print Library.
+ */
+class MProtDiscoveryObserver
+	{
+	public:
+		virtual void FoundDeviceL( TPrinter& aDeviceInfo ) = 0;
+		virtual void RemoveDeviceL( TPrinter& aDeviceInfo ) = 0;
+		
+		/**
+		 *  @brief 
+		 *  @param aStatus ( EDiscovering | ECancellingDiscovery | EDoneDiscovery | EDiscoveryFinished )
+		 *                   EDiscovering           = currently discovering
+		 *                   ECancellingDiscovery   = cancel request on discovery
+		 *                   EDiscoveryFinished     = on discovery time-out   
+		 *  @param aErrorCode
+		 *  @param aErrorStringCode
+		 */
+		virtual void DiscoveryStatusL( TInt aStatus,
+										TInt aErrorCode,
+										TInt aErrorStringCode = KErrNone ) = 0;
+	};
+
+/**
+ *	@brief Interface to be implemented by a class observing the printing events of a class implementing MProtPrintingDevice.
+ *
+ *	Interface used by a Protocol implementing "MProtPrintingDevice" to report back the printing progress, any error or
+ *	the printer status. This should be implemented by the class using "MProtPrintingDevice"; in this case, it's already
+ *  implemented in a class in the Image Print Library.
+ *  These methods should be used only when actual printing is ongoing
+ */
+class MProtPrintEventObserver
+	{
+	public:
+		/**
+		 *	@brief Method to inform observer about printing proggress.
+		 *
+		 *	@param aStatus 			Defines the printing status defined in ImagePrint.h.
+		 *	@param aPercent 		Percents of job readiness.
+		 *	@param aJobStateCode	Job's state defined in PrintMessageCodes.h.
+		 */
+		virtual void PrintJobProgressEvent( TInt aStatus, 
+										TInt aPercent, 
+										TInt aJobStateCode ) = 0;
+										
+		/**
+		 *	@brief Method to inform observer about error occured during printing.
+		 *
+		 *	@param aErrorCode 		Defines the error code that is symbian wide or defined in PrintMessageCodes.h.
+		 *	@param aErrorStringCode	Reserved for future use.
+		 */
+		virtual void PrintJobErrorEvent( TInt aErrorCode, 
+										TInt aErrorStringCode = KErrNone ) = 0;
+										
+		/**
+		 *	@brief Method to inform observer about error concerning the printing device.
+		 *
+		 *	@param aErrorCode 		Defines the error code that is symbian wide or defined in PrintMessageCodes.h.
+		 *	@param aErrorStringCode	Reserved for future use.
+		 */
+		virtual void PrinterStatusEvent( TInt aErrorCode, 
+										TInt aErrorStringCode = KErrNone ) = 0;
+
+		// DEPRECATED - DO NOT USE
+		virtual void PreviewImageEvent( TInt aFsBitmapHandle ) = 0;
+
+		// DEPRECATED - DO NOT USE
+		virtual void ShowMessageL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code ) = 0;
+
+		// DEPRECATED - DO NOT USE
+		virtual TBool AskYesNoQuestionL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code ) = 0;
+
+		// DEPRECATED - DO NOT USE
+		virtual const TDesC& AskForInputL( TInt aMsgLine1Code,
+										TInt aMsgLine2Code ) = 0;
+	};
+
+/**
+ *  @brief Interface to be implemented by CImagePrint. It is used to report
+ *  anything related to status changes in the handling protocol.
+ *  @sa MProtPrintingDevice::RegisterIdleObserver
+ */
+class MProtIdleObserver
+	{
+	public:
+		/** Called by a protocol to notify CImagePrint of events. The meaning of the event and associated error and mesage codes
+		 *  is protocol dependant. This should be used only when actual printing is not ongoing.
+		 */
+		virtual void StatusEvent( const TEvent &aEvent,
+										TInt aError,
+										TInt aMsgCode ) = 0;
+	};
+
+/**
+ *	@brief Interface to be implemented in the Polymorphic DLLs.
+ *
+ *	Interface to be implemented by any printing protocol that wants to be added to the Image Print library, so it can
+ *	be seen by the library and used in a transparent way. This implementation should be encapsulated within a Polymorphic
+ *	DLL and put in a specific directory.
+ */
+class MProtPrintingDevice
+	{
+	public:
+		// General.
+		/**
+		 *	@brief Part of the standard construction pattern.
+		 *	@param aDLLPath Path where the DLL was found so it can know where it is located and use that information
+		 *	when looking for resource files and such. The path includes the DLL itself.
+		 */
+		virtual void ConstructL( const TDesC& aDLLPath ) = 0;
+		/**
+		 *	@brief Reports the Version of the DLL.
+		 *	@return A TVersion object containing the version of the protocol.
+		 */
+		virtual TVersion Version() = 0;
+		/**
+		 *	@brief Returns the Protocols supported by the DLL. It can be any of the KImagePrint_PrinterProtocol* constants.
+		 *	@return An OR'ed value with the supported protocols information.
+		 */
+		virtual TUint SupportedProtocols() = 0;
+		// Discovery.
+		/**
+		 *	@brief Starts the discovery process.
+		 *
+		 *	This process is to find whatever printing device is available nearby. After this call server waits
+		 *  DiscoveryStatusL from MProtDiscoveryObserver to be called with value aStatus = EDiscoveryFinished
+		 *  after the discovey is finished.
+		 *	@param aObserver The discovery observer.
+		 *	@param aProtocol Used to indicate what protocols to search for. 0 = all, 1 = BPP, 2 = BIP, 4 = OPP, 8 = DPOF, 16 = PB.
+		 *	@return Any standard Symbian error code.
+		 */
+		virtual void StartDiscoveryL( MProtDiscoveryObserver& aObserver,
+										TUint aProtocol = 0 ) = 0;
+		/**
+		 *	@brief Removes a specified cached printer.
+		 *	@param[in] aDeviceID The ID of the printer the client wants to remove.
+		 *	@return Any standard Symbian error code or ( KErrInvalidSequence and KErrInvalidData ).
+		 */
+		virtual TInt RemoveCachedDeviceL( TInt aDeviceID ) = 0;
+		
+		/**
+		 *	@brief Cancels the discovery process.
+		 *  The caller expects to get notification of cancelled discovery via 'DiscoveryStatusL' with value 'EDiscoveryCancelling'
+		 *	@param[in] aDoCallBack Flag to indicate whether to call back the observer or not. Default = True.
+		 */
+		virtual void CancelDiscovery( TBool aDoCallBack = ETrue ) = 0;
+
+		// Print.
+		/**
+		 *	@brief Creates a print job in the specified printer.
+		 *	@param[in] aDeviceID The ID of the printer where the client wishes to create the print job.
+		 *	@param aImages Array containing the full names of the files to print.
+		 *	@param aObserver The print event observer.
+		 *	@return Any standard Symbian error code or ( KErrInvalidSequence and KErrInvalidData ).
+		 */
+		virtual TInt CreatePrintJobL( TInt aDeviceID,
+										RPointerArray<TDesC>& aImages,
+										MProtPrintEventObserver& aObserver ) = 0;
+		/**
+		 *	@brief Submits a print job already created.
+		 */
+		virtual void SubmitPrintJobL() = 0;
+		/**
+		 *	@brief Cancels the print job.
+		 */
+		virtual TInt CancelPrintJob() = 0;
+		/**
+		 *	@brief Continues printing and / or submitting a print job. Implementation may vary from protocol to protocol.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt ContinuePrintJobL() = 0;
+		/**
+		 *	@brief Gets the number of pages to be printed.
+		 *	@return Number of pages to print.
+		 */
+		virtual TInt GetNumPrintPages() = 0;
+		/**
+		 *  DEPRECATED - DO NOT USE
+		 *	@brief Gets the status of the printing job created.
+		 *	@return Printing job status.
+		 */
+		virtual TInt GetPrintJobStatus() = 0;
+		/**
+		 *  DEPRECATED - DO NOT USE
+		 *	@brief Gets the status of the printer.
+		 *	@param[in] aDeviceID The ID of the printer the client wants to know about.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt GetPrinterStatus( TInt aDeviceID ) = 0;
+		// Capabilities.
+		/**
+		 *	@brief Gets the IDs of the capabilities supported by the printer specified.
+		 *	@param[in] aDeviceID The ID of the printer the client wants to know about.
+		 *	@param[out] aCapabilityIDs Array containing the ID's of the capabilities of the specified printer.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt GetDeviceCapabilityIDsL( TInt aDeviceID,
+										RArray<TInt>& aCapabilityIDs ) = 0;
+		/**
+		 *	@brief Gets the detail of a certain capability of a certain printer.
+		 *	@param[in] aDeviceID The exposed ID of the printer the client wants to know about.
+		 *	@param[in] aCapabilityID ID of the capability of interest.
+		 *	@param[out] aCapability Capability information.
+		 * @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt GetDeviceCapabilityL( TInt aDeviceID,
+										TInt aCapabilityID,
+										TDirectPrintCapability& aCapability ) = 0;
+		/**
+		 *	@brief Gets a setting (i.e., papersize selected) from an existing job.
+		 *	@param[in] aCapabilityID ID of the capability of interest.
+		 *	@param[out] aValue Capability value.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt GetJobSetting( TInt aCapabilityID,
+										TInt& aValue ) = 0;
+		/**
+		 *	@brief Sets a print job setting.
+		 *	@param[in] aCapabilityID ID of the capability of interest.
+		 *	@param[in] aValue New capability value.
+		 *	@param[out] aAffectedCapability ID of any affected capability.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt SetJobSettingL( TInt aCapabilityID,
+										TInt aValue,
+										TInt& aAffectedCapability ) = 0;
+		// Preview.
+		/**
+		 *  DEPRECATED - DO NOT USE
+		 *	@brief Gets the number of pages in the preview.
+		 *	@return Number of pages in the preview.
+		 */
+		virtual TInt GetNumPreviewPages() = 0;
+		/**
+		 *  DEPRECATED - DO NOT USE
+		 *	@brief Gets the icon representing a given layout or template.
+		 *	@param[in] aTemplateID ID of the template / layout of interest.
+		 *	@param[out] aFsBitmapHandle Handle to the appropriate bitmap.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt GetJobTemplateIconL( TInt aTemplateID,
+										TInt& aFsBitmapHandle ) = 0;
+		/**
+		 *  DEPRECATED - DO NOT USE
+		 *	@brief Creates a preview image.
+		 *	@param[in] aPageNumber Page number to create preview image of.
+				 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		virtual TInt CreatePreviewImage( TInt aPageNumber ) = 0;
+
+		/**
+		 *	@brief Destructor.
+		 */
+		virtual ~MProtPrintingDevice() {}
+
+		
+		/**
+		 *  @brief Registers the IdleObserver to send idle event notifications
+		 *  @param A pointer to an object implementing MIdleObserver interface that will be notified of events
+		 *  @note In order to stop sending notifications, send NULL as the parameter.
+		 */
+		virtual void RegisterIdleObserver( MProtIdleObserver *aObserver ) = 0;
+
+
+		/**
+		 *  @brief Number of copies setter. Must be called after the print job is created but before
+		 *		submission. Amount of array elements must be the same with the amount of image files
+		 *		in the print job. Array elements must be greater than 0.
+		 *  @param aNumsOfCopies number of copies array
+		 *  @param aErr contains error code on return
+		 */
+		virtual void SetNumsOfCopiesL( const RArray<TInt>& aNumsOfCopies,
+										TInt& aErr ) = 0;
+
+	public:
+		TUid iDtor_ID_Key;
+	protected:
+		/// Protocol API observer.
+		MProtDiscoveryObserver* iDiscoveryObserver;
+		/// Protocol API observer.
+		MProtPrintEventObserver* iPrintEventObserver;
+	};
+
+#endif // MPROTPRINTINGDEVICE_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/printmessagecodes.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the TPrintErrorMessageCodes and TPrintMessageCodes enumerations.
+*
+*/
+
+
+#ifndef PRINTMESSAGECODES_H
+#define PRINTMESSAGECODES_H
+
+/// Global printing Error Message Codes.
+// All supported by UI
+enum TPrintErrorMessageCodes
+{
+	EObexConnectError = -3000,
+	EObexSendError = -3001,
+	EObexDisconnectError = -3002,
+	EObexGeneralError = -3003,
+};
+
+/// Global printing Message Codes.
+enum TPrintMessageCodes
+{
+	// No message
+	ENoMessage = 0,
+
+	// Print Progress Codes
+	EJobPending = 3100,
+	EPrinting = 3101,
+	ECopying = 3102,
+	ECancelling = 3103,
+	ECancellingNoMessage = 3104,
+
+	// Pict Bridge
+	EPbOutOfPaper = 3300,	///<@deprecated Use TPrintMessageCodes::EPbStatusErrorReasonPaperEmpty
+	EPbCheckPrinter = 3301,
+	EPbPrinterIsDisconnected = 3302,
+	EPbPrinterIsConnected = 3303,
+	EPbFileNotSupported = 3304,
+	EPbFileNotFound = 3305,
+
+	EPbStatusErrorReasonNoReason,	/*3306*/ ///<@brief No reason
+	EPbStatusErrorReasonPaper,	///<@brief Paper-related error
+	EPbStatusErrorReasonInk,	///<@brief Ink-related error
+	EPbStatusErrorReasonHardware,	///<@brief Hardware-related error
+	EPbStatusErrorReasonFile,	///<@brief File-related error
+	EPbStatusErrorReasonPaperEmpty,	/*3311*/ ///<@brief Paper is empty
+	EPbStatusErrorReasonPaperLoad,	///<@brief Load error - paper not loaded correctly
+	EPbStatusErrorReasonPaperEject,	///<@brief Eject error - paper not ejected correctly
+	EPbStatusErrorReasonPaperMedia,	///<@brief Media error - paper is not detected, paper skewed, roll paper connot be cut or torn-off
+	EPbStatusErrorReasonPaperJam,	///<@brief Paper jam
+	EPbStatusErrorReasonPaperNearlyEmpty,	///<@brief Paper nearly empty
+	EPbStatusErrorReasonPaperCombination,	///<@brief Paper type / paper size combination not supported, or paper found in printer does not match request
+	EPbStatusErrorReasonInkEmpty,	/*18*/ ///<@brief Ink empty
+	EPbStatusErrorReasonInkLow,	///<@brief Ink low
+	EPbStatusErrorReasonInkWaste,	///<@brief Waste ink error (waste-ink reservior full).
+	EPbStatusErrorReasonHardwareFatal,	/*21*/ ///<@brief Fatal error
+	EPbStatusErrorReasonWarning,        // warning
+	EPbStatusErrorReasonHardwareServiceCall,	///<@brief Service call
+	EPbStatusErrorReasonHardwarePrinterUnavailable,	///<@brief Printer unavailable (performing maintenance or otherwise occupied)
+	EPbStatusErrorReasonHardwarePrinterBusy,	///<@brief Printer busy (processing a job from another source, e.g. a PC)
+	EPbStatusErrorReasonHardwareLever,	///<@brief Lever error (lever position not correct)
+	EPbStatusErrorReasonHardwareCoverOpen,	///<@brief Cover open
+	EPbStatusErrorReasonHardwareNoMarkingAgent,	///<@brief No marking agent (e.g. missing printer head)
+	EPbStatusErrorReasonHardwareInkCoverOpen,	///<@brief Ink cover open
+	EPbStatusErrorReasonHardwareNoInkCartridge,	///<@brief No ink cartridge
+	EPbStatusErrorReasonFilePrintInfo,	/*31*/ ///<@brief printInfo error (specified &lt;printInfo&gt; is too large).
+	EPbStatusErrorReasonFileFileDecode,	///<@brief File decode error (picture format of specified image cannot be decoded).
+
+	// Printer status reasons
+	EPrintReasonAttentionRequired, /*33*/ ///<@brief Indicates reason other than those listed
+	EPrintReasonPaused, ///<@brief Someone has paused the printer and the PrinterState is "stopped". In this state, a Printer may not produce printed output.
+	EPrintReasonOutputAreaAlmostFull, ///<@brief One or more output area is almost full: e.g., tray, stacker, collator.
+	EPrintReasonOutputAreaFull, ///<@brief One or more output area is full: e.g., tray, stacker, collator.
+	EPrintReasonMarkerSupplyLow, ///<@brief The device is low on at least one marker supply: e.g., toner, ink, ribbon.
+	EPrintReasonMarkerSupplyEmpty, ///<@brief The device is out of at least one marker supply: e.g., toner, ink, ribbon.
+	EPrintReasonMarkerFailure, ///<@brief The device has at least one marking device which has failed and requires service or replacement: e.g., pen.
+
+	// OBEX response codes
+	EObexReserved, ///<@brief Reserved
+	EObexContinue, ///<@brief Continue
+	EObexOKSuccess, ///<@brief OK, Success
+	EObexCreated, ///<@brief Created
+	EObexAccepted, ///<@brief Accepted
+	EObexNonAuthoritativeInformation, ///<@brief Non-Authoritative Information
+	EObexNoContent, ///<@brief No Content
+	EObexResetContent, ///<@brief Reset Content
+	EObexPartialContent, ///<@brief Partial Content
+	EObexMultipleChoices, ///<@brief Multiple Choices
+	EObexMovedPermanently, ///<@brief Moved Permanently
+	EObexMovedTemporarily, ///<@brief Moved Temporarily
+	EObexSeeOther, ///<@brief See Other
+	EObexNotModified, ///<@brief Not Modified
+	EObexUseProxy, ///<@brief Use Proxy
+	EObexBadRequest, ///<@brief Bad Request - server could not understand the request
+	EObexUnauthorized, ///<@brief Unauthorized
+	EObexPaymentRequired, ///<@brief Payment required
+	EObexForbidden, ///<@brief Forbidden: operation is understood but refused
+	EObexNotFound, ///<@brief Not found DPS: Object or File does not exist.
+	EObexMethodNotAllowed, ///<@brief Method not allowed
+	EObexNotAcceptable, ///<@brief Not acceptable
+	EObexProxyAuthRequired, ///<@brief Proxy authentication is required
+	EObexRequestTimedOut, ///<@brief Request timed out
+	EObexConflict, ///<@brief Conflict
+	EObexGone, ///<@brief Gone
+	EObexLengthRequired, ///<@brief Length Required
+	EObexPreconditionFailed, ///<@brief Precondition failed
+	EObexRequestedEntityTooLarge, ///<@brief Requested entity is too large
+	EObexRequestedURLTooLarge, ///<@brief Requested URL is too large
+	EObexUnsupportedMediaType, ///<@brief Unsupported media type. Note: Refers to MIME media-type
+	EObexInternalReceiverError, ///<@brief Internal receiver error
+	EObexNotImplemented, ///<@brief Not implemented
+	EObexBadGateway, ///<@brief Bad Gateway
+	EObexServiceUnavailable, ///<@brief Service Unavailable
+	EObexGatewayTimeout, ///<@brief Gateway Timeout
+	EObexHTTPVersionNotSupported, ///<@brief HTTP protocol version is not supported
+	EObexDatabaseFull, ///<@brief Database Full
+	EObexDatabaseLocked, ///<@brief Database Locked
+	
+	EKErrIrObexRespTimedOut = -5572,	// OBEX command timed out
+	
+};
+
+enum TOperationStatusCodes
+{
+	EOperationStatusOk = 0x0000,		///<@brief successful-ok
+	EOperationStatusOkIgnoredOrSubstitutedAttributes = 0x0001,		///<@brief successful-ok-ignored-or-substituted-attributes
+	EOperationStatusOkConflictingAttributes = 0x0002,		///<@brief successful-ok-conflicting-attributes
+	EOperationStatusClientBadRequest = 0x0400,		///<@brief client-error-bad-request
+	EOperationStatusClientForbidden = 0x0401,		///<@brief client-error-forbidden
+	EOperationStatusClientNotAuthenticated = 0x0402,		///<@brief client-error-not-authenticated
+	EOperationStatusClientNotAuthorized = 0x0403,		///<@brief client-error-not-authorized
+	EOperationStatusClientNotPossible = 0x0404,		///<@brief client-error-not-possible
+	EOperationStatusClientTimeout = 0x0405,		///<@brief client-error-timeout
+	EOperationStatusClientNotFound = 0x0406,		///<@brief client-error-not-found
+	EOperationStatusClientGone = 0x0407,		///<@brief client-error-gone
+	EOperationStatusClientRequestEntityTooLarge = 0x0408,		///<@brief client-error-request-entity-too-large
+	EOperationStatusClientRequestValueTooLong = 0x0409,		///<@brief client-error-request-value-too-long
+	EOperationStatusClientDocumentFormatNotSupported = 0x040a,		///<@brief client-error-document-format-not-supported
+	EOperationStatusClientAttributesOrValuesNotSupported = 0x040b,		///<@brief client-error-attributes-or-values-not-supported
+	EOperationStatusClientUriSchemeNotSupported = 0x040c,		///<@brief client-error-uri-scheme-not-supported
+	EOperationStatusClientCharsetNotSupported = 0x040d,		///<@brief client-error-charset-not-supported
+	EOperationStatusClientConflictingAttributes = 0x040e,		///<@brief client-error-conflicting-attributes
+	EOperationStatusClientCompressionNotSupported = 0x040f,		///<@brief client-error-compression-not-supported
+	EOperationStatusClientCompression = 0x0410,		///<@brief client-error-compression-error
+	EOperationStatusClientDocumentFormat = 0x0411,		///<@brief client-error-document-format-error
+	EOperationStatusClientDocumentAccess = 0x0412,		///<@brief client-error-document-access-error
+	EOperationStatusClientMediaNotLoaded = 0x0418,		///<@brief client-error-media-not-loaded
+	EOperationStatusServerInternalError = 0x0500,		///<@brief server-error-internal-error
+	EOperationStatusServerOperation = 0x0501,		///<@brief server-error-operation-not-supported
+	EOperationStatusServerServiceUnavailable = 0x0502,		///<@brief server-error-service-unavailable
+	EOperationStatusServerVersionNotSupported = 0x0503,		///<@brief server-error-version-not-supported
+	EOperationStatusServerDeviceError = 0x0504,		///<@brief server-error-device-error
+	EOperationStatusServerTemporaryError = 0x0505,		///<@brief server-error-temporary-error
+	EOperationStatusServerNotAcceptingJobs = 0x0506,		///<@brief server-error-not-accepting-jobs
+	EOperationStatusServerBusy = 0x0507,		///<@brief server-error-busy
+	EOperationStatusServerJobCanceled = 0x0508,		///<@brief server-error-job-canceled
+	EOperationStatusServerMultipleDocument = 0x0509		///<@brief server-error-multiple-document-jobs-not-supported
+};
+
+#endif  //  PRINTMESSAGECODES_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tdiscoveryguarddata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+
+#ifndef TDISCOVERYGUARDDATA_H
+#define TDISCOVERYGUARDDATA_H
+
+#include <e32def.h>
+
+#include "tprinter.h"
+
+class TDiscoveryGuardData
+	{
+	public:
+	
+		enum TCallbackNum
+			{
+			EFoundCb = 0,
+			EStatusCb,
+			ERemoveCb
+			};
+	
+	public:
+	
+		TPrinter iPrinterInfo;
+		TInt iStatus;		
+		TInt iErrorCode;
+		TInt iErrorStringCode;
+		TCallbackNum iCb;
+	};
+
+#endif // TDISCOVERYGUARDDATA_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tidleevent.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the types necesary for MIdleObserver TPrinter class definition.
+*
+*/
+
+
+#ifndef IDLEEVENT_H
+#define IDLEEVENT_H
+
+/** The severity associated of the notification.
+ */
+enum TSeverity
+	{
+		///The event doesn't have a specific severity. Used in cases where severity is irrelevant, unknown or can be ignored.
+		ENotSpecified,
+		///The event does not cause an error
+		ENoError,
+		///The event was caused by a warning. Generally this is recoverable.
+		EWarning,
+		///The event was caused by a fatal error. Generally this is not recoverable
+		EFatal,
+		///The event was caused by a severe error. Generally this is a async leave
+		ESevere
+	};
+
+/** The type of event the observer is being notified of. The types of events being raised vary by protocol
+ */
+enum TEventType
+	{
+		///The protocol has made a connection to the printer, device or transport
+		EConnect,
+		///The protocol has been disconnected from the printer, device or transport
+		EDisconnect,
+		///The protocol can be disconnected
+		EDisconnectReady,
+		///The protocol cannot be disconnected
+		EDisconnectNotReady,
+		///The device or printer is ready to accept print jobs
+		EPrintReady,
+		///The device or printer is not ready to accept print jobs
+		EPrintNotReady,
+		///The event is notifying a change in the device status, or is reporting an error sent from the device
+		EPrinterStatus,
+		///The event is notifying that the capabilities that the printer supports have changed
+		EPrinterCapabilityChanged,
+		///The event is notifying that asynchronous leave has happened
+		EAsynchronousLeave
+	};
+
+/** The event object. This object provides information about the event.
+ */
+class TEvent
+	{
+	public:
+		/** The protocol that is sending the notification
+		 *	@sa KImagePrint_PrinterProtocol_BPP @sa KImagePrint_PrinterProtocol_BIP @sa KImagePrint_PrinterProtocol_OPP 
+		 *	@sa KImagePrint_PrinterProtocol_DPOF @sa KImagePrint_PrinterProtocol_PictBridge
+		 */
+		TInt iProtocol;
+		///The associated severity of the event
+		TSeverity iSeverity;
+		///What kind of event is being sent
+		TEventType iEventType;
+	};
+
+
+#endif	// IDLEEVENT_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tidleguarddata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef TIDLEGUARDDATA_H
+#define TIDLEGUARDDATA_H
+
+#include <e32def.h>
+
+#include "tidleevent.h"
+
+class TIdleGuardData
+	{
+	public:
+	
+		TEvent iEvent;		
+		TInt iError;
+		TInt iMsgCode;
+	};
+
+#endif // TIDLEGUARDDATA_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tjobguarddata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef TJOBGUARDDATA_H
+#define TJOBGUARDDATA_H
+
+#include <e32def.h>
+
+class TJobGuardData
+	{
+	public:
+	
+	enum TCallbackNum
+			{
+			EProgressEventCb = 0,
+			EErrorEventCb,
+			EStatusEventCb,
+			EImageEventCb			
+			};
+	
+	public:
+	
+		TInt iStatus;
+		TInt iPercentCompletion;
+		TInt iJobStateCode;	
+		TInt iError;
+		TInt iErrorStringCode;
+		TInt iFsBitmapHandle;
+		TCallbackNum iCb;
+	};
+
+#endif // TJOBGUARDDATA_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tmessagewrp2.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef TMESSAGEWRP2_H
+#define TMESSAGEWRP2_H
+
+#include <e32base.h>
+
+class TMessageWrp2
+	{
+	public:
+	
+		/**
+		 *	Message wrapper constructor
+		 *
+		 *	@param aMessage message to be wrapped
+		 *	@param aConnected session connection flag		 
+		 */
+		TMessageWrp2( const RMessage2& aMessage, const TBool& aConnected );
+			
+	public:
+	
+		/**
+		 *	If session connected, write descriptor to the wrapped message
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	 
+		void WriteL(TInt aParam, const TDesC8 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	If session connected, complete the wrapped message
+		 *
+		 *	@param aReason completion code
+		 */
+		void Complete(TInt aReason) const;
+		
+		/**
+		 *	If session connected, gets the 1st message argument as an integer value
+		 *
+		 *	@return 1st message argument as an integer value
+		 */
+		TInt Int0() const;
+		
+		/**
+		 *	If session connected, gets the 2nd message argument as an integer value
+		 *
+		 *	@return 2nd message argument as an integer value
+		 */					
+		TInt Int1() const;
+		
+		/**
+		 *	If session connected, gets the length of a descriptor argument 
+		 *	in the client's process
+		 *
+		 *	@param aParam index value identifying the argument
+		 *	@return the length of the descriptor or error code
+		 */	
+		TInt GetDesLength(TInt aParam) const;
+		
+		/**
+		 *	If session connected, read data from the specified offset within 
+		 *	the 8-bit descriptor argument, into the specified target descriptor
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes target descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	 
+		void ReadL(TInt aParam, TDes8 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	If session connected, read data from the specified offset within 
+		 *	the 16-bit descriptor argument, into the specified target descriptor
+		 *
+		 *	@param aParam message parameter id
+		 *	@param aDes target descriptor
+		 *	@param aOffset offset from the start of the client's descriptor
+		 */	
+		void ReadL(TInt aParam, TDes16 &aDes, TInt aOffset=0) const;
+		
+		/**
+		 *	Panic the client thread
+		 *
+		 *	@param aCategory category descriptor
+		 *	@param aReason reason id
+		 */
+		void Panic(const TDesC &aCategory, TInt aReason) const;
+		
+		/**
+		 *	Gets the the number of the function requested by the client
+		 *
+		 *	@return the function number
+		 */
+		TInt Function() const;
+		
+		/**
+		 *	Sets the disposable state. Disposable means that the message needs not
+		 *	to be preserved
+		 *
+		 *	@param aDisposable disposable flag
+		 */
+		void SetDisposable( TBool aDisposable );
+		
+		/**
+		 *	Gets the disposable state
+		 *
+		 *	@return the disposable flag
+		 */
+		TBool Disposable() const;
+
+	private: // data
+		RMessage2 iMessage;
+		const TBool& iConnected;
+		TBool iDisposable;
+	};
+
+
+#endif // TMESSAGEWRP2_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/ImagePrintLibrary/inc/tprinter.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Contains the TPrinter class definition.
+*
+*/
+
+
+#ifndef TPRINTER_H
+#define TPRINTER_H
+
+#include <e32base.h>
+
+/**
+ *	@brief A printer abstraction.
+ *
+ *	Class representing the basic properties of a printing device.
+ *	Published as part of the ImagePrint Server API.
+ */
+class TPrinter
+	{
+	public:
+		enum TPrinterProperty
+			{
+			Cached = 1,
+			SupportsPreview = 2
+			};
+		enum TPrinterVendor
+			{
+			EVendorNone = 0	// No Vendor
+			// Add other vendors
+			};
+		TInt		iPrinterID;
+		TBuf<84>	iDisplayName;
+		TUint		iProperties;
+		TUint		iProtocol;
+		TUint		iVendor;
+	};
+
+#endif // TPRINTER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/group/bld.inf	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+#include "../directprintclient/group/bld.inf"
+#include "../directprintserver/group/bld.inf"
+
+#include "../directprintapp/group/bld.inf"
+
+PRJ_PLATFORMS
+WINSCW ARMV5 GCCE
+PRJ_EXPORTS
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/aiwprintproperty.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// Protection against nested includes
+#ifndef __AIWPRINTPROPERTY_H__
+#define __AIWPRINTPROPERTY_H__
+
+const TUid KPrintPropertyCat = {0x10012345};
+enum TPrintPropertyKeys
+    { 
+    EPrintProperty,
+    };
+
+enum 
+	{
+	ENotAiwCall,
+	EAiwPrintCall,
+	EAiwQuickPrintCall
+	};
+
+#endif  // __AIWPRINTPROPERTY_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/clog.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+// Protection against nested includes
+#ifndef __CLOG_H__
+#define __CLOG_H__
+
+// System includes
+#include <e32base.h>
+#include <e32std.h>
+
+#include "logdef.h"
+
+#ifdef ENABLE_LOGGING
+#define LOG(s) Log::DoLog(_L(s))
+#define LOG1(s, v) Log::DoLog( _L(s), v )
+#define LOG2(s, v1, v2) Log::DoLog( _L(s), v1, v2 )
+#define LOG3(s, v1, v2, v3) Log::DoLog( _L(s), v1, v2, v3 )
+
+#define LOG8(s) Log::DoLog8(_L8(s))
+#define LOG81(s, v) Log::DoLog8( _L8(s), v )
+#define LOG82(s, v1, v2) Log::DoLog8( _L8(s), v1, v2 )
+#define LOG83(s, v1, v2, v3) Log::DoLog8( _L8(s), v1, v2, v3 )
+
+#else
+#define LOG(s)
+#define LOG1(s, v)
+#define LOG2(s, v1, v2)
+#define LOG3(s, v1, v2, v3)
+
+#define LOG8(s)
+#define LOG81(s, v)
+#define LOG82(s, v1, v2)
+#define LOG83(s, v1, v2, v3)
+#endif // ENABLE_LOGGING
+
+class Log
+    {
+
+    public:
+    	
+        static void DoLog( TRefByValue<const TDesC> aText, ... );
+
+        static void DoLog8( TRefByValue<const TDesC8> aText, ... );
+    };
+
+#endif  // __CLOG_H__
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintband.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Test print band ECOM plugin
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTBAND_H
+#define DIRECTPRINTBAND_H
+
+// System includes
+#include <e32std.h>
+#include <e32base.h>
+#include <gdi.h>
+#include <ecom/ecom.h>
+
+// Forward declarations
+class CDirectPrintBand;
+class CPrintSetup;
+class RXmlEngDocument;
+class MPageRegionPrinter;
+
+// CLASS DECLARATION
+
+/**
+ *  CDirectPrintBand
+ * 
+ */
+class CDirectPrintBand : public CBase
+	{
+public:
+	inline static CDirectPrintBand* NewL(TUid aImplementationUid);
+	virtual ~CDirectPrintBand();
+
+	/**
+	 * Initialize the print band 
+	 *
+	 * @param aPrintSetup Pointer to the CPrintSetup
+	 * @param aParam Xml parameter object
+	 * @param aFileName Sets the file name if define the file name to xml,
+	 *					Not set if not define the file name to xml
+	 */
+	virtual void InitPrintBandL(CPrintSetup* aPrintSetup,
+								RXmlEngDocument* aParam,
+								const TDesC& aFileName) = 0;
+
+	/**
+	 * Return the print band object
+	 *
+	 * @return MPageRegionPrinter* Pointer to the print band object
+	 */
+	virtual MPageRegionPrinter* RegionPrinter() = 0;
+
+	/**
+	 * Return the total page number
+	 *
+	 * @return TInt the total page number
+	 */
+	virtual TInt PageNum() = 0;
+
+public:
+	TUid iDtorIdKey;
+	};
+
+inline CDirectPrintBand* CDirectPrintBand::NewL(TUid aImplementationUid)
+	{ // static
+	TAny* any = REComSession::CreateImplementationL(aImplementationUid,
+									 _FOFF(CDirectPrintBand, iDtorIdKey));
+	CDirectPrintBand* plugin = reinterpret_cast<CDirectPrintBand*>(any);
+	return plugin;
+	}
+
+inline CDirectPrintBand::~CDirectPrintBand()
+	{
+	REComSession::DestroyedImplementation(iDtorIdKey);
+	}
+
+#endif // DIRECTPRINTBAND_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintbanduid.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* Test print band ECOM plugin
+*
+*/
+
+// Protection against nested includes
+#ifndef DIRECTPRINTBANDUID_H
+#define DIRECTPRINTBANDUID_H
+
+// The UIDs are defined for Direct Print band plugin
+
+// Interface Uid for print band plugin
+#define KDirectPrintBandInterfaceUid 0x2002BB30
+
+#endif // DIRECTPRINTBANDUID_H
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintcapability.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the TDirectPrintCapability class definition.
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTCAPABILITY_H
+#define DIRECTPRINTCAPABILITY_H
+
+// System includes
+#include <e32base.h>
+
+/**
+ *	@brief A printer capability abstraction.
+ *
+ *	Class describing a capability (i.e. paper sizes or layouts) supported by a printing device.
+ *	Published as part of the ImagePrint Server API. 
+ */
+ 
+#define KMaxEnumAmount 20 
+ 
+class TDirectPrintCapability
+	{
+	public:
+		enum ECapType
+			{
+			Int = 0,
+			Enum = 1,
+			Float = 2,
+			Text = 3
+			};
+		
+		TInt					iCapabilityID;
+		ECapType				iType;
+		TInt					iDefaultValue;
+		TInt					iLow;
+		TInt					iHigh;
+		TInt					iEnumCount;
+		TInt					iEnumCodes[KMaxEnumAmount];
+	};
+
+#endif // DIRECTPRINTCAPABILITY_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintcapabilitycodes.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  Contains the TPrintCapabilityCodes and TPrintCapabilityOptions enumerations.
+*
+*/
+
+
+// Protection against nested includes
+#ifndef PRINTCAPABILITYCODES_H
+#define PRINTCAPABILITYCODES_H
+
+/// All the printer capabilities
+enum TPrintCapabilityCodes
+    {
+		EDirectPrintCapabLayout = 500,
+		EDirectPrintCapabPaperSize = 501,
+		EDirectPrintCapabQuality = 502,
+		EDirectPrintCapabAP = 600,
+		EDirectPrintCapabHost = 601,
+		EDirectPrintCapabPort = 602,
+		EDirectPrintCapabUser = 603,
+		EDirectPrintCapabQue = 604,
+		EDirectPrintCapabExtent = 901,
+		EDirectPrintCapabExtent2 = 902
+    };
+
+/// Print capability generic options
+enum TPrintCapabilityOptions
+	{
+		// Generic
+		EDirectPrintCapabYes = 1000,
+		EDirectPrintCapabNo = 1001,
+		EDirectPrintCapabOn = 1002,
+		EDirectPrintCapabOff = 1003,
+
+		// Quality
+		EDirectPrintCapabQualityDefault = 1100,
+		EDirectPrintCapabQualityNormal = 1101,
+		EDirectPrintCapabQualityDraft = 1102,
+		EDirectPrintCapabQualityFine = 1103,   
+
+		// Paper size 
+		EDirectPrintCapabPaperSizeAuto = 1200,
+		EDirectPrintCapabPaperSizeLetter = 1201,
+		EDirectPrintCapabPaperSizeA4 = 1221,
+		EDirectPrintCapabPaperSizeA6 = 1222,
+		EDirectPrintCapabPaperSize4x6 = 1250,
+		EDirectPrintCapabPaperSize5x7 = 1251,
+		EDirectPrintCapabPaperSizeSticker = 1270,
+
+		// Extent
+		EDirectPrintCapabExtentSelect1 = 9001,
+		EDirectPrintCapabExtentSelect2 = 9002,
+		EDirectPrintCapabExtentSelect3 = 9003,
+		EDirectPrintCapabExtentSelect4 = 9004
+	};
+
+#endif  //  PRINTCAPABILITYCODES_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintclient.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,315 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+#ifndef RDIRECTPRINTCLIENT_H
+#define RDIRECTPRINTCLIENT_H
+
+#include <e32std.h>
+
+#include "directprintselectitem.h"
+
+class TDirectPrintCapability;
+//class TIdleGuardData;
+//class TDiscoveryGuardData;
+class TDirectPrintJobGuardData;
+
+class RDirectPrintClient : public RSessionBase
+	{
+	public:
+
+		/**
+         *	Constructor      
+         */
+		IMPORT_C RDirectPrintClient();
+
+		/**
+         *	Connect to the DirectPrint server
+		 *
+		 *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C void ConnectL();
+
+		/**
+         *	Close the session         
+         */
+		IMPORT_C void Close();
+
+		/**
+         *	Count connections to the server ( all clients in all prosesses )
+         *	
+		 *	@param aConnections holder for connnections count 
+         *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C TInt CountConnections( TInt& aConnections ) const;
+		
+		/**    
+		 *	Inform server about foreground/background state of the client
+		 *
+		 *	@param aFg foreground/background flag
+         *  @return KErrNone if successful, otherwise another of the system-wide error codes
+         */
+		IMPORT_C TInt SetForeground( TInt aFg ) const;
+	
+		
+		/**
+         *	Reserves DirectPrint engine for this client
+         *	
+         *  @return KErrNone if successful, KErrInUse if used by another client
+         */
+		IMPORT_C TInt ReserveEngine() const;
+
+		/**
+         *	Releases DirectPrint engine
+         *	
+         *  @return KErrNone if successful, KErrInUse if used by another client 
+         */
+		IMPORT_C TInt ReleaseEngine() const;
+		
+		/**
+         *	Get protocols supported by DirectPrint engine
+         *	
+         *  @return OR:ed protocols or KErrInUse if used by another client 
+         */
+		IMPORT_C TInt SupportedProtocols() const;				
+		
+		/**
+		 *	Gets the number of pages to be printed
+		 *
+		 *	@return Number of pages to print or KErrInUse if used by another client  
+		 */
+		IMPORT_C TInt GetNumPrintPages() const;
+		
+		/**
+		 *	Gets the status of the printing job created
+		 *
+		 *	@return Printing job status or KErrInUse if used by another client
+		 */
+		IMPORT_C TInt GetJobStatus() const;
+		
+		/**
+		 *	Gets the status of the printer
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterStatus( TInt aPrinterID ) const;
+		
+		/**
+		 *	Cancel discovery
+		 *
+		 *	@return KErrNone or KErrInUse if used by another client
+		 */
+		IMPORT_C TInt CancelDiscovery() const;
+		
+		/**
+		 *	Submits a print job already created. The actual job execution is asynchronous so this 
+		 *	function returns immediately. If successful, notification of job status and job 
+		 *	completion is received by the client through the MPrintEventObserver.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SubmitPrintJob() const;
+		
+		/**
+		 *	Cancels the print job. This is an asynchronous command. MPrintEventObserver::PrintJobProgressEvent 
+		 *	will be called with the status of TPrintJobProgressEventStatus::EDone when the cancellation 
+		 *	is completed. The notification can potentially be received by the client before 
+		 *	this command returns to the client.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelPrintJob() const;
+		
+		/**
+		 *	Continues printing and / or submitting a print job.
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt ContinuePrintJob() const;
+		
+		/**
+		 *	Removes a specified cached printer.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to remove.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt RemoveCachedPrinter( TInt aPrinterID ) const;
+		
+		/**
+		 *	Gets the icon representing a given layout or template.
+		 *
+		 *	@param aTemplateID ID of the template / layout of interest.
+		 *	@param aFbsBitmapHandle Handle to the appropriate bitmap.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetJobTemplateIcon( TInt aTemplateID, TInt& aFbsBitmapHandle ) const;
+		
+		/**
+		 *	Gets the number of pages in the preview.
+		 *
+		 *	@return Number of pages in the preview. 
+		 */
+		IMPORT_C TInt GetNumPreviewPages() const;
+		
+		/**
+		 *	Sets a print job setting.
+		 *
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aValue New capability value.
+		 *	@param aAffectedCapability ID of any affected capability.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SetJobSetting( TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability ) const;
+		
+		/**
+		 *	Gets a setting configured for the created print job.
+		 *
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aValue Capability value.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetJobSetting( TInt aCapabilityID, TInt& aValue ) const;
+		
+		/**
+		 *	Gets the detail of a certain capability of a certain printer.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *	@param aCapabilityID ID of the capability of interest.
+		 *	@param aCapability Capability information.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterCapability(TInt aPrinterID, TInt aCapabilityID, TDirectPrintCapability& aCapability) const;
+		
+		/**
+		 *	Gets the IDs of the capabilities supported by the printer specified.
+		 *
+		 *	@param aPrinterID The exposed ID of the printer the client wants to know about.
+		 *	@param aCapabilityIDs Array containing the ID's of the capabilities of the specified printer.
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt GetPrinterCapabilityIDs( TInt aPrinterID, RArray<TInt>& aCapabilityIDs ) const;
+		
+		/**
+		 *  Registers the IdleObserver to send idle event notifications. Asynchronous function.
+		 *
+		 *  @param aData place holder for idle event. On function completion contains idle event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt RegisterIdleObserver( TIdleGuardData& aData, TRequestStatus& aStatus );
+		
+		/**
+		 *  Cancel registering idle observer
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt CancelRegisterIdleObserver() const;
+		
+		/**
+		 *  Start discovery and set request for discovery event. Asynchronous function.
+		 *
+		 *  @param aData place holder for discovery event. On function completion contains discovery event data.
+		 *	@param aProtocols OR:ed protocol ids
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt StartDiscovery( TDiscoveryGuardData& aData, TUint aProtocols, TRequestStatus& aStatus );
+		
+		/**
+		 *  Set next request for discovery event. Asynchronous function.
+		 *
+		 *  @param aData place holder for discovery event. On function completion contains discovery event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+//		IMPORT_C TInt ContinueDiscovery( TDiscoveryGuardData& aData, TRequestStatus& aStatus );
+
+		/**
+		 *  Create print job and set request for print job event. Asynchronous function.
+		 *
+		 *	@param aPrinterID printer id
+		 *  @param aData place holder for print job event. On function completion contains print job event data.
+		 *	@param aImages array of image file names
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CreateJob( TInt aPrinterID, TDirectPrintJobGuardData& aData, RPointerArray<TDesC>& aImages, TRequestStatus& aStatus );
+		
+		/**
+		 *  Set next request for print job event. Asynchronous function.
+		 *
+		 *  @param aData place holder for print job event. On function completion contains print job event data.
+		 *  @param aStatus request status
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt ContinueCreateJob( TDirectPrintJobGuardData& aData, TRequestStatus& aStatus );
+		
+		/**
+		 *  Cancel starting discovery
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelStartDiscovery() const;
+		
+		/**
+		 *  Cancel creating print job
+		 *
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt CancelCreateJob() const;
+
+		/**
+		 *	PictBridge USB mode checker
+		 *
+		 *	@return TInt value more than 0, if PictBridge USB mode is on; 0 if off; negative value if error
+		 */
+		IMPORT_C TInt IsPictBridgeMode() const;
+		
+		/**
+		 *  Set number of copies
+		 *
+		 *  @param aArray array of number of copies elements. Each array element corresponds to the array
+		 *		of image file names of created print job
+		 *  @return Any standard Symbian error code or error codes [ KErrInvalidSequence (-50) / KErrInvalidData (-51) ].
+		 */
+		IMPORT_C TInt SetNumberOfCopies( const RArray<TInt>& aArray ) const;
+
+		IMPORT_C TInt GetProtocolNames(RSelectItemArray& aNames) const;
+
+	public:
+
+		/**
+		 *	Version getter
+		 *
+		 *	@return version of the client
+		 */
+		TVersion Version() const;
+
+	private:
+		
+		TPtr8 iDicsoveryDataPtr;
+		TPtr8 iIdleDataPtr;
+		TPtr8 iJobDataPtr;
+		TDirectPrintCapability* iCapability;
+		TPtr8 iNameDataPtr;
+	};
+	
+	
+#endif // RDIRECTPRINTCLIENT_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintclientserver.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTCLIENTSERVER_H
+#define DIRECTPRINTCLIENTSERVER_H
+
+// System include files
+#include <e32std.h>
+
+// User include files
+#include "directprintserveruid.h"
+
+_LIT( KDirectPrintServerName, "directprintserver" );
+_LIT( KDirectPrintServerImg, "directprintserver" );		// EXE name
+
+const TInt KMaxDirectPrintMessage = 512;
+const TInt KDirectPrintServerMajor = 0;
+const TInt KDirectPrintServerMinor = 0;
+const TInt KDirectPrintServerBuild = 0;
+
+enum TDirectPrintMessages
+	{
+	ECountConnections = 0,
+	ESetForeground,
+	EReserveEngine,
+	EReleaseEngine,
+	ESupportedProtocols,
+	EGetNumPrintPages,
+	EGetJobStatus,
+	EGetPrinterStatus,
+	ECancelDiscovery,
+	ESubmitPrintJob,
+	ECancelPrintJob, // 10
+	EContinuePrintJob,
+	ERemoveCachedPrinter,
+	EGetJobTemplateIcon,
+	EGetNumPreviewPages,
+	ESetJobSetting,
+	EGetJobSetting,
+	EGetPrinterCapability,
+	EGetPrinterCapId,
+	EGetPrinterCapType,
+	EGetPrinterCapDef, // 20
+	EGetPrinterCapLow,
+	EGetPrinterCapHigh,
+	EGetPrinterCapEnumCount,
+	EGetPrinterCapEnum,
+	EGetPrinterCapabilityIDsCount,
+	EGetPrinterCapabilityID,
+	ERegisterIdleObserver,
+	ECancelRegisterIdleObserver,
+	EStartDiscovery,
+	EContinueDiscovery, // 30
+	EPrepareJob,
+	ECreateJob,
+	EContinueCreateJob,
+	ECancelStartDiscovery,
+	ECancelCreateJob,
+	EIsPictBridgeMode,
+	ESetNumberOfCopiesCount,
+	ESetNumberOfCopies, // 38
+	EGetProtocolNamesCount,
+	EGetProtocolName
+	};
+
+#endif// DIRECTPRINTCLIENTSERVER_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintjobguarddata.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTJOBGUARDDATA_H
+#define DIRECTPRINTJOBGUARDDATA_H
+
+// System includes
+#include <e32def.h>
+
+class TDirectPrintJobGuardData
+	{
+public:
+
+	enum TCallbackNum
+		{
+		EProgressEventCb = 0,
+		EErrorEventCb,
+		EStatusEventCb,
+		EImageEventCb
+		};
+
+public:
+
+	TInt iStatus;
+	TInt iPercentCompletion;
+	TInt iJobStateCode;
+	TInt iError;
+	TInt iErrorStringCode;
+	TInt iFsBitmapHandle;
+	TCallbackNum iCb;
+	};
+
+#endif // DIRECTPRINTJOBGUARDDATA_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintselectitem.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef __DIRECTPRINTSELECTITEM_H__
+#define __DIRECTPRINTSELECTITEM_H__
+
+// System includes
+#include <e32cmn.h>
+
+// Class declaration
+/**
+ *  Select item information class
+ *  more_complete_description
+ */
+class TDirectPrintSelectItem
+	{
+public:
+	/** Id. */
+	TInt iId;
+	/** Name. */
+	TBuf<50> iName;
+	};
+
+typedef RArray<TDirectPrintSelectItem> RSelectItemArray;
+
+#endif // __DIRECTPRINTSELECTITEM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintserveruid.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef DIRECTPRINTSERVERUID_H
+#define DIRECTPRINTSERVERUID_H
+
+// Image Print Server UID3
+
+#define KDIRECTPRINTSERVERUID3 0x2002BB2C
+
+#endif  // DIRECTPRINTSERVERUID_H
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/directprintuiplugin.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* {Description of the file}
+*
+*/
+
+// Protection against nested includes
+#ifndef _DIRECTPRINTUIPLUGIN_H_
+#define _DIRECTPRINTUIPLUGIN_H_
+
+// System includes
+#include <e32base.h>
+#include <coecntrl.h>
+#include <ecom.h>
+
+// User includes
+#include "directprintpropertydata.h"
+
+// Forward declarations
+class CAknSettingItemArray;
+class RReadStream;
+class RWriteStream;
+
+//Constants
+/**  Interface UID */
+const TUid KUidDirectPrintUiPluginInterface = { 0x2002BB33 };
+
+// Class declaration
+/**
+ *  Ui plugin class
+ *  more_complete_description
+ */
+class CDirectPrintUiPlugin : public CBase
+	{
+public:
+	inline static CDirectPrintUiPlugin* NewL(TUid aUid);
+	inline static CDirectPrintUiPlugin* NewL(const TDesC8& aKey);
+	virtual ~CDirectPrintUiPlugin();
+
+public:
+	inline static void GetPluginListL(RImplInfoPtrArray& aArray);
+
+public:
+	virtual void InternalizePropertiesL(RReadStream& aStream) = 0;
+	virtual void ExternalizePropertiesL(RWriteStream& aStream) = 0;
+
+	virtual void LoadExtendItemsL(CAknSettingItemArray& aArray, TInt aId) = 0;
+	virtual void ReadDataL(TDirectPrintPropertyData& aData) = 0;
+	virtual void WriteDataL(RDPPropertyDataArray& aArray) = 0;
+	virtual void NewDataL() = 0;
+
+protected:
+	inline CDirectPrintUiPlugin();
+
+private:
+	TUid iDtor_ID_Key;
+	};
+
+
+// Inline codepart
+inline CDirectPrintUiPlugin::CDirectPrintUiPlugin()
+	{
+	}
+
+inline CDirectPrintUiPlugin* CDirectPrintUiPlugin::NewL(TUid aUid)
+	{
+	TAny* any = REComSession::CreateImplementationL(aUid, _FOFF(CDirectPrintUiPlugin, iDtor_ID_Key));
+	CDirectPrintUiPlugin* plugin = reinterpret_cast<CDirectPrintUiPlugin*>(any);
+	return plugin;
+	}
+
+inline CDirectPrintUiPlugin* CDirectPrintUiPlugin::NewL(const TDesC8& aKey)
+	{
+	TEComResolverParams params;
+	params.SetDataType(aKey);
+	params.SetWildcardMatch(ETrue);
+
+	TAny* any = REComSession::CreateImplementationL(KUidDirectPrintUiPluginInterface, _FOFF(CDirectPrintUiPlugin, iDtor_ID_Key), NULL, params);
+	CDirectPrintUiPlugin* plugin = reinterpret_cast<CDirectPrintUiPlugin*>(any);
+	return plugin;
+	}
+
+inline CDirectPrintUiPlugin::~CDirectPrintUiPlugin()
+	{
+	REComSession::DestroyedImplementation(iDtor_ID_Key);
+	}
+
+inline void CDirectPrintUiPlugin::GetPluginListL(RImplInfoPtrArray& aArray)
+	{
+	REComSession::ListImplementationsL(KUidDirectPrintUiPluginInterface, aArray);
+	}
+
+#endif // _DIRECTPRINTUIPLUGIN_H_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/inc/logdef.h	Fri Oct 22 14:43:23 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Kanrikogaku Kenkyusho, Ltd. - Initial contribution
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+
+
+// Protection against nested includes
+#ifndef LOGDEF_H
+#define LOGDEF_H
+
+//#define ENABLE_LOGGING
+//#define LOG_TO_FILE
+
+/*
+#ifdef _DEBUG
+// logging is always enabled in debug builds
+#define ENABLE_LOGGING
+#else
+// manually enable in release builds
+//#define ENABLE_LOGGING
+#endif // _DEBUG
+
+#define LOG_TO_FILE
+*/
+
+#endif // LOGDEF_H
+
+//  End of File