GGEditContentMappingDialog::GGEditContentMappingDialog(GGEditModel *model, QWidget *parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint), ui(new Ui::GGEditContentMappingDialog), m_page(NULL), m_windowInfo(this, "MappingEditor") { ui->setupUi(this); m_windowInfo.addSplitter(ui->splitter); m_windowInfo.restore(); m_scene = new GGMappingScene(this); ui->graphicsView->setScene(m_scene); m_ctrl = new GGMappingUIController(model, this); ui->actionUndo->setShortcut(QKeySequence::Undo); ui->actionRedo->setShortcut(QKeySequence::Redo); ui->actionDelete->setShortcut(QKeySequence::Delete); this->addAction(ui->actionUndo); this->addAction(ui->actionRedo); ui->graphicsView->addAction(ui->actionDelete); ui->wgtLinks->setFields(GGConnectionEditorWidget::Action | GGConnectionEditorWidget::Caption | GGConnectionEditorWidget::Page | GGConnectionEditorWidget::Number); ui->wgtLinks->setActions(GGConnectionEditorWidget::Edit | GGConnectionEditorWidget::Delete | GGConnectionEditorWidget::Hover); connect(ui->actionUndo, SIGNAL(triggered(bool)), m_ctrl, SLOT(undo())); connect(ui->actionRedo, SIGNAL(triggered(bool)), m_ctrl, SLOT(redo())); connect(ui->actionDelete, SIGNAL(triggered(bool)), this, SLOT(deleteSelectedItem())); connect(model, SIGNAL(pageUpdated(GGPage*,GGAbstractModel::PageSections)), this, SLOT(updatePage(GGPage*))); connect(m_scene, SIGNAL(addedItem(QRect)), this, SLOT(addLink(QRect))); connect(m_scene, SIGNAL(movedItem(int,QRect)), this, SLOT(moveLink(int,QRect))); connect(ui->wgtLinks, SIGNAL(hoverEnteredConnection(GGPage*,GGConnectionSlot)), this, SLOT(handleHoverEnter(GGPage*,GGConnectionSlot))); connect(ui->wgtLinks, SIGNAL(hoverLeftConnection(GGPage*,GGConnectionSlot)), this, SLOT(handleHoverLeave(GGPage*,GGConnectionSlot))); connect(ui->wgtLinks, SIGNAL(updateLinkCaption(GGPage*,GGConnectionSlot,QString)), this, SLOT(updateLinkCaption(GGPage*,GGConnectionSlot,QString))); connect(ui->wgtLinks, SIGNAL(updateLinkAction(GGPage*,GGConnectionSlot,GGAction)), this, SLOT(updateLinkAction(GGPage*,GGConnectionSlot,GGAction))); connect(ui->wgtLinks, SIGNAL(deleteConnection(GGPage*,GGConnectionSlot)), this, SLOT(deleteConnect(GGPage*,GGConnectionSlot))); }
// Cringe. void GtkTorrentSideBar::setupColumns() { int cid = 0; Gtk::TreeViewColumn *col = nullptr; Gtk::CellRendererText *cell = Gtk::manage(new Gtk::CellRendererText()); Gtk::CellRendererPixbuf *cellp = Gtk::manage(new Gtk::CellRendererPixbuf()); cell->set_alignment(0, 0.5); cell->signal_edited().connect([this](const std::string& path,const std::string& name){ addedItem(path, name); }); cid = append_column(*Gtk::manage(new Gtk::TreeViewColumn("Name"))); col = get_column(cid - 1); col->pack_start(*cellp); col->pack_start(*cell); col->add_attribute(cell->property_markup(), m_cols.name); col->add_attribute(cell->property_editable(), m_cols.editable); col->add_attribute(cellp->property_pixbuf(), m_cols.icon); // This really isn't "setupColumns" anymore from this point. // TODO Move to own function m_torrent_row = *(m_liststore->append()); m_torrent_row[m_cols.name] = "Torrents"; m_torrent_row[m_cols.editable] = false; m_torrent_row[m_cols.clickCallback] = [](){}; // clicks on titles don't do shit auto torrent_icon = Gdk::Pixbuf::create_from_resource("/org/gtk/gtorrent/icon-torrent.png"); auto torrent_icon_scaled = torrent_icon->scale_simple(16, 16, Gdk::INTERP_BILINEAR); m_torrent_row[m_cols.icon] = torrent_icon_scaled; // XXX TMP WILL REMOVE AND REPLACE WITH PROPER FUNCTION // Yes this is horrible. Bear with it for now. auto g = Application::getSingleton()->getCore()->getAllTorrents(); Gtk::TreeModel::Row row = *(m_liststore->append(m_torrent_row.children())); row[m_cols.name] = "All"; row[m_cols.title] = "All"; row[m_cols.group] = g; row[m_cols.group_vector] = &g->m_torrents_all; Gtk::TreeModel::Row row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Downloading"; row2[m_cols.title] = "Downloading"; row2[m_cols.group_vector] = &g->m_torrents_downloading; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Seeding"; row2[m_cols.title] = "Seeding"; row2[m_cols.group_vector] = &g->m_torrents_seeding; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Checking"; row2[m_cols.title] = "Checking"; row2[m_cols.group_vector] = &g->m_torrents_checking; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Finished"; row2[m_cols.title] = "Finished"; row2[m_cols.group_vector] = &g->m_torrents_finished; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Stopped"; row2[m_cols.title] = "Stopped"; row2[m_cols.group_vector] = &g->m_torrents_stopped; row2 = *(m_liststore->append(row.children())); row2[m_cols.name] = "Paused"; row2[m_cols.title] = "Paused"; row2[m_cols.group_vector] = &g->m_torrents_paused; // End of new horrible code // Continue horrible code from before //row = *(m_liststore->append(m_torrent_row.children())); //row[m_cols.name] = "Add a label"; //row[m_cols.editable] = true; //row[m_cols.icon] = Gtk::IconTheme::get_default()->lookup_icon("list-add-symbolic", 16, Gtk::ICON_LOOKUP_USE_BUILTIN).load_icon(); //row[m_cols.clickCallback] = [row](){}; m_rssfeed_row = *(m_liststore->append()); m_rssfeed_row[m_cols.name] = "RSS Feeds"; m_rssfeed_row[m_cols.editable] = false; m_rssfeed_row[m_cols.clickCallback] = [](){}; auto rss_icon = Gdk::Pixbuf::create_from_resource("/org/gtk/gtorrent/icon-rss.png"); auto rss_icon_scaled = rss_icon->scale_simple(16, 16, Gdk::INTERP_BILINEAR); m_rssfeed_row[m_cols.icon] = rss_icon_scaled; for(auto fg : Application::getSingleton()->getCore()->m_feeds) { row = *(m_liststore->append(m_rssfeed_row.children())); row[m_cols.name] = fg->name; row[m_cols.editable] = false; // TODO change icon to some sort of generic RSS icon row[m_cols.clickCallback] = [this, fg](){m_rss->run(fg->name);m_rss->hide();}; } row = *(m_liststore->append(m_rssfeed_row.children())); row[m_cols.name] = "Add an RSS group"; row[m_cols.editable] = true; row[m_cols.icon] = Gtk::IconTheme::get_default()->lookup_icon("list-add-symbolic", 16, Gtk::ICON_LOOKUP_USE_BUILTIN).load_icon(); row[m_cols.clickCallback] = [row](){}; //Maybe migrate settings there /* row = *(m_liststore->append()); row[m_cols.name] = "Settings"; row[m_cols.title] = true; row[m_cols.clickCallback] = [](){}; // clicks on titles don't do shit*/ }
void MainWindow::newImage() { Canvas * canvas = new Canvas; canvas->registerObserver(this); bool valideName; QString imageName = QInputDialog::getText(this, tr("Name"), tr("Image Name : "), QLineEdit::Normal, "", &valideName); if(valideName) { if(!imageName.isEmpty()) { ui->tabWidget->addTab(canvas, imageName); } else { ui->tabWidget->addTab(canvas, tr("untitled")); } } else { return; } QPoint imageSize; imageSize.setX(QInputDialog::getInt(this, tr("Width"), tr("Image width metrics in px"))); imageSize.setY(QInputDialog::getInt(this, tr("Height"), tr("Image height metrics in px"))); if(imageSize.x() && imageSize.y()) { canvas->setSceneRect(0, 0, imageSize.x(), imageSize.y()); } else { canvas->setSceneRect(0, 0, 250, 250); } canvas->setBackgroundBrush(QBrush(QColor(255, 255, 255))); //canvas->addShape(new LineSegment); connect((Canvas*)ui->tabWidget->currentWidget(), SIGNAL(addName(QString)), this, SLOT(addedItem(QString))); }