Subversion Repositories svn1-original

Rev

Rev 335 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "qmreportwindow.h"
#include <QVariant>
#include <QApplication>
#include <QTabWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QButtonGroup>
#include <QHBoxLayout>
#include <QLabel>
#include <QSpacerItem>
#include <QToolBar>
#include <QPrintDialog>
#include <QPrinter>
#include <QPrintPreviewDialog>
#include <QDesktopServices>

#include <QDirIterator>
#include <QtDebug>

#include    "consts.h"
#include    "structs.h"
#include    "proto.h"

QmReportWindow *reportWindow = NULL;

QmReportWindow::QmReportWindow(QWidget *parent) : QWidget(parent)
{
    currentWebView = NULL;
    currentWebViewPrinter = NULL;
    printPreviewDialog = NULL;
    reportWindow = this;

    // Allocate one printer for the entire widget
    // Setting made to the printer will then be used in all reports
    //
    printer = new QPrinter();
    printer->setPageMargins(10,10,10,10,QPrinter::Millimeter);

//    printPreviewDialog = new QPrintPreviewDialog(this);
//    printPreviewDialog->setModal ( true );
//    connect(printPreviewDialog,SIGNAL(paintRequested(QPrinter *)), this , SLOT(printPreview(QPrinter *)) );

    QVBoxLayout *verticalLayout;
    QLabel *label;
    QToolBar *tb;

    verticalLayout = new QVBoxLayout(this);
    verticalLayout->setContentsMargins(0, 0, 0, 0);

    tb = new QToolBar ( "Actions" );
    verticalLayout->addWidget(tb);
    pb_original = tb->addAction ( QIcon(":/webkit/inspector/Images/reloadButtonGlyph.png"),"Home", this, SLOT(home()));
    pb_back = tb->addAction ( QIcon(":/trolltech/styles/commonstyle/images/left-32.png"),"Back", this, SLOT(back()));
    pb_forward = tb->addAction ( QIcon(":/trolltech/styles/commonstyle/images/right-32.png"),"Forward", this, SLOT(forward()));

    tb->addSeparator();
    pb_openExternal = tb->addAction ( QIcon(":/trolltech/styles/commonstyle/images/viewdetailed-32.png" ),"Open in External viewer", this, SLOT(openExternal()));
    pb_explore = tb->addAction ( QIcon(":/trolltech/styles/commonstyle/images/standardbutton-open-32.png" ),"Open Location", this, SLOT(openLocation()));

    tb->addSeparator();
    pb_print = tb->addAction ( QIcon(":/trolltech/dialogs/qprintpreviewdialog/images/print-32.png" ),"Print", this, SLOT(print()));
    pb_size = new QDoubleSpinBox();
    pb_size->setSingleStep (0.05);
    pb_size->setValue(1.4);
    pb_size->setToolTip("Printer Scaling Size");
    tb->addWidget(pb_size);
    label = new QLabel("Path");
    tb->addWidget(label);
    tabPath = new QLineEdit();
    tabPath->setReadOnly(true);
    tb->addWidget(tabPath);

    tabWidget = new QTabWidget();
    tabWidget->setTabsClosable(true);
    tabWidget->setUsesScrollButtons(true);
    verticalLayout->addWidget(tabWidget);

    connect(tabWidget,SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int)));
    connect(tabWidget,SIGNAL(tabCloseRequested(int)), this, SLOT(deleteTab(int)));

    addReport(QString(filepath)+ "web/" + filebase + "_index.html", "Index");
    addReport(QString(filepath)+ "web/" + filebase + "_legindex.html", "Master Leg Index");

    //addReport(QString(filepath) + "brmr2011_l2_2.txt", "Starters Report 2");
    tabWidget->setCurrentIndex(0);

//    {
//        QDirIterator it(":", QDirIterator::Subdirectories);
//        while (it.hasNext())
//                qDebug() << it.next();
//    }

    //QWebSettings *gs =  QWebSettings::globalSettings ();
    //gs->setFontSize(QWebSettings::DefaultFixedFontSize,16);

}

void QmReportWindow::addReport(const QString &report, const QString &name)
{
    QmWebView *webView = NULL;
    bool adding = false;
    for( int index = 0; index < tabWidget->count(); index++)
    {
        if (tabWidget->tabText(index) == name)
        {
            webView = dynamic_cast<QmWebView *>(tabWidget->widget(index));
            if (webView)
            {
                //qDebug("Reuse Tab:%s", qPrintable(report));
                break;
            }
        }
    }

    if (webView == NULL)
    {
        webView = new QmWebView();
        adding = true;
    }

    webView->setUrl(report);
    if ( adding )
    {
        int tab = tabWidget->addTab(webView, name);
        tabChanged(tab);
        //qDebug("Adding(%d):%s", tab, qPrintable(report));
    }
}

QmWebView *QmReportWindow::newTab(void)
{
    QmWebView *webView = NULL;
    if (reportWindow)
    {
        webView = new QmWebView();
        int tab = reportWindow->tabWidget->addTab(webView, "New");
        webView->setTab(tab);
        reportWindow->tabChanged(tab);

    }
    return(webView);
}

void QmReportWindow::setTabName(const int tab, const QString &name)
{
    if (reportWindow)
    {
        reportWindow->tabWidget->setTabText(tab, name);
    }
}

void QmReportWindow::updateTabPath(void)
{
    if (reportWindow)
    {
        QString target = reportWindow->currentWebView->url().toString();
        target.remove(QRegExp("#.*$"));
        reportWindow->tabPath->setText(target);
    }
}

void QmReportWindow::deleteTab(int tab)
{
//    qDebug("Delete TAB:%d", tab);
    tabWidget->removeTab(tab);
}

void QmReportWindow::tabChanged(int tab)
{
    //qDebug("Update TAB:%d", tab);
    currentWebView = dynamic_cast<QmWebView *>(tabWidget->currentWidget());
    bool enable = (currentWebView != NULL);

    pb_original->setEnabled(enable);
    pb_back->setEnabled(enable);
    pb_forward->setEnabled(enable);
    pb_print->setEnabled(enable);
    pb_explore->setEnabled(enable);
    pb_openExternal->setEnabled(enable);

    if ( enable )
    {
        //tabPath->setText(currentWebView->homeUrl);
        //tabPath->setText(currentWebView->url().toString());
        QmReportWindow::updateTabPath();
    }
    else
    {
        tabPath->setText("");
    }
}

void QmReportWindow::back(void)
{
     if ( currentWebView )
     {
         currentWebView->back();
     }
}

void QmReportWindow::forward(void)
{
     if ( currentWebView )
     {
         currentWebView->forward();
     }
}

void QmReportWindow::home(void)
{
     if ( currentWebView )
     {
         currentWebView->home();
     }
}

void QmReportWindow::openLocation(void)
{
    if ( currentWebView )
    {
        QString target = tabPath->text();
        target.remove(QRegExp("/[^/]*$"));
        QDesktopServices::openUrl(target);
    }
}

void QmReportWindow::openExternal(void)
{
    if ( currentWebView )
    {
        QString target = tabPath->text();
        QDesktopServices::openUrl(target);
    }
}

void QmReportWindow::print(void)
{
     if ( currentWebView )
     {
         // Delete printer preview if we are previewing a different page
         //
         if ( printPreviewDialog /* && currentWebViewPrinter !=  currentWebView */)
         {
             delete printPreviewDialog;
             printPreviewDialog = NULL;
             currentWebViewPrinter = NULL;
         }

         // Allocate Printer Preview if we don't have one
         if (printPreviewDialog == NULL)
         {
             currentWebViewPrinter = currentWebView;
             printPreviewDialog = new QPrintPreviewDialog(printer, this);
             printPreviewDialog->setModal ( true );
             printPreviewDialog->setSizeGripEnabled(true);
             printer->setDocName(currentWebView->url().toString());
         }

//        printPreviewDialog->open(this,SLOT(fred()));
         //currentWebView->setStyleSheet("*{font-size:250%;}");
         //currentWebView->setZoomFactor(2.0);
         currentWebView->setTextSizeMultiplier ( pb_size->value() );
         qDebug("setTextSizeMultiplier:%f", pb_size->value());

         connect(printPreviewDialog,SIGNAL(paintRequested(QPrinter *)), this , SLOT(printPreview(QPrinter *)) );
         printPreviewDialog->exec();

         currentWebView->setTextSizeMultiplier ( 1.0 );

//         QPrintDialog printDialog(this);
//         if (printDialog.exec() == QDialog::Accepted) {
//             QPrinter * printer = printDialog.printer();
//             currentWebView->print(printer);
//              // print ...
//          }
     }
}

void QmReportWindow::printPreview(QPrinter * printer)
{
    qDebug("QmReportWindow::printPreview");
    currentWebView->print(printer);
}

QmReportWindow::~QmReportWindow()
{
}