1 #include "bookmarklistdlg.h"
2 #include "ui_bookmarklistdlg.h"
3 #include "cr3widget.h"
4 #include "addbookmarkdlg.h"
5 #include <QMenu>
6
7 #define MAX_ITEM_LEN 50
limit(QString s)8 static QString limit( QString s )
9 {
10 if ( s.length()<MAX_ITEM_LEN )
11 return s;
12 s = s.left( MAX_ITEM_LEN );
13 return s + "...";
14 }
15
16 #if QT_VERSION >= 0x050000
17 #define setResizeModeMethod setSectionResizeMode
18 #else
19 #define setResizeModeMethod setResizeMode
20 #endif
21
22
BookmarkListDialog(QWidget * parent,CR3View * docView)23 BookmarkListDialog::BookmarkListDialog(QWidget *parent, CR3View * docView ) :
24 QDialog(parent),
25 m_ui(new Ui::BookmarkListDialog),
26 _docview(docView)
27 {
28 m_ui->setupUi(this);
29 setWindowTitle( tr("Bookmarks") );
30
31 m_ui->tableWidget->setColumnCount(4);
32 m_ui->tableWidget->setHorizontalHeaderLabels ( QStringList() << tr("Position") << tr("Type", "bookmark type") /*<< tr("Chapter") */ << tr("Text") << tr("Comment") );
33 m_ui->tableWidget->verticalHeader()->hide();
34 int i = 0;
35 m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::ResizeToContents );
36 m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::ResizeToContents );
37 //m_ui->tableWidget->horizontalHeader()->setResizeMode( i++, QHeaderView::Stretch );
38 m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::Stretch );
39 m_ui->tableWidget->horizontalHeader()->setResizeModeMethod( i++, QHeaderView::Stretch );
40 //m_ui->tableWidget->horizontalHeader()->setResizeMode( 1, QHeaderView::Stretch ); //Stretch
41 m_ui->tableWidget->horizontalHeader()->setStretchLastSection( true );
42 m_ui->tableWidget->horizontalHeader()->setDefaultAlignment( Qt::AlignLeft );
43 m_ui->tableWidget->setEditTriggers( QAbstractItemView::NoEditTriggers );
44
45 m_ui->tableWidget->setWordWrap(true);
46 m_ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
47 m_ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
48 m_ui->tableWidget->setSortingEnabled(false);
49
50
51 CRFileHistRecord * rec = _docview->getDocView()->getCurrentFileHistRecord();
52 if ( !rec )
53 return;
54 LVPtrVector<CRBookmark> & list( rec->getBookmarks() );
55 int curpercent = _docview->getDocView()->getPosPercent();
56 int bestdiff = -1;
57 int bestindex = -1;
58 int y = 0;
59 for ( int i=0; i<list.length(); i++ ) {
60 CRBookmark * bm = list[i];
61 if ( bm->getType() == bmkt_lastpos )
62 continue;
63 int diff = bm->getPercent() - curpercent;
64 if ( diff<0 )
65 diff = -diff;
66 if ( bestindex==-1 || diff < bestdiff ) {
67 bestindex = i;
68 bestdiff = diff;
69 }
70 QString t = tr("P", "Bookmark type first letter - Position");
71 if ( bm->getType()==bmkt_comment )
72 t = tr("C", "Bookmark type first letter - Comment");
73 else if ( bm->getType()==bmkt_correction )
74 t = tr("E", "Bookmark type first letter - Correction/Edit");
75 m_ui->tableWidget->setRowCount(y+1);
76 {
77 int i=0;
78 _list.append( bm );
79 m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( crpercent( bm->getPercent() )) );
80 m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem(t) );
81 //m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getTitleText())) ) );
82 m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getPosText())) ) );
83 m_ui->tableWidget->setItem( y, i++, new QTableWidgetItem( limit(cr2qt(bm->getCommentText())) ) );
84 m_ui->tableWidget->verticalHeader()->setResizeModeMethod( y, QHeaderView::ResizeToContents );
85 }
86 y++;
87 }
88 if ( bestindex>=0 ) {
89 //m_ui->tableWidget->setCurrentCell( bestindex, 0, QItemSelectionModel::Rows | QItemSelectionModel::SelectCurrent );
90 m_ui->tableWidget->selectRow( bestindex );
91 }
92
93 m_ui->tableWidget->resizeColumnsToContents();
94 m_ui->tableWidget->resizeRowsToContents();
95
96 _docview->restoreWindowPos( this, "bookmarklist." );
97 }
98
closeEvent(QCloseEvent * event)99 void BookmarkListDialog::closeEvent ( QCloseEvent * event )
100 {
101 _docview->saveWindowPos( this, "bookmarklist." );
102 }
103
~BookmarkListDialog()104 BookmarkListDialog::~BookmarkListDialog()
105 {
106 delete m_ui;
107 }
108
showDlg(QWidget * parent,CR3View * docView)109 bool BookmarkListDialog::showDlg( QWidget * parent, CR3View * docView )
110 {
111 BookmarkListDialog * dlg = new BookmarkListDialog( parent, docView );
112 dlg->setModal( true );
113 dlg->show();
114 dlg->raise();
115 dlg->activateWindow();
116 //dlg->
117 return true;
118 }
119
changeEvent(QEvent * e)120 void BookmarkListDialog::changeEvent(QEvent *e)
121 {
122 QDialog::changeEvent(e);
123 switch (e->type()) {
124 case QEvent::LanguageChange:
125 m_ui->retranslateUi(this);
126 break;
127 default:
128 break;
129 }
130 }
131
on_buttonBox_accepted()132 void BookmarkListDialog::on_buttonBox_accepted()
133 {
134
135 }
136
on_buttonBox_rejected()137 void BookmarkListDialog::on_buttonBox_rejected()
138 {
139
140 }
141
on_tableWidget_customContextMenuRequested(QPoint pos)142 void BookmarkListDialog::on_tableWidget_customContextMenuRequested(QPoint pos)
143 {
144 QMenu *menu = new QMenu;
145 CRBookmark * bm = selectedBookmark();
146 if ( bm != NULL ) {
147 menu->addAction(m_ui->actionGoToBookmark);
148 menu->addAction(m_ui->actionEdit_Bookmark);
149 menu->addAction(m_ui->actionRemoveBookmark);
150 }
151 if ( _list.length()>0 )
152 menu->addAction(m_ui->actionRemoveALLBookmarks);
153 menu->addAction(m_ui->actionClose);
154 menu->exec(mapToGlobal(pos));
155 }
156
selectedBookmark()157 CRBookmark * BookmarkListDialog::selectedBookmark()
158 {
159 int index = m_ui->tableWidget->currentRow();
160 if ( index<0 || index>=_list.length() || index>=m_ui->tableWidget->rowCount() )
161 return NULL;
162 return _list[index];
163 }
164
on_actionGoToBookmark_triggered()165 void BookmarkListDialog::on_actionGoToBookmark_triggered()
166 {
167 CRBookmark * bm = selectedBookmark();
168 if ( bm ) {
169 //_docview->goToXPointer( cr2qt(bm->getStartPos()) );
170 _docview->goToBookmark( bm );
171 }
172 close();
173 }
174
on_actionRemoveBookmark_triggered()175 void BookmarkListDialog::on_actionRemoveBookmark_triggered()
176 {
177 CRBookmark * bm = selectedBookmark();
178 if ( bm ) {
179 int index = m_ui->tableWidget->currentRow();
180 m_ui->tableWidget->removeRow( index );
181 _list.removeAt( index );
182 _docview->getDocView()->removeBookmark( bm );
183 }
184 }
185
on_actionRemoveALLBookmarks_triggered()186 void BookmarkListDialog::on_actionRemoveALLBookmarks_triggered()
187 {
188
189 }
190
on_actionEdit_Bookmark_triggered()191 void BookmarkListDialog::on_actionEdit_Bookmark_triggered()
192 {
193 CRBookmark * bm = selectedBookmark();
194 if ( bm ) {
195 _docview->goToBookmark( bm );
196 AddBookmarkDialog::editBookmark( parentWidget(), _docview, bm );
197 close();
198 }
199 }
200
on_actionClose_triggered()201 void BookmarkListDialog::on_actionClose_triggered()
202 {
203 close();
204 }
205
on_tableWidget_doubleClicked(QModelIndex index)206 void BookmarkListDialog::on_tableWidget_doubleClicked(QModelIndex index)
207 {
208 on_actionGoToBookmark_triggered();
209 }
210