|
|
|
|
/***************************************************************************
|
|
|
|
|
* Copyright (C) 2003 by S<EFBFBD>astien Laot *
|
|
|
|
|
* slaout@linux62.org *
|
|
|
|
|
* *
|
|
|
|
|
* 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., *
|
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
|
|
#include <tqtabwidget.h>
|
|
|
|
|
#include <tqlayout.h>
|
|
|
|
|
#include <tqtooltip.h>
|
|
|
|
|
#include <tqcursor.h>
|
|
|
|
|
#include <tqwhatsthis.h>
|
|
|
|
|
#include <tqvaluelist.h>
|
|
|
|
|
#include <tqregexp.h>
|
|
|
|
|
#include <tqbuttongroup.h>
|
|
|
|
|
#include <kstringhandler.h>
|
|
|
|
|
|
|
|
|
|
#include <ksqueezedtextlabel.h>
|
|
|
|
|
#include <tqpoint.h>
|
|
|
|
|
#include <tqpixmap.h>
|
|
|
|
|
#include <tqinputdialog.h>
|
|
|
|
|
#include <tdepopupmenu.h>
|
|
|
|
|
#include <kiconloader.h>
|
|
|
|
|
#include <kiconeffect.h>
|
|
|
|
|
#include <tqiconset.h>
|
|
|
|
|
#include <tdeaction.h>
|
|
|
|
|
#include <kapp.h>
|
|
|
|
|
#include <tdelocale.h>
|
|
|
|
|
#include <tdemenubar.h>
|
|
|
|
|
#include <kedittoolbar.h>
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
|
#include <tqsignalmapper.h>
|
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
|
|
|
|
|
|
#include <tqpainter.h>
|
|
|
|
|
#include <tqstyle.h>
|
|
|
|
|
#include <tdeglobalsettings.h>
|
|
|
|
|
#include <kstandarddirs.h>
|
|
|
|
|
#include <tqdir.h>
|
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
|
#include <tdemessagebox.h>
|
|
|
|
|
#include <kstatusbar.h>
|
|
|
|
|
#include <tqtimer.h>
|
|
|
|
|
#include <tqaction.h>
|
|
|
|
|
#include <tdestdaccel.h>
|
|
|
|
|
#include <kglobalaccel.h>
|
|
|
|
|
#include <kkeydialog.h>
|
|
|
|
|
#include <kpassivepopup.h>
|
|
|
|
|
#include <tdeconfig.h>
|
|
|
|
|
#include <kcolordialog.h>
|
|
|
|
|
#include <tdeaboutdata.h>
|
|
|
|
|
|
|
|
|
|
#include <tdeversion.h>
|
|
|
|
|
#include <tqdesktopwidget.h>
|
|
|
|
|
#include <twin.h>
|
|
|
|
|
|
|
|
|
|
#include <kprogress.h>
|
|
|
|
|
|
|
|
|
|
#include "mainwindow.h"
|
|
|
|
|
#include "basket.h"
|
|
|
|
|
#include "basketproperties.h"
|
|
|
|
|
#include "note.h"
|
|
|
|
|
#include "noteedit.h"
|
|
|
|
|
#include "settings.h"
|
|
|
|
|
#include "global.h"
|
|
|
|
|
//#include "addbasketwizard.h"
|
|
|
|
|
#include "newbasketdialog.h"
|
|
|
|
|
#include "basketfactory.h"
|
|
|
|
|
#include "popupmenu.h"
|
|
|
|
|
#include "xmlwork.h"
|
|
|
|
|
#include "debugwindow.h"
|
|
|
|
|
#include "notefactory.h"
|
|
|
|
|
#include "notedrag.h"
|
|
|
|
|
#include "tools.h"
|
|
|
|
|
#include "tag.h"
|
|
|
|
|
#include "formatimporter.h"
|
|
|
|
|
#include "softwareimporters.h"
|
|
|
|
|
#include "regiongrabber.h"
|
|
|
|
|
#include "password.h"
|
|
|
|
|
#include "bnpview.h"
|
|
|
|
|
#include "systemtray.h"
|
|
|
|
|
#include "clickablelabel.h"
|
|
|
|
|
#include "basketstatusbar.h"
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <ksettings/dialog.h>
|
|
|
|
|
#include <kcmultidialog.h>
|
|
|
|
|
|
|
|
|
|
/** Container */
|
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow(TQWidget *parent, const char *name)
|
|
|
|
|
: TDEMainWindow(parent, name != 0 ? name : "MainWindow"), m_settings(0), m_quit(false)
|
|
|
|
|
{
|
|
|
|
|
BasketStatusBar* bar = new BasketStatusBar(statusBar());
|
|
|
|
|
m_baskets = new BNPView(this, "BNPViewApp", this, actionCollection(), bar);
|
|
|
|
|
setCentralWidget(m_baskets);
|
|
|
|
|
|
|
|
|
|
// Do not remove. This call to 'resize' prevents the appearance of annoying
|
|
|
|
|
// warning messages if basket is started without a basketrc config file
|
|
|
|
|
resize(450, 360);
|
|
|
|
|
|
|
|
|
|
setupActions();
|
|
|
|
|
statusBar()->show();
|
|
|
|
|
statusBar()->setSizeGripEnabled(true);
|
|
|
|
|
|
|
|
|
|
setAutoSaveSettings(/*groupName=*/TQString::fromLatin1("MainWindow"),true);
|
|
|
|
|
|
|
|
|
|
m_actShowStatusbar->setChecked( statusBar()->isShown() );
|
|
|
|
|
connect( m_baskets, TQT_SIGNAL(setWindowCaption(const TQString &)), this, TQT_SLOT(setCaption(const TQString &)));
|
|
|
|
|
|
|
|
|
|
// InlineEditors::instance()->richTextToolBar();
|
|
|
|
|
setStandardToolBarMenuEnabled(true);
|
|
|
|
|
|
|
|
|
|
createGUI("basketui.rc");
|
|
|
|
|
applyMainWindowSettings(TDEGlobal::config(), autoSaveGroup());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
|
|
{
|
|
|
|
|
saveMainWindowSettings(TDEGlobal::config(), autoSaveGroup());
|
|
|
|
|
delete m_settings;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::setupActions()
|
|
|
|
|
{
|
|
|
|
|
actQuit = KStdAction::quit( TQT_TQOBJECT(this), TQT_SLOT(quit()), actionCollection() );
|
|
|
|
|
new TDEAction(i18n("Minimize"), "", 0,
|
|
|
|
|
TQT_TQOBJECT(this), TQT_SLOT(minimizeRestore()), actionCollection(), "minimizeRestore" );
|
|
|
|
|
/** Settings : ************************************************************/
|
|
|
|
|
// m_actShowToolbar = KStdAction::showToolbar( TQT_TQOBJECT(this), TQT_SLOT(toggleToolBar()), actionCollection());
|
|
|
|
|
m_actShowStatusbar = KStdAction::showStatusbar( TQT_TQOBJECT(this), TQT_SLOT(toggleStatusBar()), actionCollection());
|
|
|
|
|
|
|
|
|
|
// m_actShowToolbar->setCheckedState( KGuiItem(i18n("Hide &Toolbar")) );
|
|
|
|
|
|
|
|
|
|
(void) KStdAction::keyBindings( TQT_TQOBJECT(this), TQT_SLOT(showShortcutsSettingsDialog()), actionCollection() );
|
|
|
|
|
|
|
|
|
|
(void) KStdAction::configureToolbars(TQT_TQOBJECT(this), TQT_SLOT(configureToolbars()), actionCollection() );
|
|
|
|
|
|
|
|
|
|
//TDEAction *actCfgNotifs = KStdAction::configureNotifications(this, TQT_SLOT(configureNotifications()), actionCollection() );
|
|
|
|
|
//actCfgNotifs->setEnabled(false); // Not yet implemented !
|
|
|
|
|
|
|
|
|
|
actAppConfig = KStdAction::preferences( TQT_TQOBJECT(this), TQT_SLOT(showSettingsDialog()), actionCollection() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*void MainWindow::toggleToolBar()
|
|
|
|
|
{
|
|
|
|
|
if (toolBar()->isVisible())
|
|
|
|
|
toolBar()->hide();
|
|
|
|
|
else
|
|
|
|
|
toolBar()->show();
|
|
|
|
|
|
|
|
|
|
saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
void MainWindow::toggleStatusBar()
|
|
|
|
|
{
|
|
|
|
|
if (statusBar()->isVisible())
|
|
|
|
|
statusBar()->hide();
|
|
|
|
|
else
|
|
|
|
|
statusBar()->show();
|
|
|
|
|
|
|
|
|
|
saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::configureToolbars()
|
|
|
|
|
{
|
|
|
|
|
saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
|
|
|
|
|
KEditToolbar dlg(actionCollection());
|
|
|
|
|
connect( &dlg, TQT_SIGNAL(newToolbarConfig()), this, TQT_SLOT(slotNewToolbarConfig()) );
|
|
|
|
|
dlg.exec();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::configureNotifications()
|
|
|
|
|
{
|
|
|
|
|
// TODO
|
|
|
|
|
// KNotifyDialog *dialog = new KNotifyDialog(this, "KNotifyDialog", false);
|
|
|
|
|
// dialog->show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::slotNewToolbarConfig() // This is called when OK or Apply is clicked
|
|
|
|
|
{
|
|
|
|
|
// ...if you use any action list, use plugActionList on each here...
|
|
|
|
|
createGUI("basketui.rc"); // TODO: Reconnect tags menu aboutToShow() ??
|
|
|
|
|
if (!Global::bnpView->isPart())
|
|
|
|
|
Global::bnpView->connectTagsMenu(); // The Tags menu was created again!
|
|
|
|
|
plugActionList( TQString::fromLatin1("go_baskets_list"), actBasketsList);
|
|
|
|
|
applyMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::showSettingsDialog()
|
|
|
|
|
{
|
|
|
|
|
if(m_settings == 0)
|
|
|
|
|
m_settings = new KSettings::Dialog(TQT_TQWIDGET(kapp->activeWindow()));
|
|
|
|
|
if (Global::mainWindow()) {
|
|
|
|
|
m_settings->dialog()->showButton(KDialogBase::Help, false); // Not implemented!
|
|
|
|
|
m_settings->dialog()->showButton(KDialogBase::Default, false); // Not implemented!
|
|
|
|
|
m_settings->dialog()->exec();
|
|
|
|
|
} else
|
|
|
|
|
m_settings->show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::showShortcutsSettingsDialog()
|
|
|
|
|
{
|
|
|
|
|
KKeyDialog::configure(actionCollection(), "basketui.rc");
|
|
|
|
|
//.setCaption(..)
|
|
|
|
|
//actionCollection()->writeSettings();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::polish()
|
|
|
|
|
{
|
|
|
|
|
bool shouldSave = false;
|
|
|
|
|
|
|
|
|
|
// If position and size has never been set, set nice ones:
|
|
|
|
|
// - Set size to sizeHint()
|
|
|
|
|
// - Keep the window manager placing the window where it want and save this
|
|
|
|
|
if (Settings::mainWindowSize().isEmpty()) {
|
|
|
|
|
// std::cout << "Main Window Position: Initial Set in show()" << std::endl;
|
|
|
|
|
int defaultWidth = kapp->desktop()->width() * 5 / 6;
|
|
|
|
|
int defaultHeight = kapp->desktop()->height() * 5 / 6;
|
|
|
|
|
resize(defaultWidth, defaultHeight); // sizeHint() is bad (too small) and we want the user to have a good default area size
|
|
|
|
|
shouldSave = true;
|
|
|
|
|
} else {
|
|
|
|
|
// std::cout << "Main Window Position: Recall in show(x="
|
|
|
|
|
// << Settings::mainWindowPosition().x() << ", y=" << Settings::mainWindowPosition().y()
|
|
|
|
|
// << ", width=" << Settings::mainWindowSize().width() << ", height=" << Settings::mainWindowSize().height()
|
|
|
|
|
// << ")" << std::endl;
|
|
|
|
|
//move(Settings::mainWindowPosition());
|
|
|
|
|
//resize(Settings::mainWindowSize());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TDEMainWindow::polish();
|
|
|
|
|
|
|
|
|
|
if (shouldSave) {
|
|
|
|
|
// std::cout << "Main Window Position: Save size and position in show(x="
|
|
|
|
|
// << pos().x() << ", y=" << pos().y()
|
|
|
|
|
// << ", width=" << size().width() << ", height=" << size().height()
|
|
|
|
|
// << ")" << std::endl;
|
|
|
|
|
Settings::setMainWindowPosition(pos());
|
|
|
|
|
Settings::setMainWindowSize(size());
|
|
|
|
|
Settings::saveConfig();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::resizeEvent(TQResizeEvent *event)
|
|
|
|
|
{
|
|
|
|
|
// std::cout << "Main Window Position: Save size in resizeEvent(width=" << size().width() << ", height=" << size().height() << ") ; isMaximized="
|
|
|
|
|
// << (isMaximized() ? "true" : "false") << std::endl;
|
|
|
|
|
Settings::setMainWindowSize(size());
|
|
|
|
|
Settings::saveConfig();
|
|
|
|
|
|
|
|
|
|
// Added to make it work (previous lines do not work):
|
|
|
|
|
//saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
TDEMainWindow::resizeEvent(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::moveEvent(TQMoveEvent *event)
|
|
|
|
|
{
|
|
|
|
|
// std::cout << "Main Window Position: Save position in moveEvent(x=" << pos().x() << ", y=" << pos().y() << ")" << std::endl;
|
|
|
|
|
Settings::setMainWindowPosition(pos());
|
|
|
|
|
Settings::saveConfig();
|
|
|
|
|
|
|
|
|
|
// Added to make it work (previous lines do not work):
|
|
|
|
|
//saveMainWindowSettings( TDEGlobal::config(), autoSaveGroup() );
|
|
|
|
|
TDEMainWindow::moveEvent(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MainWindow::queryExit()
|
|
|
|
|
{
|
|
|
|
|
hide();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::quit()
|
|
|
|
|
{
|
|
|
|
|
m_quit = true;
|
|
|
|
|
close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MainWindow::queryClose()
|
|
|
|
|
{
|
|
|
|
|
/* if (m_shuttingDown) // Set in askForQuit(): we don't have to ask again
|
|
|
|
|
return true;*/
|
|
|
|
|
|
|
|
|
|
if (kapp->sessionSaving()) {
|
|
|
|
|
Settings::setStartDocked(false); // If queryClose() is called it's because the window is shown
|
|
|
|
|
Settings::saveConfig();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Settings::useSystray() && !m_quit) {
|
|
|
|
|
Global::systemTray->displayCloseMessage(i18n("Basket"));
|
|
|
|
|
hide();
|
|
|
|
|
return false;
|
|
|
|
|
} else
|
|
|
|
|
return askForQuit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool MainWindow::askForQuit()
|
|
|
|
|
{
|
|
|
|
|
TQString message = i18n("<p>Do you really want to quit %1?</p>").arg(kapp->aboutData()->programName());
|
|
|
|
|
if (Settings::useSystray())
|
|
|
|
|
message += i18n("<p>Notice that you do not have to quit the application before ending your TDE session. "
|
|
|
|
|
"If you end your session while the application is still running, the application will be reloaded the next time you log in.</p>");
|
|
|
|
|
|
|
|
|
|
int really = KMessageBox::warningContinueCancel( this, message, i18n("Quit Confirm"),
|
|
|
|
|
KStdGuiItem::quit(), "confirmQuitAsking" );
|
|
|
|
|
|
|
|
|
|
if (really == KMessageBox::Cancel)
|
|
|
|
|
{
|
|
|
|
|
m_quit = false;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::minimizeRestore()
|
|
|
|
|
{
|
|
|
|
|
if(isVisible())
|
|
|
|
|
hide();
|
|
|
|
|
else
|
|
|
|
|
show();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::changeActive()
|
|
|
|
|
{
|
|
|
|
|
#if KDE_IS_VERSION( 3, 2, 90 ) // KDE 3.3.x
|
|
|
|
|
kapp->updateUserTimestamp(); // If "activate on mouse hovering systray", or "on drag throught systray"
|
|
|
|
|
Global::systemTray->toggleActive();
|
|
|
|
|
#else
|
|
|
|
|
setActive( ! isActiveWindow() );
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#include "mainwindow.moc"
|