// vim: set ts=4 sts=4 sw=4 et: /* This file is part of the KDE project Copyright (C) 2003 Alexander Kellett This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "bookmarkinfo.h" #include "commands.h" #include "toplevel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // SHUFFLE all these functions around, the order is just plain stupid BookmarkLineEdit::BookmarkLineEdit( TQWidget *parent ) : KLineEdit( parent ) { } void BookmarkLineEdit::cut() { TQString select( selectedText() ); int pos( selectionStart() ); TQString newText( text().remove( pos, select.length() ) ); KLineEdit::cut(); setEdited( true ); //KDE 4 setModified( true ); emit textChanged( newText ); setText( newText ); } void BookmarkInfoWidget::showBookmark(const KBookmark &bk) { commitChanges(); m_bk = bk; if (m_bk.isNull()) { // all read only and blank m_title_le->setReadOnly(true); m_title_le->setText(TQString::null); m_url_le->setReadOnly(true); m_url_le->setText(TQString::null); m_comment_le->setReadOnly(true); m_comment_le->setText(TQString::null); m_visitdate_le->setReadOnly(true); m_visitdate_le->setText(TQString::null); m_credate_le->setReadOnly(true); m_credate_le->setText(TQString::null); m_visitcount_le->setReadOnly(true); m_visitcount_le->setText(TQString::null); return; } // read/write fields m_title_le->setReadOnly( (bk.isSeparator()|| !bk.hasParent() )? true : false); m_title_le->setText(bk.fullText()); m_url_le->setReadOnly(bk.isGroup() || bk.isSeparator()); m_url_le->setText(bk.isGroup() ? TQString::null : bk.url().pathOrURL()); m_comment_le->setReadOnly((bk.isSeparator()|| !bk.hasParent()) ? true : false ); m_comment_le->setText( NodeEditCommand::getNodeText(bk, TQStringList() << "desc")); // readonly fields updateStatus(); } void BookmarkInfoWidget::updateStatus() { TQString visitDate = CurrentMgr::makeTimeStr( NodeEditCommand::getNodeText(m_bk, TQStringList() << "info" << "metadata" << "time_visited" )); m_visitdate_le->setReadOnly(true); m_visitdate_le->setText(visitDate); TQString creationDate = CurrentMgr::makeTimeStr( NodeEditCommand::getNodeText(m_bk, TQStringList() << "info" << "metadata" << "time_added" )); m_credate_le->setReadOnly(true); m_credate_le->setText(creationDate); // TODO - get the actual field name from the spec if it exists, else copy galeon m_visitcount_le->setReadOnly(true); m_visitcount_le->setText( NodeEditCommand::getNodeText(m_bk, TQStringList() << "info" << "metadata" << "visit_count" )); } void BookmarkInfoWidget::commitChanges() { commitTitle(); commitURL(); commitComment(); } void BookmarkInfoWidget::commitTitle() { if(titlecmd) { emit updateListViewItem(); CurrentMgr::self()->notifyManagers(CurrentMgr::bookmarkAt(titlecmd->affectedBookmarks()).toGroup()); titlecmd = 0; } } void BookmarkInfoWidget::slotTextChangedTitle(const TQString &str) { if (m_bk.isNull() || !m_title_le->isModified()) return; timer->start(1000, true); if(titlecmd) { NodeEditCommand::setNodeText(m_bk, TQStringList() << "title", str); titlecmd->modify(str); } else { titlecmd = new NodeEditCommand(m_bk.address(), str, "title"); titlecmd->execute(); CmdHistory::self()->addInFlightCommand(titlecmd); } } void BookmarkInfoWidget::commitURL() { if(urlcmd) { emit updateListViewItem(); CurrentMgr::self()->notifyManagers(CurrentMgr::bookmarkAt(urlcmd->affectedBookmarks()).toGroup()); urlcmd = 0; } } void BookmarkInfoWidget::slotTextChangedURL(const TQString &str) { if (m_bk.isNull() || !m_url_le->isModified()) return; timer->start(1000, true); if(urlcmd) { KURL u = KURL::fromPathOrURL(str); m_bk.internalElement().setAttribute("href", u.url(0, 106)); urlcmd->modify("href", u.url(0, 106)); } else { KURL u = KURL::fromPathOrURL(str); urlcmd = new EditCommand(m_bk.address(), EditCommand::Edition("href", u.url(0, 106)), i18n("URL")); urlcmd->execute(); CmdHistory::self()->addInFlightCommand(urlcmd); } } void BookmarkInfoWidget::commitComment() { if(commentcmd) { emit updateListViewItem(); CurrentMgr::self()->notifyManagers( CurrentMgr::bookmarkAt( commentcmd->affectedBookmarks() ).toGroup()); commentcmd = 0; } } void BookmarkInfoWidget::slotTextChangedComment(const TQString &str) { if (m_bk.isNull() || !m_comment_le->isModified()) return; timer->start(1000, true); if(commentcmd) { NodeEditCommand::setNodeText(m_bk, TQStringList() << "desc", str); commentcmd->modify(str); } else { commentcmd = new NodeEditCommand(m_bk.address(), str, "desc"); commentcmd->execute(); CmdHistory::self()->addInFlightCommand(commentcmd); } } BookmarkInfoWidget::BookmarkInfoWidget(TQWidget *parent, const char *name) : TQWidget(parent, name), m_connected(false) { timer = new TQTimer(this); connect(timer, TQT_SIGNAL( timeout() ), TQT_SLOT( commitChanges())); titlecmd = 0; urlcmd = 0; commentcmd = 0; TQBoxLayout *vbox = new TQVBoxLayout(this); TQGridLayout *grid = new TQGridLayout(vbox, 3, 4, 4); m_title_le = new BookmarkLineEdit(this); grid->addWidget(m_title_le, 0, 1); grid->addWidget( new TQLabel(m_title_le, i18n("Name:"), this), 0, 0); connect(m_title_le, TQT_SIGNAL( textChanged(const TQString &) ), TQT_SLOT( slotTextChangedTitle(const TQString &) )); connect(m_title_le, TQT_SIGNAL( lostFocus() ), TQT_SLOT( commitTitle() )); m_url_le = new BookmarkLineEdit(this); grid->addWidget(m_url_le, 1, 1); grid->addWidget( new TQLabel(m_url_le, i18n("Location:"), this), 1, 0); connect(m_url_le, TQT_SIGNAL( textChanged(const TQString &) ), TQT_SLOT( slotTextChangedURL(const TQString &) )); connect(m_url_le, TQT_SIGNAL( lostFocus() ), TQT_SLOT( commitURL() )); m_comment_le = new BookmarkLineEdit(this); grid->addWidget(m_comment_le, 2, 1); grid->addWidget( new TQLabel(m_comment_le, i18n("Comment:"), this), 2, 0); connect(m_comment_le, TQT_SIGNAL( textChanged(const TQString &) ), TQT_SLOT( slotTextChangedComment(const TQString &) )); connect(m_comment_le, TQT_SIGNAL( lostFocus() ), TQT_SLOT( commitComment() )); m_credate_le = new KLineEdit(this); grid->addWidget(m_credate_le, 0, 3); grid->addWidget( new TQLabel(m_credate_le, i18n("First viewed:"), this), 0, 2); m_visitdate_le = new KLineEdit(this); grid->addWidget(m_visitdate_le, 1, 3); grid->addWidget( new TQLabel(m_visitdate_le, i18n("Viewed last:"), this), 1, 2 ); m_visitcount_le = new KLineEdit(this); grid->addWidget(m_visitcount_le, 2, 3); grid->addWidget( new TQLabel(m_visitcount_le, i18n("Times visited:"), this), 2, 2); } #include "bookmarkinfo.moc"