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.
koffice/lib/kofficeui/KoTemplateChooseDia.cpp

830 lines
26 KiB

/* This file is part of the KDE project
Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
2000, 2001 Werner Trobin <trobin@kde.org>
2002, 2003 Thomas Nagy <tnagy@eleve.emn.fr>
2004 David Faure <faure@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
// Description: Template Choose Dialog
/******************************************************************/
#include "KoTemplateChooseDia.h"
#include <klocale.h>
#include <kdeversion.h>
#include <kfiledialog.h>
#include <kinstance.h>
#include <KoFilterManager.h>
#include <KoTemplates.h>
#include <KoDocument.h>
#include <kmainwindow.h>
#include <kdebug.h>
#include <kpushbutton.h>
#include <kjanuswidget.h>
#include <kglobalsettings.h>
#include <ktextedit.h>
#include <kfileiconview.h>
#include <kfileitem.h>
#include <kmessagebox.h>
#include <kapplication.h>
#include <kaboutdata.h>
#include <tqapplication.h>
#include <tqlayout.h>
#include <tqtabwidget.h>
#include <tqcombobox.h>
#include <tqcheckbox.h>
#include <tqpoint.h>
#include <tqobjectlist.h>
#include <tqvgroupbox.h>
#include <tqtooltip.h>
class MyFileDialog : public KFileDialog
{
public :
MyFileDialog(
const TQString& startDir=0,
const TQString& filter =0,
TQWidget *parent=0,
const char *name=0,
bool modal=0)
: KFileDialog (startDir, filter, parent, name, modal),
m_slotOkCalled( false ) {}
KURL currentURL()
{
setResult( TQDialog::Accepted ); // selectedURL tests for it
return KFileDialog::selectedURL();
}
// Return true if the current URL exists, show msg box if not
bool checkURL()
{
bool ok = true;
KURL url = currentURL();
if ( url.isLocalFile() )
{
ok = TQFile::exists( url.path() );
if ( !ok ) {
// Maybe offer to create a new document with that name? (see alos KoDocument::openFile)
KMessageBox::error( this, i18n( "The file %1 does not exist." ).arg( url.path() ) );
}
}
return ok;
}
// Called directly by pressing Return in the location combo
// (so we need to remember that it got called, to avoid calling it twice)
// Called "by hand" when clicking on our OK button
void slotOk() {
m_slotOkCalled = true;
KFileDialog::slotOk();
}
bool slotOkCalled() const { return m_slotOkCalled; }
protected:
// Typing a file that doesn't exist closes the file dialog, we have to
// handle this case better here.
virtual void accept() {
if ( checkURL() )
KFileDialog::accept();
}
virtual void reject() {
KFileDialog::reject();
emit cancelClicked();
}
private:
bool m_slotOkCalled;
};
/*================================================================*/
/*================================================================*/
class KoTemplateChooseDiaPrivate {
public:
KoTemplateChooseDiaPrivate(const TQCString& templateType, KInstance* instance,
const TQCString &format,
const TQString &nativeName,
const TQStringList& extraNativeMimeTypes,
const KoTemplateChooseDia::DialogType &dialogType) :
m_templateType(templateType), m_instance(instance), m_format(format),
m_nativeName(nativeName), m_extraNativeMimeTypes( extraNativeMimeTypes ),
m_dialogType(dialogType), tree(0),
m_nostartupdlg( false ),
m_mainwidget(0), m_nodiag( 0 )
{
m_returnType = KoTemplateChooseDia::Empty;
}
~KoTemplateChooseDiaPrivate() {}
TQCString m_templateType;
KInstance* m_instance;
TQCString m_format;
TQString m_nativeName;
TQStringList m_extraNativeMimeTypes;
KoTemplateChooseDia::DialogType m_dialogType;
KoTemplateTree *tree;
TQString m_templateName;
TQString m_fullTemplateName;
KoTemplateChooseDia::ReturnType m_returnType;
bool m_nostartupdlg;
// the main widget
TQWidget *m_mainwidget;
// do not show this dialog at startup
TQCheckBox *m_nodiag;
// choose a template
KJanusWidget * m_jwidget;
KFileIconView *m_recent;
TQVGroupBox * boxdescription;
KTextEdit * textedit;
// choose a file
MyFileDialog *m_filedialog;
// for the tqlayout
TQTabWidget* tabWidget;
TQWidget* newTab;
TQWidget* existingTab;
TQWidget* recentTab;
};
/******************************************************************/
/* Class: KoTemplateChooseDia */
/******************************************************************/
/*================================================================*/
KoTemplateChooseDia::KoTemplateChooseDia(TQWidget *parent, const char *name, KInstance* instance,
const TQCString &format,
const TQString &nativeName,
const TQStringList &extraNativeMimeTypes,
const DialogType &dialogType,
const TQCString& templateType) :
KDialogBase(parent, name, true, i18n("Open Document"), KDialogBase::Ok | KDialogBase::Cancel,
KDialogBase::Ok)
{
d = new KoTemplateChooseDiaPrivate(
templateType,
instance,
format,
nativeName,
extraNativeMimeTypes,
dialogType);
TQPushButton* ok = actionButton( KDialogBase::Ok );
TQPushButton* cancel = actionButton( KDialogBase::Cancel );
cancel->setAutoDefault(false);
ok->setDefault(true);
//enableButtonOK(false);
if (!templateType.isNull() && !templateType.isEmpty() && dialogType!=NoTemplates)
d->tree = new KoTemplateTree(templateType, instance, true);
d->m_mainwidget = makeMainWidget();
d->m_templateName = "";
d->m_fullTemplateName = "";
d->m_returnType = Cancel;
setupDialog();
}
KoTemplateChooseDia::~KoTemplateChooseDia()
{
delete d->tree;
delete d;
d=0L;
}
// Keep in sync with KoMainWindow::chooseNewDocument
static bool cancelQuits() {
bool onlyDoc = !KoDocument::documentList() || KoDocument::documentList()->count() <= 1;
bool onlyMainWindow = !KMainWindow::memberList || KMainWindow::memberList->count() <= 1;
return onlyDoc && onlyMainWindow && kapp->instanceName() != "koshell"; // hack for koshell
}
KoTemplateChooseDia::ReturnType KoTemplateChooseDia::choose(KInstance* instance, TQString &file,
const KoTemplateChooseDia::DialogType &dialogType,
const TQCString& templateType,
TQWidget* parent)
{
const TQString nativeName = instance->aboutData()->programName();
const TQCString format = KoDocument::readNativeFormatMimeType( instance );
const TQStringList extraNativeMimeTypes = KoDocument::readExtraNativeMimeTypes( instance );
// Maybe the above two can be combined into one call, for speed:
//KoDocument::getNativeMimeTypeInfo( instance, nativeName, extraNativeMimeTypes );
return choose( instance, file, format, nativeName, extraNativeMimeTypes,
dialogType, templateType, parent );
}
KoTemplateChooseDia::ReturnType KoTemplateChooseDia::choose(KInstance* instance, TQString &file,
const TQCString &format,
const TQString &nativeName,
const TQStringList& extraNativeMimeTypes,
const DialogType &dialogType,
const TQCString& templateType,
TQWidget* parent )
{
KoTemplateChooseDia *dlg = new KoTemplateChooseDia(
parent, "Choose", instance, format,
nativeName, extraNativeMimeTypes, dialogType, templateType );
KoTemplateChooseDia::ReturnType rt = Cancel;
if (dlg->noStartupDlg())
{
// start with the default template
file = dlg->getFullTemplate();
rt = dlg->getReturnType();
}
else
{
dlg->resize( 700, 480 );
if ( dlg->exec() == TQDialog::Accepted )
{
file = dlg->getFullTemplate();
rt = dlg->getReturnType();
}
}
delete dlg;
return rt;
}
bool KoTemplateChooseDia::noStartupDlg() const {
return d->m_nostartupdlg;
}
TQString KoTemplateChooseDia::getTemplate() const{
return d->m_templateName;
}
TQString KoTemplateChooseDia::getFullTemplate() const{
return d->m_fullTemplateName;
}
KoTemplateChooseDia::ReturnType KoTemplateChooseDia::getReturnType() const {
return d->m_returnType;
}
KoTemplateChooseDia::DialogType KoTemplateChooseDia::getDialogType() const {
return d->m_dialogType;
}
/*================================================================*/
// private
void KoTemplateChooseDia::setupRecentDialog(TQWidget * widgetbase, TQGridLayout * tqlayout)
{
d->m_recent = new KoTCDRecentFilesIconView(widgetbase, "recent files");
// I prefer the icons to be in "most recent first" order (DF)
d->m_recent->setSorting( static_cast<TQDir::SortSpec>( TQDir::Time | TQDir::Reversed ) );
tqlayout->addWidget(d->m_recent,0,0);
TQString oldGroup = d->m_instance->config()->group();
d->m_instance->config()->setGroup( "RecentFiles" );
int i = 0;
TQString value;
do {
TQString key=TQString( "File%1" ).arg( i );
value=d->m_instance->config()->readPathEntry( key );
if ( !value.isEmpty() ) {
// Support for kdelibs-3.5's new RecentFiles format: name[url]
TQString s = value;
if ( s.endsWith("]") )
{
int pos = s.find("[");
s = s.mid( pos + 1, s.length() - pos - 2);
}
KURL url(s);
if(!url.isLocalFile() || TQFile::exists(url.path())) {
KFileItem *item = new KFileItem( KFileItem::Unknown, KFileItem::Unknown, url );
d->m_recent->insertItem(item);
}
}
i++;
} while ( !value.isEmpty() || i<=10 );
d->m_instance->config()->setGroup( oldGroup );
d->m_recent->showPreviews();
connect(d->m_recent, TQT_SIGNAL( doubleClicked ( TQIconViewItem * ) ),
this, TQT_SLOT( recentSelected( TQIconViewItem * ) ) );
}
/*================================================================*/
// private
void KoTemplateChooseDia::setupFileDialog(TQWidget * widgetbase, TQGridLayout * tqlayout)
{
TQString dir = TQString();
TQPoint point( 0, 0 );
d->m_filedialog=new MyFileDialog(dir,
TQString(),
widgetbase,
"file dialog",
false);
tqlayout->addWidget(d->m_filedialog,0,0);
d->m_filedialog->reparent( widgetbase , point );
//d->m_filedialog->setOperationMode( KFileDialog::Opening);
TQObjectList *l = d->m_filedialog->queryList( TQPUSHBUTTON_OBJECT_NAME_STRING );
TQObjectListIt childit( *l );
TQObject *obj;
while ( (obj = childit.current()) != 0 ) {
++childit;
((TQPushButton*)obj)->hide();
}
delete l;
d->m_filedialog->setSizeGripEnabled ( FALSE );
TQStringList mimeFilter = KoFilterManager::mimeFilter( d->m_format, KoFilterManager::Import );
TQStringList::Iterator mimeFilterIt = mimeFilter.at( 1 );
for ( TQStringList::ConstIterator it = d->m_extraNativeMimeTypes.begin();
it != d->m_extraNativeMimeTypes.end(); ++it ) {
mimeFilterIt = mimeFilter.insert( mimeFilterIt, *it );
++mimeFilterIt;
}
d->m_filedialog->setMimeFilter( mimeFilter );
connect(d->m_filedialog, TQT_SIGNAL( okClicked() ),
this, TQT_SLOT ( slotOk() ));
connect(d->m_filedialog, TQT_SIGNAL( cancelClicked() ),
this, TQT_SLOT ( slotCancel() ));
}
/*================================================================*/
// private
void KoTemplateChooseDia::setupTemplateDialog(TQWidget * widgetbase, TQGridLayout * tqlayout)
{
d->m_jwidget = new KJanusWidget(
widgetbase,
"kjanuswidget",
KJanusWidget::IconList);
tqlayout->addWidget(d->m_jwidget,0,0);
d->boxdescription = new TQVGroupBox(
i18n("Selected Template"),
widgetbase,
"boxdescription");
tqlayout->addWidget(d->boxdescription, 1, 0 );
// config
KConfigGroup grp( d->m_instance->config(), "TemplateChooserDialog" );
int templateNum = grp.readNumEntry( "TemplateTab", -1 );
TQString templateName = grp.readPathEntry( "TemplateName" );
if ( templateName.isEmpty() && d->tree->defaultTemplate() )
templateName = d->tree->defaultTemplate()->name(); //select the default template for the app
// item which will be selected initially
TQIconViewItem * itemtoselect = 0;
// count the templates inserted
int entriesnumber = 0;
int defaultTemplateGroup = -1;
for ( KoTemplateGroup *group = d->tree->first(); group!=0L; group=d->tree->next() )
{
if (group->isHidden())
continue;
if ( d->tree->defaultGroup() == group )
defaultTemplateGroup = entriesnumber; //select the default template group for the app
TQFrame * frame = d->m_jwidget->addPage (
group->name(),
group->name(),
group->first()->loadPicture(d->m_instance));
TQGridLayout * tqlayout = new TQGridLayout(frame);
KoTCDIconCanvas *canvas = new KoTCDIconCanvas( frame );
tqlayout->addWidget(canvas,0,0);
canvas->setBackgroundColor( colorGroup().base() );
canvas->setResizeMode(TQIconView::Adjust);
canvas->setWordWrapIconText( true );
canvas->show();
TQIconViewItem * tempitem = canvas->load(group, templateName, d->m_instance);
if (tempitem)
itemtoselect = tempitem;
canvas->sort();
canvas->setSelectionMode(TQIconView::Single);
connect( canvas, TQT_SIGNAL( clicked ( TQIconViewItem * ) ),
this, TQT_SLOT( currentChanged( TQIconViewItem * ) ) );
connect( canvas, TQT_SIGNAL( doubleClicked( TQIconViewItem * ) ),
this, TQT_SLOT( chosen(TQIconViewItem *) ) );
entriesnumber++;
}
d->boxdescription->setInsideMargin ( 3 );
d->boxdescription->setInsideSpacing ( 3 );
d->textedit = new KTextEdit( d->boxdescription );
d->textedit->setReadOnly(1);
d->textedit->setText(descriptionText(i18n("Empty Document"), i18n("Creates an empty document")));
d->textedit->setLineWidth(0);
d->textedit->setMaximumHeight(50);
// Hide the widget if there is no template available. This should never happen ;-)
if (!entriesnumber)
d->m_jwidget->hide();
// Set the initially shown page, possibly from the last usage of the dialog
if (entriesnumber >= templateNum && templateNum != -1 )
d->m_jwidget->showPage(templateNum);
else if ( defaultTemplateGroup != -1)
d->m_jwidget->showPage(defaultTemplateGroup);
// Set the initially selected template, possibly from the last usage of the dialog
currentChanged(itemtoselect);
// setup the checkbox
TQString translatedstring = i18n("Always start %1 with the selected template").arg(d->m_nativeName);
d->m_nodiag = new TQCheckBox ( translatedstring , widgetbase);
tqlayout->addWidget(d->m_nodiag, 2, 0);
TQString startwithoutdialog = grp.readEntry( "NoStartDlg" );
bool ischecked = startwithoutdialog == TQString("yes");
// When not starting up, display a tri-state button telling whether
// the user actually choosed the template to start with next times (bug:77542)
if (d->m_dialogType == Everything)
{
d->m_nodiag->setChecked( ischecked );
}
else
{
d->m_nodiag->setTristate();
d->m_nodiag->setNoChange();
}
}
/*================================================================*/
// private
void KoTemplateChooseDia::setupDialog()
{
TQGridLayout *maingrid=new TQGridLayout( d->m_mainwidget, 1, 1, 2, 6);
KConfigGroup grp( d->m_instance->config(), "TemplateChooserDialog" );
if (d->m_dialogType == Everything)
{
// the user may want to start with his favorite template
if (grp.readEntry( "NoStartDlg" ) == TQString("yes") )
{
d->m_nostartupdlg = true;
d->m_returnType = Empty;
// no default template, just start with an empty document
if (grp.readEntry("LastReturnType") == TQString("Empty") )
return;
// start with the default template
d->m_templateName = grp.readPathEntry( "TemplateName" );
d->m_fullTemplateName = grp.readPathEntry( "FullTemplateName" );
// be paranoid : invalid template means empty template
if (!TQFile::exists(d->m_fullTemplateName))
return;
if (d->m_fullTemplateName.length() < 2)
return;
d->m_returnType = Template;
return;
}
if ( cancelQuits() )
setButtonCancel( KStdGuiItem::quit() );
d->tabWidget = new TQTabWidget( d->m_mainwidget, "tabWidget" );
maingrid->addWidget( d->tabWidget, 0, 0 );
// new document
d->newTab = new TQWidget( d->tabWidget, "newTab" );
d->tabWidget->insertTab( d->newTab, i18n( "&Create Document" ) );
TQGridLayout * newTabLayout = new TQGridLayout( d->newTab, 1, 1, KDialogBase::marginHint(), KDialogBase::spacingHint());
// existing document
d->existingTab = new TQWidget( d->tabWidget, "existingTab" );
d->tabWidget->insertTab( d->existingTab, i18n( "Open &Existing Document" ) );
TQGridLayout * existingTabLayout = new TQGridLayout( d->existingTab, 1, 1, 0, KDialog::spacingHint());
// recent document
d->recentTab = new TQWidget( d->tabWidget, "recentTab" );
d->tabWidget->insertTab( d->recentTab, i18n( "Open &Recent Document" ) );
TQGridLayout * recentTabLayout = new TQGridLayout( d->recentTab, 1, 1, KDialogBase::marginHint(), KDialog::spacingHint());
setupTemplateDialog(d->newTab, newTabLayout);
setupFileDialog(d->existingTab, existingTabLayout);
setupRecentDialog(d->recentTab, recentTabLayout);
TQString tabhighlighted = grp.readEntry("LastReturnType");
if ( tabhighlighted == "Template" )
d->tabWidget->setCurrentPage(0); // CreateDocument tab
else if (tabhighlighted == "File" )
d->tabWidget->setCurrentPage(2); // RecentDocument tab
else
d->tabWidget->setCurrentPage(0); // Default setting: CreateDocument tab
}
else
{
// open a file
if (d->m_dialogType == NoTemplates)
{
setupFileDialog(d->m_mainwidget, maingrid);
}
// create a new document from a template
if (d->m_dialogType == OnlyTemplates)
{
setCaption(i18n( "Create Document" ));
setupTemplateDialog(d->m_mainwidget, maingrid);
}
}
}
/*================================================================*/
// private SLOT
void KoTemplateChooseDia::currentChanged( TQIconViewItem * item)
{
if (item)
{
TQIconView* canvas = item->iconView();
// set text in the textarea
d->textedit->setText( descriptionText(
item->text(),
((KoTCDIconViewItem *) item)->getDescr()
));
// set the icon in the canvas selected
if (canvas)
canvas->setSelected(item,1,0);
// register the current template
d->m_templateName = item->text();
d->m_fullTemplateName = ((KoTCDIconViewItem *) item)->getFName();
}
}
/*================================================================*/
// private SLOT
void KoTemplateChooseDia::chosen(TQIconViewItem * item)
{
// the user double clicked on a template
if (item)
{
currentChanged(item);
slotOk();
}
}
/* */
// private SLOT
void KoTemplateChooseDia::recentSelected( TQIconViewItem * item)
{
if (item)
{
slotOk();
}
}
/*================================================================*/
// protected SLOT
void KoTemplateChooseDia::slotOk()
{
// Collect info from the dialog into d->m_returnType and d->m_templateName etc.
if (collectInfo())
{
// Save it for the next time
KConfigGroup grp( d->m_instance->config(), "TemplateChooserDialog" );
static const char* const s_returnTypes[] = { 0 /*Cancel ;)*/, "Template", "File", "Empty" };
if ( d->m_returnType <= Empty )
{
grp.writeEntry( "LastReturnType", TQString::fromLatin1(s_returnTypes[d->m_returnType]) );
if (d->m_returnType == Template)
{
grp.writeEntry( "TemplateTab", d->m_jwidget->activePageIndex() );
grp.writePathEntry( "TemplateName", d->m_templateName );
grp.writePathEntry( "FullTemplateName", d->m_fullTemplateName);
}
if (d->m_nodiag)
{
// The checkbox m_nodiag is in tri-state mode for new documents
// fixes bug:77542
if (d->m_nodiag->state() == TQButton::On) {
grp.writeEntry( "NoStartDlg", "yes");
}
else if (d->m_nodiag->state() == TQButton::Off) {
grp.writeEntry( "NoStartDlg", "no");
}
}
}
else
{
kdWarning(30003) << "Unsupported template chooser result: " << d->m_returnType << endl;
grp.writeEntry( "LastReturnType", TQString() );
}
KDialogBase::slotOk();
}
}
/*================================================================*/
// private
bool KoTemplateChooseDia::collectInfo()
{
// to determine what tab is selected in "Everything" mode
bool newTabSelected = false;
if ( d->m_dialogType == Everything)
if ( d->tabWidget->currentPage() == d->newTab )
newTabSelected = true;
// is it a template or a file ?
if ( d->m_dialogType==OnlyTemplates || newTabSelected )
{
// a template is chosen
if (d->m_templateName.length() > 0)
d->m_returnType = Template;
else
d->m_returnType=Empty;
return true;
}
else if ( d->m_dialogType != OnlyTemplates )
{
// a file is chosen
if (d->m_dialogType == Everything && d->tabWidget->currentPage() == d->recentTab)
{
// Recent file
KFileItem * item = d->m_recent->currentFileItem();
if (! item)
return false;
KURL url = item->url();
if(url.isLocalFile() && !TQFile::exists(url.path()))
{
KMessageBox::error( this, i18n( "The file %1 does not exist." ).arg( url.path() ) );
return false;
}
d->m_fullTemplateName = url.url();
d->m_returnType = File;
}
else
{
// Existing file from file dialog
if ( !d->m_filedialog->slotOkCalled() )
d->m_filedialog->slotOk();
KURL url = d->m_filedialog->currentURL();
d->m_fullTemplateName = url.url();
d->m_returnType = File;
return d->m_filedialog->checkURL();
}
return true;
}
d->m_returnType=Empty;
return false;
}
/*================================================================*/
//private
TQString KoTemplateChooseDia::descriptionText(const TQString &name, const TQString &description)
{
TQString descrText(i18n("Name:"));
descrText += " " + name;
descrText += "\n";
descrText += i18n("Description:");
if (description.isEmpty())
descrText += " " + i18n("No description available");
else
descrText += " " + description;
return descrText;
}
/*================================================================*/
TQIconViewItem * KoTCDIconCanvas::load( KoTemplateGroup *group, const TQString& name, KInstance* instance )
{
TQIconViewItem * itemtoreturn = 0;
for (KoTemplate *t=group->first(); t!=0L; t=group->next()) {
if (t->isHidden())
continue;
TQIconViewItem *item = new KoTCDIconViewItem(
this,
t->name(),
t->loadPicture(instance),
t->description(),
t->file());
if (name == t->name())
{
itemtoreturn = item;
}
item->setKey(t->name());
item->setDragEnabled(false);
item->setDropEnabled(false);
}
return itemtoreturn;
}
/*================================================================*/
KoTCDRecentFilesIconView::~KoTCDRecentFilesIconView()
{
removeToolTip();
}
void KoTCDRecentFilesIconView::showToolTip( TQIconViewItem* item )
{
removeToolTip();
if ( !item )
return;
// Mostly duplicated from KFileIconView, because it only shows tooltips
// for truncated icon texts, and we want tooltips on all icons,
// with the full path...
// KFileIconView would need a virtual method for deciding if a tooltip should be shown,
// and another one for deciding what's the text of the tooltip...
const KFileItem *fi = ( (KFileIconViewItem*)item )->fileInfo();
TQString toolTipText = fi->url().prettyURL( 0, KURL::StripFileProtocol );
toolTip = new TQLabel( TQString::fromLatin1(" %1 ").arg(toolTipText), 0,
"myToolTip",
WStyle_StaysOnTop | WStyle_Customize | WStyle_NoBorder | WStyle_Tool | WX11BypassWM );
toolTip->setFrameStyle( TQFrame::Plain | TQFrame::Box );
toolTip->setLineWidth( 1 );
toolTip->setAlignment( AlignLeft | AlignTop );
toolTip->move( TQCursor::pos() + TQPoint( 14, 14 ) );
toolTip->adjustSize();
TQRect screen = TQApplication::desktop()->screenGeometry(
TQApplication::desktop()->screenNumber(TQCursor::pos()));
if (toolTip->x()+toolTip->width() > screen.right()) {
toolTip->move(toolTip->x()+screen.right()-toolTip->x()-toolTip->width(), toolTip->y());
}
if (toolTip->y()+toolTip->height() > screen.bottom()) {
toolTip->move(toolTip->x(), screen.bottom()-toolTip->y()-toolTip->height()+toolTip->y());
}
toolTip->setFont( TQToolTip::font() );
toolTip->setPalette( TQToolTip::palette(), TRUE );
toolTip->show();
}
void KoTCDRecentFilesIconView::removeToolTip()
{
delete toolTip;
toolTip = 0;
}
void KoTCDRecentFilesIconView::hideEvent( TQHideEvent *ev )
{
removeToolTip();
KFileIconView::hideEvent( ev );
}
#include "KoTemplateChooseDia.moc"