/*
* This file is part of rasdaman community.
*
* Rasdaman community 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.
*
* Rasdaman community 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 rasdaman community. If not, see .
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see
* or contact Peter Baumann via .
/
/**
* PURPOSE:
*
* rView string viewer. Can display 1D MDD objects as strings
*
* COMMENTS:
* None
*/
// Standard wxWindows preamble.
#ifdef __GNUG__
#pragma implementation
#endif
// changed in wxWindows 2.4.2:
//#include "wx_prec.h"
#include
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include
#endif
#include
#include
#include
#ifdef EARLY_TEMPLATE
#define __EXECUTABLE__
#endif
#include "raslib/rmdebug.hh"
#include "raslib/primitivetype.hh"
#include "raslib/structuretype.hh"
#include "rviewTypes.hh"
#include "labelManager.hh"
#include "rviewUtils.hh"
#include "rviewDModes.hh"
#include "rviewPrefs.hh"
const int rviewStringViewer::strview_msgheight = 30;
const int rviewStringViewer::strview_minwidth = 100;
const int rviewStringViewer::strview_minheight = 64;
const int rviewStringViewer::strview_ctrly = 32;
const int rviewStringViewer::strview_totaly = rviewStringViewer::strview_ctrly + rviewDisplay::display_cheight;
rviewStringViewer::rviewStringViewer(mdd_frame *mf, unsigned int flags) :
rviewDisplay(mf, strview_ctrly, flags)
{
RMDBGONCE( 3, RMDebug::module_applications, "rviewStringViewer", "rviewStringViewer()" );
msgString = new wxMessage(ctrlPanel, "");
// init projection string -- this viewer works for 1D only!
strcpy(projString, "*:*");
project->SetValue(projString);
setModeDimension(1);
setMinimumViewerSize(strview_minwidth, strview_minheight);
}
int rviewStringViewer::openViewer(void)
{
RMDBGONCE( 3, RMDebug::module_applications, "rviewStringViewer", "openViewer()" );
if (dimMDD == 1)
{
if (baseSize == 1)
{
if (rviewDisplay::openViewer() == 0)
{
int w, h;
newProjection();
label();
frameWidth = -1;
frameHeight = -1;
GetClientSize(&w, &h);
SetSize(w, strview_totaly);
OnSize(w, h);
Show(TRUE);
return 0;
}
}
else
{
rviewErrorbox::reportError(lman->lookup("errorBaseType"), getFrameName(), "openViewer()");
}
}
else
{
rviewErrorbox::reportError(lman->lookup("errorModeDim"), getFrameName(), "openViewer()");
}
return -1;
}
const char *rviewStringViewer::getFrameName(void) const
{
return "rviewStringViewer";
}
rviewFrameType rviewStringViewer::getFrameType(void) const
{
return rviewFrameTypeStringViewer;
}
int rviewStringViewer::getViewerType(void) const
{
return RVIEW_RESDISP_STRVIEW;
}
rviewStringViewer::~rviewStringViewer(void)
{
RMDBGONCE( 3, RMDebug::module_applications, "rviewStringViewer", "~rviewStringViewer()" );
closeViewer();
}
void rviewStringViewer::OnSize(int w, int h)
{
int x, y;
GetClientSize(&x, &y);
msgString->SetSize(display_border, display_border + display_cheight, x - 2*display_border, strview_msgheight);
rviewDisplay::OnSize(w, h);
}
int rviewStringViewer::newProjection(void)
{
unsigned int len, i;
const char *b;
char *newMsg;
mapIndex = r_Point(dimMDD);
if (rviewParseProjection(getVirtualDomain(), pt1, pt2, projString, &freeDims, &mapIndex) != dimMDD)
{
rviewErrorbox::reportError(lman->lookup("errorProjection"), getFrameName(), "newProjection");
return -1;
}
if ((freeDims & 1) == 0)
{
rviewErrorbox::reportError(lman->lookup("errorProjectFree"), getFrameName(), "newProjection");
return -1;
}
len = pt2[0] - pt1[0] + 1;
newMsg = new char[len + 1];
b = mddObj->get_array() + pt1[0];
// make sure the message is printable
for (i=0; iSetLabel(newMsg);
delete [] newMsg;
return 0;
}