00001
00009 #include "implementation.h"
00010 #include <QtCore/QList>
00011 #include <QtGui/QApplication>
00012 #include <QtGui/QPushButton>
00013 #include <QtGui/QListWidget>
00014 #include <QtGui/QMenuBar>
00015 #include <QtGui/QMenu>
00016 #include <QtGui/QVBoxLayout>
00017 #include <QtGui/QHBoxLayout>
00018 #include <QtGui/QFileDialog>
00019 #include <QtGui/QGroupBox>
00020 #include <QtGui/QStatusBar>
00021 #include <QtGui/QMessageBox>
00022 #include <cstdlib>
00023 #include <cstring>
00024
00025 namespace Dedupe
00026 {
00027 namespace GUI
00028 {
00029 QtMain::QtMain( int argc, char *argv[] )
00030 : Main( argc, argv ),
00031 RefreshLeft( new QPushButton() ),
00032 RefreshRight( new QPushButton() ),
00033 Track( new QPushButton() ),
00034 Untrack( new QPushButton() ),
00035 RemoveKeepFlag( new QPushButton() ),
00036 TrackedFiles( new QListWidget() ),
00037 FilesToKeep( new QListWidget() ),
00038 TrackedFilesBox( new QGroupBox() ),
00039 FilesToKeepBox( new QGroupBox() ),
00040 Tabs( new QTabWidget() ),
00041 MenuBar( NULL )
00042 {
00043 QHBoxLayout *hLayout = new QHBoxLayout();
00044
00045 QWidget *leftContainer = new QWidget();
00046 QHBoxLayout *buttonLayout = new QHBoxLayout();
00047 buttonLayout->addStretch();
00048 buttonLayout->addWidget( RefreshLeft );
00049 buttonLayout->addWidget( Track );
00050 buttonLayout->addWidget( Untrack );
00051 buttonLayout->addStretch();
00052 QVBoxLayout *sectionLayout = new QVBoxLayout();
00053 QHBoxLayout *tmpContainer = new QHBoxLayout();
00054 tmpContainer->addWidget( TrackedFiles );
00055 TrackedFilesBox->setLayout( tmpContainer );
00056 sectionLayout->addWidget( TrackedFilesBox );
00057 sectionLayout->addLayout( buttonLayout );
00058 leftContainer->setLayout( sectionLayout );
00059
00060 QWidget *rightContainer = new QWidget();
00061 buttonLayout = new QHBoxLayout();
00062 buttonLayout->addStretch();
00063 buttonLayout->addWidget( RefreshRight );
00064 buttonLayout->addWidget( RemoveKeepFlag );
00065 buttonLayout->addStretch();
00066 sectionLayout = new QVBoxLayout();
00067 tmpContainer = new QHBoxLayout();
00068 tmpContainer->addWidget( FilesToKeep );
00069 FilesToKeepBox->setLayout( tmpContainer );
00070 sectionLayout->addWidget( FilesToKeepBox );
00071 sectionLayout->addLayout( buttonLayout );
00072 rightContainer->setLayout( sectionLayout );
00073
00074 hLayout->addWidget( leftContainer );
00075 hLayout->addWidget( rightContainer );
00076
00077 QWidget *tabContainer = new QWidget();
00078 tabContainer->setLayout( hLayout );
00079 Tabs->addTab( tabContainer, tr( "Files" ) );
00080 Tabs->addTab( new QWidget(), tr( "Duplicates" ) );
00081 Tabs->addTab( new QWidget(), tr( "Watched Orders" ) );
00082
00083 TrackedFiles->setSelectionMode( QListWidget::MultiSelection );
00084 setStatusBar( new QStatusBar() );
00085 setCentralWidget( Tabs );
00086 updateWidgetLanguage();
00087 resize( 800, 600 );
00088
00089 connect( qApp, SIGNAL( aboutToQuit() ),
00090 this, SLOT( quitEvent() ) );
00091 connect( RefreshLeft, SIGNAL( clicked() ),
00092 this, SLOT( handleButtonClicked() ) );
00093 connect( RefreshRight, SIGNAL( clicked() ),
00094 this, SLOT( handleButtonClicked() ) );
00095 connect( Track, SIGNAL( clicked() ),
00096 this, SLOT( handleButtonClicked() ) );
00097 connect( Untrack, SIGNAL( clicked() ),
00098 this, SLOT( handleButtonClicked() ) );
00099 connect( RemoveKeepFlag, SIGNAL( clicked() ),
00100 this, SLOT( handleButtonClicked() ) );
00101 }
00102
00103 QtMain::~QtMain()
00104 {
00105 delete RefreshLeft;
00106 delete RefreshRight;
00107 delete Track;
00108 delete Untrack;
00109 delete RemoveKeepFlag;
00110 delete TrackedFiles;
00111 delete FilesToKeep;
00112 delete TrackedFilesBox;
00113 delete FilesToKeepBox;
00114 delete Tabs;
00115 delete MenuBar;
00116 }
00117
00118 void QtMain::TrackFile( const Dedupe::FileInfo & file )
00119 {
00120 TrackedFiles->addItem( file.GetPath().c_str() );
00121 }
00122
00123 void QtMain::UntrackFile( const Dedupe::FileInfo & file )
00124 {
00125 for( int i = 0; i < TrackedFiles->count(); i++ )
00126 {
00127 if( TrackedFiles->item( i )->text().toStdString() == file.GetPath() )
00128 delete TrackedFiles->takeItem( i );
00129 }
00130 }
00131
00132 void QtMain::ClearTrackedFiles()
00133 {
00134 TrackedFiles->clear();
00135 }
00136
00137 bool QtMain::IsRecursive()
00138 {
00139 return QMessageBox::question( this, tr( "Settings" ),
00140 tr( "Process directories recursively?" ),
00141 QMessageBox::Yes | QMessageBox::No )
00142 == QMessageBox::Yes;
00143 }
00144
00145 int QtMain::exec()
00146 {
00147 show();
00148 OnShow();
00149 return qApp->exec();
00150 }
00151
00152 std::vector<Dedupe::FileInfo> QtMain::GetFiles()
00153 {
00154 std::vector<Dedupe::FileInfo> files;
00155 QList<QString> fileNames
00156 = QFileDialog::getOpenFileNames( this, tr( "Choose files" ) );
00157 for( int i = 0; i < fileNames.size(); i++ )
00158 files.push_back( FileInfo( fileNames[i].toStdString() ) );
00159 return files;
00160 }
00161
00162 std::vector<Dedupe::FileInfo> QtMain::GetSelectedTrackedFiles()
00163 {
00164 std::vector<Dedupe::FileInfo> files;
00165 QList<QListWidgetItem *> selection
00166 = TrackedFiles->selectedItems();
00167 for( int i = 0; i < selection.size(); i++ )
00168 files.push_back( FileInfo( selection[i]->text().toStdString() ) );
00169 return files;
00170 }
00171
00172 void QtMain::closeEvent( QCloseEvent *event )
00173 {
00174 OnHide();
00175 QWidget::closeEvent( event );
00176 }
00177
00178 void QtMain::quitEvent()
00179 {
00180 OnQuit();
00181 }
00182
00183 void QtMain::updateWidgetLanguage()
00184 {
00185 RefreshLeft->setText( tr( "Refresh" ) );
00186 RefreshRight->setText( tr( "Refresh" ) );
00187 Track->setText( tr( "Track" ) );
00188 Untrack->setText( tr( "Untrack" ) );
00189 RemoveKeepFlag->setText( tr( "Remove keep-flag" ) );
00190 TrackedFilesBox->setTitle( tr( "Tracked files" ) );
00191 FilesToKeepBox->setTitle( tr( "Files to keep" ) );
00192 Tabs->setTabText( 0, tr( "Files" ) );
00193 Tabs->setTabText( 1, tr( "Duplicates" ) );
00194 Tabs->setTabText( 2, tr( "Watched Orders" ) );
00195 createMenuBar();
00196 }
00197
00198 void QtMain::createMenuBar()
00199 {
00200 QMenuBar *tmpMenu = new QMenuBar();
00201
00202 QMenu *fileMenu = new QMenu( tr( "File" ) );
00203 fileMenu->addAction( tr( "Quit" ), qApp, SLOT( quit() ) );
00204
00205 tmpMenu->addMenu( fileMenu );
00206 setMenuBar( tmpMenu );
00207 if( MenuBar != NULL )
00208 delete MenuBar;
00209 }
00210
00211 void QtMain::handleButtonClicked()
00212 {
00213 if( sender() == Track )
00214 OnTrack();
00215 else if( sender() == RefreshLeft )
00216 OnIndex();
00217 else if( sender() == Untrack )
00218 OnUntrack();
00219 }
00220
00221 void QtMain::changeEvent( QEvent *event )
00222 {
00223 if( event->type() == QEvent::LanguageChange )
00224 updateWidgetLanguage();
00225 else
00226 QWidget::changeEvent( event );
00227 }
00228
00229 }
00230 }
00231
00232 #include "implementation.moc"