⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cc

📁 About: Paco (pacKAGE oRGANIZER) is a simple, yet powerful tool to aid package management when insta
💻 CC
字号:
//=======================================================================// MainWindow.cc//-----------------------------------------------------------------------// This file is part of the package paco// Copyright (C) 2004-2007 David Rosal <david.3r@gmail.com>// For more information visit http://paco.sourceforge.net//=======================================================================#include "config.h"#include "Config.h"#include "Lock.h"#include "MainWindow.h"#include "Preferences.h"#include "About.h"#include "PkgSet.h"#include "Find.h"#include "util.h"#include "ImportRPM.h"#include "paco/paco.h"#include <gtkmm/stock.h>#include <gtkmm/toggleaction.h>#include <gtkmm/uimanager.h>#include <gtkmm/actiongroup.h>#include <gtkmm/box.h>#include <gtkmm/separator.h>#include <gtkmm/scrolledwindow.h>#include <sstream>using Glib::ustring;using std::string;using sigc::mem_fun;using namespace Gpaco;MainWindow::MainWindow():	Gtk::Window(),	mLabel("", 0.02, 0.5),	mTreeView(),	mProgressBar(),	mpUIManager(Gtk::UIManager::create()),	mpActionGroup(Gtk::ActionGroup::create()),	mpActionImportRPM(Gtk::Action::create		("ImportRPM", "_Import RPM database...")),	mpActionUpdate(Gtk::Action::create		("UpdateDatabase", Gtk::Stock::REFRESH, "_Update database")),	mpMenuBar(NULL){	set_default_size(Config::width(), Config::height());	try {#if 0	// glibmm >= 2.14		set_icon_from_file(Glib::get_user_data_dir() + "/pixmaps/gpaco.png");#else		set_icon_from_file(DATADIR "/pixmaps/gpaco.png");#endif	}	catch (...) { }	buildUIManager();	mpMenuBar = mpUIManager->get_widget("/MenuBar");	Gtk::ScrolledWindow* pScrolledWindow(Gtk::manage(new Gtk::ScrolledWindow()));	pScrolledWindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);	pScrolledWindow->add(mTreeView);	mProgressBar.set_size_request(-1, 0);	Gtk::HBox* pHBox(Gtk::manage(new Gtk::HBox()));	pHBox->pack_start(mLabel, Gtk::PACK_SHRINK, 8);	pHBox->pack_end(mProgressBar, Gtk::PACK_SHRINK);	Gtk::VBox* pVBox(Gtk::manage(new Gtk::VBox()));	pVBox->pack_start(*mpMenuBar, Gtk::PACK_SHRINK);	pVBox->pack_start(*pScrolledWindow);	pVBox->pack_start(*(Gtk::manage(new Gtk::HSeparator())),		Gtk::PACK_SHRINK, 1);	pVBox->pack_start(*pHBox, Gtk::PACK_SHRINK);	add(*pVBox);	show_all_children();	mProgressBar.hide();	move(Config::xPos(), Config::yPos());	Glib::signal_timeout().connect(mem_fun		(*this, &MainWindow::writeLabel), 500);	Glib::usleep(10000);		checkLock();	Glib::signal_timeout().connect(mem_fun		(*this, &MainWindow::checkLock), 500, Glib::PRIORITY_HIGH);}MainWindow::~MainWindow(){ }bool MainWindow::checkLock(){	bool set = !Lock::locked() && Config::logdirWritable();	if (mpActionUpdate)		mpActionUpdate->set_sensitive(set);	if (mpActionImportRPM) {		mpActionImportRPM->set_sensitive(set			&& !Glib::find_program_in_path("rpm2paco").empty()			&& !Glib::find_program_in_path("rpm").empty());	}	return true;}//---------//// Private ////---------//// [virtual]bool MainWindow::on_delete_event(GdkEventAny*){	quit();	return true;}void MainWindow::quit(){	Config::saveSettings(*this);	Glib::usleep(10000);	hide();}void MainWindow::menuViewItem(ustring const& name, ustring const& label, int id){	Glib::RefPtr<Gtk::ToggleAction> pToggleAction		(Gtk::ToggleAction::create(name, label));	mpActionGroup->add(pToggleAction, sigc::bind<Gtk::TreeViewColumn*>		(mem_fun(*this, &MainWindow::viewColumn), mTreeView.get_column(id)));	for (guint i = 0; i < Config::cols().size(); ++i) {		if (Config::cols()[i] == id) {			pToggleAction->activate();			break;		}	}}void MainWindow::buildUIManager(){	g_assert(mpActionGroup);	g_assert(mpActionUpdate);	g_assert(mpActionImportRPM);	mpActionGroup->add(Gtk::Action::create("MenuFile", "_File"));	mpActionGroup->add(mpActionUpdate,		mem_fun(mTreeView, &MainTreeView::onUpdateDataBase));	mpActionGroup->add(mpActionImportRPM,		mem_fun(*this, &MainWindow::onImportRPM));	mpActionGroup->add(Gtk::Action::create("Quit", Gtk::Stock::QUIT),		mem_fun(*this, &MainWindow::quit));			mpActionGroup->add(Gtk::Action::create("MenuEdit", "_Edit"));	mpActionGroup->add(Gtk::Action::create("FindFile", Gtk::Stock::FIND,		"_Find file"), mem_fun(*this, &MainWindow::find));	mpActionGroup->add(Gtk::Action::create("Preferences",		Gtk::Stock::PREFERENCES), mem_fun(*this, &MainWindow::preferences));		mpActionGroup->add(Gtk::Action::create("MenuView", "_View"));	menuViewItem("Icon", "_Icon", MainTreeView::COL_ICON);	menuViewItem("Name", "_Name", MainTreeView::COL_NAME);	menuViewItem("Size", "_Size", MainTreeView::COL_SIZE_INST);	menuViewItem("SizeMissing", "Size _missing", MainTreeView::COL_SIZE_MISS);	menuViewItem("SizePercent", "Size _percent", MainTreeView::COL_SIZE_PERCENT);	menuViewItem("Date", "_Date", MainTreeView::COL_DATE);	menuViewItem("Files", "_Files", MainTreeView::COL_FILES_INST);	menuViewItem("FilesMissing", "Files m_issing", MainTreeView::COL_FILES_MISS);	menuViewItem("FilesPercent", "Files p_ercent", MainTreeView::COL_FILES_PERCENT);	menuViewItem("Summary", "_Summary", MainTreeView::COL_SUMMARY);	Glib::RefPtr<Gtk::ToggleAction> pRules = 		Gtk::ToggleAction::create("RulesHint", "_Rules hint");	mpActionGroup->add(pRules, mem_fun(*this, &MainWindow::onSwitchRules));	if (Config::rules())		pRules->activate();		mpActionGroup->add(Gtk::Action::create("MenuHelp", "_Help"));	mpActionGroup->add(Gtk::Action::create("About", Gtk::Stock::ABOUT),		mem_fun(*this, &MainWindow::about));	mpUIManager->insert_action_group(mpActionGroup);		add_accel_group(mpUIManager->get_accel_group());	mpUIManager->add_ui_from_string(		"<ui>"		"	<menubar name='MenuBar'>"		"		<menu action='MenuFile'>"		"			<menuitem action='UpdateDatabase'/>"		"			<menuitem action='ImportRPM'/>"		"			<separator/>"		"			<menuitem action='Quit'/>"		"		</menu>"		"		<menu action='MenuEdit'>"		"			<menuitem action='FindFile'/>"		"			<separator/>"		"			<menuitem action='Preferences'/>"		"		</menu>"		"		<menu action='MenuView'>"		"			<menuitem action='Icon'/>"		"			<menuitem action='Name'/>"		"			<menuitem action='Size'/>"		"			<menuitem action='SizeMissing'/>"		"			<menuitem action='SizePercent'/>"		"			<menuitem action='Date'/>"		"			<menuitem action='Files'/>"		"			<menuitem action='FilesMissing'/>"		"			<menuitem action='FilesPercent'/>"		"			<menuitem action='Summary'/>"		"			<separator/>"		"			<menuitem action='RulesHint'/>"		"		</menu>"		"		<menu action='MenuHelp'>"		"			<menuitem action='About'/>"		"		</menu>"		"	</menubar>"		"</ui>");}void MainWindow::onSwitchRules(){	mTreeView.switchRules();}void MainWindow::find(){	Find::instance();}void MainWindow::preferences(){	Preferences::instance();}void MainWindow::about(){	About::instance();}void MainWindow::onImportRPM(){	ImportRPM::instance();}void MainWindow::viewColumn(Gtk::TreeViewColumn* pCol){	g_assert(pCol != NULL);	pCol->set_visible(!pCol->get_visible());}bool MainWindow::writeLabel(){	if (mProgressBar.is_visible()) {		mLabel.set_text("Updating the database...");		return true;	}	std::ostringstream txt;	txt << mTreeView.pkgSet().size() << " Packages  |  "		<< Paco::sizeStr(Config::sizeUnit(), mTreeView.pkgSet().sizeInst());	switch (Config::sizeUnit()) {		case Paco::KILOBYTE:	txt << 'k'; break;		case Paco::MEGABYTE:	txt << 'M'; break;		case Paco::BYTE:		txt << " bytes";	}		mLabel.set_text(txt.str());		return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -