dl-fldigi/src/waterfall/colorbox.cxx

144 wiersze
3.7 KiB
C++

// ----------------------------------------------------------------------------
// colorbox.cxx
//
// Copyright (C) 2007-2008
// Dave Freese, W1HKJ
//
// This file is part of fldigi.
//
// Fldigi 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 3 of the License, or
// (at your option) any later version.
//
// Fldigi 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 fldigi. If not, see <http://www.gnu.org/licenses/>.
// ----------------------------------------------------------------------------
#include <config.h>
#include <string>
#include <FL/Fl_Color_Chooser.H>
#include "gettext.h"
#include "colorbox.h"
#include "waterfall.h"
#include "confdialog.h"
#include "main.h"
#include "fl_digi.h"
#include "fileselect.h"
#include "debug.h"
using namespace std;
void colorbox::draw() {
int ypos = y() + 2;
int xpos;
int ht = h() - 4;
int wd = w() - 4;
draw_box();
for(int i = 0; i < wd; i++){
xpos = x() + 2 + i;
int xc = i * 256 / wd;
fl_rectf (xpos, ypos, 1, ht, mag2RGBI[xc].R, mag2RGBI[xc].G, mag2RGBI[xc].B);
}
}
void setColorButtons()
{
for (int i = 0; i < 9; i++) {
btnColor[i]->color( fl_rgb_color( palette[i].R, palette[i].G, palette[i].B ) );
btnColor[i]->redraw();
}
}
void selectColor(int n)
{
uchar r, g, b;
r = palette[n].R;
g = palette[n].G;
b = palette[n].B;
fl_color_chooser("Spectrum", r, g, b);
palette[n].R = r;
palette[n].G = g;
palette[n].B = b;
btnColor[n]->color( fl_rgb_color( palette[n].R, palette[n].G, palette[n].B ) );
btnColor[n]->redraw();
wf->setcolors();
WF_Palette->redraw();
}
static string palfilename = "";
static string palLabelStr;
void loadPalette()
{
int r,g,b;
FILE *clrfile = NULL;
if (palfilename.size() == 0) {
palfilename = PalettesDir;
palfilename.append ("fldigi.pal");
}
const char *p = FSEL::select(_("Open palette"), _("Fldigi palette\t*.pal"), palfilename.c_str());
if (!p) return;
if (!*p) return;
if ((clrfile = fopen(p, "r")) != NULL) {
for (int i = 0; i < 9; i++) {
if (fscanf(clrfile, "%d;%d;%d\n", &r, &g, &b) == EOF) {
if (ferror(clrfile))
LOG_PERROR("fscanf");
else
LOG_ERROR("unexpected EOF");
fclose(clrfile);
return;
}
palette[i].R = r;
palette[i].G = g;
palette[i].B = b;
}
fclose(clrfile);
wf->setcolors();
setColorButtons();
palfilename = p;
palLabelStr = p;
size_t pos = palLabelStr.find_last_of('/');
if (pos != string::npos) palLabelStr.erase(0, pos+1);
palLabelStr = _("Palette: ") + palLabelStr;
WF_Palette->label(palLabelStr.c_str());
WF_Palette->redraw();
progdefaults.PaletteName = palLabelStr;
}
}
void savePalette()
{
FILE *clrfile = NULL;
if (palfilename.size() == 0) {
palfilename = PalettesDir;
palfilename.append ("fldigi.pal");
}
const char *p = FSEL::saveas(_("Save palette"), _("Fldigi palette\t*.pal"), palfilename.c_str());
if (!p) return;
if ((clrfile = fopen(p, "w")) != NULL) {
for (int i = 0; i < 9; i++) {
fprintf(clrfile, "%3d;%3d;%3d\n", palette[i].R, palette[i].G, palette[i].B );
}
fclose(clrfile);
palfilename = p;
palLabelStr = p;
size_t pos = palLabelStr.find_last_of('/');
if (pos != string::npos) palLabelStr.erase(0, pos+1);
palLabelStr = _("Palette: ") + palLabelStr;
WF_Palette->label(palLabelStr.c_str());
WF_Palette->redraw();
progdefaults.PaletteName = palLabelStr;
}
}