Browse Source

resize on load bug fix

master
edgeeffect 21 years ago
parent
commit
a7edea8a3b
8 changed files with 81 additions and 80 deletions
  1. +44
    -40
      GUI/Widgets/Fl_DeviceGUI.C
  2. +16
    -27
      GUI/Widgets/Fl_DeviceGUI.h
  3. +2
    -2
      GUI/Widgets/SpiralGUI.C
  4. +9
    -3
      GUI/Widgets/SpiralGUI.H
  5. +1
    -1
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C
  6. +1
    -1
      SpiralSound/Plugins/LogicPlugin/LogicPluginGUI.C
  7. +2
    -3
      SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C
  8. +6
    -3
      SpiralSound/Plugins/SpiralPluginGUI.C

+ 44
- 40
GUI/Widgets/Fl_DeviceGUI.C View File

@@ -61,7 +61,8 @@ m_Name(Info.Name),
m_ID(-1), m_ID(-1),
m_DelMe(false), m_DelMe(false),
m_IsTerminal(Terminal), m_IsTerminal(Terminal),
m_Minimised(true)
m_Minimised(true),
m_Maximising(false)
{ {
for (int n=0; n<512; n++) Numbers[n]=n; for (int n=0; n<512; n++) Numbers[n]=n;


@@ -104,11 +105,10 @@ m_Minimised(true)
m_PluginWindow = PW; m_PluginWindow = PW;
if (m_PluginWindow) { if (m_PluginWindow) {
m_PluginWindow->hide(); m_PluginWindow->hide();
add (m_PluginWindow);
add (m_PluginWindow);
m_PluginWindow->ResizeCallback (&cb_Resize, this);
} }

resizable(NULL); resizable(NULL);

//Add the input/output ports //Add the input/output ports
Setup(Info, true); Setup(Info, true);
} }
@@ -118,6 +118,15 @@ void Fl_DeviceGUI::Clear()
end(); end();
} }


inline void Fl_DeviceGUI::cb_Resize_i (void) {
if (m_PluginWindow && !m_DelMe && !m_Minimised && !m_Maximising) Maximise();
}

void Fl_DeviceGUI::cb_Resize (Fl_DeviceGUI *o) {
o->cb_Resize_i();
}


int Fl_DeviceGUI::handle (int event) { int Fl_DeviceGUI::handle (int event) {
int t=Fl_Group::handle(event); int t=Fl_Group::handle(event);


@@ -128,13 +137,7 @@ int Fl_DeviceGUI::handle (int event) {
} }
} }


if (m_PluginWindow && !m_DelMe) {
if (m_PluginWindow->needs_resize() && !m_Minimised) {
Maximise();
m_PluginWindow->needs_resize(false);
}
}

// this bit might be supposed to be in cb_resize_i, I'm not sure - Andy Preston
if (!m_Minimised && !m_PluginWindow->visible()) { if (!m_Minimised && !m_PluginWindow->visible()) {
Minimise(); Minimise();
if (m_IconButton) m_IconButton->show(); if (m_IconButton) m_IconButton->show();
@@ -152,7 +155,8 @@ void Fl_DeviceGUI::Minimise()


void Fl_DeviceGUI::Maximise() void Fl_DeviceGUI::Maximise()
{ {
m_Minimised=false;
m_Minimised=false;
m_Maximising=true;
if (m_PluginWindow->h()+2>m_MiniHeight) if (m_PluginWindow->h()+2>m_MiniHeight)
{ {
Resize(m_PluginWindow->w()+(PortGroupWidth*2)-5,m_PluginWindow->h()+2); Resize(m_PluginWindow->w()+(PortGroupWidth*2)-5,m_PluginWindow->h()+2);
@@ -165,6 +169,7 @@ void Fl_DeviceGUI::Maximise()
m_IconButton->hide(); m_IconButton->hide();
parent()->redraw(); parent()->redraw();
((Fl_Canvas*)parent())->ToTop(this); ((Fl_Canvas*)parent())->ToTop(this);
m_Maximising=false;
} }


void Fl_DeviceGUI::Resize(int width, int height) void Fl_DeviceGUI::Resize(int width, int height)
@@ -200,22 +205,22 @@ void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)
// delete the current ports // delete the current ports
for(vector<Fl_PortButton*>::iterator i=m_PortVec.begin(); for(vector<Fl_PortButton*>::iterator i=m_PortVec.begin();
i!=m_PortVec.end(); i++) i!=m_PortVec.end(); i++)
{
{
remove(*i); remove(*i);
delete(*i); delete(*i);
} }


m_PortVec.clear(); m_PortVec.clear();
int InputX=x()+2; int InputX=x()+2;
int OutputX=0; int OutputX=0;
int StartY=y()+TitleBarHeight; int StartY=y()+TitleBarHeight;
int PortDist=10; int PortDist=10;
int PortNum=0; int PortNum=0;
m_MiniHeight=Info.Height+TitleBarHeight; m_MiniHeight=Info.Height+TitleBarHeight;
bool Maximised = (m_PluginWindow && m_PluginWindow->visible()); bool Maximised = (m_PluginWindow && m_PluginWindow->visible());
if (!Maximised)
if (!Maximised)
{ {
h(m_MiniHeight); h(m_MiniHeight);
OutputX=x()+PortGroupWidth+Info.Width+4; OutputX=x()+PortGroupWidth+Info.Width+4;
@@ -224,7 +229,7 @@ void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)
{ {
OutputX=x()+w()-8; OutputX=x()+w()-8;
} }
for (int n=0; n<Info.NumInputs; n++) for (int n=0; n<Info.NumInputs; n++)
{ {
Fl_PortButton* NewInput = new Fl_PortButton(InputX,StartY+PortDist*n,PortSize,PortSize,""); Fl_PortButton* NewInput = new Fl_PortButton(InputX,StartY+PortDist*n,PortSize,PortSize,"");
@@ -232,7 +237,7 @@ void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)
NewInput->SetType(Fl_PortButton::INPUT); NewInput->SetType(Fl_PortButton::INPUT);
NewInput->value(false); NewInput->value(false);
NewInput->box(FL_ROUNDED_BOX); NewInput->box(FL_ROUNDED_BOX);
Fl_Color col = (Fl_Color) WIRE_COL0; Fl_Color col = (Fl_Color) WIRE_COL0;
switch (Info.PortTypes[n]) { switch (Info.PortTypes[n]) {
case 0: col = (Fl_Color) WIRE_COL0; case 0: col = (Fl_Color) WIRE_COL0;
@@ -248,15 +253,15 @@ void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)
default: col = (Fl_Color) WIRE_COL0; default: col = (Fl_Color) WIRE_COL0;
} }
NewInput->selection_color(col); NewInput->selection_color(col);
NewInput->down_box(FL_ROUNDED_BOX); NewInput->down_box(FL_ROUNDED_BOX);
NewInput->tooltip(Info.PortTips[n].c_str()); NewInput->tooltip(Info.PortTips[n].c_str());
NewInput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]);
NewInput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]);
m_PortVec.push_back(NewInput); m_PortVec.push_back(NewInput);
add(NewInput); add(NewInput);
PortNum++; PortNum++;
} }
for (int n=0; n<Info.NumOutputs; n++) for (int n=0; n<Info.NumOutputs; n++)
{ {
Fl_PortButton* NewOutput= NewOutput = new Fl_PortButton(OutputX,StartY+PortDist*n,PortSize,PortSize,""); Fl_PortButton* NewOutput= NewOutput = new Fl_PortButton(OutputX,StartY+PortDist*n,PortSize,PortSize,"");
@@ -280,20 +285,19 @@ void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime)
default: col = (Fl_Color) WIRE_COL0; default: col = (Fl_Color) WIRE_COL0;
} }
NewOutput->selection_color(col); NewOutput->selection_color(col);


NewOutput->down_box(FL_ROUNDED_BOX); NewOutput->down_box(FL_ROUNDED_BOX);
NewOutput->tooltip(Info.PortTips[n+Info.NumInputs].c_str()); NewOutput->tooltip(Info.PortTips[n+Info.NumInputs].c_str());
NewOutput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]);
NewOutput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]);
m_PortVec.push_back(NewOutput); m_PortVec.push_back(NewOutput);
add(NewOutput); add(NewOutput);
PortNum++; PortNum++;
} }
} }


bool Fl_DeviceGUI::AddConnection(int n)
{
if ( n < (int)m_PortVec.size() )
bool Fl_DeviceGUI::AddConnection(int n)
{
if ( n < (int)m_PortVec.size() )
{ {
m_PortVec[n]->Add(); m_PortVec[n]->Add();
m_PortVec[n]->value(1); m_PortVec[n]->value(1);
@@ -302,15 +306,15 @@ bool Fl_DeviceGUI::AddConnection(int n)
} }
return false; return false;
} }
void Fl_DeviceGUI::RemoveConnection(int n)
{
m_PortVec[n]->Remove();
if (!m_PortVec[n]->GetCount())
{
m_PortVec[n]->value(0);
void Fl_DeviceGUI::RemoveConnection(int n)
{
m_PortVec[n]->Remove();
if (!m_PortVec[n]->GetCount())
{
m_PortVec[n]->value(0);
redraw(); redraw();
}
}
} }


inline void Fl_DeviceGUI::cb_Port_i(Fl_Button* o, void* v) inline void Fl_DeviceGUI::cb_Port_i(Fl_Button* o, void* v)
@@ -318,11 +322,11 @@ inline void Fl_DeviceGUI::cb_Port_i(Fl_Button* o, void* v)
int Port=*(int*)(v); int Port=*(int*)(v);
Fl_PortButton *PortButton = (Fl_PortButton *)o; Fl_PortButton *PortButton = (Fl_PortButton *)o;
PortType Pt; PortType Pt;
if (m_DelMe) return; if (m_DelMe) return;
// Find out if this is an input or an output. // Find out if this is an input or an output.
if (Port<m_Info.NumInputs)
if (Port<m_Info.NumInputs)
{ {
Pt=INPUT; Pt=INPUT;
} }
@@ -331,16 +335,16 @@ inline void Fl_DeviceGUI::cb_Port_i(Fl_Button* o, void* v)
Pt=OUTPUT; Pt=OUTPUT;
Port-=m_Info.NumInputs; Port-=m_Info.NumInputs;
} }
if (PortButton->GetLastButton()==1) if (PortButton->GetLastButton()==1)
{ {
((Fl_Canvas*)(parent()))->PortClicked(this,Pt,Port,1); ((Fl_Canvas*)(parent()))->PortClicked(this,Pt,Port,1);
} }
else else
{ {
((Fl_Canvas*)(parent()))->PortClicked(this,Pt,Port,0);
((Fl_Canvas*)(parent()))->PortClicked(this,Pt,Port,0);
} }
} }
void Fl_DeviceGUI::cb_Port(Fl_Button* o, void* v) void Fl_DeviceGUI::cb_Port(Fl_Button* o, void* v)
{((Fl_DeviceGUI*)(o->parent()))->cb_Port_i(o,v);} {((Fl_DeviceGUI*)(o->parent()))->cb_Port_i(o,v);}


+ 16
- 27
GUI/Widgets/Fl_DeviceGUI.h View File

@@ -52,13 +52,13 @@ public:
Fl_PortButton(int x, int y, int w, int h, char *n); Fl_PortButton(int x, int y, int w, int h, char *n);
virtual ~Fl_PortButton() {}; virtual ~Fl_PortButton() {};
void SetType(Type s) { m_Type=s; } void SetType(Type s) { m_Type=s; }
virtual int handle(int event);
virtual int handle(int event);
void Add() { m_ConnectionCount++; } void Add() { m_ConnectionCount++; }
void Remove() { if (m_ConnectionCount>0) m_ConnectionCount--; } void Remove() { if (m_ConnectionCount>0) m_ConnectionCount--; }
int GetCount() { return m_ConnectionCount; } int GetCount() { return m_ConnectionCount; }
int GetLastButton() { return m_LastButton; } int GetLastButton() { return m_LastButton; }
private: private:


Type m_Type; Type m_Type;
@@ -69,7 +69,7 @@ private:
struct DeviceGUIInfo struct DeviceGUIInfo
{ {
int XPos; int XPos;
int YPos;
int YPos;
int Width; int Width;
int Height; int Height;
int NumInputs; int NumInputs;
@@ -93,13 +93,13 @@ public:
bool Killed() { return m_DelMe; } bool Killed() { return m_DelMe; }
int GetPortX(int n) { return m_PortVec[n]->x()+PortSize/2; } int GetPortX(int n) { return m_PortVec[n]->x()+PortSize/2; }
int GetPortY(int n) { return m_PortVec[n]->y()+PortSize/2; } int GetPortY(int n) { return m_PortVec[n]->y()+PortSize/2; }
// aesthetic, to keep track of number of connections to know whether to
// aesthetic, to keep track of number of connections to know whether to
// draw the port as occupied or not. // draw the port as occupied or not.
bool AddConnection(int n); bool AddConnection(int n);
void RemoveConnection(int n); void RemoveConnection(int n);
bool GetPortValue(int n) { return m_PortVec[n]->value(); }
bool GetPortValue(int n) { return m_PortVec[n]->value(); }
const DeviceGUIInfo* GetInfo() { return &m_Info; } const DeviceGUIInfo* GetInfo() { return &m_Info; }
SpiralGUIType* GetPluginWindow() { return m_PluginWindow; } SpiralGUIType* GetPluginWindow() { return m_PluginWindow; }
string GetName() { return m_Name; } string GetName() { return m_Name; }
@@ -108,47 +108,36 @@ public:


void Minimise(); void Minimise();
void Maximise(); void Maximise();
// automatically called from the constructor, but may be redone at any time. // automatically called from the constructor, but may be redone at any time.
virtual void Setup(const DeviceGUIInfo& Info, bool FirstTime = false);
virtual void Setup(const DeviceGUIInfo& Info, bool FirstTime = false);
virtual void Clear(); virtual void Clear();
int GetPortType(int n) { return m_Info.PortTypes[n]; } int GetPortType(int n) { return m_Info.PortTypes[n]; }
// do we belong to a plugin that is an output? // do we belong to a plugin that is an output?
bool IsTerminal() { return m_IsTerminal; } bool IsTerminal() { return m_IsTerminal; }

protected: protected:

DeviceGUIInfo m_Info; DeviceGUIInfo m_Info;

Fl_DragBar* m_DragBar; Fl_DragBar* m_DragBar;
SpiralGUIType* m_PluginWindow; SpiralGUIType* m_PluginWindow;
Fl_Pixmap* m_Icon; Fl_Pixmap* m_Icon;
Fl_Button* m_IconButton; Fl_Button* m_IconButton;
Fl_Menu_Button* m_Menu;
Fl_Menu_Button* m_Menu;
private: private:

void Resize(int width, int height); void Resize(int width, int height);

inline void cb_Resize_i (void);
static void cb_Resize (Fl_DeviceGUI *o);
inline void cb_Port_i(Fl_Button* o, void* v); inline void cb_Port_i(Fl_Button* o, void* v);
static void cb_Port(Fl_Button* o, void* v); static void cb_Port(Fl_Button* o, void* v);
inline void cb_Rename_i(Fl_Menu_Button* o, void* v); inline void cb_Rename_i(Fl_Menu_Button* o, void* v);
static void cb_Rename(Fl_Menu_Button* o, void* v); static void cb_Rename(Fl_Menu_Button* o, void* v);
inline void cb_Delete_i(Fl_Menu_Button* o, void* v); inline void cb_Delete_i(Fl_Menu_Button* o, void* v);
static void cb_Delete(Fl_Menu_Button* o, void* v); static void cb_Delete(Fl_Menu_Button* o, void* v);
vector<Fl_PortButton*> m_PortVec; vector<Fl_PortButton*> m_PortVec;
static int Numbers[512]; static int Numbers[512];

string m_Name; string m_Name;
int m_ID;
bool m_DelMe;
bool m_IsTerminal;
bool m_Minimised;

int m_MiniWidth, m_MiniHeight;
int m_ID, m_MiniWidth, m_MiniHeight;
bool m_DelMe, m_IsTerminal, m_Minimised, m_Maximising;
}; };


#endif #endif

+ 2
- 2
GUI/Widgets/SpiralGUI.C View File

@@ -17,10 +17,10 @@


#include "SpiralGUI.H" #include "SpiralGUI.H"


// Default label = 0
// Default label = 0
SpiralGUIType::SpiralGUIType (int x, int y, int w, int h, const char *label) : SpiralGUIType::SpiralGUIType (int x, int y, int w, int h, const char *label) :
Fl_Group (x, y, w, h, label), Fl_Group (x, y, w, h, label),
m_NeedsResize (false) {
m_ResizeSpiralGUI (0) {
} }


SpiralGUIType::~SpiralGUIType () { SpiralGUIType::~SpiralGUIType () {


+ 9
- 3
GUI/Widgets/SpiralGUI.H View File

@@ -20,14 +20,20 @@


#include <FL/Fl_Group.H> #include <FL/Fl_Group.H>


class Fl_DeviceGUI;
class SpiralGUIType;
typedef void (SpiralGUISizeCB)(Fl_DeviceGUI *o);

class SpiralGUIType : public Fl_Group { class SpiralGUIType : public Fl_Group {
public: public:
SpiralGUIType (int x, int y, int w, int h, const char *label = 0); SpiralGUIType (int x, int y, int w, int h, const char *label = 0);
~SpiralGUIType (); ~SpiralGUIType ();
bool needs_resize (void) { return m_NeedsResize; }
void needs_resize (bool nr) { m_NeedsResize = nr; }
void ResizeCallback (SpiralGUISizeCB *c, Fl_DeviceGUI *d) { m_ResizeSpiralGUI = c; m_DeviceGUI = d; }
protected:
void DoResizeCallback (void) { if (m_ResizeSpiralGUI) m_ResizeSpiralGUI(m_DeviceGUI); }
private: private:
bool m_NeedsResize;
SpiralGUISizeCB *m_ResizeSpiralGUI;
Fl_DeviceGUI *m_DeviceGUI;
}; };


#endif #endif

+ 1
- 1
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C View File

@@ -1144,7 +1144,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
m_GUICH->Wait(); m_GUICH->Wait();
} }
SelectPlugin(); SelectPlugin();
needs_resize (true);
DoResizeCallback ();
} }
void LADSPAPluginGUI::cb_Select(Fl_Choice* o) void LADSPAPluginGUI::cb_Select(Fl_Choice* o)
{ // Group GUI { // Group GUI


+ 1
- 1
SpiralSound/Plugins/LogicPlugin/LogicPluginGUI.C View File

@@ -136,7 +136,7 @@ inline void LogicPluginGUI::cb_Inputs_i (Fl_Counter* o, void* v) {
m_GUICH->Set ("Inputs", int (o->value ())); m_GUICH->Set ("Inputs", int (o->value ()));
m_GUICH->SetCommand (LogicPlugin::SETINPUTS); m_GUICH->SetCommand (LogicPlugin::SETINPUTS);
m_GUICH->Wait (); m_GUICH->Wait ();
needs_resize (true);
DoResizeCallback ();
} }
} }




+ 2
- 3
SpiralSound/Plugins/MidiPlugin/MidiPluginGUI.C View File

@@ -283,8 +283,7 @@ inline void MidiPluginGUI::cb_AddControl_i(Fl_Button* o, void* v)
m_GUICH->SetData("Name",Temp); m_GUICH->SetData("Name",Temp);
m_GUICH->SetCommand(MidiPlugin::ADDCONTROL); m_GUICH->SetCommand(MidiPlugin::ADDCONTROL);
m_GUICH->Wait (); m_GUICH->Wait ();
needs_resize (true);

DoResizeCallback ();
//m_Plugin->AddControl(c,List[c]); //m_Plugin->AddControl(c,List[c]);
} }
} }
@@ -295,7 +294,7 @@ inline void MidiPluginGUI::cb_RemoveControl_i(Fl_Button* o, void* v)
{ {
m_GUICH->SetCommand(MidiPlugin::DELCONTROL); m_GUICH->SetCommand(MidiPlugin::DELCONTROL);
m_GUICH->Wait (); m_GUICH->Wait ();
needs_resize (true);
DoResizeCallback ();
} }
void MidiPluginGUI::cb_RemoveControl(Fl_Button* o, void* v) void MidiPluginGUI::cb_RemoveControl(Fl_Button* o, void* v)
{ ((MidiPluginGUI*)(o->parent()))->cb_RemoveControl_i(o,v);} { ((MidiPluginGUI*)(o->parent()))->cb_RemoveControl_i(o,v);}


+ 6
- 3
SpiralSound/Plugins/SpiralPluginGUI.C View File

@@ -53,6 +53,8 @@ SpiralGUIType(0,0,w,h,"")
m_Help->down_box(FL_NO_BOX); m_Help->down_box(FL_NO_BOX);
m_Help->callback((Fl_Callback*)cb_Help); m_Help->callback((Fl_Callback*)cb_Help);
add(m_Help); add(m_Help);

resizable(NULL);
} }


SpiralPluginGUI::~SpiralPluginGUI() SpiralPluginGUI::~SpiralPluginGUI()
@@ -61,9 +63,10 @@ SpiralPluginGUI::~SpiralPluginGUI()
Fl::check(); Fl::check();
} }


void SpiralPluginGUI::resize (int x, int y, int w, int h) {
if (w != this->w() || h != this->h()) needs_resize (true);
SpiralGUIType::resize (x, y, w, h);
void SpiralPluginGUI::resize (int newx, int newy, int neww, int newh) {
m_Help->position (x()+neww-11, y()+2);
SpiralGUIType::resize (newx, newy, neww, newh);
DoResizeCallback ();
} }


void SpiralPluginGUI::Update() void SpiralPluginGUI::Update()


Loading…
Cancel
Save