summaryrefslogtreecommitdiffstats
path: root/src/dialogs/recipeviewdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dialogs/recipeviewdialog.cpp')
-rw-r--r--src/dialogs/recipeviewdialog.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/dialogs/recipeviewdialog.cpp b/src/dialogs/recipeviewdialog.cpp
new file mode 100644
index 0000000..133aece
--- /dev/null
+++ b/src/dialogs/recipeviewdialog.cpp
@@ -0,0 +1,167 @@
+/***************************************************************************
+* Copyright (C) 2003 by *
+* Unai Garro ([email protected]) *
+* Cyril Bosselut ([email protected]) *
+* Jason Kivlighn ([email protected]) *
+* *
+* 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. *
+***************************************************************************/
+
+#include "recipeviewdialog.h"
+
+#include <tqlayout.h>
+#include <tqstyle.h>
+#include <tqfile.h>
+
+#include <tdeapplication.h>
+#include <kcursor.h>
+#include <kdebug.h>
+#include <tdehtmlview.h>
+#include <tdehtml_part.h>
+#include <tdelocale.h>
+#include <tdemainwindow.h>
+#include <kprogress.h>
+#include <kstandarddirs.h>
+#include <kstatusbar.h>
+#include <tdeconfig.h>
+#include <tdeglobal.h>
+
+#include "datablocks/mixednumber.h"
+#include "backends/recipedb.h"
+#include "exporters/htmlexporter.h"
+#include "recipeprintpreview.h"
+
+RecipeViewDialog::RecipeViewDialog( TQWidget *parent, RecipeDB *db, int recipeID ) : TQVBox( parent ),
+ database(db)
+{
+ // Initialize UI Elements
+ recipeView = new TDEHTMLPart( this );
+
+ connect( database, TQ_SIGNAL(recipeRemoved(int)), TQ_SLOT(recipeRemoved(int)) );
+
+ tmp_filename = locateLocal( "tmp", "krecipes_recipe_view" );
+
+ //----------Load the recipe --------
+ if ( recipeID != -1 )
+ loadRecipe( recipeID );
+}
+
+RecipeViewDialog::~RecipeViewDialog()
+{
+ if ( recipe_loaded )
+ removeOldFiles();
+}
+
+bool RecipeViewDialog::loadRecipe( int recipeID )
+{
+ TQValueList<int> ids;
+ ids.append( recipeID );
+ return loadRecipes( ids );
+}
+
+bool RecipeViewDialog::loadRecipes( const TQValueList<int> &ids, const TQString &layoutConfig )
+{
+ TDEApplication::setOverrideCursor( KCursor::waitCursor() );
+
+ // Remove any files created by the last recipe loaded
+ removeOldFiles();
+
+ ids_loaded = ids; //need to save these ids in order to delete the html files later...make sure this comes after the call to removeOldFiles()
+ recipe_loaded = ( ids.count() > 0 && ids[ 0 ] >= 0 );
+
+ bool success = showRecipes( ids, layoutConfig );
+
+ TDEApplication::restoreOverrideCursor();
+ return success;
+}
+
+bool RecipeViewDialog::showRecipes( const TQValueList<int> &ids, const TQString &layoutConfig )
+{
+ KProgressDialog * progress_dialog = 0;
+
+ if ( ids.count() > 1 ) //we don't want a progress bar coming up when there is only one recipe... it may show up during the splash screen
+ {
+ progress_dialog = new KProgressDialog( this, "open_progress_dialog", TQString::null, i18n( "Opening recipes, please wait..." ), true );
+ progress_dialog->resize( 240, 80 );
+ }
+
+ HTMLExporter html_generator( tmp_filename + ".html", "html" );
+ if ( layoutConfig != TQString::null ) {
+ TDEConfig *config = TDEGlobal::config();
+ config->setGroup( "Page Setup" );
+ TQString styleFile = config->readEntry( layoutConfig+"Layout", locate( "appdata", "layouts/Default.klo" ) );
+ if ( !styleFile.isEmpty() && TQFile::exists( styleFile ) )
+ html_generator.setStyle( styleFile );
+
+ TQString templateFile = config->readEntry( layoutConfig+"Template", locate( "appdata", "layouts/Default.template" ) );
+ if ( !templateFile.isEmpty() && TQFile::exists( templateFile ) )
+ html_generator.setTemplate( templateFile );
+ }
+
+ html_generator.exporter( ids, database, progress_dialog ); //writes the generated HTML to 'tmp_filename+".html"'
+ if ( progress_dialog && progress_dialog->wasCancelled() ) {
+ delete progress_dialog;
+ return false;
+ }
+
+ delete recipeView; // Temporary workaround
+ recipeView = new TDEHTMLPart( this ); // to avoid the problem of caching images of TDEHTMLPart
+
+ KURL url;
+ url.setPath( tmp_filename + ".html" );
+ recipeView->openURL( url );
+ recipeView->show();
+ kdDebug() << "Opening URL: " << url.htmlURL() << endl;
+
+ delete progress_dialog;
+ return true;
+}
+
+void RecipeViewDialog::print()
+{
+ if ( recipe_loaded ) {
+ RecipePrintPreview preview( this, database, ids_loaded );
+ preview.exec();
+ }
+}
+
+void RecipeViewDialog::printNoPreview( void )
+{
+ if ( recipe_loaded ) {
+ recipeView->view() ->print();
+ }
+}
+
+void RecipeViewDialog::reload( const TQString &layoutConfig )
+{
+ loadRecipes( ids_loaded, layoutConfig );
+}
+
+void RecipeViewDialog::removeOldFiles()
+{
+ if ( ids_loaded.count() > 0 ) {
+ RecipeList recipe_list;
+ database->loadRecipes( &recipe_list, RecipeDB::Title, ids_loaded );
+
+ TQValueList<int> recipe_ids;
+ for ( RecipeList::const_iterator it = recipe_list.begin(); it != recipe_list.end(); ++it )
+ recipe_ids << ( *it ).recipeID;
+
+ HTMLExporter::removeHTMLFiles( tmp_filename, recipe_ids );
+ }
+}
+
+void RecipeViewDialog::recipeRemoved( int id )
+{
+ //if the deleted recipe is loaded, clean the view up
+ if ( ids_loaded.find(id) != ids_loaded.end() ) {
+ Recipe recipe; database->loadRecipe( &recipe, RecipeDB::Title, id );
+ HTMLExporter::removeHTMLFiles( tmp_filename, recipe.recipeID );
+ ids_loaded.remove(id);
+ }
+}
+
+#include "recipeviewdialog.moc"