infotab.cc

来自「About: Paco (pacKAGE oRGANIZER) is a si」· CC 代码 · 共 106 行

CC
106
字号
//=======================================================================// InfoTab.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 "InfoTab.h"#include "Pkg.h"#include <fstream>#include <gtkmm/scrolledwindow.h>#include <gtkmm/textview.h>#include <gtkmm/label.h>#include <gtkmm/textbuffer.h>#include <gtkmm/separator.h>using namespace Gpaco;InfoTab::InfoTab(Pkg const& pkg):	Gtk::VBox(){	Gtk::TextView* pTextView(Gtk::manage(new Gtk::TextView()));	pTextView->set_editable(false);	pTextView->set_cursor_visible(false);	pTextView->set_left_margin(10);	pTextView->set_right_margin(10);	Gtk::ScrolledWindow* pScrolledWindow(Gtk::manage(new Gtk::ScrolledWindow()));	pScrolledWindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);	pScrolledWindow->add(*pTextView);	Gtk::Label* pLabel(Gtk::manage(new Gtk::Label("", 0.02, 0.5)));	pack_start(*pScrolledWindow);	pack_start(*(Gtk::manage(new Gtk::HSeparator())), Gtk::PACK_SHRINK);	pack_start(*pLabel, Gtk::PACK_SHRINK);		Glib::RefPtr<Gtk::TextBuffer> pTextBuffer(pTextView->get_buffer());	Glib::RefPtr<Gtk::TextTag> pTagWrap(pTextBuffer->create_tag());	pTagWrap->property_wrap_mode() = Gtk::WRAP_WORD;		Glib::RefPtr<Gtk::TextTag> pTagTitle(pTextBuffer->create_tag());	pTagTitle->property_weight() = Pango::WEIGHT_BOLD;	pTagTitle->property_family() = "courier";	pTagTitle->property_size_points() = 12.0;	bool ok = false;	if (pkg.icon()) {		pTextBuffer->insert(pTextBuffer->end(), "\n");		pTextBuffer->insert_pixbuf(pTextBuffer->end(), pkg.icon());		pTextBuffer->insert(pTextBuffer->end(), "\n");		ok = true;	}	pTextBuffer->insert(pTextBuffer->end(), "\n");	std::string buf;	std::ifstream f(pkg.log().c_str());	g_return_if_fail(f);	while (std::getline(f, buf) && buf[0] == '#') {		if (buf.find("#:") != 0)			continue;		buf.erase(0, 2);		if (!buf.find("Description"))			pTextBuffer->insert_with_tag(pTextBuffer->end(), buf + "\n", pTagTitle);		else if (!buf.find("Name:") || !buf.find("Author:")			|| !buf.find("Version:") || !buf.find("Summary:")			|| !buf.find("URL:") || !buf.find("License:")) {			g_assert(buf.size() >= 10);			pTextBuffer->insert_with_tag(pTextBuffer->end(), buf.substr(0, 10), pTagTitle);			pTextBuffer->insert_with_tag(pTextBuffer->end(), buf.substr(10), pTagWrap);		}		else			pTextBuffer->insert_with_tag(pTextBuffer->end(), buf, pTagWrap);			pTextBuffer->insert(pTextBuffer->end(), "\n");		ok = true;	}	f.seekg(0);	while (std::getline(f, buf) && buf[0] == '#') {		if (!buf.find("#c:")) {			pTextBuffer->insert_with_tag(pTextBuffer->end(), "\nconfigure options\n", pTagTitle);			pTextBuffer->insert_with_tag(pTextBuffer->end(), buf.substr(3) + "\n", pTagWrap);			ok = true;			break;		}	}	if (!ok) {		pLabel->set_text("No information available");		pTextView->set_sensitive(false);	}	show_all();}

⌨️ 快捷键说明

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