Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

mainwindow.cpp

Go to the documentation of this file.
00001 /*
00002  * GPLv2 zecke@handhelds.org
00003  * No WArranty...
00004  */
00005 #include "mainwindow.h"
00006 #include "imageview.h"
00007 
00008 #include "iconview.h"
00009 #include "filesystem.h"
00010 #include "imageinfoui.h"
00011 #include "viewmodebutton.h"
00012 #include "basesetup.h"
00013 
00014 #include <iface/ifaceinfo.h>
00015 #include <iface/dirview.h>
00016 
00017 #include <opie2/odebug.h>
00018 #include <opie2/owidgetstack.h>
00019 #include <opie2/oapplicationfactory.h>
00020 #include <opie2/otabwidget.h>
00021 #include <opie2/okeyconfigwidget.h>
00022 #include <opie2/owait.h>
00023 #include <opie2/oapplication.h>
00024 #include <opie2/oresource.h>
00025 
00026 #include <qpe/config.h>
00027 #include <qpe/ir.h>
00028 #include <qpe/storage.h>
00029 #include <qpe/applnk.h>
00030 
00031 #include <qtoolbar.h>
00032 #include <qtoolbutton.h>
00033 #include <qlayout.h>
00034 #include <qdialog.h>
00035 #include <qmap.h>
00036 #include <qtimer.h>
00037 #include <qframe.h>
00038 #include <qmenubar.h>
00039 #include <qaction.h>
00040 #include <qspinbox.h>
00041 
00042 //OPIE_EXPORT_APP_V2( Opie::Core::OApplicationFactory<PMainWindow>,"Opie Eye" )
00043 OPIE_EXPORT_APP( Opie::Core::OApplicationFactory<PMainWindow>)
00044 
00045 PMainWindow::PMainWindow(QWidget* wid, const char* name, WFlags style)
00046     : QMainWindow( wid, name, style ), m_info( 0 ), m_disp( 0 )
00047 {
00048     setCaption( QObject::tr("Opie Eye" ) );
00049     m_cfg = new Opie::Core::OConfig("opie-eye");
00050     m_cfg->setGroup("main" );
00051     readConfig();
00052     m_setDocCalled = false;
00053     m_polishDone = false;
00054     m_SmallWindow = QApplication::desktop()->size().width()<330;
00055 
00056     m_storage = new StorageInfo();
00057     connect(m_storage, SIGNAL(disksChanged() ),
00058             this, SLOT( dirChanged() ) );
00059 
00060     m_stack = new Opie::Ui::OWidgetStack( this );
00061     setCentralWidget( m_stack );
00062 
00063     m_view = new PIconView( m_stack, m_cfg );
00064     m_stack->addWidget( m_view, IconView );
00065     m_stack->raiseWidget( IconView );
00066 
00067     connect(m_view, SIGNAL(sig_display(const QString&)),
00068             this, SLOT(slotDisplay(const QString&)));
00069     connect(m_view, SIGNAL(sig_showInfo(const QString&)),
00070             this, SLOT(slotShowInfo(const QString&)) );
00071     connect(this,SIGNAL(changeListMode(int)),m_view,SLOT(slotChangeMode(int)));
00072 
00073     listviewMenu = 0;
00074     /* setup menu and toolbar */
00075     setupActions();
00076     setupToolbar();
00077     setupMenu();
00078     m_aHideToolbar->setOn(m_cfg->readBoolEntry("showtoolbar",true));
00079     m_aAutoRotate->setEnabled(!m_aUnscaled->isOn());
00080     if (m_aForceSmall) {
00081         m_aForceSmall->setOn(m_cfg->readBoolEntry("dontshowseperate",true));
00082     }
00083     odebug << "mainwindow constructor done" << oendl;
00084 }
00085 
00086 PMainWindow::~PMainWindow() {
00087 }
00088 
00089 void PMainWindow::slotToggleZoomer()
00090 {
00091     m_aZoomer->setOn(!m_aZoomer->isOn());
00092 }
00093 
00094 void PMainWindow::slotZoomerToggled(bool how)
00095 {
00096     if (m_disp) {
00097         m_disp->setShowZoomer(how);
00098     }
00099     if (autoSave) {
00100         m_cfg->writeEntry("zoomeron",how);
00101     }
00102 }
00103 
00104 void PMainWindow::slotToggleAutorotate()
00105 {
00106     if (!m_aAutoRotate->isEnabled()) return;
00107     m_aAutoRotate->setOn(!m_aAutoRotate->isOn());
00108 }
00109 
00110 void PMainWindow::slotToggleAutoscale()
00111 {
00112     m_aUnscaled->setOn(!m_aUnscaled->isOn());
00113 }
00114 
00115 void PMainWindow::slotRotateToggled(bool how)
00116 {
00117    if (autoSave) {
00118         m_cfg->writeEntry("autorotate",how);
00119     }
00120     if (m_disp) {
00121         m_disp->setAutoScaleRotate(!m_aUnscaled->isOn(),how);
00122     }
00123 }
00124 
00125 void PMainWindow::slotScaleToggled(bool how)
00126 {
00127    if (autoSave) {
00128         m_cfg->writeEntry("unscaled",how);
00129     }
00130     odebug << "Unscaled: " << m_aUnscaled->isOn() << oendl;
00131     odebug << "How: " << how << oendl;
00132     if (how) {
00133         m_aAutoRotate->setOn(false);
00134     }
00135     if (m_disp) {
00136         m_disp->setAutoScaleRotate(!m_aUnscaled->isOn(),m_aAutoRotate->isOn());
00137     }
00138     m_aAutoRotate->setEnabled(!how);
00139     odebug << "Autorotate: " << m_aAutoRotate->isOn() << oendl;
00140 }
00141 
00142 void PMainWindow::slotConfig() {
00143    /*
00144     * have a tab with the possible views
00145     * a tab for globals image cache size.. scaled loading
00146     * and one tab for the  KeyConfigs
00147     */
00148     QDialog dlg(this, 0, true);
00149     dlg.setCaption( tr("Opie Eye - Config" ) );
00150 
00151     QHBoxLayout *lay = new QHBoxLayout(&dlg);
00152     Opie::Ui::OTabWidget *wid = new Opie::Ui::OTabWidget(&dlg );
00153     lay->addWidget( wid );
00154 
00155     BaseSetup*bSetup = new BaseSetup(m_cfg,wid);
00156     wid->addTab(bSetup,"SettingsIcon","Basics setup");
00157 
00158     ViewMap *vM = viewMap();
00159     ViewMap::Iterator _it = vM->begin();
00160     QMap<PDirView*, QWidget*> lst;
00161 
00162     for( ; _it != vM->end(); ++_it ) {
00163         PDirView *view = (_it.data())(*m_cfg);
00164         PInterfaceInfo *inf =  view->interfaceInfo();
00165         QWidget *_wid = inf->configWidget( *m_cfg );
00166         if (!_wid) continue;
00167         _wid->reparent(wid, QPoint() );
00168         lst.insert( view, _wid );
00169         wid->addTab( _wid, "fileopen", inf->name() );
00170     }
00171 
00172 /*
00173  * Add the KeyConfigWidget
00174  */
00175     Opie::Ui::OKeyConfigWidget* keyWid = new Opie::Ui::OKeyConfigWidget( wid, "key config" );
00176     keyWid->setChangeMode( Opie::Ui::OKeyConfigWidget::Queue );
00177     keyWid->insert( tr("Browser Keyboard Actions"), m_view->manager() );
00178     QWidget*w = m_stack->visibleWidget();
00179 
00180     bool reminfo = false;
00181     if ( !m_info ) {
00182         reminfo = true;
00183         initInfo();
00184         m_info->hide();
00185     }
00186     keyWid->insert( tr("Imageinfo Keyboard Actions"), m_info->manager() );
00187 
00188     bool remdisp = false;
00189     if ( !m_disp ) {
00190         remdisp = true;
00191         initDisp();
00192         m_disp->hide();
00193     }
00194     keyWid->insert( tr("Imageview Keyboard Actions"), m_disp->manager() );
00195 
00196     keyWid->load();
00197     wid->addTab( keyWid, QString::fromLatin1("AppsIcon" ), tr("Keyboard Configuration") );
00198     wid->setCurrentTab(0);
00199     bool act = ( QPEApplication::execDialog( &dlg ) == QDialog::Accepted );
00200 
00201 /*
00202  * clean up
00203  *apply changes
00204  */
00205 
00206     QMap<PDirView*, QWidget*>::Iterator it;
00207     for ( it = lst.begin(); it != lst.end(); ++it ) {
00208         if ( act )
00209             it.key()->interfaceInfo()->writeConfig(it.data(),  *m_cfg);
00210         delete it.key();
00211     }
00212 
00213 
00214     if ( act ) {
00215         keyWid->save();
00216         m_disp->manager()->save();
00217         m_info->manager()->save();
00218         m_view->manager()->save();
00219         bSetup->save_values();
00220         m_view->resetView();
00221         readConfig();
00222     }
00223     delete keyWid;
00224 
00225     m_stack->raiseWidget(w);
00226     if (remdisp) {
00227         m_disp->hide();
00228     }
00229     if (reminfo) {
00230         m_info->hide();
00231     }
00232     if (m_disp) {
00233         m_disp->setIntensity(m_Intensity,true);
00234     }
00235 }
00236 
00237 /*
00238  * create a new image info component
00239  * and detach the current one
00240  * we will make the other delete on exit
00241  */
00242 template<class T>
00243 void PMainWindow::initT( const char* name, T** ptr, int id) {
00244     if ( *ptr ) {
00245         (*ptr)->disconnect(this, SLOT(slotReturn()));
00246         (*ptr)->setDestructiveClose();
00247         m_stack->removeWidget( *ptr );
00248     }
00249     *ptr = new T(m_cfg, m_stack, name );
00250     m_stack->addWidget( *ptr, id );
00251 
00252     connect(*ptr, SIGNAL(sig_return()),
00253             this,SLOT(slotReturn()));
00254 
00255 }
00256 
00257 void PMainWindow::initInfo() {
00258     initT<imageinfo>( "Image Info", &m_info, ImageInfo );
00259     connect(m_info,SIGNAL(dispImage(const QString&)),this,SLOT(slotDisplay(const QString&)));
00260 }
00261 
00262 void PMainWindow::initDisp() {
00263     initT<ImageView>( "Image ScrollView", &m_disp, ImageDisplay );
00264     if (m_disp) {
00265 //        if (m_stack->mode() != Opie::Ui::OWidgetStack::SmallScreen) {
00266             //m_disp->setMinimumSize(QApplication::desktop()->size()/2);
00267 //        }
00268         m_disp->setMenuActions(m_hGroup,m_gPrevNext,m_gDisplayType,m_hBright);
00269         m_disp->setAutoScale(!m_aUnscaled->isOn());
00270         m_disp->setAutoRotate(m_aAutoRotate->isOn());
00271         m_disp->setShowZoomer(m_aZoomer->isOn());
00272         m_disp->setBackgroundColor(white);
00273         connect(m_disp,SIGNAL(dispImageInfo(const QString&)),this,SLOT(slotShowInfo(const QString&)));
00274         connect(m_disp,SIGNAL(dispNext()),m_view,SLOT(slotShowNext()));
00275         connect(m_disp,SIGNAL(dispPrev()),m_view,SLOT(slotShowPrev()));
00276         connect(m_disp,SIGNAL(toggleFullScreen()),this,SLOT(slotToggleFullScreen()));
00277         connect(m_disp,SIGNAL(hideMe()),this,SLOT(raiseIconView()));
00278         connect(m_disp,SIGNAL(toggleZoomer()),this,SLOT(slotToggleZoomer()));
00279         connect(m_disp,SIGNAL(toggleAutoscale()),this,SLOT(slotToggleAutoscale()));
00280         connect(m_disp,SIGNAL(toggleAutorotate()),this,SLOT(slotToggleAutorotate()));
00281         connect(m_view,SIGNAL(sig_startslide(int)),m_disp,SLOT(startSlide(int)));
00282         connect(m_IncBrightness,SIGNAL(activated()),m_disp,SLOT(slotIncBrightness()));
00283         connect(m_DecBrightness,SIGNAL(activated()),m_disp,SLOT(slotDecBrightness()));
00284         slotFullScreenToggled(m_aFullScreen->isOn());
00285     }
00286 }
00287 
00288 void PMainWindow::slotToggleFullScreen()
00289 {
00290     bool current = !m_aFullScreen->isOn();
00291     m_aFullScreen->setOn(current);
00292 }
00293 
00294 void PMainWindow::slotFullScreenButton(bool current)
00295 {
00296     if (autoSave) {
00297         m_cfg->writeEntry("fullscreen",current);
00298     }
00299     if (!m_disp) return;
00300     if (m_disp->isVisible()) {
00301         setupViewWindow(current, true);
00302     }
00303 }
00304 
00305 void PMainWindow::setupViewWindow(bool current, bool forceDisplay)
00306 {
00307     if (!m_disp) {
00308         return;
00309     }
00310     if (current) {
00311         m_disp->setBackgroundColor(black);
00312         m_disp->reparent(0, WStyle_Customize | WStyle_NoBorderEx, QPoint(0,0));
00313         m_disp->setVScrollBarMode(QScrollView::AlwaysOff);
00314         m_disp->setHScrollBarMode(QScrollView::AlwaysOff);
00315         m_disp->resize(qApp->desktop()->width(), qApp->desktop()->height());
00316         m_disp->setFullScreen(current,forceDisplay);
00317     } else {
00318         setUpdatesEnabled(false);
00319 #if 0
00320         if (m_stack->mode() != Opie::Ui::OWidgetStack::SmallScreen) {
00321 
00322             //m_disp->setMinimumSize(QApplication::desktop()->size()/2);
00323         } else {
00324             //m_disp->setMinimumSize(10,10);
00325         }
00326 #endif
00327         m_disp->setBackgroundColor(white);
00328         m_stack->addWidget(m_disp,ImageDisplay);
00329         m_disp->setVScrollBarMode(QScrollView::Auto);
00330         m_disp->setHScrollBarMode(QScrollView::Auto);
00331         if (m_stack->mode() != Opie::Ui::OWidgetStack::SmallScreen) {
00332             m_disp->setGeometry(30,30,QApplication::desktop()->width()-60,QApplication::desktop()->height()-60);
00333         }
00334         if (forceDisplay || m_disp->isVisible()) {
00335             m_stack->raiseWidget(m_disp);
00336             m_disp->setFocus();
00337         }
00338         setUpdatesEnabled(true);
00339     }
00340     m_disp->setFullScreen(current,forceDisplay);
00341 }
00342 
00343 void PMainWindow::slotFullScreenToggled(bool current)
00344 {
00345     setupViewWindow(current,true);
00346 }
00347 
00356 void PMainWindow::slotShowInfo( const QString& inf ) {
00357     if (m_disp && m_disp->fullScreen() && m_disp->isVisible()) {
00358         return;
00359     }
00360     if ( !m_info ) {
00361         initInfo();
00362     }
00363     m_info->setPath( inf );
00364     if (m_SmallWindow) {
00365         m_aNext->removeFrom(toolBar);
00366         m_aPrevious->removeFrom(toolBar);
00367         fsButton->hide();
00368     }
00369     m_aNext->setEnabled(false);
00370     m_aPrevious->setEnabled(false);
00371     m_aDirUp->setEnabled(false);
00372     m_aShowInfo->setEnabled(false);
00373     m_aViewfile->setEnabled(true);
00374     m_aStartSlide->setEnabled(false);
00375     m_stack->raiseWidget( ImageInfo );
00376 }
00377 
00378 void PMainWindow::slotDisplay( const QString& inf ) {
00379     bool nwindow = false;
00380     if ( !m_disp ) {
00381         nwindow = true;
00382         initDisp();
00383         m_disp->setIntensity(m_Intensity);
00384         m_setCurrentBrightness->setEnabled(true);
00385         m_hBright->setEnabled(true);
00386     }
00387     m_disp->setImage( inf );
00388     if (m_SmallWindow) {
00389         if (m_gPrevNext->isEnabled()==false) {
00390             m_gPrevNext->addTo(toolBar);
00391             fsButton->hide();
00392         }
00393     }
00394     m_gPrevNext->setEnabled(true);
00395     m_aDirUp->setEnabled(false);
00396     m_aShowInfo->setEnabled(true);
00397     m_aViewfile->setEnabled(false);
00398     m_aStartSlide->setEnabled(false);
00399 
00400     if (!nwindow && m_disp->fullScreen()!=m_aFullScreen->isOn()) {
00401         slotFullScreenToggled(m_aFullScreen->isOn());
00402     }
00403     if (m_disp->fullScreen()) {
00404         if (!m_disp->isVisible()) {
00405             m_disp->showFullScreen();
00406             qwsDisplay()->requestFocus( m_disp->winId(), TRUE);
00407         }
00408     } else {
00409         m_stack->raiseWidget( ImageDisplay );
00410     }
00411 }
00412 
00413 void PMainWindow::raiseIconView() {
00414     setUpdatesEnabled(false);
00415     if (m_SmallWindow) {
00416         m_gPrevNext->removeFrom(toolBar);
00417         fsButton->show();
00418     }
00419     m_gPrevNext->setEnabled(false);
00420     m_aDirUp->setEnabled(true);
00421     m_aShowInfo->setEnabled(true);
00422     m_aViewfile->setEnabled(true);
00423     m_aStartSlide->setEnabled(true);
00424 
00425     if (m_disp && m_disp->fullScreen() && m_disp->isVisible()) {
00426         m_disp->stopSlide();
00427         m_disp->hide();
00428     }
00429     m_stack->raiseWidget( IconView );
00430     setUpdatesEnabled(true);
00431     repaint();
00432 }
00433 
00434 void PMainWindow::slotReturn() {
00435     raiseIconView();
00436 }
00437 
00438 
00439 void PMainWindow::closeEvent( QCloseEvent* ev ) {
00440     /*
00441      * return from view
00442      * or properly quit
00443      */
00444     if (!m_setDocCalled) {
00445         if ( m_stack->visibleWidget() == m_info ||
00446              m_stack->visibleWidget() == m_disp ) {
00447             ev->ignore();
00448             raiseIconView();
00449             return;
00450         }
00451     }
00452     if (m_disp && m_disp->fullScreen()) {
00453         /* otherwise opie-eye crashes in bigscreen mode! */
00454         m_disp->reparent(0,QPoint(0,0));
00455         m_stack->addWidget(m_disp,ImageDisplay);
00456     }
00457     ev->accept();
00458     QTimer::singleShot(0, qApp, SLOT(closeAllWindows()));
00459 }
00460 
00461 void PMainWindow::setDocument( const QString& showImg )
00462 {
00463     QString file = showImg;
00464     DocLnk lnk(showImg);
00465     if (lnk.isValid() )
00466         file = lnk.file();
00467     slotDisplay( file );
00468 #if 0
00469     if (!m_polishDone) {
00470         QTimer::singleShot(0,this,SLOT(check_view_fullscreen()));
00471     }
00472 #endif
00473 }
00474 
00475 void PMainWindow::check_view_fullscreen()
00476 {
00477     if (!m_view) return;
00478     if (!m_view->hasFocus()&&m_aFullScreen->isOn()) {
00479         qwsDisplay()->requestFocus( m_disp->winId(), TRUE);
00480     }
00481 }
00482 
00483 void PMainWindow::slotSelectDir(int id)
00484 {
00485     emit changeDir( m_dev[fsMenu->text(id )] );
00486 }
00487 
00488 void PMainWindow::dirChanged()
00489 {
00490     fsMenu->clear();
00491     m_dev.clear();
00492 
00493     /* home dir, too */
00494     QString f = getenv( "HOME" );
00495     if (!f.isEmpty()) {
00496         m_dev.insert("Home directory",f);
00497         fsMenu->insertItem("Home directory");
00498     }
00499     const QList<FileSystem> &fs = m_storage->fileSystems();
00500     QListIterator<FileSystem> it(fs );
00501     for ( ; it.current(); ++it ) {
00502         const QString disk = (*it)->name();
00503         const QString path = (*it)->path();
00504         m_dev.insert( disk, path );
00505         fsMenu->insertItem( disk );
00506     }
00507 }
00508 
00509 void PMainWindow::showToolbar(bool how)
00510 {
00511     if (!how) toolBar->hide();
00512     else toolBar->show();
00513     if (autoSave) {
00514         m_cfg->writeEntry("showtoolbar",how);
00515     }
00516 }
00517 
00518 void PMainWindow::setupActions()
00519 {
00520     m_aDirUp = new QAction( tr( "Go dir up" ), Opie::Core::OResource::loadPixmap( "up", Opie::Core::OResource::SmallIcon ),
00521                             0, 0, this, 0, true );
00522     m_aDirUp->setToggleAction(false);
00523     connect(m_aDirUp,SIGNAL(activated()),m_view,SLOT(slotDirUp()));
00524 
00525     if ( Ir::supported() ) {
00526         m_aBeam = new QAction( tr( "Beam file" ), Opie::Core::OResource::loadPixmap( "beam", Opie::Core::OResource::SmallIcon ),
00527                                0, 0, this, 0, true );
00528         m_aBeam->setToggleAction(false);
00529         connect(m_aBeam,SIGNAL(activated()),m_view,SLOT(slotBeam()));
00530     } else {
00531         m_aBeam = 0;
00532     }
00533 
00534     m_aShowInfo = new QAction( tr( "Show imageinfo" ), Opie::Core::OResource::loadPixmap( "edit", Opie::Core::OResource::SmallIcon ),
00535                                0, 0, this, 0, true );
00536     m_aShowInfo->setToggleAction(false);
00537     connect(m_aShowInfo,SIGNAL(activated()),m_view,SLOT(slotImageInfo()));
00538 
00539     m_aTrash = new QAction( tr( "Delete file" ), Opie::Core::OResource::loadPixmap("trash", Opie::Core::OResource::SmallIcon),
00540                             0, 0, this, 0, true );
00541     m_aTrash->setToggleAction(false);
00542     connect(m_aTrash,SIGNAL(activated()),m_view,SLOT(slotTrash()));
00543 
00544     m_aViewfile = new QAction( tr( "Display image" ), Opie::Core::OResource::loadPixmap("mag", Opie::Core::OResource::SmallIcon),
00545                                0, 0, this, 0, true );
00546     m_aViewfile->setToggleAction(false);
00547     connect(m_aViewfile,SIGNAL(activated()),m_view,SLOT(slotShowImage()));
00548 
00549     m_aStartSlide = new QAction( tr( "Start slideshow" ), Opie::Core::OResource::loadPixmap("play", Opie::Core::OResource::SmallIcon),
00550                                  0, 0, this, 0, true );
00551     m_aStartSlide->setToggleAction(false);
00552     connect(m_aStartSlide,SIGNAL(activated()),m_view,SLOT(slotStartSlide()));
00553 
00554     m_aHideToolbar = new QAction( tr( "Show toolbar" ), Opie::Core::OResource::loadPixmap( "UtilsIcon",
00555                                   Opie::Core::OResource::SmallIcon ), 0, 0, this, 0, true );
00556     m_aHideToolbar->setOn (true);
00557     connect(m_aHideToolbar,SIGNAL(toggled(bool)),this,SLOT(showToolbar(bool)));
00558 
00559     m_aSetup = new QAction( tr( "Settings" ), Opie::Core::OResource::loadPixmap("SettingsIcon", Opie::Core::OResource::SmallIcon),
00560                             0, 0, this, 0, true );
00561     m_aSetup->setToggleAction(false);
00562     connect(m_aSetup,SIGNAL(activated()),this,SLOT(slotConfig()));
00563 
00564     m_gListViewMode = new QActionGroup(this,"Select listmode",true);
00565     connect(m_gListViewMode,SIGNAL(selected(QAction*)),this,SLOT(listviewselected(QAction*)));
00566 
00567     m_aDirLong = new QAction( tr( "Thumbnail and Imageinfo" ),Opie::Core::OResource::loadPixmap("opie-eye/opie-eye-thumb",
00568                               Opie::Core::OResource::SmallIcon), 0, 0, this, 0, true );
00569     m_aDirLong->setToggleAction(true);
00570     m_aDirShort = new QAction( tr( "Thumbnail and name" ),Opie::Core::OResource::loadPixmap("opie-eye/opie-eye-thumbonly",
00571                                Opie::Core::OResource::SmallIcon), 0, 0, this, 0, true );
00572     m_aDirShort->setToggleAction(true);
00573     m_aDirName = new QAction( tr( "Name only" ), Opie::Core::OResource::loadPixmap("opie-eye/opie-eye-textview",
00574                               Opie::Core::OResource::SmallIcon),0, 0, this, 0, true );
00575     m_aDirName->setToggleAction(true);
00576     int mode = m_cfg->readNumEntry("ListViewMode", 1);
00577     if (mode < 1 || mode>3) mode = 1;
00578     switch (mode) {
00579         case 3:
00580             m_aDirName->setOn(true);
00581             break;
00582         case 2:
00583             m_aDirShort->setOn(true);
00584             break;
00585         case 1:
00586         default:
00587             m_aDirLong->setOn(true);
00588     }
00589     m_gListViewMode->insert(m_aDirLong);
00590     m_gListViewMode->insert(m_aDirShort);
00591     m_gListViewMode->insert(m_aDirName);
00592 
00593     m_gPrevNext = new QActionGroup(this,"imageprevnext",false);
00594     m_aNext = new QAction( tr( "Next image" ),Opie::Core::OResource::loadPixmap("forward", Opie::Core::OResource::SmallIcon),
00595                            0, 0, this, 0, true );
00596     m_aNext->setToggleAction(false);
00597     connect(m_aNext,SIGNAL(activated()),m_view,SLOT(slotShowNext()));
00598     m_aPrevious = new QAction( tr( "Previous image" ),Opie::Core::OResource::loadPixmap("back", Opie::Core::OResource::SmallIcon),
00599                                0, 0, this, 0, true );
00600     m_aPrevious->setToggleAction(false);
00601     connect(m_aPrevious,SIGNAL(activated()),m_view,SLOT(slotShowPrev()));
00602     m_gPrevNext->insert(m_aPrevious);
00603     m_gPrevNext->insert(m_aNext);
00604 
00605     m_aFullScreen = new QAction( tr( "Show images fullscreen" ),
00606        Opie::Core::OResource::loadPixmap("fullscreen", Opie::Core::OResource::SmallIcon), 0, 0, this, 0, true );
00607     m_aFullScreen->setToggleAction(true);
00608     if (autoSave) {
00609         m_aFullScreen->setOn(m_cfg->readBoolEntry("fullscreen",false));
00610     } else {
00611         m_aFullScreen->setOn(false);
00612     }
00613     connect(m_aFullScreen,SIGNAL(toggled(bool)),this,SLOT(slotFullScreenButton(bool)));
00614 
00615     m_gDisplayType = new QActionGroup(this,"imagedisplaytype",false);
00616     m_aAutoRotate = new QAction( tr( "Auto rotate images" ),
00617                                  Opie::Core::OResource::loadPixmap( "rotate", Opie::Core::OResource::SmallIcon ),
00618                                  0, 0, this, 0, true );
00619     m_aAutoRotate->setToggleAction(true);
00620 
00621     if (m_stack->mode() == Opie::Ui::OWidgetStack::SmallScreen) {
00622         m_aAutoRotate->setOn(true);
00623     } else {
00624         m_aAutoRotate->setOn(false);
00625     }
00626     if (autoSave) {
00627         m_aAutoRotate->setOn(m_cfg->readBoolEntry("autorotate",m_aAutoRotate->isOn()));
00628     }
00629     connect(m_aAutoRotate,SIGNAL(toggled(bool)),this,SLOT(slotRotateToggled(bool)));
00630 
00631     m_aUnscaled = new QAction( tr( "Show images unscaled" ),
00632                                Opie::Core::OResource::loadPixmap( "1to1", Opie::Core::OResource::SmallIcon ),
00633                                0, 0, this, 0, true );
00634     m_aUnscaled->setToggleAction(true);
00635     connect(m_aUnscaled,SIGNAL(toggled(bool)),this,SLOT(slotScaleToggled(bool)));
00636     if (autoSave) {
00637         m_aUnscaled->setOn(m_cfg->readBoolEntry("unscaled",false));
00638     } else {
00639         m_aUnscaled->setOn(false);
00640     }
00641 
00642     m_aZoomer = new QAction( tr( "Show zoomer window when unscaled" ),
00643                              Opie::Core::OResource::loadPixmap( "mag", Opie::Core::OResource::SmallIcon ),
00644                              0, 0, this, 0, true );
00645     m_aZoomer->setToggleAction(true);
00646     if (autoSave) {
00647         m_aZoomer->setOn(m_cfg->readBoolEntry("zoomeron",true));
00648     } else {
00649         m_aZoomer->setOn (true);
00650     }
00651     connect(m_aZoomer,SIGNAL(toggled(bool)),this,SLOT(slotZoomerToggled(bool)));
00652     m_gDisplayType->insert(m_aAutoRotate);
00653     m_gDisplayType->insert(m_aUnscaled);
00654     m_gDisplayType->insert(m_aZoomer);
00655 
00656     m_hGroup = new QActionGroup(this,"actioncollection",false);
00657     m_hGroup->insert(m_aFullScreen);
00658 
00659     if (!m_SmallWindow) {
00660         m_aForceSmall = new QAction(tr("Dont show seperate windows"),
00661                                     Opie::Core::OResource::loadPixmap( "AppsIcon", Opie::Core::OResource::SmallIcon ),
00662                                     0, 0, this, 0, true);
00663         m_aForceSmall->setToggleAction(true);
00664         connect(m_aForceSmall,SIGNAL(toggled(bool)),this,SLOT(slotForceSmall(bool)));
00665     } else {
00666         m_aForceSmall = 0;
00667     }
00668     m_setCurrentBrightness = new QAction(tr("Display brightness..."), 0, 0, this, 0, false);
00669     connect(m_setCurrentBrightness,SIGNAL(activated()),this,SLOT(setupBrightness()));
00670     m_IncBrightness = new QAction(tr("Increase brightness by 5"),
00671                                   Opie::Core::OResource::loadPixmap( "up", Opie::Core::OResource::SmallIcon ),
00672                                   0, 0, this, 0, false);
00673     m_DecBrightness = new QAction(tr("Decrease brightness by 5"),
00674                                   Opie::Core::OResource::loadPixmap( "down", Opie::Core::OResource::SmallIcon ),
00675                                   0, 0, this, 0, false);
00676     m_hBright = new QActionGroup(this,"actioncollection",false),
00677     m_hBright->insert(m_setCurrentBrightness);
00678     m_hBright->insert(m_IncBrightness);
00679     m_hBright->insert(m_DecBrightness);
00680 }
00681 
00682 void PMainWindow::setupBrightness()
00683 {
00684     if (!m_disp) {
00685         return;
00686     }
00687     bool reshow=false;
00688     if (m_disp->isVisible()&&m_disp->fullScreen()) {
00689         m_disp->hide();
00690         reshow = true;
00691     }
00692     int lb = m_disp->Intensity();
00693     if (Valuebox(0,-100,100,lb,lb)) {
00694         m_disp->setIntensity(lb,true);
00695     }
00696     if (reshow) {
00697         m_disp->showFullScreen();
00698         qwsDisplay()->requestFocus( m_disp->winId(), TRUE);
00699     }
00700 }
00701 
00702 void PMainWindow::setupToolbar()
00703 {
00704     toolBar = new QToolBar( this );
00705     addToolBar(toolBar);
00706     toolBar->setHorizontalStretchable( true );
00707     setToolBarsMovable( false );
00708     m_aDirUp->addTo( toolBar );
00709 
00710     fsButton = new PFileSystem( toolBar );
00711     connect( fsButton, SIGNAL( changeDir( const QString& ) ),
00712              m_view, SLOT(slotChangeDir( const QString& ) ) );
00713     connect( this, SIGNAL( changeDir( const QString& ) ),
00714              m_view, SLOT(slotChangeDir( const QString& ) ) );
00715 
00716     if (m_aBeam) {
00717         m_aBeam->addTo( toolBar );
00718     }
00719     m_aShowInfo->addTo(toolBar);
00720     m_aTrash->addTo(toolBar);
00721 
00722     m_gDisplayType->addTo(toolBar);
00723 
00724     if (!m_SmallWindow) {
00725         m_gPrevNext->addTo(toolBar);
00726     } else {
00727         m_gPrevNext->setEnabled(false);
00728     }
00729 }
00730 
00731 void PMainWindow::setupMenu()
00732 {
00733     fileMenu = new QPopupMenu( menuBar() );
00734     menuBar()->insertItem( tr( "File" ), fileMenu );
00735     dispMenu = new QPopupMenu( menuBar() );
00736     menuBar()->insertItem( tr( "Show" ), dispMenu );
00737     settingsMenu = new QPopupMenu( menuBar() );
00738     menuBar()->insertItem( tr( "Settings" ), settingsMenu );
00739 
00740     m_aViewfile->addTo(fileMenu);
00741     m_aShowInfo->addTo(fileMenu);
00742     m_aStartSlide->addTo(fileMenu);
00743 
00744     fileMenu->insertSeparator();
00745     m_aDirUp->addTo( fileMenu );
00746 
00747     fsMenu = new QPopupMenu(fileMenu);
00748     fileMenu->insertItem(Opie::Core::OResource::loadPixmap( "pcmcia", Opie::Core::OResource::SmallIcon ),
00749                          tr("Select filesystem"),fsMenu);
00750     connect( fsMenu, SIGNAL( activated( int ) ), this, SLOT(slotSelectDir( int ) ) );
00751     dirChanged();
00752 
00753     if ( m_aBeam ) {
00754         fileMenu->insertSeparator();
00755         m_aBeam->addTo( fileMenu );
00756     }
00757     fileMenu->insertSeparator();
00758     m_aTrash->addTo(fileMenu);
00759 
00760     listviewMenu = new QPopupMenu(dispMenu);
00761     dispMenu->insertItem(Opie::Core::OResource::loadPixmap("opie-eye/opie-eye-thumb", Opie::Core::OResource::SmallIcon),
00762                          tr("Listview mode"),listviewMenu);
00763     m_gListViewMode->addTo(listviewMenu);
00764     dispMenu->insertSeparator();
00765     m_aFullScreen->addTo(dispMenu);
00766     m_gDisplayType->addTo(dispMenu);
00767     dispMenu->insertSeparator();
00768     m_gPrevNext->addTo(dispMenu);
00769     dispMenu->insertSeparator();
00770     m_hBright->addTo(dispMenu);
00771     m_hBright->setEnabled(false);
00772 
00773     if (m_aForceSmall) {
00774         dispMenu->insertSeparator();
00775         m_aForceSmall->addTo(dispMenu);
00776     }
00777 
00778     m_aSetup->addTo(settingsMenu);
00779     m_aHideToolbar->addTo(settingsMenu);
00780 }
00781 
00782 void PMainWindow::listviewselected(QAction*which)
00783 {
00784     if (!which || which->isOn()==false) return;
00785     int val = 1;
00786 
00787     if (which==m_aDirName) {
00788         val = 3;
00789     } else if (which==m_aDirShort) {
00790         val = 2;
00791     } else if (which==m_aDirLong) {
00792         val = 1;
00793     }
00794     emit changeListMode(val);
00795 }
00796 
00797 void PMainWindow::readConfig()
00798 {
00799     autoSave =m_cfg->readBoolEntry("savestatus",true);
00800     m_Intensity = m_cfg->readNumEntry("intensity",0);
00801 }
00802 
00803 void PMainWindow::polish()
00804 {
00805     if (m_disp) {
00806         odebug << "======================\n"
00807                << "Called via setdocument\n"
00808                << "======================" << oendl;
00809         m_setDocCalled = true;
00810         m_view->setDoccalled(true);
00811         m_disp->setCloseIfHide(true);
00812     } else {
00813         m_setDocCalled = false;
00814         m_view->setDoccalled(false);
00815     }
00816     m_polishDone = true;
00817     QMainWindow::polish();
00818     if (m_setDocCalled) {
00819         if (m_aFullScreen->isOn()) {
00820             QTimer::singleShot(0,this,SLOT(check_view_fullscreen()));
00821         } else if (m_stack->mode() != Opie::Ui::OWidgetStack::SmallScreen) {
00822         }
00823     }
00824 }
00825 
00826 void PMainWindow::slotForceSmall(bool how)
00827 {
00828     odebug << "Disable separate windows: " << how << oendl;
00829     if (m_stack) {
00830         if (how) {
00831             m_stack->forceMode(Opie::Ui::OWidgetStack::SmallScreen);
00832         } else {
00833             m_stack->forceMode(Opie::Ui::OWidgetStack::NoForce);
00834         }
00835     }
00836     if (autoSave) {
00837         m_cfg->writeEntry("dontshowseperate",how);
00838     }
00839 }
00840 
00841 bool PMainWindow::Valuebox(QWidget*parent,int min, int max, int current,int&store)
00842 {
00843     QDialog dlg(parent,"brightnessbox",true);
00844     QVBoxLayout * m_MainLayout;
00845     QGridLayout * m_IntensityLayout;
00846     QSpinBox * m_Intensity;
00847     QLabel * m_IntensityLabel;
00848 
00849     m_MainLayout = new QVBoxLayout( &dlg, 11, 6, "m_MainLayout");
00850     m_IntensityLayout = new QGridLayout( 0, 1, 1, 0, 6, "m_IntensityLayout");
00851     m_Intensity = new QSpinBox( &dlg, "m_Intensity" );
00852     m_Intensity->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed));
00853     m_Intensity->setButtonSymbols( QSpinBox::PlusMinus );
00854     m_Intensity->setMaxValue( max );
00855     m_Intensity->setMinValue(min);
00856     m_Intensity->setValue( current );
00857     m_IntensityLayout->addWidget( m_Intensity, 0, 1 );
00858     m_IntensityLabel = new QLabel( &dlg, "m_IntensityLabel" );
00859     m_IntensityLabel->setText(QObject::tr("Display brightness:"));
00860     m_IntensityLayout->addWidget(m_IntensityLabel, 0, 0 );
00861     m_MainLayout->addLayout(m_IntensityLayout);
00862     if (dlg.exec()) {
00863         store = m_Intensity->value();
00864         return true;
00865     }
00866     return false;
00867 }

Generated on Sat Nov 5 16:15:52 2005 for OPIE by  doxygen 1.4.2