Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'awt/printing.cs')
-rw-r--r--awt/printing.cs335
1 files changed, 0 insertions, 335 deletions
diff --git a/awt/printing.cs b/awt/printing.cs
deleted file mode 100644
index 1cce4826..00000000
--- a/awt/printing.cs
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- Copyright (C) 2009 Volker Berlin (i-net software)
- Copyright (C) 2010 Karsten Heinrich (i-net software)
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jeroen Frijters
- jeroen@frijters.net
-
-*/
-
-using System;
-using System.Runtime.InteropServices;
-using Microsoft.Win32.SafeHandles;
-using System.Drawing.Printing;
-
-namespace ikvm.awt.printing
-{
- /// <summary>
- /// Base Implementation of the PrintPeer
- /// </summary>
- abstract class BasePrintPeer : sun.print.PrintPeer
- {
- public virtual Object getPrinterStatus(String PrinterName, java.lang.Class category)
- {
- return null;
- }
-
- public String getDefaultPrinterName()
- {
- return new PrinterSettings().PrinterName;
- }
-
- public String[] getAllPrinterNames()
- {
- PrinterSettings.StringCollection printers = PrinterSettings.InstalledPrinters;
- String[] result = new String[printers.Count];
- printers.CopyTo(result, 0);
- return result;
- }
-
- public java.awt.Graphics2D createGraphics(System.Drawing.Graphics g)
- {
- return new PrintGraphics(g);
- }
- }
-
- /// <summary>
- /// Implementation of the PrintPeer for Linux
- /// </summary>
- class LinuxPrintPeer : BasePrintPeer
- {
- }
-
- /// <summary>
- /// Implementation of the PrintPeer for Windows
- /// </summary>
- class Win32PrintPeer : BasePrintPeer
- {
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
- private struct PRINTER_INFO_2
- {
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pServerName;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pPrinterName;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pShareName;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pPortName;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pDriverName;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pComment;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pLocation;
- public IntPtr pDevMode;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pSepFile;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pPrintProcessor;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pDatatype;
- [MarshalAs(UnmanagedType.LPTStr)]
- public string pParameters;
- public IntPtr pSecurityDescriptor;
- public uint Attributes;
- public uint Priority;
- public uint DefaultPriority;
- public uint StartTime;
- public uint UntilTime;
- public int Status;
- public int cJobs;
- public uint AveragePPM;
- }
-
- [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern bool GetPrinter(SafePrinterHandle hPrinter, int dwLevel, IntPtr pPrinter, int cbBuf, out int pcbNeeded);
-
- [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)]
- private static extern bool OpenPrinter(string pPrinterName, out SafePrinterHandle hPrinter, IntPtr pDefault);
-
- private const int ERROR_INSUFFICIENT_BUFFER = 122;
-
- private const int PRINTER_STATUS_PAUSED = 0x1;
- private const int PRINTER_STATUS_ERROR = 0x2; // MSDN says that this value is not used
- private const int PRINTER_STATUS_PENDING_DELETION = 0x4;
- private const int PRINTER_STATUS_PAPER_JAM = 0x8;
- private const int PRINTER_STATUS_PAPER_OUT = 0x10;
- private const int PRINTER_STATUS_MANUAL_FEED = 0x20;
- private const int PRINTER_STATUS_PAPER_PROBLEM = 0x40;
- private const int PRINTER_STATUS_OFFLINE = 0x80;
- private const int PRINTER_STATUS_IO_ACTIVE = 0x100;
- private const int PRINTER_STATUS_BUSY = 0x200;
- private const int PRINTER_STATUS_PRINTING = 0x400;
- private const int PRINTER_STATUS_OUTPUT_BIN_FULL = 0x800;
- private const int PRINTER_STATUS_NOT_AVAILABLE = 0x1000;
- private const int PRINTER_STATUS_WAITING = 0x2000;
- private const int PRINTER_STATUS_PROCESSING = 0x4000;
- private const int PRINTER_STATUS_INITIALIZING = 0x8000;
- private const int PRINTER_STATUS_WARMING_UP = 0x10000;
- private const int PRINTER_STATUS_TONER_LOW = 0x20000;
- private const int PRINTER_STATUS_NO_TONER = 0x40000;
- private const int PRINTER_STATUS_PAGE_PUNT = 0x80000;
- private const int PRINTER_STATUS_USER_INTERVENTION = 0x100000;
- private const int PRINTER_STATUS_OUT_OF_MEMORY = 0x200000;
- private const int PRINTER_STATUS_DOOR_OPEN = 0x400000;
- private const int PRINTER_STATUS_SERVER_UNKNOWN = 0x800000;
- private const int PRINTER_STATUS_POWER_SAVE = 0x1000000;
-
- /// <summary>
- /// Get a printer status
- /// </summary>
- /// <param name="printerName">a valid printer name</param>
- /// <param name="category">a category that should request</param>
- /// <returns>a printer attribute or null</returns>
- public override Object getPrinterStatus(String printerName, java.lang.Class category)
- {
- int cJobs;
- int status;
- if (GetPrinterInfo2(printerName, out cJobs, out status))
- {
- if (category == (java.lang.Class)typeof(javax.print.attribute.standard.PrinterState))
- {
- if ((status &
- (PRINTER_STATUS_ERROR | PRINTER_STATUS_NO_TONER | PRINTER_STATUS_OUT_OF_MEMORY |
- PRINTER_STATUS_OFFLINE | PRINTER_STATUS_USER_INTERVENTION |
- PRINTER_STATUS_DOOR_OPEN | PRINTER_STATUS_NOT_AVAILABLE )) > 0)
- {
- return javax.print.attribute.standard.PrinterState.STOPPED;
- }
- if( (status & (PRINTER_STATUS_BUSY | PRINTER_STATUS_PRINTING ))> 0 )
- {
- return javax.print.attribute.standard.PrinterState.PROCESSING;
- }
- return null;
- // null seems to be the default instead of unknown - UNKOWN ist not used in the reference RT
- // javax.print.attribute.standard.PrinterState.UNKNOWN;
- }
- if (category == (java.lang.Class)typeof(javax.print.attribute.standard.PrinterStateReasons))
- {
- return extractResions(status);
- }
- if (category == (java.lang.Class)typeof(javax.print.attribute.standard.QueuedJobCount))
- {
- return new javax.print.attribute.standard.QueuedJobCount(cJobs);
- }
- if (category == (java.lang.Class)typeof(javax.print.attribute.standard.PrinterIsAcceptingJobs))
- {
- if ((status &
- (PRINTER_STATUS_ERROR |
- PRINTER_STATUS_NO_TONER |
- PRINTER_STATUS_OUT_OF_MEMORY |
- PRINTER_STATUS_OFFLINE |
- PRINTER_STATUS_USER_INTERVENTION |
- PRINTER_STATUS_DOOR_OPEN)) > 0)
- {
- return javax.print.attribute.standard.PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS;
- }
- else
- {
- return javax.print.attribute.standard.PrinterIsAcceptingJobs.ACCEPTING_JOBS;
- }
- }
- }
- return null;
- }
-
- private javax.print.attribute.standard.PrinterStateReasons extractResions(int status)
- {
- javax.print.attribute.standard.PrinterStateReasons reasons = new javax.print.attribute.standard.PrinterStateReasons();
- if ((status & PRINTER_STATUS_PAUSED) > 0)
- {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.PAUSED, javax.print.attribute.standard.Severity.REPORT);
- }
- if ((status & PRINTER_STATUS_ERROR) > 0)
- {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.OTHER, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_PENDING_DELETION) > 0) { }
- if ((status & PRINTER_STATUS_PAPER_JAM) > 0)
- {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.MEDIA_JAM, javax.print.attribute.standard.Severity.WARNING);
- }
- if ((status & PRINTER_STATUS_PAPER_OUT) > 0)
- {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.MEDIA_EMPTY, javax.print.attribute.standard.Severity.WARNING);
- }
- if ((status & PRINTER_STATUS_MANUAL_FEED) > 0) { }
- if ((status & PRINTER_STATUS_PAPER_PROBLEM) > 0) {}
- if ((status & PRINTER_STATUS_OFFLINE) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.TIMED_OUT, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_IO_ACTIVE) > 0) { }
- if ((status & PRINTER_STATUS_BUSY) > 0) { }
- if ((status & PRINTER_STATUS_PRINTING) > 0) { }
- if ((status & PRINTER_STATUS_OUTPUT_BIN_FULL) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.OUTPUT_AREA_FULL, javax.print.attribute.standard.Severity.WARNING);
- }
- if ((status & PRINTER_STATUS_NOT_AVAILABLE) > 0) { }
- if ((status & PRINTER_STATUS_WAITING) > 0) { }
- if ((status & PRINTER_STATUS_PROCESSING) > 0) { }
- if ((status & PRINTER_STATUS_INITIALIZING) > 0) { }
- if ((status & PRINTER_STATUS_WARMING_UP) > 0) { }
- if ((status & PRINTER_STATUS_TONER_LOW) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.TONER_LOW, javax.print.attribute.standard.Severity.WARNING);
- }
- if ((status & PRINTER_STATUS_NO_TONER) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.TONER_EMPTY, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_PAGE_PUNT) > 0) { }
- if ((status & PRINTER_STATUS_USER_INTERVENTION) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.OTHER, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_OUT_OF_MEMORY) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.OTHER, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_DOOR_OPEN) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.DOOR_OPEN, javax.print.attribute.standard.Severity.ERROR);
- }
- if ((status & PRINTER_STATUS_SERVER_UNKNOWN) > 0) { }
- if ((status & PRINTER_STATUS_POWER_SAVE) > 0) {
- reasons.put(javax.print.attribute.standard.PrinterStateReason.PAUSED, javax.print.attribute.standard.Severity.REPORT);
- }
- return reasons.isEmpty() ? null : reasons;
- }
-
- /// <summary>
- /// Get infos from the PRINTER_INFO_2 struc
- /// </summary>
- /// <param name="printerName">The name of a valid printer</param>
- /// <param name="cJobs">returns the current count of print jobs</param>
- /// <param name="status">returns the current status of the printer</param>
- /// <returns>true if the return is valid</returns>
- [System.Security.SecuritySafeCritical]
- private static bool GetPrinterInfo2(string printerName, out int cJobs, out int status)
- {
- SafePrinterHandle printer = null;
- try
- {
- int needed = 0;
- if (OpenPrinter(printerName, out printer, IntPtr.Zero)
- && !GetPrinter(printer, 2, IntPtr.Zero, 0, out needed))
- {
- int lastWin32Error = Marshal.GetLastWin32Error();
- if (lastWin32Error == ERROR_INSUFFICIENT_BUFFER)
- {
- IntPtr pPrinter = Marshal.AllocHGlobal((int)needed);
- try
- {
- if (GetPrinter(printer, 2, pPrinter, needed, out needed))
- {
- PRINTER_INFO_2 printerInfo2 = (PRINTER_INFO_2)Marshal.PtrToStructure(pPrinter, typeof(PRINTER_INFO_2));
- cJobs = printerInfo2.cJobs;
- status = printerInfo2.Status;
- return true;
- }
- }
- finally
- {
- Marshal.FreeHGlobal(pPrinter);
- }
- }
- }
- }
- finally
- {
- if (printer != null)
- {
- printer.Close();
- }
- }
- cJobs = 0;
- status = 0;
- return false;
- }
-
- }
-
- [System.Security.SecurityCritical]
- sealed class SafePrinterHandle : SafeHandleZeroOrMinusOneIsInvalid
- {
- [DllImport("winspool.drv")]
- private static extern bool ClosePrinter(IntPtr hPrinter);
-
- private SafePrinterHandle()
- : base(true)
- {
- }
-
- [System.Security.SecurityCritical]
- protected override bool ReleaseHandle()
- {
- return ClosePrinter(handle);
- }
- }
-
- class Win32Print
- {
- }
-}