Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
bibletime/bibletime/frontend/displaywindow/clexiconreadwindow.cpp

318 рядки
11 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 "clexiconreadwindow.h"
#include "cmodulechooserbar.h"
#include "cbuttons.h"
#include "backend/cswordkey.h"
#include "backend/cswordldkey.h"
#include "frontend/cbtconfig.h"
#include "frontend/cexportmanager.h"
#include "frontend/display/cdisplay.h"
#include "frontend/display/creaddisplay.h"
#include "frontend/keychooser/ckeychooser.h"
#include "util/ctoolclass.h"
#include "util/cresmgr.h"
//TQt includes
//KDE includes
#include <kaccel.h>
#include <ktoolbar.h>
#include <klocale.h>
#include <kpopupmenu.h>
#include <tdeversion.h>
// #include <kactionclasses.h>
CLexiconReadWindow::CLexiconReadWindow(ListCSwordModuleInfo moduleList, CMDIArea* parent, const char *name) : CReadWindow(moduleList, parent,name) {
setKey( CSwordKey::createInstance(moduleList.first()) );
}
CLexiconReadWindow::~CLexiconReadWindow() {}
void CLexiconReadWindow::insertKeyboardActions( TDEActionCollection* const a ) {
new TDEAction(
i18n("Next entry"), CResMgr::displaywindows::lexiconWindow::nextEntry::accel,
a, "nextEntry"
);
new TDEAction(
i18n("Previous entry"), CResMgr::displaywindows::lexiconWindow::previousEntry::accel,
a, "previousEntry"
);
// new TDEAction(i18n("Copy reference only"), TDEShortcut(0), a, "copyReferenceOnly");
new TDEAction(i18n("Copy entry with text"), TDEShortcut(0), a, "copyEntryWithText");
// new TDEAction(i18n("Copy selected text"), TDEShortcut(0), a, "copySelectedText");
new TDEAction(i18n("Save entry as plain text"), TDEShortcut(0), a, "saveEntryAsPlainText");
new TDEAction(i18n("Save entry as HTML"), TDEShortcut(0), a, "saveEntryAsHTML");
// new TDEAction(i18n("Print reference only"), TDEShortcut(0), a, "printReferenceOnly");
new TDEAction(i18n("Print entry with text"), TDEShortcut(0), a, "printEntryWithText");
}
void CLexiconReadWindow::initActions() {
CReadWindow::initActions();
m_actions.backInHistory = dynamic_cast<TDEToolBarPopupAction*>(
actionCollection()->action(
CResMgr::displaywindows::general::backInHistory::actionName
)
);
Q_ASSERT(m_actions.backInHistory);
m_actions.forwardInHistory = dynamic_cast<TDEToolBarPopupAction*>(
actionCollection()->action(
CResMgr::displaywindows::general::forwardInHistory::actionName
)
);
Q_ASSERT(m_actions.forwardInHistory);
new TDEAction(
i18n("Next entry"), CResMgr::displaywindows::lexiconWindow::nextEntry::accel,
TQT_TQOBJECT(this), TQT_SLOT( nextEntry() ),
actionCollection(), "nextEntry"
);
new TDEAction(
i18n("Previous entry"), CResMgr::displaywindows::lexiconWindow::previousEntry::accel,
TQT_TQOBJECT(this), TQT_SLOT( previousEntry() ),
actionCollection(), "previousEntry"
);
m_actions.selectAll = actionCollection()->action("selectAll");
Q_ASSERT(m_actions.selectAll);
m_actions.findText = actionCollection()->action("findText");
Q_ASSERT(m_actions.findText);
//m_actions.findStrongs = new TDEAction(i18n("Strong's Search"), TDEShortcut(0),this, TQT_SLOT(openSearchStrongsDialog()), actionCollection(), "findStrongs");
m_actions.findStrongs = new TDEAction(
i18n("Strong's Search"),
CResMgr::displaywindows::general::findStrongs::icon,
CResMgr::displaywindows::general::findStrongs::accel,
TQT_TQOBJECT(this), TQT_SLOT(openSearchStrongsDialog()),
actionCollection(),
CResMgr::displaywindows::general::findStrongs::actionName);
m_actions.copy.reference = new TDEAction(i18n("Reference only"), TDEShortcut(0), displayWidget()->connectionsProxy(), TQT_SLOT(copyAnchorOnly()), actionCollection(), "copyReferenceOnly");
m_actions.copy.entry = new TDEAction(i18n("Entry with text"), TDEShortcut(0), displayWidget()->connectionsProxy(), TQT_SLOT(copyAll()), actionCollection(), "copyEntryWithText");
m_actions.copy.selectedText = actionCollection()->action("copySelectedText");
Q_ASSERT(m_actions.copy.selectedText);
m_actions.save.entryAsPlain = new TDEAction(i18n("Entry as plain text"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(saveAsPlain()),actionCollection(), "saveEntryAsPlain");
m_actions.save.entryAsHTML = new TDEAction(i18n("Entry as HTML"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(saveAsHTML()), actionCollection(), "saveEntryAsHTML");
m_actions.print.reference = new TDEAction(i18n("Reference only"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(printAnchorWithText()), actionCollection(), "printReferenceOnly");
m_actions.print.entry = new TDEAction(i18n("Entry with text"), TDEShortcut(0), TQT_TQOBJECT(this), TQT_SLOT(printAll()), actionCollection(), "printEntryWithText");
// init with the user defined settings
CBTConfig::setupAccelSettings(CBTConfig::lexiconWindow, actionCollection());
};
/** No descriptions */
void CLexiconReadWindow::initConnections() {
Q_ASSERT(keyChooser());
connect(keyChooser(), TQT_SIGNAL(keyChanged(CSwordKey*)),
TQT_TQOBJECT(this), TQT_SLOT(lookup(CSwordKey*)));
connect(keyChooser(), TQT_SIGNAL(historyChanged()),
TQT_TQOBJECT(this), TQT_SLOT(slotUpdateHistoryButtons()));
//connect the history actions to the right slots
connect(
m_actions.backInHistory->popupMenu(), TQT_SIGNAL(aboutToShow()),
TQT_TQOBJECT(this), TQT_SLOT(slotFillBackHistory())
);
connect(
m_actions.backInHistory->popupMenu(), TQT_SIGNAL(activated(int)),
keyChooser(), TQT_SLOT(backInHistory(int))
);
connect(
m_actions.forwardInHistory->popupMenu(), TQT_SIGNAL(aboutToShow()),
TQT_TQOBJECT(this), TQT_SLOT(slotFillForwardHistory())
);
connect(
m_actions.forwardInHistory->popupMenu(), TQT_SIGNAL(activated(int)),
keyChooser(), TQT_SLOT(forwardInHistory(int))
);
}
void CLexiconReadWindow::initView() {
setDisplayWidget( CDisplay::createReadInstance(this) );
setMainToolBar( new TDEToolBar(this) );
addDockWindow(mainToolBar());
setKeyChooser( CKeyChooser::createInstance(modules(), key(), mainToolBar()) );
mainToolBar()->insertWidget(0, keyChooser()->sizeHint().width(), keyChooser());
mainToolBar()->setFullSize(false);
setModuleChooserBar( new CModuleChooserBar(modules(), modules().first()->type(), this) );
addDockWindow(moduleChooserBar());
setButtonsToolBar( new TDEToolBar(this) );
addDockWindow(buttonsToolBar());
setIcon(CToolClass::getIconForModule(modules().first()));
setCentralWidget( displayWidget()->view() );
}
void CLexiconReadWindow::initToolbars() {
//main toolbar
Q_ASSERT(m_actions.backInHistory);
m_actions.backInHistory->plug( mainToolBar(),0 ); //1st button
m_actions.forwardInHistory->plug( mainToolBar(),1 ); //2nd button
//buttons toolbar
TDEAction* action = actionCollection()->action(
CResMgr::displaywindows::general::search::actionName);
Q_ASSERT( action );
if (action) {
action->plug(buttonsToolBar());
}
#if TDE_VERSION_MINOR < 1
action->plugAccel( accel() );
#endif
setDisplaySettingsButton( new CDisplaySettingsButton( &displayOptions(), &filterOptions(), modules(), buttonsToolBar()) );
buttonsToolBar()->insertWidget(2,displaySettingsButton()->size().width(), displaySettingsButton());
}
void CLexiconReadWindow::setupPopupMenu() {
popup()->insertTitle(CToolClass::getIconForModule(modules().first()), i18n("Lexicon window"));
// m_actions.selectAll = new TDEAction(i18n("Select all"), TDEShortcut(0), displayWidget()->connectionsProxy(), TQT_SLOT(selectAll()), actionCollection());
m_actions.findText->plug(popup());
m_actions.findStrongs->plug(popup());
m_actions.selectAll->plug(popup());
(new TDEActionSeparator(TQT_TQOBJECT(this)))->plug( popup() );
m_actions.copyMenu = new TDEActionMenu(i18n("Copy..."), CResMgr::displaywindows::lexiconWindow::copyMenu::icon, actionCollection());
m_actions.copyMenu->setDelayed(false);
m_actions.copyMenu->insert(m_actions.copy.reference);
m_actions.copyMenu->insert(m_actions.copy.entry);
m_actions.copyMenu->insert(new TDEActionSeparator(TQT_TQOBJECT(this)));
m_actions.copyMenu->insert(m_actions.copy.selectedText);
m_actions.copyMenu->plug(popup());
m_actions.saveMenu = new TDEActionMenu(i18n("Save..."), CResMgr::displaywindows::lexiconWindow::saveMenu::icon, actionCollection());
m_actions.saveMenu->setDelayed(false);
m_actions.saveMenu->insert(m_actions.save.entryAsPlain);
m_actions.saveMenu->insert(m_actions.save.entryAsHTML);
m_actions.saveMenu->plug(popup());
m_actions.printMenu = new TDEActionMenu(i18n("Print..."), CResMgr::displaywindows::lexiconWindow::printMenu::icon, actionCollection());
m_actions.printMenu->setDelayed(false);
m_actions.printMenu->insert(m_actions.print.reference);
m_actions.printMenu->insert(m_actions.print.entry);
m_actions.printMenu->plug(popup());
}
/** Reimplemented. */
void CLexiconReadWindow::updatePopupMenu() {
//enable the action depending on the supported module features
/* bool hasStrongs = false;
ListCSwordModuleInfo mods = modules();
for (ListCSwordModuleInfo::iterator it = mods.begin(); it != mods.end(); ++it) {
if ( (*it)->has( CSwordModuleInfo::strongNumbers ) ) {
hasStrongs = true;
break;
}
}
m_actions.findStrongs->setEnabled( hasStrongs );*/
m_actions.findStrongs->setEnabled( displayWidget()->getCurrentNodeInfo()[CDisplay::Lemma] != TQString() );
m_actions.copy.reference->setEnabled( displayWidget()->hasActiveAnchor() );
//m_actions.copy.entry->setEnabled( displayWidget()->hasActiveAnchor() );
m_actions.copy.selectedText->setEnabled( displayWidget()->hasSelection() );
m_actions.print.reference->setEnabled( displayWidget()->hasActiveAnchor() );
}
/** No descriptions */
void CLexiconReadWindow::nextEntry() {
keyChooser()->setKey(ldKey()->NextEntry());
}
/** No descriptions */
void CLexiconReadWindow::previousEntry() {
keyChooser()->setKey(ldKey()->PreviousEntry());
}
/** Reimplementation to return the right key. */
CSwordLDKey* CLexiconReadWindow::ldKey() {
return dynamic_cast<CSwordLDKey*>(CDisplayWindow::key());
}
/** This function saves the entry as html using the CExportMgr class. */
void CLexiconReadWindow::saveAsHTML() {
CExportManager mgr(i18n("Saving entry ..."), true, i18n("Saving"), filterOptions(), displayOptions());
mgr.saveKey(key(), CExportManager::HTML, true);
}
/** This function saves the entry as html using the CExportMgr class. */
void CLexiconReadWindow::saveAsPlain() {
CExportManager mgr(i18n("Saving entry ..."), true, i18n("Saving"), filterOptions(), displayOptions());
mgr.saveKey(key(), CExportManager::Text, true);
}
void CLexiconReadWindow::slotFillBackHistory() {
// tqWarning("fill back history");
TQStringList keyList = keyChooser()->getPreviousKeys();
TQPopupMenu* menu = m_actions.backInHistory->popupMenu();
menu->clear();
TQStringList::iterator it;
int index = 1;
for (it = keyList.begin(); it != keyList.end(); ++it) {
menu->insertItem(*it,index, index);
++index;
}
}
void CLexiconReadWindow::slotFillForwardHistory() {
// tqWarning("fill forward history");
TQStringList keyList = keyChooser()->getNextKeys();
TQPopupMenu* menu = m_actions.forwardInHistory->popupMenu();
menu->clear();
TQStringList::iterator it;
int index = 1;
for (it = keyList.begin(); it != keyList.end(); ++it) {
menu->insertItem(*it,index, index);
++index;
}
}
void CLexiconReadWindow::slotUpdateHistoryButtons() {
// tqWarning("updating history buttons");
Q_ASSERT(m_actions.backInHistory);
Q_ASSERT(keyChooser());
m_actions.backInHistory->setEnabled( keyChooser()->getPreviousKeys().size() > 0 );
m_actions.forwardInHistory->setEnabled( keyChooser()->getNextKeys().size() > 0 );
}