/* * This file is part of the KDE libraries * Copyright (c) 2001 Michael Goffioul * * 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 "kmwlocal.h" #include "kmwizard.h" #include "kmprinter.h" #include "kmfactory.h" #include "kmmanager.h" #include #include #include #include #include #include #include #include KMWLocal::KMWLocal(TQWidget *parent, const char *name) : KMWizardPage(parent,name) { m_title = i18n("Local Port Selection"); m_ID = KMWizard::Local; m_nextpage = KMWizard::Driver; m_initialized = false; m_block = false; m_ports = new KListView(this); m_ports->setFrameStyle(TQFrame::WinPanel|TQFrame::Sunken); m_ports->setLineWidth(1); m_ports->header()->hide(); m_ports->addColumn(""); m_ports->setSorting(-1); QListViewItem *root = new TQListViewItem(m_ports, i18n("Local System")); root->setPixmap(0, SmallIcon("kdeprint_computer")); root->setOpen(true); connect(m_ports, TQT_SIGNAL(selectionChanged(TQListViewItem*)), TQT_SLOT(slotPortSelected(TQListViewItem*))); QLabel *l1 = new TQLabel(i18n("URI:"), this); m_localuri = new TQLineEdit(this); connect( m_localuri, TQT_SIGNAL( textChanged( const TQString& ) ), TQT_SLOT( slotTextChanged( const TQString& ) ) ); m_parents[0] = new TQListViewItem(root, i18n("Parallel")); m_parents[1] = new TQListViewItem(root, m_parents[0], i18n("Serial")); m_parents[2] = new TQListViewItem(root, m_parents[1], i18n("USB")); m_parents[3] = new TQListViewItem(root, m_parents[2], i18n("Others")); for (int i=0;i<4;i++) m_parents[i]->setPixmap(0, SmallIcon("input_devices_settings")); QLabel *l2 = new TQLabel(i18n("

Select a valid detected port, or enter directly the corresponding URI in the bottom edit field.

"), this); QVBoxLayout *lay0 = new TQVBoxLayout(this, 0, 10); QHBoxLayout *lay1 = new TQHBoxLayout(0, 0, 10); lay0->addWidget(l2, 0); lay0->addWidget(m_ports, 1); lay0->addLayout(lay1, 0); lay1->addWidget(l1, 0); lay1->addWidget(m_localuri, 1); } bool KMWLocal::isValid(TQString& msg) { if (m_localuri->text().isEmpty()) { msg = i18n("The URI is empty","Empty URI."); return false; } else if (m_uris.findIndex(m_localuri->text()) == -1) { if (KMessageBox::warningContinueCancel(this, i18n("The local URI doesn't correspond to a detected port. Continue?")) == KMessageBox::Cancel) { msg = i18n("Select a valid port."); return false; } } return true; } void KMWLocal::slotPortSelected(TQListViewItem *item) { if ( m_block ) return; TQString uri; if (!item || item->depth() <= 1 || item->depth() > 3) uri = TQString::null; else if (item->depth() == 3) uri = item->parent()->text( 1 ); else uri = item->text( 1 ); m_block = true; m_localuri->setText( uri ); m_block = false; } void KMWLocal::updatePrinter(KMPrinter *printer) { TQListViewItem *item = m_ports->selectedItem(); if ( item && item->depth() == 3 ) printer->setOption( "kde-autodetect", item->text( 0 ) ); printer->setDevice(m_localuri->text()); } void KMWLocal::initPrinter(KMPrinter *printer) { if (!m_initialized) initialize(); if (printer) { m_localuri->setText(printer->device()); } } TQListViewItem* KMWLocal::lookForItem( const TQString& uri ) { for ( int i=0; i<4; i++ ) { TQListViewItem *item = m_parents[ i ]->firstChild(); while ( item ) if ( item->text( 1 ) == uri ) if ( item->firstChild() ) return item->firstChild(); else return item; else item = item->nextSibling(); } return 0; } void KMWLocal::slotTextChanged( const TQString& txt ) { if ( m_block ) return; TQListViewItem *item = lookForItem( txt ); if ( item ) { m_block = true; m_ports->setSelected( item, true ); m_block = false; } else m_ports->clearSelection(); } void KMWLocal::initialize() { QStringList list = KMFactory::self()->manager()->detectLocalPrinters(); if (list.isEmpty() || (list.count() % 4) != 0) { KMessageBox::error(this, i18n("Unable to detect local ports.")); return; } QListViewItem *last[4] = {0, 0, 0, 0}; for (TQStringList::Iterator it=list.begin(); it!=list.end(); ++it) { TQString cl = *it; ++it; QString uri = *it; int p = uri.tqfind( ':' ); QString desc = *(++it), prot = ( p != -1 ? uri.left( p ) : TQString::null ); QString printer = *(++it); int index(-1); if (desc.isEmpty()) desc = uri; if (prot == "parallel" || prot == "file") index = 0; else if (prot == "serial") index = 1; else if (prot == "usb") index = 2; else if (cl == "direct") index = 3; else continue; last[index] = new TQListViewItem(m_parents[index], last[index], desc, uri); last[index]->setPixmap(0, SmallIcon("blockdevice")); m_parents[index]->setOpen(true); m_uris << uri; if (!printer.isEmpty()) { QListViewItem *pItem = new TQListViewItem(last[index], printer); last[index]->setOpen(true); pItem->setPixmap(0, SmallIcon("kdeprint_printer")); } } m_initialized = true; } #include "kmwlocal.moc"