radiant: make rotate/scale dialogs non-modal
git-svn-id: svn://svn.icculus.org/netradiant/trunk@95 61c419a2-8eb2-4b30-bcec-8cead039b335
This commit is contained in:
parent
8cd295151a
commit
3aab20c1d6
|
|
@ -2,6 +2,7 @@
|
||||||
* radiant: add a "Strafe Mode" option
|
* radiant: add a "Strafe Mode" option
|
||||||
* radiant: ctrl-tab now focuses all XYZ views in the three-part view (as
|
* radiant: ctrl-tab now focuses all XYZ views in the three-part view (as
|
||||||
that is what the user is likely to want there)
|
that is what the user is likely to want there)
|
||||||
|
* radiant: make rotate/scale dialogs non-modal
|
||||||
|
|
||||||
2008-09-18 Rudolf Polzer divVerent(at)alientrap.org
|
2008-09-18 Rudolf Polzer divVerent(at)alientrap.org
|
||||||
* radiant: handle missing anisotropy extension; fixes display bug on
|
* radiant: handle missing anisotropy extension; fixes display bug on
|
||||||
|
|
|
||||||
7
Makefile
7
Makefile
|
|
@ -105,10 +105,13 @@ endif
|
||||||
CPPFLAGS_COMMON += -D_DEBUG
|
CPPFLAGS_COMMON += -D_DEBUG
|
||||||
LDFLAGS_COMMON +=
|
LDFLAGS_COMMON +=
|
||||||
else ifeq ($(BUILD),profile)
|
else ifeq ($(BUILD),profile)
|
||||||
|
ifeq ($(findstring $(CFLAGS),-g),)
|
||||||
|
CFLAGS_COMMON += -g
|
||||||
|
# only add -g if no -g flag is in $(CFLAGS)
|
||||||
|
endif
|
||||||
ifeq ($(findstring $(CFLAGS),-O),)
|
ifeq ($(findstring $(CFLAGS),-O),)
|
||||||
CFLAGS_COMMON += -O
|
CFLAGS_COMMON += -O
|
||||||
# only add -O3 if no -O flag is in $(CFLAGS)
|
# only add -O if no -O flag is in $(CFLAGS)
|
||||||
# to allow overriding the optimizations
|
|
||||||
endif
|
endif
|
||||||
CFLAGS_COMMON += -pg
|
CFLAGS_COMMON += -pg
|
||||||
CPPFLAGS_COMMON +=
|
CPPFLAGS_COMMON +=
|
||||||
|
|
|
||||||
|
|
@ -970,247 +970,297 @@ struct RotateDialog
|
||||||
GtkSpinButton* x;
|
GtkSpinButton* x;
|
||||||
GtkSpinButton* y;
|
GtkSpinButton* y;
|
||||||
GtkSpinButton* z;
|
GtkSpinButton* z;
|
||||||
|
GtkWindow *window;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void rotatedlg_apply (GtkWidget *widget, RotateDialog* rotateDialog)
|
static gboolean rotatedlg_apply (GtkWidget *widget, RotateDialog* rotateDialog)
|
||||||
{
|
{
|
||||||
Vector3 eulerXYZ;
|
Vector3 eulerXYZ;
|
||||||
|
|
||||||
eulerXYZ[0] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->x));
|
eulerXYZ[0] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->x));
|
||||||
gtk_spin_button_set_value(rotateDialog->x, 0.0f); // reset to 0 on Apply
|
|
||||||
|
|
||||||
eulerXYZ[1] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->y));
|
eulerXYZ[1] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->y));
|
||||||
gtk_spin_button_set_value(rotateDialog->y, 0.0f);
|
|
||||||
|
|
||||||
eulerXYZ[2] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->z));
|
eulerXYZ[2] = static_cast<float>(gtk_spin_button_get_value(rotateDialog->z));
|
||||||
gtk_spin_button_set_value(rotateDialog->z, 0.0f);
|
|
||||||
|
|
||||||
StringOutputStream command;
|
StringOutputStream command;
|
||||||
command << "rotateSelectedEulerXYZ -x " << eulerXYZ[0] << " -y " << eulerXYZ[1] << " -z " << eulerXYZ[2];
|
command << "rotateSelectedEulerXYZ -x " << eulerXYZ[0] << " -y " << eulerXYZ[1] << " -z " << eulerXYZ[2];
|
||||||
UndoableCommand undo(command.c_str());
|
UndoableCommand undo(command.c_str());
|
||||||
|
|
||||||
GlobalSelectionSystem().rotateSelected(quaternion_for_euler_xyz_degrees(eulerXYZ));
|
GlobalSelectionSystem().rotateSelected(quaternion_for_euler_xyz_degrees(eulerXYZ));
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean rotatedlg_cancel (GtkWidget *widget, RotateDialog* rotateDialog)
|
||||||
|
{
|
||||||
|
gtk_widget_hide(GTK_WIDGET(rotateDialog->window));
|
||||||
|
|
||||||
|
gtk_spin_button_set_value(rotateDialog->x, 0.0f); // reset to 0 on close
|
||||||
|
gtk_spin_button_set_value(rotateDialog->y, 0.0f);
|
||||||
|
gtk_spin_button_set_value(rotateDialog->z, 0.0f);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean rotatedlg_ok (GtkWidget *widget, RotateDialog* rotateDialog)
|
||||||
|
{
|
||||||
|
rotatedlg_apply(widget, rotateDialog);
|
||||||
|
rotatedlg_cancel(widget, rotateDialog);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean rotatedlg_delete (GtkWidget *widget, GdkEventAny *event, RotateDialog* rotateDialog)
|
||||||
|
{
|
||||||
|
rotatedlg_cancel(widget, rotateDialog);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
RotateDialog g_rotate_dialog;
|
||||||
void DoRotateDlg()
|
void DoRotateDlg()
|
||||||
{
|
{
|
||||||
ModalDialog dialog;
|
if(g_rotate_dialog.window == NULL)
|
||||||
RotateDialog rotateDialog;
|
|
||||||
|
|
||||||
GtkWindow* window = create_dialog_window(MainFrame_getWindow(), "Arbitrary rotation", G_CALLBACK(dialog_delete_callback), &dialog);
|
|
||||||
|
|
||||||
GtkAccelGroup* accel = gtk_accel_group_new();
|
|
||||||
gtk_window_add_accel_group(window, accel);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
GtkHBox* hbox = create_dialog_hbox(4, 4);
|
g_rotate_dialog.window = create_dialog_window(MainFrame_getWindow(), "Arbitrary rotation", G_CALLBACK(rotatedlg_delete), &g_rotate_dialog);
|
||||||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(hbox));
|
|
||||||
{
|
|
||||||
GtkTable* table = create_dialog_table(3, 2, 4, 4);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), TRUE, TRUE, 0);
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new (" X ");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 0, 1,
|
|
||||||
(GtkAttachOptions) (0),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new (" Y ");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 1, 2,
|
|
||||||
(GtkAttachOptions) (0),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new (" Z ");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 2, 3,
|
|
||||||
(GtkAttachOptions) (0),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
|
||||||
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
|
||||||
gtk_widget_show(GTK_WIDGET(spin));
|
|
||||||
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 0, 1,
|
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
|
||||||
gtk_spin_button_set_wrap(spin, TRUE);
|
|
||||||
|
|
||||||
gtk_widget_grab_focus(GTK_WIDGET(spin));
|
GtkAccelGroup* accel = gtk_accel_group_new();
|
||||||
|
gtk_window_add_accel_group(g_rotate_dialog.window, accel);
|
||||||
|
|
||||||
rotateDialog.x = spin;
|
{
|
||||||
}
|
GtkHBox* hbox = create_dialog_hbox(4, 4);
|
||||||
{
|
gtk_container_add(GTK_CONTAINER(g_rotate_dialog.window), GTK_WIDGET(hbox));
|
||||||
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
{
|
||||||
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
GtkTable* table = create_dialog_table(3, 2, 4, 4);
|
||||||
gtk_widget_show(GTK_WIDGET(spin));
|
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), TRUE, TRUE, 0);
|
||||||
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 1, 2,
|
{
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
GtkWidget* label = gtk_label_new (" X ");
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
gtk_widget_show (label);
|
||||||
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
gtk_table_attach(table, label, 0, 1, 0, 1,
|
||||||
gtk_spin_button_set_wrap(spin, TRUE);
|
(GtkAttachOptions) (0),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkWidget* label = gtk_label_new (" Y ");
|
||||||
|
gtk_widget_show (label);
|
||||||
|
gtk_table_attach(table, label, 0, 1, 1, 2,
|
||||||
|
(GtkAttachOptions) (0),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkWidget* label = gtk_label_new (" Z ");
|
||||||
|
gtk_widget_show (label);
|
||||||
|
gtk_table_attach(table, label, 0, 1, 2, 3,
|
||||||
|
(GtkAttachOptions) (0),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
||||||
|
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
||||||
|
gtk_widget_show(GTK_WIDGET(spin));
|
||||||
|
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 0, 1,
|
||||||
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
||||||
|
gtk_spin_button_set_wrap(spin, TRUE);
|
||||||
|
|
||||||
rotateDialog.y = spin;
|
gtk_widget_grab_focus(GTK_WIDGET(spin));
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
|
||||||
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
|
||||||
gtk_widget_show(GTK_WIDGET(spin));
|
|
||||||
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 2, 3,
|
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
|
||||||
gtk_spin_button_set_wrap(spin, TRUE);
|
|
||||||
|
|
||||||
rotateDialog.z = spin;
|
g_rotate_dialog.x = spin;
|
||||||
}
|
}
|
||||||
}
|
{
|
||||||
{
|
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
||||||
GtkVBox* vbox = create_dialog_vbox(4);
|
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0);
|
gtk_widget_show(GTK_WIDGET(spin));
|
||||||
{
|
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 1, 2,
|
||||||
GtkButton* button = create_dialog_button("OK", G_CALLBACK(dialog_button_ok), &dialog);
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
widget_make_default(GTK_WIDGET(button));
|
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
||||||
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0);
|
gtk_spin_button_set_wrap(spin, TRUE);
|
||||||
}
|
|
||||||
{
|
g_rotate_dialog.y = spin;
|
||||||
GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(dialog_button_cancel), &dialog);
|
}
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
{
|
||||||
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0);
|
GtkAdjustment* adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, -359, 359, 1, 10, 10));
|
||||||
}
|
GtkSpinButton* spin = GTK_SPIN_BUTTON(gtk_spin_button_new(adj, 1, 0));
|
||||||
{
|
gtk_widget_show(GTK_WIDGET(spin));
|
||||||
GtkButton* button = create_dialog_button("Apply", G_CALLBACK(rotatedlg_apply), &rotateDialog);
|
gtk_table_attach(table, GTK_WIDGET(spin), 1, 2, 2, 3,
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
}
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
}
|
gtk_widget_set_size_request(GTK_WIDGET(spin), 64, -1);
|
||||||
|
gtk_spin_button_set_wrap(spin, TRUE);
|
||||||
|
|
||||||
|
g_rotate_dialog.z = spin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkVBox* vbox = create_dialog_vbox(4);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0);
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("OK", G_CALLBACK(rotatedlg_ok), &g_rotate_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
widget_make_default(GTK_WIDGET(button));
|
||||||
|
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(rotatedlg_cancel), &g_rotate_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("Apply", G_CALLBACK(rotatedlg_apply), &g_rotate_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(modal_dialog_show(window, dialog) == eIDOK)
|
gtk_widget_show(GTK_WIDGET(g_rotate_dialog.window));
|
||||||
{
|
|
||||||
rotatedlg_apply(0, &rotateDialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_destroy(GTK_WIDGET(window));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoScaleDlg()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct ScaleDialog
|
||||||
{
|
{
|
||||||
ModalDialog dialog;
|
|
||||||
GtkWidget* x;
|
GtkWidget* x;
|
||||||
GtkWidget* y;
|
GtkWidget* y;
|
||||||
GtkWidget* z;
|
GtkWidget* z;
|
||||||
|
GtkWindow *window;
|
||||||
|
};
|
||||||
|
|
||||||
GtkWindow* window = create_dialog_window(MainFrame_getWindow(), "Scale", G_CALLBACK(dialog_delete_callback), &dialog);
|
static gboolean scaledlg_apply (GtkWidget *widget, ScaleDialog* scaleDialog)
|
||||||
|
{
|
||||||
|
float sx, sy, sz;
|
||||||
|
|
||||||
GtkAccelGroup* accel = gtk_accel_group_new();
|
sx = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (scaleDialog->x))));
|
||||||
gtk_window_add_accel_group(window, accel);
|
sy = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (scaleDialog->y))));
|
||||||
|
sz = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (scaleDialog->z))));
|
||||||
|
|
||||||
{
|
StringOutputStream command;
|
||||||
GtkHBox* hbox = create_dialog_hbox(4, 4);
|
command << "scaleSelected -x " << sx << " -y " << sy << " -z " << sz;
|
||||||
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(hbox));
|
UndoableCommand undo(command.c_str());
|
||||||
{
|
|
||||||
GtkTable* table = create_dialog_table(3, 2, 4, 4);
|
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), TRUE, TRUE, 0);
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new ("X:");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 0, 1,
|
|
||||||
(GtkAttachOptions) (GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new ("Y:");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 1, 2,
|
|
||||||
(GtkAttachOptions) (GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkWidget* label = gtk_label_new ("Z:");
|
|
||||||
gtk_widget_show (label);
|
|
||||||
gtk_table_attach(table, label, 0, 1, 2, 3,
|
|
||||||
(GtkAttachOptions) (GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
GtkWidget* entry = gtk_entry_new();
|
|
||||||
gtk_widget_show (entry);
|
|
||||||
gtk_table_attach(table, entry, 1, 2, 0, 1,
|
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
|
||||||
|
|
||||||
gtk_widget_grab_focus(entry);
|
Select_Scale(sx, sy, sz);
|
||||||
|
|
||||||
x = entry;
|
return TRUE;
|
||||||
}
|
}
|
||||||
{
|
|
||||||
GtkWidget* entry = gtk_entry_new();
|
static gboolean scaledlg_cancel (GtkWidget *widget, ScaleDialog* scaleDialog)
|
||||||
gtk_widget_show (entry);
|
{
|
||||||
gtk_table_attach(table, entry, 1, 2, 1, 2,
|
gtk_widget_hide(GTK_WIDGET(scaleDialog->window));
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
gtk_entry_set_text (GTK_ENTRY(scaleDialog->x), "1.0");
|
||||||
|
gtk_entry_set_text (GTK_ENTRY(scaleDialog->y), "1.0");
|
||||||
y = entry;
|
gtk_entry_set_text (GTK_ENTRY(scaleDialog->z), "1.0");
|
||||||
}
|
|
||||||
{
|
return TRUE;
|
||||||
GtkWidget* entry = gtk_entry_new();
|
}
|
||||||
gtk_widget_show (entry);
|
|
||||||
gtk_table_attach(table, entry, 1, 2, 2, 3,
|
static gboolean scaledlg_ok (GtkWidget *widget, ScaleDialog* scaleDialog)
|
||||||
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
{
|
||||||
(GtkAttachOptions) (0), 0, 0);
|
scaledlg_apply(widget, scaleDialog);
|
||||||
|
scaledlg_cancel(widget, scaleDialog);
|
||||||
z = entry;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
{
|
static gboolean scaledlg_delete (GtkWidget *widget, GdkEventAny *event, ScaleDialog* scaleDialog)
|
||||||
GtkVBox* vbox = create_dialog_vbox(4);
|
{
|
||||||
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0);
|
scaledlg_cancel(widget, scaleDialog);
|
||||||
{
|
return TRUE;
|
||||||
GtkButton* button = create_dialog_button("OK", G_CALLBACK(dialog_button_ok), &dialog);
|
}
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
|
||||||
widget_make_default(GTK_WIDGET(button));
|
ScaleDialog g_scale_dialog;
|
||||||
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0);
|
|
||||||
}
|
void DoScaleDlg()
|
||||||
{
|
{
|
||||||
GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(dialog_button_cancel), &dialog);
|
if(g_scale_dialog.window == NULL)
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
{
|
||||||
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0);
|
g_scale_dialog.window = create_dialog_window(MainFrame_getWindow(), "Arbitrary scale", G_CALLBACK(scaledlg_delete), &g_scale_dialog);
|
||||||
}
|
|
||||||
}
|
GtkAccelGroup* accel = gtk_accel_group_new();
|
||||||
}
|
gtk_window_add_accel_group(g_scale_dialog.window, accel);
|
||||||
|
|
||||||
// Initialize dialog
|
{
|
||||||
gtk_entry_set_text (GTK_ENTRY (x), "1.0");
|
GtkHBox* hbox = create_dialog_hbox(4, 4);
|
||||||
gtk_entry_set_text (GTK_ENTRY (y), "1.0");
|
gtk_container_add(GTK_CONTAINER(g_scale_dialog.window), GTK_WIDGET(hbox));
|
||||||
gtk_entry_set_text (GTK_ENTRY (z), "1.0");
|
{
|
||||||
|
GtkTable* table = create_dialog_table(3, 2, 4, 4);
|
||||||
if(modal_dialog_show(window, dialog) == eIDOK)
|
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(table), TRUE, TRUE, 0);
|
||||||
{
|
{
|
||||||
float sx, sy, sz;
|
GtkWidget* label = gtk_label_new (" X ");
|
||||||
sx = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (x))));
|
gtk_widget_show (label);
|
||||||
sy = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (y))));
|
gtk_table_attach(table, label, 0, 1, 0, 1,
|
||||||
sz = static_cast<float>(atof(gtk_entry_get_text (GTK_ENTRY (z))));
|
(GtkAttachOptions) (0),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
if (sx > 0 && sy > 0 && sz > 0)
|
}
|
||||||
{
|
{
|
||||||
StringOutputStream command;
|
GtkWidget* label = gtk_label_new (" Y ");
|
||||||
command << "scaleSelected -x " << sx << " -y " << sy << " -z " << sz;
|
gtk_widget_show (label);
|
||||||
UndoableCommand undo(command.c_str());
|
gtk_table_attach(table, label, 0, 1, 1, 2,
|
||||||
|
(GtkAttachOptions) (0),
|
||||||
Select_Scale(sx, sy, sz);
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
}
|
}
|
||||||
else
|
{
|
||||||
{
|
GtkWidget* label = gtk_label_new (" Z ");
|
||||||
globalOutputStream() << "Warning.. Tried to scale by a zero value.";
|
gtk_widget_show (label);
|
||||||
}
|
gtk_table_attach(table, label, 0, 1, 2, 3,
|
||||||
}
|
(GtkAttachOptions) (0),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
gtk_widget_destroy(GTK_WIDGET(window));
|
}
|
||||||
|
{
|
||||||
|
GtkWidget* entry = gtk_entry_new();
|
||||||
|
gtk_entry_set_text (GTK_ENTRY(entry), "1.0");
|
||||||
|
gtk_widget_show (entry);
|
||||||
|
gtk_table_attach(table, entry, 1, 2, 0, 1,
|
||||||
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
|
||||||
|
g_scale_dialog.x = entry;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkWidget* entry = gtk_entry_new();
|
||||||
|
gtk_entry_set_text (GTK_ENTRY(entry), "1.0");
|
||||||
|
gtk_widget_show (entry);
|
||||||
|
gtk_table_attach(table, entry, 1, 2, 1, 2,
|
||||||
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
|
||||||
|
g_scale_dialog.y = entry;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkWidget* entry = gtk_entry_new();
|
||||||
|
gtk_entry_set_text (GTK_ENTRY(entry), "1.0");
|
||||||
|
gtk_widget_show (entry);
|
||||||
|
gtk_table_attach(table, entry, 1, 2, 2, 3,
|
||||||
|
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
|
||||||
|
(GtkAttachOptions) (0), 0, 0);
|
||||||
|
|
||||||
|
g_scale_dialog.z = entry;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkVBox* vbox = create_dialog_vbox(4);
|
||||||
|
gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0);
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("OK", G_CALLBACK(scaledlg_ok), &g_scale_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
widget_make_default(GTK_WIDGET(button));
|
||||||
|
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Return, (GdkModifierType)0, (GtkAccelFlags)0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("Cancel", G_CALLBACK(scaledlg_cancel), &g_scale_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel, GDK_Escape, (GdkModifierType)0, (GtkAccelFlags)0);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
GtkButton* button = create_dialog_button("Apply", G_CALLBACK(scaledlg_apply), &g_scale_dialog);
|
||||||
|
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), FALSE, FALSE, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_widget_show(GTK_WIDGET(g_scale_dialog.window));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user