Ticket #2595: visualisation_refactor_r12786.patch
File visualisation_refactor_r12786.patch, 31.5 KB (added by , 19 years ago) |
---|
-
mythmusic/mythmusic/playbackbox.cpp
85 85 showrating = gContext->GetNumSetting("MusicShowRatings", 0); 86 86 listAsShuffled = gContext->GetNumSetting("ListAsShuffled", 0); 87 87 cycle_visualizer = gContext->GetNumSetting("VisualCycleOnSongChange", 0); 88 random_visualizer = gContext->GetNumSetting("VisualRandomize", 0); 88 89 89 90 // Through the magic of themes, our "GUI" already exists we just need to 90 91 // wire up it … … 176 177 else 177 178 mainvisual->setGeometry(screenwidth + 10, screenheight + 10, 160, 160); 178 179 mainvisual->show(); 179 180 visual_mode = gContext->GetSetting("VisualMode");181 visual_mode.simplifyWhiteSpace();182 visual_mode.replace(QRegExp("\\s"), ",");183 180 181 fullscreen_blank = false; 182 visual_modes = QStringList::split(';', gContext->GetSetting("VisualMode")); 183 if (!visual_modes.count()) 184 visual_modes.push_front("Blank"); 185 current_visual = random_visualizer ? rand() % visual_modes.count() : 0; 186 184 187 QString visual_delay = gContext->GetSetting("VisualModeDelay"); 185 188 bool delayOK; 186 189 visual_mode_delay = visual_delay.toInt(&delayOK); … … 200 203 // 201 204 // Suspicion: in most modes, SDL is not happy if the 202 205 // window doesn't fully exist yet (????) 203 206 204 207 mainvisual->setVisual("Blank"); 205 208 206 209 // Ready to go. Let's update the foreground just to be safe. … … 389 392 if (action == "ESCAPE" || action == "4") 390 393 { 391 394 visualizer_status = 1; 392 QString visual_workaround = mainvisual->getCurrentVisual();393 394 // We may have gotten to full screen by pushing 7395 // (full screen blank). Or it may be blank because396 // the user likes "Blank". Figure out what to do ...397 398 if (visual_workaround == "Blank" && visual_mode != "Blank")399 visual_workaround = visual_mode;400 395 401 396 mainvisual->setVisual("Blank"); 402 397 if (visual_blackhole) … … 406 401 screenheight + 10, 407 402 160, 160); 408 403 setUpdatesEnabled(true); 409 mainvisual->setVisual(visual_ workaround);404 mainvisual->setVisual(visual_modes[current_visual]); 410 405 bannerDisable(); 411 406 412 407 if (!m_parent->IsExitingToMain()) … … 941 936 else 942 937 setContext(2); 943 938 updateForeground(); 944 mainvisual->setVisual(visual_mode );939 mainvisual->setVisual(visual_modes[current_visual]); 945 940 946 941 if (curMeta) 947 942 updateTrackInfo(curMeta); … … 1178 1173 1179 1174 void PlaybackBoxMusic::CycleVisualizer() 1180 1175 { 1181 QString new_visualizer;1182 1183 1176 // Only change the visualizer if there is more than 1 visualizer 1184 1177 // and the user currently has a visualizer active 1185 if ( mainvisual->numVisualizers() > 1 && visualizer_status > 0)1178 if (visual_modes.count() > 1 && visualizer_status > 0) 1186 1179 { 1187 QStringList allowed_modes = QStringList::split(",", visual_mode); 1188 if (allowed_modes[0].stripWhiteSpace().endsWith("*")) 1180 if (random_visualizer) 1189 1181 { 1190 //User has a favorite, but requested the next in the list1191 //Find the current position in the list1192 QString current_visual = mainvisual->getCurrentVisual();1193 unsigned int index = 0;1194 while ((index < allowed_modes.size()) &&1195 (!allowed_modes[index++].stripWhiteSpace().startsWith(current_visual))) { }1196 // index is 1 greater than the current visualizer's index1197 if (index >= allowed_modes.size()) {1198 index = 0;1199 }1200 new_visualizer = allowed_modes[index].stripWhiteSpace();1201 // Make sure the asterisk isn't passed through1202 if (new_visualizer.endsWith("*")) {1203 new_visualizer.truncate(new_visualizer.length() - 1);1204 }1205 }1206 else if (visual_mode != "Random")1207 {1208 1182 //Find a visual thats not like the previous visual 1183 unsigned int next_visualizer; 1209 1184 do 1210 { 1211 new_visualizer = allowed_modes[rand() % allowed_modes.size()]; 1212 } 1213 while (new_visualizer == mainvisual->getCurrentVisual() && 1214 allowed_modes.count() > 1); 1185 next_visualizer = rand() % visual_modes.count(); 1186 while (next_visualizer == current_visual); 1187 current_visual = next_visualizer; 1215 1188 } 1216 1189 else 1217 1190 { 1218 new_visualizer = visual_mode; 1191 //Change to the next selected visual 1192 current_visual = (current_visual + 1) % visual_modes.count(); 1219 1193 } 1220 1194 1221 1195 //Change to the new visualizer 1222 1196 visual_mode_timer->stop(); 1223 1197 mainvisual->setVisual("Blank"); 1224 mainvisual->setVisual( new_visualizer);1225 } 1226 else if ( mainvisual->numVisualizers() == 1 && visual_mode== "AlbumArt" &&1198 mainvisual->setVisual(visual_modes[current_visual]); 1199 } 1200 else if (visual_modes.count() == 1 && visual_modes[current_visual] == "AlbumArt" && 1227 1201 visualizer_status > 0) 1228 1202 { 1229 1203 // If only the AlbumArt visualization is selected, then go ahead and 1230 1204 // restart the visualization. This will give AlbumArt the opportunity 1231 1205 // to change images if there are multiple images available. 1232 new_visualizer = visual_mode;1233 1206 visual_mode_timer->stop(); 1234 1207 mainvisual->setVisual("Blank"); 1235 mainvisual->setVisual( new_visualizer);1208 mainvisual->setVisual(visual_modes[current_visual]); 1236 1209 } 1237 1210 1238 bannerEnable(tr("Visualization: ") + new_visualizer, 4000);1211 bannerEnable(tr("Visualization: ") + visual_modes[current_visual], 4000); 1239 1212 } 1240 1213 1241 1214 void PlaybackBoxMusic::setTrackOnLCD(Metadata *mdata) … … 1774 1747 info_text->SetText(info_string); 1775 1748 if (current_visualization_text) 1776 1749 { 1777 current_visualization_text->SetText( mainvisual->getCurrentVisualDesc());1750 current_visualization_text->SetText(visual_modes[current_visual]); 1778 1751 current_visualization_text->refresh(); 1779 1752 } 1780 1753 } … … 1945 1918 1946 1919 void PlaybackBoxMusic::toggleFullBlankVisualizer() 1947 1920 { 1948 if( mainvisual->getCurrentVisual() == "Blank" && 1949 visualizer_status == 2) 1921 if(fullscreen_blank) 1950 1922 { 1923 fullscreen_blank = false; 1924 1951 1925 // 1952 1926 // If we are already full screen and 1953 1927 // blank, go back to regular dialog … … 1958 1932 else 1959 1933 mainvisual->setGeometry(screenwidth + 10, screenheight + 10, 1960 1934 160, 160); 1961 mainvisual->setVisual(visual_mode );1935 mainvisual->setVisual(visual_modes[current_visual]); 1962 1936 bannerDisable(); 1963 1937 visualizer_status = 1; 1964 1938 if(visual_mode_delay > 0) … … 1967 1941 } 1968 1942 if (current_visualization_text) 1969 1943 { 1970 current_visualization_text->SetText( mainvisual->getCurrentVisualDesc());1944 current_visualization_text->SetText(visual_modes[current_visual]); 1971 1945 current_visualization_text->refresh(); 1972 1946 } 1973 1947 setUpdatesEnabled(true); … … 1978 1952 // Otherwise, go full screen blank 1979 1953 // 1980 1954 1955 fullscreen_blank = true; 1981 1956 mainvisual->setVisual("Blank"); 1982 1957 mainvisual->setGeometry(0, 0, screenwidth, screenheight); 1983 1958 visualizer_status = 2; -
mythmusic/mythmusic/synaesthesia.cpp
684 684 #endif 685 685 } 686 686 687 const QString &SynaesthesiaFactory::name(void) const 687 static class SynaesthesiaFactory : public VisFactory 688 688 { 689 static QString name("Synaesthesia"); 690 return name; 691 } 692 693 const QString &SynaesthesiaFactory::description(void) const 694 { 695 static QString name(QObject::tr("Synaesthesia")); 696 return name; 697 } 698 699 VisualBase *SynaesthesiaFactory::create(MainVisual *parent, long int winid) 700 { 701 (void)parent; 702 return new Synaesthesia(winid); 703 } 689 public: 690 const QString& name() const {static QString name("Synaesthesia"); return name;} 691 VisualBase* create(MainVisual*, long int winid) const {return new Synaesthesia(winid);} 692 } SynaesthesiaFactory; -
mythmusic/mythmusic/visualize.cpp
275 275 return true; 276 276 } 277 277 278 const QString &SpectrumFactory::name(void) const 278 static class SpectrumFactory : public VisFactory 279 279 { 280 static QString name("Spectrum"); 281 return name; 282 } 280 public: 281 const QString& name() const {static QString name("Spectrum"); return name;} 282 VisualBase* create(MainVisual*, long int) const {return new Spectrum;} 283 } SpectrumFactory; 283 284 284 const QString &SpectrumFactory::description(void) const285 {286 static QString name(QObject::tr("Spectrum"));287 return name;288 }289 285 290 VisualBase *SpectrumFactory::create(MainVisual *parent, long int winid)291 {292 (void)parent;293 (void)winid;294 return new Spectrum();295 }296 297 286 AlbumArt::AlbumArt(MainVisual *parent) 298 287 { 299 288 pParent = parent; … … 387 376 return true; 388 377 } 389 378 390 const QString &AlbumArtFactory::name(void) const 379 static class AlbumArtFactory: public VisFactory 391 380 { 392 static QString name("AlbumArt"); 393 return name; 394 } 381 public: 382 const QString& name() const {static QString name("AlbumArt"); return name;} 383 VisualBase* create(MainVisual* parent, long int) const {return new AlbumArt(parent);} 384 } AlbumArtFactory; 395 385 396 const QString &AlbumArtFactory::description(void) const397 {398 static QString name("Displays album art from .folder.png during playback");399 return name;400 }401 386 402 VisualBase *AlbumArtFactory::create(MainVisual *parent, long int winid)403 {404 (void)winid;405 return new AlbumArt(parent);406 }407 408 409 387 Blank::Blank() 410 388 : VisualBase(true) 411 389 { … … 435 413 return true; 436 414 } 437 415 438 const QString &BlankFactory::name(void) const 416 static class BlankFactory : public VisFactory 439 417 { 440 static QString name("Blank"); 441 return name; 442 } 418 public: 419 const QString& name() const {static QString name("Blank"); return name;} 420 VisualBase* create(MainVisual*, long int) const {return new Blank;} 421 } BlankFactory; 443 422 444 const QString &BlankFactory::description(void) const445 {446 static QString name(QObject::tr("Blank"));447 return name;448 }449 423 450 VisualBase *BlankFactory::create(MainVisual *parent, long int winid)451 {452 (void)parent;453 (void)winid;454 return new Blank();455 }456 457 424 Squares::Squares() 458 425 { 459 426 number_of_squares = 16; … … 533 500 return true; 534 501 } 535 502 536 const QString &SquaresFactory::name(void) const 503 static class SquaresFactory: public VisFactory 537 504 { 538 static QString name("Squares"); 539 return name; 540 } 505 public: 506 const QString& name() const {static QString name("Squares"); return name;} 507 VisualBase* create(MainVisual*, long int) const {return new Squares;} 508 } SquaresFactory; 541 509 542 const QString &SquaresFactory::description(void) const543 {544 static QString name("Square visualizer");545 return name;546 }547 510 548 VisualBase *SquaresFactory::create(MainVisual *parent, long int winid)549 {550 (void)winid;551 (void)parent;552 return new Squares();553 }554 555 511 #ifdef OPENGL_SUPPORT 556 512 557 513 // Need this for the Gears Object (below) … … 977 933 drawTheGears(); 978 934 } 979 935 980 const QString &GearsFactory::name(void) const 936 static class GearsFactory: public VisFactory 981 937 { 982 static QString name("Gears"); 983 return name; 984 } 938 public: 939 const QString& name() const {static QString name("Gears"); return name;} 940 VisualBase* create(MainVisual* parent, long int) const {return new Gears(parent);} 941 } GearsFactory; 985 942 986 const QString &GearsFactory::description(void) const987 {988 static QString name(QObject::tr("Gears"));989 return name;990 }991 992 VisualBase *GearsFactory::create(MainVisual *parent, long int winid)993 {994 (void)winid;995 return new Gears(parent);996 }997 998 943 #endif -
mythmusic/mythmusic/mainvisual.h
19 19 #include <qptrlist.h> 20 20 #include <qstringlist.h> 21 21 22 22 23 class Buffer; 23 24 class Output; 24 25 class VisualNode; 25 26 class LogScale; 26 27 class QTimer; 27 class VisFactory;28 28 class InfoWidget; 29 class MainVisual; 29 30 31 30 32 class VisualNode 31 33 { 32 34 public: … … 66 68 bool xscreensaverenable; 67 69 }; 68 70 71 class VisFactory 72 { 73 public: 74 VisFactory() {m_pNextVisFactory = g_pVisFactories; g_pVisFactories = this;} 75 76 const VisFactory* next() const {return m_pNextVisFactory;} 77 virtual const QString &name(void) const = 0; 78 virtual VisualBase* create(MainVisual *parent, long int winid) const = 0; 79 80 static const VisFactory* VisFactories() {return g_pVisFactories;} 81 82 protected: 83 static VisFactory* g_pVisFactories; 84 VisFactory* m_pNextVisFactory; 85 }; 86 69 87 // base class to handle things like frame rate... 70 88 class MainVisual : public QWidget, public MythTV::Visual 71 89 { … … 76 94 virtual ~MainVisual(); 77 95 78 96 VisualBase *visual() const { return vis; } 79 void setVis( VisualBase *newvis ); 80 void setVisual( const QString &visualname ); 97 void setVisual(const QString &name); 81 98 82 QString getCurrentVisual() const;83 QString getCurrentVisualDesc() const;84 int numVisualizers() const;85 86 99 void add(uchar *, unsigned long, unsigned long, int, int); 87 100 void prepare(); 88 101 … … 99 112 100 113 void addInformation(const QString &); 101 114 102 static void registerVisFactory(VisFactory *); 103 static VisualBase *createVis(const QString &name, 104 MainVisual *parent, long int winid); 115 static QStringList VisFactories(); 105 116 106 117 public slots: 107 118 void timeout(); … … 119 130 int fps; 120 131 121 132 QString current_visual_name; 122 QStringList allowed_modes;123 133 }; 124 134 125 135 class InfoWidget : public QWidget … … 136 146 QPixmap info_pixmap; 137 147 }; 138 148 139 class VisFactory140 {141 public:142 virtual const QString &name(void) const = 0;143 virtual const QString &description(void) const = 0;144 virtual VisualBase *create(MainVisual *parent, long int winid) = 0;145 virtual ~VisFactory() {}146 };147 148 149 class StereoScope : public VisualBase 149 150 { 150 151 public: … … 173 174 bool draw( QPainter *p, const QColor &back ); 174 175 }; 175 176 176 class StereoScopeFactory : public VisFactory177 {178 public:179 const QString &name(void) const;180 const QString &description(void) const;181 VisualBase *create(MainVisual *parent, long int winid);182 };183 177 184 class MonoScopeFactory : public VisFactory185 {186 public:187 const QString &name(void) const;188 const QString &description(void) const;189 VisualBase *create(MainVisual *parent, long int winid);190 };191 192 178 class LogScale 193 179 { 194 180 public: -
mythmusic/mythmusic/globalsettings.cpp
3 3 #include <unistd.h> 4 4 5 5 #include "globalsettings.h" 6 #include "mainvisual.h" 6 7 #include <qfile.h> 7 8 #include <qdialog.h> 8 9 #include <qcursor.h> … … 310 311 { 311 312 HostComboBox *gc = new HostComboBox("PlayMode"); 312 313 gc->setLabel(QObject::tr("Play mode")); 313 gc->addSelection(QObject::tr("Normal"), "Normal"); 314 gc->addSelection(QObject::tr("Random"), "Random"); 315 gc->addSelection(QObject::tr("Intelligent"), "Intelligent"); 314 gc->addSelection(QObject::tr("Normal"), "none"); 315 gc->addSelection(QObject::tr("Random"), "random"); 316 gc->addSelection(QObject::tr("Intelligent"), "intelligent"); 317 gc->addSelection(QObject::tr("Album"), "album"); 318 gc->setCurrent(0); 316 319 gc->setHelpText(QObject::tr("Starting shuffle mode for the player. Can be " 317 "either normal, random, or intelligent (random)."));320 "either normal, random, intelligent (random), or Album.")); 318 321 return gc; 319 322 }; 320 323 … … 334 337 gc->setLabel(QObject::tr("Change Visualizer on each song")); 335 338 gc->setValue(false); 336 339 gc->setHelpText(QObject::tr("Change the visualizer when the song " 337 "change ."));340 "changes.")); 338 341 return gc; 339 342 }; 340 343 344 static HostCheckBox *VisualRandomize() 345 { 346 HostCheckBox *gc = new HostCheckBox("VisualRandomize"); 347 gc->setLabel(QObject::tr("Randomize Visualizer order")); 348 gc->setValue(false); 349 gc->setHelpText(QObject::tr("On changing the visualizer pick " 350 "a new one at random.")); 351 return gc; 352 }; 353 341 354 static HostSpinBox *VisualScaleWidth() 342 355 { 343 356 HostSpinBox *gc = new HostSpinBox("VisualScaleWidth", 1, 2, 1); … … 362 375 return gc; 363 376 }; 364 377 365 static HostLi neEdit*VisualizationMode()378 static HostListBox *VisualizationMode() 366 379 { 367 HostLi neEdit *gc = new HostLineEdit("VisualMode");380 HostListBox *gc = new HostListBox("VisualMode", MythListBox::Multi); 368 381 gc->setLabel(QObject::tr("Visualizations")); 369 gc->setValue("Random"); 370 gc->setHelpText(QObject::tr("List of visualizations to use during playback. " 371 "Possible values are space-separated list of ") + "Random, " 372 "MonoScope, StereoScope, Spectrum, BumpScope, Goom, " 373 "Synaesthesia, AlbumArt, Gears, Squares " + QObject::tr("and") + 374 " Blank"); 382 383 QStringList visualizations = MainVisual::VisFactories(); 384 visualizations.sort(); 385 for (unsigned i = 0; i < visualizations.size(); i++) 386 gc->SelectSetting::addSelection(visualizations[i]); 387 388 gc->setHelpText(QObject::tr("List of visualizations possible to use during playback.")); 375 389 return gc; 376 390 }; 377 391 … … 548 562 playersettings2->setLabel(QObject::tr("Visualization Settings")); 549 563 playersettings2->addChild(VisualizationMode()); 550 564 playersettings2->addChild(VisualCycleOnSongChange()); 565 playersettings2->addChild(VisualRandomize()); 551 566 playersettings2->addChild(VisualModeDelay()); 552 567 playersettings2->addChild(VisualScaleWidth()); 553 568 playersettings2->addChild(VisualScaleHeight()); -
mythmusic/mythmusic/bumpscope.h
63 63 unsigned int icolor; 64 64 }; 65 65 66 class BumpScopeFactory : public VisFactory67 {68 public:69 const QString &name(void) const;70 const QString &description(void) const;71 VisualBase *create(MainVisual *parent, long int winid);72 };73 74 66 #endif 75 67 76 68 #endif // __mainvisual_h -
mythmusic/mythmusic/synaesthesia.h
75 75 #endif 76 76 }; 77 77 78 class SynaesthesiaFactory : public VisFactory 79 { 80 public: 81 const QString &name(void) const; 82 const QString &description(void) const; 83 VisualBase *create(MainVisual *parent, long int winid); 84 }; 85 86 87 #endif // __mainvisual_h 78 #endif // SYNAETHESIA -
mythmusic/mythmusic/bumpscope.cpp
581 581 return false; 582 582 } 583 583 584 const QString &BumpScopeFactory::name(void) const 584 static class BumpScopeFactory : public VisFactory 585 585 { 586 static QString name("BumpScope"); 587 return name; 588 } 586 public: 587 const QString& name() const {static QString name("BumpScope"); return name;} 588 VisualBase* create(MainVisual*, long int winid) const {return new BumpScope(winid);} 589 } BumpScopeFactory; 589 590 590 const QString &BumpScopeFactory::description(void) const591 {592 static QString name(QObject::tr("BumpScope"));593 return name;594 }595 596 VisualBase *BumpScopeFactory::create(MainVisual *parent, long int winid)597 {598 (void)parent;599 return new BumpScope(winid);600 }601 602 591 #endif -
mythmusic/mythmusic/playbackbox.h
158 158 159 159 MainVisual *mainvisual; 160 160 161 QString visual_mode; 161 bool fullscreen_blank; 162 QStringList visual_modes; 163 unsigned int current_visual; 162 164 int visual_mode_delay; 163 165 QTimer *visual_mode_timer; 164 166 QTimer *lcd_update_timer; … … 179 181 GenericTree *playlist_tree; 180 182 181 183 bool cycle_visualizer; 184 bool random_visualizer; 182 185 bool show_whole_tree; 183 186 bool keyboard_accelerators; 184 187 bool volume_control; -
mythmusic/mythmusic/mainvisual.cpp
7 7 #include "mainvisual.h" 8 8 #include "constants.h" 9 9 #include <mythtv/audiooutput.h> 10 #include "synaesthesia.h"11 #include "bumpscope.h"12 10 #include "visualize.h" 13 #include "goom/mythgoom.h"14 11 15 12 #include <qtimer.h> 16 13 #include <qpainter.h> … … 35 32 #include <iostream> 36 33 using namespace std; 37 34 38 static QPtrList<VisFactory> *visfactories = 0;35 VisFactory* VisFactory::g_pVisFactories = 0; 39 36 40 static void checkVisFactories(void)41 {42 if (!visfactories)43 {44 visfactories = new QPtrList<VisFactory>;45 46 MainVisual::registerVisFactory(new BlankFactory);47 48 MainVisual::registerVisFactory(new MonoScopeFactory);49 MainVisual::registerVisFactory(new StereoScopeFactory);50 MainVisual::registerVisFactory(new SynaesthesiaFactory);51 MainVisual::registerVisFactory(new SpectrumFactory);52 MainVisual::registerVisFactory(new AlbumArtFactory);53 MainVisual::registerVisFactory(new SquaresFactory);54 #ifdef OPENGL_SUPPORT55 MainVisual::registerVisFactory(new GearsFactory);56 #endif57 #ifdef SDL_SUPPORT58 MainVisual::registerVisFactory(new BumpScopeFactory);59 MainVisual::registerVisFactory(new GoomFactory);60 #endif61 }62 }63 64 37 VisualBase::VisualBase(bool screensaverenable) 65 38 : xscreensaverenable(screensaverenable) 66 39 { … … 134 107 nodes.clear(); 135 108 } 136 109 137 void MainVisual::setVisual( const QString &visualname)110 void MainVisual::setVisual(const QString &name) 138 111 { 139 if 112 if(vis) 140 113 { 141 114 delete vis; 142 vis = NULL;115 vis = 0; 143 116 } 144 117 145 VisualBase *newvis = 0; 146 147 allowed_modes = QStringList::split(",", visualname); 148 149 if (allowed_modes[0].stripWhiteSpace().endsWith("*")) 118 for (const VisFactory* pVisFactory = VisFactory::VisFactories(); pVisFactory; pVisFactory = pVisFactory->next()) 150 119 { 151 // User has a favorite 152 // The asterisk should only be passed in at startup, so start with 153 // the user's favorite 154 155 current_visual_name = allowed_modes[0].stripWhiteSpace(); 156 current_visual_name.truncate(current_visual_name.length() - 1); 120 if (pVisFactory->name() == name) 121 { 122 vis = pVisFactory->create(this, winId()); 123 vis->resize(size()); 124 fps = vis->getDesiredFPS(); 125 break; 126 } 157 127 } 158 else if (allowed_modes.contains("Random"))159 {160 //161 // Pick anything from compile time options162 //163 128 164 checkVisFactories();165 int numvis = visfactories->count() - 1;166 int i = 1 + (int)((double)rand() / (RAND_MAX + 1.0) * numvis);167 VisFactory *fact = visfactories->at(i);168 current_visual_name = fact->name();169 170 }171 else172 {173 //174 // Pick anything from run time options175 //176 int vis_mode_index = 0;177 if (allowed_modes.size() > 1)178 vis_mode_index = rand() % allowed_modes.size();179 180 current_visual_name = allowed_modes[vis_mode_index].stripWhiteSpace();181 }182 183 newvis = createVis(current_visual_name, this, winId());184 setVis( newvis );185 }186 187 void MainVisual::setVis( VisualBase *newvis )188 {189 if (vis)190 {191 delete vis;192 }193 194 vis = newvis;195 if ( vis )196 {197 vis->resize( size() );198 fps = vis->getDesiredFPS();199 }200 201 129 // force an update 202 130 timer->stop(); 203 timer->start( 1000 / fps);131 timer->start(1000 / fps); 204 132 } 205 133 206 int MainVisual::numVisualizers( void ) const207 {208 QString visualname = gContext->GetSetting("VisualMode");209 visualname.simplifyWhiteSpace();210 visualname.replace(QRegExp("\\s"), ",");211 QStringList visualizers = QStringList::split(",", visualname);212 213 if (visualizers.contains("Random"))214 return visfactories->count() - 1;215 else216 return visualizers.size();217 }218 219 QString MainVisual::getCurrentVisual(void) const220 {221 return current_visual_name;222 }223 224 QString MainVisual::getCurrentVisualDesc(void) const225 {226 /* XXX This should be changed to a real call to visual->description()227 * it works as long as ::name and ::desc uses the same string */228 return QObject::tr(current_visual_name);229 }230 231 134 void MainVisual::prepare() 232 135 { 233 136 nodes.setAutoDelete(TRUE); … … 363 266 364 267 void MainVisual::hideEvent(QHideEvent *e) 365 268 { 366 setVis(0); 269 delete vis; 270 vis = 0; 367 271 emit hidingVisualization(); 368 272 QWidget::hideEvent(e); 369 273 } 370 274 371 void MainVisual::registerVisFactory(VisFactory *vis)372 {373 visfactories->append(vis);374 }375 376 275 void MainVisual::addInformation(const QString &new_info) { 377 276 info_widget->addInformation(new_info); 378 277 } 379 278 380 VisualBase *MainVisual::createVis(const QString &name, MainVisual *parent, 381 long int winid)279 // static member function 280 QStringList MainVisual::VisFactories() 382 281 { 383 checkVisFactories(); 384 385 VisualBase *vis = 0; 386 387 VisFactory *fact = visfactories->first(); 388 while (fact) 389 { 390 if (fact->name() == name) 391 { 392 vis = fact->create(parent, winid); 393 break; 394 } 395 fact = visfactories->next(); 396 } 397 398 return vis; 282 QStringList visualizations; 283 for (const VisFactory* pVisFactory = VisFactory::VisFactories(); pVisFactory; pVisFactory = pVisFactory->next()) 284 visualizations.append(pVisFactory->name()); 285 return visualizations; 399 286 } 400 287 401 /*402 288 403 VisualBase *MainVisual::randomVis(MainVisual *parent, long int winid)404 {405 checkVisFactories();406 407 VisualBase *vis = 0;408 409 int numvis = visfactories->count() - 1;410 int i = 1 + (int)((double)rand() / (RAND_MAX + 1.0) * numvis);411 412 VisFactory *fact = visfactories->at(i);413 414 if (fact)415 {416 vis = fact->create(parent, winid);417 }418 419 return vis;420 }421 */422 423 289 InfoWidget::InfoWidget(QWidget *parent) 424 290 : QWidget( parent) 425 291 { … … 838 704 return true; 839 705 } 840 706 841 c onst QString &StereoScopeFactory::name(void) const707 class StereoScopeFactory : public VisFactory 842 708 { 843 static QString name("StereoScope"); 844 return name; 845 } 709 public: 710 const QString& name() const {static QString name("StereoScope"); return name;} 711 VisualBase* create(MainVisual*, long int) const {return new StereoScope;} 712 } StereoScopeFactory; 846 713 847 c onst QString &StereoScopeFactory::description(void) const714 class MonoScopeFactory : public VisFactory 848 715 { 849 static QString name(QObject::tr("StereoScope")); 850 return name; 851 } 716 public: 717 const QString& name() const {static QString name("MonoScope"); return name;} 718 VisualBase* create(MainVisual*, long int) const {return new MonoScope;} 719 } MonoScopeFactory; 852 720 853 VisualBase *StereoScopeFactory::create(MainVisual *parent, long int winid)854 {855 (void)parent;856 (void)winid;857 return new StereoScope();858 }859 721 860 const QString &MonoScopeFactory::name(void) const861 {862 static QString name("MonoScope");863 return name;864 }865 866 const QString &MonoScopeFactory::description(void) const867 {868 static QString name(QObject::tr("MonoScope"));869 return name;870 }871 872 VisualBase *MonoScopeFactory::create(MainVisual *parent, long int winid)873 {874 (void)parent;875 (void)winid;876 return new MonoScope();877 }878 879 722 LogScale::LogScale(int maxscale, int maxrange) 880 723 : indices(0), s(0), r(0) 881 724 { -
mythmusic/mythmusic/goom/mythgoom.cpp
174 174 return false; 175 175 } 176 176 177 const QString &GoomFactory::name(void) const 177 static class GoomFactory : public VisFactory 178 178 { 179 static QString name("Goom"); 180 return name; 181 } 179 public: 180 const QString& name() const {static QString name("Goom"); return name;} 181 VisualBase* create(MainVisual*, long int winid) const {return new Goom(winid);} 182 } GoomFactory; 182 183 183 const QString &GoomFactory::description(void) const184 {185 static QString name(QObject::tr("Goom"));186 return name;187 }188 189 VisualBase *GoomFactory::create(MainVisual *parent, long int winid)190 {191 (void)parent;192 return new Goom(winid);193 }194 195 184 #endif -
mythmusic/mythmusic/goom/mythgoom.h
28 28 int scalew, scaleh; 29 29 }; 30 30 31 class GoomFactory : public VisFactory32 {33 public:34 const QString &name(void) const;35 const QString &description(void) const;36 VisualBase *create(MainVisual *parent, long int winid);37 };38 39 31 #endif 40 32 41 33 #endif // __mainvisual_h -
mythmusic/mythmusic/visualize.h
76 76 #endif 77 77 }; 78 78 79 class SpectrumFactory : public VisFactory80 {81 public:82 const QString &name(void) const;83 const QString &description(void) const;84 VisualBase *create(MainVisual *parent, long int winid);85 };86 87 79 class AlbumArt : public VisualBase 88 80 { 89 81 public: … … 104 96 QImage image; 105 97 }; 106 98 107 class AlbumArtFactory : public VisFactory108 {109 public:110 const QString &name(void) const;111 const QString &description(void) const;112 VisualBase *create(MainVisual *parent, long int winid);113 };114 115 99 class Blank : public VisualBase 116 100 { 117 101 // This draws ... well ... nothing … … 127 111 QSize size; 128 112 }; 129 113 130 class BlankFactory : public VisFactory131 {132 public:133 const QString &name(void) const;134 const QString &description(void) const;135 VisualBase *create(MainVisual *parent, long int winid);136 };137 138 114 class Squares : public Spectrum 139 115 { 140 116 public: … … 152 128 int number_of_squares; 153 129 }; 154 130 155 class SquaresFactory : public VisFactory156 {157 public:158 const QString &name(void) const;159 const QString &description(void) const;160 VisualBase *create(MainVisual *parent, long int winid);161 };162 163 131 #ifdef OPENGL_SUPPORT 164 132 165 133 class Gears : public QGLWidget, public VisualBase … … 200 168 #endif 201 169 }; 202 170 203 class GearsFactory : public VisFactory204 {205 public:206 const QString &name(void) const;207 const QString &description(void) const;208 VisualBase *create(MainVisual *parent, long int winid);209 };210 211 212 171 #endif // opengl_support 213 172 214 173 #endif // __visualize_h