Ticket #2595: visualisation_refactor_r12452.patch
File visualisation_refactor_r12452.patch, 31.3 KB (added by , 17 years ago) |
---|
-
mythmusic/mythmusic/playbackbox.cpp
86 86 showrating = gContext->GetNumSetting("MusicShowRatings", 0); 87 87 listAsShuffled = gContext->GetNumSetting("ListAsShuffled", 0); 88 88 cycle_visualizer = gContext->GetNumSetting("VisualCycleOnSongChange", 0); 89 random_visualizer = gContext->GetNumSetting("VisualRandomize", 0); 89 90 90 91 // Through the magic of themes, our "GUI" already exists we just need to 91 92 // wire up it … … 177 178 else 178 179 mainvisual->setGeometry(screenwidth + 10, screenheight + 10, 160, 160); 179 180 mainvisual->show(); 180 181 visual_mode = gContext->GetSetting("VisualMode");182 visual_mode.simplifyWhiteSpace();183 visual_mode.replace(QRegExp("\\s"), ",");184 181 182 fullscreen_blank = false; 183 visual_modes = QStringList::split(';', gContext->GetSetting("VisualMode")); 184 if (!visual_modes.count()) 185 visual_modes.push_front("Blank"); 186 current_visual = random_visualizer ? rand() % visual_modes.count() : 0; 187 185 188 QString visual_delay = gContext->GetSetting("VisualModeDelay"); 186 189 bool delayOK; 187 190 visual_mode_delay = visual_delay.toInt(&delayOK); … … 201 204 // 202 205 // Suspicion: in most modes, SDL is not happy if the 203 206 // window doesn't fully exist yet (????) 204 207 205 208 mainvisual->setVisual("Blank"); 206 209 207 210 // Ready to go. Let's update the foreground just to be safe. … … 390 393 if (action == "ESCAPE" || action == "4") 391 394 { 392 395 visualizer_status = 1; 393 QString visual_workaround = mainvisual->getCurrentVisual();394 395 // We may have gotten to full screen by pushing 7396 // (full screen blank). Or it may be blank because397 // the user likes "Blank". Figure out what to do ...398 399 if (visual_workaround == "Blank" && visual_mode != "Blank")400 visual_workaround = visual_mode;401 396 402 397 mainvisual->setVisual("Blank"); 403 398 if (visual_blackhole) … … 407 402 screenheight + 10, 408 403 160, 160); 409 404 setUpdatesEnabled(true); 410 mainvisual->setVisual(visual_ workaround);405 mainvisual->setVisual(visual_modes[current_visual]); 411 406 bannerDisable(); 412 407 413 408 if (!m_parent->IsExitingToMain()) … … 942 937 else 943 938 setContext(2); 944 939 updateForeground(); 945 mainvisual->setVisual(visual_mode );940 mainvisual->setVisual(visual_modes[current_visual]); 946 941 947 942 if (curMeta) 948 943 updateTrackInfo(curMeta); … … 1177 1172 1178 1173 void PlaybackBoxMusic::CycleVisualizer() 1179 1174 { 1180 QString new_visualizer;1181 1182 1175 // Only change the visualizer if there is more than 1 visualizer 1183 1176 // and the user currently has a visualizer active 1184 if ( mainvisual->numVisualizers() > 1 && visualizer_status > 0)1177 if (visual_modes.count() > 1 && visualizer_status > 0) 1185 1178 { 1186 QStringList allowed_modes = QStringList::split(",", visual_mode); 1187 if (allowed_modes[0].stripWhiteSpace().endsWith("*")) 1179 if (random_visualizer) 1188 1180 { 1189 //User has a favorite, but requested the next in the list1190 //Find the current position in the list1191 QString current_visual = mainvisual->getCurrentVisual();1192 unsigned int index = 0;1193 while ((index < allowed_modes.size()) &&1194 (!allowed_modes[index++].stripWhiteSpace().startsWith(current_visual))) { }1195 // index is 1 greater than the current visualizer's index1196 if (index >= allowed_modes.size()) {1197 index = 0;1198 }1199 new_visualizer = allowed_modes[index].stripWhiteSpace();1200 // Make sure the asterisk isn't passed through1201 if (new_visualizer.endsWith("*")) {1202 new_visualizer.truncate(new_visualizer.length() - 1);1203 }1204 }1205 else if (visual_mode != "Random")1206 {1207 1181 //Find a visual thats not like the previous visual 1182 unsigned int next_visualizer; 1208 1183 do 1209 { 1210 new_visualizer = allowed_modes[rand() % allowed_modes.size()]; 1211 } 1212 while (new_visualizer == mainvisual->getCurrentVisual() && 1213 allowed_modes.count() > 1); 1184 next_visualizer = rand() % visual_modes.count(); 1185 while (next_visualizer == current_visual); 1186 current_visual = next_visualizer; 1214 1187 } 1215 1188 else 1216 1189 { 1217 new_visualizer = visual_mode; 1190 //Change to the next selected visual 1191 current_visual = (current_visual + 1) % visual_modes.count(); 1218 1192 } 1219 1193 1220 1194 //Change to the new visualizer 1221 1195 visual_mode_timer->stop(); 1222 1196 mainvisual->setVisual("Blank"); 1223 mainvisual->setVisual( new_visualizer);1224 } 1225 else if ( mainvisual->numVisualizers() == 1 && visual_mode== "AlbumArt" &&1197 mainvisual->setVisual(visual_modes[current_visual]); 1198 } 1199 else if (visual_modes.count() == 1 && visual_modes[current_visual] == "AlbumArt" && 1226 1200 visualizer_status > 0) 1227 1201 { 1228 1202 // If only the AlbumArt visualization is selected, then go ahead and 1229 1203 // restart the visualization. This will give AlbumArt the opportunity 1230 1204 // to change images if there are multiple images available. 1231 new_visualizer = visual_mode;1232 1205 visual_mode_timer->stop(); 1233 1206 mainvisual->setVisual("Blank"); 1234 mainvisual->setVisual( new_visualizer);1207 mainvisual->setVisual(visual_modes[current_visual]); 1235 1208 } 1236 1209 } 1237 1210 … … 1757 1730 info_text->SetText(info_string); 1758 1731 if (current_visualization_text) 1759 1732 { 1760 current_visualization_text->SetText( mainvisual->getCurrentVisualDesc());1733 current_visualization_text->SetText(visual_modes[current_visual]); 1761 1734 current_visualization_text->refresh(); 1762 1735 } 1763 1736 } … … 1928 1901 1929 1902 void PlaybackBoxMusic::toggleFullBlankVisualizer() 1930 1903 { 1931 if( mainvisual->getCurrentVisual() == "Blank" && 1932 visualizer_status == 2) 1904 if(fullscreen_blank) 1933 1905 { 1906 fullscreen_blank = false; 1907 1934 1908 // 1935 1909 // If we are already full screen and 1936 1910 // blank, go back to regular dialog … … 1941 1915 else 1942 1916 mainvisual->setGeometry(screenwidth + 10, screenheight + 10, 1943 1917 160, 160); 1944 mainvisual->setVisual(visual_mode );1918 mainvisual->setVisual(visual_modes[current_visual]); 1945 1919 bannerDisable(); 1946 1920 visualizer_status = 1; 1947 1921 if(visual_mode_delay > 0) … … 1950 1924 } 1951 1925 if (current_visualization_text) 1952 1926 { 1953 current_visualization_text->SetText( mainvisual->getCurrentVisualDesc());1927 current_visualization_text->SetText(visual_modes[current_visual]); 1954 1928 current_visualization_text->refresh(); 1955 1929 } 1956 1930 setUpdatesEnabled(true); … … 1961 1935 // Otherwise, go full screen blank 1962 1936 // 1963 1937 1938 fullscreen_blank = true; 1964 1939 mainvisual->setVisual("Blank"); 1965 1940 mainvisual->setGeometry(0, 0, screenwidth, screenheight); 1966 1941 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; … … 385 374 return true; 386 375 } 387 376 388 const QString &AlbumArtFactory::name(void) const 377 static class AlbumArtFactory: public VisFactory 389 378 { 390 static QString name("AlbumArt"); 391 return name; 392 } 379 public: 380 const QString& name() const {static QString name("AlbumArt"); return name;} 381 VisualBase* create(MainVisual* parent, long int) const {return new AlbumArt(parent);} 382 } AlbumArtFactory; 393 383 394 const QString &AlbumArtFactory::description(void) const395 {396 static QString name("Displays album art from .folder.png during playback");397 return name;398 }399 384 400 VisualBase *AlbumArtFactory::create(MainVisual *parent, long int winid)401 {402 (void)winid;403 return new AlbumArt(parent);404 }405 406 407 385 Blank::Blank() 408 386 : VisualBase(true) 409 387 { … … 433 411 return true; 434 412 } 435 413 436 const QString &BlankFactory::name(void) const 414 static class BlankFactory : public VisFactory 437 415 { 438 static QString name("Blank"); 439 return name; 440 } 416 public: 417 const QString& name() const {static QString name("Blank"); return name;} 418 VisualBase* create(MainVisual*, long int) const {return new Blank;} 419 } BlankFactory; 441 420 442 const QString &BlankFactory::description(void) const443 {444 static QString name(QObject::tr("Blank"));445 return name;446 }447 421 448 VisualBase *BlankFactory::create(MainVisual *parent, long int winid)449 {450 (void)parent;451 (void)winid;452 return new Blank();453 }454 455 422 Squares::Squares() 456 423 { 457 424 number_of_squares = 16; … … 531 498 return true; 532 499 } 533 500 534 const QString &SquaresFactory::name(void) const 501 static class SquaresFactory: public VisFactory 535 502 { 536 static QString name("Squares"); 537 return name; 538 } 503 public: 504 const QString& name() const {static QString name("Squares"); return name;} 505 VisualBase* create(MainVisual*, long int) const {return new Squares;} 506 } SquaresFactory; 539 507 540 const QString &SquaresFactory::description(void) const541 {542 static QString name("Square visualizer");543 return name;544 }545 508 546 VisualBase *SquaresFactory::create(MainVisual *parent, long int winid)547 {548 (void)winid;549 (void)parent;550 return new Squares();551 }552 553 509 #ifdef OPENGL_SUPPORT 554 510 555 511 // Need this for the Gears Object (below) … … 975 931 drawTheGears(); 976 932 } 977 933 978 const QString &GearsFactory::name(void) const 934 static class GearsFactory: public VisFactory 979 935 { 980 static QString name("Gears"); 981 return name; 982 } 936 public: 937 const QString& name() const {static QString name("Gears"); return name;} 938 VisualBase* create(MainVisual* parent, long int) const {return new Gears(parent);} 939 } GearsFactory; 983 940 984 const QString &GearsFactory::description(void) const985 {986 static QString name(QObject::tr("Gears"));987 return name;988 }989 990 VisualBase *GearsFactory::create(MainVisual *parent, long int winid)991 {992 (void)winid;993 return new Gears(parent);994 }995 996 941 #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> … … 328 329 { 329 330 HostComboBox *gc = new HostComboBox("PlayMode"); 330 331 gc->setLabel(QObject::tr("Play mode")); 331 gc->addSelection(QObject::tr("Normal"), "Normal"); 332 gc->addSelection(QObject::tr("Random"), "Random"); 333 gc->addSelection(QObject::tr("Intelligent"), "Intelligent"); 332 gc->addSelection(QObject::tr("Normal"), "none"); 333 gc->addSelection(QObject::tr("Random"), "random"); 334 gc->addSelection(QObject::tr("Intelligent"), "intelligent"); 335 gc->addSelection(QObject::tr("Album"), "album"); 336 gc->setCurrent(0); 334 337 gc->setHelpText(QObject::tr("Starting shuffle mode for the player. Can be " 335 "either normal, random, or intelligent (random)."));338 "either normal, random, intelligent (random), or Album.")); 336 339 return gc; 337 340 }; 338 341 … … 352 355 gc->setLabel(QObject::tr("Change Visualizer on each song")); 353 356 gc->setValue(false); 354 357 gc->setHelpText(QObject::tr("Change the visualizer when the song " 355 "change ."));358 "changes.")); 356 359 return gc; 357 360 }; 358 361 362 static HostCheckBox *VisualRandomize() 363 { 364 HostCheckBox *gc = new HostCheckBox("VisualRandomize"); 365 gc->setLabel(QObject::tr("Randomize Visualizer order")); 366 gc->setValue(false); 367 gc->setHelpText(QObject::tr("On changing the visualizer pick " 368 "a new one at random.")); 369 return gc; 370 }; 371 359 372 static HostSpinBox *VisualScaleWidth() 360 373 { 361 374 HostSpinBox *gc = new HostSpinBox("VisualScaleWidth", 1, 2, 1); … … 380 393 return gc; 381 394 }; 382 395 383 static HostLi neEdit*VisualizationMode()396 static HostListBox *VisualizationMode() 384 397 { 385 HostLi neEdit *gc = new HostLineEdit("VisualMode");398 HostListBox *gc = new HostListBox("VisualMode", MythListBox::Multi); 386 399 gc->setLabel(QObject::tr("Visualizations")); 387 gc->setValue("Random"); 388 gc->setHelpText(QObject::tr("List of visualizations to use during playback. " 389 "Possible values are space-separated list of ") + "Random, " 390 "MonoScope, StereoScope, Spectrum, BumpScope, Goom, " 391 "Synaesthesia, AlbumArt, Gears, Squares " + QObject::tr("and") + 392 " Blank"); 400 401 QStringList visualizations = MainVisual::VisFactories(); 402 visualizations.sort(); 403 for (unsigned i = 0; i < visualizations.size(); i++) 404 gc->SelectSetting::addSelection(visualizations[i]); 405 406 gc->setHelpText(QObject::tr("List of visualizations possible to use during playback.")); 393 407 return gc; 394 408 }; 395 409 … … 566 580 playersettings2->setLabel(QObject::tr("Visualization Settings")); 567 581 playersettings2->addChild(VisualizationMode()); 568 582 playersettings2->addChild(VisualCycleOnSongChange()); 583 playersettings2->addChild(VisualRandomize()); 569 584 playersettings2->addChild(VisualModeDelay()); 570 585 playersettings2->addChild(VisualScaleWidth()); 571 586 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