From 9b73db3c34aefd98080b425459322fa821ae271f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 16 Jul 1999 23:06:35 +0000 Subject: [PATCH] 1. fixed Maximise() mismatch between wxFrame and wxMDIFrame 2. tried (unsuccessfully) to fix the warning in pnghand.cpp 3. fixes for VC and BCC makefiles generation with tmake (still untested) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3021 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/bcc.t | 8 +- distrib/msw/tmake/filelist.t | 2 - distrib/msw/tmake/filelist.txt | 2 +- distrib/msw/tmake/vc.t | 5 + include/wx/msw/mdi.h | 2 +- samples/minimal/minimal.cpp | 47 +++++++- src/msw/makefile.bcc | 19 +-- src/msw/mdi.cpp | 18 ++- src/msw/pnghand.cpp | 212 +++++++++++++++++---------------- 9 files changed, 193 insertions(+), 122 deletions(-) diff --git a/distrib/msw/tmake/bcc.t b/distrib/msw/tmake/bcc.t index b3c3ffe111..97b91352a0 100644 --- a/distrib/msw/tmake/bcc.t +++ b/distrib/msw/tmake/bcc.t @@ -28,8 +28,11 @@ #! needs extra files (sql*.h) so not compiled by default. next if $file =~ /^odbc\./; + $isCFile = $file =~ /\.c$/; $file =~ s/cp?p?$/obj/; - $project{"WXCOMMONOBJS"} .= "\$(MSWDIR)\\" . $file . " " + $obj = "\$(MSWDIR)\\" . $file . " "; + $project{"WXCOMMONOBJS"} .= $obj; + $project{"WXCOBJS"} .= $obj if $isCFile; } #! special hack for Borland in 16 bits needs this file @@ -172,8 +175,9 @@ $(COMMDIR)\lex_yy.c: $(COMMDIR)\doslex.c my @objs = split; foreach (@objs) { $text .= $_ . ": "; + $suffix = $project{"WXCOBJS"} =~ /\Q$_/ ? "c" : '$(SRCSUFF)'; s/MSWDIR/COMMDIR/; - s/obj/\$(SRCSUFF)/; + s/obj/$suffix/; $text .= $_ . "\n\n"; } #$} diff --git a/distrib/msw/tmake/filelist.t b/distrib/msw/tmake/filelist.t index 07d041c9e2..fa697af5e4 100644 --- a/distrib/msw/tmake/filelist.t +++ b/distrib/msw/tmake/filelist.t @@ -9,8 +9,6 @@ #${ open(FILELIST, "filelist.txt") or die "Can't open filelist file: $!\n"; - my %wxfiles; - line: while ( defined($_ = ) ) { chomp; diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index b8ecf226ed..5a94040c22 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -185,7 +185,7 @@ metafile.cpp M minifram.cpp M msgdlg.cpp M nativdlg.cpp M -notebook.cpp M +notebook.cpp M 32 oleutils.cpp M O ownerdrw.cpp M palette.cpp M diff --git a/distrib/msw/tmake/vc.t b/distrib/msw/tmake/vc.t index e770d955aa..32c9b3dd20 100644 --- a/distrib/msw/tmake/vc.t +++ b/distrib/msw/tmake/vc.t @@ -102,6 +102,11 @@ $(CPPFLAGS) /Fo$@ /c /Tp $< $(CPPFLAGS) /Fo$@ /c /Tp $< << +{..\common}.c{..\common\$D}.obj: + cl @<< +$(CPPFLAGS) /Fo$@ /c /Tc $< +<< + {..\msw}.cpp{..\msw\$D}.obj: cl @<< $(CPPFLAGS) /Fo$@ /c /Tp $< diff --git a/include/wx/msw/mdi.h b/include/wx/msw/mdi.h index 397ab3f1dd..828df13b23 100644 --- a/include/wx/msw/mdi.h +++ b/include/wx/msw/mdi.h @@ -143,7 +143,7 @@ public: const wxString& name = wxFrameNameStr); // MDI operations - virtual void Maximize(); + virtual void Maximize(bool maximize = TRUE); virtual void Restore(); virtual void Activate(); diff --git a/samples/minimal/minimal.cpp b/samples/minimal/minimal.cpp index 82e36b96d9..b65cb80df0 100644 --- a/samples/minimal/minimal.cpp +++ b/samples/minimal/minimal.cpp @@ -105,7 +105,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Minimal_Quit, MyFrame::OnQuit) EVT_MENU(Minimal_About, MyFrame::OnAbout) - EVT_BUTTON(-1, MyFrame::OnTest) + EVT_MENU(Minimal_Test, MyFrame::OnTest) EVT_PAINT(MyFrame::OnPaint) END_EVENT_TABLE() @@ -159,6 +159,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) wxMenu *menuFile = new wxMenu(wxMENU_TEAROFF); menuFile->Append(Minimal_About, "&About...\tCtrl-A", "Show about dialog"); + menuFile->Append(Minimal_Test, "&Test...\tCtrl-T", "Test"); menuFile->AppendSeparator(); menuFile->Append(Minimal_Quit, "E&xit\tAlt-X", "Quit this program"); @@ -202,8 +203,52 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) wxMessageBox(msg, "About Minimal", wxOK | wxICON_INFORMATION, this); } +struct Foo +{ + Foo(int n_) { n = n_; } + + int n; +}; + +WX_DECLARE_LIST(Foo, FooList); + +#include + +WX_DEFINE_LIST(FooList); + +int FooSort(const Foo **item1, const Foo **item2) +{ + return (*item2)->n - (*item1)->n; +} + +void ShowList(const FooList& list) +{ + wxString msg, str; + msg = "The list elements: ("; + for ( FooList::Node *node = list.GetFirst(); node; node = node->GetNext() ) + { + if ( !!str ) + msg += ", "; + str.Printf("%d", node->GetData()->n); + msg += str; + } + + msg += ')'; + + wxMessageBox(msg, "List contents", wxOK | wxICON_INFORMATION); +} + void MyFrame::OnTest(wxCommandEvent& event) { + FooList list; + list.Append(new Foo(12)); + list.Append(new Foo(3)); + list.Append(new Foo(1)); + list.Append(new Foo(7)); + list.Append(new Foo(4)); + ShowList(list); + list.Sort(FooSort); + ShowList(list); } void MyFrame::OnPaint(wxPaintEvent& event) diff --git a/src/msw/makefile.bcc b/src/msw/makefile.bcc index 4c1467510e..5a0eb1858e 100644 --- a/src/msw/makefile.bcc +++ b/src/msw/makefile.bcc @@ -1,8 +1,6 @@ - - -# This file was automatically generated by tmake at 21:00, 1999/07/14 +# This file was automatically generated by tmake at 01:04, 1999/07/17 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T! # @@ -100,7 +98,6 @@ GENERICOBJS= $(MSWDIR)\busyinfo.obj \ COMMONOBJS = \ $(MSWDIR)\y_tab.obj \ - $(MSWDIR)\extended.obj \ $(MSWDIR)\cmndata.obj \ $(MSWDIR)\config.obj \ $(MSWDIR)\date.obj \ @@ -114,6 +111,8 @@ COMMONOBJS = \ $(MSWDIR)\dynarray.obj \ $(MSWDIR)\dynlib.obj \ $(MSWDIR)\event.obj \ + $(MSWDIR)\extended.obj \ + $(MSWDIR)\ffile.obj \ $(MSWDIR)\file.obj \ $(MSWDIR)\fileconf.obj \ $(MSWDIR)\filefn.obj \ @@ -146,6 +145,7 @@ COMMONOBJS = \ $(MSWDIR)\string.obj \ $(MSWDIR)\tbarbase.obj \ $(MSWDIR)\tbarsmpl.obj \ + $(MSWDIR)\textcmn.obj \ $(MSWDIR)\textfile.obj \ $(MSWDIR)\time.obj \ $(MSWDIR)\timercmn.obj \ @@ -212,7 +212,6 @@ MSWOBJS = $(MSWDIR)\accel.obj \ $(MSWDIR)\minifram.obj \ $(MSWDIR)\msgdlg.obj \ $(MSWDIR)\nativdlg.obj \ - $(MSWDIR)\notebook.obj \ $(MSWDIR)\ownerdrw.obj \ $(MSWDIR)\palette.obj \ $(MSWDIR)\pen.obj \ @@ -364,8 +363,6 @@ $(MSWDIR)\msgdlg.obj: $(MSWDIR)\msgdlg.$(SRCSUFF) $(MSWDIR)\nativdlg.obj: $(MSWDIR)\nativdlg.$(SRCSUFF) -$(MSWDIR)\notebook.obj: $(MSWDIR)\notebook.$(SRCSUFF) - $(MSWDIR)\ownerdrw.obj: $(MSWDIR)\ownerdrw.$(SRCSUFF) $(MSWDIR)\palette.obj: $(MSWDIR)\palette.$(SRCSUFF) @@ -451,6 +448,10 @@ $(MSWDIR)\dynlib.obj: $(COMMDIR)\dynlib.$(SRCSUFF) $(MSWDIR)\event.obj: $(COMMDIR)\event.$(SRCSUFF) +$(MSWDIR)\extended.obj: $(COMMDIR)\extended.c + +$(MSWDIR)\ffile.obj: $(COMMDIR)\ffile.$(SRCSUFF) + $(MSWDIR)\file.obj: $(COMMDIR)\file.$(SRCSUFF) $(MSWDIR)\fileconf.obj: $(COMMDIR)\fileconf.$(SRCSUFF) @@ -515,6 +516,8 @@ $(MSWDIR)\tbarbase.obj: $(COMMDIR)\tbarbase.$(SRCSUFF) $(MSWDIR)\tbarsmpl.obj: $(COMMDIR)\tbarsmpl.$(SRCSUFF) +$(MSWDIR)\textcmn.obj: $(COMMDIR)\textcmn.$(SRCSUFF) + $(MSWDIR)\textfile.obj: $(COMMDIR)\textfile.$(SRCSUFF) $(MSWDIR)\time.obj: $(COMMDIR)\time.$(SRCSUFF) @@ -525,7 +528,7 @@ $(MSWDIR)\tokenzr.obj: $(COMMDIR)\tokenzr.$(SRCSUFF) $(MSWDIR)\txtstrm.obj: $(COMMDIR)\txtstrm.$(SRCSUFF) -$(MSWDIR)\unzip.obj: $(COMMDIR)\unzip.$(SRCSUFF) +$(MSWDIR)\unzip.obj: $(COMMDIR)\unzip.c $(MSWDIR)\utilscmn.obj: $(COMMDIR)\utilscmn.$(SRCSUFF) diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 551c1cc4ec..44a6a21faa 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -729,25 +729,35 @@ void wxMDIChildFrame::InternalSetMenuBar() // MDI operations // --------------------------------------------------------------------------- -void wxMDIChildFrame::Maximize() +void wxMDIChildFrame::Maximize(bool maximize) { wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent(); if ( parent && parent->GetClientWindow() ) - ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIMAXIMIZE, (WPARAM) GetHwnd(), 0); + { + ::SendMessage(GetWinHwnd(parent->GetClientWindow()), + maximize ? WM_MDIMAXIMIZE : WM_MDIRESTORE, + (WPARAM)GetHwnd(), 0); + } } void wxMDIChildFrame::Restore() { wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent(); if ( parent && parent->GetClientWindow() ) - ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIRESTORE, (WPARAM) GetHwnd(), 0); + { + ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIRESTORE, + (WPARAM) GetHwnd(), 0); + } } void wxMDIChildFrame::Activate() { wxMDIParentFrame *parent = (wxMDIParentFrame *)GetParent(); if ( parent && parent->GetClientWindow() ) - ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIACTIVATE, (WPARAM) GetHwnd(), 0); + { + ::SendMessage(GetWinHwnd(parent->GetClientWindow()), WM_MDIACTIVATE, + (WPARAM) GetHwnd(), 0); + } } // --------------------------------------------------------------------------- diff --git a/src/msw/pnghand.cpp b/src/msw/pnghand.cpp index c855358dd7..0cb773c7c0 100644 --- a/src/msw/pnghand.cpp +++ b/src/msw/pnghand.cpp @@ -74,7 +74,7 @@ ima_png_error(png_struct *png_ptr, char *message) // static wxGifReaderIter* iter; wxPalette *wxCopyPalette(const wxPalette *cmap); -wxPNGReader::wxPNGReader(void) +wxPNGReader::wxPNGReader() { filetype = 0; RawImage = NULL; // Image data @@ -265,7 +265,7 @@ void wxPNGReader::NullData() Palette = NULL; } -wxBitmap* wxPNGReader::GetBitmap(void) +wxBitmap* wxPNGReader::GetBitmap() { wxBitmap *bitmap = new wxBitmap; if ( InstantiateBitmap(bitmap) ) @@ -354,7 +354,7 @@ wxPalette *wxCopyPalette(const wxPalette *cmap) return newCmap; } -wxMask *wxPNGReader::CreateMask(void) +wxMask *wxPNGReader::CreateMask() { HBITMAP hBitmap = ::CreateBitmap(GetWidth(), GetHeight(), 1, 1, NULL); @@ -385,141 +385,147 @@ wxMask *wxPNGReader::CreateMask(void) bool wxPNGReader::ReadFile(wxChar * ImageFileName) { - int number_passes; + int number_passes; - if (ImageFileName) - wxStrcpy(filename, ImageFileName); + if (ImageFileName) + wxStrcpy(filename, ImageFileName); - FILE *fp; - png_struct *png_ptr; - png_info *info_ptr; - wxPNGReaderIter iter(this); + FILE *fp; + png_struct *png_ptr; + png_info *info_ptr; - /* open the file */ - fp = fopen(wxConvFile.cWX2MB(filename), "rb"); - if (!fp) - return FALSE; + /* open the file */ + fp = fopen(wxConvFile.cWX2MB(filename), "rb"); + if (!fp) + return FALSE; - /* allocate the necessary structures */ - png_ptr = new (png_struct); - if (!png_ptr) - { - fclose(fp); - return FALSE; - } + /* allocate the necessary structures */ + png_ptr = new (png_struct); + if (!png_ptr) + { + fclose(fp); + return FALSE; + } - info_ptr = new (png_info); - if (!info_ptr) - { - fclose(fp); - delete(png_ptr); - return FALSE; - } - /* set error handling */ - if (setjmp(png_ptr->jmpbuf)) - { - png_read_destroy(png_ptr, info_ptr, (png_info *)0); - fclose(fp); - delete(png_ptr); - delete(info_ptr); + info_ptr = new (png_info); + if (!info_ptr) + { + fclose(fp); + delete(png_ptr); + return FALSE; + } + /* set error handling */ + if (setjmp(png_ptr->jmpbuf)) + { + png_read_destroy(png_ptr, info_ptr, (png_info *)0); + fclose(fp); + delete(png_ptr); + delete(info_ptr); - /* If we get here, we had a problem reading the file */ - return FALSE; - } - //png_set_error(ima_png_error, NULL); + /* If we get here, we had a problem reading the file */ + return FALSE; + } + //png_set_error(ima_png_error, NULL); - /* initialize the structures, info first for error handling */ - png_info_init(info_ptr); - png_read_init(png_ptr); + /* initialize the structures, info first for error handling */ + png_info_init(info_ptr); + png_read_init(png_ptr); - /* set up the input control */ - png_init_io(png_ptr, fp); + /* set up the input control */ + png_init_io(png_ptr, fp); - /* read the file information */ - png_read_info(png_ptr, info_ptr); + /* read the file information */ + png_read_info(png_ptr, info_ptr); - /* allocate the memory to hold the image using the fields - of png_info. */ - png_color_16 my_background={ 0, 31, 127, 255, 0 }; + /* allocate the memory to hold the image using the fields + of png_info. */ + png_color_16 my_background={ 0, 31, 127, 255, 0 }; - if (info_ptr->valid & PNG_INFO_bKGD) + if (info_ptr->valid & PNG_INFO_bKGD) { - png_set_background(png_ptr, &(info_ptr->background), - PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); + png_set_background(png_ptr, &(info_ptr->background), + PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); if ( info_ptr->num_palette > 0 ) bgindex = info_ptr->background.index; } - else { - png_set_background(png_ptr, &my_background, - PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); + else { + png_set_background(png_ptr, &my_background, + PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); // Added by JACS: guesswork! if ( info_ptr->num_trans != 0 ) bgindex = info_ptr->num_trans - 1 ; - } + } - /* tell libpng to strip 16 bit depth files down to 8 bits */ - if (info_ptr->bit_depth == 16) - png_set_strip_16(png_ptr); + /* tell libpng to strip 16 bit depth files down to 8 bits */ + if (info_ptr->bit_depth == 16) + png_set_strip_16(png_ptr); - int pixel_depth=(info_ptr->pixel_depth<24) ? info_ptr->pixel_depth: 24; - Create(info_ptr->width, info_ptr->height, pixel_depth, - info_ptr->color_type); + int pixel_depth=(info_ptr->pixel_depth<24) ? info_ptr->pixel_depth: 24; + Create(info_ptr->width, info_ptr->height, pixel_depth, + info_ptr->color_type); - if (info_ptr->num_palette>0) + if (info_ptr->num_palette>0) { - SetPalette((int)info_ptr->num_palette, (rgb_color_struct*)info_ptr->palette); + SetPalette((int)info_ptr->num_palette, (rgb_color_struct*)info_ptr->palette); } - int row_stride = info_ptr->width * ((pixel_depth+7)>>3); - // printf("P = %d D = %d RS= %d ", info_ptr->num_palette, info_ptr->pixel_depth,row_stride); -// printf("CT = %d TRS = %d BD= %d ", info_ptr->color_type, info_ptr->valid & PNG_INFO_tRNS,info_ptr->bit_depth); + int row_stride = info_ptr->width * ((pixel_depth+7)>>3); + // printf("P = %d D = %d RS= %d ", info_ptr->num_palette, info_ptr->pixel_depth,row_stride); + // printf("CT = %d TRS = %d BD= %d ", info_ptr->color_type, info_ptr->valid & PNG_INFO_tRNS,info_ptr->bit_depth); - byte *row_pointers = new byte[row_stride]; + byte *row_pointers = new byte[row_stride]; - /* turn on interlace handling */ - if (info_ptr->interlace_type) - number_passes = png_set_interlace_handling(png_ptr); - else - number_passes = 1; -// printf("NP = %d ", number_passes); + /* turn on interlace handling */ + if (info_ptr->interlace_type) + number_passes = png_set_interlace_handling(png_ptr); + else + number_passes = 1; + // printf("NP = %d ", number_passes); + + // don't use the object to prevent warnings from VC++ about "unportable + // interaction between setjmp and C++ object destruction" (this is a correct + // warning, of course!) + wxPNGReaderIter *iter = new wxPNGReaderIter(this); + for (int pass=0; pass< number_passes; pass++) + { + iter->upset(); + int y=0; + do { + //(unsigned char *)iter.GetRow(); + if (info_ptr->interlace_type) { + if (pass>0) + iter->GetRow(row_pointers, row_stride); + png_read_row(png_ptr, row_pointers, NULL); + } + else + png_read_row(png_ptr, row_pointers, NULL); - for (int pass=0; pass< number_passes; pass++) { - iter.upset(); - int y=0; - do { -// (unsigned char *)iter.GetRow(); - if (info_ptr->interlace_type) { - if (pass>0) - iter.GetRow(row_pointers, row_stride); - png_read_row(png_ptr, row_pointers, NULL); + iter->SetRow(row_pointers, row_stride); + y++; + } while(iter->PrevRow()); + // printf("Y=%d ",y); } - else - png_read_row(png_ptr, row_pointers, NULL); - iter.SetRow(row_pointers, row_stride); - y++; - } while(iter.PrevRow()); -// printf("Y=%d ",y); - } - delete[] row_pointers; + delete iter; + delete[] row_pointers; - /* read the rest of the file, getting any additional chunks - in info_ptr */ - png_read_end(png_ptr, info_ptr); + /* read the rest of the file, getting any additional chunks + in info_ptr */ + png_read_end(png_ptr, info_ptr); - /* clean up after the read, and free any memory allocated */ - png_read_destroy(png_ptr, info_ptr, (png_info *)0); + /* clean up after the read, and free any memory allocated */ + png_read_destroy(png_ptr, info_ptr, (png_info *)0); - /* free the structures */ - delete(png_ptr); - delete(info_ptr); + /* free the structures */ + delete(png_ptr); + delete(info_ptr); - /* close the file */ - fclose(fp); + /* close the file */ + fclose(fp); - /* that's it */ - return TRUE; + /* that's it */ + return TRUE; } -- 2.45.2