You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

168 lines
4.5 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
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 3 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 <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
#include "plSDLBrowserDlg.h"
#include "../plSDL/plSDL.h"
void plSDLBrowserDlg::OnInitDialog()
{
plDialog::OnInitDialog();
const int kWinPos=250;
plRect r=GetWindowRect();
r.Min.X+=kWinPos;
r.Min.Y+=kWinPos;
r.Max.X+=kWinPos;
r.Max.Y+=kWinPos;
MoveWindow(r, true);
fSDRecSlider.Hide();
if (IGetCurrentStateDataRec())
IPopulateVarListBox(IGetCurrentStateDataRec());
}
void plSDLBrowserDlg::OnOKClicked()
{
EndDialogTrue();
}
void plSDLBrowserDlg::OnCancelClicked()
{
EndDialogFalse();
fCancelled=true;
}
void plSDLBrowserDlg::OnVarListSelChanged()
{
int cur=fVarListBox.GetCurrent();
std::string curString=fVarListBox.GetString(cur);
if (curString=="..")
return;
plStateVariable* var=IGetListBoxVar(cur);
hsAssert(var, "nil var?");
if (var->GetAsSimpleStateVar())
{
plSimpleStateVariable* sVar=var->GetAsSimpleStateVar();
IPopulateValueComboBox(sVar);
fValueComboBox.SetCurrent(0);
fCurComboListBoxPos=0;
}
}
void plSDLBrowserDlg::OnVarListDoubleClicked()
{
fCurSDVar=nil;
fSDRecSlider.Hide();
int cur=fVarListBox.GetCurrent();
std::string curString=fVarListBox.GetString(cur);
if (curString=="..")
{
IPopStateDataRec();
IPopulateVarListBox(IGetCurrentStateDataRec());
return;
}
plStateVariable* var=IGetListBoxVar(cur);
hsAssert(var, "nil var?");
if (var->GetAsSDStateVar())
{
// user doubleclicked an SDVar
plSDStateVariable* sdVar=var->GetAsSDStateVar();
if (sdVar->GetCount()==0)
{
sdVar->Resize(1);
}
else
if (sdVar->GetCount()>1)
{
fSDRecSlider.Show();
int max=var->GetCount();
fSDRecSlider.SetRange(0, max-1);
}
IPushStateDataRec(sdVar->GetStateDataRecord(0));
IPopulateVarListBox(IGetCurrentStateDataRec());
fCurSDVar=sdVar;
fValueComboBox.Empty();
}
}
void plSDLBrowserDlg::OnValueComboSelChanged()
{
int cur=fValueComboBox.GetCurrent();
hsStatusMessageF("Changing cur combo box sel to %d\n", cur);
if (cur>=0)
fCurComboListBoxPos=cur;
}
void plSDLBrowserDlg::OnValueComboEditChanged()
{
if (fReadOnly)
return;
// get var from list box
int listBoxPos=fVarListBox.GetCurrent();
plStateVariable* var=IGetListBoxVar(listBoxPos);
hsAssert(var, "nil var?");
hsAssert(var->GetAsSimpleStateVar(), "wrong type of var");
// change value of var
int comboxBoxPos=fValueComboBox.GetCurrent();
if (comboxBoxPos<0)
comboxBoxPos=fCurComboListBoxPos;
if (comboxBoxPos>=0)
{
std::string editString=fValueComboBox.GetText();
if (var->GetAsSimpleStateVar()->SetFromString(editString.c_str(), comboxBoxPos))
{
hsStatusMessageF("changing item %d to %s", comboxBoxPos, editString.c_str());
fValueComboBox.InsertString(comboxBoxPos, editString.c_str());
fValueComboBox.DeleteString(comboxBoxPos+1);
var->GetAsSimpleStateVar()->SetDirty(true);
var->GetAsSimpleStateVar()->SetUsed(true);
}
#if 0
editString.reverse();
fValueComboBox.SetText(editString.c_str());
#endif
}
fModified=true;
}
void plSDLBrowserDlg::OnSDRecSliderChanged()
{
int pos=fSDRecSlider.GetPos();
IPopStateDataRec();
IPushStateDataRec(fCurSDVar->GetStateDataRecord(pos));
IPopulateVarListBox(IGetCurrentStateDataRec());
fValueComboBox.Empty();
hsStatusMessageF("Slider pos=%d\n", pos);
}