SchedDemo::SchedDemo(const size_t num_planes, const moment_t timespan, const moment_t bounds, const moment_t window_span, QWidget *parent/* = 0*/, Qt::WFlags flags/* = 0*/) : QWidget(parent, flags) , jobs_removed_(0) , original_task_(planes_task_with_bounds(num_planes, timespan, bounds)) //, original_perm_(num_planes) , window_pos_(-2) , window_span_(window_span) , next_job_(0) , total_cost(0) { resetDemo(); sched_ = perm2sched(task_, perm_); sched_src_ = perm2sched(task_src_, perm_); auto clb = boost::bind(&SchedDemo::updateCost, this); //scene_->setCostCallback(clb); //scene_->setWeightScale(100); //scene_->setTimeScale(20); //QGraphicsView *view = new QGraphicsView(scene_); //view->setMouseTracking(true); //solver_slots_.push_back(solver_slot_t("Original", order_solver)); solver_slots_.push_back(solver_slot_t("Due dates", due_dates_solver)); selected_solver_ = solver_slots_.size() - 1; solver_slots_.push_back(solver_slot_t("Random pair", boost::bind(random_solver, _1, _2, 10000))); solver_slots_.push_back(solver_slot_t("Best pair", all_pairs_solver)); //solver_slots_.push_back(solver_slot_t("Best triple", boost::bind(all_triples_solver, _1, _2, 7))); //solver_slots_.push_back(solver_slot_t("Annealing", annealing_solver)); sliding_window_solver sws(5, boost::bind(&SchedDemo::updateOffset, this, _1)); solver_slots_.push_back(solver_slot_t("Window", sws)); QGridLayout *layout = new QGridLayout; QWidget *sidePanel = new QWidget; QGridLayout *sideLayout = new QGridLayout; sideLayout->setAlignment(Qt::AlignTop); QSignalMapper *mapper = new QSignalMapper(this); for (size_t i = 0; i < solver_slots_.size(); ++i) { solver_slots_[i].btn = new QPushButton(solver_slots_[i].name, this); mapper->setMapping(solver_slots_[i].btn, i); connect(solver_slots_[i].btn, SIGNAL(clicked()), mapper, SLOT(map())); solver_slots_[i].lbl = new QLabel(this); sideLayout->addWidget(solver_slots_[i].btn, i, 0); sideLayout->addWidget(solver_slots_[i].lbl, i, 1); } connect(mapper, SIGNAL(mapped(int)), this, SLOT(setSolver(int))); /* QPushButton *advanceBtn = new QPushButton("Advance"); sideLayout->addWidget(advanceBtn, solver_slots_.size() + 1, 0); connect(advanceBtn, SIGNAL(clicked()), this, SLOT(advanceSubtask()));*/ /*QPushButton *resetBtn = new QPushButton("Reset"); sideLayout->addWidget(resetBtn, solver_slots_.size() + 2, 0); connect(resetBtn, SIGNAL(clicked()), this, SLOT(resetSubtask()));*/ QPushButton *playBtn = new QPushButton("Play", this); sideLayout->addWidget(playBtn, solver_slots_.size() + 1, 0); connect(playBtn, SIGNAL(clicked()), this, SLOT(playDemo())); QPushButton *pauseBtn = new QPushButton("Pause", this); sideLayout->addWidget(pauseBtn, solver_slots_.size() + 1, 1); connect(pauseBtn, SIGNAL(clicked()), this, SLOT(pauseDemo())); speedBar_ = new QScrollBar(Qt::Horizontal, this); sideLayout->addWidget(speedBar_, solver_slots_.size() + 3, 0, 1, 2); play_timer_ = new QTimer(this); connect(play_timer_, SIGNAL(timeout()), this, SLOT(playTick())); QPushButton *resetBtn = new QPushButton("Reset", this); sideLayout->addWidget(resetBtn, solver_slots_.size() + 2, 0); connect(resetBtn, SIGNAL(clicked()), this, SLOT(resetDemo())); size_t pos_offset = solver_slots_.size() + 5; sideLayout->addWidget(new QLabel("Cost:"), pos_offset, 0); cost_display_ = new QLabel(this); sideLayout->addWidget(cost_display_, pos_offset, 1); ++pos_offset; sideLayout->addWidget(new QLabel("Aircrafts Processed:"), pos_offset, 0); processed_display_ = new QLabel(this); sideLayout->addWidget(processed_display_, pos_offset, 1); ++pos_offset; sideLayout->addWidget(new QLabel("Aircrafts Removed:"), pos_offset, 0); removed_display_ = new QLabel(this); sideLayout->addWidget(removed_display_, pos_offset, 1); ++pos_offset; sideLayout->addWidget(new QLabel("Aircrafts in progress:"), pos_offset, 0); in_progress_display_ = new QLabel(this); sideLayout->addWidget(in_progress_display_, pos_offset, 1); ++pos_offset; sidePanel->setLayout(sideLayout); //layout->addWidget(view, 0, 0); /* qwt_demo_ = new QwtSchedDemo(this); layout->addWidget(qwt_demo_, 1, 0); */ demo2_src = new qwt_demo_2(this); demo2_src->setAxisScale(QwtPlot::xBottom, -30, 30); demo2 = new qwt_demo_2(this); demo2->setAxisScale(QwtPlot::xBottom, -30, 30); layout->addWidget(demo2_src, 0, 0); layout->addWidget(demo2, 0, 1); layout->addWidget(sidePanel, 0, 3, 2, 1); setLayout(layout); //scene_->invalidateItems(); updateCost(); }
doubanFM::doubanFM(QWidget *parent) : QWidget(parent), ui(new Ui::doubanFM) { qDebug() << Q_FUNC_INFO; ui->setupUi(this); currentSongIndex = 0; pauseState = false; _channelListWidget = new channelList(this); _channelListWidget->setchannelId(currentChannelId); _channelListWidget->move(-_channelListWidget->getInvisibleWidth(),this->geometry().y()); _pauseMaskWidget = new pauseMaskWidget(this); _pauseMaskWidget->move(250,0); _pauseMaskWidget->setVisible(false); _loginwidget = new doubanLogin(this); _loginwidget->move(this->geometry().x(),-_loginwidget->geometry().height()); _mediaObject = new Phonon::MediaObject(this); _audioOutput = new Phonon::AudioOutput(this); Phonon::createPath(_mediaObject,_audioOutput); ui->seekSlider->setMediaObject(_mediaObject); albumImageManager = new QNetworkAccessManager(this); _mydouban = new Douban(this); readSettings(); qDebug() << "read setting" << _mydouban->hasLogin(); if(_mydouban->hasLogin()) { ui->userLoginButton->setToolTip(tr("click to logout")); ui->userLabel->setText(_mydouban->getDoubanUser().name); } else { ui->userLoginButton->setToolTip(tr("click to login")); ui->userLabel->setText(tr("Logout")); } nextShortCut = new QxtGlobalShortcut(QKeySequence("Alt+s"),this); pauseShortCut = new QxtGlobalShortcut(QKeySequence("Alt+p"),this); rateShortCut = new QxtGlobalShortcut(QKeySequence("Alt+r"),this); trashShortCut = new QxtGlobalShortcut(QKeySequence("Alt+t"),this); connect(nextShortCut,SIGNAL(activated()),this,SLOT(onSkipButtonClicked())); connect(pauseShortCut,SIGNAL(activated()),this,SLOT(onPauseButtonClicked())); connect(rateShortCut,SIGNAL(activated()),this,SLOT(onRateButtonClicked())); connect(trashShortCut,SIGNAL(activated()),this,SLOT(onTrashButtonClicked())); //connect the mainwidget signals and the slots connect(ui->volumeSlider,SIGNAL(valueChanged(int)),this,SLOT(onVolumneChange(int))); connect(ui->pauseButton,SIGNAL(clicked()),this,SLOT(onPauseButtonClicked())); connect(ui->userLoginButton,SIGNAL(clicked()),this,SLOT(onLoginButtonClicked())); connect(_mediaObject,SIGNAL(tick(qint64)),this,SLOT(playTick(qint64))); connect(albumImageManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(receiveAlbumImage(QNetworkReply*))); connect(this,SIGNAL(albumImageRequest(QString)),this,SLOT(onAlbumImage(QString))); connect(ui->rateSongButton,SIGNAL(clicked()),this,SLOT(onRateButtonClicked())); connect(ui->nextSongButton,SIGNAL(clicked()),this,SLOT(onSkipButtonClicked())); connect(ui->byeSongButton,SIGNAL(clicked()),this,SLOT(onTrashButtonClicked())); connect(_mediaObject,SIGNAL(currentSourceChanged(Phonon::MediaSource)),this,SLOT(sourceChanged(Phonon::MediaSource))); connect(_mediaObject,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SLOT(stateChanged(Phonon::State,Phonon::State))); // connect the mainwidget signals and the slots of other widget connect(this,SIGNAL(sendlogoutRequest()),_mydouban,SLOT(logoutRequest())); connect(this,SIGNAL(sendSongListRequest(qint32,quint32,double)),_mydouban,SLOT(newSongListRequest(qint32,quint32,double))); connect(this,SIGNAL(sendSkipSongRequest(qint32,quint32,double)),_mydouban,SLOT(skipSongRequest(qint32,quint32,double))); connect(this,SIGNAL(sendRateSongRequest(qint32,quint32,double,bool)),_mydouban,SLOT(rateSongRequest(qint32,quint32,double,bool))); connect(this,SIGNAL(sendEndSongRequest(qint32,quint32,double)),_mydouban,SLOT(endSongRequest(qint32,quint32,double))); connect(this,SIGNAL(sendByeSongRequest(qint32,quint32,double)),_mydouban,SLOT(byeSongRequest(qint32,quint32,double))); // connect the signals of other widget and the mainwidget slot connect(_mydouban,SIGNAL(loginSucceed(DoubanUser)),this,SLOT(loginSucceed(DoubanUser))); connect(_mydouban,SIGNAL(sendSongList(QList<DoubanFMSong>)),this,SLOT(receiveSongList(QList<DoubanFMSong>))); connect(_mydouban,SIGNAL(sendRateSong(bool)),this,SLOT(receiveRateSong(bool))); connect(_mydouban,SIGNAL(sendSkipSong(bool)),this,SLOT(receiveSkipSong(bool))); connect(_mydouban,SIGNAL(sendByeSong(bool)),this,SLOT(receiveByeSong(bool))); connect(_mydouban,SIGNAL(sendEndSong(bool)),this,SLOT(receiveEndSong(bool))); connect(_mydouban,SIGNAL(sendChannelList(QList<DoubanChannel>,bool)),this,SLOT(receiveChannelList(QList<DoubanChannel>,bool))); connect(_mydouban,SIGNAL(sendLogoutSucceed(bool)),this,SLOT(logoutSucceed(bool))); connect(_pauseMaskWidget,SIGNAL(mousePressed()),this,SLOT(pauseMaskWidgetPressed())); connect(_channelListWidget,SIGNAL(channelChanged(qint32)),this,SLOT(receiveChannelChange(qint32))); //connect the other widget signal and slots connect(_mydouban,SIGNAL(captchaImageLoad(QPixmap)),_loginwidget,SLOT(onCaptchaImageLoad(QPixmap))); connect(_mydouban,SIGNAL(loginFailed(QString)),_loginwidget,SLOT(onLoginFailed(QString))); connect(_mydouban,SIGNAL(sendChannelList(QList<DoubanChannel>,bool)),_channelListWidget,SLOT(onReceiveChannelList(QList<DoubanChannel>,bool))); connect(_loginwidget,SIGNAL(loginRequest(QString,QString,QString)),_mydouban,SLOT(loginRequest(QString,QString,QString))); _mydouban->channelListRequest(); }