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

📄 iconbrowser.cpp

📁 用linux开发的安防暴警的有关代码
💻 CPP
字号:
#include "iconbrowser.h"#include <stdio.h>#include <string.h>#include <FL/Fl_Window.H>WidgetList::WidgetList (Fl_Scroll *_Scroll){	Scroll = _Scroll;	First = Last = NULL;	Count = 0;}WidgetList::~WidgetList (void){	WidgetNode *X, *NX;		X = First;	while (X)	{		NX = X->Next;		Scroll->remove (X->Group);		delete (X->Text);		delete (X->Group);		delete (X);		X = NX;	}	First = Last = NULL;}void WidgetList::Add (Fl_Group *Group, Fl_Button *Icon, Fl_Button *Label, void *Userdata, char *Text){	WidgetNode *X = new WidgetNode;		X->Group = Group;	X->Icon = Icon;	X->Label = Label;	X->Userdata = Userdata;	X->Text = Text;	X->Next = NULL;	if (Last)	{		X->Prev = Last;		Last->Next = X;		Last = X;	}	else	{		X->Prev = NULL;		First = Last = X;	}	++Count;}WidgetNode *WidgetList::Get (int idx){	int i = 0;	WidgetNode *N = First;	for (i=0; (((i+1) < idx) && (N)); ++i) N=N->Next;	return N;}int WidgetList::Find (Fl_Button *b){	int i = 0;	WidgetNode *N = First;	while (N)	{		++i;		if ((N->Icon == b)||(N->Label == b)) return (i);		N = N->Next;	}	return (0);}void WidgetList::Remove (int idx){	WidgetNode *N = Get (idx);	if (N)	{		Scroll->remove (N->Group);		if (N->Prev)		{			if (N->Next)			{				N->Prev->Next = N->Next;				N->Next->Prev = N->Prev;			}			else			{				N->Prev->Next = NULL;				Last = N->Prev;			}		}		else		{			if (N->Next)			{				N->Next->Prev = NULL;				First = N->Next;			}			else			{				First = Last = NULL;			}		}		delete (N->Group);		delete (N->Text);		delete (N);		--Count;	}}int WidgetList::Size (void){	return (Count);}Fl_Iconbrowser::Fl_Iconbrowser (int x, int y, int w, int h, const char *label) : Fl_Group (x, y, w, h, label), Scroll (x,y,w,h){	fl_mapcolor (FL_FREE_COL4,246,235,180 ); 	Scroll.type (Fl_Scroll::VERTICAL);	Scroll.box (FL_FLAT_BOX);	Scroll.color(FL_FREE_COL4);	//Scroll.color (FL_WHITE);	Scroll.selection_color (209);	Scroll.end ();	box (FL_NO_BOX);	Contents = new WidgetList (&Scroll);	Fl_Group::end();}Fl_Iconbrowser::~Fl_Iconbrowser (void){	delete (Contents);	//delete (Scroll);}void Fl_Iconbrowser::draw (void){	this->window()->make_current();	Fl_Group::draw();	//Scroll.redraw();}int Fl_Iconbrowser::handle (int event){	return Fl_Group::handle (event);}void Fl_Iconbrowser::show (void){	Fl_Group::show();	//Scroll.show();}void Fl_Iconbrowser::hide (void){	Fl_Group::hide();	//Scroll.hide();}void Fl_Iconbrowser::activate (void){	Fl_Group::activate();	//Scroll.activate();}void Fl_Iconbrowser::deactivate (void){	Fl_Group::deactivate();	//Scroll.deactivate();}#define MARGIN 8#define PC_CONTAINER 26void Fl_Iconbrowser::add (char *_label, Fl_Pixmap *_icon, void *_userdata){	int ypos = y() + 2 + ((PC_CONTAINER+2) * Contents->Size()) - Scroll.yposition();	char *Text = new char[strlen(_label)+1];	strcpy (Text, _label);	Scroll.begin();	Fl_Group *Group = new Fl_Group (x(), ypos, w() + MARGIN, PC_CONTAINER);	Group->box (FL_FLAT_BOX);	//Group->color (FL_WHITE);	Group->color(FL_FREE_COL4);	Group->begin();	Fl_Button *Icon = new Fl_Button (x() + MARGIN, ypos, PC_CONTAINER, PC_CONTAINER);	Icon->box (FL_NO_BOX);	Icon->down_box (FL_NO_BOX);	Icon->callback ((Fl_Callback *) cb_click, (void *) this);	_icon->label (Icon);		Fl_Button *Label = new Fl_Button (x()+16 + MARGIN, ypos, w()-16, PC_CONTAINER, Text);	Label->box (FL_NO_BOX);	Label->callback ((Fl_Callback *) cb_click, (void *) this);	Label->labelfont (labelfont());	Label->labelsize (labelsize());	Label->labelcolor (labelcolor());	Label->align (FL_ALIGN_CENTER);        	Label->labelcolor (labelcolor());	Label->type (FL_TOGGLE_BUTTON);	Label->when (FL_WHEN_CHANGED);	Label->selection_color (selection_color());	Label->down_box (FL_NO_BOX);		Group->end ();	Scroll.end();		Contents->Add (Group, Icon, Label, _userdata, Text);	Scroll.redraw();}void Fl_Iconbrowser::remove (int idx){	WidgetNode *N = Contents->Get (idx+1);		while (N)	{		N->Group->position (N->Group->x(), N->Group->y()-18);		N = N->Next;	}	Contents->Remove (idx);	if ((18 * Contents->Size()) < Scroll.yposition())	{		if ((18 * Contents->Size()) < h()) Scroll.position (Scroll.xposition(), 0);		else Scroll.position (Scroll.xposition(), ((18 * Contents->Size())-h()));	}	Scroll.redraw();}void Fl_Iconbrowser::cb_click (Fl_Button *b, void *vd){	Fl_Iconbrowser *self = (Fl_Iconbrowser *) vd;	printf ("cb_click %08x\n", (unsigned int) self);	self->Selected = self->Contents->Find (b);	WidgetNode *N = self->Contents->Get (self->Selected);	if (N)	{		if (self->OldSelected > 0)		{			WidgetNode *O = self->Contents->Get (self->OldSelected);			if (O)			{				O->Group->color(FL_FREE_COL4);				//O->Group->color (FL_WHITE);				O->Group->box (FL_FLAT_BOX);				O->Label->labelcolor (self->labelcolor());				O->Group->redraw();			}		}		self->OldSelected = self->Selected;		N->Group->color (self->selection_color());		N->Group->box (FL_FLAT_BOX);		N->Label->value (0);		N->Label->labelcolor (FL_BLACK);		N->Group->redraw();		self->do_callback (self, N->Userdata);	}	else	{		self->Selected = 0;		if (self->OldSelected > 0)		{			WidgetNode *O = self->Contents->Get (self->OldSelected);			if (O)			{				O->Group->box (FL_FLAT_BOX);				O->Group->color(FL_FREE_COL4);				//O->Group->color (FL_WHITE);				O->Label->labelcolor (self->labelcolor());				O->Group->redraw();			}		}		self->OldSelected = 0;	}}void Fl_Iconbrowser::textsize (int i){	}const char *Fl_Iconbrowser::text (int idx){	WidgetNode *N = Contents->Get (idx);	if (N) return (N->Label->label());	return ((const char *) "");}void Fl_Iconbrowser::text (int idx, const char *lbl){	WidgetNode *N = Contents->Get (idx);	if (N)	{		delete (N->Text);		N->Text = new char[strlen (lbl)+1];		strcpy (N->Text, lbl);		N->Label->label (N->Text);		N->Group->redraw();	}}int Fl_Iconbrowser::value (void){	return (Selected);}void Fl_Iconbrowser::value (int val){	int pos =18*val;	WidgetNode *N;	if (Selected > 0)	{		N = Contents->Get (Selected);		if (N)		{			//N->Group->color (FL_WHITE);			N->Group->color(FL_FREE_COL4);			N->Group->box (FL_FLAT_BOX);			N->Label->value (0);			N->Label->labelcolor (labelcolor());			N->Group->redraw();		}	}	OldSelected = 0;	Selected = val;	if (Selected > 0)	{		N = Contents->Get (Selected);		if (N)		{			N->Group->color (selection_color());			N->Group->box (FL_FLAT_BOX);			N->Label->value (0);			//N->Label->labelcolor (FL_WHITE);			N->Label->labelcolor(FL_BLACK);			N->Group->redraw();			if (Scroll.yposition() > pos) Scroll.position (Scroll.xposition(), pos);			else			{				if ((Scroll.yposition() + h()) < pos) Scroll.position (Scroll.xposition(), pos - h());			}			Scroll.redraw();			OldSelected = val;		}	}}int Fl_Iconbrowser::size (void){	return Contents->Size();}

⌨️ 快捷键说明

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