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

KIO

kbookmarkdialog.cc

Go to the documentation of this file.
00001 
00002 #include "kbookmarkdialog.h"
00003 #include "kbookmarkmanager.h"
00004 #include "kbookmarkmenu.h"
00005 #include "kbookmarkmenu_p.h"
00006 #include <QGridLayout>
00007 #include <QLabel>
00008 #include <QTreeWidget>
00009 #include <QHeaderView>
00010 #include <klineedit.h>
00011 #include <klocale.h>
00012 #include <kiconloader.h>
00013 #include <kinputdialog.h>
00014 #include <kstandardguiitem.h>
00015 
00016 
00017 KBookmark KBookmarkDialog::editBookmark(const KBookmark & bm)
00018 {
00019     if(!m_layout)
00020         initLayoutPrivate();
00021     setButtons( Ok | Cancel );
00022     setButtonGuiItem( KDialog::Ok, KGuiItem(i18nc("@action:button", "Update" )) );
00023     setCaption( i18nc("@title:window","Bookmark Properties") );
00024     m_url->setVisible(!bm.isGroup());
00025     m_urlLabel->setVisible(!bm.isGroup());
00026     m_bm = bm;
00027     m_title->setText(bm.fullText());
00028     m_url->setText(bm.url().url());
00029     m_folderTree->setVisible(false);
00030 
00031     m_mode = EditBookmark;
00032     aboutToShow(m_mode);
00033 
00034     if(exec() == QDialog::Accepted)
00035         return m_bm;
00036     else
00037         return KBookmark();
00038 
00039 }
00040 
00041 KBookmark KBookmarkDialog::addBookmark(const QString & title, const KUrl & url, KBookmark parent)
00042 {
00043     if(!m_layout)
00044         initLayoutPrivate();
00045     if(parent.isNull())
00046         parent = m_mgr->root();
00047     setButtons( User1 | Ok | Cancel );
00048     setButtonGuiItem( KDialog::Ok,  KGuiItem( i18nc("@action:button", "Add" ), "bookmark-new") );
00049     setCaption( i18nc("@title:window","Add Bookmark") );
00050     setButtonGuiItem( User1, KGuiItem( i18nc("@action:button", "&New Folder..." ), "folder-new") );
00051     m_url->setVisible(true);
00052     m_urlLabel->setVisible(true);
00053     m_title->setText(title);    
00054     m_url->setText(url.url());
00055     setParentBookmark(parent);
00056     m_folderTree->setVisible(true);
00057 
00058     m_mode = NewBookmark;
00059     aboutToShow(m_mode);
00060 
00061     if(exec() == QDialog::Accepted)
00062         return m_bm;
00063     else
00064         return KBookmark();
00065 }
00066 
00067 KBookmarkGroup KBookmarkDialog::addBookmarks(const QList<QPair<QString, QString> > & list, const QString & name, KBookmarkGroup parent)
00068 {
00069     if(!m_layout)
00070         initLayoutPrivate();
00071     if(parent.isNull())
00072         parent = m_mgr->root();
00073 
00074     m_list = list;
00075 
00076     setButtons( User1 | Ok | Cancel);
00077     setButtonGuiItem( KDialog::Ok,  KGuiItem( i18nc("@action:button", "Add" ), "bookmark-new") );
00078     setCaption( i18nc("@title:window","Add Bookmarks") );
00079     setButtonGuiItem( User1, KGuiItem( i18nc("@action:button", "&New Folder..." ), "folder-new") );
00080     m_url->setVisible(false);
00081     m_urlLabel->setVisible(false);
00082     m_title->setText(name);
00083     setParentBookmark(parent);
00084     m_folderTree->setVisible(true);
00085 
00086     m_mode = NewMultipleBookmarks;
00087     aboutToShow(m_mode);
00088     
00089     if(exec() == QDialog::Accepted)
00090         return m_bm.toGroup();
00091     else
00092         return KBookmarkGroup();
00093 }
00094 
00095 KBookmarkGroup KBookmarkDialog::selectFolder(KBookmark parent)
00096 {
00097     if(!m_layout)
00098         initLayoutPrivate();
00099     if(parent.isNull())
00100         parent = m_mgr->root();
00101     setButtons( User1 | Ok | Cancel );
00102     setButtonGuiItem( KDialog::Ok, KStandardGuiItem::ok() );
00103     setButtonGuiItem( User1, KGuiItem( i18nc("@action:button", "&New Folder..." ), "folder-new") );
00104     setCaption( i18nc("@title:window","Select Folder"));
00105     m_url->setVisible(false);
00106     m_urlLabel->setVisible(false);
00107     m_title->setVisible(false);
00108     m_titleLabel->setVisible(false);
00109     setParentBookmark(parent);
00110     m_folderTree->setVisible(true);
00111 
00112     m_mode = SelectFolder;
00113     aboutToShow(m_mode);
00114 
00115     if(exec() == QDialog::Accepted)
00116         return m_bm.toGroup();
00117     else
00118         return KBookmarkGroup();
00119 }
00120 
00121 KBookmarkGroup KBookmarkDialog::createNewFolder(const QString & name, KBookmark parent)
00122 {
00123     if(!m_layout)
00124         initLayoutPrivate();
00125     if(parent.isNull())
00126         parent = m_mgr->root();
00127     setButtons( Ok | Cancel );
00128     setButtonGuiItem( KDialog::Ok, KStandardGuiItem::ok() );
00129     setCaption( i18nc("@title:window","New Folder"));
00130     m_url->setVisible(false);
00131     m_urlLabel->setVisible(false);
00132     m_title->setText(name);
00133     setParentBookmark(parent);
00134     m_folderTree->setVisible(true);
00135 
00136     m_mode = NewFolder;
00137     aboutToShow(m_mode);
00138 
00139     if(exec() == QDialog::Accepted)
00140         return m_bm.toGroup();
00141     else
00142         return KBookmarkGroup();
00143 }
00144 
00145 void KBookmarkDialog::setParentBookmark(const KBookmark & bm)
00146 {
00147     QString address = bm.address();
00148     KBookmarkTreeItem * item = static_cast<KBookmarkTreeItem *>(m_folderTree->topLevelItem(0));
00149     while(true)
00150     {
00151         if(item->address() == bm.address())
00152         {
00153             m_folderTree->setCurrentItem(item);
00154             return;
00155         }
00156         for(int i=0; i<item->childCount(); ++i)
00157         {
00158             KBookmarkTreeItem * child = static_cast<KBookmarkTreeItem *>(item->child(i));
00159             if( KBookmark::commonParent(child->address(), address) == child->address())
00160             {
00161                 item = child;
00162                 break;
00163             }
00164         }
00165     }
00166 }
00167 
00168 KBookmarkGroup KBookmarkDialog::parentBookmark()
00169 {
00170     KBookmarkTreeItem *item = dynamic_cast<KBookmarkTreeItem *>(m_folderTree->currentItem());
00171     if(!item)
00172         return m_mgr->root();
00173     const QString &address = item->address();
00174     return m_mgr->findByAddress(address).toGroup();
00175 }
00176 
00177 void KBookmarkDialog::slotButtonClicked(int button)
00178 {
00179     if(button == Ok)
00180     {
00181         if(m_mode == NewFolder)
00182         {
00183             KBookmarkGroup parent = parentBookmark();
00184             if(m_title->text().isEmpty())
00185                 m_title->setText("New Folder");
00186             m_bm = parent.createNewFolder(m_title->text());
00187             save(m_mode, m_bm);
00188             m_mgr->emitChanged(parent);
00189         } else if(m_mode == NewBookmark) {
00190             KBookmarkGroup parent = parentBookmark();
00191             if(m_title->text().isEmpty())
00192                 m_title->setText("New Bookmark");
00193             m_bm = parent.addBookmark(m_title->text(), KUrl(m_url->text()));
00194             save(m_mode, m_bm);
00195             m_mgr->emitChanged(parent);
00196         } else if(m_mode == NewMultipleBookmarks) {
00197             KBookmarkGroup parent = parentBookmark();
00198             if(m_title->text().isEmpty())
00199                 m_title->setText("New Folder");
00200             m_bm = parent.createNewFolder(m_title->text());
00201             QList< QPair<QString, QString> >::iterator  it, end;
00202             end = m_list.end();
00203             for(it = m_list.begin(); it!= m_list.end(); ++it)
00204             {
00205                 m_bm.toGroup().addBookmark( (*it).first, KUrl((*it).second));
00206             }
00207             save(m_mode, m_bm);
00208             m_mgr->emitChanged(parent);
00209         } else if(m_mode == EditBookmark) {
00210             m_bm.setFullText(m_title->text());
00211             m_bm.setUrl(KUrl(m_url->text()));
00212             save(m_mode, m_bm);
00213             m_mgr->emitChanged(m_bm.parentGroup());
00214         } else if(m_mode == SelectFolder) {
00215             m_bm = parentBookmark();
00216             save(m_mode, m_bm);
00217         }
00218     }
00219     KDialog::slotButtonClicked(button);
00220 }
00221 
00222 void KBookmarkDialog::save(BookmarkDialogMode , const KBookmark & )
00223 {
00224 
00225 }
00226 
00227 void KBookmarkDialog::aboutToShow(BookmarkDialogMode mode)
00228 {
00229     Q_UNUSED(mode);
00230 }
00231 
00232 void KBookmarkDialog::initLayout()
00233 {
00234     QBoxLayout *vbox = new QVBoxLayout( m_main );
00235     QGridLayout * grid = new QGridLayout();
00236     vbox->addLayout(grid);
00237 
00238     grid->addWidget( m_title, 0, 1 );
00239     grid->addWidget( m_titleLabel, 0, 0 );
00240 
00241     grid->addWidget( m_url, 1, 1 );
00242     grid->addWidget( m_urlLabel, 1, 0 );
00243 
00244     vbox->addWidget(m_folderTree);
00245 }
00246 
00247 
00248 void KBookmarkDialog::initLayoutPrivate()
00249 {
00250     m_main = new QWidget( this );
00251     setMainWidget( m_main );
00252     connect( this, SIGNAL( user1Clicked() ), SLOT( newFolderButton() ) );
00253 
00254     m_title = new KLineEdit( m_main );
00255     m_titleLabel = new QLabel( i18nc("@label:textbox", "Name:" ), m_main );
00256     m_titleLabel->setBuddy( m_title );
00257 
00258     m_url = new KLineEdit( m_main );
00259     m_urlLabel = new QLabel( i18nc("@label:textbox", "Location:" ), m_main );
00260     m_urlLabel->setBuddy( m_url );
00261 
00262     m_folderTree = new QTreeWidget(m_main);
00263     m_folderTree->setColumnCount(1);
00264     m_folderTree->header()->hide();
00265     m_folderTree->setSortingEnabled(false);
00266     m_folderTree->setSelectionMode( QTreeWidget::SingleSelection );
00267     m_folderTree->setSelectionBehavior( QTreeWidget::SelectRows );
00268     m_folderTree->setMinimumSize( 60, 100 );
00269     QTreeWidgetItem *root = new KBookmarkTreeItem(m_folderTree);    
00270     fillGroup( root, m_mgr->root() );
00271 
00272 
00273     initLayout();
00274     m_layout = true;
00275 }
00276 
00277 
00278 KBookmarkDialog::KBookmarkDialog(KBookmarkManager * mgr, QWidget * parent )
00279   : KDialog(parent),
00280     m_folderTree(0), m_mgr(mgr), m_layout(false)
00281 {
00282  
00283 }
00284 
00285 void KBookmarkDialog::newFolderButton()
00286 {
00287 
00288     QString caption = parentBookmark().fullText().isEmpty() ?
00289                       i18nc("@title:window","Create New Bookmark Folder" ) :
00290                       i18nc("@title:window","Create New Bookmark Folder in %1" ,
00291                         parentBookmark().text() );
00292     bool ok;
00293     QString text = KInputDialog::getText( caption, i18nc("@label:textbox", "New folder:" ), QString(), &ok );
00294     if ( !ok )
00295         return;
00296 
00297     KBookmarkGroup group = parentBookmark().createNewFolder(text);
00298     if ( !group.isNull() )
00299     {
00300         KBookmarkGroup parentGroup = group.parentGroup();
00301         m_mgr->emitChanged( parentGroup );
00302         m_folderTree->clear();
00303         QTreeWidgetItem *root = new KBookmarkTreeItem(m_folderTree);
00304         fillGroup( root, m_mgr->root() );
00305     }
00306 }
00307 
00308 void KBookmarkDialog::fillGroup( QTreeWidgetItem * parentItem, const KBookmarkGroup &group)
00309 {
00310   for ( KBookmark bk = group.first() ; !bk.isNull() ; bk = group.next(bk) )
00311   {
00312     if ( bk.isGroup() )
00313     {
00314       QTreeWidgetItem* item = new KBookmarkTreeItem(parentItem, m_folderTree, bk.toGroup() );
00315       fillGroup( item, bk.toGroup() );
00316     }
00317   }
00318 }
00319 
00320 /********************************************************************/
00321 
00322 KBookmarkTreeItem::KBookmarkTreeItem(QTreeWidget * tree)
00323     : QTreeWidgetItem(tree), m_address("")
00324 {
00325     setText(0, i18n("Bookmarks"));
00326     setIcon(0, SmallIcon("bookmarks"));
00327     tree->expandItem(this);
00328     tree->setCurrentItem( this );
00329     tree->setItemSelected( this, true );
00330 }
00331 
00332 KBookmarkTreeItem::KBookmarkTreeItem(QTreeWidgetItem * parent, QTreeWidget * tree, const KBookmarkGroup &bk)
00333     : QTreeWidgetItem(parent)
00334 {
00335     setIcon(0, SmallIcon(bk.icon()));
00336     setText(0, bk.fullText() );
00337     tree->expandItem(this);
00338     m_address = bk.address();
00339 }
00340 
00341 KBookmarkTreeItem::~KBookmarkTreeItem()
00342 {
00343 }
00344 
00345 QString KBookmarkTreeItem::address()
00346 {
00347     return m_address;
00348 }

KIO

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

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • KIO
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs 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