16
16
* You should have received a copy of the GNU General Public License *
17
17
* along with this program; if not, write to the *
18
18
* Free Software Foundation, Inc., *
19
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
20
20
***************************************************************************/
22
22
#include "kchmbookmarkwindow.h"
23
23
#include "kchmmainwindow.h"
24
24
#include "kchmviewwindow.h"
25
#include "kchmlistitemtooltip.h"
26
25
#include "kchmtreeviewitem.h"
28
#include "kchmbookmarkwindow.moc"
30
KCHMBookmarkWindow::KCHMBookmarkWindow(QWidget *parent, const char *name)
31
: QWidget(parent, name)
33
QVBoxLayout * layout = new QVBoxLayout (this);
34
layout->setMargin (5);
36
m_bookmarkList = new KQListView (this);
37
m_bookmarkList->addColumn( "bookmark" ); // no need to i18n - the column is hidden
38
m_bookmarkList->header()->hide();
39
layout->addWidget (m_bookmarkList);
41
new KCHMListItemTooltip( m_bookmarkList );
43
QHBoxLayout * hlayout = new QHBoxLayout (layout);
44
QPushButton * add = new QPushButton ( i18n( "&Add" ), this);
45
QPushButton * edit = new QPushButton ( i18n( "&Edit" ), this);
46
QPushButton * del = new QPushButton ( i18n( "&Del" ), this);
48
hlayout->addWidget (add);
49
hlayout->addWidget (edit);
50
hlayout->addWidget (del);
52
connect( m_bookmarkList,
53
SIGNAL( doubleClicked ( QListViewItem *, const QPoint &, int) ),
28
class KCHMBookmarkItem : public QListWidgetItem
31
KCHMBookmarkItem( KCHMBookmarkWindow * widget, QListWidget* parent, const QString& name, const QString& url, int pos )
32
: QListWidgetItem( parent )
37
m_action = new QAction( name, widget );
38
m_action->setData( qVariantFromValue( (void*) this ) );
40
QObject::connect( m_action,
41
SIGNAL( triggered() ),
43
SLOT( actionBookmarkActivated() ) );
47
virtual QVariant data ( int role ) const
52
case Qt::WhatsThisRole:
68
KCHMBookmarkWindow::KCHMBookmarkWindow( QWidget *parent )
69
: QWidget( parent ), Ui::TabBookmarks()
75
SIGNAL( itemDoubleClicked ( QListWidgetItem* ) ),
55
SLOT( onDoubleClicked ( QListViewItem *, const QPoint &, int) ) );
77
SLOT( onItemDoubleClicked ( QListWidgetItem* ) ) );
58
80
SIGNAL( clicked () ),
60
82
SLOT( onAddBookmarkPressed( ) ) );
63
85
SIGNAL( clicked () ),
65
87
SLOT( onDelBookmarkPressed( ) ) );
68
90
SIGNAL( clicked () ),
70
92
SLOT( onEditBookmarkPressed( ) ) );
72
connect( m_bookmarkList,
73
SIGNAL( contextMenuRequested( QListViewItem *, const QPoint& , int ) ),
75
SLOT( slotContextMenuRequested ( QListViewItem *, const QPoint &, int ) ) );
77
94
m_menuBookmarks = 0;
79
96
m_listChanged = false;
98
// Activate custom context menu, and connect it
99
list->setContextMenuPolicy( Qt::CustomContextMenu );
101
SIGNAL( customContextMenuRequested ( const QPoint & ) ),
103
SLOT( onContextMenuRequested( const QPoint & ) ) );
82
106
void KCHMBookmarkWindow::onAddBookmarkPressed( )
85
109
QString url = ::mainWindow->currentBrowser()->getOpenedPage();
86
110
QString title = ::mainWindow->chmFile()->getTopicByUrl(url);
87
111
QString name = QInputDialog::getText(
88
113
i18n( "%1 - add a bookmark") . arg(APP_NAME),
89
114
i18n( "Enter the name for this bookmark:" ),
90
115
QLineEdit::Normal,
95
119
if ( !ok || name.isEmpty() )
98
KCHMBookmarkTreeViewItem * item = new KCHMBookmarkTreeViewItem (
102
::mainWindow->currentBrowser()->getScrollbarPosition() );
122
KCHMBookmarkItem * item = new KCHMBookmarkItem ( this,
126
::mainWindow->currentBrowser()->getScrollbarPosition() );
104
item->menuid = m_menuBookmarks->insertItem( name );
128
m_menuBookmarks->addAction( item->m_action );
105
129
m_listChanged = true;
109
133
void KCHMBookmarkWindow::onDelBookmarkPressed( )
111
KCHMBookmarkTreeViewItem * item = (KCHMBookmarkTreeViewItem *) m_bookmarkList->selectedItem();
135
KCHMBookmarkItem * item = (KCHMBookmarkItem *) list->currentItem();
115
m_menuBookmarks->removeItem( item->menuid );
139
m_menuBookmarks->removeAction( item->m_action );
117
141
m_listChanged = true;
122
146
void KCHMBookmarkWindow::onEditBookmarkPressed( )
124
KCHMBookmarkTreeViewItem * item = (KCHMBookmarkTreeViewItem *) m_bookmarkList->selectedItem();
148
KCHMBookmarkItem * item = (KCHMBookmarkItem *) list->currentItem();
129
153
QString name = QInputDialog::getText(
130
i18n( "%1 - edit the bookmark name") . arg(APP_NAME),
155
i18n( "%1 - edit the bookmark name") . arg(APP_NAME),
131
156
i18n( "Enter the name for this bookmark:" ),
132
157
QLineEdit::Normal,
137
161
if ( !ok || name.isEmpty() )
140
item->setText (0, name);
141
m_menuBookmarks->changeItem( item->menuid, name );
164
item->setText( name );
165
item->m_action->setText( name );
142
166
m_listChanged = true;
147
void KCHMBookmarkWindow::onDoubleClicked( QListViewItem * item, const QPoint &, int )
152
KCHMBookmarkTreeViewItem * treeitem = (KCHMBookmarkTreeViewItem *) item;
154
if ( ::mainWindow->currentBrowser()->getOpenedPage() != treeitem->url )
155
::mainWindow->openPage( treeitem->url, OPF_CONTENT_TREE | OPF_ADD2HISTORY );
157
::mainWindow->currentBrowser()->setScrollbarPosition(treeitem->scroll_y);
161
171
void KCHMBookmarkWindow::restoreSettings( const KCHMSettings::bookmark_saved_settings_t & settings )
163
for ( unsigned int i = 0; i < settings.size(); i++ )
173
for ( int i = 0; i < settings.size(); i++ )
165
KCHMBookmarkTreeViewItem * item = new KCHMBookmarkTreeViewItem (m_bookmarkList, settings[i].name, settings[i].url, settings[i].scroll_y);
167
item->menuid = m_menuBookmarks->insertItem( settings[i].name );
175
KCHMBookmarkItem * item = new KCHMBookmarkItem( this, list, settings[i].name, settings[i].url, settings[i].scroll_y );
176
m_menuBookmarks->addAction( item->m_action );
172
181
void KCHMBookmarkWindow::saveSettings( KCHMSettings::bookmark_saved_settings_t & settings )
174
QListViewItemIterator it (m_bookmarkList);
176
183
settings.clear();
178
for ( ; it.current(); it++ )
185
for ( int i = 0; i < list->count(); i++ )
180
KCHMBookmarkTreeViewItem * treeitem = (KCHMBookmarkTreeViewItem *) it.current();
181
settings.push_back (KCHMSettings::SavedBookmark(treeitem->name, treeitem->url, treeitem->scroll_y));
187
KCHMBookmarkItem * treeitem = (KCHMBookmarkItem *) list->item( i );
188
settings.push_back (KCHMSettings::SavedBookmark( treeitem->m_name, treeitem->m_url, treeitem->m_scroll_y) );
185
192
void KCHMBookmarkWindow::invalidate( )
187
QListViewItemIterator it( m_bookmarkList );
189
for ( ; it.current(); it++ )
190
m_menuBookmarks->removeItem( ((KCHMBookmarkTreeViewItem *) it.current())->menuid );
192
m_bookmarkList->clear();
195
void KCHMBookmarkWindow::createMenu( KCHMMainWindow * parent )
197
// Create the main Bookmark menu
198
m_menuBookmarks = new KQPopupMenu( parent );
199
parent->menuBar()->insertItem( i18n( "&Bookmarks"), m_menuBookmarks );
201
m_menuBookmarks->insertItem( i18n( "&Add bookmark"), this, SLOT(onAddBookmarkPressed()), CTRL+Key_B );
202
m_menuBookmarks->insertSeparator();
204
connect( m_menuBookmarks, SIGNAL( activated(int) ), this, SLOT ( onBookmarkSelected(int) ));
207
void KCHMBookmarkWindow::onBookmarkSelected( int bookmark )
209
QListViewItemIterator it( m_bookmarkList );
211
for ( ; it.current(); it++ )
213
if ( ((KCHMBookmarkTreeViewItem *) it.current())->menuid == bookmark )
215
KCHMBookmarkTreeViewItem * treeitem = (KCHMBookmarkTreeViewItem *) it.current();
217
if ( ::mainWindow->currentBrowser()->getOpenedPage() != treeitem->url )
218
::mainWindow->openPage( treeitem->url, OPF_CONTENT_TREE | OPF_ADD2HISTORY );
220
::mainWindow->currentBrowser()->setScrollbarPosition(treeitem->scroll_y);
226
void KCHMBookmarkWindow::slotContextMenuRequested( QListViewItem * item, const QPoint & point, int )
228
if ( !m_contextMenu )
229
m_contextMenu = ::mainWindow->currentBrowser()->createListItemContextMenu( this );
194
for ( int i = 0; i < list->count(); i++ )
195
m_menuBookmarks->removeAction( ((KCHMBookmarkItem *) list->item( i ))->m_action );
200
void KCHMBookmarkWindow::createMenu( QMenu * menuBookmarks )
202
m_menuBookmarks = menuBookmarks;
205
void KCHMBookmarkWindow::onItemDoubleClicked(QListWidgetItem * item)
210
KCHMBookmarkItem * treeitem = (KCHMBookmarkItem *) item;
212
if ( ::mainWindow->currentBrowser()->getOpenedPage() != treeitem->m_url )
213
::mainWindow->openPage( treeitem->m_url, KCHMMainWindow::OPF_CONTENT_TREE | KCHMMainWindow::OPF_ADD2HISTORY );
215
::mainWindow->currentBrowser()->setScrollbarPosition( treeitem->m_scroll_y );
218
void KCHMBookmarkWindow::actionBookmarkActivated()
220
QAction *action = qobject_cast< QAction * >(sender());
222
KCHMBookmarkItem * item = (KCHMBookmarkItem *) action->data().value< void* > ();
227
if ( ::mainWindow->currentBrowser()->getOpenedPage() != item->m_url )
228
::mainWindow->openPage( item->m_url, KCHMMainWindow::OPF_CONTENT_TREE | KCHMMainWindow::OPF_ADD2HISTORY );
230
::mainWindow->currentBrowser()->setScrollbarPosition( item->m_scroll_y );
233
void KCHMBookmarkWindow::onContextMenuRequested(const QPoint & point)
235
KCHMBookmarkItem * item = (KCHMBookmarkItem *) list->itemAt( point );
233
KCHMBookmarkTreeViewItem * treeitem = (KCHMBookmarkTreeViewItem *) item;
235
::mainWindow->currentBrowser()->setTabKeeper( treeitem->url );
236
m_contextMenu->popup( point );
239
::mainWindow->currentBrowser()->setTabKeeper( item->m_url );
240
::mainWindow->tabItemsContextMenu()->popup( list->viewport()->mapToGlobal( point ) );