summaryrefslogtreecommitdiffstats
path: root/kmymoney2/dialogs/kstartdlg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kmymoney2/dialogs/kstartdlg.cpp')
-rw-r--r--kmymoney2/dialogs/kstartdlg.cpp243
1 files changed, 243 insertions, 0 deletions
diff --git a/kmymoney2/dialogs/kstartdlg.cpp b/kmymoney2/dialogs/kstartdlg.cpp
new file mode 100644
index 0000000..d0af8eb
--- /dev/null
+++ b/kmymoney2/dialogs/kstartdlg.cpp
@@ -0,0 +1,243 @@
+/***************************************************************************
+ KStartDlg.cpp - description
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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. *
+ * *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qvbox.h>
+#include <qlayout.h>
+#include <qbuttongroup.h>
+#include <qabstractlayout.h>
+#include <qpixmap.h>
+#include <qtextview.h>
+#include <qlabel.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include "kdecompat.h"
+
+#if QT_VERSION > 300
+#include <kstandarddirs.h>
+#else
+#include <kstddirs.h>
+#endif
+
+#include <kiconloader.h>
+#include <kconfig.h>
+#include <kglobalsettings.h>
+#include <kfiledialog.h>
+#include <kurl.h>
+#include <kurlrequester.h>
+#include <kfile.h>
+#include <kio/netaccess.h>
+#include <kmessagebox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include "kstartdlg.h"
+#include "krecentfileitem.h"
+#include "../kmymoney2.h"
+
+#include <qtooltip.h>
+
+KStartDlg::KStartDlg(QWidget *parent, const char *name, bool modal) : KDialogBase(IconList,i18n("Start Dialog"),Help|Ok|Cancel,Ok, parent, name, modal, true)
+{
+ setPage_Template();
+ setPage_Documents();
+
+ isnewfile = false;
+ isopenfile = false;
+
+ readConfig();
+}
+
+KStartDlg::~KStartDlg()
+{
+}
+
+/** Set the font Page of the preferences dialog */
+void KStartDlg::setPage_Template()
+{
+ KIconLoader *ic = KGlobal::iconLoader();
+ templateMainFrame = addVBoxPage( i18n("Templates"), i18n("Select templates"), DesktopIcon("wizard"));
+ view_wizard = new KIconView( templateMainFrame, "view_options" );
+ (void)new QIconViewItem( view_wizard, i18n("New KMyMoney document"), ic->loadIcon("mime_empty.png", KIcon::Desktop, KIcon::SizeLarge)/*QPixmap( locate("icon","hicolor/48x48/mimetypes/mime_empty.png") )*/ );
+ connect(view_wizard, SIGNAL(executed(QIconViewItem *) ), this, SLOT(slotTemplateClicked(QIconViewItem *) ) );
+ connect(view_wizard, SIGNAL(selectionChanged(QIconViewItem*)),
+ this, SLOT(slotTemplateSelectionChanged(QIconViewItem*)));
+ connect(this, SIGNAL(aboutToShowPage(QWidget*)), this, SLOT(slotAboutToShowPage(QWidget*)));
+}
+
+/** Set the Misc options Page of the preferences dialog */
+void KStartDlg::setPage_Documents()
+{
+ recentMainFrame = addPage( i18n("Open"), i18n("Open a KMyMoney document"), DesktopIcon("fileopen"));
+ QVBoxLayout *mainLayout = new QVBoxLayout( recentMainFrame );
+
+ kurlrequest = new KURLRequester( recentMainFrame, "kurlrequest" );
+
+ //allow user to select either a .kmy file, or any generic file.
+ kurlrequest->fileDialog()->setFilter( i18n("%1|KMyMoney files (*.kmy)\n" "%2|All files (*.*)").arg("*.kmy").arg("*.*") );
+ kurlrequest->fileDialog()->setMode(KFile::File || KFile::ExistingOnly);
+ kurlrequest->fileDialog()->setURL(KURL(kmymoney2->readLastUsedDir()));//kurlrequest->fileDialog()->setURL(KURL(KGlobalSettings::documentPath()));
+ mainLayout->addWidget( kurlrequest );
+
+ QLabel *label1 = new QLabel( recentMainFrame, "label1" );
+ label1->setText( i18n("Recent Files") );
+ mainLayout->addWidget( label1 );
+ view_recent = new KIconView( recentMainFrame, "view_recent" );
+ connect( view_recent, SIGNAL( executed(QIconViewItem *) ), this, SLOT( slotRecentClicked(QIconViewItem *) ) );
+ mainLayout->addWidget( view_recent );
+ view_recent->setArrangement(KIconView::LeftToRight/*TopToBottom*/);
+ view_recent->setItemTextPos(KIconView::Bottom);
+
+ connect(view_recent, SIGNAL(selectionChanged(QIconViewItem*)),
+ this, SLOT(slotRecentSelectionChanged(QIconViewItem*)));
+}
+
+void KStartDlg::slotTemplateClicked(QIconViewItem *item)
+{
+ if(!item) return;
+
+ // If the item is the blank document turn isnewfile variable true, else is template or wizard
+ if( item->text() == i18n("New KMyMoney document") )
+ isnewfile = true;
+ else
+ templatename = item->text();
+
+ isopenfile = false;
+ // Close the window if the user pressed an icon
+ slotOk();
+}
+
+/** Read config window */
+void KStartDlg::readConfig()
+{
+ QString value;
+ unsigned int i = 1;
+
+ KConfig *config = KGlobal::config();
+ KIconLoader *il = KGlobal::iconLoader();
+
+ // read file list
+ do {
+ // for some reason, I had to setup the group to get reasonable results
+ // after program startup. If the wizard was opened the second time,
+ // it does not make a difference, if you call setGroup() outside of
+ // this loop. The first time it does make a difference!
+ config->setGroup("Recent Files");
+ value = config->readEntry( QString( "File%1" ).arg( i ), QString::null );
+ if( !value.isNull() && fileExists(value) )
+ {
+ QString file_name = value.mid(value.findRev('/')+1);
+ (void)new KRecentFileItem( value, view_recent, file_name, il->loadIcon("kmy", KIcon::Desktop, KIcon::SizeLarge));
+ }
+ i++;
+ } while( !value.isNull() );
+
+ config->setGroup("Start Dialog");
+ QSize *defaultSize = new QSize(400,300);
+ this->resize( config->readSizeEntry("Geometry", defaultSize ) );
+
+ // Restore the last page viewed
+ // default to the recent files page if no entry exists but files have been found
+ // otherwise, default to template page
+ if(view_recent->count() > 0)
+ showPage(config->readNumEntry("LastPage", this->pageIndex(recentMainFrame)));
+ else {
+ showPage(config->readNumEntry("LastPage", this->pageIndex(templateMainFrame)));
+ slotAboutToShowPage(templateMainFrame);
+ }
+}
+
+/** Write config window */
+void KStartDlg::writeConfig()
+{
+ KConfig *config = KGlobal::config();
+
+ config->setGroup("Start Dialog");
+ config->writeEntry("Geometry", this->size() );
+ config->writeEntry("LastPage", this->activePageIndex());
+ config->sync();
+}
+
+/** slot to recent view */
+void KStartDlg::slotRecentClicked(QIconViewItem *item)
+{
+ KRecentFileItem *kitem = (KRecentFileItem*)item;
+ if(!kitem) return;
+
+ isopenfile = true;
+ kurlrequest->setURL( kitem->fileURL() );
+ // Close the window if the user press an icon
+ slotOk();
+}
+
+/** No descriptions */
+void KStartDlg::slotOk()
+{
+ writeConfig();
+ this->accept();
+}
+
+bool KStartDlg::fileExists(KURL url)
+{
+#if KDE_IS_VERSION(3,2,0)
+ return KIO::NetAccess::exists(url, true, this);
+#else
+ return KIO::NetAccess::exists(url);
+#endif
+}
+
+void KStartDlg::slotTemplateSelectionChanged(QIconViewItem* item)
+{
+ if(!item) return;
+
+ // Clear the other selection
+ view_recent->clearSelection();
+
+ // If the item is the blank document turn isnewfile
+ // variable true, else is template or wizard
+ if( item->text() == i18n("Blank Document") )
+ isnewfile = true;
+ else
+ templatename = item->text();
+
+ isopenfile = false;
+}
+
+void KStartDlg::slotRecentSelectionChanged(QIconViewItem* item)
+{
+ KRecentFileItem *kitem = (KRecentFileItem*)item;
+ if(!kitem) return;
+
+ // Clear the other selection
+ view_wizard->clearSelection();
+
+ isnewfile = false;
+ isopenfile = true;
+ kurlrequest->setURL( kitem->fileURL() );
+}
+
+void KStartDlg::slotAboutToShowPage(QWidget* page)
+{
+ enableButtonOK(page == recentMainFrame);
+}
+
+#include "kstartdlg.moc"