summaryrefslogtreecommitdiffstats
path: root/tdeprint/driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeprint/driver.h')
-rw-r--r--tdeprint/driver.h383
1 files changed, 383 insertions, 0 deletions
diff --git a/tdeprint/driver.h b/tdeprint/driver.h
new file mode 100644
index 000000000..7064e5335
--- /dev/null
+++ b/tdeprint/driver.h
@@ -0,0 +1,383 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (c) 2001 Michael Goffioul <tdeprint@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.
+ **/
+
+#ifndef DRIVER_H
+#define DRIVER_H
+
+#if !defined( _KDEPRINT_COMPILE ) && defined( __GNUC__ )
+#warning internal header, do not use except if you are a KDEPrint developer
+#endif
+
+#include <tqstring.h>
+#include <tqptrlist.h>
+#include <tqdict.h>
+#include <tqmap.h>
+#include <tqrect.h>
+#include <tqsize.h>
+
+#include <kdelibs_export.h>
+
+class DriverItem;
+class TQListView;
+
+/***********************
+ * Forward definitions *
+ ***********************/
+
+class DrBase;
+class DrMain;
+class DrGroup;
+class DrConstraint;
+class DrPageSize;
+
+/*************************************
+ * Base class for all driver objects *
+ *************************************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrBase
+{
+public:
+ enum Type { Base = 0, Main, ChoiceGroup, Group, String, Integer, Float, List, Boolean };
+
+ DrBase();
+ virtual ~DrBase();
+
+ Type type() const { return m_type; }
+ bool isOption() const { return (m_type >= DrBase::String); }
+
+ const TQString& get(const TQString& key) const { return m_map[key]; }
+ void set(const TQString& key, const TQString& val) { m_map[key] = val; }
+ bool has(const TQString& key) const { return m_map.contains(key); }
+ const TQString& name() const { return m_name; }
+ void setName(const TQString& s) { m_name = s; }
+ bool conflict() const { return m_conflict; }
+ void setConflict(bool on) { m_conflict = on; }
+
+ virtual TQString valueText();
+ virtual TQString prettyText();
+ virtual void setValueText(const TQString&);
+ virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
+ virtual void setOptions(const TQMap<TQString,TQString>& opts);
+ virtual void getOptions(TQMap<TQString,TQString>& opts, bool incldef = false);
+ virtual DrBase* clone();
+
+protected:
+ TQMap<TQString,TQString> m_map;
+ QString m_name; // used as a search key, better to have defined directly
+ Type m_type;
+ bool m_conflict;
+};
+
+/**********************
+ * Option group class *
+ **********************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrGroup : public DrBase
+{
+public:
+ DrGroup();
+ ~DrGroup();
+
+ void addOption(DrBase *opt);
+ void addGroup(DrGroup *grp);
+ void addObject(DrBase *optgrp);
+ void clearConflict();
+ void removeOption(const TQString& name);
+ void removeGroup(DrGroup *grp);
+ bool isEmpty();
+
+ virtual DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
+ DrBase* findOption(const TQString& name, DrGroup **parentGroup = 0);
+ DrGroup* findGroup(DrGroup *grp, DrGroup **parentGroup = 0);
+ void setOptions(const TQMap<TQString,TQString>& opts);
+ void getOptions(TQMap<TQString,TQString>& opts, bool incldef = false);
+ DrBase* clone();
+
+ const TQPtrList<DrGroup>& groups() { return m_subgroups; }
+ const TQPtrList<DrBase>& options() { return m_listoptions; }
+
+ static TQString groupForOption( const TQString& optname );
+
+protected:
+ void createTree(DriverItem *parent);
+ void flattenGroup(TQMap<TQString, DrBase*>&, int&);
+
+protected:
+ TQPtrList<DrGroup> m_subgroups;
+ TQDict<DrBase> m_options;
+ TQPtrList<DrBase> m_listoptions; // keep track of order of appearance
+};
+
+/*********************
+ * Main driver class *
+ *********************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrMain : public DrGroup
+{
+public:
+ DrMain();
+ ~DrMain();
+
+ DriverItem* createTreeView(TQListView *parent);
+ void addConstraint(DrConstraint *c) { m_constraints.append(c); }
+ int checkConstraints();
+ DrPageSize* findPageSize(const TQString& name) { return m_pagesizes.find(name); }
+ void addPageSize(DrPageSize *sz);
+ void removeOptionGlobally(const TQString& name);
+ void removeGroupGlobally(DrGroup *grp);
+ TQMap<TQString, DrBase*> flatten();
+ DrMain* cloneDriver();
+
+protected:
+ TQPtrList<DrConstraint> m_constraints;
+ TQDict<DrPageSize> m_pagesizes;
+};
+
+/**********************************************************
+ * Choice group class: a choice that involve a sub-option *
+ **********************************************************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class DrChoiceGroup : public DrGroup
+{
+public:
+ DrChoiceGroup();
+ ~DrChoiceGroup();
+
+ DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
+};
+
+/***********************
+ * String option class *
+ ***********************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrStringOption : public DrBase
+{
+public:
+ DrStringOption();
+ ~DrStringOption();
+
+ virtual TQString valueText();
+ virtual void setValueText(const TQString& s);
+
+protected:
+ QString m_value;
+};
+
+/**********************************
+ * Integer numerical option class *
+ **********************************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrIntegerOption : public DrBase
+{
+public:
+ DrIntegerOption();
+ ~DrIntegerOption();
+
+ virtual TQString valueText();
+ virtual void setValueText(const TQString& s);
+ TQString fixedVal();
+
+protected:
+ int m_value;
+};
+
+/********************************
+ * Float numerical option class *
+ ********************************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrFloatOption : public DrBase
+{
+public:
+ DrFloatOption();
+ ~DrFloatOption();
+
+ virtual TQString valueText();
+ virtual void setValueText(const TQString& s);
+ TQString fixedVal();
+
+protected:
+ float m_value;
+};
+
+/***********************
+ * Single choice class *
+ ***********************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrListOption : public DrBase
+{
+public:
+ DrListOption();
+ ~DrListOption();
+
+ void addChoice(DrBase *ch) { m_choices.append(ch); }
+ TQPtrList<DrBase>* choices() { return &m_choices; }
+ DrBase* currentChoice() const { return m_current; }
+ DrBase* findChoice(const TQString& txt);
+ void setChoice(int choicenum);
+
+ virtual TQString valueText();
+ virtual TQString prettyText();
+ virtual void setValueText(const TQString& s);
+ void setOptions(const TQMap<TQString,TQString>& opts);
+ void getOptions(TQMap<TQString,TQString>& opts, bool incldef = false);
+ DriverItem* createItem(DriverItem *parent, DriverItem *after = 0);
+ DrBase* clone();
+
+protected:
+ TQPtrList<DrBase> m_choices;
+ DrBase *m_current;
+};
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class KDEPRINT_EXPORT DrBooleanOption : public DrListOption
+{
+ /* just an overloaded class, with different type */
+public:
+ DrBooleanOption() : DrListOption() { m_type = DrBase::Boolean; }
+ ~DrBooleanOption() {}
+};
+
+/********************
+ * Constraint class *
+ ********************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class DrConstraint
+{
+public:
+ DrConstraint(const TQString& o1, const TQString& o2, const TQString& c1 = TQString::null, const TQString& c2 = TQString::null);
+ DrConstraint(const DrConstraint&);
+
+ bool check(DrMain*);
+
+protected:
+ QString m_opt1, m_opt2;
+ QString m_choice1, m_choice2;
+ DrListOption *m_option1, *m_option2;
+};
+
+/*******************
+ * Page Size class *
+ *******************/
+
+/**
+ * @internal
+ * This class is internal to KDEPrint and is not intended to be
+ * used outside it. Please do not make use of this header, except
+ * if you're a KDEPrint developer. The API might change in the
+ * future and binary compatibility might be broken.
+ */
+class DrPageSize
+{
+public:
+ DrPageSize(const TQString& s, float width, float height, float left, float bottom, float right, float top);
+ DrPageSize(const DrPageSize&);
+
+ /**
+ * All dimensions are int dot: 1/72th of an inch ( PostScript ).
+ * When rounded, the rounding is made safely: upward for a margin,
+ * downward for a page size.
+ */
+ float pageWidth() const { return m_width; }
+ float pageHeight() const { return m_height; }
+ float leftMargin() const { return m_left; }
+ float rightMargin() const { return m_right; }
+ float topMargin() const { return m_top; }
+ float bottomMargin() const { return m_bottom; }
+ TQString pageName() const { return m_name; }
+
+ TQSize pageSize() const;
+ TQRect pageRect() const;
+ TQSize margins() const;
+
+protected:
+ QString m_name;
+ float m_width, m_height, m_left, m_bottom, m_right, m_top;
+};
+
+#endif