00001
00002
00003
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
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
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
00145
00146
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
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
00203
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
00239
00240
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
00266
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
00323 } else {
00324
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
00442
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
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
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 }