You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kbookreader/src/bookmarksdlg.cpp

173 lines
5.8 KiB

/***************************************************************************
* Copyright (C) 2005 by Alexander Nemish *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* 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; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include <kdialog.h>
#include <tdelocale.h>
#include <tqvariant.h>
#include <tqpushbutton.h>
#include <tqheader.h>
#include <tqtable.h>
#include <tqlayout.h>
#include <tqtooltip.h>
#include <tqwhatsthis.h>
#include "bookmarksdlg.h"
/*
* Constructs a BookmarksDlg as a child of 'parent', with the
* name 'name' and widget flags set to 'f'.
*
* The dialog will by default be modeless, unless you set 'modal' to
* TRUE to construct a modal dialog.
*/
BookmarksDlg::BookmarksDlg(const Bookmarks& bms, TQWidget* parent,
const char* name, bool modal, WFlags fl)
: TQDialog(parent, name, modal, fl),
m_bookmarks(bms)
{
if ( !name )
setName( "BookmarksDlg" );
setSizeGripEnabled(TRUE);
BookmarksDlgLayout = new TQVBoxLayout( this, 11, 6, "BookmarksDlgLayout");
layout3 = new TQHBoxLayout( 0, 0, 6, "layout3");
bookmarksTable = new TQTable(3, 2, this, "bookmarksList" );
bookmarksTable->horizontalHeader()->setLabel(0, "Title");
bookmarksTable->horizontalHeader()->setLabel(1, "Page number");
// bookmarksTable->setLeftMargin(0);
bookmarksTable->setColumnStretchable(0, true);
bookmarksTable->setSelectionMode(TQTable::SingleRow);
layout3->addWidget( bookmarksTable );
layout2 = new TQVBoxLayout( 0, 0, 6, "layout2");
addButton = new TQPushButton( this, "addButton" );
layout2->addWidget( addButton );
deleteButton = new TQPushButton( this, "deleteButton" );
layout2->addWidget( deleteButton );
Horizontal_Spacing2_2 = new TQSpacerItem( 20, 60, TQSizePolicy::Minimum, TQSizePolicy::Expanding );
layout2->addItem( Horizontal_Spacing2_2 );
layout3->addLayout( layout2 );
BookmarksDlgLayout->addLayout( layout3 );
Layout1 = new TQHBoxLayout( 0, 0, 6, "Layout1");
buttonHelp = new TQPushButton( this, "buttonHelp" );
buttonHelp->setAutoDefault( TRUE );
Layout1->addWidget( buttonHelp );
Horizontal_Spacing2 = new TQSpacerItem( 20, 20, TQSizePolicy::Expanding, TQSizePolicy::Minimum );
Layout1->addItem( Horizontal_Spacing2 );
buttonOk = new TQPushButton( this, "buttonOk" );
buttonOk->setAutoDefault( TRUE );
buttonOk->setDefault( TRUE );
Layout1->addWidget( buttonOk );
buttonCancel = new TQPushButton( this, "buttonCancel" );
buttonCancel->setAutoDefault( TRUE );
Layout1->addWidget( buttonCancel );
BookmarksDlgLayout->addLayout( Layout1 );
languageChange();
resize( TQSize(400, 267).expandedTo(minimumSizeHint()) );
clearWState( WState_Polished );
updateBookmarks();
// signals and slots connections
connect(buttonOk, TQ_SIGNAL(clicked()), this, TQ_SLOT(accept()));
connect(buttonCancel, TQ_SIGNAL(clicked()), this, TQ_SLOT(reject()));
connect(addButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(addBookmark()));
connect(deleteButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(deleteBookmark()));
connect(bookmarksTable, TQ_SIGNAL(valueChanged(int, int)), this, TQ_SLOT(valueChanged(int, int)));
}
/*
* Destroys the object and frees any allocated resources
*/
BookmarksDlg::~BookmarksDlg()
{
// no need to delete child widgets, TQt does it all for us
}
/*
* Sets the strings of the subwidgets using the current
* language.
*/
void BookmarksDlg::languageChange()
{
setCaption( tr2i18n( "Bookmarks editor" ) );
addButton->setText( tr2i18n( "Add" ) );
deleteButton->setText( tr2i18n( "Delete" ) );
buttonHelp->setText( tr2i18n( "&Help" ) );
buttonHelp->setAccel( TQKeySequence( tr2i18n( "F1" ) ) );
buttonOk->setText( tr2i18n( "&OK" ) );
buttonCancel->setText( tr2i18n( "Ca&ncel" ) );
}
void BookmarksDlg::addBookmark()
{
m_bookmarks.push_back(Bookmark(2, "new bookmark"));
std::sort(m_bookmarks.begin(), m_bookmarks.end());
updateBookmarks();
}
void BookmarksDlg::deleteBookmark()
{
int row = bookmarksTable->currentRow();
if (row >= 0 && row < m_bookmarks.size())
{
m_bookmarks.erase(m_bookmarks.begin() + row);
updateBookmarks();
}
}
void BookmarksDlg::updateBookmarks()
{
bookmarksTable->setNumRows(0);
for (Bookmarks::size_type i = 0; i < m_bookmarks.size(); ++i)
{
const Bookmark& bm = m_bookmarks[i];
bookmarksTable->setNumRows(i+1);
bookmarksTable->setText(i, 0, bm.name());
bookmarksTable->setText(i, 1, TQString::number(bm.page()));
}
}
void BookmarksDlg::valueChanged(int row, int col)
{
if (row >= m_bookmarks.size()) return;
Bookmark& bm = m_bookmarks[row];
//Bookmark title
if (col == 0)
bm.setName(bookmarksTable->text(row, col));
//page number
else if (col == 1)
{
bool ok;
unsigned int page = bookmarksTable->text(row, col).toUInt(&ok);
if (ok)
bm.setPage(page);
else
//return old value
bookmarksTable->setText(row, col, TQString::number(bm.page()));
}
}
#include "bookmarksdlg.moc"