summaryrefslogtreecommitdiffstats
path: root/kdeprint/kmprinter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeprint/kmprinter.cpp')
-rw-r--r--kdeprint/kmprinter.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/kdeprint/kmprinter.cpp b/kdeprint/kmprinter.cpp
new file mode 100644
index 000000000..6467970c2
--- /dev/null
+++ b/kdeprint/kmprinter.cpp
@@ -0,0 +1,224 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include "kmprinter.h"
+#include "kprinter.h"
+#include "driver.h"
+
+#include <klocale.h>
+#include <kfiledialog.h>
+
+KMPrinter::KMPrinter()
+: KMObject()
+{
+ m_type = KMPrinter::Printer;
+ m_dbentry = 0;
+ m_harddefault = m_softdefault = m_ownsoftdefault = false;
+ m_driver = 0;
+ m_isedited = false;
+ m_printercap = 0;
+}
+
+KMPrinter::KMPrinter(const KMPrinter& p)
+: KMObject()
+{
+ m_driver = 0; // don't copy driver structure
+ m_harddefault = m_softdefault = m_ownsoftdefault = false;
+ m_isedited = false;
+ copy(p);
+}
+
+KMPrinter::~KMPrinter()
+{
+ delete m_driver;
+}
+
+void KMPrinter::copy(const KMPrinter& p)
+{
+ m_name = p.m_name;
+ m_printername = p.m_printername;
+ m_instancename = p.m_instancename;
+ m_type = p.m_type;
+ m_state = p.m_state;
+ m_device = p.m_device;
+ m_members = p.m_members;
+ m_description = p.m_description;
+ m_location = p.m_location;
+ m_manufacturer = p.m_manufacturer;
+ m_model = p.m_model;
+ m_uri = p.m_uri;
+ m_driverinfo = p.m_driverinfo;
+ m_dbentry = p.m_dbentry;
+ m_pixmap = p.m_pixmap;
+ //m_harddefault = p.m_harddefault;
+ //m_softdefault = p.m_softdefault;
+ m_options = p.m_options;
+ m_printercap = p.m_printercap;
+ setDiscarded(false);
+}
+
+void KMPrinter::setDriver(DrMain *driver)
+{
+ delete m_driver;
+ m_driver = driver;
+}
+
+DrMain* KMPrinter::takeDriver()
+{
+ DrMain *dr = m_driver;
+ m_driver = 0;
+ return dr;
+}
+
+QString KMPrinter::pixmap()
+{
+ if (!m_pixmap.isEmpty()) return m_pixmap;
+
+ QString str("kdeprint_printer");
+ if (!isValid()) str.append("_defect");
+ else
+ {
+ //if (isHardDefault()) str.append("_default");
+ if (isClass(true)) str.append("_class");
+ else if (isRemote()) str.append("_remote");
+ switch (state())
+ {
+ case KMPrinter::Stopped:
+ str.append("_stopped");
+ break;
+ case KMPrinter::Processing:
+ str.append("_process");
+ break;
+ default:
+ break;
+ }
+ }
+ return str;
+}
+
+int KMPrinter::compare(KMPrinter *p1, KMPrinter *p2)
+{
+ if (p1 && p2)
+ {
+ bool s1(p1->isSpecial()), s2(p2->isSpecial());
+ if (s1 && s2) return QString::compare(p1->name(),p2->name());
+ else if (s1) return 1;
+ else if (s2) return -1;
+ else
+ {
+ bool c1(p1->isClass(false)), c2(p2->isClass(false));
+ if (c1 == c2) return QString::compare(p1->name(),p2->name());
+ else if (c1 && !c2) return -1;
+ else if (!c1 && c2) return 1;
+ }
+ }
+ return 0;
+}
+
+QString KMPrinter::stateString() const
+{
+ QString s;
+ switch (state())
+ {
+ case KMPrinter::Idle: s = i18n("Idle"); break;
+ case KMPrinter::Processing: s = i18n("Processing..."); break;
+ case KMPrinter::Stopped: s = i18n("Stopped"); break;
+ default: return i18n("Unknown State", "Unknown");
+ }
+ s += (" " + (m_state & Rejecting ? i18n("(rejecting jobs)") : i18n("(accepting jobs)")));
+ return s;
+}
+
+bool KMPrinter::autoConfigure(KPrinter *printer, QWidget *parent)
+{
+ // standard settings
+ printer->setPrinterName(printerName());
+ printer->setSearchName(name());
+ // printer default settings (useful for instances)
+ printer->setOptions(defaultOptions());
+ // special printer case:
+ // - add command
+ // - ask for output file (if needed) using default extension.
+ if (isSpecial())
+ {
+ if (option("kde-special-file") == "1")
+ {
+ // build-up default filename/directory
+ QString fName = printer->docFileName(), ext = option( "kde-special-extension" );
+ if ( fName.isEmpty() )
+ fName = ( printer->docName() + "." + ext );
+ else
+ {
+ int p = fName.findRev( '.' );
+ if ( p == -1 )
+ fName.append( "." ).append( ext );
+ else
+ {
+ fName.truncate( p+1 );
+ fName.append( ext );
+ }
+ }
+ fName.prepend( "/" ).prepend( printer->docDirectory() );
+
+ // build-up file dialog
+ KFileDialog *dialog = new KFileDialog (fName,
+ QString::null,
+ parent,
+ "filedialog",
+ true);
+ dialog->setOperationMode (KFileDialog::Saving);
+
+ QString mimetype = option("kde-special-mimetype");
+
+ if (!mimetype.isEmpty())
+ {
+ QStringList filter;
+ filter << mimetype;
+ filter << "all/allfiles";
+ dialog->setMimeFilter (filter, mimetype);
+ }
+ else if (!ext.isEmpty())
+ dialog->setFilter ("*." + ext + "\n*|" + i18n ("All Files"));
+
+ if (dialog->exec ())
+ {
+ printer->setOutputToFile(true);
+ printer->setOutputFileName(dialog->selectedFile ());
+ }
+ else
+ {
+ // action canceled
+ return false;
+ }
+ }
+ printer->setOption( "kde-isspecial", "1" );
+ printer->setOption( "kde-special-command", option( "kde-special-command" ) );
+ }
+
+ return true;
+}
+
+QString KMPrinter::deviceProtocol() const
+{
+ int p = m_device.find( ':' );
+ if ( p != -1 )
+ return m_device.left( p );
+ else
+ return QString::null;
+}