/** * Sets up the main window. */ GtkMainWindow::GtkMainWindow() : m_core(Application::getSingleton()->getCore()) { //TODO:This needs to be refactored notify_init ("Hello world!"); set_position(Gtk::WIN_POS_CENTER); set_default_size(800, 500); magtxt->set_visible(); magtxt->set_width_chars(75); magPop->add(*magtxt); btn_add_link->set_popover(*magPop); Gtk::Paned *panel = Gtk::manage(new Gtk::Paned(Gtk::ORIENTATION_VERTICAL)); m_swin = Gtk::manage(new Gtk::ScrolledWindow()); m_infobar = Gtk::manage(new GtkTorrentInfoBar()); m_treeview = Gtk::manage(new GtkTorrentTreeView(this, m_infobar)); m_infobar->set_margin_left(5); m_infobar->set_margin_right(5); m_swin->add(*m_treeview); panel->pack1(*m_swin); panel->pack2(*m_infobar); Glib::signal_timeout().connect_seconds(sigc::mem_fun(*this, &GtkMainWindow::onSecTick), 1); signal_delete_event().connect(sigc::mem_fun(*this, &GtkMainWindow::onDestroy)); signal_key_press_event().connect(sigc::mem_fun(*this, &GtkMainWindow::onKeyPress), false); header = Gtk::manage(new Gtk::HeaderBar()); header->set_show_close_button(true); header->set_title("gTorrent"); Gtk::VSeparator *separator0 = Gtk::manage(new Gtk::VSeparator()); Gtk::VSeparator *separator2 = Gtk::manage(new Gtk::VSeparator()); btn_add_link ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onAddMagnetBtnClicked)); btn_add_torrent->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onAddBtnClicked)); btn_pause ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onPauseBtnClicked)); btn_resume ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onResumeBtnClicked)); btn_remove ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onRemoveBtnClicked)); btn_settings ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onSettingsBtnClicked)); btn_properties ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onPropertiesBtnClicked)); btn_add_link ->set_image_from_icon_name("insert-link-symbolic"); btn_add_torrent->set_image_from_icon_name("list-add-symbolic"); btn_pause ->set_image_from_icon_name("media-playback-pause-symbolic"); btn_properties ->set_image_from_icon_name("preferences-system-symbolic"); btn_remove ->set_image_from_icon_name("edit-delete-symbolic"); btn_resume ->set_image_from_icon_name("media-playback-start-symbolic"); btn_settings ->set_image_from_icon_name("emblem-system-symbolic"); //TODO:align properties button to right of top bar //btn_properties->set_alignment(1.0f,0.0f); header->add(*btn_add_torrent); header->add(*btn_add_link); header->add(*separator0); header->add(*btn_resume); header->add(*btn_pause); header->add(*btn_remove); header->add(*separator1); header->add(*btn_properties); header->add(*separator2); header->pack_end(*btn_settings); // Let's add some DnD goodness std::vector<Gtk::TargetEntry> listTargets; listTargets.push_back(Gtk::TargetEntry("STRING")); listTargets.push_back(Gtk::TargetEntry("text/plain")); listTargets.push_back(Gtk::TargetEntry("text/uri-list")); listTargets.push_back(Gtk::TargetEntry("application/x-bittorrent")); m_treeview->drag_dest_set(listTargets, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP, Gdk::ACTION_COPY | Gdk::ACTION_MOVE | Gdk::ACTION_LINK | Gdk::ACTION_PRIVATE); m_treeview->signal_drag_data_received().connect(sigc::mem_fun(*this, &GtkMainWindow::onFileDropped)); set_titlebar(*header); add(*panel); show_all(); btn_pause->hide(); m_infobar->set_visible(false); // for some reason, the treeview start with its first element selected m_treeview->get_selection()->unselect_all(); for(auto tor : Application::getSingleton()->getCore()->getTorrents()) { tor->onStateChanged = std::bind(&GtkMainWindow::torrentStateChangedCallback, this, std::placeholders::_1, std::placeholders::_2); m_treeview->addCell(tor); } gt::Log::Debug(gt::Settings::settings["FileAssociation"].c_str()); if (gt::Settings::settings["FileAssociation"] == "" || gt::Settings::settings["FileAssociation"] == "-1") { GtkAssociationDialog *dialog = new GtkAssociationDialog(*this); int code = dialog->run();// code = -1 (Remind me later), 0(Do not associate), 1(Associate with torrents), 2(Associate with magnets), 3(Assiciate with both) if(code != -1) gt::Platform::associate(code & 2, code & 1); gt::Settings::settings["FileAssociation"] = std::to_string(code); delete dialog; } d = new GtkSettingsDialog(this); }
/** * Sets up the main window. */ GtkMainWindow::GtkMainWindow() : m_core(Application::getSingleton()->getCore()) { //TODO:This needs to be refactored this->set_position(Gtk::WIN_POS_CENTER); this->set_default_size(800, 500); Gtk::Paned *panel = Gtk::manage(new Gtk::Paned(Gtk::ORIENTATION_VERTICAL)); m_infobar = Gtk::manage(new GtkTorrentInfoBar()); m_treeview = Gtk::manage(new GtkTorrentTreeView(m_infobar)); panel->pack1(*m_treeview); panel->pack2(*m_infobar); Glib:: signal_timeout().connect(sigc::mem_fun(*this, &GtkMainWindow::onSecTick), 1000); this->signal_delete_event().connect(sigc::mem_fun(*this, &GtkMainWindow::onDestroy)); header = Gtk::manage(new Gtk::HeaderBar()); header->set_show_close_button(true); header->set_title("gTorrent"); Gtk::Button *btn_add_link = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_add_torrent = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_connect = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_pause = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_properties = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_remove = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_resume = Gtk::manage(new Gtk::Button()); Gtk::Button *btn_settings = Gtk::manage(new Gtk::Button()); Gtk::VSeparator *separator0 = Gtk::manage(new Gtk::VSeparator()); Gtk::VSeparator *separator1 = Gtk::manage(new Gtk::VSeparator()); Gtk::VSeparator *separator2 = Gtk::manage(new Gtk::VSeparator()); btn_add_link ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onAddMagnetBtnClicked)); btn_add_torrent->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onAddBtnClicked)); btn_pause ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onPauseBtnClicked)); btn_resume ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onResumeBtnClicked)); btn_remove ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onRemoveBtnClicked)); btn_settings ->signal_clicked().connect(sigc::mem_fun(*this, &GtkMainWindow::onSettingsBtnClicked)); btn_add_link ->set_image_from_icon_name("edit-paste"); btn_add_torrent->set_image_from_icon_name("gtk-add"); btn_connect ->set_image_from_icon_name("gtk-directory"); btn_pause ->set_image_from_icon_name("media-playback-pause"); btn_properties ->set_image_from_icon_name("gtk-properties"); btn_remove ->set_image_from_icon_name("gtk-cancel"); btn_resume ->set_image_from_icon_name("media-playback-start"); btn_settings ->set_image_from_icon_name("emblem-system-symbolic"); //TODO:align properties button to right of top bar //btn_properties->set_alignment(1.0f,0.0f); header->add(*btn_add_torrent); header->add(*btn_add_link); header->add(*btn_connect); header->add(*separator0); header->add(*btn_pause); header->add(*btn_resume); header->add(*btn_remove); header->add(*separator1); header->add(*btn_properties); header->add(*separator2); header->pack_end(*btn_settings); // Let's add some DnD goodness vector<Gtk::TargetEntry> listTargets; listTargets.push_back(Gtk::TargetEntry("STRING")); listTargets.push_back(Gtk::TargetEntry("text/plain")); listTargets.push_back(Gtk::TargetEntry("text/uri-list")); listTargets.push_back(Gtk::TargetEntry("application/x-bittorrent")); m_treeview->drag_dest_set(listTargets, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP, Gdk::ACTION_COPY | Gdk::ACTION_MOVE | Gdk::ACTION_LINK | Gdk::ACTION_PRIVATE); m_treeview->signal_drag_data_received().connect(sigc::mem_fun(*this, &GtkMainWindow::onFileDropped)); set_titlebar(*header); add(*panel); show_all(); m_infobar->set_visible(false); if (gt::Settings::getOptionAsString("FileAssociation") == "" || gt::Settings::getOptionAsInt("FileAssociation") == -1) { GtkAssociationDialog *dialog = new GtkAssociationDialog(*this); int code = dialog->run();// code = -1 (Remind me later), 0(Do not associate), 1(Associate with torrents), 2(Associate with magnets), 3(Assiciate with both) if(code != -1) gt::Platform::associate(code & 2, code & 1); gt::Settings::setOption("FileAssociation", code); delete dialog; } d = new GtkSettingsDialog(this); }
/** * Sets up the main window. */ GtkMainWindow::GtkMainWindow() : m_core(Application::getSingleton()->getCore()) { //TODO:This needs to be refactored this->set_position(Gtk::WIN_POS_CENTER); this->set_default_size(800, 500); Gtk::Paned *panel = Gtk::manage(new Gtk::Paned(Gtk::ORIENTATION_VERTICAL)); m_infobar = Gtk::manage(new GtkTorrentInfoBar()); m_treeview = Gtk::manage(new GtkTorrentTreeView(m_infobar)); panel->pack1(*m_treeview); panel->pack2(*m_infobar); Glib:: signal_timeout().connect(sigc::mem_fun(*this, &GtkMainWindow::onSecTick), 1000); this->signal_delete_event().connect(sigc::mem_fun(*this, &GtkMainWindow::onDestroy)); header = Gtk::manage(new Gtk::HeaderBar()); header->set_show_close_button(true); header->set_title("gTorrent"); Glib::RefPtr<Gtk::ActionGroup> action_group = Gtk::ActionGroup::create(); action_group->add(Gtk::Action::create( "Properties", Gtk::Stock::PROPERTIES)); action_group->add(Gtk::Action::create( "Add Link", Gtk::Stock::PASTE), sigc::mem_fun(*this, &GtkMainWindow::onAddMagnetBtnClicked)); action_group->add(Gtk::Action::create("Add Torrent", Gtk::Stock::ADD), sigc::mem_fun(*this, &GtkMainWindow::onAddBtnClicked)); action_group->add(Gtk::Action::create( "Remove", Gtk::Stock::CANCEL), sigc::mem_fun(*this, &GtkMainWindow::onRemoveBtnClicked)); action_group->add(Gtk::Action::create( "Resume", Gtk::Stock::MEDIA_PLAY), sigc::mem_fun(*this, &GtkMainWindow::onResumeBtnClicked)); action_group->add(Gtk::Action::create( "Pause", Gtk::Stock::MEDIA_PAUSE), sigc::mem_fun(*this, &GtkMainWindow::onPauseBtnClicked)); action_group->add(Gtk::Action::create( "Up", Gtk::Stock::GO_UP)); action_group->add(Gtk::Action::create( "Down", Gtk::Stock::GO_DOWN)); Glib::RefPtr<Gtk::UIManager> ui_manager = Gtk::UIManager::create(); ui_manager->insert_action_group(action_group); add_accel_group(ui_manager->get_accel_group()); Glib::ustring ui_info = "<ui>" " <toolbar name='ToolBar'>" " <toolitem action='Properties' />" " <separator />" " <toolitem action='Add Link' />" " <toolitem action='Add Torrent' />" " <separator />" " <toolitem action='Remove' />" " <toolitem action='Pause' />" " <toolitem action='Resume' />" " <separator />" " <toolitem action='Down' />" " <toolitem action='Up' />" " <separator />" " </toolbar>" "</ui>"; ui_manager->add_ui_from_string(ui_info); this->add(*panel); Gtk::Widget* pToolBar = ui_manager->get_widget("/ToolBar"); pToolBar->override_background_color(Gdk::RGBA("0, 0, 0, 0")); header->add(*pToolBar); // Let's add some DnD goodness vector<Gtk::TargetEntry> listTargets; listTargets.push_back(Gtk::TargetEntry("STRING")); listTargets.push_back(Gtk::TargetEntry("text/plain")); listTargets.push_back(Gtk::TargetEntry("text/uri-list")); listTargets.push_back(Gtk::TargetEntry("application/x-bittorrent")); m_treeview->drag_dest_set(listTargets, Gtk::DEST_DEFAULT_MOTION | Gtk::DEST_DEFAULT_DROP, Gdk::ACTION_COPY | Gdk::ACTION_MOVE | Gdk::ACTION_LINK | Gdk::ACTION_PRIVATE); m_treeview->signal_drag_data_received().connect(sigc::mem_fun(*this, &GtkMainWindow::onFileDropped)); this->set_titlebar(*header); this->show_all(); panel->set_position(this->get_height() * 0.5); }