• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KDEPrint

cjanuswidget.cpp

Go to the documentation of this file.
00001 /*
00002  *  This file is part of the KDE libraries
00003  *  Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Library General Public
00007  *  License version 2 as published by the Free Software Foundation.
00008  *
00009  *  This library is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  *  Library General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU Library General Public License
00015  *  along with this library; see the file COPYING.LIB.  If not, write to
00016  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  *  Boston, MA 02110-1301, USA.
00018  **/
00019 
00020 #include "cjanuswidget.h"
00021 
00022 #include <QtCore/QEvent>
00023 #include <QtGui/QLabel>
00024 #include <QtGui/QLayout>
00025 #include <QtGui/QPainter>
00026 #include <QtGui/QScrollBar>
00027 #include <QtGui/QStackedWidget>
00028 #include <QtGui/QItemDelegate>
00029 
00030 #include <klistwidget.h>
00031 #include <kseparator.h>
00032 
00033 class CJanusWidget::CPage
00034 {
00035 public:
00036     QWidget   *m_widget;
00037     QString   m_text;
00038     QString   m_header;
00039     QPixmap   m_pixmap;
00040     QListWidgetItem *m_item;
00041 };
00042 
00043 //***********************************************************************************
00044 
00045 
00046 //***********************************************************************************
00047 
00048 class CJanusWidget::CListBox : public KListWidget
00049 {
00050 public:
00051     CListBox(QWidget *parent = 0);
00052     ~CListBox();
00053 
00054     void computeWidth();
00055 
00056 protected:
00057     virtual bool eventFilter(QObject*, QEvent*);
00058 };
00059 
00060 CJanusWidget::CListBox::CListBox(QWidget *parent)
00061         : KListWidget(parent)
00062 {
00063     verticalScrollBar()->installEventFilter(this);
00064 }
00065 
00066 CJanusWidget::CListBox::~CListBox()
00067 {
00068 }
00069 
00070 bool CJanusWidget::CListBox::eventFilter(QObject *o, QEvent *e)
00071 {
00072     if (e->type() == QEvent::Show || e->type() == QEvent::Hide)
00073         computeWidth();
00074     return KListWidget::eventFilter(o, e);
00075 }
00076 
00077 void CJanusWidget::CListBox::computeWidth()
00078 {
00079     int w(40);
00080     for (int rowIndex = 0 ; rowIndex < count() ; rowIndex++) {
00081         QListWidgetItem *listItem = item(rowIndex);
00082         w = qMax(w, visualItemRect(listItem).width());
00083     }
00084 
00085     if (verticalScrollBar()->isVisible())
00086         w += verticalScrollBar()->sizeHint().width();
00087     w += (frameWidth() * 2);
00088     setFixedWidth(w);
00089 }
00090 
00091 //***********************************************************************************
00092 
00093 CJanusWidget::CJanusWidget(QWidget *parent)
00094         : QWidget(parent)
00095 {
00096 
00097     m_stack = new QStackedWidget(this);
00098     m_header = new QLabel(this);
00099     QFont f(m_header->font());
00100     f.setBold(true);
00101     m_header->setFont(f);
00102 
00103     KSeparator* sep = new KSeparator(Qt::Horizontal, this);
00104     sep->setFixedHeight(5);
00105 
00106     m_iconlist = new CListBox(this);
00107     f = m_iconlist->font();
00108     f.setBold(true);
00109     m_iconlist->setFont(f);
00110     connect(m_iconlist, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), SLOT(slotSelected(QListWidgetItem*)));
00111 
00112     m_empty = new QWidget(this);
00113     m_empty->setObjectName("Empty");
00114     m_stack->insertWidget(0, m_empty);
00115 
00116     QHBoxLayout *main_ = new QHBoxLayout(this);
00117     main_->setMargin(0);
00118     main_->setSpacing(10);
00119     QVBoxLayout *sub_ = new QVBoxLayout();
00120     main_->addWidget(m_iconlist, 0);
00121     main_->addLayout(sub_, 1);
00122     sub_->setMargin(0);
00123     sub_->setSpacing(5);
00124     sub_->addWidget(m_header, 0);
00125     sub_->addWidget(sep, 0);
00126     sub_->addWidget(m_stack, 1);
00127 }
00128 
00129 CJanusWidget::~CJanusWidget()
00130 {
00131     qDeleteAll(m_pages);
00132     m_pages.clear();
00133 }
00134 
00135 void CJanusWidget::addPage(QWidget *w, const QString& text, const QString& header, const QPixmap& pix)
00136 {
00137     CPage *page = new CPage();
00138     m_pages.append(page);
00139     page->m_widget = w;
00140     page->m_text = text;
00141     page->m_header = header;
00142     page->m_pixmap = pix;
00143     page->m_item = new QListWidgetItem(pix, text, m_iconlist);
00144     m_iconlist->computeWidth();
00145     m_stack->insertWidget(m_pages.count(), w);
00146 
00147     if (m_iconlist->count() == 1) {
00148         page->m_item->setSelected(true);
00149         slotSelected(page->m_item);
00150     }
00151 }
00152 
00153 void CJanusWidget::enablePage(QWidget *w)
00154 {
00155     CPage *page = findPage(w);
00156     if (page && !page->m_item) {
00157         page->m_item = new QListWidgetItem(page->m_pixmap, page->m_text, m_iconlist);
00158         m_iconlist->computeWidth();
00159         if (m_iconlist->count() == 1)
00160             page->m_item->setSelected(true);
00161     }
00162 }
00163 
00164 void CJanusWidget::disablePage(QWidget *w)
00165 {
00166     CPage *page = findPage(w);
00167     if (page && page->m_item) {
00168         bool needReselect(page->m_item->isSelected());
00169         delete page->m_item;
00170         page->m_item = 0;
00171         m_iconlist->computeWidth();
00172         if (needReselect)
00173             if (m_iconlist->count() > 0)
00174                 m_iconlist->item(0)->setSelected(true);
00175             else
00176                 slotSelected(0);
00177     }
00178 }
00179 
00180 void CJanusWidget::slotSelected(QListWidgetItem *item)
00181 {
00182     CPage *page = findPage(item);
00183     if (page) {
00184         m_stack->setCurrentWidget(page->m_widget);
00185         m_header->setText(page->m_header);
00186     } else {
00187         m_header->setText("");
00188         m_stack->setCurrentWidget(m_empty);
00189     }
00190 }
00191 
00192 CJanusWidget::CPage* CJanusWidget::findPage(QWidget *w)
00193 {
00194     QListIterator<CPage*> it(m_pages);
00195     while (it.hasNext()) {
00196         CPage *item = it.next();
00197         if (item->m_widget == w)
00198             return item;
00199     }
00200     return NULL;
00201 }
00202 
00203 CJanusWidget::CPage* CJanusWidget::findPage(QListWidgetItem *i)
00204 {
00205     QListIterator<CPage*> it(m_pages);
00206     while (it.hasNext()) {
00207         CPage *item = it.next();
00208         if (item->m_item == i)
00209             return item;
00210     }
00211     return NULL;
00212 }
00213 
00214 QListWidgetItem* CJanusWidget::findPrevItem(CPage *p)
00215 {
00216     QListIterator<CPage*>   it(m_pages);
00217 
00218     if (it.findNext(p))
00219         it.previous();
00220 
00221     while (it.hasPrevious()) {
00222         CPage *item = it.previous();
00223         if (item->m_item)
00224             return item->m_item;
00225     }
00226     return NULL;
00227 }
00228 
00229 void CJanusWidget::clearPages()
00230 {
00231     QListIterator<CPage*> it(m_pages);
00232     while (it.hasNext()) {
00233         CPage *item = it.next();
00234         delete item->m_widget;
00235         delete item->m_item;
00236     }
00237     m_pages.clear();
00238 }
00239 
00240 #include "cjanuswidget.moc"

KDEPrint

Skip menu "KDEPrint"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  •   KDEPrint
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal