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.
kile/src/kile/kilestatsdlg.cpp

208 lines
8.8 KiB

/***************************************************************************
begin : Tuesday Nov 1 2005
copyright : (C) 2005 by Thomas Braun
email : braun@physik.fu-berlin.de
***************************************************************************/
/***************************************************************************
* *
* 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 "kilestatsdlg.h"
// A dialog that displays statistical information about the active project/file
KileStatsDlg::KileStatsDlg(KileProject *project, KileDocument::TextInfo* docinfo, TQWidget* parent, const char* name, const TQString &caption)
: KDialogBase(KDialogBase::Tabbed,0,parent,name,true,caption, KDialogBase::Help | KDialogBase::Ok | KDialogBase::User1 | KDialogBase::User2 , KDialogBase::Ok, false),
m_project(project),
m_docinfo(docinfo)
{
setButtonText(KDialogBase::User1,i18n("Copy"));
setButtonText(KDialogBase::User2,i18n("Copy as LaTeX"));
setHelp("statistics");
m_summarystats = new long[SIZE_STAT_ARRAY];
m_summarystats[0]=m_summarystats[1]=m_summarystats[2]=m_summarystats[3]=m_summarystats[4]=m_summarystats[5]=0;
const long* stats;
TQString tempName;
uint index=0;
KileWidgetStatistics* tempWidget;
KileWidgetStatistics* summary;
KileDocument::TextInfo* tempDocinfo;
m_hasSelection=false; // class variable, if the user has selected text,
summary = new KileWidgetStatistics( addPage( i18n("Summary") ) );
summary->m_commentAboutHelp->setText(i18n("For information about the accuracy see the Help."));
// we have in every case a summary tab
m_pagetowidget[index]=summary;
m_pagetoname[index]=i18n("Summary");
index++; // used with activePageIndex() to get the active widget and the tabname, arrays would be more efficient, but Maps are less dangerous
if(m_docinfo->getDoc()->hasSelection()) // the user should really have that doc as active in which the selection is
m_hasSelection=true;
if(!m_project) // the active doc doesn't belong to a project
{
setCaption(i18n("Statistics for %1").arg(m_docinfo->getDoc()->url().fileName()));
stats = m_docinfo->getStatistics();
fillWidget(stats,summary);
}
else // active doc belongs to a project
{
setCaption(i18n("Statistics for the Project %1").arg(m_project->name()));
KILE_DEBUG() << "Project file is " << project->baseURL() << endl;
KileProjectItemList *items = project->items();
if(m_hasSelection) // if the active doc has a selection
{
stats = m_docinfo->getStatistics();
fillWidget(stats,summary); // if yes we fill the summary widget and are finished
}
else
{
for(uint k = 0; k < items->count() ; k++)
{
if(items->at(k)->type() == KileProjectItem::ProjectFile) // ignore project files
continue;
tempDocinfo = items->at(k)->getInfo();
if(tempDocinfo && tempDocinfo->getDoc()) // closed items don't have a doc
{
tempName = tempDocinfo->getDoc()->url().fileName();
stats = tempDocinfo->getStatistics();
for(uint j = 0; j < SIZE_STAT_ARRAY; j++)
m_summarystats[j]+=stats[j];
tempWidget = new KileWidgetStatistics( addPage(tempName) );
KILE_DEBUG() << "TempName is " << tempName << endl;
m_pagetowidget[index]=tempWidget;
m_pagetoname[index]=tempName;
index++;
fillWidget(stats, tempWidget);
}
else
m_notAllFilesOpenWarning=true; // print warning
}
fillWidget(m_summarystats,summary);
if(m_notAllFilesOpenWarning)
summary->m_warning->setText(i18n("To get statistics for all project files, you have to open them all."));
#if TDE_VERSION >= TDE_MAKE_VERSION(3,3,0)
KILE_DEBUG() << "All keys in name " << m_pagetoname.keys() << " Nr. of keys " << m_pagetowidget.count() << endl;
KILE_DEBUG() << "All keys in widget " << m_pagetowidget.keys() << " Nr. of keys " << m_pagetowidget.count() << endl;
#endif
}
}
// setInitialSize( TQSize(550,560), true);
}
KileStatsDlg::~KileStatsDlg()
{
delete [] m_summarystats;
}
void KileStatsDlg::fillWidget(const long* stats, KileWidgetStatistics* widget)
{
// we don't have to write 0's in the number labels because this is the default value
if (!stats || !widget)
return;
if(m_hasSelection)
widget->m_warning->setText(i18n("WARNING: These are the statistics for the selected text only."));
widget->m_wordChar->setText(TQString::number(stats[0]));
widget->m_commandChar->setText(TQString::number(stats[1]));
widget->m_whitespaceChar->setText(TQString::number(stats[2]));
widget->m_totalChar->setText(TQString::number(stats[0]+stats[1]+stats[2]));
widget->m_wordString->setText(TQString::number(stats[3]));
widget->m_commandString->setText(TQString::number(stats[4]));
widget->m_environmentString->setText(TQString::number(stats[5]));
widget->m_totalString->setText(TQString::number(stats[3]+stats[4]+stats[5]));
widget->updateColumns();
}
void KileStatsDlg::slotUser1() // Copy
{
KILE_DEBUG() << "Copy Button was clicked" << endl;
KILE_DEBUG() << "Open tab is " << activePageIndex() << ' ' + ( m_pagetoname.contains(activePageIndex()) ? m_pagetoname[activePageIndex()] : "No such entry" )<< endl;
TQClipboard *clip = TDEApplication::clipboard();
TQString text;
convertText(&text,false);
clip->setText(text,TQClipboard::Selection); // the text will be available with the middle mouse button
}
void KileStatsDlg::slotUser2() // CopyAsLaTeX
{
KILE_DEBUG() << "CopyAsLateX Button was clicked" << endl;
KILE_DEBUG() << "Open tab is " << activePageIndex() << ' ' + ( m_pagetoname.contains(activePageIndex()) ? m_pagetoname[activePageIndex()] : "No such entry" )<< endl;
TQClipboard *clip = TDEApplication::clipboard();
TQString text;
convertText(&text,true);
clip->setText(text,TQClipboard::Selection);
}
void KileStatsDlg::convertText(TQString* text, bool forLaTeX) // the bool determines if we want plainText or LaTeXCode
{
KileWidgetStatistics* widget = m_pagetowidget[activePageIndex()];
TQString name = m_pagetoname[activePageIndex()];
TQString charGroupName = i18n("Characters"); // always ensure that these are the same than in kilestatswidget.ui, there is no way to get the label of a button group, so this ugly hack is needed
TQString stringGroupName = i18n("Strings");
if (forLaTeX)
text->append("\\begin{tabular}{ll}\n");
if(m_project && activePageIndex())
text->append(i18n("Statistics for project %1, file %2").arg(m_project->name()).arg(name));
else if(m_project)
text->append(i18n("Statistics for project %1").arg(m_project->name()));
else if(m_docinfo->getDoc()->url().isValid())
text->append(i18n("Statistics for %1").arg(m_docinfo->getDoc()->url().fileName()));
else
text->append(i18n("Statistics for Untitled"));
if (forLaTeX)
text->append(" & \\\\\\hline\n");
else
text->append("\n\n");
text->append(charGroupName + ( forLaTeX ? " & \\\\\n" : "\n") );
text->append(widget->m_wordCharText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_wordChar->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_commandCharText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_commandChar->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_whitespaceCharText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_whitespaceChar->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_totalCharText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_totalChar->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append( ( forLaTeX ? " & \\\\\n" : "\n") );
text->append(stringGroupName + ( forLaTeX ? " & \\\\\n" : "\n") );
text->append(widget->m_wordStringText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_wordString->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_commandStringText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_commandString->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_environmentStringText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_environmentString->text() + ( forLaTeX ? " \\\\\n" : "\n"));
text->append(widget->m_totalStringText->text() + ( forLaTeX ? " & " : "\t" ) + widget->m_totalString->text() + ( forLaTeX ? " \\\\\\hline\n": "\n"));
if (forLaTeX)
text->append("\\end{tabular}\n");
if(m_hasSelection) // we can't have both cases
text->append( ( forLaTeX? "\\par\\bigskip\n": "\n") + widget->m_warning->text() + '\n');
else if(m_notAllFilesOpenWarning)
text->append( ( forLaTeX? "\\par\\bigskip\n": "\n") + widget->m_warning->text() + '\n');
}