wx/position.h \
wx/radiobox.h \
wx/radiobut.h \
+ wx/rearrangectrl.h \
wx/renderer.h \
wx/scrolbar.h \
wx/scrolbar.h \
monodll_prntbase.o \
monodll_quantize.o \
monodll_radiocmn.o \
+ monodll_rearrangectrl.o \
monodll_rendcmn.o \
monodll_rgncmn.o \
monodll_settcmn.o \
monodll_prntbase.o \
monodll_quantize.o \
monodll_radiocmn.o \
+ monodll_rearrangectrl.o \
monodll_rendcmn.o \
monodll_rgncmn.o \
monodll_settcmn.o \
monolib_prntbase.o \
monolib_quantize.o \
monolib_radiocmn.o \
+ monolib_rearrangectrl.o \
monolib_rendcmn.o \
monolib_rgncmn.o \
monolib_settcmn.o \
monolib_prntbase.o \
monolib_quantize.o \
monolib_radiocmn.o \
+ monolib_rearrangectrl.o \
monolib_rendcmn.o \
monolib_rgncmn.o \
monolib_settcmn.o \
coredll_prntbase.o \
coredll_quantize.o \
coredll_radiocmn.o \
+ coredll_rearrangectrl.o \
coredll_rendcmn.o \
coredll_rgncmn.o \
coredll_settcmn.o \
coredll_prntbase.o \
coredll_quantize.o \
coredll_radiocmn.o \
+ coredll_rearrangectrl.o \
coredll_rendcmn.o \
coredll_rgncmn.o \
coredll_settcmn.o \
corelib_prntbase.o \
corelib_quantize.o \
corelib_radiocmn.o \
+ corelib_rearrangectrl.o \
corelib_rendcmn.o \
corelib_rgncmn.o \
corelib_settcmn.o \
corelib_prntbase.o \
corelib_quantize.o \
corelib_radiocmn.o \
+ corelib_rearrangectrl.o \
corelib_rendcmn.o \
corelib_rgncmn.o \
corelib_settcmn.o \
@COND_USE_GUI_1@monodll_radiocmn.o: $(srcdir)/src/common/radiocmn.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/radiocmn.cpp
+@COND_USE_GUI_1@monodll_rearrangectrl.o: $(srcdir)/src/common/rearrangectrl.cpp $(MONODLL_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/rearrangectrl.cpp
+
@COND_USE_GUI_1@monodll_rendcmn.o: $(srcdir)/src/common/rendcmn.cpp $(MONODLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/common/rendcmn.cpp
@COND_USE_GUI_1@monolib_radiocmn.o: $(srcdir)/src/common/radiocmn.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/radiocmn.cpp
+@COND_USE_GUI_1@monolib_rearrangectrl.o: $(srcdir)/src/common/rearrangectrl.cpp $(MONOLIB_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/rearrangectrl.cpp
+
@COND_USE_GUI_1@monolib_rendcmn.o: $(srcdir)/src/common/rendcmn.cpp $(MONOLIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/common/rendcmn.cpp
@COND_USE_GUI_1@coredll_radiocmn.o: $(srcdir)/src/common/radiocmn.cpp $(COREDLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/radiocmn.cpp
+@COND_USE_GUI_1@coredll_rearrangectrl.o: $(srcdir)/src/common/rearrangectrl.cpp $(COREDLL_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/rearrangectrl.cpp
+
@COND_USE_GUI_1@coredll_rendcmn.o: $(srcdir)/src/common/rendcmn.cpp $(COREDLL_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/common/rendcmn.cpp
@COND_USE_GUI_1@corelib_radiocmn.o: $(srcdir)/src/common/radiocmn.cpp $(CORELIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/radiocmn.cpp
+@COND_USE_GUI_1@corelib_rearrangectrl.o: $(srcdir)/src/common/rearrangectrl.cpp $(CORELIB_ODEP)
+@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/rearrangectrl.cpp
+
@COND_USE_GUI_1@corelib_rendcmn.o: $(srcdir)/src/common/rendcmn.cpp $(CORELIB_ODEP)
@COND_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/common/rendcmn.cpp
src/common/prntbase.cpp
src/common/quantize.cpp
src/common/radiocmn.cpp
+ src/common/rearrangectrl.cpp
src/common/rendcmn.cpp
src/common/rgncmn.cpp
src/common/settcmn.cpp
wx/position.h
wx/radiobox.h
wx/radiobut.h
+ wx/rearrangectrl.h
wx/renderer.h
wx/scrolbar.h
wx/scrolbar.h
$(OBJS)\monodll_prntbase.obj \
$(OBJS)\monodll_quantize.obj \
$(OBJS)\monodll_radiocmn.obj \
+ $(OBJS)\monodll_rearrangectrl.obj \
$(OBJS)\monodll_rendcmn.obj \
$(OBJS)\monodll_rgncmn.obj \
$(OBJS)\monodll_settcmn.obj \
$(OBJS)\monodll_prntbase.obj \
$(OBJS)\monodll_quantize.obj \
$(OBJS)\monodll_radiocmn.obj \
+ $(OBJS)\monodll_rearrangectrl.obj \
$(OBJS)\monodll_rendcmn.obj \
$(OBJS)\monodll_rgncmn.obj \
$(OBJS)\monodll_settcmn.obj \
$(OBJS)\monolib_prntbase.obj \
$(OBJS)\monolib_quantize.obj \
$(OBJS)\monolib_radiocmn.obj \
+ $(OBJS)\monolib_rearrangectrl.obj \
$(OBJS)\monolib_rendcmn.obj \
$(OBJS)\monolib_rgncmn.obj \
$(OBJS)\monolib_settcmn.obj \
$(OBJS)\monolib_prntbase.obj \
$(OBJS)\monolib_quantize.obj \
$(OBJS)\monolib_radiocmn.obj \
+ $(OBJS)\monolib_rearrangectrl.obj \
$(OBJS)\monolib_rendcmn.obj \
$(OBJS)\monolib_rgncmn.obj \
$(OBJS)\monolib_settcmn.obj \
$(OBJS)\coredll_prntbase.obj \
$(OBJS)\coredll_quantize.obj \
$(OBJS)\coredll_radiocmn.obj \
+ $(OBJS)\coredll_rearrangectrl.obj \
$(OBJS)\coredll_rendcmn.obj \
$(OBJS)\coredll_rgncmn.obj \
$(OBJS)\coredll_settcmn.obj \
$(OBJS)\coredll_prntbase.obj \
$(OBJS)\coredll_quantize.obj \
$(OBJS)\coredll_radiocmn.obj \
+ $(OBJS)\coredll_rearrangectrl.obj \
$(OBJS)\coredll_rendcmn.obj \
$(OBJS)\coredll_rgncmn.obj \
$(OBJS)\coredll_settcmn.obj \
$(OBJS)\corelib_prntbase.obj \
$(OBJS)\corelib_quantize.obj \
$(OBJS)\corelib_radiocmn.obj \
+ $(OBJS)\corelib_rearrangectrl.obj \
$(OBJS)\corelib_rendcmn.obj \
$(OBJS)\corelib_rgncmn.obj \
$(OBJS)\corelib_settcmn.obj \
$(OBJS)\corelib_prntbase.obj \
$(OBJS)\corelib_quantize.obj \
$(OBJS)\corelib_radiocmn.obj \
+ $(OBJS)\corelib_rearrangectrl.obj \
$(OBJS)\corelib_rendcmn.obj \
$(OBJS)\corelib_rgncmn.obj \
$(OBJS)\corelib_settcmn.obj \
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\coredll_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\corelib_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(OBJS)\monodll_prntbase.o \
$(OBJS)\monodll_quantize.o \
$(OBJS)\monodll_radiocmn.o \
+ $(OBJS)\monodll_rearrangectrl.o \
$(OBJS)\monodll_rendcmn.o \
$(OBJS)\monodll_rgncmn.o \
$(OBJS)\monodll_settcmn.o \
$(OBJS)\monodll_prntbase.o \
$(OBJS)\monodll_quantize.o \
$(OBJS)\monodll_radiocmn.o \
+ $(OBJS)\monodll_rearrangectrl.o \
$(OBJS)\monodll_rendcmn.o \
$(OBJS)\monodll_rgncmn.o \
$(OBJS)\monodll_settcmn.o \
$(OBJS)\monolib_prntbase.o \
$(OBJS)\monolib_quantize.o \
$(OBJS)\monolib_radiocmn.o \
+ $(OBJS)\monolib_rearrangectrl.o \
$(OBJS)\monolib_rendcmn.o \
$(OBJS)\monolib_rgncmn.o \
$(OBJS)\monolib_settcmn.o \
$(OBJS)\monolib_prntbase.o \
$(OBJS)\monolib_quantize.o \
$(OBJS)\monolib_radiocmn.o \
+ $(OBJS)\monolib_rearrangectrl.o \
$(OBJS)\monolib_rendcmn.o \
$(OBJS)\monolib_rgncmn.o \
$(OBJS)\monolib_settcmn.o \
$(OBJS)\coredll_prntbase.o \
$(OBJS)\coredll_quantize.o \
$(OBJS)\coredll_radiocmn.o \
+ $(OBJS)\coredll_rearrangectrl.o \
$(OBJS)\coredll_rendcmn.o \
$(OBJS)\coredll_rgncmn.o \
$(OBJS)\coredll_settcmn.o \
$(OBJS)\coredll_prntbase.o \
$(OBJS)\coredll_quantize.o \
$(OBJS)\coredll_radiocmn.o \
+ $(OBJS)\coredll_rearrangectrl.o \
$(OBJS)\coredll_rendcmn.o \
$(OBJS)\coredll_rgncmn.o \
$(OBJS)\coredll_settcmn.o \
$(OBJS)\corelib_prntbase.o \
$(OBJS)\corelib_quantize.o \
$(OBJS)\corelib_radiocmn.o \
+ $(OBJS)\corelib_rearrangectrl.o \
$(OBJS)\corelib_rendcmn.o \
$(OBJS)\corelib_rgncmn.o \
$(OBJS)\corelib_settcmn.o \
$(OBJS)\corelib_prntbase.o \
$(OBJS)\corelib_quantize.o \
$(OBJS)\corelib_radiocmn.o \
+ $(OBJS)\corelib_rearrangectrl.o \
$(OBJS)\corelib_rendcmn.o \
$(OBJS)\corelib_rgncmn.o \
$(OBJS)\corelib_settcmn.o \
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\monodll_rearrangectrl.o: ../../src/common/rearrangectrl.cpp
+ $(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_rendcmn.o: ../../src/common/rendcmn.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\monolib_rearrangectrl.o: ../../src/common/rearrangectrl.cpp
+ $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_rendcmn.o: ../../src/common/rendcmn.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\coredll_rearrangectrl.o: ../../src/common/rearrangectrl.cpp
+ $(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_rendcmn.o: ../../src/common/rendcmn.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
+ifeq ($(USE_GUI),1)
+$(OBJS)\corelib_rearrangectrl.o: ../../src/common/rearrangectrl.cpp
+ $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
+endif
+
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_rendcmn.o: ../../src/common/rendcmn.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
$(OBJS)\monodll_prntbase.obj \
$(OBJS)\monodll_quantize.obj \
$(OBJS)\monodll_radiocmn.obj \
+ $(OBJS)\monodll_rearrangectrl.obj \
$(OBJS)\monodll_rendcmn.obj \
$(OBJS)\monodll_rgncmn.obj \
$(OBJS)\monodll_settcmn.obj \
$(OBJS)\monodll_prntbase.obj \
$(OBJS)\monodll_quantize.obj \
$(OBJS)\monodll_radiocmn.obj \
+ $(OBJS)\monodll_rearrangectrl.obj \
$(OBJS)\monodll_rendcmn.obj \
$(OBJS)\monodll_rgncmn.obj \
$(OBJS)\monodll_settcmn.obj \
$(OBJS)\monolib_prntbase.obj \
$(OBJS)\monolib_quantize.obj \
$(OBJS)\monolib_radiocmn.obj \
+ $(OBJS)\monolib_rearrangectrl.obj \
$(OBJS)\monolib_rendcmn.obj \
$(OBJS)\monolib_rgncmn.obj \
$(OBJS)\monolib_settcmn.obj \
$(OBJS)\monolib_prntbase.obj \
$(OBJS)\monolib_quantize.obj \
$(OBJS)\monolib_radiocmn.obj \
+ $(OBJS)\monolib_rearrangectrl.obj \
$(OBJS)\monolib_rendcmn.obj \
$(OBJS)\monolib_rgncmn.obj \
$(OBJS)\monolib_settcmn.obj \
$(OBJS)\coredll_prntbase.obj \
$(OBJS)\coredll_quantize.obj \
$(OBJS)\coredll_radiocmn.obj \
+ $(OBJS)\coredll_rearrangectrl.obj \
$(OBJS)\coredll_rendcmn.obj \
$(OBJS)\coredll_rgncmn.obj \
$(OBJS)\coredll_settcmn.obj \
$(OBJS)\coredll_prntbase.obj \
$(OBJS)\coredll_quantize.obj \
$(OBJS)\coredll_radiocmn.obj \
+ $(OBJS)\coredll_rearrangectrl.obj \
$(OBJS)\coredll_rendcmn.obj \
$(OBJS)\coredll_rgncmn.obj \
$(OBJS)\coredll_settcmn.obj \
$(OBJS)\corelib_prntbase.obj \
$(OBJS)\corelib_quantize.obj \
$(OBJS)\corelib_radiocmn.obj \
+ $(OBJS)\corelib_rearrangectrl.obj \
$(OBJS)\corelib_rendcmn.obj \
$(OBJS)\corelib_rgncmn.obj \
$(OBJS)\corelib_settcmn.obj \
$(OBJS)\corelib_prntbase.obj \
$(OBJS)\corelib_quantize.obj \
$(OBJS)\corelib_radiocmn.obj \
+ $(OBJS)\corelib_rearrangectrl.obj \
$(OBJS)\corelib_rendcmn.obj \
$(OBJS)\corelib_rgncmn.obj \
$(OBJS)\corelib_settcmn.obj \
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monodll_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\monolib_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\coredll_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\radiocmn.cpp
!endif
+!if "$(USE_GUI)" == "1"
+$(OBJS)\corelib_rearrangectrl.obj: ..\..\src\common\rearrangectrl.cpp
+ $(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\rearrangectrl.cpp
+!endif
+
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_rendcmn.obj: ..\..\src\common\rendcmn.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\common\rendcmn.cpp
$(OBJS)\monodll_prntbase.obj &
$(OBJS)\monodll_quantize.obj &
$(OBJS)\monodll_radiocmn.obj &
+ $(OBJS)\monodll_rearrangectrl.obj &
$(OBJS)\monodll_rendcmn.obj &
$(OBJS)\monodll_rgncmn.obj &
$(OBJS)\monodll_settcmn.obj &
$(OBJS)\monodll_prntbase.obj &
$(OBJS)\monodll_quantize.obj &
$(OBJS)\monodll_radiocmn.obj &
+ $(OBJS)\monodll_rearrangectrl.obj &
$(OBJS)\monodll_rendcmn.obj &
$(OBJS)\monodll_rgncmn.obj &
$(OBJS)\monodll_settcmn.obj &
$(OBJS)\monolib_prntbase.obj &
$(OBJS)\monolib_quantize.obj &
$(OBJS)\monolib_radiocmn.obj &
+ $(OBJS)\monolib_rearrangectrl.obj &
$(OBJS)\monolib_rendcmn.obj &
$(OBJS)\monolib_rgncmn.obj &
$(OBJS)\monolib_settcmn.obj &
$(OBJS)\monolib_prntbase.obj &
$(OBJS)\monolib_quantize.obj &
$(OBJS)\monolib_radiocmn.obj &
+ $(OBJS)\monolib_rearrangectrl.obj &
$(OBJS)\monolib_rendcmn.obj &
$(OBJS)\monolib_rgncmn.obj &
$(OBJS)\monolib_settcmn.obj &
$(OBJS)\coredll_prntbase.obj &
$(OBJS)\coredll_quantize.obj &
$(OBJS)\coredll_radiocmn.obj &
+ $(OBJS)\coredll_rearrangectrl.obj &
$(OBJS)\coredll_rendcmn.obj &
$(OBJS)\coredll_rgncmn.obj &
$(OBJS)\coredll_settcmn.obj &
$(OBJS)\coredll_prntbase.obj &
$(OBJS)\coredll_quantize.obj &
$(OBJS)\coredll_radiocmn.obj &
+ $(OBJS)\coredll_rearrangectrl.obj &
$(OBJS)\coredll_rendcmn.obj &
$(OBJS)\coredll_rgncmn.obj &
$(OBJS)\coredll_settcmn.obj &
$(OBJS)\corelib_prntbase.obj &
$(OBJS)\corelib_quantize.obj &
$(OBJS)\corelib_radiocmn.obj &
+ $(OBJS)\corelib_rearrangectrl.obj &
$(OBJS)\corelib_rendcmn.obj &
$(OBJS)\corelib_rgncmn.obj &
$(OBJS)\corelib_settcmn.obj &
$(OBJS)\corelib_prntbase.obj &
$(OBJS)\corelib_quantize.obj &
$(OBJS)\corelib_radiocmn.obj &
+ $(OBJS)\corelib_rearrangectrl.obj &
$(OBJS)\corelib_rendcmn.obj &
$(OBJS)\corelib_rgncmn.obj &
$(OBJS)\corelib_settcmn.obj &
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\monodll_rearrangectrl.obj : .AUTODEPEND ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\monodll_rendcmn.obj : .AUTODEPEND ..\..\src\common\rendcmn.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONODLL_CXXFLAGS) $<
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\monolib_rearrangectrl.obj : .AUTODEPEND ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\monolib_rendcmn.obj : .AUTODEPEND ..\..\src\common\rendcmn.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(MONOLIB_CXXFLAGS) $<
$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\coredll_rearrangectrl.obj : .AUTODEPEND ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\coredll_rendcmn.obj : .AUTODEPEND ..\..\src\common\rendcmn.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(COREDLL_CXXFLAGS) $<
$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
!endif
+!ifeq USE_GUI 1
+$(OBJS)\corelib_rearrangectrl.obj : .AUTODEPEND ..\..\src\common\rearrangectrl.cpp
+ $(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
+!endif
+
!ifeq USE_GUI 1
$(OBJS)\corelib_rendcmn.obj : .AUTODEPEND ..\..\src\common\rendcmn.cpp
$(CXX) -bt=nt -zq -fo=$^@ $(CORELIB_CXXFLAGS) $<
# End Source File\r
# Begin Source File\r
\r
+SOURCE=..\..\src\common\rearrangectrl.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
SOURCE=..\..\src\common\rendcmn.cpp\r
# End Source File\r
# Begin Source File\r
# End Source File\r
# Begin Source File\r
\r
+SOURCE=..\..\include\wx\rearrangectrl.h\r
+# End Source File\r
+# Begin Source File\r
+\r
SOURCE=..\..\include\wx\region.h\r
# End Source File\r
# Begin Source File\r
<File\r
RelativePath="..\..\src\common\radiocmn.cpp">\r
</File>\r
+ <File\r
+ RelativePath="..\..\src\common\rearrangectrl.cpp">\r
+ </File>\r
<File\r
RelativePath="..\..\src\common\rendcmn.cpp">\r
</File>\r
<File\r
RelativePath="..\..\include\wx\rawbmp.h">\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\rearrangectrl.h">\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\region.h">\r
</File>\r
RelativePath="..\..\src\common\radiocmn.cpp"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\src\common\rearrangectrl.cpp"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\src\common\rendcmn.cpp"\r
>\r
RelativePath="..\..\include\wx\rawbmp.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\rearrangectrl.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\region.h"\r
>\r
RelativePath="..\..\src\common\radiocmn.cpp"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\src\common\rearrangectrl.cpp"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\src\common\rendcmn.cpp"\r
>\r
RelativePath="..\..\include\wx\rawbmp.h"\r
>\r
</File>\r
+ <File\r
+ RelativePath="..\..\include\wx\rearrangectrl.h"\r
+ >\r
+ </File>\r
<File\r
RelativePath="..\..\include\wx\region.h"\r
>\r
- Added wxDataViewCtrl class and helper classes.
- Integrated wxPropertyGrid in wxWidgets itself (Jaakko Salli).
- Provide native implementation of wxCalendarCtrl under wxMSW and wxGTK.
+- Added wxHeaderCtrl and allow using it in wxGrid.
+- Added wxRearrangeList, wxRearrangeCtrl and wxRearrangeDialog.
- Added {wxTextCtrl,wxComboBox}::AutoComplete() and AutoCompleteFileNames().
- Added wxH[V]ScrolledWindow (Brad Anderson, Bryan Petty).
- Added wxNotificationMessage class for non-intrusive notifications.
// show the columns customization dialog and return true if something was
// changed using it (in which case UpdateColumnVisibility() and/or
- // UpdateColumnWidth() will have been called)
+ // UpdateColumnsOrder() will have been called)
//
// this is called by the control itself from ShowColumnsMenu() (which in
// turn is only called by the control if wxHD_ALLOW_HIDE style was
wxFAIL_MSG( "must be overridden if called" );
}
+ // this method is called from ShowCustomizeDialog() to reorder all columns
+ // at once and should be implemented for controls using wxHD_ALLOW_REORDER
+ // style (there is no need to call SetColumnsOrder() from here, this is
+ // done by the control itself)
+ virtual void UpdateColumnsOrder(const wxArrayInt& WXUNUSED(order))
+ {
+ wxFAIL_MSG( "must be overridden if called" );
+ }
+
// this method can be overridden in the derived classes to do something
// (e.g. update/resize some internal data structures) before the number of
// columns in the control changes
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/rearrangectrl.h
+// Purpose: various controls for rearranging the items interactively
+// Author: Vadim Zeitlin
+// Created: 2008-12-15
+// RCS-ID: $Id$
+// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_REARRANGECTRL_H_
+#define _WX_REARRANGECTRL_H_
+
+#include "wx/checklst.h"
+#include "wx/arrstr.h"
+
+extern WXDLLIMPEXP_DATA_CORE(const char) wxRearrangeListNameStr[];
+extern WXDLLIMPEXP_DATA_CORE(const char) wxRearrangeDialogNameStr[];
+
+// ----------------------------------------------------------------------------
+// wxRearrangeList: a (check) list box allowing to move items around
+// ----------------------------------------------------------------------------
+
+// This class works allows to change the order of the items shown in it as well
+// as to check or uncheck them individually. The data structure used to allow
+// this is the order array which contains the items indices indexed by their
+// position with an added twist that the unchecked items are represented by the
+// bitwise complement of the corresponding index (for any architecture using
+// two's complement for negative numbers representation (i.e. just about any at
+// all) this means that a checked item N is represented by -N-1 in unchecked
+// state).
+//
+// So, for example, the array order [1 -3 0] used in conjunction with the items
+// array ["first", "second", "third"] means that the items are displayed in the
+// order "second", "third", "first" and the "third" item is unchecked while the
+// other two are checked.
+class WXDLLIMPEXP_CORE wxRearrangeList : public wxCheckListBox
+{
+public:
+ // ctors and such
+ // --------------
+
+ // default ctor, call Create() later
+ wxRearrangeList() { }
+
+ // ctor creating the control, the arguments are the same as for
+ // wxCheckListBox except for the extra order array which defines the
+ // (initial) display order of the items as well as their statuses, see the
+ // description above
+ wxRearrangeList(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr)
+ {
+ Create(parent, id, pos, size, order, items, style, validator, name);
+ }
+
+ // Create() function takes the same parameters as the base class one and
+ // the order array determining the initial display order
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+
+ // items order
+ // -----------
+
+ // get the current items order; the returned array uses the same convention
+ // as the one passed to the ctor
+ const wxArrayInt& GetCurrentOrder() const { return m_order; }
+
+ // return true if the current item can be moved up or down (i.e. just that
+ // it's not the first or the last one)
+ bool CanMoveCurrentUp() const;
+ bool CanMoveCurrentDown() const;
+
+ // move the current item one position up or down, return true if it was moved
+ // or false if the current item was the first/last one and so nothing was done
+ bool MoveCurrentUp();
+ bool MoveCurrentDown();
+
+private:
+ // swap two items at the given positions in the listbox
+ void Swap(int pos1, int pos2);
+
+ // event handler for item checking/unchecking
+ void OnCheck(wxCommandEvent& event);
+
+
+ // the current order array
+ wxArrayInt m_order;
+
+
+ DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxRearrangeList)
+};
+
+// ----------------------------------------------------------------------------
+// wxRearrangeCtrl: composite control containing a wxRearrangeList and buttons
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxRearrangeCtrl : public wxPanel
+{
+public:
+ // ctors/Create function are the same as for wxRearrangeList
+ wxRearrangeCtrl()
+ {
+ Init();
+ }
+
+ wxRearrangeCtrl(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr)
+ {
+ Init();
+
+ Create(parent, id, pos, size, order, items, style, validator, name);
+ }
+
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+ // get the underlying listbox
+ wxRearrangeList *GetList() const { return m_list; }
+
+private:
+ // common part of all ctors
+ void Init();
+
+ // event handlers for the buttons
+ void OnUpdateButtonUI(wxUpdateUIEvent& event);
+ void OnButton(wxCommandEvent& event);
+
+
+ wxRearrangeList *m_list;
+
+
+ DECLARE_EVENT_TABLE()
+ DECLARE_NO_COPY_CLASS(wxRearrangeCtrl)
+};
+
+// ----------------------------------------------------------------------------
+// wxRearrangeDialog: dialog containing a wxRearrangeCtrl
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_CORE wxRearrangeDialog : public wxDialog
+{
+public:
+ // ctor for the dialog: message is shown inside the dialog itself, order
+ // and items are passed to wxRearrangeList used internally
+ wxRearrangeDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& title,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxString& name = wxRearrangeDialogNameStr);
+
+ // get the order of items after it was modified by the user
+ wxArrayInt GetOrder() const
+ { return m_ctrl->GetList()->GetCurrentOrder(); }
+
+private:
+ wxRearrangeCtrl *m_ctrl;
+
+ DECLARE_NO_COPY_CLASS(wxRearrangeDialog)
+};
+
+#endif // _WX_REARRANGECTRL_H_
+
wxHeaderCtrl is the control containing the column headings which is usually
used for display of tabular data.
- It is used as part of wxGrid, in wxDataViewCtrl and in the report view of
- wxListCtrl but can be also used independently.
- In general this class is meant to be used as part of another
- control which already stores the column information somewhere as it can't
- be used directly: instead you need to inherit from it and implement the
- GetColumn() method to provide column information. See wxHeaderCtrlSimple
- for a concrete control class which can be used directly.
+ It is used as part of wxGrid, in generic version wxDataViewCtrl and report
+ view of wxListCtrl but can be also used independently. In general this
+ class is meant to be used as part of another control which already stores
+ the column information somewhere as it can't be used directly: instead you
+ need to inherit from it and implement the GetColumn() method to provide
+ column information. See wxHeaderCtrlSimple for a concrete control class
+ which can be used directly.
In addition to labeling the columns, the control has the following
features:
@style{wxHD_ALLOW_REORDER}
If this style is specified (it is by default), the user can reorder
the control columns by dragging them.
+ @style{wxHD_ALLOW_HIDE}
+ If this style is specified, the control shows a popup menu allowing the
+ user to change the columns visibility on right mouse click. Notice that
+ the program can always hide or show the columns, this style only
+ affects the users capability to do it.
@style{wxHD_DEFAULT_STYLE}
Symbolic name for the default control style, currently equal to
@c wxHD_ALLOW_REORDER.
Show the popup menu allowing the user to show or hide the columns.
This functions shows the popup menu containing all columns with check
- marks for the ones which are currently shown at the current mouse
- position. It is meant to be called from EVT_HEADER_RIGHT_CLICK handler
- and should toggle the visibility of the n-th column if the function
- returns valid column index and not wxID_NONE which is returned if the
- user cancels the menu.
-
+ marks for the ones which are currently shown and allows the user to
+ check or uncheck them to toggle their visibility. It is called from the
+ default EVT_HEADER_RIGHT_CLICK handler for the controls which have
+ wxHD_ALLOW_HIDE style. And if the column has wxHD_ALLOW_REORDER style
+ as well, the menu also contains an item to customize the columns shown
+ using which results in ShowCustomizeDialog() being called, please see
+ its description for more details.
+
+ If a column was toggled, UpdateColumnVisibility() virtual function is
+ called so it must be implemented for the controls with wxHD_ALLOW_HIDE
+ style or if you call this function explicitly.
+
+ @param pt
+ The position of the menu, in the header window coordinates.
@param title
The title for the menu if not empty.
@return
- A valid column index or wxID_NONE if the user didn't select any
- column.
+ @true if a column was shown or hidden or @false if nothing was
+ done, e.g. because the menu was cancelled.
+ */
+ int ShowColumnsMenu(const wxPoint& pt, const wxString& title = wxString());
+
+ /**
+ Show the column customization dialog.
+
+ This function displays a modal dialog containing the list of all
+ columns which the user can use to reorder them as well as show or hide
+ individual columns.
+
+ If the user accepts the changes done in the dialog, the virtual
+ methods UpdateColumnVisibility() and UpdateColumnsOrder() will be
+ called so they must be overridden in the derived class if this method
+ is ever called. Please notice that the user will be able to invoke it
+ interactively from the header popup menu if the control has both
+ wxHD_ALLOW_HIDE and wxHD_ALLOW_REORDER styles.
+
+ @see wxRearrangeDialog
*/
- int ShowColumnsMenu(const wxString& title = wxString());
+ bool ShowCustomizeDialog();
protected:
/**
*/
virtual wxHeaderColumnBase& GetColumn(unsigned int idx) = 0;
+ /**
+ Method called when the column visibility is changed by the user.
+
+ This method is called from ShowColumnsMenu() or ShowCustomizeDialog()
+ when the user interactively hides or shows a column. A typical
+ implementation will simply update the internally stored column state.
+ Notice that there is no need to call UpdateColumn() from this method as
+ it is already done by wxHeaderCtrl itself.
+
+ The base class version doesn't do anything and must be overridden if
+ this method is called.
+
+ @param idx
+ The index of the column whose visibility was toggled.
+ @param show
+ The new visibility value, @true if the column is now shown or
+ @false if it is not hidden.
+ */
+ virtual void UpdateColumnVisibility(unsigned int idx, bool show);
+
+ /**
+ Method called when the columns order is changed in the customization
+ dialog.
+
+ This method is only called from ShowCustomizeDialog() when the user
+ changes the order of columns. In particular it is @em not called if a
+ single column changes place because the user dragged it to the new
+ location, the EVT_HEADER_END_REORDER event handler should be used to
+ react to this.
+
+ A typical implementation in a derived class will update the display
+ order of the columns in the associated control, if any. Notice that
+ there is no need to call SetColumnsOrder() from it as wxHeaderCtrl does
+ it itself.
+
+ The base class version doesn't do anything and must be overridden if
+ this method is called.
+
+ @param order
+ The new column order. This array uses the same convention as
+ SetColumnsOrder().
+ */
+ virtual void UpdateColumnsOrder(const wxArrayInt& order);
+
/**
Method which may be implemented by the derived classes to allow double
clicking the column separator to resize the column to fit its contents.
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: wx/rearrangectrl.h
+// Purpose: interface of wxRearrangeList
+// Author: Vadim Zeitlin
+// Created: 2008-12-15
+// RCS-ID: $Id$
+// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence: wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ @class wxRearrangeList
+
+ A listbox-like control allowing the user to rearrange the items and to
+ enable or disable them.
+
+ This class allows to change the order of the items shown in it as well as
+ to check or uncheck them individually. The data structure used to allow
+ this is the order array which contains the items indices indexed by their
+ position with an added twist that the unchecked items are represented by
+ the bitwise complement of the corresponding index (for any architecture
+ using two's complement for negative numbers representation (i.e. just about
+ any at all) this means that a checked item N is represented by -N-1 in
+ unchecked state). In practice this means that you must apply the C bitwise
+ complement operator when constructing the order array, e.g.
+ @code
+ wxArrayInt order;
+ order.push_back(0); // checked item #0
+ order.push_back(~1); // unchecked item #1
+ @endcode
+
+ So, for example, the array order [1 -3 0] used in conjunction with the
+ items array ["first", "second", "third"] means that the items order is
+ "second", "third", "first" and the "third" item is unchecked while the
+ other two are checked.
+
+ This convention is used both for the order argument of the control ctor or
+ Create() and for the array returned from GetCurrentOrder().
+
+ Usually this control will be used together with other controls allowing to
+ move the items around in it interactively. The simplest possible solution
+ is to use wxRearrangeCtrl which combines it with two standard buttons to
+ move the current item up or down.
+
+ @library{wxcore}
+ @category{ctrl}
+*/
+class wxRearrangeList : public wxCheckListBox
+{
+public:
+ /**
+ Default constructor.
+
+ Create() must be called later to effectively create the control.
+ */
+ wxRearrangeList();
+
+ /**
+ Constructor really creating the control.
+
+ Please see Create() for the parameters description.
+ */
+ wxRearrangeList(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+ /**
+ Effectively creates the window for an object created using the default
+ constructor.
+
+ This function is very similar to wxCheckListBox::Create() except that
+ it has an additional parameter specifying the initial order of the
+ items. Please see the class documentation for the explanation of the
+ conventions used by the @a order argument.
+
+ @param parent
+ The parent window, must be non-@NULL.
+ @param id
+ The window identifier.
+ @param pos
+ The initial window position.
+ @param size
+ The initial window size.
+ @param order
+ Array specifying the initial order of the items in @a items array.
+ @param items
+ The items to display in the list.
+ @param style
+ The control style, there are no special styles for this class but
+ the base class styles can be used here.
+ @param validator
+ Optional window validator.
+ @param name
+ Optional window name.
+ */
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+
+ /**
+ Return the current order of the items.
+
+ The order may be different from the one passed to the constructor if
+ MoveCurrentUp() or MoveCurrentDown() were called.
+ */
+ const wxArrayInt& GetCurrentOrder() const;
+
+ /**
+ Return @true if the currently selected item can be moved up.
+
+ This function is useful for EVT_UPDATE_UI handler for the standard "Up"
+ button often used together with this control and wxRearrangeCtrl uses
+ it in this way.
+
+ @return
+ @true if the currently selected item can be moved up in the
+ listbox, @false if there is no selection or the current item is the
+ first one.
+
+ @see CanMoveCurrentDown()
+ */
+ bool CanMoveCurrentUp() const;
+
+ /**
+ Return @true if the currently selected item can be moved down.
+
+ @see CanMoveCurrentUp()
+ */
+ bool CanMoveCurrentDown() const;
+
+ /**
+ Move the currently selected item one position above.
+
+ This method is useful to implement the standard "Up" button behaviour
+ and wxRearrangeCtrl uses it for this.
+
+ @return
+ @true if the item was moved or @false if this couldn't be done.
+
+ @see MoveCurrentDown()
+ */
+ bool MoveCurrentUp();
+
+ /**
+ Move the currently selected item one position below.
+
+ @see MoveCurrentUp()
+ */
+ bool MoveCurrentDown();
+};
+
+
+/**
+ @class wxRearrangeCtrl
+
+ A composite control containing a wxRearrangeList and the buttons allowing
+ to move the items in it.
+
+ This control is in fact a panel containing the wxRearrangeList control and
+ the "Up" and "Down" buttons to move the currently selected item up or down.
+ It is used as the main part of a wxRearrangeDialog.
+
+ @library{wxcore}
+ @category{ctrl}
+ */
+class wxRearrangeCtrl
+{
+public:
+ /**
+ Default constructor.
+
+ Create() must be called later to effectively create the control.
+ */
+ wxRearrangeCtrl();
+
+ /**
+ Constructor really creating the control.
+
+ Please see Create() for the parameters description.
+ */
+ wxRearrangeCtrl(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+ /**
+ Effectively creates the window for an object created using the default
+ constructor.
+
+ The parameters of this method are the same as for
+ wxRearrangeList::Create().
+ */
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style = 0,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxRearrangeListNameStr);
+
+ /**
+ Return the listbox which is the main part of this control.
+ */
+ wxRearrangeList *GetList() const;
+};
+
+/**
+ @class wxRearrangeDialog
+
+ A dialog allowing the user to rearrange the specified items.
+
+ This dialog can be used to allow the user to modify the order of the items
+ and to enable or disable them individually. For example:
+ @code
+ wxArrayString items;
+ items.push_back("meat");
+ items.push_back("fish");
+ items.push_back("fruits");
+ items.push_back("beer");
+ wxArrayInt order;
+ order.push_back(3);
+ order.push_back(0);
+ order.push_back(1);
+ order.push_back(2);
+
+ wxRearrangeDialog dlg(NULL,
+ "You can also uncheck the items you don't like "
+ "at all.",
+ "Sort the items in order of preference",
+ order, items);
+ if ( dlg.ShowModal() == wxID_OK ) {
+ order = dlg.GetOrder();
+ for ( size_t n = 0; n < order.size(); n++ ) {
+ if ( order[n] >= 0 ) {
+ wxLogMessage("Your most preferred item is \"%s\"",
+ items[order[n]]);
+ break;
+ }
+ }
+ }
+ @endcode
+
+ @library{wxcore}
+ @category{cmndlg}
+ */
+class wxRearrangeDialog
+{
+public:
+ /**
+ Constructor creating the dialog.
+
+ @param parent
+ The dialog parent, possibly @NULL.
+ @param message
+ The message shown inside the dialog itself, above the items list.
+ @param title
+ The title of the dialog.
+ @param order
+ The initial order of the items in the convention used by
+ wxRearrangeList.
+ @param items
+ The items to show in the dialog.
+ @param pos
+ Optional dialog position.
+ @param name
+ Optional dialog name.
+ */
+ wxRearrangeDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& title,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxString& name = wxRearrangeDialogNameStr);
+
+ /**
+ Return the array describing the order of items after it was modified by
+ the user.
+
+ Please notice that the array will contain negative items if any items
+ were unchecked. See wxRearrangeList for more information about the
+ convention used for this array.
+ */
+ wxArrayInt GetOrder() const;
+};
#endif // WX_PRECOMP
#include "wx/headerctrl.h"
+#include "wx/rearrangectrl.h"
+
+namespace
+{
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
-namespace
-{
-
const unsigned int wxNO_COLUMN = static_cast<unsigned>(-1);
+// ----------------------------------------------------------------------------
+// wxHeaderColumnsRearrangeDialog: dialog for customizing our columns
+// ----------------------------------------------------------------------------
+
+class wxHeaderColumnsRearrangeDialog : public wxRearrangeDialog
+{
+public:
+ wxHeaderColumnsRearrangeDialog(wxWindow *parent,
+ const wxArrayInt& order,
+ const wxArrayString& items)
+ : wxRearrangeDialog
+ (
+ parent,
+ _("Please select the columns to show and define their order:"),
+ _("Customize Columns"),
+ order,
+ items
+ )
+ {
+ }
+};
+
} // anonymous namespace
// ============================================================================
bool wxHeaderCtrlBase::ShowCustomizeDialog()
{
- // TODO
- return false;
+ // prepare the data for showing the dialog
+ wxArrayInt order = GetColumnsOrder();
+
+ const unsigned count = GetColumnCount();
+
+ // notice that titles are always in the index order, they will be shown
+ // rearranged according to the display order in the dialog
+ wxArrayString titles;
+ titles.reserve(count);
+ for ( unsigned n = 0; n < count; n++ )
+ titles.push_back(GetColumn(n).GetTitle());
+
+ // this loop is however over positions and not indices
+ unsigned pos;
+ for ( pos = 0; pos < count; pos++ )
+ {
+ int& idx = order[pos];
+ if ( GetColumn(idx).IsHidden() )
+ {
+ // indicate that this one is hidden
+ idx = ~idx;
+ }
+ }
+
+ // do show it
+ wxHeaderColumnsRearrangeDialog dlg(this, order, titles);
+ if ( dlg.ShowModal() != wxID_OK )
+ return false;
+
+ // and apply the changes
+ order = dlg.GetOrder();
+ for ( pos = 0; pos < count; pos++ )
+ {
+ int& idx = order[pos];
+ const bool show = idx >= 0;
+ if ( !show )
+ {
+ // make all indices positive for passing them to SetColumnsOrder()
+ idx = ~idx;
+ }
+
+ if ( show != GetColumn(idx).IsShown() )
+ UpdateColumnVisibility(idx, show);
+ }
+
+ UpdateColumnsOrder(order);
+ SetColumnsOrder(order);
+
+ return true;
}
// ============================================================================
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/common/rearrangectrl.cpp
+// Purpose: implementation of classes in wx/rearrangectrl.h
+// Author: Vadim Zeitlin
+// Created: 2008-12-15
+// RCS-ID: $Id$
+// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+#endif // WX_PRECOMP
+
+#include "wx/rearrangectrl.h"
+
+// ============================================================================
+// wxRearrangeList implementation
+// ============================================================================
+
+extern
+WXDLLIMPEXP_DATA_CORE(const char) wxRearrangeListNameStr[] = "wxRearrangeList";
+
+BEGIN_EVENT_TABLE(wxRearrangeList, wxCheckListBox)
+ EVT_CHECKLISTBOX(wxID_ANY, wxRearrangeList::OnCheck)
+END_EVENT_TABLE()
+
+bool wxRearrangeList::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style,
+ const wxValidator& validator,
+ const wxString& name)
+{
+ // construct the array of items in the order in which they should appear in
+ // the control
+ const size_t count = items.size();
+ wxCHECK_MSG( order.size() == count, false, "arrays not in sync" );
+
+ wxArrayString itemsInOrder;
+ itemsInOrder.reserve(count);
+ size_t n;
+ for ( n = 0; n < count; n++ )
+ {
+ int idx = order[n];
+ if ( idx < 0 )
+ idx = -idx - 1;
+ itemsInOrder.push_back(items[idx]);
+ }
+
+ // do create the real control
+ if ( !wxCheckListBox::Create(parent, id, pos, size, itemsInOrder,
+ style, validator, name) )
+ return false;
+
+ // and now check all the items which should be initially checked
+ for ( n = 0; n < count; n++ )
+ {
+ if ( order[n] >= 0 )
+ Check(n);
+ }
+
+ m_order = order;
+
+ return true;
+}
+
+bool wxRearrangeList::CanMoveCurrentUp() const
+{
+ const int sel = GetSelection();
+ return sel != wxNOT_FOUND && sel != 0;
+}
+
+bool wxRearrangeList::CanMoveCurrentDown() const
+{
+ const int sel = GetSelection();
+ return sel != wxNOT_FOUND && static_cast<unsigned>(sel) != GetCount() - 1;
+}
+
+bool wxRearrangeList::MoveCurrentUp()
+{
+ const int sel = GetSelection();
+ if ( sel == wxNOT_FOUND || sel == 0 )
+ return false;
+
+ Swap(sel, sel - 1);
+ SetSelection(sel - 1);
+
+ return true;
+}
+
+bool wxRearrangeList::MoveCurrentDown()
+{
+ const int sel = GetSelection();
+ if ( sel == wxNOT_FOUND || static_cast<unsigned>(sel) == GetCount() - 1 )
+ return false;
+
+ Swap(sel, sel + 1);
+ SetSelection(sel + 1);
+
+ return true;
+}
+
+void wxRearrangeList::Swap(int pos1, int pos2)
+{
+ wxSwap(m_order[pos1], m_order[pos2]);
+
+ const wxString stringTmp = GetString(pos1);
+ const bool checkedTmp = IsChecked(pos1);
+
+ SetString(pos1, GetString(pos2));
+ Check(pos1, IsChecked(pos2));
+
+ SetString(pos2, stringTmp);
+ Check(pos2, checkedTmp);
+}
+
+void wxRearrangeList::OnCheck(wxCommandEvent& event)
+{
+ // update the internal state to match the new item state
+ const int n = event.GetInt();
+
+ const bool checked = IsChecked(n);
+ wxASSERT_MSG( (m_order[n] >= 0) == !checked,
+ "discrepancy between internal state and GUI" );
+
+ m_order[n] = ~m_order[n];
+}
+
+// ============================================================================
+// wxRearrangeCtrl implementation
+// ============================================================================
+
+BEGIN_EVENT_TABLE(wxRearrangeCtrl, wxPanel)
+ EVT_UPDATE_UI(wxID_UP, wxRearrangeCtrl::OnUpdateButtonUI)
+ EVT_UPDATE_UI(wxID_DOWN, wxRearrangeCtrl::OnUpdateButtonUI)
+
+ EVT_BUTTON(wxID_UP, wxRearrangeCtrl::OnButton)
+ EVT_BUTTON(wxID_DOWN, wxRearrangeCtrl::OnButton)
+END_EVENT_TABLE()
+
+void wxRearrangeCtrl::Init()
+{
+ m_list = NULL;
+}
+
+bool
+wxRearrangeCtrl::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ long style,
+ const wxValidator& validator,
+ const wxString& name)
+{
+ // create all the windows
+ if ( !wxPanel::Create(parent, id, pos, size, wxTAB_TRAVERSAL, name) )
+ return false;
+
+ m_list = new wxRearrangeList(this, wxID_ANY,
+ wxDefaultPosition, wxDefaultSize,
+ order, items,
+ style, validator);
+ wxButton * const btnUp = new wxButton(this, wxID_UP);
+ wxButton * const btnDown = new wxButton(this, wxID_DOWN);
+
+ // arrange them in a sizer
+ wxSizer * const sizerBtns = new wxBoxSizer(wxVERTICAL);
+ sizerBtns->Add(btnUp, wxSizerFlags().Centre().Border(wxBOTTOM));
+ sizerBtns->Add(btnDown, wxSizerFlags().Centre().Border(wxTOP));
+
+ wxSizer * const sizerTop = new wxBoxSizer(wxHORIZONTAL);
+ sizerTop->Add(m_list, wxSizerFlags(1).Expand().Border(wxRIGHT));
+ sizerTop->Add(sizerBtns, wxSizerFlags(0).Centre().Border(wxLEFT));
+ SetSizer(sizerTop);
+
+ m_list->SetFocus();
+
+ return true;
+}
+
+void wxRearrangeCtrl::OnUpdateButtonUI(wxUpdateUIEvent& event)
+{
+ event.Enable( event.GetId() == wxID_UP ? m_list->CanMoveCurrentUp()
+ : m_list->CanMoveCurrentDown() );
+}
+
+void wxRearrangeCtrl::OnButton(wxCommandEvent& event)
+{
+ if ( event.GetId() == wxID_UP )
+ m_list->MoveCurrentUp();
+ else
+ m_list->MoveCurrentDown();
+}
+
+// ============================================================================
+// wxRearrangeDialog implementation
+// ============================================================================
+
+extern
+WXDLLIMPEXP_DATA_CORE(const char) wxRearrangeDialogNameStr[] = "wxRearrangeDlg";
+
+wxRearrangeDialog::wxRearrangeDialog(wxWindow *parent,
+ const wxString& message,
+ const wxString& title,
+ const wxArrayInt& order,
+ const wxArrayString& items,
+ const wxPoint& pos,
+ const wxString& name)
+ : wxDialog(parent, wxID_ANY, title,
+ pos, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER,
+ name)
+{
+ m_ctrl = new wxRearrangeCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ order, items);
+
+ wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
+ sizerTop->Add(new wxStaticText(this, wxID_ANY, message),
+ wxSizerFlags().DoubleBorder());
+ sizerTop->Add(m_ctrl,
+ wxSizerFlags(1).Expand().Border());
+ sizerTop->Add(CreateSeparatedButtonSizer(wxOK | wxCANCEL),
+ wxSizerFlags().Expand().Border());
+ SetSizerAndFit(sizerTop);
+}
GetOwner()->SendEvent(wxEVT_GRID_COL_SIZE, -1, idx);
}
+ // overridden to react to the columns order changes in the customization
+ // dialog
+ virtual void UpdateColumnsOrder(const wxArrayInt& order)
+ {
+ GetOwner()->SetColumnsOrder(order);
+ }
+
+
// event handlers forwarding wxHeaderCtrl events to wxGrid
void OnClick(wxHeaderCtrlEvent& event)
{