/*
* Seven Kingdoms: Ancient Adversaries
*
* Copyright 1997,1998 Enlight Software Ltd.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
//Filename : OVBROWIF.CPP
//Description : Object Visual Browse for the Interface
#include
#include
#include
#include
//---------- Begin of function VBrowseIF::VBrowseIF -------//
//
VBrowseIF::VBrowseIF()
{
vga_front_only = 0; // if 1, then it does all the bitmap processing on the front buffer only
}
//----------- End of function VBrowseIF::VBrowseIF ----------//
//---------- Begin of function VBrowseIF::init_var -------//
//
void VBrowseIF::init_var(int totalRec, int recNo)
{
VBrowse::init_var(totalRec, recNo);
scroll_bar.init( 1, x2-SCROLL_BAR_WIDTH, y1, x2, y2, disp_max_rec,
(disp_frame && x_max_rec==1 ? 1 : disp_max_rec), // only use record as scroller unit when it's a vertical browser with frame
total_rec_num, 1, 1 ); // last 1 - Interface mode if_flag is 1
}
//----------- End of function VBrowseIF::init_var ----------//
//--------- Begin of function VBrowseIF::paint ---------//
//
void VBrowseIF::paint()
{
vga.d3_panel_down( x1, y1, x2-SCROLL_BAR_WIDTH-3, y2, vga_front_only ); // the list content box
scroll_bar.paint();
}
//--------- End of function VBrowseIF::paint ---------//
//--------- Begin of function VBrowseIF::refresh ---------//
//
// Reset the no. of record and current record pointer and cause displaying
//
// [int] newRecNo = new current record no.
// (default : -1, no change)
// [int] newTotalRec = new total no. of records
// (default : -1, no change)
//
void VBrowseIF::refresh(int newRecNo, int newTotalRec)
{
if( !vga_front_only && !vga.use_back_buf )
vga.blt_buf( x1, y1, x2-SCROLL_BAR_WIDTH-3, y2, 0 ); // the list content box
VBrowse::refresh(newRecNo, newTotalRec);
}
//--------- End of function VBrowseIF::refresh ---------//
//-------- Begin of function VBrowseIF::disp_all ----------//
//
// Display all records on screen, highlight cur_rec_no
//
void VBrowseIF::disp_all()
{
int recNo;
if( !vga_front_only && !vga.use_back_buf )
vga.blt_buf( ix1, iy1, ix2, iy2, 0 ); // clear background
int scrollRecno = (disp_frame && x_max_rec==1) ? rec_no : top_rec_no;
scroll_bar.refresh( scrollRecno, 1, disp_max_rec,
(disp_frame && x_max_rec==1 ? 1 : disp_max_rec),
total_rec_num );
for( recNo=top_rec_no ; recNo<=total_rec_num && recNo recNo = the no. of the record to display
// putType = DISP_REC - display record
// DISP_HIGH - highlight rect
// CLEAR_HIGH- clear highlight rect
//
void VBrowseIF::disp_one(int recNo, int dispType)
{
if( none_record )
return;
int x,y;
y = iy1 + (recNo-top_rec_no)/x_max_rec * (rec_height+rec_y_space);
x = ix1 + (recNo-top_rec_no)%x_max_rec * (rec_width+rec_x_space);
//---- put a outline rect around the record if it is highlight ---//
if( disp_frame && dispType == CLEAR_HIGH && !vga.use_back_buf && !vga_front_only )
{
vga.blt_buf( x-2, y-2 , x+rec_width+1, y-2 , 0 ); // top
vga.blt_buf( x-2, y+rec_height+1, x+rec_width+1, y+rec_height+1, 0 ); // bottom
vga.blt_buf( x-2, y-2 , x-2 , y+rec_height+1, 0 ); // left
vga.blt_buf( x+rec_width+1, y-2 , x+rec_width+1, y+rec_height+1, 0 ); // right
}
if( dispType == DISP_REC )
disp_rec( recNo, x, y, INFO_REPAINT ); // call user defined function
if( disp_frame && dispType == DISP_HIGH )
{
//-------- draw d3 up border --------//
Vga::active_buf->draw_d3_up_border(x-2, y-2, x+rec_width+1, y+rec_height+1);
//--------- display the record --------//
int scrollRecno = (disp_frame && x_max_rec==1) ? recNo : top_rec_no;
scroll_bar.refresh( scrollRecno, 0, disp_max_rec,
(disp_frame && x_max_rec==1 ? 1 : disp_max_rec),
total_rec_num );
}
}
//--------- End of function VBrowseIF::disp_one ----------//
//-------- Begin of function VBrowseIF::disp_rec --------//
//
void VBrowseIF::disp_rec(int recNo, int x, int y, int refreshFlag)
{
(*disp_rec_func)( recNo, x, y, refreshFlag ); // call user defined function
sys.yield();
}
//---------- End of function VBrowseIF::disp_rec -----------//