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.
bibletime/bibletime/frontend/displaywindow/creadwindow.cpp

196 lines
5.5 KiB

/*********
*
* This file is part of BibleTime's source code, http://www.bibletime.info/.
*
* Copyright 1999-2006 by the BibleTime developers.
* The BibleTime source code is licensed under the GNU General Public License version 2.0.
*
**********/
//BibleTime includes
#include "creadwindow.h"
#include "backend/centrydisplay.h"
#include "backend/cdisplayrendering.h"
#include "backend/cswordkey.h"
#include "frontend/cbtconfig.h"
#include "frontend/cexportmanager.h"
#include "frontend/cmdiarea.h"
#include "frontend/cprofilewindow.h"
#include "frontend/displaywindow/cmodulechooserbar.h"
#include "frontend/keychooser/ckeychooser.h"
#include "frontend/searchdialog/csearchdialog.h"
#include "util/cresmgr.h"
//KDE includes
#include <kpopupmenu.h>
#include <kaction.h>
#include <kaccel.h>
#include <kstdaccel.h>
#include <klocale.h>
using namespace Profile;
CReadWindow::CReadWindow(ListCSwordModuleInfo modules, CMDIArea* parent, const char *name )
: CDisplayWindow(modules,parent,name),
m_displayWidget(0) {
// installEventFilter(this);
}
CReadWindow::~CReadWindow() {
// tqWarning("destructor of CReadWindow");
}
/** Returns the display widget of this window. */
CReadDisplay* const CReadWindow::displayWidget() {
return m_displayWidget;
}
/** Sets the display widget of this display window. */
void CReadWindow::setDisplayWidget( CReadDisplay* newDisplay ) {
CDisplayWindow::setDisplayWidget(newDisplay);
if (m_displayWidget) {
disconnect(m_displayWidget->connectionsProxy(), TQT_SIGNAL(referenceClicked(const TQString&, const TQString&)), this, TQT_SLOT(lookup(const TQString&, const TQString&)));
disconnect(m_displayWidget->connectionsProxy(), TQT_SIGNAL(referenceDropped(const TQString&)), this, TQT_SLOT(lookup(const TQString&)));
}
m_displayWidget = newDisplay;
connect(
m_displayWidget->connectionsProxy(),
TQT_SIGNAL(referenceClicked(const TQString&, const TQString&)),
this,
TQT_SLOT(lookup(const TQString&, const TQString&))
);
connect(
m_displayWidget->connectionsProxy(),
TQT_SIGNAL(referenceDropped(const TQString&)),
this,
TQT_SLOT(lookup(const TQString&))
);
}
/** Lookup the given entry. */
void CReadWindow::lookup( CSwordKey* newKey ) {
Q_ASSERT(newKey);
using namespace Rendering;
Q_ASSERT(isReady() && newKey && modules().first());
if (!isReady() || !newKey || !modules().first()) {
return;
}
Q_ASSERT(modules().first()->getDisplay());
CEntryDisplay* display = modules().first()->getDisplay();
if (display) { //do we have a display object?
displayWidget()->setText(
display->text(
modules(),
newKey->key(),
displayOptions(),
filterOptions()
)
);
}
if (key() != newKey) {
key()->key(newKey->key());
}
setCaption( windowCaption() );
// tqDebug("[CReadWindow::lookup] Moving to anchor %s", CDisplayRendering::keyToHTMLAnchor(key()->key()).latin1());
displayWidget()->moveToAnchor( CDisplayRendering::keyToHTMLAnchor(key()->key()) );
}
/** Store the settings of this window in the given CProfileWindow object. */
void CReadWindow::storeProfileSettings(CProfileWindow * const settings) {
TQRect rect;
rect.setX(parentWidget()->x());
rect.setY(parentWidget()->y());
rect.setWidth(width());
rect.setHeight(height());
settings->setGeometry(rect);
// settings->setScrollbarPositions( m_htmlWidget->view()->horizontalScrollBar()->value(), m_htmlWidget->view()->verticalScrollBar()->value() );
settings->setType(modules().first()->type());
settings->setMaximized(isMaximized() || parentWidget()->isMaximized());
settings->setFocus( (this == mdi()->activeWindow()) ); //set property to true if this window is the active one.
if (key()) {
sword::VerseKey* vk = dynamic_cast<sword::VerseKey*>(key());
TQString oldLang;
if (vk) {
oldLang = TQString(vk->getLocale());
vk->setLocale("en"); //save english locale names as default!
}
settings->setKey( key()->key() );
if (vk) {
vk->setLocale(oldLang.latin1());
}
}
TQStringList mods;
ListCSwordModuleInfo allMods = modules();
ListCSwordModuleInfo::iterator end_it = allMods.end();
for (ListCSwordModuleInfo::iterator it(allMods.begin()); it != end_it; ++it) {
mods.append((*it)->name());
}
settings->setModules(mods);
}
void CReadWindow::applyProfileSettings(CProfileWindow * const settings) {
// parentWidget()->setUpdatesEnabled(false);
setUpdatesEnabled(false);
if (settings->maximized()) { //maximize this window
// Use parentWidget() to call showMaximized. Otherwise we'd get lot's of X11 errors
parentWidget()->showMaximized();
}
else {
const TQRect rect = settings->geometry();
resize(rect.width(), rect.height());
parentWidget()->move(rect.x(), rect.y());
}
setUpdatesEnabled(true);
}
void CReadWindow::insertKeyboardActions( TDEActionCollection* const ) {}
/** No descriptions */
void CReadWindow::copyDisplayedText() {
CExportManager mgr(TQString::null);
mgr.copyKey(key(), CExportManager::Text, true);
}
/*!
\fn CReadWindow::resizeEvent(TQResizeEvent* e)
*/
void CReadWindow::resizeEvent(TQResizeEvent* /*e*/) {
displayWidget()->moveToAnchor(
Rendering::CDisplayRendering::keyToHTMLAnchor(key()->key())
);
}
void CReadWindow::openSearchStrongsDialog() {
// tqWarning("looking for lemma %s", displayWidget()->getCurrentNodeInfo()[CDisplay::Lemma].latin1() );
TQString searchText = TQString();
if (displayWidget()->getCurrentNodeInfo()[CDisplay::Lemma] != TQString()) {
searchText.append("strong:").append(displayWidget()->getCurrentNodeInfo() [CDisplay::Lemma]);
}
Search::CSearchDialog::openDialog( modules(), searchText, 0 );
}